在 Linux 上架設 Screenshot Service (2010 年了?)

在 2008 年的時候 xdite 寫過一篇「在 Linux 上架設 Screenshot Service」,不過現在是 2010 年了,不少當初有問題的地方都已經改善了,現在要架比之前方便不少...

測試的平台同樣是在 Linode (referral code 是 fdbacc96dbddafce9ba444dd678357416d0323d5) 上跑 Debian lenny (也就是 5.0 版),為了避免 Adobe Flash PlayerLinux amd64 上會出問題,我在 Linode 上用 32bits 版。

Linode 把預設的 Debian 裝完後,先把整個系統升級到 Debian squeeze 並且重開,然後先裝「locales」這個套件,再用 dpkg-reconfigure locales 把 en_US.UTF-8 以及你自己會用到的 locale 勾起來。

接著開始裝必要的套件:

  • flashplugin-nonfree
  • iceweasel
  • ttf-arphic-bkai00mp
  • ttf-arphic-bsmi00lp
  • ttf-arphic-gbsn00lp
  • ttf-arphic-gkai00mp
  • ttf-arphic-ukai
  • ttf-arphic-uming
  • ttf-wqy-zenhei
  • xvfb

Iceweasel 其實就是 Firefox,因為商標問題而在 Debian 上有不同的名字。在英文版維基百科的「Mozilla Corporation software rebranded by the Debian project」這篇文章裡把前因後果講得很清楚,這邊就不提了...

除了必要的套件外,接下來裝 TightVNC server,準備透過 VNC 設定 Iceweasel。設完後可以移除掉或是留下來,我自己是留下來 (反正檔案不大),有時候可能要進去 about:config 調整參數...

TightVNC server 用 tightvncserver :0 跑起來,然後遠端連進去把 Iceweasel 跑起來測試看看有沒有問題 (可以透過 PuTTY 的 tunnel 將傳輸過程加密),沒有問題的話就裝「torisugari: Command Line Print」這個套件,裝好後再把 Xvfb 跑起來,用這個指令抓圖:

DISPLAY=:2.0 iceweasel -print http://zh.wikipedia.org/ -printmode png -printfile ~/zh.wikipedia.org.png -printdelay 10

抓出來的 screenshot 就會像這樣:(點這裡看原大小圖片)

Flash 也沒問題:(點這裡看原大小圖片)

比起之前的方法,現在的方案有兩個好處:首先是 plugin 是照正規方法裝進去,而不是直接丟 xpi,可以避免遇到奇怪的靈異現象時懷疑是不是安裝時硬塞造成的。再來是 Iceweasel 會在抓完就 shutdown,所以在網路速度夠快的時候可以提前結束,而網路不夠快時也不用擔心抓到未完成圖...

當然剩下有很多細節要處理啦,不過那是另外一回事了...

GCC 4.5.0 以及 ClangBSD

GCC 4.5.0 前幾天公告釋出:「GCC 4.5.0 Released」,而另外一邊以 clang 取代 FreeBSD 系統內 GCC 的計畫 ClangBSD 也開始徵求測試者了:「[CFT]: ClangBSD is selfhosting, we need testers now」。

目前 ClangBSD 可以在 i386 以及 amd64 上編譯 bootable-kernel 以及 world (目前的 -CURRENT 版本),平常在用 -CURRENT 的人除了上面那篇 mailing list 上的說明外,在「Building FreeBSD with clang/llvm」也有介紹更多關於要怎麼把整個系統切換過去的細節。

FreeBSD 要換掉系統內 GCC 的計畫又往前跨了一步...

Pacman 的規劃

玩了幾天 Pacman,整理一些資料...

安裝完成後,預設可以使用的 package repository 可以在 /etc/pacman.conf 內看到,包括 core (目前約 340 個)、extra (~4500),以及 community (~3400)。

另外有幾兩個測試性質的,預設是關閉的。一個是 testing,另外一個是 community-testing,裡面的量都不多。

除了這些以外,使用者自己也可以提供新的套件,官方有提供 AUR (也就是 unsupported),任何人都可以註冊並且上傳,也因此所以有可能會包括有安全問題的 code。所以有 TU (Trusted Users) 的制度,當一個 package 使用的人夠多 (在「AUR Trusted User Guidelines」有說明),而且 TU 確認沒問題後就會 update 到 community 內。

要安裝 unsupported 的軟體必須必須自己下載 AUR 的 source tarball (裡面有 PKGBUILD 以及其他設定),並且確認沒有 malicious code 後再用 makepkg 安裝。

另外 Gmane 有收 ArchLinuxmailing list,習慣用 BBS 讀的人可以抓下來看。

在 VirtualBox 內安裝 ArchLinux 的紀錄

Debian 用一陣子後,發現 Python 2.6 在 lennybackports 也沒有,一定得到 squeeze (目前的 testing) 找出來用,但如此一來就會有很多問題 (像是 testing 的 python library 使用 stable 的 C library),所以一直在覺得很煩...

另外,自己架設 APT 的熟練程度一直卡在沒有自動化工具,所以一直想要試試 Linux 上其他的 package system,但又不想要用 RPM,所以就挑上 ArchLinux 了...

不過在 VirtualBox 內裝 ArchLinux 遇到一些怪問題,總算是弄的差不多,紀錄起來讓其他人有機會少踩一些雷...

首先是抓 ISO image,最新的版本可以在 http://ftp.tku.edu.tw/Linux/ArchLinux/iso/latest/ (這是淡江大學的 mirror) 這邊抓到,我在寫這篇時是抓 archlinux-2009.08-netinstall-i686.iso,抓完之後先用工具確認檔案的 md5 與 sha1 有沒有問題,避免檔案壞掉造成安裝過程或結果異常。

由於我是用 netinstall,所以得選擇 mirror site。在選擇時,記得得選擇 FTP 而非 HTTP 的 mirror site。我前幾次試著用 HTTP 試了好幾個站台都失敗,但後來選 FTP 都成功。這個問題還不知道哪裡出錯。另外要注意的是,由於我是有拿到 Public IP,所以不確定 FTP 預設是不是 passive,如果在 NAT 後面安裝的人可能要抓 core 版而非 netinstall 版避開這個問題 (因為 HTTP 不能用),或是想辦法讓 installer 告訴抓檔程式用 passive mode。

再來是檔案系統的選擇,由於我只是要玩 ArchLinux,所以決定切 / 與 swap 就好,不另外切 /boot。在 Debian 上我可以用 ReiserFS 當作根目錄,而 GRUB 可以開機,但在 ArchLinux 上我用 ReiserFS 當作根目錄會失敗,改用 ext3 才開的起來。

對於 ArchLinux 的 package system,pacman 用起來還蠻有趣的,官方 Wiki 上對於基本操作寫得很清楚 (「pacman」這篇),另外在 /etc/pacman.conf/etc/pacman.d/ 以及 /var/lib/pacman/ 下也是可以摸索的地方,要再花時間玩...

裝玩 openssh 並且跑起來後,卻發現連不上 SSH server,翻系統紀錄才發現被 TCP wrapper 擋下來了,要在 /etc/hosts.allow 裡加上 sshd 以及開放的網段。

接下來是建制基本環境,大致上就是把 Debian 上的 bash 設定複製一份過來就可以了。

Debian 的 Backports

這幾天在 VirtualBox 內弄了一台 Debian lenny (x86) 起來玩,想要多熟悉 Debianbash 的風格...

不過 lenny (5.0.0) 從去年二月到現在也已經過了一年,雖然一直有在更新 (現在是 5.0.4),但為了穩定性,並不是所有的軟體都有更新。印象中有個計畫是專門解決這個問題的,可以讓你在 stable 使用新版,但不是整個系統都換到 testingunstable

在印象中跟 "backport" 這個關鍵字有關,翻了以後找到 Debian Backports,看起來就是我要的...

依照「instructions [Debian Backports]」操作,直接把 entry 加到 /etc/apt/sources.list 內,用 apt-get update 更新一次,這時候會出現不認得 public key,不管他直接 apt-get install debian-backports-keyring 就收工了。測過沒問題後,就在「Backports.org worldwide mirror sites」這邊找亞洲區的 mirror site,看起來只有日本有做,改過去再測一次 update,沒問題收工...

由於預設仍然會使用 lenny 內的套件,如果要裝 backport 內的東西,需要用 -t lenny-backports 讓 apt-get 或是 aptitude 知道。

另外,在「Diffs between lenny-backports and squeeze」這邊可以看到 lenny-backportssqueeze (目前的 testing) 的差距。

DRBD 進入 Linux 2.6.33 Kernel,以及 FreeBSD 的 HAST Project

Linux kernel 2.6.33 是在 DRBD 進入 Kernel Git tree 之後 (去年 12 月左右,參考「We’re in!」這篇文章) 的下一個正式的 release:「Linux 2.6.33 released, first kernel with DRBD included」。

DRBD 是一套以 block-level replication 為基礎提昇可靠度的軟體,有時候為了方便解釋,也被稱為 Network RAID1,常搭配 Heartbeat 或是其後繼的 Pacemaker 偵測節點是否還活著,並在必要時自動切換。

由於 DRBD 已經出來很久了,而且又是以 GPLv2 釋出,早期有不少文件介紹如何使用 DRBD 達到 HA,算是一種已經被摸熟的方案。

另外是 FreeBSDHAST Project 到一個階段,被 commit 到 -HEAD 了:「Please welcome HAST - Highly Avalable Storage.」,再加上 block-level replication 會需要 Filesystem 快速恢復的 SUJ (SU+J) 也在一月底放 source code 先讓自願者測試,一口氣補了 HA 領域兩塊重要的缺陷。

不過依照慣例,新東西都不太穩定... 玩玩還可以,如果是要跑 HA 的話等一兩個版本會比較好。

4K sector size

Slashdot 上看到硬碟已經開始往 4K sector size 走了:「HDD Manufacturers Moving To 4096-byte Sectors」。

會開始討論主要是因為 WD 開始販售 4K sector size 的硬碟,許多維護 Filesystem code 的開發人員也因此比較注意到這個問題。

前幾天在 FreeBSD 的 mailing list 上也看到類似的討論「File system blocks alignment」,以目前可以調整的參數觀察,如果 block size 沒有切齊,會使得效率降低不少 (猜測是因為 read-modify-write),其他作業系統的 Filesystem 也有類似的情況。

2010Q1 應該會看到更多使用 4K sector size 的硬碟。

FreeBSD UFS2 的 SU+J

FreeBSD 上主要是靠 Soft updates 維持當 Filesystem 不正常 umount 時的資料安全,在 Linux 上比較常見的方式則是 Journaling file system,兩個方式有不同的走向。

FreeBSD 最近也有 ZFS 了。ZFS 用的技巧類似 Journaling,不過也利用類似 Soft updates 的想法避免硬碟內的資料不一致。不過穩定性與效能沒辦法跟 UFS2 相比。

最近 Jeff Roberson 又活躍起來了 (之前弄 FreeBSD 7 的 SCHED_ULE 2 以及 FreeBSD 8 的 SCHED_SMP),在接受廠商的贊助後試著改善 UFS2 的 Soft updates,把 Journaling 的技巧引進 UFS2,希望再減少 fsck 的需求:「Journaling softupdates, SU+J」以及「What's in a journal anyway?」。以目前所規劃的時程,看起來會在這兩個禮拜內看到 commit 進 HEAD (9.0-CURRENT)。沒意外的話跑一陣子後應該就會 MFC 回 8-STABLE,然後在 8.1-RELEASE 出現。

IBM 開始在美國賣內含 Ubuntu 的桌機

Slashdot 上看到 IBM 也開始在美國本土販賣內含 Ubuntu 的桌機了:「IBM's Answer To Windows 7 Is Ubuntu Linux」。

大約幾個禮拜前,IBM 與 Canonical 發表了合作計畫,預定往非洲推銷 Ubuntu,有人問 IBM 是否有計劃在美國本土販賣類似的產品,現在的回應就是答案。

除了 IBM 以外,Dell 在更早的時候就提供 Ubuntu 桌機與筆電:「Dell PCs Featuring Ubuntu」。