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