[[どぶお/Linuxで遊ぼう!]]
* カスタムLiveCDイメージを作成する [#uba9048a]
Linux環境をお試ししたり、さくっとインストールしたりするのにとっても便利なLive CD。私はインストールするときはCentOS LiveCDを使っています。~
さて、今回はこの便利なLiveCDイメージをカスタム化してみましたので記録しておきます。
さて、今回はこの便利なLiveCDイメージをカスタム化してみましたので記録しておきます。カスタムLiveCDは何がうれしいかというと、以下の通り。
- 解析環境が一通り入っているLiveDVD/USBを作成する事ができる
- そこからインストールする事もできる
** 概要 [#wfc52f4a]
~検索するといくつか作成方法が出てきますが、基本的にはゼロから作成する方法であり、例えばCentOS 6.5 LiveCDをベースにしてカスタムイメージを作る、という方法はなかなか見つかりません(私は見つけられませんでした…)。私の場合、「LiveCDをベースにして追加のパッケージをインストールしたもの」を作りたかったのでいろいろと試してみました。
~以下のような感じです。
[ベースとなるLiveCD] + [追加でインストールしたいパッケージ&設定]
これを作るためには以下の物が必要です。
- CentOS-6.5-x86_64-LiveCD.iso -- 2015年9月現在、6.7 LiveCDがリリースされています
- 追加したいRPMファイル群またはリポジトリ
- Kickstart設定ファイル
** 手順 [#u15850ef]
作成は以下の手順で行います。
+ Kickstart設定ファイルの用意
-- 追加パッケージRPMファイルまたはリポジトリの用意
+ livecd-creatorを実行する
*** initramfsの落とし穴 [#i8c95c46]
~livecd-creatorは処理の途中で''/boot/initramfs-2.6.32-'''rel'''.el6.x86_64.img''を''isolinux/initrd0.img''にコピーします。ところが、CentOS LiveCDでは容量を節約するため(?)に/boot/initramfs-2.6.32-431.el6.x86_64.imgが収録されていないので、途中で''file not found''エラーで処理が止まってしまいます。
~この問題を回避するためにinitramfsをインストールする''RPMパッケージ''が必要になります。ファイルをコピーするなどの手段が使えないのは以下の理由によります。
#classdiv(box-yellow)
&color(red){''livecd-creatorはimgcreateモジュールを使用しますが、その中では以下の順で処理が実行されます。''};
+ %packageセクションに従ってパッケージをインストール
+ /bootにあるvmlinuz, initramfsをisolinux用にvmlinuz0, initrd0.imgとしてコピー
+ %postセクションの実行
2のコピー時に''file not found''エラーが出るので、1.の%packageセクションでインストールするしかないのです(ベースイメージを使う場合%preセクションは実行されないようです)。
#classdiv(end)
なお、後ほど解説しますが、ベースとなる6.5 LiveCDのsyslinuxディレクトリのinitrd0.imgにはxhci-hcdモジュールが含まれていないため、このinitrdではUSB 3.0のUSBメモリからは起動できないようです(6.7では未確認)。
#classdiv(box-blue)
&color(blue){''initramfsを作成するRPMパッケージを用意する''};
~RPM自体にソースファイルを含まないポストインストール/ポストアンインストール時にスクリプトを実行するRPMパッケージを作成しました。このパッケージはインストール時の%postセクション(インストール後の処理)でdracutを用いてinitramfsを作成します。この処理は存在する全てのvmlinuzのバージョンに対して行われます。
~またアンインストール時にはinitramfsを全て削除します。従って、&color(red){''実環境には絶対にインストールしないで下さい''};。LiveCDを作成する時のみに使用します。
- 作成したRPMは以下です
-- &ref(livecd-create-initramfs-1-0.el6.noarch.rpm);
-- &ref(livecd-create-initramfs.spec); -- パッケージ作成用SPECファイル
-- &ref(livecd-dracut.conf); -- 参考:ベースとしているdracut.conf。コマンドラインに記述しているので不要
#classdiv(end)
このlivecd-create-initramfsをKickstart設定ファイルに追加すればLiveCD作成プロセス中にinitramfsファイルが作成されます。
*** ローカルリポジトリの準備 [#q879d744]
上記のlivecd-create-initramfsパッケージなどをローカルに準備します。もちろんhttpdを用意してもいいのですが、お手軽にローカルファイルシステム上に用意します。
% mkdir -p mylocalrepo/packages <-- パッケージファイルを置く場所
% cp livecd-create-initramfs-1-0.el6.noarch.rpm mylocalrepo/packages <-- ファイルをコピー
% cd mylocalrepo
% createrepo . <-- リポジトリを作成
この場所が'''/home/dobuo/mylocalrepo'''とするとKickstartのrepo設定では以下のようになります。
repo --name=local --baseurl=file:///home/dobuo/mylocalrepo
ローカルにファイルを用意すれば必要なパッケージを簡単に追加する事ができます。
*** Kickstart設定ファイル [#k0b9f07b]
続いてKickstartファイルを用意します。ベースイメージを使う場合は記述する内容に難しい点はありません。
# BASE IMAGE: CentOS-6.5-x86_64-LiveCD
# livecd-creator -b CentOS-6.5-x86_64-LiveCD -c licecd-update-to-6.6.ks -f LiveCD-6.6.20150305-x86_64 --cache ./cache
lang en_US.UTF-8
keyboard jp106
timezone Asia/Tokyo
part / --fstype=ext4
# For using latest release
repo --name=base --baseurl=ftp://ftp.riken.jp/Linux/centos/6/os/$basearch
repo --name=update --baseurl=ftp://ftp.riken.jp/Linux/centos/6/updates/$basearch
repo --name=local --baseurl=file:///home/dobuo/repo/$basearch
%packages
# General
# No /boot/initramfs-2.6.32.431.el6.x86_64.img on Live CD causes "file not found" on copying it.
# Avoiding it, installation of /boot/initramfs-2.6.32.431.el6.x86_64.img is needed.
# After configuration of boot loader, it will be remove (in %post section).
livecd-create-initramfs
# For Shellshock fix, BASH_FUNC_module(): line 0: syntax error near unexpected token `)' is caused.
# It needs updating bash on newer environment.
bash
%end
# This section is for updating base OS.
%post --nochroot
# Copy resolv.conf from Host environment for yum networking
cp /etc/resolv.conf $INSTALL_ROOT/etc
%end
%post
# yum update and erase the old kernel
yum -y erase livecd-create-initramfs
yum -y erase thunderbird
yum -y update --nogpgcheck
yum -y erase kernel-2.6.32-431.el6
# Clear resolv.conf
rm -f /etc/resolv.conf
touch /etc/resolv.conf
# Add xhci-hcd (USB 3.0 Host Driver) to dracut.conf and dracut
# The initramfs created will be keep for the next generating livecd.
echo -e '\ndrivers+="xhci-hcd "' >> /etc/dracut.conf
/sbin/dracut --force /boot/initramfs-`uname -r`.img `uname -r`
cp -av /boot/initramfs-`uname -r`.img /boot/initrd0.img
cp -av /boot/vmlinuz-`uname -r` /boot/vmlinuz0
%end
%post --nochroot
mv -v $INSTALL_ROOT/boot/initrd0.img $LIVE_ROOT/isolinux/initrd0.img
mv -v $INSTALL_ROOT/boot/vmlinuz0 $LIVE_ROOT/isolinux/vmlinuz0
%end
** 古い情報 [#sa09d28e]
#classdiv(box-blue)
&color(blue){''ベース用initrdの作成''};
+ 仮想環境(VirtualBoxなど)でCentOS 6.5 LiveCDを起動~
initramfsを作成するための環境としてLiveCDを起動します。
+ イメージを作成するための設定ファイルを作成~
以下の内容でファイル(livecd-dracut.conf)を作成します。
mdadmconf="yes"
lvmconf="yes"
filesystems+="squashfs ext4 ext3 ext2 vfat msdos "
drivers+="sr_mod sd_mod ide-cd cdrom =ata sym53c8xx aic7xxx ehci_hcd uhci_hcd ohci_hcd usb_storage usbhid firewire-sbp2 firewire-ohci sbp2 ohci1394 ieee1394 mmc_block sdhci sdhci-pci pata_pcmcia mptsas udf virtio_blk virtio_pci "
add_dracutmodules+=" dmsquash-live "
drivers+="xhci-hcd "
+ dracutでイメージを作成
% dracut -c livecd-dracut.conf initramfs-xhci-2.6.32-431.el6.x86_64.img
+ これでLiveCD用のinitrdが構成されます
+ 作成したRPMは以下です
-- livecd-initramfs-xhci-2.6.32-431.el6.x86_64.rpm
-- livecd-initramfs-xhci-2.6.32-431.spec -- パッケージ作成用SPECファイル
-- livecd-dracut.conf
#classdiv(end)