2011年10月21日 星期五

自助式打造 SimplyMepis 救命碟 (適合老師用自製開機隨身碟上數學及其他課)

[2014/2/27 補充] 老師們, 想用救命碟上課, 但沒空幫許多學生複製嗎? 本篇作廢, 請改參考新文章 「教你的學生半自助打造救命碟」

[2013/9/3 補充] 如果您只是自己要用 (而沒有要替學生大量製作), 請對照參考另文: Antix 13.1: 用窮人的資源過富足的生活

指示 mk-boot-usb 如何切分割 老師如果想用自己客製化的 linux 開機隨身碟上 「非 linux」 課程 (例如我有一學期曾經 在電腦教室用 drge/gnuplot/maxima 上微積分課), 可以考慮採用本文的方式。 您可以幫學生製作陽春版+slax版開機碟 (複製速度較快), 然後請學生自行下載完整版的系統快照壓縮檔 (例如 SimplyMepis), 自行解壓縮。 學生只需要學本文的第三節, 或者更簡單版本的教學文 (例如改用圖形界面檔案總管操作)。 以下則假設讀者是 「不曾碰過 linux, 但有興趣學習自助打造開機隨身碟」 的學生 (任何科系)。 同時, 這篇也可作為 linux 課程的第一週教材。

一、 準備動作和預備知識

先規畫一下你要給 Linux 多大的空間。 我切 1.6G - 1.8G 給 vfat 分割 (windows 只認得這一個分割); 6G 給 Linux 的分割。 一般上網/辦公/聽音樂/看影片/畫圖的工作都沒有問題; 另外放了幾套數理化天文教育軟體, 演講的時候很好用。 這樣用掉了將近 4G 左右。 扣除其他東西, 大約只剩不到 0.6G 可以新增套件。

分割 容量 用途
/dev/sdx1 1.6G - 1.8G 格式化成 vfat, 可以和 windows 交換資料
/dev/sdx5 6G 系統4G; 家目錄 0.7G; slax 0.7G; 剩不到 0.6 G 可以新增套件

下載 slax-cyut 開機光碟。 用 slax 光碟開機, 會以 root 的帳號自動登入。 當你打開終端機視窗 (konsole) 時, 會看到 root 專用的 "#" 提示符號 (而不是一般用戶看到的 "$" 號)。 如果你不是從零開始, 而是用已經做好的隨身碟開機, 並且已經用 cyut 的身份登入, 那麼必須先打 su 變身成 root。 (slax 的 root 的預設密碼以及我所製作的 SimplyMepis 的 root 的預設密碼都是 toor。) 以下所有指令都必須用 root 的身份操作。

終端機視窗可以開好幾個分頁。 從 「工作階段」 底下選取 「新增 shell」, 就可以開啟一個新分頁。 如果看不見選單列, 請先按滑鼠右鍵選擇 「顯示選單列」, 或按 Ctrl-Alt-M 選單列就會出現。

命令列上有一個功能叫做 command completion 命令快打。 例如等一下要打的指令 "mk-boot-usb" 其實不必辛苦地打全名, 可以先只按幾個鍵 "mk-", 然後按 「Tab」 鍵, 系統會自動將指令名稱打完。 檔名也有類似的 file name completion 檔名快打 功能。 在命令列底下, 懶惰是一種美德, 請盡量享用這些快打功能, 既省事又比較不會出錯。

等一下插入隨身碟的時候 (現在請先別插入; 或者插入實驗後請先拔出來) 系統會跳出視窗問你是否要掛載。 每偵測到一個分割, 就會跳出一個視窗。 平常的隨身碟只有一個分割, 但若你將先前做過救命碟的隨身碟拿來重做, 可能就會看到三個或更多視窗。 不論跳出幾個視窗, 請全部按 「取消」。

二、 製作陽春版救命碟

  1. 用 slax-cyut 光碟開機。 (暫時請先不要把目的地碟插入電腦!)
  2. 開一個終端機視窗。 先認一下系統內有哪些硬碟與隨身碟。 下指令: fdisk -s /dev/sd? 看一下你的電腦上有哪些硬碟與隨身碟、 容量各有多大。 印出來的數字以 K 為單位, 所以點掉三位數就變成 M, 點掉六位數就變成 G。 以我的 eeepc 為例, 從下面的輸出結果可以看出: 我的內建 ssd 硬碟是 8G, 系統叫它 /dev/sda; 另有一張 2G 記憶卡, 系統叫它 /dev/sdb。
            /dev/sda: 7880544
            /dev/sdb: 1982464
    
  3. 終端機視窗開一個新分頁, 並且下指令 mk-boot-usb。 系統會請你這時才插入隨身碟。 插入之後隔幾秒, 隨身碟的燈會閃幾下, 然後跳出視窗。 這時才可以按 「Enter」 鍵, 然後系統便知道你新插入的隨身碟代號叫什麼。 這時再切換回先前的分頁, 按 「上箭頭」 叫出先前的 fdisk -s /dev/sd? 指令, 再查看一次系統裝置。 以我的例子而言, 從這次我看到的結果得知: 新插入的目的地碟容量有 1G, 被系統稱為 /dev/sdc。
            /dev/sda: 7880544
            /dev/sdb: 1982464
            /dev/sdc: 991231
    
  4. 再切換回剛剛 mk-boot-usb 執行到一半的分頁。 Mk-boot-usb 會把每個分割最近修改過的幾個檔案列出來給你看。 (圖中黃線框起來的部分) 如果看到熟悉/重要/不該刪的檔案, 請趕快按 ctrl-C 中斷, 現在後悔還來得及! 也許拿錯隨身碟了?
  5. 請打幾個數字, 用空格分開, 而且加起來必須等於 "available" 前面的數字。 我的 1G 隨身碟只剩 944 MB 可用, 所以放不下 SimplyMepis, 只能放 slax。 於是我回答 "144 800" (不要敲入引號)。
  6. 按 Enter 之後, 還有最後一次反悔的機會。 如果一切 ok, 就回答 "yes" (三個字母都要打, 表示 「毀滅現有資料」 的意志堅決)
  7. 應該會出現幾個 "=+=+= formatting /dev/sd.." 之類的訊息, 又出現 "grub> Installation finished. No error reported." 之類的訊息, 那麼這顆隨身碟大概就成功, 可以開機了。
  8. 下指令: qemu -usb /dev/sdx 用模擬器測試開機。 (如果你當初是用已做好的隨身碟內的 slax 開機, 用普通帳號 cyut 登入, 那麼這時必須先開另一個 cyut 帳號的分頁, 然後不要 su, 而是直接在 $ 提示符號下, 打 sudo qemu -usb /dev/sdx 並且被問到密碼時, 直接按 Enter) 然後會出現右圖般的開機畫面。 如果沒有按上箭頭或下箭頭選別的作業系統 (現在選了也沒用), 右下角數秒 10 秒之後就會自動進入 ttylinux。 這個版本只是為了確認可以開機; 實際上我們不會用到它。 可以直接把視窗關掉。 (如果將來安裝並進入 slax 或 SimplyMepis, 就必須從選單裡面正常關機。) 如果不小心點進 qemu 視窗, 滑鼠會被吃掉; 按 "ctrl-alt" 可以逃出來。

用 qemu -usb /dev/sdx 指令測試開機隨身碟

三、 還原 SimplyMepis

目前這顆隨身碟上只安裝了一個 (一般人不太能用的) ttylinux; 選單裡面其他都是假的。 接下來要把可用的 linux 複製進隨身碟。 先用 fdisk -s /dev/sd? 檢查一下你的隨身碟代號以及大小, 再用 fdisk -l /dev/sdx 檢查一下隨身碟分割的狀況, 最後用 df 檢查一下隨身碟是否已掛載。 如果沒有, 就下指令 mount /dev/sdx5 /mnt/sdx5 然後再下一次 df 應該會看到你的隨身碟的第五分割被掛載在 /mnt/sdx5 底下。 (以上請把所有的 sdx5 換成正確的代號。)

如果你的隨身碟容量是 4G 或更小, 請直接跳到第五節。 8G 或更大的隨身碟, 請繼續往下讀。 你可以下載我所製作的 2G 左右的 SimplyMepis 的系統快照壓縮檔。 這裡面包含四個版本的 Linux:

版本 體積 用途
DSL 0.05G 雲端版, 如果你自己有架 vnc server 並提供中文桌面, 這就夠了
clonezilla0.13G 臺灣之光版, 國網開發, 可備份還原 windows
slax-cyut 0.7G 超強麻雀版 (五臟俱全); 應用軟體有點舊
SimplyMepis 4G 完整版, 如果空間夠, 就跟桌機沒兩樣

SimplyMepis 有兩組帳號密碼: cyut 的密碼是 tuyc; root 的密碼是 toor。

然後 cd /mnt/sdx5 切換到第五分割的根目錄, 解壓縮: tar xzpsf /mnt/.../.../.../mepis-11-e-cyut.tgz 最後面的路徑請根據你剛才下載時存放的真實位置來修改。 記得檔名快打很好用, 每一層目錄名稱都可以打一兩個字母然後直接按 tab 鍵。 這大概要解半個小時到50分鐘。 可以開另一個終端機分頁, 不時用 df 看一下進度; 最好是先去做其他事, 例如運動一下。

經過漫長的等待, 提示符號再度出現。 最後下一個指令 mbu-uuid /dev/sdx 修正開機選單 (第四分割內的 boot/grub/menu.lst) 和檔案系統表單 (第五分割內的 etc/fstab) 裡面的 UUID, 就大功告成了!

如果在關機之前要拔掉隨身碟, 請記得先卸下隨身碟的所有分割: umount /dev/sdx? ; 如果先關機才拔下來就無所謂。

以後你們老師如果製作新版的系統快照壓縮檔讓你下載, 你也可以如此自行更新。

四、 調校、 複製、 異動備份

目前的選單預設以 ttylinux 開機。 這不太方便。 請掛載 /dev/sdx4 (開機分割), 下指令 nano /mnt/sdx4/boot/grub/menu 進入編輯器 nano 修改開機選單。 把 "default 0" 那一句的 0 改成正確的數字。 (0 表示最上面的選項 "ttylinux", 1 表示下一個選項 "DSL 4.4.0", ... 等等)

注意到選單裡面有一句 "splashimage=/boot/grub/gnu-tux-usb.xpm.gz" 如果想要換一個開機畫面, 可以改這一句。 找一張色彩比較貧乏的圖 (例如黑白相片; 因為最後只能保留 14 個顏色) 例如叫做 welcome.png (jpg 也可以; 大小不拘) 然後用這串指令: convert -resize 640x480 -colors 14 welcome.png welcome.xpm ; gzip welcome.xpm 產生 welcome.xpm.gz , 放到同一目錄, 並且修改 splashimage 之後的檔名, 就變成你自選的開機畫面了。

這顆隨身碟可以自我複製, 但必須用 slax 開機。 如果用甲碟的 SimplyMepis 開機, 以下的指令也可以用, 但只能將乙碟複製給丙碟, 不能將甲碟本身複製給別人。 請在插入目的碟之前與之後分別用 fdisk -s /dev/sd? 指令找出目的碟的代號, 然後用這個指令複製:

    mk-boot-usb -b -v 1 -s /dev/sdx -d /dev/sdy

這個指令起手無回! (因為加了 -b -v 1 表示要批次作業) -s 後面請給來源碟的代號 (source); -d 後面請給目的地碟的代號 (destination), 然後就會花三十分到一小時的時間複製。 複製成功後, 照樣需要下 mbu-uuid /dev/sdy 修正開機選單和檔案系統表單。 複製時請注意保護自己的隱私! 我自己有兩顆自用碟; 五六顆分享碟。 含有隱私資料的自用碟是絕對不會拿出來分享的啦 :-)

如果你只是想備份 「異動過的資料」, 只需要備份第五分割的兩個檔案:

    -rw-r--r-- 1 root root 805306368 2011-10-17 09:24 images/worksp.img
    -rw-r--r-- 1 root root 314572800 2011-10-16 21:24 slax-6.1.2/work-space.img

前者是 SimplyMepis 的使用者家目錄; 後者是 slax 的異動檔。 這兩個檔都是 loopback file system -- 有點像是光碟映像檔, 各自內含完整的檔案系統。 slax 的所有異動都存放在後面這個異動檔裡面, 所以如果不小心把 slax 玩壞掉了, 把原始的異動檔拷貝回來, 就又是一尾活龍。 至於 SimplyMepis 大部分時候還原這個 「使用者家目錄」 可能也 ok; 不過並不是百分之百有效, 因為系統還有其他檔案可能也會有異動。

另一方面, 這兩個映像檔的大小, 也限制了你的工作空間的大小。 如果希望擴大, 可以重新製作映像檔。 詳見 Linux 下的特殊檔案系統。 (slax 映像檔製作也請見下一節。)

五、 窮人版救命碟

如果你的隨身碟只有 4G 怎麼辦? 好吧, 那就只能 slax 而已囉。 2G 也可以。 其實 1G 就夠了。 別失望, 雖然塞不下 OO.o, 但是其他東西也夠好用了。 如果不是因為作者 Tomáš Matějíček 大大停止更新, 我還是會選擇繼續用這個短小精悍的版本。

做完第二節 「陽春版救命碟」 並且掛載目的地碟的第五分割之後, 請 df 看一下光碟機掛載在何處, 也順便看一下第五分割還剩多少空間可用。 cd /cdrom0/ 切換到光碟機所在目錄, ls -l 檢查一下光碟內容。 du -s 看一下光碟佔用多少空間。 如果確認第五分割還裝得下整片光碟的內容, 就這麼複製: cp -a slax/ /mnt/sdx5/slax-6.1.2 然後大約等不到十分鐘, 提示符號會再度出現。 我們已經把整個 slax/ 目錄複製過去 (其他目錄和檔案並不需要) 並且改名為 slax-6.1.2 (因為第四分割的 boot/grub/menu.lst 已如此指定)。 到這一步, 這顆隨身碟其實已經可以用來開機。

不過最好還是設定一下它的異動檔。 查看第四分割的 boot/grub/menu.lst 可以看見 slax 選項裡面的這一小段: changes=/slax-6.1.2/work-space.img 表示 slax 會自動尋找 slax-6.1.2/work-space.img 這個檔案儲存它所有的異動。 你可以把第三節裡面提到的 SimplyMepis 的系統快照壓縮檔裡面的對應檔案複製過來; 也可以這樣自行製作:

    cd /mnt/sdx5/slax-6.1.2
    dd count=614400 < /dev/zero > work-space.img
    mkfs -t ext2 work-space.img
    mkdir /mnt/t1
    mount -o loop work-space.img /mnt/t1
    df
    cd /mnt/t1
    tar xzpsf /cdrom0/slax/changes.tgz
    df
    cd -
    umount /mnt/t1

其中幾句稍微解釋一下:

  1. dd 那一句的效果是製作一個三百多M的空白檔案 work-space.img。 count= 後面的數字的單位是 "0.5K"。
  2. mkfs 那一句的效果是將空白檔轉為一個 loopback device。 系統會懷疑你是玩真的還是玩假的。 按 y 就對了。
  3. 解壓縮之前之後的 df 讓你比較一下解完之後 changes.tgz 佔用多少空間; 也讓你知道還有多少空間可用。
  4. changes.tgz 就是我預先設定好的 「異動檔」 內容。

如果有興趣進一步研究 slax, 請見 slax-cyut 首頁

六、 結語

呼, 累斃了! 不過聽高醫大陳以德老師說 「把別人的電腦變成你的電腦」 研習報名大爆滿, 我當然必須好好準備...

對於熱切推廣 linux 開機隨身碟的老師而言, 希望這篇提供一個可行的模式。 未來您上課, 可以這樣做:

  1. 您自己選一個習慣版本的 linux, 把隨身碟當成硬碟來安裝。 客製化。 如果不是從我提供的 SimplyMepis 開始改起, 請記得要採取 延年益壽措施
  2. 壓縮成為 「XX老師版的系統快照壓縮檔」。
  3. 用 slax-cyut 光碟製作 「陽春版救命碟」。 把 slax 及您的快照壓縮檔解開到第五分割。 修改 menu.lst 開機選單, 確認可以正常使用。
  4. 用 slax-cyut 光碟幫學生製作 「陽春版 + slax 版救命碟」 -- 如果 slax 再拿掉一些模組, 複製速度可以很快。 (可以考慮順便教學生如何複製)
  5. 教學生進 slax 上網下載你提供的系統快照壓縮檔, 並用圖形界面的檔案總管把它解壓縮到第五分割。
  6. 以後若老師推出更新版, 學生可以自助下載、 解壓縮。

不想深究的一般學生並不需要閱讀本文, 只需要學會第三節的 「圖形版」 (若您寫了講義, 請在此留言分享連結)。

為了避免 「支援 Windows 8」 型號電腦禁止消費者自主開機 所造成的生態浩劫, 請各位老師幫忙讓更多學生和消費者懂得透過 「買電腦前先測試隨身碟開機」 的方式來保障自己的消費權益! 您的微積分課、 統計學課、 演算法課、 資料結構課、 ... 不只是資訊課程, 許多數學、 物理、 化學等等非關資訊學科的課, 也都可以這樣做哦!

3 則留言:

  1. 謝謝老師的分享,已成功製作slax-cyut救命碟,唯想再進一步製作SimplyMepis版時,ftp://penguin.im.cyut.edu.tw/ckhung/mepis-11-e-cyut.tgz的連結是無效的,是否已不提供下載了呢?

    回覆刪除
  2. 啊, 謝謝提醒... 先前系上 penguin 主機的硬碟被我灌爆掉了, 所以暫時刪除。 剛剛已經把檔案移到朋友的機器上了, 請再試試文中新的連結。

    回覆刪除