80 公克筆電? 可開機電子書包? Edubuntu Live-USB! (技術篇)


本文有點亂; 請改參考 「usb 開機筆記」


後記: 寫完這篇文章後沒幾週, 聽朋友說網路上已經可以找到很多類似的版本, 安裝過程更簡單, 而且也已經藉由記憶體模擬硬碟的方式, 讓 usb 姆指碟也適用。 (網址待補... 請搜尋 usbuntu)

其他類似文章:

  1. suan 的文章: 更簡短, 更普遍, 適用於 ubuntu, knoppix, ... 等等許多不同版本)
  2. BillyPan 的文章: 如果換了電腦 X Window 就開不起來怎麼辦?

這篇筆記是寫給已稍微熟悉某版本 Linux 且稍微熟悉命令列的朋友看的。 我自己用過的版本包含 slackware, redhat 與 mandriva (以前叫做 mandrake) 但從沒認真學過 debian 系列的版本。 我的系統切成十幾個分割, 上面裝了好幾個不同版本的 Linux。 本文假設您的電腦已安裝某版本的 Linux, 並且硬碟上有一個夠大的閒置分割 (2.5GB); 另外有一顆 usb 外接硬碟, 一樣需要有一個至少 2.5GB 的分割。 關於外接硬碟, 建議用機械式的硬碟 (有 「轉速」 的); 不建議用 flash disk。

Edubuntu 初體驗

先逛一下 ubuntu 臺灣站 看一下大家的討論; 本文推薦下載的版本是 edubuntu 光碟 (下載點) 建議下載完映象檔要檢查一下 md5sum 確認正確。

設定 BIOS 以光碟開機。 如果希望看到中文, 出現 "boot: " 提示時, 應打入 live locale=zh_TW 但不要期望太高, 主選單都還是英文; 字型蠻醜的, 而且少數有中文的地方也還會掉字。 還是等正式安裝後再設定中文比較實在。

大力推薦的幾套軟體: 「教育」 選單底下的 kanagram, kalzium, 「遊戲」 選單底下的 gcompris, tuxmath, atomix

在 accessories 裡面有個 terminal 可以開啟終端機。 在終端機上, 打 sudo bash 可以變身為 root, 胡作非為。 以上網為例, edubuntu 內定以 dhcp 方式上網; 如果需要用 adsl 上網, 就必須以 root 身份打 pppoeconf

如果下指令的時候, 出現一堆 locale 相關的錯誤訊息 (例如下面幾節在硬碟上安裝/刪除軟體時, 下 apt-get 指令, 就可能會出現), 那是因為光碟版對中文支援不完整。 用 env | grep TW 可以看到: 當初一句 "locale=zh_TW", 讓 ubuntu 設了許多環境變數想支援中文 (但欠了一些中文套件)。 建議不如把 "目前這個終端機" 的中文設定通通關掉: unset $(env | grep TW | sed 's/=.*//')

植入硬碟

可以點選桌面上的 "install", 把 edubuntu 植入該分割。

如果硬碟上已有 grub 或 lilo 等開機管理員, 不希望 ubuntu 再安裝一次, 可以在安裝前插入 usb 硬碟, 並在安裝 grub 時, 把 hd0 欄位改掉。 可是 usb 硬碟的代號是什麼?

  1. 在 usb 硬碟的根目錄上建立一個怪怪的, 從來沒用過的檔名, 例如 usb-hd-20070131
  2. 進入 grub
  3. find /usb-hd-20070131 它會到每個儲存裝置的根目錄底下去找 usb-hd-20070131 這個檔案, 並印出該裝置的代號。 這個代號就可以拿來用。 [ 推薦 grub 參考文章]

裝完後記得把 usb 硬碟上面的 /boot/grub/menu.lst 檔複製出來, 將裡面其中一筆開機選項貼到你原本的 grub 選單, 並加以適當修改。

改裝

假設剛才的 edubuntu 安裝在 /dev/hda17。 重新回到自己熟悉的 Linux 版本底下。 建議先 fsck -f /dev/hda17 然後才掛載, 例如 mount /dev/hda17 /mnt/my-edu 最後並建議趕緊將最清潔最原始的初安裝版本壓縮起來: cd /mnt/my-edu ; tar czf /some/dir/in/a/large/partition/my-edubuntu.0.tgz . 未來我們將在 /mnt/my-edu 目錄底下進行大翻修。

為網路增刪套件作準備: cp /etc/resolv.conf /mnt/my-edu/etc 並編輯 /mnt/my-edu/etc/apt/sources.list 以後果自負的心態把 universe 那兩句註解打開 (刪掉前面的 #) 走出 ubuntu 團隊支援的小圈圈, 進入整個宇宙。

chroot /mnt/my-edu 變身至新安裝的硬碟空間底下工作。

從網路抓回全宇宙的套件清單: apt-get update (有點久)

第一步先瘦身吧! 查一下已安裝的套件當中, 那些套件最佔空間: dpkg-query -W -f '${Installed-Size;6} ${Package}\n' | sort -n 詳見 dpkg-query 手冊 例如發現 openoffice.org-core 佔用最多空間, 又想起 OLPC 計劃主持人 Nicholas Negroponte 說: 「教小朋友這些辦公軟體, 簡直就是一種罪行!」 就決定下指令把它刪掉: apt-get remove --purge openoffice.org-core 不過出現一些錯誤訊息, 裡面提到 openoffice.org-l10n-en-gb openoffice.org-l10n-en-za 這兩個套件。 一不做二不休: apt-get remove --purge openoffice.org-core openoffice.org-l10n-en-gb openoffice.org-l10n-en-za 砍掉 23 個套件, 264 MB, 大快人心!

不要急著安裝很多新套件, 先安裝非用不可的就好, 例如中文: apt-cache search locale | grep zh 從這個指令當中看出, 有一個 「虛擬套件」 叫做 language-support-zh 是所有中文套件的基礎。 試著安裝, 結果... 天啊, 太多了, 又要把 OO.o 裝回來? 不了, 謝謝; 只挑其中重要的, 逐一手動安裝, 例如 scim-tables-zh, scim-chewing, scim-pinyin 等等。 另外, 文鼎的中文字形也是必備的: apt-cache search arphic 為適應未來潮流, 挑 utf8 編碼的來安裝: apt-get install ttf-arphic-ukai ttf-arphic-umin 最後, 記得在 /etc/X11/Xsession.d 底下建立一個文字檔, 檔名任意, 例如叫做 74scim, 內容如下:

        export XMODIFIERS="@im=SCIM"
        export GTK_IM_MODULE="scim"
        export XIM_PROGRAM="scim -d"
        export QT_IM_MODULE="scim"
        scim -f x11 -d &
        scim -f socket -d &

這才會自動啟動 scim。 [推薦 ubuntu 中文化文章]

當然, 作為一張教育光碟, 還算輕薄短小卻極具教育意義的 Dr. Geognuplot 是絕對必要的。

建議把 /var/cache/apt/archives 底下的所有 *.deb 搬到另外一個分割。 兩個目的: 希望這裡空一點, 免得等一下把不必要的垃圾放進 usb 硬碟; 又希望下次可以節省一些下載時間 (如果您也是用入門級的 ADSL 的話啦)

另外, 為了將來安裝到 usb 硬碟上考量, 不妨讓它每次開機都重新偵測顯示卡。 在 etc/init.d/gdm 檔案裡面的 "start)" 之下, 加一句: [參考文章]

        dpkg-reconfigure -fnoninteractive --no-reload -phigh xserver-xorg

至此, 可以退出 chroot 環境, 卸下這個分割, 檢查分割, 再掛回來, 並再次備份一個壓縮檔, 例如叫做 my-edubuntu.1.tgz

安裝到 usb 硬碟

假設你的 usb 硬碟是 /dev/sdz 且欲安裝在 /dev/sdz17 分割上面。 又假設已有空的工作目錄 /media/live-usb。

第一步複製, 跟安裝到硬碟上一樣, 很簡單: mount /dev/sdz17 /media/live-usb 然後 cd /media/live-usb ; tar xzpsf /some/dir/in/a/large/partition/my-edubuntu.1.tgz (解壓縮修改過的備份) 哦, 還要修改 /etc/fstab, 反映真實的根目錄 切記!

第二步設定 grub。 在 /media/live-usb 的 boot/grub 底下, 應該有一些 *stage* 的檔案。 把先前存起來的 menu.lst 複製到此處。 下指令 blkid | grep sdz17 把 UUID="..." 那一串複製下來。 這是硬碟分割區的代號。 到 menu.lst 裡面做適當的修改, 包含:

  1. 刪掉不需要的開機選項。
  2. 把所有 root (hd0,5) 之類的那幾列都刪掉; 把所有的 root=/dev/hda6 之類的地方, 改成 root=UUID=... 就是用剛才 blkid 指令之後複製的那一串來貼上, 並且把引號去除掉

第三步安裝 grub。 再用先前講的 grub 裡面的 find 指令, 找出 usb 硬碟的分割代號, 例如叫做 (hd27,16) (因為 grub 從 0 開始算; 而 linux, fdisk 等等其他軟體則是從 1 開始算, 所以通常差 1) 進入 grub, 執行

        root (hd27,16)
        setup (hd27)

重開電腦, 將 BIOS 設成 usb 開機, 開始享用吧!

補充

如何製作 grub 開機畫面? 看這裡。 簡單兩句話: 要安裝 ImageMagick 套件, 然後下指令: convert -resize 640x480 -colors 14 image.png image.xpm ; gzip image.xpm

其他參考資料

  1. Installing Ubuntu On An External USB Hard Drive
  2. Edgy USB Install
  3. Making a USB Stick bootable with Grub