Geekish Stuff(5/5)

3,基本没内容,纯笔记,没整理,sam急着要,随便发,欢迎忽视以下所有内容直接跳到最后几行-_-

Calystegia是我取的hostname,是一种花,用花来做名字很浪漫。所有Calystegia字样的部分可以自行替换。

A. 虚拟化。不止VPS,独立主机也可尝试虚拟化来合理划分资源,同时还附带有了时迁移技、热备份等优势。虚拟化需要硬件的支持,才能有理想的效果,如 Intel的VT系列等。杯具的是我现在没有支持VT的CPU,只能勉勉强强跑着vbox,不过还好我只是调试用。所以一些IDC拿着Core之类的桌面 级CPU的VPS产品,还是不选择为妙。下面说说我见过并且考虑过的几种虚拟化技术:
Xen,这是我个人的第一选择,原因很简单,杀手级的磁盘性 能。部署一个web服务,最重要的差不多就是磁盘性能。Xen整体也丝毫不逊色于其他,不会出现所谓的木桶效应,同时久经考验(对比之下KVM是个和 Xen很类似的东西,不过算是比较新的)。Xen在隔离度,特别是磁盘IO的隔离度上Xen事实上是比较差的,但从另外一方面来解析,这能提供更好的性能 同时最大限度地合理分配资源。
OpenVZ,这是OS级的虚拟方案,但似乎应用在高压生产环境中,表现不见得会比Xen好(可见Xen是多么强 悍)。但是同一主机可以运行很多OpenVZ(甚至可能达4位数),所以似乎很多VPS产品都用OpenVZ(当然价格也比较便宜)。另外就是 OpenVZ不支持swap,类似的限制还有很多,所以就是独立性不强。
VMware,大部分都是以完全虚拟化形式部署的,所以隔离程度会好于前面2者,商业化很成功,比较让我在意就是价格因素(穷啊囧),另外VMware是闭源的。

B.OS。主要用得比较多的还是几个Linux发行版。
CentOS,RHEL的社区版,和RHEL一样水准的工业级品质,甚至有些东西就是专门给红帽系用的。所以理所当然在生产环境中,要方便点,就用它了。
Debian/Ubuntu,比起CentOS来说,似乎deb源的软件总是比yum源的新,东西也更多一点,如果不想自己编译太多东西,就用它了。
Gentoo,几年前在pcbeta论坛接触过这东西,印象中是一个以轻巧极致为目标的发行版,按我的理解目前也应该还是保持当初的状态吧,似乎资源占用会比以上二者好一点。

4.nginx0.8.x php5.3.x mysql5.1.x笔记

均使用截止12月19号-22号的最新版本,并且尽可能地选用stable版

CentOS 5,minimal安装之后占了差不多800m吧,很小,检查了一下inittab、chkconfig、yum list installed等,例如多余tty和服务都没有,不过连常用的vi、patch也没有(sam那台他说连tar也没有)。版本是较旧的5.2了。

yum install vim-minimal
没有vi,先安装

free
查看swap信息,觉得swap少了点,于是再增加一些,具体加多少根据内存决定。

cd /var/
dd if=/dev/zero of=swapfile bs=1024 count=262144
/sbin/mkswap swapfile
/sbin/swapon swapfile
重新分区太麻烦,在var直接创建一个swap文件
vi /etc/fstab
加入
/var/swapfile swap swap defaults 0 0

yum update
更新整个系统到5.4,86m左右,yum源在美国,服务器也在美国,下载得很快

yum -y install patch gcc gcc-c++ automake autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
安装编译需要的类库、软件等

yum clean all
清除yum缓存

cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
时区调整到上海

安装php-fpm,php官方的svn上已经有内嵌fpm的版本(预计在5.3.3或者5.3.2中正式stable),不过这里还是通过补丁方式安装stable的5.3.1。

安装libconv
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
tar zxvf libiconv-1.13.1.tar.gz
cd libiconv-1.13.1/
./configure –prefix=/usr/local
make
make install
cd ../

安装常用加解密、hash库
wget “http://downloads.sourceforge.net/mcrypt/libmcrypt-2.5.8.tar.gz?modtime=1171868460&big_mirror=0″
wget “http://downloads.sourceforge.net/mcrypt/mcrypt-2.6.8.tar.gz?modtime=1194463373&big_mirror=0″
wget “http://downloads.sourceforge.net/mhash/mhash-0.9.9.9.tar.gz?modtime=1175740843&big_mirror=0″

tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure –enable-ltdl-install
make
make install
cd ../../

tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make
make install
cd ../

ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure
make
make install
cd ../
安装mysql
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.41.tar.gz/from/http://mysql.he.net/

/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
用户mysql
tar zxvf mysql-5.1.41.tar.gz
cd mysql-5.1.41/
./configure –prefix=/usr/local/mysql/ –enable-assembler –with-extra-charsets=complex –enable-thread-safe-client –with-big-tables –with-readline –with-ssl –with-embedded-server –enable-local-infile –with-plugins=innobase
make && make install
chmod +w /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql
cd ../

mkdir -p /data/mysql/
chown -R mysql:mysql /data/mysql/
/usr/local/mysql/bin/mysql_install_db –basedir=/usr/local/mysql –datadir=/data/mysql –user=mysql

cp mysql-5.1.41/support-files/my-medium.cnf /etc/my.cnf

cp mysql-5.1.41/support-files/mysql.server /etc/init.d/mysqld
vi /etc/init.d/mysqld
找到
basedir=
datadir=
插入
basedir=/usr/local/mysql
datadir=/data/mysql

chmod +x /etc/init.d/mysqld
chkconfig –add mysqld
service mysqld start
如果成功,设置为开机启动
chkconfig mysqld on

export LE_VER=1.4.12-stable
wget “http://www.monkey.org/~provos/libevent-$LE_VER.tar.gz”
tar -zxvf “libevent-$LE_VER.tar.gz”
cd “libevent-$LE_VER”
./configure && make
DESTDIR=$PWD make install
export LIBEVENT_SEARCH_PATH=”$PWD/usr/local”
cd ../
安装libevent

下载解压php-fpm的patch

export PHP_VER=5.3.1
wget “http://launchpad.net/php-fpm/master/0.6/+download/php-fpm-0.6~$PHP_VER.tar.gz”
tar -zxvf “php-fpm-0.6~$PHP_VER.tar.gz”
php-fpm-0.6-$PHP_VER/generate-fpm-patch

下载解压php

wget “http://us.php.net/get/php-$PHP_VER.tar.gz/from/us.php.net/mirror”
tar xvfz “php-$PHP_VER.tar.gz”
cd “php-$PHP_VER”

应用patch并编译

patch -p1 < ../fpm.patch
./buildconf –force
mkdir fpm-build && cd fpm-build
../configure –with-fpm –prefix=/usr/local/php –with-libevent=”$LIBEVENT_SEARCH_PATH” –with-config-file-path=/usr/local/php/etc –with-mysql=/usr/local/mysql –with-mysqli=/usr/local/mysql/bin/mysql_config –with-iconv-dir=/usr/local –with-freetype-dir –with-jpeg-dir –with-png-dir –with-zlib –with-libxml-dir=/usr –enable-xml –enable-discard-path –enable-safe-mode –enable-bcmath –enable-shmop –enable-sysvsem –enable-inline-optimization –with-curl –with-curlwrappers –enable-mbregex –enable-mbstring –with-mcrypt –with-gd –enable-gd-native-ttf –with-openssl –with-mhash –enable-pcntl –enable-sockets –with-ldap –with-ldap-sasl –with-xmlrpc –enable-zip –enable-soap –without-pear
make ZEND_EXTRA_LIBS=’-liconv’
make install
cd ../
mkdir -p /usr/local/php/etc
cp php.ini-production /usr/local/php/etc/php.ini
cd ../
切换到php目录
cd /usr/local/php
curl http://pear.php.net/go-pear | /usr/local/php/bin/php
在线安装pear,安装完毕后切回之前目录

安装几个php扩展
wget http://pecl.php.net/get/memcache-2.2.5.tgz
wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6-rc1.tar.bz2
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5/
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config
make
make install
cd ../

tar jxvf eaccelerator-0.9.6-rc1.tar.bz2
cd eaccelerator-0.9.6-rc1/
/usr/local/php/bin/phpize
./configure –enable-eaccelerator=shared –with-php-config=/usr/local/php/bin/php-config
make
make install
cd ../

tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2/
/usr/local/php/bin/phpize
./configure –with-php-config=/usr/local/php/bin/php-config –with-pdo-mysql=/usr/local/mysql
make
make install
cd ../

修改php.ini文件
vi /usr/local/php/etc/php.ini
找到
; extension_dir = “./”
改为
extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/”
找到
;extension=php_zip.dll
后面加入
extension=memcache.so
extension=pdo_mysql.so

文件末尾

[eaccelerator]
zend_extension=”/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so”
eaccelerator.shm_size=”2″
eaccelerator.cache_dir=”/tmp/eaccelerator”
eaccelerator.enable=”1″
eaccelerator.optimizer=”1″
eaccelerator.check_mtime=”1″
eaccelerator.debug=”0″
eaccelerator.filter=””
eaccelerator.shm_max=”0″
eaccelerator.shm_ttl=”3600″
eaccelerator.shm_prune_period=”3600″
eaccelerator.shm_only=”0″
eaccelerator.compress=”1″
eaccelerator.compress_level=”9″
保存退出

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
创建eaccelerator缓存目录

安装nginx所需的pcre库
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.00.tar.gz
tar zxvf pcre-8.00.tar.gz
cd pcre-8.00/
./configure
make && make install
cd ../

创建www用户,nginx和ftp用
/usr/sbin/groupadd www
/usr/sbin/useradd -g www www

安装nginx
wget http://nginx.org/download/nginx-0.8.30.tar.gz
tar zxvf nginx-0.8.30.tar.gz
cd nginx-0.8.30/
./configure –user=www –group=www –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module
make && make install
cd ../

穿件nginx日志目录

mkdir -p /data/logs/nginx
chmod +w /data/logs/nginx
chown -R www:www /data/logs/nginx

init脚本
vi /etc/init.d/nginx
写入这里的init脚本

http://wiki.nginx.org/index.php?title=RedHatNginxInitScript&action=raw&file=nginx

nginx=”/usr/sbin/nginx”
改为
nginx=”/usr/local/nginx/sbin/nginx”

NGINX_CONF_FILE=”/etc/nginx/nginx.conf”
改为
NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf”

保存后

chmod +x /etc/init.d/nginx
chkconfig –add nginx
service nginx start

访问,应该能够看到
Welcome to nginx!

chkconfig nginx on
设置开机自启动

vi /usr/local/nginx/conf/nginx.conf
先写入如下内容

user    www www;

worker_processes    5;

error_log    /data/logs/nginx/error.log    crit;

pid            /var/run/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile    65535;

events
{
use epoll;
worker_connections    65535;
}

http
{
include            mime.types;
default_type        application/octet-stream;

server_names_hash_bucket_size    128;
client_header_buffer_size        32k;
large_client_header_buffers        4 32k;
client_max_body_size            8m;

sendfile    on;
tcp_nopush    on;

keepalive_timeout    60;

tcp_nodelay    on;

fastcgi_connect_timeout    300;
fastcgi_send_timeout    300;
fastcgi_read_timeout    300;
fastcgi_buffer_size        64k;
fastcgi_buffers            4 64k;
fastcgi_busy_buffers_size    128k;
fastcgi_temp_file_write_size    128k;

gzip on;
gzip_min_length        1k;
gzip_buffers        4 16k;
gzip_http_version    1.0;
gzip_comp_level        2;
gzip_types            text/plain application/x-javascript text/css application/xml;
gzip_vary            on;

log_format            access    ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for';
#limit_zone            crawler    $binary_remote_addr    10m;

server
{
listen        80;
server_name    _;
index        index.html index.htm;
root        /data/web/nginx;

location /status/ {
stub_status    on;
}

access_log    off;
}
}

创建web目录
mkdir -p /data/web/nginx

vi /usr/local/nginx/conf/fastcgi_php.conf

写入
fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with –enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

vi /usr/local/nginx/conf/nginx.conf
在server里的root后写入
location ~ .*.(php|php5)?$
{
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_php.conf;
}
即表示在这个站启用php

/data/web/nginx/test.php

启动php-fpm
service php-fpm start
重载nginx
service nginx reload

访问test.php检查各项设置

chkconfig php-fpm on
设置php-fpm自启动

reboot
重启下,同时测试各种自启动是否正常,然后来安装pure-ftpd

ps auxf | grep ‘nginx’ | grep -v grep | wc -l
ps auxf | grep ‘php-fpm’ | grep -v grep | wc -l
ps auxf | grep ‘mysqld’ | grep -v grep | wc -l

查看各个进程数量,按照之前的设置此时应该是6 6 2,然后切换回之前的工作目录,执行

wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.27.tar.gz
tar zxvf pure-ftpd-1.0.27.tar.gz
cd pure-ftpd-1.0.27/
ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.16 /usr/lib/libmysqlclient.so.16
ln -s /usr/local/mysql/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so.16.0.0
./configure –prefix=/usr/local/pureftpd –with-everything –with-mysql=/usr/local/mysql
make install-strip
cd configuration-file/
chmod u+x pure-config.pl
cp pure-config.pl /usr/local/pureftpd/bin
mkdir /usr/local/pureftpd/etc
cp pure-ftpd.conf /usr/local/pureftpd/etc
cd ../
cp pureftpd* /usr/local/pureftpd/etc/
vi /usr/local/pureftpd/etc/pure-ftpd.conf
找到
# MySQLConfigFile               /etc/pureftpd-mysql.conf
改为
MySQLConfigFile                /usr/local/pureftpd/etc/pureftpd-mysql.conf

cd /data/web
wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.2.4/phpMyAdmin-3.2.4-all-languages.tar.gz
tar zxvf phpMyAdmin-3.2.4-all-languages.tar.gz
mv phpMyAdmin-3.2.4-all-languages phpmyadmin
rm phpMyAdmin-3.2.4-all-languages.tar.gz
安装phpmyadmin
vi /usr/local/nginx/conf/nginx.conf
新建一个server

server
{
listen            80;
server_name        mysql.xxxx.net;
index            index.html index.htm index.php;
root            /data/web/phpmyadmin;

access_log        /data/logs/nginx/phpmyadmin.log    access;

location ~ .*.(php|php5)?$
{
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_php.conf;
}

}

保存后
service nginx reload
访问
mysql.xxxx.net

密码为空无法登陆

于是
/usr/local/mysql/bin/mysqladmin -u root password 123456
密码改为123456

登陆后创建pureftpd表,和用户pureftpd,记下密码

插入表
DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (
`User` varchar(32) NOT NULL DEFAULT ”,
`status` enum(‘0′,’1′) NOT NULL DEFAULT ‘0’,
`Password` varchar(64) NOT NULL DEFAULT ”,
`Uid` varchar(11) NOT NULL DEFAULT ‘5200’,
`Gid` varchar(11) NOT NULL DEFAULT ‘5200’,
`Dir` varchar(128) NOT NULL DEFAULT ”,
`ULBandwidth` smallint(5) NOT NULL DEFAULT ‘200’,
`DLBandwidth` smallint(5) NOT NULL DEFAULT ‘100’,
`comment` tinytext NOT NULL,
`ipaccess` varchar(15) NOT NULL DEFAULT ‘*’,
`QuotaSize` smallint(5) NOT NULL DEFAULT ‘0’,
`QuotaFiles` int(11) NOT NULL DEFAULT ‘0’,
PRIMARY KEY (`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8_general_ci;

INSERT INTO `users` VALUES (‘ftp’,’1′,’123456′,’591′,’501′,’/data/web’,1000,1000,”,’*’,0,0);

ftp虚拟用户名ftp,密码123456就添加完了,此处Uid和Gid最好应该设为www用户和www用户组的uid的gid
查看方法
cat /etc/group
cat /etc/passwd

vi /usr/local/pureftpd/etc/pureftpd-mysql.conf
改刚才添加的mysql用户密码

cp contrib/redhat.init /etc/init.d/pureftpd
vi /etc/init.d/pureftpd
找到
fullpath=/usr/local/sbin/$prog
改为
fullpath=/usr/local/pureftpd/bin/$prog

找到
$fullpath /etc/pure-ftpd.conf –daemonize
改为
$fullpath /usr/local/pureftpd/etc/pure-ftpd.conf –daemonize

chmod +x /etc/init.d/pureftpd
chkconfig –add pureftpd
service pureftpd start
如果测试成功就设置为开机启动
chkconfig pureftpd on
cd ../

一点点小扩展
先安装procinfo
wget http://sourceforge.net/projects/procinfo-ng/files/procinfo-ng/2.0.304/procinfo-ng-2.0.304.tar.bz2/download
tar jxvf procinfo-ng-2.0.304.tar.bz2
cd procinfo-ng-2.0.304/
./configure
make
make install
cd ../

现在运行procinfo,可以看到很多常用的信息了

安装figlet
wget ftp://ftp.figlet.org/pub/figlet/program/unix/figlet222.tar.gz
tar zxvf figlet222.tar.gz
cd figlet222/
chmod +w Makefile
vi Makefile
找到DEFAULTFONTDIR = fonts
注释掉
#DEFAULTFONTDIR = fonts
./configure
make
make install
cd fonts/
mkdir /usr/local/share/figlet
cp * /usr/local/share/figlet
cd ../../
figlet aligo
可以看到字符画,其实这东西没什么用,只是好好玩-0-!

vi /etc/status.sh

写入类似的东西
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
export PATH

figlet Calystegia
echo -e “Machine stats”;uptime
procinfo -r | head -n 15
procinfo | tail -n 2 | head -n 2
echo -n `ps auxf | grep ‘nginx’ | grep -v grep | wc -l`
echo ” nginx process alive.”
echo -n `ps auxf | grep ‘php-fpm’ | grep -v grep | wc -l`
echo ” php-fpm process alive.”
echo -n `ps auxf | grep ‘mysqld’ | grep -v grep | wc -l`
echo ” mysqld process alive.”

保存后

chmod +x /etc/status.sh
/etc/status.sh
执行一下看效果,可以看到不少信息

vi ~/.bash_profile
写入
/etc/status.sh

退出ssh重新登陆,可以看到一堆信息了

vi /etc/status_html.sh

#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
export PATH

echo “<pre>” > /data/web/nginx/index.html
bash /etc/status.sh >> /data/web/nginx/index.html
echo “Calystegia Here! by aligo via nginx.” >> /data/web/nginx/index.html
echo “</pre>” >> /data/web/nginx/index.html

chmod +x /etc/status_html.sh
/etc/status_html.sh

直接访问,可以看到一个页面来显示那些信息了

安装一下crontab
yum install vixie-cron crontab
启动
service crond start

crontab -e
加入一行
*/1 * * * * /bin/bash  /etc/status_html.sh

用于设置一分钟执行一次/etc/status_html.sh,保存退出即可

5.话说春天又快到了呢。

完。

3 Comments

  1. Posted 2009/12/24 at 12:33 | Permalink

    嗯,很详细的记录,照着这里说基本就可以把服务器建成了。
    有点长,新手需要一点耐心。-0-

  2. Posted 2010/06/02 at 14:32 | Permalink

    准备今年在linode.com买个vps玩玩,系统准备用 debian,所以现在在学习debian中

  3. Posted 2010/07/20 at 22:34 | Permalink

    博客没有翻页很难找到这么篇。。

One Trackback

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*

You may use these HTML tags and attributes <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>