標籤:Linux

如何自行打包 CentOS 安裝映像檔

因前些日子有自行打包 CentOS 安裝映像檔的需求,所以就稍微地做一下筆記,提醒一下自己要怎麼做。

這次的目標很簡單,就是包入一個 Kickstart 並且讓他成為開機選單中的預設選項。

實際操作

準備編輯環境

首先,為了節省硬碟空間,在下載好官方 iso 之後,打算採取 overlayfs 的方式來修改內容:

$ cd /tmp
# 自己選一個比較近的站來下載即可
$ wget http://centos.cs.nctu.edu.tw/7.6.1810/isos/x86_64/CentOS-7-x86_64-DVD-1810.iso
$ mkdir -p orig new work rw
$ sudo mount -o ro CentOS-7-x86_64-DVD-1810.iso orig
$ sudo mount -t overlay overlay \
    -o lowerdir=/tmp/orig,upperdir=/tmp/rw,workdir=/tmp/work \
    /tmp/new

如此以來就準備好修改的環境了,其中 /tmp/new 就是我們用來修改 iso 的地方,而 /tmp/rw 則是作為 overlayfs 存放修改內容的地方;/tmp/work 是 overlayfs 所需要的工作目錄,但我們只需要專心對 /tmp/new 做修改就可以了。

修改開機選項

準備好 kickstart 腳本之後放在 isolinux/ks.cfg,準備著手來修改 isolinux/isolinux.cfg

首先找到原本的開機選項:

label linux
  menu label ^Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet

label check
  menu label Test this ^media & install CentOS 7
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet

並且在保留原開機選單項目的同時,插入並設定預設選項:

label linux
  menu label Install CentOS 7 with My ^kickstart
  kernel vmlinuz
  append initrd=initrd.img inst.ks=cdrom:/ks.cfg inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet ip=dhcp

label linux
  menu label ^Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet

label check
  menu label ^Test this media & install CentOS 7 with My kickstart
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.ks=cdrom:/ks.cfg inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet ip=dhcp

label check
  menu label Test this ^media & install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet

注意我不止加上了 inst.ks=cdrom:/ks.cfg 以外,還順便加上了 ip=dhcp,如果 kickstart 中已經有設定網路的同學可以不需要這段。

打包映像檔

接下來就是怎麼打包了,其實也很簡單,這樣做就行了:

$ cd new
$ sudo mkisofs \
    -o ../CentOS-7-x86_64-New-DVD-1810.iso \
    -b isolinux.bin \
    -c boot.cat \
    -no-emul-boot \
    -boot-load-size 4 \
    -boot-info-table \
    -V "CentOS 7 x86_64" \
    -R -J -v -T \
    isolinux/. .

產生出來的映像檔就會放在 /tmp/CentOS-7-x86_64-New-DVD-1810.iso 了,恭喜大家、賀喜大家!

後記

雖然只是順手記錄一下避免之後忘記,不過還是要提一下如果大家打算做成 PXE 開機而且安裝過程又網路可以存取的話,可以把 Base image 換成 Minimal,不然 DVD size 真的很大很恐怖……

在硬碟數量有限的情況下把 ZFS 從 Mirror 轉移到 RAID-Z2

去年年底的時候發現家裡 NAS 的硬碟空間又要不足了,於是打算來添加新的硬碟來擴展空間。

但在預算不足的情況下,希望能直接從原先兩顆硬碟的 ZFS Mirror 轉移成四顆硬碟的 RAID-Z2(不知道 RAID-Z2 的同學可以直接想成是 RAID 6 就行),但對熟悉 ZFS 的朋友們應該早就知道這是癡人說夢了,ZFS 除了 Stripe 跟 Mirror 以外就沒有可以直接互相轉換的方法了。

常見的做法應該是先增加四顆硬碟組成 RAID-Z2 後,直接把舊硬碟的資料倒過去新 Dataset 上,但這對於預算不足的我來說實在有點困難,而且資料轉移後會讓原先的兩顆硬碟變成冗員也沒有辦法加回新建好的 Dataset 中。

於是我想了一個方法可以讓我在只添加兩顆硬碟的情況下轉移資料到 RAID-Z2 ——

使用 Cmder 直入 WSL

因為工作有 SSH 連線到遠端機器操作的習慣,在換了 Surface Book 21 之後,也還是想要儘量保持這個習慣,一般來說我都是使用 PieTTY2 在進行 SSH 連線,不過對於行動裝置我通常會再搭配上 Mosh3 使用,可惜在 Windows 上面沒有原生的 Client 支援,於是我打算在 WSL4 裡面安裝 Mosh 來使用!

修改 PAM 讓特定 IP 透過 SSH 登入時不需要輸入密碼

我有兩臺電腦,一臺是外出用的 MacBook Air (13" later)、另一臺是自己組裝的 Windows 桌機,但平時工作都是在 Windows 上面開 Linux(當然是我最愛的 Ubuntu)的 VM 再從兩臺電腦 SSH 進去 VM 裡面。但從 Windows SSH 進去 VM 的時候就很想跳過輸入密碼的步驟,當然用 SSH Key 也可以辦到,但我覺得他們根本就是同一個電腦啊,還要加上 SSH Key 也太累了吧!要如何僅依靠來源 IP 就決定要不要輸入密碼呢?