CentOS7 kickstartファイルからのiso作成(最小のパッケージ構成や起動用スクリプトの作成)

CentOS7 の32bit版のブータブルCDのイメージファイルを作りたかったので,そのときのメモです.(試したものはkernelplusのものです)
●稼働中のシステムからkickstartファイルを作成するツールのインストール
yum install system-config-kickstart 
コマンド例
# system-config-kickstart --generate ks.cfg
作成されたks.cfgの中身を見ると,ルートのパスワードが暗号化されていたり,後からインストールしたツール(パッケージ)も入っている.(稼働中のシステムをもとにkickstartのファイルができている)

●ks.cfgの書き換え
レポジトリを追加が必要

f:id:l-expanse:20220206103915p:plain

 

kickstart内に記述する最小限のパッケージ
何度か試して,下記が最小限の構成?
firewalldを外すと,firewallを止められない?といったような?エラーが出てしまうので入れている.

%packages
kernel
bash
passwd
firewalld
%end


kickstart内に記述する起動スクリプトの例(rc.localの作成例)
色々と試して下記でできることを確認.別の記事で書いたkernelplusを使っていて,
9pファイルシステムに対応させたいのでその記述をしている.また「user」も作っている.(コマンドには特に「;」は使う必要は無いのかも..)

最後にファイル属性の変更もする.

%post

cat > /etc/rc.d/rc.local << 'EOF_livesysconf'
#!/bin/bash

( /bin/mount -t 9p -o trans=virtio host9p /mnt  ; lsmod | grep 9p ; df )  &
(/sbin/useradd user ; /bin/passwd -d user  ) &

exit 0

EOF_livesysconf

chmod u+x /etc/rc.d/rc.local

%end

 

●ライブCD作成ツールのインストール

yum install livecd-tools
次のコマンドを実行

f:id:l-expanse:20220206104354p:plain

 

自分の場合,なぜか gpg-publickeyでエラーする.一旦「#」でコメントアウトした.

 

●isoファイルイメージが作成される.

 

インストールするパッケージの選択方法が分かり,起動スクリプトを作る方法もわかり,自在に起動イメージを作る方法は分かりました.自分で使いたくて作成したisoイメージは,ツールを削っても400MBでした(buildrootはカスタマイズして10MBにできました)

 


下記のサイトも参考にしました.

 

CentOS6ベースでカスタムLiveCDを作る – OSAKANA TAROのメモ帳

 

 

CentOS7の32bit版のkernelplusインストール

CentOS7の32bit版のkernelplusを試したかったので,そのときのメモです.

 

元になるcentos7 32ビット版を,最小構成でインストール.isoはここ

http://ftp.yz.yamagata-u.ac.jp/pub/linux/centos-altarch/7.9.2009/isos/i386/

 

www.dvlv.co.uk

上記にkernelplusのインストール方法(sudo yum --enablerepo centosplus install kernelplus)があるが,32bit版のrpmファイルは探しても見当たらない(どのサーバにもない?)

下記に,

http://ftp.jaist.ac.jp/pub/Linux/CentOS-vault/7.9.2009/centosplus/Source/SPackages/

 

f:id:l-expanse:20220206102932p:plain

 

kernelplus のrpmのソースを見つけることができたので,それをコンパイルすることにする.
コンパイルではファイル容量が多く必要なので注意する(途中容量オーバーになりました・・).
コンパイル時にエラーしたので,Makefile をみるとgit関係のコマンドがない?ことが原因のようでした.git関係のツールもインストールして解決.
コンパイル後に,
yum install rpmbuild
を実行.足りないファイル(依存関係)がたくさん出てきたので,それらも順次インストールして,依存関係をつぶしていく.依存関係で,perl関連でもインストールしないとならないものが出てくるが,
# yum install perl-ExtUtils-Embed
で解決.
その後,インストール

f:id:l-expanse:20220206103606p:plain

uname -r を実行するとkernelplusのものになっている.


 

 

 

 

 

buildrootのカスタマイズの続き

buildrootのイメージはできあがりましたが,いくつか不具合があったので設定をしました.そのメモです.
不具合は
・キー入力の不具合(日本語キーボードの記号が対応しない,パイプとバックスラッシュの文字が打てない)
「crng random init done」のメッセージが表示される

 

キーについては,
再度Docker内のmake menuconfigを実行する.メニューの中に

Target packages
->Hardware handling
  [ ]kbd

 

f:id:l-expanse:20220206003532p:plain

[kbd]にチェックを入れる.

 

起動用のスクリプト内に
loadkeys jp106
を書けば日本語キーボードの記号に対応する.
(makeを実行,イメージを作成することも)

ただ,それでもパイプの記号「|」とバックスラッシュ「\」に対応するキーがありませんでした.特に「|」は頻繁に使うので不便.いろいろと調べてみたところ,

f:id:l-expanse:20220206010432p:plain

で一覧をみると,

f:id:l-expanse:20220206004810p:plain

となっていました(自分のPCでは,keycode 124がどこかわからないままですが..).今回は,起動用スクリプト内で
loadkeys jp106
を実行したあと,
loadkeys XXX.map
を実行することとした.XXX.mapファイル内は

f:id:l-expanse:20220206005015p:plain

と書いた(後日追記:keycode 43は"]"と"}"の文字が既に割り当てられていたため,後日さらに別のキーコード(f10など)に割り当てることになりました).これで無事に「|」と「\」が表示できるようになった.
なお,割り当てたいキーのkeycodeを調べるために,下記のshowkeyを用いました.実行してキーを押すと,そのkeycodeが表示されます.

f:id:l-expanse:20220206005949p:plain


次に,「crng random init done」への対応ですが,menuconfig内のMiscellaneousにhavegedの選択があって,それをインストールすることで解決(後日追記:別のメニューオプションか設定を直書きすることでもできそう(別記事参照)).

f:id:l-expanse:20220206005328p:plain


havegedについては,下記を参考にしました.

pipiron3.blogspot.com

 

 

 

 

buildroot のイメージのカスタマイズ(iso作成)

https://github.com/humphd/browser-vm
を参考にbuildrootのカスタマイズされたイメージを作りたかったので,そのときの作業のメモです.

まずは作業環境(Docker)を用意します.CentOSでもubuntuでも可能(両方どちらでもできました).コンパイルのためにある程度の容量が必要で,Dockerを利用するとディスク容量が増えることがあるので,容量に余裕が必要です(60GBぐらい使いましたので,80~90GB?がよい?).

今回は仮想環境上のCentOS 7を使いました.gitとDockerが必要なので,CentOSなら下記でインストール.
yum install git
yum install docker

以降の作業の途中で「permission denied」のエラーが出ることを防ぐため,(Dockerからbuildrootxxxのディレクトリが読めない,とエラーがでる).あらかじめ
setenforce 0

を実行しておく.

次にdockerをスタートしておく.
systemctl start docker


適当なディレクトリで
git clone https://github.com/humphd/browser-vm
を実行.以降,
https://github.com/humphd/browser-vm
のページを参考にする.


cloneしたディレクトリ内にあるbuild.shを書き換えます.

書き換えたbuild.shの内容の一部は(書き換え方は上記ホームページにもあります)

$ docker run \
    --name build-v86 \
    -v $PWD/dist:/build \
    -v $PWD/buildroot-v86/:/buildroot-v86 \
    -ti \                       < 追加
    --entrypoint "bash" \    < 追加
    buildroot

https://github.com/humphd/browser-vmのページでは,「--rm \ 」のオプションがついていますが,やり直したいときのためにrmは無くしておくといいかもしれません.

./build.shを実行します.しばらくすると

 

f:id:l-expanse:20220205233251p:plain


のプロンプト(Docker内)が出てくる.以降,上記browser-vmのページを参考にしてカスタマイズをする:


$ make BR2_EXTERNAL=/buildroot-v86 v86_defconfig
を実行しますが,前述のsetenforce 0の設定をしていないとエラーが出ました.


$ make menuconfig
を実行すると,CUIのメニューがでているので,ホームページの内容に従って設定を確認.確認することは:

System configuration のメニューで
          Root filesystem overlay directories: でフォルダの指定が,
(buildroot-v86の場所)/board/v86/rootfs_overlay/になっていること(起動用のスクリプトなどをこのフォルダに書くとイメージ内の/etc/にコピーされる)

Filesystem images のメニューで
    iso imageも選んでいるか確認(isoファイルも作りたいとき)

Bootloaders のメニューで
    syslinux
        install isolinuxを選んでいるか確認

他にパッケージも入れたければ選択する.

 

下記がRoot filesystem overlay directoriesを確認する箇所です.

 

f:id:l-expanse:20220205234337p:plain

 

カスタマイズには下記のページも参考にしました

buildrootでブータブルCDを作成する - Qiita

 

以降, 下記を実行

$ make savedefconfig

$ make linux-menuconfig

...CUIのメニューがでてくるので,ホームページの内容も参考に設定を確認,調整

$ make linux-savedefconfig

 

 

このあとの最後のmakeの実行の前に,init.dやinittabの編集などをして,起動時の設定をします.

ここのページを参考にする.

[Buildroot] buildroot inittab getty

このホームページには,package/busybox/inittab から output/target/etc/inittab.にコピーされる,とだけと書いてありますが,init.dやinittabに設定されるファイルは,前に設定した

 

f:id:l-expanse:20220205234933p:plain

 

・・・のディレクトリで作業します.イメージを作るときに,ここのディレクト
(buildroot-v86の場所)/board/v86/rootfs_overlay/ の内容が,イメージの/etc/inittabや/etc/init.d/内にコピーされます.
また,

How to create small VMs with buildroot

ここのホームページの説明では,overlay/etc/のディレクトリになっていますが,ここでも前述のように,(buildroot-v86の場所)/board/v86/rootfs_overlay/etc/が繋がっているディレクトリで,これにinittabを書いたりinit.d内にファイルを置きます.

 

フォルダの様子は(下側は作業後の様子)

f:id:l-expanse:20220205235909p:plain

S99myscriptは自分で新しく作った起動時に動作するスクリプトです.(起動スクリプトに実行権限をつけることを忘れないこと)
自動loginの設定については,下のホームページを参考にinittabを書き換えました.

How to login automatically without typing the root username or password in Buildroot BusyBox init? - Unix & Linux Stack Exchange

unix.stackexchange.com
下記でログインメッセージ無しでログインできるようになります.

 

f:id:l-expanse:20220206000228p:plain

このあとにmakeを実行.イメージが出来上がります.Docker内では下記のフォルダにイメージができています.

f:id:l-expanse:20220206000338p:plain

もとの作業環境にも「v86-linux.iso」のファイル名で保存されています.

f:id:l-expanse:20220206000421p:plain

再度カスタマイズしなおすときは,下記のようにdockerに再度入り直します.

f:id:l-expanse:20220206000948p:plain