BargeOS の ISO を re-master して immutable infrastructure
と言う事を出来るかどうか試した。なお Hyper-V 上でだけども。
実際に何をしたのか
BargeOS の ISO の initrd を編集して、設定等がカスタムされた BargeOS の bootable iso を作製し deploy する
という様なコトの実証実験をやった。
成果物
下記の Makefile
を見よ。
ただし、下記の Makefile を動かすためには、
辺りが必要。
all: fetch mount copy umount extract patch pack iso .PHONY: fetch mount copy umount extract patch pack iso fetch: curl -LO https://github.com/bargees/barge-os/releases/download/2.8.0-rc2/barge.iso mount: test -d iso || mkdir -p iso sudo mount -o loop barge.iso iso copy: test -d iso-custom || mkdir -p iso-custom cp -R iso/boot iso-custom/boot umount: sudo umount iso extract: test -d rootfs || mkdir -p rootfs cd rootfs && xz -dc < ../iso-custom/boot/initrd | sudo cpio --quiet -i --make-directories patch: sudo cp -R overlays/* rootfs/ sudo chown root:root rootfs/etc/ssh/sshd_config sudo chown root:root rootfs/etc/sudoers.d/bargees sudo chown -R 1000:1000 rootfs/home/bargee/.ssh sudo chmod 700 rootfs/home/bargee/.ssh sudo chmod 600 rootfs/home/bargee/.ssh/authorized_keys pack: cd rootfs && sudo find . 2>/dev/null | sudo cpio -H newc -o | xz -9 -C crc32 -c >../iso-custom/boot/initrd iso: cd iso-custom \ && mkisofs -v -l -r -J -o ../barge-custom.iso \ -b boot/isolinux/isolinux.bin \ -c boot/isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table . \ && isohybrid ../barge-custom.iso
解説未満
- 基本的に、実際に運用に使うには
patch
とfetch
辺りは弄る必要がある - 次に、ディレトリ構造としては、だいたいこんな感じ:
- code:-
- workdir/ → ここを作業ディレクトリとすると ↓
- Makefile → 作業タスクのための Makefile
- iso/ → 元の ISO データのマウント先
- iso-custom/ → カスタムされた ISO ファイルを作製するための l working copy
- overlays/ → rootfs へ上書きするファイル類置き場
- rootfs/ → initrd から取り出された rootfs の中身
- で、色々編集とかしたら、
make pack iso
で ISO ディスクイメージ を作製できる
確認したコト
- nyarla.icon { とりあえず [initrd を編集した ISO ディスクイメージ が boot する所までは確認した]
- nyarla.icon { ただ、一番最初の boot 時には何故か [Kernel Panic した。二度目以降は普通だったけど]
使い道
今考えているヤツとしては、
- 起動時に、自動的に SWAP と DATA パーティションを作る
- docker-compose をなんらかの形でセットアップし、自動的にサービスを展開する様にする
ssh
やbargee
アカウントを完全に無効化し、 ログインレス システムを作製- システムの更新時には ISO ディスクイメージ を切り替えて Blue-Green Deployment
と言う様な事を ISO 運用が可能な IaaS でやる と言う事を考えている。