因為開發上的方便,透過共用資料夾把檔案給 VM 裡的 Apache 使用。
但發生了即使檔案在 host 上已經變更了,透過在 guest 裡的 Apache 讀到的內容卻還是舊版本的狀況。
查了一下發現是要在 <Directory> 設定中加上下面兩個設定:
EnableMMAP Off
EnableSendfile Off
因為開發上的方便,透過共用資料夾把檔案給 VM 裡的 Apache 使用。
但發生了即使檔案在 host 上已經變更了,透過在 guest 裡的 Apache 讀到的內容卻還是舊版本的狀況。
查了一下發現是要在 <Directory> 設定中加上下面兩個設定:
EnableMMAP Off
EnableSendfile Off
在對儲存裝置負載比較重的主機上,調整 I/O scheduler 很可能可以得到效能的改善。
要讀取目前所選取的 scheduler 只要執行 cat /sys/block/sda/queue/scheduler 即可,目前使用中的 scheduler 會用方括號標示出來。
在執行時期可以透過 echo "noop" > /sys/block/sda/queue/scheduler 來更改,不過這個變更重開機後會失效。
永久變更可以使用 sysfsutils 來針對特定裝置選用不同的排程器,或是直接改啓動時的 kernel 參數來變更系統預設選用的排程器。
因為我是要用在 VM 上面,不太有多個裝置要用不同組態的需求,所以我選擇使用改變 kernel 參數的方式。
基本上就是編輯位於 /etc/default/grub 的這個設定檔,修改 GRUB_CMDLINE_LINUX_DEFAULT 變數以加入 elevator=noop 選項:
GRUB_CMDLINE_LINUX_DEFAULT="elevator=noop quiet"
最後要記得執行 sudo update-grub 以更新線上的 grub 設定,不然設定不會生效。
在 debian 透過 tasksel 裝進來的 GNOME 環境不知道為什麼包了超多有的沒的東西,相當之傷腦筋... 但今天發現,可以只裝必須的部份就好了。
apt-get install gnome-core avahi-daemon p7zip synaptic system-config-printer hal-cups-utils
流程其實蠻簡單的,在編譯模組第一步的 perl Makefile.PL 用 PREFIX=%TARGET_DIRECTORY% 作為參數即可。
perl Makefile.PL PREFIX=%TARGET_DIRECTORY%
make
make test
make install
然後設定環境變數 PERL5LIB 到所給定的 %TARGET_DIRECTORY% 下面的 share/perl 以及 lib/perl 之中,注意中間要使用冒號分隔。
export PERL5LIB=%TARGET_DIRECTORY%/share/perl:%TARGET_DIRECTORY%/lib/perl
除了 PERL5LIB 之外,也可以設定 PERLLIB 這個環境變數,不過 PERL5LIB 優先權比較高,而且這兩個變數是互斥的,換言之 Perl 會先找 PERL5LIB 這個環境變數是不是存在,如果沒有才去找 PERLLIB 環境變數。
簡單講就是安裝 netatalk 這個套件,設定一下就一切搞定。
問題在於,在 debian 內附的 netatalk 不支援認證時加密,因為 OpenSSL 的授權跟 GPL 有所衝突的關係。這實在是很無聊的理由... 不過總之就是這樣。
因此,就得自己編譯 netatalk 套件。方法跟這篇講的一樣,基本上就是安裝額外的相依套件,然後照著一般的建置程序做就可以了。
cd /usr/src
apt-get install openssl libssl-dev cracklib2 libpam-cracklib cracklib2-dev
apt-get source netatalk
apt-get build-dep netatalk
然後編輯建置規則檔
cd netatalk-2.0.3
vi debian/rules
在大概第 18 行附近找到 ##FIXME: Other changes are needed, like enabling DHX plugin 的字樣,把 DEB_BUILD_OPTIONS=ssl debuild 加進去。
最後執行 dpkg-buildpackage 就會開始製作套件檔,做完用 dpkg -i 安裝就完成了。
接著再修改 /etc/default/netatalk 設定檔,我改了 UAMLIST 並且關掉 AFPD 跟儲存 meta data 用的 CNID 之外的服務。主要是把 ATALKD 跟 PAPD 關掉,其他沒動應該也是無所謂。
AFPD_UAMLIST="-U uams_dhx.so,uams_randnum.so"
ATALKD_RUN=no
PAPD_RUN=no
CNID_METAD_RUN=yes
AFPD_RUN=yes
TIMELORD_RUN=no
A2BOOT_RUN=no
再來就是參考這邊,修改 /etc/netatalk/afpd.conf 設定,主要是把 AppleTalk 關掉,走 TCP 就好了。
- -noddp -uamlist uams_randnum.so,uams_dhx.so
然後新增 Avahi 的服務描述檔,這樣就可以直接用 Bonjor 找到機器。
<?xml version="1.0" standalone='no'?><!--*-nxml-*--> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name replace-wildcards="yes">AFP on %h</name> <service> <type>_afpovertcp._tcp</type> <port>548</port> </service> </service-group>
該重啟動的重啟動之後,應該就可以用了。
另外還可以在 /etc/netatalk/AppleVolumes.default 加上 option:usedots,noadouble 讓一些 netatalk 用來儲存 Mac 特殊檔案狀態用的檔案名稱不會被編碼,而可以藏起來。