Monthly Archives: October 2012

把 Arch Linux 轉用 Systemd

老實說,我覺得把原本可以用 /etc/rc.conf 一檔解決諸多設定,改為要分散到好幾個設定檔,有點被打 KISS principle 的巴掌,特別是我在不久前的 COSCUP BoF 還大吹大擂。不過,既然官方「鼓勵」快點轉移,我也就一點一滴地照著 Wiki 說明轉換。

轉用 Systemd 也不盡然這麼讓我為難與厭惡,至少帶來的加速開機效果是很顯著的,這是因為 Systemd 採用並列式(同時跑多個)、條件式(需要時才跑)啟用各項系統服務的關係。

也因此,以往有些東西在 Sysvinit 一項接一項前後相依輪流跑的方式下,是保證可以正常執行的,而改用 Systemd 之後就不一定了,像是我會為 ThinkPad 的 TrackPoint 調整一些自訂參數,寫在 /etc/rc.local 裡跑,就未如預期在 Systemd 底下跑,所以改用 udev 寫 rules 來控制:

KERNEL=="serio2", SUBSYSTEM=="serio", DRIVERS=="psmouse", WAIT_FOR="/sys/devices/platform/i8042/serio1/serio2/sensitivity", ATTR{sensitivity}="170", ATTR{speed}="185", ATTR{press_to_select}="1", ATTR{thresh}="6"

一不做二不休,把一樣寫在 /etc/rc.local 的 ThinkPad SMAPI 電池充電閾值設定改用 udev,至此,我的 /etc/rc.local 就可以清空了:

SUBSYSTEM=="platform", DRIVERS=="smapi", RUN+="/bin/sh -c 'echo 30 > /sys/devices/platform/smapi/BAT0/start_charge_thresh'"
SUBSYSTEM=="platform", DRIVERS=="smapi", RUN+="/bin/sh -c 'echo 85 > /sys/devices/platform/smapi/BAT0/stop_charge_thresh'"

還有,我有使用 Miredo 來取得 IPv6 address,在 Systemd 環境下也會因為 NetworkManager 太晚建立有效網路組態而啟動失敗,為此,我必須對 /usr/lib/systemd/system/miredo.service 做個小小修改(放在 /etc/systemd/system/ 底下間接覆寫),加上 Restart 與 RestartSec,讓這項 service 能夠自動重試啟動:

[Unit]
Description=Teredo IPv6 Tunneling Daemon
After=network.target

[Service]
ExecStartPre=/usr/sbin/miredo-checkconf /etc/miredo/miredo.conf
ExecStart=/usr/sbin/miredo -f
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure
RestartSec=16

[Install]
WantedBy=multi-user.target

照著  Wiki 做,直到 /usr/bin/journalctl (Systemd 底下類比 dmesg 的程式)的 log 裡看不到明顯的紅字錯誤,大概就差不多搞定了。

把 Mac mini 1,1 (early 2006) 改裝 Linux OS

原本這台機器買來是打算用來玩 iOS 開發,只是過程挫折重重。

原機主已經把 CPU 升級為 Core 2 Duo,照 Apple 官方對系統要求的說法,我應該可以安裝 OS 10.7 Lion,實則不然,因為 Apple 是認機器型號資訊來判斷給不給裝,如果不在符合的機器列表裡,就直接在線上商店拒絕購買 Lion。

「知情」的人看到這邊可能會急忙喊:可以啊!你只要對安裝檔做一點修改,就可以裝進去了。

是啊,我都寫出來了,我怎麼會不知道?問題在於爽度。明明硬體條件符合、明明我是想要用正版,卻搞得自己又像少年時代一樣偷偷摸摸的做些 cracking 的勾當,買官方機器卻又像在用 hackintosh,啊是怎樣?何必那麼作賤自己?我沒尊嚴嗎?

停在 10.6 Snow Leopard,代表沒得免費取得新版的 XCode 開發工具,所以呢?請付年費取得開發者資格。

現在問題又來了,根據 Apple 的潛規則,在次二版 OS X (10.8) 推出後,10.6 就會像孤兒一樣,不保證有安全更新。於是這台裝不了新版 OS 的機器等同也成了被放棄的孤兒,除非比照柏克萊的準則,機器不上網、不跑那些要緊的應用、不放那些重要的資料。

若比照其它一些 desktop OSes 的支援年限,我不覺得 Apple 有何過份之處,只是 Microsoft 的 Windows 2000 直到 2010 才宣布停止提供安全更新,讓我覺得 M 社能搏得許多企業信任,不是沒有道理。

最後我決定把這台 mini 改裝 Ubuntu 12.04 LTS,讓它繼續安全運轉下去,不要成為潛在的安全隱憂;需要用 Mac OS 的場合時,用另一台 Air 頂著就好。只是我想那台 2,1 版的 Air 好景也沒剩多久…。

Mac mini 1,1 的 EFI 是 32-bit (i386) 的,雖然 Core 2 Duo 可跑 64-bit (amd64) Linux,但是因為這個限制,所以就算安裝 64-bit 版 Ubuntu,實際上還是走 BIOS 相容模式途徑來啟動,不過根據文件指出,這樣反而簡單。

安裝前,我先在 OS X 裡安裝 rEFInd,且指定要安裝在 EFI 的分割區 (ESP) 裡,因為我不打算保留 OS X。

然後我從這裡取得 ubuntu-12.04.1-desktop-amd64+mac.iso 製作安裝光碟,開始安裝 Ubuntu 12.04。

規劃檔案系統時,務必切記保留 EFI 分割區以便使用 rEFInd 選單,不然日後開機只能按 Option 鍵選擇開機磁碟,有些麻煩;且記得開機程式要裝在 /boot 所在的分割區 /dev/sdaX,不要照預設值直接寫到 /dev/sda。大概只要注意這兩點,改裝 Ubuntu 甚至是其它 Linux OS 其實沒什麼困難。

Translation Template Extractor 為自己開發的 Drupal 模組維護語系翻譯檔

想要為自己開發的 Drupal 模組維護語系翻譯檔,剛剛在尋找解決方案,結果有現成的 [Translation template extractor] 可用。

雖然 Drupal 本身的翻譯介面已經算很好用了,配合 L10N Client 更可以「逐頁翻譯」,從上下文判斷應給的恰當翻譯,避免鬧誤譯的笑話,但是翻譯好的成果都像瀨尿牛丸般混合存在 DB 裡,所以還需要 Translation template extractor 這類軟體的輔助。

給 Drupal 用的 Vim 設定

Drupal 雖然是用 PHP,但是自己有一套風格與規範,通常裝好的 Vim 仍不合用。

我會建議專門為 Drupal 開發工作開一個 shell account 來用,然後拿 Drupal 上的 [Vim Plugin For Drupal] 放到這個帳號的 ~/.vim 底下:

wget "http://ftp.drupal.org/files/projects/vimrc-7.x-1.x-dev.tar.gz" && cd ~/.vim && tar xvfz ~/vimrc-7.x-1.x-dev.tar.gz --strip-components=1

記得要更新 ~/.vimrc,這樣安裝的特用 Vim Plugin 才有效用:

cat vimrc_minimal.vim >> ~/.vimrc

通常來說,要開發的 Drupal 模組,檔案應該是放在系統目錄底下,合理的 owner 可能是 root, http, apache 這類的。所以如果這個專門帳號沒有跑 sudo 的許可,記得用 visudo 新增。之後就可以用 sudo -e filename 來 coding,且會吃這個帳號的 ~/.vimrc 特用設定,不會和其他帳號搞混。(前提當然是 EDITOR 環境變數需為 vim)