Linux Mint Debian

[華語, cmn-Hant-TW]

一向就對 UBUNTU 這種半年就來大更新的 distro 很感冒,畢竟也不是說非常常玩 Linux,每次心血來潮想碰一下的時候都在灌大更新也很煩,所以就想找看看有沒有適合的滾動式發行套件 (rolling distro) 能符合我的需求。

滾動式的概念很簡單,就是他沒有一個固定的版號,反正 update 就能跳到最新的就是了,所以也不用管啥 11.04 哪天過期啦、我要不要升到 11.10 啦之類的。最有名的應該算是 archlinux 了吧,其實公司的某幾台早就是灌 archlinux (前一篇才剛提到)了,不過我跟 Linux 不太熟,要像在 FreeBSD 下面一樣能自己手工把桌面弄出來大概還要花好幾個月的時間研究,不符合本次玩票性質的需求。在網路上找了一下發現 Linux Mint Debian 似乎不賴,首先 GUI 是包好好的,有 gnome 跟 xfce 可以選用,然後底層是 debian testing。剛好 debian 算是在我不太熟的 Linux 中比較熟的一套,二話不說挑了個人比較偏好的 xfce 灌來玩看看了。


灌起來沒遇到啥問題,沒看錯的話語系有 nan-Lant-TW (台灣福佬語羅馬字),不過我沒有試下去就是,整個介面其實很不 xfce,不過懶得改而且其實也不會太難用,就不去動他了。網路設定在右下角時鐘的左側,一般 DHCP 的話應該不用設定啥就直接上網了。再旁邊的那個圖示則是更新的通知,一開始應該一定會有東西可以更新,套件的更新可以透過圖型化介面的 Update Manager 來完成,這其實就是 GUI 版的 apt-get,所以不想用這東西要自己下 apt-get 指令更新也是可以的,更新的時候倒是有遇到一些問題,不過移掉問題套件重裝之後問題就解決了,滾動式發行套件難免會遇到這樣的問題,畢竟更新是持續不斷,穩定性總是會稍低些。

整體而言 Linux Mint Debian 算是相當符合我的需求,如果有人對升級感到厭煩的也可以考慮來玩一下這套看看。

Posted in FreeBSD. Tags: . No Comments »

collect entropy

[華語, cmn-Hant-TW]

幫一台 archlinux 更新時遇到的。 pacman 的新簽章機制需要跑一次 pacman-key –init,結果吃到這錯誤:

Not enough random bytes available. Please do some other work to give
the OS a chance to collect more entropy! (Need 279 more bytes)

結果在這篇找到解答了,只要跑 ls -R / 就能「收集」到大量的 entropy,問題於是解決。不過實測時發現先跑 ls -R / 再執行 pacman-key 似乎還是會吃到錯誤,要兩個同時跑才行,也許是因為只有在 ls -R / 正在跑的時候亂度才足夠吧。

Posted in FreeBSD. Tags: . No Comments »

samba + bonjour

[華語, cmn-Hant-TW]

之前這篇有提到開 AFP 分享以及用 Model Name 偽裝成某種型號的 Mac 的方法,其實用同樣的機制也可以把 SMB 的伺服器包的漂漂亮亮的,而且多這層之後用戶端的 Finder 找分享的速度也會比較快,不管從美觀或實用的角度來看都是值得打開。和那篇一樣有 avahi 或 howl 兩種選擇,設定上也和那篇類似,只是把 AFP 的設定換 SMB 而已。 (SMB 伺服器當然要另外安裝,這邊假設 SMB 本來就通的,沒有的話去 ports 找 net/samba3x 挑一個來裝,samba 設定就不詳述了)

/usr/local/etc/avahi/services/smb.services (avahi)
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
 
<name replace-wildcards="yes">%h</name>
 
<service>
<type>_smb._tcp</type>
<port>445</port>
</service>
 
<service>
<type>_device-info._tcp</type><port>0</port>
<txt-record>model=Xserve</txt-record>
</service>
 
</service-group>

smb.services 檔名一樣是可以自訂的,除了 type 要改成 _smb._tcp 外其他和 afp 的設定都相同,細節請參考 AFP 那篇

/usr/local/etc/mDNSResponder.conf (howl)
"ServerName" _device-info._tcp local. 1 "TXTVersion=1.0" "model=Xserve"
"ServerName"  _smb._tcp            local.      445

用 howl 的話那所有 service 的設定都會在這個檔案裡面,如果 AFP 已經開了的話就直接加上一行 SMB 的設定即可。

值得注意的是雖然平常 SMB 服務是用 139 這個埠,但是 Mac OS X 10.7 Lion 不吃這個埠的 SMB 分享,所以用 445 比較保險。

Posted in FreeBSD. Tags: , , . No Comments »

zfsv28 dedup

[華語, cmn-Hant-TW]

在六月中左右 FreeBSD 8.2-STABLE 的 zfs 升級到了 v28

這版最主要的特色是 dedup,也就是 block level 的 deduplication,傳說中的 virtual machine disk image 備份救星 (誤)。 因為是 block level,所以檔案位置怎麼放,檔案是不是只修改一點點這些通通不用管了,反正 zfs 覺得這兩個 block 是長得一樣的話,就自動會處理,如果硬碟裡面有一堆彼此間差異不大的大檔案,那效果就會非常好,遠比 lzma 或是 gzip 壓縮更有快感 (事實上 dedup 跟壓縮是可以併存的,歡迎挑戰硬體極限) 。

要開 dedup 很簡單,在有 zfsv28 的系統下 zfs set dedup=on filesystem 指令就可以打開,要注意的是 dedup 是從整個 pool 來看的,同一個 pool 下可以有些 filesystem 有開,有些沒有,算是相當有彈性。dedup 的效果可以簡單的用 zpool list 看出,v28 多了一格 DEDUP,那個的倍率就是 dedup 的效果。

NAME         SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
backup       696G   445G   251G    63%  1.80x  ONLINE  -

在有開 dedup 的地方,每一個 block 的 checksum 會存在一個叫 DDT 的表裡面,根據 dedup FAQ 的講法,一般 record size  128K 的情況下,20TB 的資料會需要 32 GB 的實體記憶體來放 DDT,如果沒那麼大的記譩體那就會吃到硬碟,那就會非常非常慢。折衷方案就是找一顆 SSD 當 L2ARC,DDT 主要是讀取 (因為要比對),SSD 的讀取效能遠比硬碟來得好,這個工作還算扛得起來。

記憶體不足硬上 dedup 會對效能有什麼衝擊呢,簡單的測試

( 2G 記憶體,640G 的硬碟空間,zfs compression = gzip; atime = off)
測試檔案為 boost_1_45_0.tar.bz2 大小約 38MB,解壓縮後約275MB,用 FreeBSD 內建的 tar 來解壓,然後用 rm 刪掉,同樣用系統的 time 來測時間

DEDUP on:
tar 19.063u 6.914s 1:03:02.62  0.6%   88+1735k 0+0io 0pf+0w
rm   0.171u 8.741s 1:12:41.98  0.2%   26+2530k 0+0io 0pf+0w
DEDUP off:
tar 19.372u 6.963s    1:05.41 40.2%   74+1464k 0+0io 0pf+0w
rm   0.029u 3.826s    0:08.04 47.7%   16+1528k 0+0io 0pf+0w

這是最慘烈的情況 (八成是整個DDT都在硬碟上了),DEDUP on 一般情況其實沒那麼慢,大約數十分鐘吧,如果硬碟裡面已經有相同的資料的話那還會再更快些,不過再快也是被 DEDUP off  時的速度慘電就是。從實際應用來看,解壓縮一個數十MB 的檔案要花數十分鐘到一小時,砍掉解壓縮出來的東西還要再花數十分鐘到一個小時是什麼情況? 只能說硬體不夠力的話,還是不要亂開 DEDUP 吧。 (不過一想到 DEDUP 的快感… 再加上 RAM 現在便宜的跟●●一樣,好像升級一下再來開也是不錯的選擇)

Posted in FreeBSD. Tags: , , . 1 Comment »

加上/移去 zpool cache

[客家話, hak-Hant-TW]

假使你有一隻分割區 da0s1,要加到 volume1 這隻 pool 袛肚,可以按仔下指令:

zpool add volume1 cache da0s1

用 zpool status 可以看有加成功沒,是講要移去:

zpool remove backup-mmt da0s1

指令當簡單。

Posted in FreeBSD. Tags: , . No Comments »

Dovecot LMTP

[華語, cmn-Hant-TW]

花了不少時間測試,終於讓 Dovecot LMTP 能正常運作了。會用 lmtp 的原因是 sieve 會用到,對於 sieve 來講 dovecot 有支援 lda 跟 lmtp 這兩種方式,評估了一下 lmtp 在非 virtual user 的環境比較簡單,所以就採用 lmtp 方案,用到的 ports 主要有:

  • mail/postfix
  • mail/dovecot2
  • mail/dovecot2-pigeonhole

在之前的嘗試中,不斷的遇到像是這樣的錯誤:

auth: passwd(whsyu@pighead.cc): unknown user
550 5.1.1  User doesn't exist: whsyu@pighead.cc (in reply to RCPT TO command))

這篇這篇有提到,問題是因為從 postfix 傳到 dovecot lmtp 的使用者名稱帶 domain,不過系統用的使用者名稱當然是沒有帶,所以要告訴 lmtp 使用者名稱的格式,不過照那兩篇的改法怎麼改都還是會吃到一樣的錯誤,不管是 pam 或是 ldap 認證結果都一樣。不過第二篇有提到 auth_username_format 這個參數,查了一下說明文件後發現 n 會把 domain 去掉,然後 L 會把大寫通通變成小寫,所以其實只要加 %Ln 就不會再吃那個錯誤,而整個設定就會變成這樣: (只列出和 lmtp/sieve 有關的部份)

/usr/local/etc/dovecot/dovecot.conf
auth_username_format = %Ln
protocols = lmtp sieve
service managesieve-login {
}
 
service managesieve {
}
 
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    group = postfix
    mode = 0660
    user = postfix
  }
  client_limit = 1
}
 
protocol lmtp {
  mail_plugins = sieve
}
 
plugin {
   # Used by both the Sieve plugin and the ManageSieve protocol
   sieve = ~/.dovecot.sieve
   sieve_dir = ~/sieve
}

關於 sieve 的部份,其實沒啥好設的,client_limit = 1 則是因為我們的系統還有 mbox (當初會用 dovecot 就是因為要讓 mbox 跟 maildir 和樂相處),而 dovecot 要求在有 mbox 的環境下一定要下這個參數,所以就把他加上去。

/usr/local/etc/postfix/main.cf
mailbox_transport = lmtp:unix:/var/spool/postfix/private/dovecot-lmtp

非 virtual user 的模式要加的是這個,如果是 virtual user 的話要用 virtual_transport,後面的檔案位置要跟 dovecot.conf 裡面的設定一樣才會動,設定完重開 dovecot 跟 postfix 之後應該就 ok 了。

Posted in FreeBSD. Tags: , , , , . No Comments »

AFP Server

[華語, cmn-Hant-TW]

據說 Mac 連 AFP 還是比 SMB 順,所以就想架看看用起來的感覺如何,伺服器是 FreeBSD 8.2,要安裝的 ports 有

  • /usr/ports/net/netatalk
  • /usr/ports/net/avahi (選用)
  • /usr/ports/net/howl (選用)

avahi 跟 howl 挑一個來裝即可。又為了要用 LDAP 做為登入認證,在編 netatalk 時記得要打開 PAM 的選項,這樣在安裝的時候會自動在 /etc/pam.d/ 裡面產生一個叫 netatalk 的檔案,這個檔案的內容預設是引用 /etc/pam.d/system 的設定,以 LDAP 來講,只要之前在 system 檔裡面有設定好 pam_ldap 的話,什麼都不用改就直接可以用了,接著就是要設一堆的設定檔

/etc/rc.conf
netatalk_enable="YES"
afpd_enable="YES"
cnid_metad_enable="YES"
 
# avahi 用這個
avahi_daemon_enable="YES" 
 
# howl 用這個
mdnsresponder_enable="YES"
mdnsresponder_flags="-f /usr/local/etc/mDNSResponder.conf"

個人的習慣是把這些設定值通通丟到 /etc/rc.conf.local 裡就是。

/usr/local/etc/avahi/services/afp.services (avahi)
<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
 
<name replace-wildcards="yes">%h</name>
 
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
 
<service>
<type>_device-info._tcp</type><port>0</port>
<txt-record>model=Xserve</txt-record>
</service>
 
</service-group>

afp.services 檔名可以自訂,只要內容長得一樣即可。
其中 %h 是 server name,是顯示在用戶端 Finder 上的機器名稱,然後 model 則是決定顯示的圖形,詳情後述。

/usr/local/etc/mDNSResponder.conf (howl)
"ServerName" _device-info._tcp local. 1 "TXTVersion=1.0" "model=Xserve"
"ServerName" _afpovertcp._tcp  local. 548

這個檔案似乎安裝的時候不會自動產生,要自行建立。其中 ServerName 是用戶端的 Finder 看到的顯示名稱,model 後面的 Xserve 是指定顯示圖形,詳請看下一段。

Model Name

不管是 avahi 或是 howl 都可以丟 device-info,在 Finder 上會根據 device-info 決定顯示的圖形。像是指定成 Macmini 的話就會顯示成 Mac Mini 的樣子,很有趣。在用戶端 (Mac OS X) 上的 /System/Library/CoreServices/CoreTypes.bundle/Contents/Info.plist 檔案裡可挖出所有可用的值,常見的有:

  • Xserve
  • PowerBook
  • PowerMac
  • Macmini
  • iMac
  • MacBook
  • MacBookPro
  • MacBookAir
  • MacPro
  • AppleTV1,1
  • AirPort
  • iPhone
/usr/local/etc/netatalk.conf
ATALK_MAC_CHARSET='UTF8-MAC'
ATALK_UNIX_CHARSET='UTF8'

把他通通設成 UTF8 比較不會有問題,有需要用別的編碼就自己改即可。

/usr/local/etc/AppleVolumes.default
~
/share             "Share"    allow:whsyu,grass

檔案裡面的說明很詳細,大致上就是 “目錄名 – 顯示名稱 – 選項” 這樣的格式,要分享幾個目錄就寫幾行,以這個例子來看,就是各人的家目錄,以及只分享給 whsyu 跟 grass 的 /share 目錄,在 Finder 上會顯示成 Share 資料夾,要注意的是這邊的 allow 只是給不給看的設定而已,權限還是會跟系統走,如果該使用者在系統上本來就沒有存取該目錄的權限,那就算他看得到那個分享出來的目錄也是沒有用的。

手動執行

/usr/local/etc/rc.d/nettalk start
/usr/local/etc/rc.d/avahi-daemon start (avahi用這個)
/usr/local/etc/rc.d/mdnsresponder start (howl用這個)

通通設定完之後,要直接用的話就手動去打開服務即可,然後就可以去用戶端玩看看了。

特別注意:ZFS 目錄

分享 zfs 的目錄有可能會吃到「無法完成此項操作,因為找不到〇〇〇〇的原項目。」這樣的錯誤訊息,在用戶端的 Console 會看到這樣:

NetworkNode::handleMountCallBack returned 2
NetworkNode::handleMountCallBack returned -50

通常來講,netatalk 會把設定檔裡面權限不足或是名字打錯的目錄過濾掉,並不會分享給用戶端,因此用戶端看得到理論上應該是一定會找得到。那這個錯誤是怎麼產生的呢? zfs 的 volume 用 set mountpoint 直接指定掛載點時,zfs 建立的目錄是只有 root 有存取權限,但是隨後掛載上去的就會蓋掉了原先的權限,於是一般使用者在本機上也就能存取了。netatalk (現在版本 2.1.5) 不知為何會被卡在這邊,不過解決方法也不難,就先暫時改掉 mountpoint,把目錄改成 755 之類的權限後再把 mountpoint 改回去即可。

參考資料

http://linuxnet.ch/groups/linuxnet/wiki/f8a83/FreeBSD_Setup_Netatalk_Server_for_OSX_with_Bonjour.html

http://thomas.pelletier.im/2010/01/time-machine-freebsd-and-afp-are-on-a-little-boat/

Posted in FreeBSD. Tags: , , , , . 2 Comments »

在 fstab 裡用 label 或 ufsid 標示磁碟

[華語, cmn-Hant-TW]

在 FreeBSD 下,/etc/fstab 是開機時掛載磁碟的依據,通常看到的形式會是類似這樣的

/dev/ad0s1a             /               ufs     rw              1       1

不過這樣會產一個問題,如果換了一個硬碟的位置的話很有可能 ad0 就不再是 ad0,開機時就會卡住叫你手機輸入正確的 root 檔案系統之位置,這時候 label 就派上用場了,我們可以用 glabel 幫分割區加上 label
glabel label root_fs /dev/ad0s1a
這樣就會在 /dev/label 下出現一個新的檔案叫 root_fs,然後 /etc/fstab 下就可以改成這樣寫,不用管他是 ad0 還是 ad1 或是啥的了。

/dev/label/root_fs             /               ufs     rw              1       1

這方法的問題是在於,掛載中的磁碟是不能加 label 的,要嘛就是去找張 Live CD 開機後在還沒掛載的情況下來修改,不然就要用另一個方法了。
執行 dumpfs /dev/ad0s1a | grep id 就可以看到 ad0s1a 的 ufsid 是啥,這個值應該會出現在 /dev/ufsid 裡面 (沒看到沒差),然後改 /etc/fstab

/dev/ufsid/4d6b031d6e0de88e             /               ufs     rw              1       1

這樣效果一樣,開機時就會自動去找是這個 ufsid 的磁碟了,至於 swap 的話當然不會有 ufsid 這東西,所以還是乖乖的用 label 處理吧。

註:zfs 不用這種方式掛載,用 zfs 的話可以直接忽略本篇。

Posted in FreeBSD. Tags: , . No Comments »

關掉 samba 印表機分享

[客家話, hak-Hant-TW]

samba 裝好就會有分享印表機的功能 – 毋管機器頂真經有印表機也是沒。 是講沒差就是,不過 windows 的 client 端看到空的印表機當毋爽快,就看了一下有變不見的方法沒。

有找到,這篇有講是沒想要看到,加這幾行到 smb.conf 就可以了。

 load printers = no
 printing = bsd
 printcap name = /dev/null
 disable spoolss = yes

喔,改完要重開才有效啦。

Posted in FreeBSD. Tags: . No Comments »

postfix 純收不寄

[華語, cmn-Hant-TW]

之前因為某個需求,要暫時擋掉一台 postfix mail server 寄外部信的功能。找了一下發現其實並不會很困難。在這一篇有提到直接修改 master.cf 即可,把他改成這樣:

smtp      unix  -       -       -       -       -       local
relay     unix  -       -       -       -       -       local
local     unix  -       n       n       -       -       local

重點在改最後一行,smtp, relay 本來都是 smtp,通通改成 local 後就會寄不出去了,這樣的設定不會影響收信 (因為收信就是 local),local 寄 local 當然也沒問題,不過對外發信會用到的 smtp 或是要 relay 的話那就完全出不去了,完全符合只擋寄外部信的要求。

不過要注意的是雖然暫時是寄不出去沒錯,不過其實信也只是暫時擋到,等你重新開放後 postfix 就會一次一起寄出去,如果剛好有大量信件卡住的話要特別注意就是了。

Posted in FreeBSD. Tags: , . No Comments »