Tuesday, March 04, 2008

CentOS Server 首次安裝後的 關閉不需要的服務

CentOS 安裝完後,總是開啟一些不需要的服務,於是這是這次筆記的理由。以後裝完系統,我就直接把這下面的指令直接 copy 到 terminal / console 就好了。
下面有註解的如 ISDN 及 Sendmail 目前我是沒有開,如果有需要啟動的,就不要執行關閉。有些服務系統可能沒有安裝,如果沒看到就不需理他。

1. 停止服務
service apmd stop
service autofs stop
service bluetooth stop
service cups stop
service ip6table stop
service iptable stop
#service isdn stop
service hidd stop
service pcscd stop
service pcmcia off
#service sendmail stop
service yum-updatesd stop

2. 設定不啟動
chkconfig apmd off
chkconfig autofs off
chkconfig bluetooth off
chkconfig cups off
chkconfig ip6table off
chkconfig iptable off
#chkconfig idsn off
chkconfig hidd off
chkconfig pcscd off
service pcmcia off
#chkconfig sendmail off
chkconfig yum-updatesd off

服務說明:
apmd 電源管理
沒有 UPS 或是沒有電池的電腦 這是沒用的

autofs 自動掛載服務
通常 server 所需要掛載都是固定的,除非是特殊的目的,否則用處不大。

bluetooth 藍芽
Server 應該是不太需要用藍芽

cups 列印
如果列印需求的機器才需要打開

iptable6,iptable
建議交由防火牆來管理連線, Server 專注服務即可

isdn
如果有需要建立 ISDN 的環境,才需要使用

hidd
一些藍芽的輸入裝置,如鍵盤滑鼠等。 Server 應該不太會用到這些裝置,有點太高檔的感覺!

pcscd
給 smart card 用的, 目前手上沒有這種機器,所以都是關掉的。

pcmcia
給 pcmcia 用的,目前 Server 很少用到 pcmcia ,關掉。

yum-updatesd
yum 自動升級程式, CentOS 5 預設會安裝,不過有時候自動安裝會造成一些不必要的困擾,目前大部分的人建議是不要啟用,尤其是已經上線的主機。


順便找一篇別人寫的文章:
Minimal Services on CentOS 4.4 Mini-HowTo
http://anchorite.org/blog/2006/11/13/minimal-services-on-centos-44-mini-howto/

Redhat Enterprise Linux啟動服務詳解(已非原稿)
http://www.qcode.org/linux/Linux-edition/fedora/2007112443344.html

Monday, March 03, 2008

2008 年計畫

給自己今年的計畫

1. sendmail 轉 postfix
目前已完成移轉, sendmail 相對 postfix 的設定也已經弄好沒有問題,只剩下 postfix 額外新的設定選項沒有搞懂。

2. MailScanner 精通
設定很簡單,但實務往往有一段落差。希望可以規劃出一個管理流程。

3. Xen 虛擬化
實做其實很簡單,目前要擬定以後管理的辦法,標準的作業流程。

4. 參加 Launchpad
資訊的落差將形成國家競爭力障礙,今年開始每天撥一點時間加入繁體中文翻譯的工作。

Sunday, March 02, 2008

Xen 參考文章

我已經有點對 Vmware Esx Server 上面跑的 Linux Guest 發生時間漂移的問題感到困擾,決心要開始嘗試把一些 Linux Server 移到 Xen 上面。

參考教學文章

Creating and installing a CentOS 5 domU instance
篇名:http://wiki.centos.org/HowTos/Xen/InstallingCentOSDomU
這篇是正確無誤的做法。重點是要設定好 kickstart file , 透過 kickstart file 指定 安裝的 source 。 若是使用 virt-install ,試的結果是指定 source 都失敗。

篇名:Create Centos5 DomU on Ubuntu Feisty Dom0
http://linuxfellaz.net/doku.php?id=blog:howtos:ubuntu:centos5
這篇有使用到 JAILTIME 的 XEN Images。

篇名:利用 Xen 設計虛擬機器
http://linux.vbird.org/linux_enterprise/xen.php
或是參考鳥哥的做法

篇名:Installing Xen On CentOS 5.0 (i386)
http://howtoforge.com/centos_5.0_xen
這篇是使用 virt-install 安裝,目前沒試成功過。

JAILTIME
http://jailtime.org
JAILTIME 提供一些現成 XEN 的 Images 供大家使用。目前有 CentOS, Fedora, Debain, Ubuntu。不過檔案幾次都無法下載成功(update:2008/3/3)

Linux 推薦書單

這是個人推薦的書單,保證值得收藏。這份書單會隨時更新,只要有更新,就會重新置頂。


SAMBA
Samba-3 by Example
http://us1.samba.org/samba/docs/man/Samba-Guide/
中文版: Samba-3實作手札-系統整合.資源共享.安全管理(附光碟)

SQUID

Squid: The Definitive Guide
大陸翻譯
Squid中文權威指南
http://home.arcor.de/jeffpang/squid/index.html

Saturday, March 01, 2008

Linux rar 安裝

一般在 Linux 下用到 RAR 機會不多,通常是用來搭配掃毒。如果,常上大陸網站下載東西應該也會用到,大陸還蠻喜歡用 RAR 壓縮檔案。

到 RAR 下載網頁
http://www.rarlab.com/download.htm
目前最新是 RAR 3.71 for Linux

wget http://www.rarlab.com/rar/rarlinux-3.7.1.tar.gz
tar xvf rarlinux-3.7.1.tar.gz
cd rar
make install

rar 就會安裝到 /usr/local/bin

Friday, February 29, 2008

Fedora Legacy 遺產計畫要終止了

今天瀏覽到 Fedora legacy 網站 http://www.fedoralegacy.org/
原因是這個計畫已經漸漸失去大家的關心 維護的人漸漸變少了
看到這個計畫終止 心中有點感觸 -- 畢竟他也曾經伴隨我一段時間

原本這個計畫曾經讓許多停留在 Redhat 7,8,9 的人可以繼續升級
但時代實在變化太快了 使用 Fedora Legacy 延續生命 現在看來反而是一種障礙

舉例 假設有一台主機使用 Fedora Core 3 + Legacy 而且常常進行更新
某一天 你想要把他升級成 Fedora Core 4 或是 Fedora Core 5 或是 RHEL
結果卻發現 你的 Fedora Core 3 + Legacy 裡面有些軟體是比你要轉換的系統還要新
按照 rpm / yum 升級處理的原則, rpm / yum 遇到比較舊的版本是不會更新的
結果你的系統就會被搞的一團亂,升級經驗比較淺的, 甚至可能會升級失敗(升到救援模式)

版本規劃我覺得對一個系統升級(upgrade)的規劃(plan)是非常重要
絕不能舊的作業系統版本的軟體的版次還比新的作業系統的軟體還要新
否則當作業系統升級時 版本衝突會非常嚴重 而失去原本使用 rpm 去維護版次的用意了

Thursday, February 28, 2008

squid - 使用 tempfs (RAM) 加速法

在大陸網站看到有人用 Memory 當 squid 的 cache_dir 效果不錯。自己試用之後真的非常快,只要開過的網頁再開,簡直可以說是"秒"殺,真的非常快。

只不過當 Ramdisk 使用快要滿了,在下載比較大的檔案會變的很慢,目前還在研究問題的原因。

0. cache_dir 的決定
通常是以主機記憶體大小的三分之一,例如記憶體 1G 則 cache_dir 大約 300M,如果記憶體剩餘的比較多,可能可以到二分之一。這個大小,可以依造執行的狀況,再調整。

1. 設定 tmpfs
有兩種方式
a. 在 /etc/fstab 加入
none /var/spool/squid tmpfs defaults,size=320M 0 0

b. 以指令方式建立
mount -t tmpfs -o size=320m none /var/spool/squid

有些人是用和 /tmp 綁定,目前我尚未使用所以無法評論,有空我實做後再把結論寫出來。


2. squid.conf.mem 設定
通常我會保留把原始設定保留起來,所以另外寫一個 squid.conf.mem 方便切換
cp /etc/squid/squid.conf.stand
舊的 squid.conf 複製一份為 squid.conf.stand
vi /etc/squid/squid.conf.mem

cache_mem 8
cache_dir ufs /var/spool/squid 320 8 256
cache_swap_low 85
cache_swap_high 95

說明:
cache momery 建議不要太大,預設是 8M ,這個大小已經足夠 1G 的 cache object使用,加上我們的 cache_dir 只有 320M。cache_dir 之前上面說明設定為 320 M。


有很多網站不管記憶體多少都將第一層目錄設成 16 這是錯的。應該是有人看到範例就直接抄過來,只改記憶體大小,後面兩個數字就直接照抄,完全不知道這個數字是怎麼來的。
cache_dir ufs /tmp 256 16 256


3. 啟動 script

為了啟動及關閉方便,寫了兩個 Script ,如果有機會,我再合併成一支執行。
vi startSquidMem.sh

#!/bin/sh

mount -t tmpfs -o size=320m none /var/spool/squid
chown squid:squid /var/spool/squid
mount /var/spool/squid
cp /etc/squid/squid.conf.mem /etc/squid/squid.conf
#squid -z
#建立 cache_dir, 不過現在的 /etc/init.d/squid 會檢查,如果沒有做會自己做)
/etc/init.d/squid start

vi stopSquidMem.sh
#!/bin/sh

/etc/init.d/squid stop
# 復原設定
cp /etc/squid/squid.conf.stand /etc/squid/squid.conf

Wednesday, February 20, 2008

一個穩定及高效的 Cacti Server

Cacti 大概許多網管都有使用過,她的優點是架構簡單(PHP,MySQL, SNMP)容易建置,而且提供功能正是網管的基本需求,所以幾乎已經成為網管必備的工具。

Cacti 就如一般網管系統,每五分鐘監控一次所有的系統,但隨著企業的網路不斷成長,需要監控的系統也不斷增加。Cacti 將會面臨 Process 過多, 記憶體不足, IO 過重等問題。如果在 cacti.log 看到 cacti 執行一次超過 300 秒,就表示你的系統已經超過負荷了。

以下將我一路慢慢摸索出來的心得分享給大家。

0. 選擇適當的作業系統
請用 CentOS 或 Red Hat Enterprise,不要使用 Fedora 或是 Redhat 9 之前的版本。Red Hat Enterprise 的 kernel 已經是最佳化了 ,非常適合當 Server 使用。我幫過一些人將 Fedora 或是 Redhat 轉換成 CentOS,他們都有明顯感受到校能的差異,尤其是在記憶體的使用上。

1. 使用 Spine (Cactid)
Spine 使用 C 來取代呼叫 cmd.php ,在效能上提升很多。官方網頁也寫說 ,如果執行 php poller.php 時間超過 300 秒,就需要使用 Spine 。使用方法很簡單,照著官方網頁作就可以了,不在此贅述。個人是覺得 cmd.php 的方法該廢掉了,目前存在的意義只是因為 php 讓 cacti 達成跨平台的特性。

2. filesystem 選擇
如果可以的話,切割一塊獨立的分割區掛載 cacti 。檔案格式 reiserfs 是比較好的選擇 比 ext3 還要快許多。另外,我們還可以使用 noatime 的選項掛載 。加了 noatime 後,系統不更新上次檔案的存取時間,這個資訊對 cacti 這個系統不是很重要 ,也不會有其他不良影響,對於繁忙的檔案系統,將可以大大減少檔案系統的 IO。

ex.
/dev/sda3 /var/www/html/cacti ext3 defaults,noatime 0 0

3. 加大 php 的記憶體使用的上限
vi /etc/php.ini
memory_limit = 32M (預設是 8mb, 可以改大一點)

4. 定期 optimize cacti 資料庫
不知道從甚麼時候開始 ,我家的 cacti 的 poller_output 會不明原因的長大,差不多兩個禮拜後,就會大到資料越寫越慢,直到無法更新。一開始我是每隔一段時間手動 "Truncate poller_output table" 後,就會繼續正常運作。但實在是太麻煩了,現在改成用 crontab 去 optimize 整個 cacti 資料庫。如果不會寫 SQL 的人,用 phpMyAdmin 執行 optimize 時,同時也會顯示執行 SQL 的語法,直接拿來用就好了。在設定 cron 請注意,請不要跟 cacti 同時執行,假設你的 cacti 執行一次要 4 分鐘,請在第四分鐘後再執行。

其實正常來說 poller_output 的資料只是暫存的,系統會自行清空。但很奇怪的是,MySQL 有時候並沒有馬上實體刪掉,而是註記成冗餘資料,依舊占據資料表的空間。可能是這種原因導致資料表越長越大,所以後來我改用 optimize 的原因。

國外有人也有遇到相關問題 不知他解了沒?
http://forums.cacti.net/about25515.html

除錯建議:
1. rebild poller cache 或是 truncate poller_output table, 不可以在 cacti 的 poller.php 運作時執行
2. 善用 cacti web 的 debug 功能,以方便一個一個排除問題。
3. 建立新的 device ,最好先用 snmpwalk 測試一遍,可以抓到資料再來設定也不遲。

ps. reiserfs 的作者面臨官司,後續版本前途不明啊。真可惜。

Tuesday, February 19, 2008

CentOS 線上升級疑難概論

不管是從 Fedora 升到 CentOS, 或是 CentOS 低版升到高版過程中,遇到的問題其實是差不多。

1. centos-release 第一個重要的主角
升級完可以考慮作一次 rpm --rebuild

重建完 rpm db 有助於在做 yum upgrade 時正確檢查相依性

2. glibc 三劍客 glibc , glibc-common, glibc-devel
glibc 是系統最重要的 Library, 如果 glibc 有問題系統將運作不正常,這三個套件最好要同時裝 保證萬無一失。但不管任何時刻,千萬不要移除 glibc ,移除了系統就馬上不能動了。
rpm -Uvh glibc* --nodeps --force

3. 可能的不訴之客 yum 及 rpm
這個兩有時候要先升級有時候又不用,一旦遇到免不了相依一番。

通常是下 yum 時,才發現指令無法執行,只好用 rpm 指令升級 yum 程式。有時候不幸的是 rpm -ivh yum* 也發生問題,可能是因為 rpmdb 毀損或是 rpm 的 lib 版本不對。
rpmdb 毀損用 rpm --rebuild 重建,rpm lib 版本不對 就只好從別台同等級作業系統 copy 過來了

如果要升級 rpm 及 yum 套件 先用 rpm -ivh 檢查相依性,確定所有套件都找齊了,放在同一個目錄才能用 rpm -Uvh * --nodeps 安裝,如果裝不進去,加個 --force 強迫安裝。

記得:若升級 rpm 表示 rpmdb 格式可能會變動喔,一定要做 rpm --rebuild 喔

4. 完整升級
先 vi 一個 /etc/yum-upgrade.conf 用這個設定檔來升級
原來系統的 /etc/yum.repo.d/CentOS-Base.repo 就不要動他
這樣升級完後就不用改回來

下面是 yum-upgrade.conf 請依照本身的狀態去改
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redhat-release
installonlypkgs=kernel kernel-smp
tolerant=1
exactarch=1

[upgrade]
name=Centos upgrade
baseurl=http://mirror.centos.org/centos/4/os/$basearch/
exclude=mysql*

[update]
name=CentOS-$releasever - Updates
baseurl=http://mirror.centos.org/centos/4/updates/$basearch/

執行 yum -c /etc/yum-upgrade.conf upgrade 升級
如果過程遇到無法解決的相依性程式 就先 rpm -e xxx -nodeps

5. 開機前的檢查
請檢查 /etc/grub/grub.conf 指定 kernel 是否存在於 /boot 下
否則開不了機 那就功虧一簣了

6. 清理圾垃
先看看系統有哪些沒升級完成的套件
rpm -qa | grep FC
rpm -qa | grep fc
rpm -qa | grep legacy

然後用 rpm -e xxx 或是 rpm -e --justdb 刪掉
然後再用 rpm -ivh xxx 安裝

另外一個非常非常重要的事

升級只能前進不能後退,一旦決定升級只能去完成他。升級到一半的系統,裡面新舊程式混雜,是非常不穩定隨時都可能有問題的。就算是倒退,倒退程序絕對比繼續完成還要複雜,如果沒有保握,請先虛擬一個環境測試。

Fedora Core 3 to CentOS4.X

基本上 Fedora Core3 與 CentOS4 是同一代的,就如同 Fedora Core6 與 CentOS5 ,他們 kernel 的版本,以及 package 幾乎都是使用同樣的版本。

有一點要注意的是,如果你有使用 Fedora Legacy 可能會導致某些套件比 CentOS 4 還要新,如果嫌清理舊套件麻煩的話,我是蠻建議考慮再做一次升級,升級到 CentOS5。

以下是我的步驟,過程比別人複雜點,但是比較安全。

1. rpm --import RPM-GPG-KEY-centos4

2. rpm -Uvh --force centos-release-4-0.1.i386.rpm
版本大於4 即可, 如果要升到最新版 就從 CentOS4 目錄抓最新版來用

3. rpm -Uvh --force centos-yumconf-4-2.noarch.rpm
這可不裝 比較後面的 CentOS 4 沒有 centos-yumconf 套件

4. 安裝新的 kernel
rpm -ivh --force --nodeps kernel-2.6.9-5.0.3.EL.i686.rpm

5. 安裝 glibc
rpm -ivh --force --nodeps glibc*

6. rpm --rebuilddb
在升級前, 這已經是標準動作, 先重建 rpm db

7. 設定好 yum-upgrade.conf, 然後執行
yum -c /etc/yum-upgrade.conf upgrade

[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redhat-release
installonlypkgs=kernel kernel-smp kernel-hugemem kernel-enterprise kernel-debug kernel-unsupported kernel-smp-unsupported kernel-hugemem-unsupported
tolerant=1
exactarch=1

[upgrade]
name=Centos upgrade
baseurl=http://mirror.centos.org/centos/4/os/$basearch/

[update]
name=CentOS-$releasever - Updates
baseurl=http://mirror.centos.org/centos/4/updates/$basearch/

8. 如果沒問題, 再安裝一次 kernel
rpm -ivh --force --nodeps kernel-2.6.9-5.0.3.EL.i686.rpm
先前安裝 kernel 並非完整安裝, 此次讓他再重新安裝一次

9. rpm --rebuilddb
升級完重新開機前 再作一次

10. yum update 看看有沒有其他的要更新.
建議開完再做啦 以免發生變數

11. 更改 /boot/grub/menu.lst 指定用新的 kernel 開機
有時候 kernel 安裝後可能會因為一些問題沒有更新到 grub.conf 如果沒有就要手動加入
順便要檢查一下 kernel , initrd 檔名正不正確

12. 重開機看看. (可能會移除一些舊的 driver, 加上一些新的 driver)

參考文章
http://www.harald-hoyer.de/linux/Switching-from-FC3-to-CentOS4.3
# rpm -Uvh
centos-release-4-3.2.i386.rpm
yum-2.4.2-2.centos4.noarch.rpm
python-elementtree-1.2.6-4.i386.rpm
python-sqlite-1.1.6-1.i386.rpm
sqlite-3.2.2-1.i386.rpm
centos-yumconf-4-4.5.noarch.rpm
lynx-2.8.5-18.2.i386.rpm
indexhtml-4-2.centos4.noarch.rpm
python-urlgrabber-2.9.6-2.noarch.rpm