如何自行打包 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=CentOSx207x20x86_64 quiet

label check
  menu label Test this ^media & install CentOS 7
  menu default
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOSx207x20x86_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=CentOSx207x20x86_64 quiet ip=dhcp

label linux
  menu label ^Install CentOS 7
  kernel vmlinuz
  append initrd=initrd.img inst.stage2=hd:LABEL=CentOSx207x20x86_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=CentOSx207x20x86_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=CentOSx207x20x86_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 真的很大很恐怖……

因主題更新,留言功能暫時停用中。