How to resolve setlocale warning in OEL6

默认安装的Oracle Enterprise Linux 6,在用户登录以后,通常会有以下警告:

Last login: Tue Jun 19 16:52:19 2012 from 192.168.2.1
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8)

并且在执行oerr等命令的时候,也会先产生警告,比如:

$ oerr ora 10046
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
10046, 00000, "enable SQL statement timing"
// *Cause:
// *Action:

其实也并不太影响使用,但是比较烦躁。

解决方法:

vi /etc/sysconfig/i18n

默认的内容可能是:

LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

需要添加一行LC_ALL的设置,如下:

LANG="en_US.UTF-8"
LC_ALL="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

再重新登录,就一切OK了。

备注:为什么会有i18n这样古怪名字的配置文件,实际上i18n是internationalization的所写,表示从i到n之间有18个字母。

Oracle Datafiles & Block Device & Parted & Udev

需求:
1. 使用裸设备作为Oracle数据文件,而且要跳过操作系统或者其它软件提供的卷管理(比如Linux下的LVM)。
2. 由于small datafile限制,有大量磁盘分区需要创建。

以下测试环境操作系统为CentOS 6.0,如果你的操作是RHEL6或者OEL6,也同样适用,如果是RHEL5或者OEL5,那么udev部分的命令是不相同的。但是只需要在操作系统中man udev,查看一下相应的语法即可,思路是相同的。

解决方案:
1. 使用parted命令,脚本式创建多个分区,使用gpt类型分区表,这样可以创建大量primary分区,而如果使用msdos分区,则必须要要创建extend分区,然后再创建logical分区,这样在后面的udev规则文件中,还需要将extend分区排除出去,比较麻烦。

在我的测试环境中,对于/dev/sdc磁盘进行操作,分了11个分区,每个50M。

parted -s /dev/sdc mklabel gpt 
parted -s /dev/sdc unit MB mkpart primary 1 50 
parted -s /dev/sdc unit MB mkpart primary 50 100 
parted -s /dev/sdc unit MB mkpart primary 100 150 
parted -s /dev/sdc unit MB mkpart primary 150 200 
parted -s /dev/sdc unit MB mkpart primary 250 300 
parted -s /dev/sdc unit MB mkpart primary 300 350 
parted -s /dev/sdc unit MB mkpart primary 350 400 
parted -s /dev/sdc unit MB mkpart primary 400 450 
parted -s /dev/sdc unit MB mkpart primary 450 500 
parted -s /dev/sdc unit MB mkpart primary 500 550 
parted -s /dev/sdc unit MB mkpart primary 550 600

如果在生产环境的Oracle数据库中,block_size=2K的表空间,单个数据文件最大8G,可以使用:

parted -s /dev/sdc unit GB mkpart primary 1 8 

2. 设置udev规则。如何在CentOS 6中设置udev,可以参看我之前的文章 - How to use udev for Oracle ASM in Oracle Linux 6

vi /etc/udev/rules.d/99-oracle.rules

添加如下行:

KERNEL=="sd?[1-9]", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c293bd690056ce6834434765d3f4", NAME="oradisk0$number", SYMLINK="mapper/$name", OWNER="oracle",  GROUP="dba", MODE="0660"
KERNEL=="sd?1[0-9]", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c293bd690056ce6834434765d3f4", NAME="oradisk$number", SYMLINK="mapper/$name", OWNER="oracle",  GROUP="dba", MODE="0660"

重启udev服务:

start_udev

然后可以发现/dev/mapper下的链接都成功创建,并且指向规则中定义的块设备名称。

# ls -l /dev/mapper/
total 0
crw-rw----. 1 root root 10, 58 Dec 29 03:29 control
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk01 -> ../oradisk01
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk02 -> ../oradisk02
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk03 -> ../oradisk03
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk04 -> ../oradisk04
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk05 -> ../oradisk05
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk06 -> ../oradisk06
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk07 -> ../oradisk07
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk08 -> ../oradisk08
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk09 -> ../oradisk09
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk10 -> ../oradisk10
lrwxrwxrwx. 1 root root     12 Dec 29 03:29 oradisk11 -> ../oradisk11

注意,此时/dev目录下,sdc1至sdc11设备都不再存在了,但是我们可以通过比较设备的major号和minor号来确认绑定是正确的。

# ls -l /dev/mapper/oradisk01
lrwxrwxrwx. 1 root root 12 Dec 29 03:29 /dev/mapper/oradisk01 -> ../oradisk01
# ls -l /dev/oradisk01
brw-rw----. 1 oracle dba 8, 33 Dec 29 03:29 /dev/oradisk01
# cat /proc/partitions | grep 33
   8       33      48128 sdc1

3. 直接使用/dev/mapper/oradisk*作为数据文件
由于在Oracle 10.2.0.2以后,Oracle已经可以用O_DIRECT标志直接打开块设备,而不是像以前版本那样,如果要跳过操作系统缓存直接读写磁盘设备,必须要用使用字符设备。在以前的版本中,因为要使用字符设备,所以才需要用raw命令去将某一个块设备映射为一个裸设备(字符设备)。而在Oracle 10.2.0.2以后则可以直接使用块设备(比如/dev/sdc1,比如udev映射以后的/dev/oradisk01,这些都是块设备),不过,虽然Oracle 10.2.0.2以后,Oracle可以直接读取块设备,但是在Oracle 11g以前,这个特性还不被OUI支持,如果要在OUI中使用,则需要使用符号链接(symbolic links),如我们用udev创建的/dev/mapper/oradisk*。
也就是在Oracle 10.2.0.2以后,Oracle 11g以前,需要使用/dev/mapper/oradisk*这样的符号链接作为数据文件。
在Oracle 11g以后,可以使用符号链接,也可以直接使用/dev/oradisk*作为数据文件。

如果你们认为有更优的最佳实践,欢迎讨论。当然我们也可以使用lvm或者Oracle ASM来处理数据文件的存储,这不在本文讨论范围内。

BTW: 一个有趣的bug?在测试中发现,如果在udev创建完符号链接之后,再使用parted来查看链接的分区情况,则会导致链接消失,而映射前的sdc1设备名重新出现。重启udev服务也无法将链接重新创建,但是用parted重新查看sdc1设备,则链接又重新出现,sdc1又重新消失。求解释。

--正常情况下有符号链接
[root@localhost ~]# ls -l /dev/mapper/oradisk01
lrwxrwxrwx. 1 root root 12 Dec 29 03:29 /dev/mapper/oradisk01 -> ../oradisk01
--映射前的sdc1设备是不存在的
[root@localhost ~]# ls -l /dev/sdc1
ls: cannot access /dev/sdc1: No such file or directory
--用parted检查链接,或者检查/dev/oradisk01块设备,效果是一样的
[root@localhost ~]# parted /dev/mapper/oradisk01
GNU Parted 2.1
Using /dev/mapper/oradisk01
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) q                                                                
--链接消失
[root@localhost ~]# ls -l /dev/mapper/oradisk01
ls: cannot access /dev/mapper/oradisk01: No such file or directory
--映射的块设备还在
[root@localhost ~]# ls -l /dev/oradisk01
brw-rw----. 1 oracle dba 8, 33 Dec 29 03:29 /dev/oradisk01
--原先的sdc1设备出现
[root@localhost ~]# ls -l /dev/sdc1
brw-rw----. 1 root disk 8, 33 Dec 29 04:29 /dev/sdc1
--重新用parted检查sdc1
[root@localhost ~]# parted /dev/sdc1
GNU Parted 2.1
Using /dev/sdc1
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) q                                                                
--符号链接重新出现
[root@localhost ~]# ls -l /dev/mapper/oradisk01
lrwxrwxrwx. 1 root root 12 Dec 29 04:38 /dev/mapper/oradisk01 -> ../oradisk01
--sdc1重新消失
[root@localhost ~]# ls -l /dev/sdc1
ls: cannot access /dev/sdc1: No such file or directory

How to use udev for Oracle ASM in Oracle Linux 6

大部分在网上可以找到的文档都是在RHEL5或者OEL5中设置udev,udev对于Linux而言最大的作用是防止操作系统重新启动以后,作为ASM磁盘使用的盘符发生变化。
比如说Tim Hall的文章:UDEV SCSI Rules Configuration for ASM in Oracle Linux 5
比如说Maclean的文章:利用UDEV服务解决RAC ASM存储设备名

但是在OEL6或者RHEL6中,这一切都有所变化。

主要的变化是:
1. scsi_id的命令语法发生了变化,scsi_id -g -u -s这样的命令不再有效。
2. udevtest命令已经没有了,整合到了udevadm中。

可以参考Redhat的官方文档(这个文档中本身有一些错误,在udev rules中漏了–device=,正确的方法参看下面的第3步):
Configuring persistent storage in Red Hat Enterprise Linux 6

步骤如下:
1. 编辑/etc/scsi_id.config文件,如果该文件不存在,则创建该文件,添加如下行:

options=--whitelisted --replace-whitespace

备注:在我的测试中,此步骤可以省略。

2. 获取需要绑定为ASM Disk的磁盘uuid,比如我们要使用/dev/sdc和/dev/sdd作为ASM磁盘,那么:

# scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
1ATA_VBOX_HARDDISK_VB36a9e548-1838194a
# scsi_id --whitelisted --replace-whitespace --device=/dev/sdd
1ATA_VBOX_HARDDISK_VB9808fc7f-cdf35030

3. 编写udev rules文件,PROGRAM中写scsi_id命令,RESULT中写上面命令中返回的uuid,这跟OEL5中没什么区别,只是scsi_id命令的语法发生变化了。

vi /etc/udev/rules.d/99-oracle-asmdevices.rules
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="1ATA_VBOX_HARDDISK_VB36a9e548-1838194a", NAME="asm-disk1",  OWNER="grid",  GROUP="dba", MODE="0660"
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="1ATA_VBOX_HARDDISK_VB9808fc7f-cdf35030", NAME="asm-disk2",  OWNER="grid",  GROUP="dba", MODE="0660"

4. 用udevadm进行测试,注意udevadm命令不接受/dev/sdc这样的挂载设备名,必须是使用/sys/block/sdc这样的原始设备名。

udevadm test /sys/block/sdc
udevadm info --query=all --path=/sys/block/sdc
udevadm info --query=all --name=asm-disk1

在显示中,有类似如下输出,表示测试正确,/dev/sdc设备在udev启动以后将会绑定为/dev/asm-disk1:

udevadm_test: UDEV_LOG=6
udevadm_test: DEVPATH=/devices/pci0000:00/0000:00:0d.0/host4/target4:0:0/4:0:0:0/block/sdc
udevadm_test: MAJOR=8
udevadm_test: MINOR=32
udevadm_test: DEVNAME=/dev/asm-disk1
udevadm_test: DEVTYPE=disk
udevadm_test: ACTION=add
udevadm_test: SUBSYSTEM=block

5. 启动udev

# /sbin/start_udev

6. 检查设备是否正确绑定

# ls -l /dev/asm*
brw-rw---- 1 grid dba 8, 32 Oct 26 21:24 /dev/asm-disk1
brw-rw---- 1 grid dba 8, 48 Oct 26 21:17 /dev/asm-disk2

How to Using VNC to Remote Control Linux from Mac OS X Lion

从Mac OS X中远程控制Linux非常简单,在Mac中无需安装任何软件,当然Linux端需要安装VNC服务。

环境概述:
Linux:Oracle Enterprise Linux 5.4
Mac:Mac OS X Lion(实际上Snow Leopard或者Leopard应该都是可以的)
VNC Server:Real VNC Free Edition

1. 在OEL中安装Real VNC Server

rpm -Uvh vnc-4_1_3-x86_linux.rpm

2. link X11字体文件位置,否则VNC启动会报错

# cd /usr/X11R6/lib
# ln -s /usr/share/X11 X11
# ls -l
total 4
lrwxrwxrwx 1 root root   14 Sep  5 18:10 X11 -> /usr/share/X11
drwxr-xr-x 3 root root 4096 Aug 31 15:46 modules

如果不执行以上命令,可能在启动VNC以后,在log文件中会看到如下报错:

Couldn't open RGB_DB '/usr/X11R6/lib/X11/rgb'

Fatal server error:
could not open default font 'fixed'
xsetroot:  unable to open display 'hpserver:1'
vncconfig: unable to open display "hpserver:1"
xterm Xt error: Can't open display: hpserver:1
twm:  unable to open display "hpserver:1"

2. 启动VNC,可以用任意用户启动VNC,建议不要使用root

$ vncserver

New 'hpserver:1 (kamus)' desktop is hpserver:1

Starting applications specified in /home/kamus/.vnc/xstartup
Log file is /home/kamus/.vnc/hpserver:1.log

3. 检查vnc log文件,确认vnc监听的端口

vi /home/kamus/.vnc/hpserver:1.log

可以在log文件中看到如下字样,这表示通过RFB协议访问VNC服务器应该指向5901,而通过http协议访问则指向5801。

vncext:      Listening for VNC connections on port 5901
vncext:      Listening for HTTP connections on port 5801

4. 确认VNC已经正常启动,注意在log文件中可能存在warning或者报错,我们通过检查端口来确认VNC是否正常启动。

# lsof|grep 5901|grep vnc
Xvnc      20656     kamus    3u     IPv4     206853                  TCP *:5901 (LISTEN)

如果上述命令,没有返回值,则表明VNC没有成功启动。

5. 用Mac连接VNC
Cmd+K快捷键或者Finder->Go->Connect to Server,打开如下界面,输入:vnc://server-ip:port,port就是上面第三步检查的通过RFB协议访问VNC服务器的端口,通常为590x。

但是默认启动的VNC界面是比较简陋的,如下图这样。当然,也完全可以使用。

6. 如果我们想在VNC中使用gnome界面,那么需要修改一下启动vnc的脚本。该脚本通常位于启动VNC的用户Home下的.vnc目录中,也就是跟log文件在一个目录下,文件名为xstartup。

$ vi ~/.vnc/xstartup

添加如下行。

unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

修改完毕以后,整个xstartup脚本如下所示。

#!/bin/sh
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc

[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &

然后停止VNC,再重新启动。

$ vncserver -kill :1
Killing Xvnc process ID 21210
$ vncserver

New 'hpserver:1 (kamus)' desktop is hpserver:1

Starting applications specified in /home/kamus/.vnc/xstartup
Log file is /home/kamus/.vnc/hpserver:1.log

7. 再次从Mac中连接VNC,就可以看到美观的gnome界面了。

如何停止vncserver。

[orat0@hpserver2 ~]$ vncserver -list

TigerVNC server sessions:

X DISPLAY #	PROCESS ID
:1		701
[orat0@hpserver2 ~]$ 
[orat0@hpserver2 ~]$ 
[orat0@hpserver2 ~]$ vncserver -kill :1
Killing Xvnc process ID 701

参考文章:
How To Setup Linux VNC Server In 3 Minutes

How to Release Port 8888 on OEL5.5

准备在OEL5.5中安装Oracle VM Manager,文档中说明要保证8888端口可用。

# netstat -na |grep 8888
unix  3      [ ]         STREAM     CONNECTED     8888 

说明该端口已经被占用,那么如何释放该端口?

通过lsof命令可以看到该端口被avahi-daemon程序占用。avahi-daemon的主页可以参看avahi.org

# lsof | grep 8888
avahi-dae 2747     avahi   12u     unix 0xeb4d9740                8888 socket

检查自动启动的服务,发现avahi-daemon是自动启动的。

# chkconfig --list | grep avahi
avahi-daemon   	0:off	1:off	2:off	3:on	4:on	5:on	6:off
avahi-dnsconfd 	0:off	1:off	2:off	3:off	4:off	5:off	6:off

停止avahi-daemon,需要使用avahi-daemon脚本停止。

# service avahi-daemon off
Usage: /etc/init.d/avahi-daemon {start|stop|status|restart|condrestart}
# /etc/init.d/avahi-daemon stop
Shutting down Avahi daemon:                                [  OK  ]

设置avahi-daemon不再随着机器重启而自动启动。

# chkconfig avahi-daemon off

再次检查,端口已经释放。

# netstat -na |grep 8888

How to change I/O scheduler in Linux

Updated@2015/12/15

为什么可能会去修改Linux I/O Scheduler (elevator)?以及什么是I/O Scheduler,应该如何为数据库系统选择合适的I/O Scheduler?可以参看以下文章。

那么如果我们确认要修改I/O scheduler,该如何进行? 参考 – How to change default I/O scheduler?

大体上来说就是,比如像修改I/O scheduler为dealine:

  1. 在RHEL4/OEL4中,修改/boot/grub/grub.conf文件,添加elevator=deadline,重启生效,比如:
    title Red Hat Enterprise Linux Server (2.6.18-8.el5)
    root (hd0,0)
    kernel /vmlinuz-2.6.18-8.el5 ro root=/dev/vg0/lv0 elevator=deadline
    initrd /initrd-2.6.18-8.el5.img
  2. 在RHEL5/OEL5以及之后的版本中(比如RHEL6和RHEL7),可以针对每块磁盘制定I/O Scheduler,修改完毕立刻生效,比如:
    --当前是是noop
    # cat /sys/block/sda1/queue/scheduler 
    [noop] anticipatory deadline cfq
    --修改为deadline
    # echo 'deadline'>/sys/block/sda1/queue/scheduler 
    --立刻生效
    # cat /sys/block/sda1/queue/scheduler 
    noop anticipatory [deadline] cfq 

How to modify firewall setting in CentOS

在尝试通过sqlplus连接安装在VMWare虚拟机中的CentOS 5上的Oracle数据库时,遇到ORA-12532错误。而在CentOS服务器端上通过监听连接自己的数据库,却是正常的。

D:\Temp>sqlplus system/oracle@av

SQL*Plus: Release 11.1.0.7.0 - Production on Fri May 8 16:24:25 2009

Copyright (c) 1982, 2008, Oracle.  All rights reserved.

ERROR:
ORA-12532: TNS:invalid argument

通常这种情况是由于服务器端的防火墙设置引起的。

有几种解决方法。需要用root用户执行。

1. 临时禁用防火墙,机器重启之后防火墙会重新启动。

# service iptables stop

2. 永久禁用防火墙。

# chkconfig iptables off

3. 在防火墙规则中打开1521端口(Oracle数据库监听端口)

# iptables -A RH-Firewall-1-INPUT -p tcp --dport 1521 -j ACCEPT

检查配置结果,查看RH-Firewall-1-INPUT链。

# iptables -L RH-Firewall-1-INPUT -nv

4. 图形化界面修改防火墙设置。

# system-config-securitylevel

How to install X Window System in CentOS

下载精简的CentOS 5.2 Server VMWare Image,大小只有318MB。

使用XManager远程连入,会碰到这样的报错信息。

但是实际上ssh服务的X11 Forwarding是已经开启的。

[root@localhost ssh]# cat /etc/ssh/sshd_config | grep X11Forwarding
#X11Forwarding no
X11Forwarding yes

真正的错误原因是这份安装中不包含X Window System,这对于之后需要安装Oracle软件可能会造成困惑。

通过yum工具可以简单的安装X Window System,当然首先要保证该系统可以连上互联网。

yum groupinstall "X Window System"

安装完X Window System就可以通过XManager连入了,但是有必要修改一下Xstart中的执行命令,默认的xterm路径并不对。

xterm一旦可以使用,就已经可以使用runInstaller启动图形界面安装Oracle了。

如果要在服务器上使用熟悉的GUI,比如GNOME等,可以同样使用yum。

如果选用KDE,那么:

yum groupinstall "KDE (K Desktop Environment)"

如果选用GNOME,那么:

yum groupinstall "GNOME Desktop Environment"

如果选用XFCE,那么:

yum groupinstall "XFCE-4.4"

试用Ubuntu

忘了是什么时候最早听到Ubuntu的,但是引起自己的注意是因为新闻说Google要发布自己的操作系统,当然后面Google又否认,但是Google内部员工使用的Goobuntu正是基于Ubuntu的一个特别版本这倒是确切的事情,这才萌发自己玩一下的想法,毕竟Google看上的东西总不会太赖。

下载安装盘,找一台机器重新安装,对我来说已经是没有新鲜感的事情,曾经有段时间狂装各个版本的Linux(包括Redhat, Suse, Debian, Gentoo还有一堆有名无名的),现在想到安装就有点儿犯恶心。正好VMware宣布发布free的VMware Server,并且VMTN中也有做好的Ubuntu5.10虚拟机可以下载。干脆就直接用虚拟机来测试一下好了,后来又是由于尝鲜的心理,并没有下载VMware Server(因为以前用Crack过的VMware Station好久了)而是转而下载了VMware Player,这是最轻量级的VMware产品,不可以用来做全新的安装,只能用来打开别人做好的虚拟机,但对于我这次正好是再合适不过的。

总共几百M的下载量,倒也用不了太长时间,很快VMware Player + Ubuntu 5.10 “The Breezy Badger”优雅的启动界面就展现在我的面前。

1。Ubuntu是一个古非洲词汇,大致是“乐于分享”的含义。看一下官方站点对这个词的解释。

“Ubuntu” is an ancient African word, meaning “humanity to others”. Ubuntu also means “I am what I am because of who we all are”. The Ubuntu Linux distribution brings the spirit of Ubuntu to the software world.

2。Ubuntu的默认GUI是Gnome,并且也只有Gnome,如果想用KDE,那么可以去安装Kubuntu。所谓Kubuntu就是在Ubuntu中卸载Gnome安装KDE而已。

3。提一个比较特殊的地方,就是Ubuntu默认屏蔽了root用户,而大力倡导使用sudo来取代su。这样我们可以直接用自己的用户进行各种Adminstrtor的工作,比如设定网络,配置硬件等等以前必须有root密码才可以进行的工作,现在只需要提供用户自己的密码就OK了。所以对于从VMTN中下载回来的虚拟机你不需要知道root密码,只要知道自己默认使用ubuntu用户登录系统,而自己的密码也是ubuntu就可以了。Ubuntu文档站点有专门的文章介绍这个改动的优缺点和使用方法。

4。默认浏览器是FireFox1.07,如果不准备中文输入,只用来浏览中文网页,效果也算差强人意。

5。仍然是Linux,那么只要有其它Linux发行版的使用经验,对于Ubuntu都不会感到陌生。目前为止除了界面未发现更有趣的地方,说起界面,另外还有一个Edubuntu版本,非常活泼的GUI,定位是“给年轻人用的”Linux。

Ubuntu基于Debian,正好最近看到推广Debian的工作,遂决定自己网站上加一个SpreadDebian的logo。