2020年11月17日 星期二

grml 客製化筆記

Grml 是專門為網管/系統管理員所設計的羽量級 linux, 官網的 small 版只有 350M; 即使是 貴哥實驗室版 (grml64-small-g20?.iso) 也不到500M, 很容易就可以 boot to ram 毫邁帥氣裸奔。 它本身就提供了 grml2usb 指令可以把系統安裝到 usb 上變成可開機隨身碟。 不過我習慣用 extlinux 來處理開機的部分, 因為它的設定比 grub2 簡單很多, 只需要改設定檔、 把檔案放對位置就好。 假設你用 貴哥版的 ulyana 開機、 假設你的隨身碟是 /dev/sdz, 其中第一分割 /dev/sdz1 已經格式化為 fat32。

一、 自製開機隨身碟

  1. 安裝 MBR 及 extlinux 開機管理員、 設定可開機等等最煩瑣的工作, 用一句話完成: mbootuz.py mkboot /dev/sdz 其中 /dev/sdz 底下的 /dev/sdz1 (及其他分割區) 有沒有掛載都無所謂, 因為 mbootuz.py 會自動判斷是否要掛載/卸載。
  2. 假設 /dev/sdz1 掛載在 /media/sdz1。 請把 UEFI 開機檔案 (包含較新的 boot/syslinux/extlinux.conf) 解壓縮到 /media/sdz1 去。 至此, 可以卸載 /dev/sdz1, 並用 kvm 測試一下是否出現開機選單。
  3. 把 /dev/sdz1 掛載回來。 參考 講師趕時間 這篇, 在 /media/sdz1 底下建立 grml-g20A/ 子目錄。 把 grml linux 2020.06 (我下載的是 grml-small 版) 的 iso 檔裡面的 boot/grml64small/{vmlinuz,initrd.img} 跟 live/grml64-small/grml64-small.squashfs 複製到 grml-g20A/ 底下。 最後修改 extlinux.conf 裡面的 grml 開機選項相關路徑。
  4. 照著 「講師趕時間」 那篇設定 persistence。 我採用 persistence-2G.img.gz 的版本。 當然, persistence 映像檔的檔名及路徑必須跟 extlinux.conf 的設定一致。 卸載後用 kvm 測試是否可以完整進入 grml linux, 並且應看到類似這樣:
    /dev/sda1       12570608 10187016   2383592  82% /run/live/persistence/sda1
    /dev/loop0        431360   431360         0 100% /run/live/rootfs/g20A.squashfs
    tmpfs            1019788        0   1019788   0% /run/live/overlay
    /dev/loop1       1998672    52904   1824528   3% /run/live/persistence/loop1
    
    其中一定要看到 /run/live/persistence/loop1 那一句才表示 persistence 設定成功。 等一下所有的客製化都會存在這裡。

二、 客製化

用 kvm 開機進入 grml、 apt update 之後, 就可以開始安裝套件。 我安裝了: adbfwknop-client、 gdisk、 iftop、 lynx、 ntfs-3g、 p7zip rar、 udpcast、 w3m-img、 等等套件。 另外, 我的客製光碟當然一定要安裝 mbootuz.py

想要安裝 pdmenu 時, 發現 apt 找不到這個套件。 查看一下 /etc/apt/sources.list.d/debian.list 的內容, 得知 Grml 鎖定一個特定時間的版本 (http://snapshot.debian.org/archive/debian/20200624/) 可能是為了避免相依套件錯亂。 只好 手動下載 pdmenu、 用 dpkg -i 安裝。

客製 grml 有一個重點就是要拿它當 pxe server, 用一顆隨身碟征服一整間電腦教室。 等寒假真的在電腦教室實作完再來寫一篇。 Grml 本身就有 grml-terminalserver, 但是它採用 isc-dhcp-server 而 我需要 dnsmasq 才能在已有 dhcp 的環境下以 proxy dhcp 的方式提供 pxe 服務。 所以我又把 dnsmasq 等等 pxe 相關檔案 也都放進去。

為了方便剪貼指令, 中間我曾設定密碼、 啟用 ssh 服務、 從 host ssh 連線。 最後一定要記得編輯 /etc/shadow, 把 root 的密碼欄改回 '*' (禁止登入)。

三、 重新打包 .squashfs 與 .iso

把 *.squashfs 掛載在 /mnt/sq 、 把 persistence image 掛載在 /x/pers 、 mount -t overlay overlay -o lowerdir=/mnt/sq,upperdir=/x/pers/rw,workdir=/x/pers/work /mnt/merged ; mksquashfs /mnt/merged /media/sdz1/[grml 目錄]/root.squashfs 詳見 overlayfs 練習。 再把舊的 *.squashfs 改名為 *.sq 之類的 -- 如果只是搬到別的目錄的話, debian live 還是有可能會被認真不懈的 debian live 找到, 並且把新舊兩個 *.squashfs 都掛載起來。

最後 製作 UEFI 開機光碟 iso 映像檔, 再用 螞蟻搬家法 把 .iso 檔上傳到 伺服器 (grml64-small-g20?.iso), 就大工告成啦!

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。