顯示具有 Gentoo 標籤的文章。 顯示所有文章
顯示具有 Gentoo 標籤的文章。 顯示所有文章

2009年12月15日

Gentoo Linux 與 Windows 7 安裝心得

這幾天一直在安裝 Windows 7 和 Gentoo Linux 10.1 之間奮戰,浪費了不少時間踩了不少的地雷,恰好可作為部落格的文章以為紀念... XD

Dual Boot

首先因為 Windows 7 在安裝時會在硬碟中產生兩個 Primary Partition ,這讓我在評估是否雙系統共存時有了很慎重的考慮,並為此選擇在 VirtualBox 3.1 中先行試驗確認。不過,經過多次測試總無法經 Grub 對 Windows 7 開機,在最後關頭時決定直接上機測試成功時,才驚覺整整浪費了 2 個工作天在無任何產值的測試作業中... (嘆)

另外對於 Dual Boot 這件事,Gentoo 其實沒有先 Windows 再 Linux 之類的條款,因為它不會幫你建立預設的開機環境設定。Grub 裝在 MBR 也無所謂,反正 Windows 7 開機是從第一個 Partition 中的特定檔案啟動的。最後我還放棄了 SWAP 分割區的設置,將 4 個 Primary Partition 平均分給兩個作業系統,Gentoo 就一個 / partition 及一個 /home partition 。

發行套件的選擇

基本上這是因為安裝過程不太順利下,為什麼還選擇 Gentoo 的原因說明

Gentoo 之所以在某些群體中受到歡迎經常受到誤解,認為這些愛用者是因為迷信自行編譯所帶來的無上效能。其實在目前的中、高階 CPU 及便宜的記憶體市場下,自行編譯所帶來的效能改善情形非常有限,很多人應該也不是那麼心甘情願的願意浪費 1 ~ 2 天的時間進行系統編譯的工作(尤其 Windows 7 安裝一遍只要 20 分鐘),只因為目前還沒有看到更有彈性的軟體套件管理機制,導致短時間內無法轉投入另套發行套件。像格揆本人我就一直想要知道 Arch Linux 究竟有沒有類似 Portage USE 選擇的機制,只是說從所有的範例中似乎嗅不出類似機制的可能性,我也只好繼續使用 Gentoo 系統了!

基楚系統建置

在進行 Gentoo 基礎系統建置時切記不要過早投入 Portage Overlay 的設定,雜亂的套件相依設定是造成系統編不出來的主要原因,尤其在桌面管理系統上影鄉尤為深遠。

另外為了簡化系統的複雜度,一開始也不宜過早加入 ACCEPT_KEYWORDS 的設定,儘量先以系統預設的、穩定的套件版本為基礎完成配置後再加以強化為宜。

2008年8月10日

RRDTool 中文 Ebuild Part II

※ rrdtool 自 1.2.15 起支援中文輸出,但在 1.2.27 時該項支援失效,原因… 懶的查…

想起來真是令人冒汗啊....

本來想去 bugs.gentoo.org 中提報讓 rrdtool 官方的 ebuild 可以增加中文輸出功能,所以測試了一下新版的 rrdtool-1.2.15-r1 版本的 ebuild,結果我發現它可以正常支援中文輸出了!

呃.... 也許我真的是個豬頭.....

剛剛不小心發現,其實 RRDTool 官方版本中早就提供了 Multi-Bytes String(MBS) 支援,只不過預設並沒有開啟。

相對於在 RRDTool 中文 Ebuild 去修改兩隻原始檔案的做法,其實直接開啟官方的這項 MBS 支援的步驟會比較簡單:告訴 C 的前置編譯器(是這樣說的嗎?)要使用 MBS 的程式碼。

怎麼做?我是直接把以下的定義給加到 src/rrd_tool.h 檔中:

#ifndef HAVE_MBSTOWCS
    #define HAVE_MBSTOWCS 
#endif

因為不需改太多地方,因此只需修改 .ebuild 檔即可支援中文輸出功能,如:rrdtool-1.2.15.ebuild (目前不需要自己改...吧)

2008年4月30日

我沒有拖稿啦

如果沒記錯,我好像在 2008/04/19 時寫了一篇 M1210 安裝記錄 ,而且當時還特地標注為 ※未完待續現在也還是…

到今天為止好像過了 10 天了?進度哩?

呃… 我真的沒有染上富堅重症而拖稿啦,沒能接著完成進度是有理由的。

首先,這段時間內主要是要讓兩個功能可以正常運作:

  1. 無線網路
  2. 藍牙滑鼠
無線網路的問題又可以再細分如下:
  1. 無法連上加密網路:聽說這是 kernel 2.6.24 的問題...
  2. 無法使用 Network Manager 進行漫遊設定:這目前不知道該如何是好
至於藍牙滑鼠的問題嘛,簡單的說就是在滑鼠進行藍牙配對時的藍牙屬性設定工具程式會自我了斷 (crashed),於是配對失敗。

為了確保設定步驟的正確性,我拿了 Ubuntu 8.04 的 LiveCD 做了非常多次的驗證,從套件的版本到設定檔內的設定值通通做了記錄,然後前述的兩個功能仍然無動於衷,動彈不得…

於是我劈腿了,在一個月黑風高的夜晚,有一張光碟片被放到 M1210 中用來開機,然後 Ubuntu 8.04 就這麼簡單、輕鬆、莫名其妙的被裝進了 M1210 內,雖然我立即清醒卻也為時已晚...

於是呢,我現在又要 重頭 開始安裝 Gentoo 啦… XD

※為什麼要放棄人人稱讚的 Ubuntu 呢?因為預設套件庫中沒有 MPlayer ,而 LazyBuntu 則不支援 64bits 作業環境。

2008年4月19日

M1210

本文簡單記錄在 Dell XPS M1210 下安裝 Gentoo 的心酸血淚史… 呃,請不要過度悲觀,因為最糟的測試過程已經由我代為執行過了,如果您有幸遇到我所未曾遭遇過的困境,那麼我一定要對您說聲『恭喜』,畢竟「天將降大任於斯人也,必先苦其心志,勞其筋骨,餓其體膚,空乏其身,行拂亂其所為,所以動心忍性,增益其所不能。」 這是您更加磨練您 EQ 的絕佳機會啊!

核心的編譯與開機

正如 史上第一台筆電 中所提到的,這是個人的第一台筆電。和桌電相比最大的差異在於 Kernel 編譯的選項選擇,這部份我總共進行了三次。

第一次安裝是下載 Sam AdmsKernel 2.6.21 設定檔 重新調校成本機的硬體環境,當然本機的 Kernel 版本已更新到 2.6.24-r4 ,除了音效改由 SB Live Audigy 改為 Intel HD Audio 外,其他還針對 Kernel 內附的說明將建議開啟、不建議開啟等等的選項加以調整,此次編譯結果可以正常開機,惟一的問題是無法啟用 HDD DMA 傳輸模式。不過這個問題在參考過 Gentoo Forum: SATA drive not recognized properly - /dev/hda [solved] 說明後即可解決,簡單的說這台的 Intel ICH7 晶片組可以同時支援原本的 P-ATA 及新一代的 S-ATA 傳輸規格,Sam 的 kernel config 是採用了 P-ATA 模式,但此模式下的系統無法自動啟用硬碟 DMA 傳輸模式,連 hdparm 也會回報不支援的控制指令而無法設定。

解決的方式就是把早期的 ATA/ATAPI/MFM/RLL 驅動全部拔掉即可讓核心以新版的 Serial ATA (prod) and Parallel ATA (experimental) drivers 去驅動硬碟,一舉解決硬碟存取效率低落的問題。

本來 Kernel 的設定理應就此結束,後來在無線網上的設定上有點問題,遂將系統整個砍掉重新安裝 Ubuntu 7.10 想瞭解一下 Ubuntu 的設定法,隨後有了第二次設定 Kernel 的機會,當然,我又換回了 Gentoo 之下。

第二次的設定是選擇從無到有的建立,這次一開始就打算努力避免 HDD 存取效能低落的問題而放略過 ATA/ATAPI/MFM/RLL 相關的驅動程式,但多次檢查後仍無法解決因找不到 /dev/sda3 裝置而導致 Kernel Panic 的問題,可能是人老眼花,查了多次仍無法查出是忘了編入那一個驅動程式所造成。網路上也有看到類似災情,但他的解決方式是將 ATA/ATAPI/MFM/RLL 等驅動掛回去,但因為此舉與原先目的衝突而放棄。

另外在全新建立 .config 的過程中也發現到 Kernel 某些選項並未如其說明所述自動展開或隱藏,這是在我啟用 KVM 的 Virtualization 選項時注意到的小狀況。

所以第二次的安裝在一天不到的時間內就宣告終止。

第三次的安裝是在第二次安裝作業宣告終止的隔日立刻進行,但這天右手因肌鍵發炎疼痛難耐而到診所剌了一針,對此事件以『昨晚系統砍掉重練、今早右手砍掉重接』作為註解而在請假單上留下了一筆永不磨滅的記錄。

第三次的 Kernel 設定仍然以 Sam 的設定檔為基礎,先使用 ATA/ATAPI/MFM/RLL 方式開完機確定相關模組都已 ready 後,再修正成使用 Serial ATA (prod) and Parallel ATA (experimental) drivers 去驅動 SATA 裝置,有了前二次的經驗後這次就一次解決了。

後來因為手賤劈腿改裝 Ubuntu 8.04 LTS Desktop 版,所以有了第四次 Kernel 設定的機會。這次核心版次的選擇直接跳 2.6.25-gentoo-r1 ,期昐能一次解決無線網卡 Intel 3945ABG 無法啟用的問題。這次的設定以 kernel 的預設值為基礎,僅將 M1210 不具備之硬體支援予以拔除而以,最後則發現無線網路不通的問題其實不在驅動程式上,是在後端設定。

就目前而言,一個全新安裝的 Gentoo 系統可以考慮選用 Kernel 2.6.24-gentoo-r5 ,設定檔則可以直接從 Gentoo 2008.0 beta2 中撿過來用(我在猜 2008.0 正式版可能會再改用 2.6.25 核心吧)。

安裝順序

針對 Gentoo Linux AMD64 Handbook 所列順序個人覺得可能需要做些調整。

  1. 先設定好 Timezone
  2. 先裝好 grub
  3. 再開始 compile kernel 及 install

硬體操作習慣之支援

  1. 按下 Power 鍵要能自動關機:請安裝 acpi 套件並啟用之

藍牙支援

  1. Bluez 在 gnome 中提供一個 bluez-gnome 套件簡化 gnome 上的藍牙操作
  2. 藍牙滑鼠… 呃… 搞不定中,不過作法可參考 http://ubuntuforums.org/showthread.php?t=737918

layman 支援

  1. 預設狀態下只會看到 swegener 這個 portage overlay 庫,看了一下內容,個人建議順手加進 layman 管理清單中吧
  2. 修改 /etc/layman/layman.cfg 檔,將 nocheck : no 改為 nocheck : yes 後才能看到完整的 overlays list ,如果看不到請執行 layman -f 重新下載 overlay list 即可。

外接滑鼠支援

  1. 如果在 X 中啟用觸控板設定 synaptics 的話,很可能造成外接滑鼠的設定不受 X 認同而失效
  2. 也許有 synaptics 的特別設定可與外接滑鼠並存,但細節待確認

無線網路

  1. 確定已在 kernel 中加入對 iwlwifi 及 iwl3945 的支援
  2. 重開機後使用 iwconfig 取得無線網卡的裝置代碼為何(通常為 wlan0 )
  3. 在 /etc/conf.d/net 內寫入 wlan0 的基本設定
  4. 不要使用 Network Manager 作為網路管理工具,改用 WICD 進行管理,見 Gentoo Wiki 之說明

2007年5月21日

於 Gentoo 系統下列出已安裝套件清單

雖然 Gentoo 的套件管理系統很容易調整與使用,不過預設的環境下難以查詢系統已安裝的套件有那些。

在 Gentoo 討論區中有一篇關係列出已安裝套件的討論串:listing installed pkgs - qpkg replacement needed,簡單整理如下:

  • 使用 equery list 方式(需安裝 gentoolkit):
ada@www ~ $ time equery list > equery.list

real 0m46.202s user 0m6.555s sys 0m1.912s

  • 使用 eix 方式(需安裝 eix ):
ada@www ~ $ time eix -Icn | col -b | egrep '[.*]' | awk '{ print $2 }' > eix.list

real 0m1.285s user 0m1.356s sys 0m0.044s

※記得討論區中還有一個討論串是查詢系統上安裝的套件佔用了多少的硬碟空間, 不過我一時找不到。 請參考 [Tip] 誰是吃硬碟的怪物

2007年3月27日

解決 Eclipse 3.2.2 crash 的問題

這是從 Gentoo 討論區 Eclipse crashing 看來的。先前也遇到相同的問題而改用 Gentoo 套件管理系統提供的 3.2.1 版,目前尚未加以驗證。

簡單的講就是叫 Eclipse 不要 去使用 Mozilla 提供的轉碼函式,所以在執行 Eclipse 前先在 MOZILLA_FIVE_HOME 環境變數中指明 MOZILLA 不存在即可,如下例:

export MOZILLA_FIVE_HOME=/thisdoesnotexist

至於 Gentoo 官方提供的套件管理機制中即可直接指定不要與 Mozilla 相關函式庫有任何依存關係,如下所示:

www x11 # emerge -pv eclipse-sdk

These are the packages that would be merged, in order:

Calculating dependencies… done! [ebuild R ] dev-util/eclipse-sdk-3.2.1-r1 USE="cairo gnome opengl -branding -seamonkey" 0 kB

Total: 1 package (1 reinstall), Size of downloads: 0 kB

話說,我曾在 Eclipse 3.2.2 下設定 MOZILLA_FILE_HOME 到系統中的 Seamonkey 目錄中,不過看來是沒有效果,它仍然會 crash ....

2006年10月18日

在 Pentium2 上安裝 Gentoo

在公司有一台 Pentium 2 測試用主機,原本安裝的是 RedHat 9,但因為前陣子想要使用 Oracle Instant Client 時發現無法滿足 Oracle Instant Client 的環境需求,所以決定重新安裝成 Gentoo 2006.1 。

安裝心得:

  1. 不要妄想先在 vmware 中把系統建置起來後透過 tar 方式來複製系統,原因是 bootloader 會出錯。
    grub 在設定 MBR 時會出現(即使先重裝 grub 亦同),然後原本的磁碟分割就不見了。(後來的想法是… 不要把 boot 一起 tar 起來不知是否可行?)
  2. 在低容量磁碟機中安裝基礎系統時所使用的檔案系統建議不要用 ext3 ,以 3GB 磁碟空間來安裝相同系統環境時,ext3 剩下約 500MB 的空間,而 reiserfs 3.6 則剩下 1.5GB 的空間。
  3. Gentoo 2006.1 Installer CD 中的 de2104x 網路卡驅動程式應該有問題,它能驅動 de2104x 網路卡,但完全無法連線。
其他心得:
  1. 只要安裝 dev-db/oracle-instantclient-* 之後,即可操作 sqlplus 等資料庫連線,雖然還要自行下載檔案,不過不再做那些奇奇怪怪的設定真是太方便了!
  2. 若已有的 tnsnames.ora 檔,那麼可以直接放到 $ORACLE_HOME/network/admin/ 目錄下,記住:目錄名和檔名都是小寫。
  3. 另一個使用 tnsnames.ora 檔的方法是透過環境變數 TNS_ADMIN 直接指向 tnsnames.ora 的所在位置,見 ( How do I ensure that my "tnsnames.ora" file is being used in Instant Client?

2006年10月15日

Gentoo 的改變

使用 Gentoo 多年(呃,第一個版本似乎是 2004.1 吧),Gentoo 有了許多的改變:
  1. 安裝方式的改變:從最早要 stage 1, stage 2, stage 3 逐步建置,中期改從 stage 3 安裝為標準作業程序,到最近使用 GUI/Console installer 等等,和兩年前的安裝方式有極大的差異。
  2. Java System 改版:這是我在 VMware 上建立公司某台主機要用的環境時,突然發現 sun-jdk 1.5.0 版已不須再自行下載安裝檔時發現的,ebuild 中提供了這個連結 - Gentoo Java Upgrade Guide - 作為說明。這項改變是帶來了一些麻煩,雖然我照著 java-check-enviroment 的指示做了相關的調整,不過不確定會不會爛掉。附帶一提的是 Gentoo 上的 jdk-1.5.0 也正式支援 AMD64 了!
  3. 網路設定方式的調整:現在所有的網路設定(除了 hostname 的指定)都已搬到 /etc/conf.d/net 檔中進行,命名規則也很一致:
    ※ 指定網路裝置是使前綴詞之後所接的裝置名稱,完整說明詳見:Gentoo Network Configuration 及系統 /etc/conf.d/net.example 檔說明
    1. config_ :表示設定指定網路裝置的資訊
      例:config_eth0 = ( "192.168.0.1/24 brd 192.168.0.255" ) 表示指定 eth0 的 ip 為 192.168.0.1, netmask 為 255.255.255.0 ( /24 之意 ), broadcast 為 192.168.0.255
    2. routes_ :表示指定網路裝置所使用路由設定
      例:routes_eth0 = ( "default gw 192.168.0.1" ) 表示 eth0 的預設路由為 192.168.0.1
    3. dns_domain_ :表示指定網路裝置所使用的 domain name
      例:dns_domain_eth0= "adahsu.net" 表示在 eth0 上使用的 domain name 為 adahsu.net
    4. dns_servers_ :表示指定網路裝置所使用的 dns server 列表(會自動轉成 /etc/resolve.conf 檔)
      例:dns_servers_eth0="168.95.1.1" 表示 eth0 使用的 DNS Server 為 168.95.1.1
  4. GLIBC locale 支援方式的調整:在 2006.0 之前的版本,glibc 是透過 userlocales 這個 USE 選項做設定的,到了 2006.1 則改用 locale-gen 這隻程式來負責。大部份的 distro 似乎都已使用這種方式在運作。

2006年3月5日

在 Gentoo 上使用 nForce4 內建的音效功能

要在 Gentoo 上使用 nForce4 內建的音效功能並不困難,因為 Kernel 中所附的 ALSA 早就內建相關的驅動程式。

要讓 nForce4 上的 AC'97 可以正確發聲請依照以下幾個步驟:

  1. 將 AC97 音效模組加入 Kernel 中並掛入核心中。
    <M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
  2. 使用 alsaconf 進行音效卡設定,這個工具程式是由 alsa-utils 套件所提供。
  3. 使用 alsamixer 調整音量,至少要將 Master 及 PCM 兩個 channel 的音量拉高。
  4. 把喇叭的音量加大,然後開始播放任何音效檔案。
  5. 確定喇叭音源線插在正確的輸出 port 上直到聽到聲音為止。
※所有的 nForce 系列都是這種設定方式!

2006年3月4日

GOT EBuild@Athlon 64

為了驗證 Athlon64 3000+ @Gentoo 的相關功能是否正常,目前正在努力的編譯相關套件中。已知 GOT EBuild 有以下的問題:
  1. xttmgr-0.9.6-r1 沒有提供 amd64 的平台設定:目前採用自行增加的方式。
  2. cwttf-1.0 沒有提供 amd64 的平台設定:雖想採用自行增加的方式但仍無法完成安裝動作。
  3. mozilla-1.8_beta1 無法正確編譯:於編譯 mozilla 前請取消 PORTDIR_OVERLAY 變數的效力,讓 portage 使用英文的 mozilla-1.7.12-r2 版即可。

Gentoo 2006.0 預設語系支援

因為新安裝的 K8 Server,所以打算將環境改到 UTF-8 編碼上,想當然爾的作法就是:
ada@gentoo ~ $ export LC_ALL="zh_TW.UTF-8"
可惜事與願違,在檢查現行語系設定時出現了錯誤訊息(如下),經檢查後確認 Gentoo 2006.0 在預設語系上有做了些小小的改變。
ada@gentoo ~ $ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=zh_TW.UTF-8
LC_CTYPE="zh_TW.UTF-8"
LC_NUMERIC="zh_TW.UTF-8"
LC_TIME="zh_TW.UTF-8"
LC_COLLATE="zh_TW.UTF-8"
LC_MONETARY="zh_TW.UTF-8"
LC_MESSAGES="zh_TW.UTF-8"
LC_PAPER="zh_TW.UTF-8"
LC_NAME="zh_TW.UTF-8"
LC_ADDRESS="zh_TW.UTF-8"
LC_TELEPHONE="zh_TW.UTF-8"
LC_MEASUREMENT="zh_TW.UTF-8"
LC_IDENTIFICATION="zh_TW.UTF-8"
LC_ALL=zh_TW.UTF-8
首先與 Gentoo 2005.0 不同的是 glibc 預設啟用了 userlocales 選項,這表示在編譯 glibc 時會參考 /etc/locales.build 內的設定而選擇性的編譯出指定語系的支援。
gentoo ~ # emerge -pv glibc

These are the packages that I would merge, in order:

Calculating dependencies ...done! [ebuild R ] sys-libs/glibc-2.3.5-r2 -build -erandom -glibc-compat20 -glibc-omitfp -hardened -linuxthreads-tls (-multilib) +nls +nptl -nptlonly -pic -profile (-selinux) +userlocales 0 kB

Total size of downloads: 0 kB gentoo ~ #

然後在 /etc/locales.build 中的預設值僅提供歐、美等地主要國家的語系設定,換句話說當依照手冊完成系統建置時將發現無法透過指定 LC_ALL 或 LANG 環境變數的值而隨意切換系統語系。

解決的方法有二:

  1. 手動加入華文語系的支援並重新編譯 glibc 套件;
  2. 拿掉 glibc 的 userlocales 選項並重新編譯 glibc 套件。
目前系統暫時提供以下的語系支援,有需要時再重新編譯 glibc 套件即可。

新系統語系設定
en_US/ISO-8859-1
en_US.UTF-8/UTF-8
ja_JP.EUC-JP/EUC-JP
ja_JP.UTF-8/UTF-8
ja_JP/EUC-JP
zh_TW/BIG5
zh_CN.GB18030/GB18030
zh_CN.GBK/GBK
zh_CN.UTF-8/UTF-8
zh_CN/GB2312
zh_HK.UTF-8/UTF-8
zh_HK/BIG5-HKSCS

使用 eix 加速 portage 套件搜尋

原本在 Server 上是參考 [分享] esearch 介紹對 Gentoo portage 的套件進行搜尋加速的(使用 emerge -s <package name> 真的有夠慢)。

現在因為重新安裝一套 Athlon64 3000+ 系統,恰巧看到另一種加速搜尋的方式 eix ,所以改裝這套來玩玩。

  • 首先當然是安裝 eix 囉!
gentoo cache # emerge -pv eix

These are the packages that I would merge, in order:

Calculating dependencies ...done! [ebuild R ] app-portage/eix-0.3.0-r2 +bash-completion 0 kB

Total size of downloads: 0 kB

  • 安裝完畢後請先建立資料庫:
# update-eix
  • 日後只要執行以下命令即可對 eix 建立最新的 portage snapshot。
# eix-sync
  • 執行的效果如何?分別使用 eix 及 emerge 試著找尋 openoffice 相關套件資料可得到以下時間差異:
eix 搜尋結果
gentoo cache # time eix openoffice
* app-office/openoffice
     Available versions:  !1.1.1-r1[1]  !1.1.2[1]  !1.1.3-r1[1]  !2.0.0[1]  !2.0.1 [M]2.0.2_rc3
     Installed:           none
     Homepage:            http://go-oo.org
     Description:         OpenOffice.org, a full office productivity suite.

* app-office/openoffice-bin Available versions: !1.1.3-r1[1] ~1.9.79[1] ~2.0.0[1] 2.0.1 [M]2.0.2_rc4 Installed: none Homepage: http://www.openoffice.org/ Description: OpenOffice productivity suite

[1] /GOT

Found 2 matches

real 0m0.027s user 0m0.018s sys 0m0.009s

使用 emerge -s 搜尋結果
gentoo cache # time emerge -s openoffice
Searching…
[ Results for search key : openoffice ]
[ Applications found : 2 ]

* app-office/openoffice [ Masked ] Latest version available: 2.0.2_rc3 Latest version installed: Not Installed Size of downloaded files: 634,543 kB Homepage: http://go-oo.org Description: OpenOffice.org, a full office productivity suite. License: LGPL-2

* app-office/openoffice-bin Latest version available: 2.0.1 Latest version installed: [ Not Installed ] Size of downloaded files: 1,544,525 kB Homepage: http://www.openoffice.org/ Description: OpenOffice productivity suite License: LGPL-2

real 0m1.576s user 0m1.036s sys 0m0.317s

  • 結論:輸出資料比 esearch 詳細太多了!
esearch 操作結果
www ~ # esearch openoffice
[ Results for search key : openoffice ]
[ Applications found : 2 ]

* app-office/openoffice Latest version available: 2.0.1 Latest version installed: [ Not Installed ] Size of downloaded files: 620,780 kB Homepage: http://go-oo.org Description: OpenOffice.org, a full office productivity suite. License: LGPL-2

* app-office/openoffice-bin Latest version available: 2.0.1 Latest version installed: [ Not Installed ] Size of downloaded files: 1,544,525 kB Homepage: http://www.openoffice.org/ Description: OpenOffice productivity suite License: LGPL-2

附帶一提:

  1. OpenOffice 似乎還沒在 K8 上完成測試,所以僅能安裝二進元檔 openoffice-bin 的版本(這樣就少了 64 位元的噱頭了啦)。
  2. 另外根據 新增 portage-cdb (加速portage) 的說法,可以順手安裝 portage-cdb 這個套件以加速 portage 的運作。可惜的是目前也不支援 athlon64 環境… =.=b

2005年4月20日

Gentoo 的軟體本土化方式

在 Gentoo 中若想要讓軟體提供本土化界面的方法通常有二:
  1. 透過 LANG 達成,大部份軟體都只需這麼做即可,而且只要變更 LANG 即可立即更動語系界面。
  2. 使用環境變數編譯出特定語系版本:透過設定環境變數 LINGUAS 將軟體編譯成特定語系。如:KDE 及 MPLAYER
考慮把 LINGUAS=zh_TW 放到 /etc/env.d/ 下的環境變數設定檔如何?

2005年1月17日

/etc/conf.d/iptables

iptables 套件設定

# Location in which iptables initscript will save set rules on
# service shutdown
IPTABLES_SAVE="/var/lib/iptables/rules-save"

#Options to pass to iptables-save and iptables-restore SAVE_RESTORE_OPTIONS="-c"

#Save state on stopping iptables SAVE_ON_STOP="no"

# Enabled Forward for ip4 ENABLE_FORWARDING_IPv4="yes"

iptables 規則設定

iptables-save
# Generated by iptables-save v1.2.3 on Fri Mar 22 00:00:07 2002
*filter
:INPUT ACCEPT [16:1638]
:FORWARD ACCEPT [109916:83620350]
:OUTPUT ACCEPT [2156:327352]
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -s 220.130.11.8/32 -p tcp -m tcp -j ACCEPT
-A INPUT -i eth0 -s 220.130.11.8/32 -p udp -m udp -j ACCEPT
-A INPUT -i eth0 -s 220.130.11.9/32 -p tcp -m tcp -j ACCEPT
-A INPUT -i eth0 -s 220.130.11.9/32 -p udp -m udp -j ACCEPT
-A INPUT -i eth0 -s 69.6.56.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 61.145.71.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 69.6.57.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 69.6.54.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 82.32.217.0/24 -p tcp -m tcp --dport 25 -j DROP
-A INPUT -i eth0 -s 66.205.222.0/24 -j DROP
-A INPUT -i eth1 -d 207.244.119.109/32 -j DROP
-A INPUT -i eth0 -s 203.69.75.163/32 -j DROP
-A INPUT -i eth0 -s 218.94.25.130/32 -j DROP
-A INPUT -i eth0 -s 61.30.121.0/24 -j DROP
-A INPUT -i eth0 -s 61.222.32.0/24 -j DROP
-A INPUT -i eth0 -s 61.66.7.0/24 -j DROP
-A INPUT -i eth0 -s 210.202.68.0/24 -j DROP
-A INPUT -i eth0 -s 167.206.5.0/24 -j DROP
-A INPUT -i eth0 -s 218.20.0.0/16 -j DROP
-A INPUT -i eth0 -s 218.19.0.0/16 -j DROP
-A INPUT -i eth0 -s 217.97.137.0/24 -j DROP
-A INPUT -i eth0 -s 64.49.223.0/24 -j DROP
-A INPUT -i eth0 -s 32.103.231.0/24 -j DROP
-A INPUT -i eth0 -s 63.147.168.0/24 -j DROP
-A INPUT -i eth0 -s 207.248.48.0/24 -j DROP
-A INPUT -i eth0 -s 61.55.0.0/24 -j DROP
-A INPUT -i eth0 -s 32.103.25.0/24 -j DROP
-A INPUT -i eth0 -s 218.49.222.0/24 -j DROP
-A INPUT -i eth0 -s 32.103.225.0/24 -j DROP
-A INPUT -i eth0 -s 200.63.165.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 12.65.168.0/24 -p tcp -m tcp -j DROP 
-A INPUT -i eth0 -s 61.220.184.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 32.103.25.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 202.155.116.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 210.85.15.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.222.106.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 218.32.228.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 203.43.84.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.216.187.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 202.71.144.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 195.232.61.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.92.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.43.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.97.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.53.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.40.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.144.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.146.0.0/16 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.181.0.0/16 -p tcp -m tcp -j DROP
#-A INPUT -i eth0 -s 220.130.11.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.222.179.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 24.123.204.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 203.157.41.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.222.145.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 211.78.134.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.59.38.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 218.224.231.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 142.227.9.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 61.33.40.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 210.212.255.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 213.219.70.0/24 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -s 202.95.99.0/24 -p tcp -m tcp -j DROP
#-A INPUT -m string --string=root.exe -j DROP
#-A INPUT -m string --string=cmd.exe -j DROP
-A INPUT -s 192.168.0.0/255.255.255.0 -i eth1 -j ACCEPT 
#-A INPUT -i eth0 -p tcp -m tcp --dport 7869 -j ACCEPT
#-A INPUT -i eth0 -p icmp --icmp-type ! echo-request -j ACCEPT
-A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP 
-A INPUT -i eth0 -p tcp -m tcp --dport 20 -j ACCEPT 
-A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 23 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 25 -j ACCEPT 
-A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 110 -j ACCEPT 
-A INPUT -i eth0 -p tcp -m tcp --dport 113 -j ACCEPT 
-A INPUT -i eth0 -p tcp -m tcp --dport 137 -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 137 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 138 -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 138 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 139 -j DROP
-A INPUT -i eth0 -p udp -m udp --dport 139 -j DROP
-A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
#-A INPUT -i eth0 -s 61.219.235.50/32 -p tcp -m tcp --dport 1521 -j ACCEPT
#-A INPUT -i eth0 -s 61.219.235.50/32 -p tcp -m tcp --dport 2401 -j ACCEPT
#-A INPUT -i eth0 -s 61.219.235.50/32 -p udp -m udp --dport 2401 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 3000 -j ACCEPT 
#-A INPUT -i eth0 -p tcp -m tcp --dport 5432 -j DROP
#-A INPUT -i eth0 -s 61.219.235.50/32 -p tcp -m tcp --dport 5801 -j ACCEPT
#-A INPUT -i eth0 -s 61.219.235.50/32 -p tcp -m tcp --dport 5901 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 6881 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 7100 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 8000 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 10000 -j ACCEPT
#-A INPUT -i eth1 -p tcp -m tcp --dport 10025 -j ACCEPT 
#-A INPUT -i eth0 -p tcp -m tcp --dport 21000 -j ACCEPT
-A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -i eth0 -m state --state INVALID,NEW -j DROP 
-A INPUT -i eth1 -p tcp -m tcp -j ACCEPT
-A INPUT -i eth1 -p udp -m udp -j ACCEPT
#-A INPUT -d 220.130.11.8 -p tcp -m tcp --dport 5190 -j ACCEPT
#-A INPUT -i eth3 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -p tcp -m tcp -j DROP
-A INPUT -i eth0 -p udp -m udp -j DROP
COMMIT
# Completed on Fri Mar 22 00:00:07 2002
# Generated by iptables-save v1.2.3 on Fri Mar 22 00:00:07 2002
*nat
:PREROUTING ACCEPT [1452:106931]
:POSTROUTING ACCEPT [227:11773]
:OUTPUT ACCEPT 2269
# -A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 21000 -j DNAT --to-destination 192.168.0.2:21 
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 80 -j DNAT --to-destination 61.222.134.172:8080
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 80 -i eth1 -j DNAT --to-destination 192.168.0.246:3389
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.251:3389 
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.251:80 
#-A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.252:8080
# -A PREROUTING -d 61.222.134.172 -p tcp -m tcp --dport 20 -j DNAT --to-destination 192.168.0.2:20
#-A PREROUTING -p udp -m udp --dport 17500 -j DNAT --to-destination 192.168.0.34:17500
#-A PREROUTING -p udp -m udp --dport 17501 -j DNAT --to-destination 192.168.0.34:17501
#-A PREROUTING -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.253:80
-A PREROUTING -p tcp -m tcp --dport 113 -j ACCEPT
-A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j MASQUERADE 
COMMIT
# Completed on Fri Mar 22 00:00:07 2002

/etc/ssh/sshd.conf

視需要修改以下設定:

# 變更預設 port 
Port 23
# 僅啟用 SSH v2 模式
Protocol 2

# 可以考慮更詳細的 Log 內容 LogLevel INFO

# 限制登入人員帳號 AllowUsers ada # 等待登入時限 - 1 分鐘 LoginGraceTime 1m # 是否接受 root 登入 - 不准! PermitRootLogin no

# To disable tunneled clear text passwords, change to no here! PasswordAuthentication no PermitEmptyPasswords no

# 若要打開 X11 Forwarding 的話要設定以下選項 AllowTcpForwarding yes GatewayPorts yes X11Forwarding yes

/etc/sysctl.conf

kernel 有許多參數可以透過 sysctl 進行設定!請 emerge sys-apps/procps 取得此輔助工具!

系統在初始化時會透過 sysctl 去載入 sysctl.conf 中的設定,因此任何 sysctl 可以存取的設定都可以寫在 sysctl.conf 中,如下例:

# /etc/sysctl.conf:
# $Header: /home/cvsroot/gentoo-src/rc-scripts/etc/sysctl.conf,v 1.3 2002/11/1819:39:22 azarah Exp $

# Enable packet forwarding net.ipv4.ip_forward = 1 # Disables IP dynaddr #net.ipv4.ip_dynaddr = 0 # Disable ECN net.ipv4.tcp_ecn = 0 # Enables source route verification #net.ipv4.conf.default.rp_filter = 1 # Disables the magic-sysrq key #kernel.sysrq = 0

有多少參數可以設定?請執行以下指令:

root@server # sysctl -a

2005年1月16日

/etc/dhcp/dhcpd.conf

option domain-name "domain.com";
option domain-name-servers 168.95.192.1, 139.175.10.20, 168.95.1.1;

default-lease-time 600; max-lease-time 7200;

ddns-update-style ad-hoc;

subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.32 192.168.0.254; option broadcast-address 192.168.0.255; option routers 192.168.0.1; option domain-name-servers 168.95.192.1, 139.175.10.20, 168.95.1.1; }

/etc/conf.d/dhcp

# Copyright 1999-2004 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: /home/cvsroot/gentoo-x86/net-misc/dhcp/files/dhcp.conf,v 1.4 2004/03//06 03:30:53 vapier Exp $

# Configure which interface or interfaces to for dhcp to listen on # list all interfaces space separated. IFACE="eth1"

# Insert any other options needed DHCPD_OPTS=""

# If you wish to run dhcp in a chroot, run: # ebuild /var/db/pkg/net-misc/<dhcp version>/<dhcp-version>.ebuild config # and un-comment the following line. # You can specify a different chroot directory but MAKE SURE it's empty. #CHROOT="/chroot/dhcp"

2005年1月14日

/etc/smb/smb/conf

Samba 3 的設定重點:

# 配合 Windows 中文檔名,只有這個重點!

[global]
  unix charset = big5
  dos charset = big5

# 保險起見,最好設定可以連線的 ip

  hosts allow = 192.168.0.

# 帳號管理模式

  security = user
  # 記得用 smbpasswd 新增 samba 使用者帳號

# 檢查 smbpasswd 指定的儲存位置

smb passwd file = /etc/samba/private/smbpasswd

# 建立 smbpasswd 指定的儲存位置

root@server #mkdir /etc/samba/private
root@server #touch /smbpasswd

系統安全檢查

以下是個人用在 Server 上進行安全性檢查的 Script, 放在 /etc/cron.daily 中每日執行乙次!

security.check.sh
#!/bin/bash
CHECKDAY=$(date +%Y-%m-%d)
LOGDAY=$(date -d"1 day ago" +%Y%m%d)
[email protected]

# 檢查 Gentoo 安全公告 # 做此項檢查必須安裝 app-portage/gentoolkit /usr/bin/glsa-check -l | grep "[N]" > /tmp/security.check

if [ -s /tmp/security.check ] then /bin/mailx -s "$CHECKDAY GLSA Security Check List" $EMAIL < /tmp/security.check fi

# 檢查 rootkit 木馬 /usr/sbin/chkrootkit | grep -v "not" | grep -v "packlist" > /tmp/chkrootkit.log /bin/mailx -s "$CHECKDAY Rootkit Check List" $EMAIL < /tmp/chkrootkit.log

# 檢查檔案特殊屬性 /bin/lsattr /sbin | /bin/grep -v ^------------- > /tmp/lsattr.lst /bin/lsattr /bin | /bin/grep -v ^------------- >> /tmp/lsattr.lst /bin/lsattr /usr/bin | /bin/grep -v ^------------- >> /tmp/lsattr.lst /bin/lsattr /usr/sbin | /bin/grep -v ^------------- >> /tmp/lsattr.lst

/bin/mailx -s "$CHECKDAY lsattr check list" $EMAIL < /tmp/lsattr.lst

# 檢查 sshd 登入狀態 及 /var/log/messes 中的錯誤記錄 /bin/grep "failure" /var/log/sshd/$LOGDAY.log > /tmp/sshd.check /bin/grep "failure" /var/log/messages/$LOGDAY.log >> /tmp/sshd.check /bin/mailx -s "$CHECKDAY sshd login status" $EMAIL < /tmp/sshd.check

另外 gentoo 也包了 rkhunter 檢查工具,請先 emerge rkhunter 後,修改 /etc/cron.daily/rkhunter 內容:

/etc/cron.daily/rkhunter
########################## Begin Configuration ###############################

# Default options - more options may be added depending on the # configuration variables you set below RKHUNTER_OPTS="-c --cronjob --skip-keypress"

# Set this to 'yes' to enable ; this script does nothing otherwise ENABLE=yes

# Automatically update rkhunter's dat files prior to running? UPDATE=yes

# Set this to 'yes' if you wish the output to be mailed to you SEND_EMAIL=yes

# NOTE: the following EMAIL_* variables are only relevant if you set the # SEND_EMAIL variable to 'yes' EMAIL_SUBJECT="${HOSTNAME}: rkhunter output" EMAIL_RECIPIENT=root EMAIL_CMD="|mail -s "${EMAIL_SUBJECT}" ${EMAIL_RECIPIENT}"

# Log rkhunter output? LOG=yes

# The default log location is /var/log/rkhunter.log. Set this variable if # you'd like to use an alternate location. #LOGFILE=""

# By default, the log file created by rkhunter is world-readable (0644). If # you'd like to modify the permissions afterwards, set this variable. The # value of this variable, must be a valid chmod argument such as '0600' or # 'u+rw,go-rwx'. See the chmod(1) manual page for more information. LOGFILE_PERMS="0600"

# By default, rkhunter overwrites the previous log. Set this variable # to 'yes' if you'd like the log output appended to the logfile, instead # of overwriting it. SAVE_OLD_LOGS=no

# Set to 1 to recieve only warnings & errors # Set to 2 to recieve ALL rkhunter output # Set to 3 to recieve rkhunter report VERBOSITY=1

########################### End Configuration ################################

2005年1月13日

/etc/syslog-ng/syslog-ng.conf

特別注意:

  1. syslog-ng 預設是將訊息全部寫入 /var/log/messages 這個檔案,以下的設定會嘗試建立一個 /var/log/messages/ 的目錄,因此 /var/log/messages 這個檔案要先刪除,否則 syslog-ng 就不會啟動!
  2. 以下的設定會在 /var/log 下建立多個目錄,並以 $YEAR$MONTH$DAY.log 為檔案建立每一日的記錄檔,因此要記得整理、刪除不要的檔案!
# $Header: /var/cvsroot/gentoo-x86/app-admin/syslog-ng/files/syslog-ng.conf.gentoo,v 1.4 2004/07/18 02:25:02 dragonheart Exp $
#
# Syslog-ng default configuration file for Gentoo Linux
# contributed by Michael Sterrett

options { long_hostnames(off); sync(0);

# The default action of syslog-ng 1.6.0 is to log a STATS line # to the file every 10 minutes. That's pretty ugly after a while. # Change it to every 12 hours so you get a nice daily update of # how many messages syslog-ng missed (0). stats(43200); create_dirs(yes); };

source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); };

destination messages { file( "/var/log/messages/$YEAR$MONTH$DAY.log" ); };

# By default messages are logged to tty12… destination console_all { file( "/dev/tty12" ); }; # ...if you intend to use /dev/console for programs like xconsole # you can comment out the destination line above that references /dev/tty12 # and uncomment the line below. #destination console_all { file("/dev/console"); };

#log { source(src); destination(messages); }; #log { source(src); destination(console_all); };

#postfix log filter f_postfix { program("postfix"); }; destination d_mail { file( "/var/log/mail/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_postfix); destination(d_mail); };

#driver log filter f_driver { program("drivers/usb/input/"); }; destination d_driver { file( "/var/log/drivers/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_driver); destination(d_driver); };

#POP3 log filter f_pop { program("pop3"); }; destination d_pop { file( "/var/log/pop/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_pop); destination(d_pop); };

#cron log filter f_cron { program("CRON"); }; destination d_cron { file( "/var/log/cron/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_cron); destination(d_cron); };

filter f_cron_daemon { program( "cron" ); }; destination d_cron_daemon { file( "/var/log/cron/daemon-$YEAR$MONTH$DAY.log" ); }; log { source( src ); filter( f_cron_daemon ); destination( d_cron_daemon ); };

#sshd log filter f_sshd { program("sshd"); }; destination d_sshd { file( "/var/log/sshd/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_sshd); destination(d_sshd); };

#spam log filter f_spam { program("spam"); }; destination d_spam { file( "/var/log/spam/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_spam); destination(d_spam); };

#amavisd log filter f_amavisd { program("amavis"); }; destination d_amavisd { file( "/var/log/amavisd/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_amavisd); destination(d_amavisd); };

#dhcpd log filter f_dhcpd { program("dhcpd"); }; destination d_dhcpd { file( "/var/log/dhcpd/$YEAR$MONTH$DAY.log" ); }; log { source(src); filter(f_dhcpd); destination(d_dhcpd); };

#webmin log filter f_webmin { program( "webmin" ); }; destination d_webmin { file( "/var/log/webmin/$YEAR$MONTH$DAY.log" ); }; log { source( src); filter( f_webmin ); destination( d_webmin ); };

#all other log filter f_other { not match( 'ctrl urb status' ); }; log { source(src); filter( f_other ); destination(messages); flags(fallback); };

配合前述的設定檔,每月進行一次 log 檔的整理、壓縮動作。

#!/bin/bash

LOG_DIR="amavisd cron dhcpd mail messages spam sshd webmin" LOG_HOME="/var/log" ARCHIVE_MONTH=$(date -d"1 month ago" +%Y%m) LOG_FILE="/tmp/logArchive.log"

for DIR in $LOG_DIR; do cd $LOG_HOME/$DIR echo "Creating $DIR-$ARCHIVE_MONTH.tar.bz2" >> $LOG_FILE echo "---------------------------------------------------------------" >> $LOG_FILE tar -cjvvf $DIR-$ARCHIVE_MONTH.tar.bz2 $ARCHIVE_MONTH*.log >> $LOG_FILE echo "---------------------------------------------------------------" >> $LOG_FILE echo "Removing $DIR $ARCHIVE_MONTH log files" >> $LOG_FILE rm $ARCHIVE_MONTH*.log echo "===============================================================" >> $LOG_FILE echo >> $LOG_FILE done;

/bin/mailx -s "$ARCHIVE_MONTH archived log files" <系統管理員信箱> < $LOG_FILE