続 Ubuntu Serverの全自動インストール環境作成
http://d.hatena.ne.jp/kinneko/20130203/p1 の続き。
なんか、まだ使うということなので、ブラッシュアップの時間がやってきたよ。
今度は台湾でやるそうなので、全自動化必須かな。
残件はこんなとこ。
- キーボードが英語のままだった。
- マニュアルでtaskselするのとパッケージ構成が違うので、pyserialがはいらなかった。
- debになってない必要なプログラムを追加する。
- パッケージとしては、rootでシェル環境を立ち上げるので、mingettyを追加する。
- 起動時800x600で、コンソールはスリープしないようにする。
- 電源オン時、rootでコンソール起動、指定のプログラムを自動起動する。
- ログをHDDからUSBメモリへ回収する必要がある。
キーボードの日本語化
これはtypoね。
kinneko@BuildSV:~/_ISO/REMASTER/image/preseed$ sudo vi custom.cfg d-i console-keymaps-at/keymap select jp106
pyserialパッケージの追加
taskselの次くらいに追記。
kinneko@BuildSV:~/_ISO/REMASTER/image/preseed$ sudo vi custom.cfg d-i pkgsel/include string python-serial mingetty kinneko@BuildSV:~/_ISO/REMASTER/image/preseed$ cd ..
ついでに追加予定のmingettyも書いておく。
netcfgのバグに無理やり対処した件を修正
パッケージDBを作りなおすので、マニュアルで行った修正は不要になる。
パッケージ名を17に戻すだけ。
root@BuildSV:/home/kinneko/_ISO/REMASTER/image# mv pool/main/n/netcfg/netcfg_1.68ubuntu16_i386.udeb pool/main/n/netcfg/netcfg_1.68ubuntu17_i386.udeb
mingettyのパッケージ追加
パッケージを置くディレクトリを作っておく。
kinneko@BuildSV:~/_ISO/REMASTER/image$ sudo mkdir -p pool/main/m/mingetty
quantalのmgettyはmingetty_1.08-2。もらってくる。
kinneko@BuildSV:~/_ISO/REMASTER/image$ cd pool/main/m/mingetty kinneko@BuildSV:~/_ISO/REMASTER/image/pool/main/m/mingetty$ sudo wget http://archive.ubuntu.com/ubuntu/pool/universe/m/mingetty/mingetty_1.08-2_i386.deb --2013-02-13 16:41:45-- http://archive.ubuntu.com/ubuntu/pool/universe/m/mingetty/mingetty_1.08-2_i386.deb Resolving archive.ubuntu.com... 91.189.92.201, 91.189.92.202, 91.189.92.200 Connecting to archive.ubuntu.com|91.189.92.201|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 10938 (11K) [application/x-debian-package] Saving to: `mingetty_1.08-2_i386.deb' 100%[======================================>] 10,938 --.-K/s in 0.009s 2013-02-13 16:41:46 (1.16 MB/s) - `mingetty_1.08-2_i386.deb' saved [10938/10938]
DBを再構築する。
kinneko@BuildSV:~/_ISO/REMASTER/image/pool/main/m/mingetty$ cd ~/_ISO/REMASTER/image/dists/quantal/main/binary-i386 kinneko@BuildSV:~/_ISO/REMASTER/image/dists/quantal/main/binary-i386$ sudo mv Packages.gz Packages.gz.org kinneko@BuildSV:~/_ISO/REMASTER/image/dists/quantal/main/binary-i386$ cd ../../../.. kinneko@BuildSV:~/_ISO/REMASTER/image$ sudo apt-ftparchive packages pool/main | sudo gzip -9 > dists/quantal/main/binary-i386/Packages.gz -bash: dists/quantal/main/binary-i386/Packages.gz: Permission denied
なぬ?
あー、もうめんどくさい。
kinneko@BuildSV:~/_ISO/REMASTER/image$ sudo su - root@BuildSV:~# cd /home/kinneko/_ISO/REMASTER/image/ root@BuildSV:/home/kinneko/_ISO/REMASTER/image# apt-ftparchive packages pool/main | gzip -9 > dists/quantal/main/binary-i386/Packages.gz
入っているか確認してみる。
root@BuildSV:/home/kinneko/_ISO/REMASTER/image# cd dists/quantal/main/binary-i386/ root@BuildSV:/home/kinneko/_ISO/REMASTER/image/dists/quantal/main/binary-i386# cp Packages.gz Packages.gz.new root@BuildSV:/home/kinneko/_ISO/REMASTER/image/dists/quantal/main/binary-i386# gzip -d Packages.gz root@BuildSV:/home/kinneko/_ISO/REMASTER/image/dists/quantal/main/binary-i386# grep mingetty Packages Package: mingetty Filename: pool/main/m/mingetty/mingetty_1.08-2_i386.deb mingetty is a minimal getty for use on virtual consoles. Unlike the getty in the util-linux or mgetty packages, mingetty is not
入ってる。
昔とやり方変わってなくてよかった。
とりあえずインストール時には署名いらないみたいだ。
後始末。
Packagesはgzなくても動いたはずだけど、メディア容量を削減の掃除。
root@BuildSV:/home/kinneko/_ISO/REMASTER/image/dists/quantal/main/binary-i386# rm Packages root@BuildSV:/home/kinneko/_ISO/REMASTER/image/dists/quantal/main/binary-i386# mv Packages.gz.new Packages.gz root@BuildSV:/home/kinneko/_ISO/REMASTER/image/dists/quantal/main/binary-i386# exit
とりあえず、ここまでで焼いてみる
kinneko@BuildSV:~/_ISO/REMASTER/image$ cd .. kinneko@BuildSV:~/_ISO/REMASTER$ sudo genisoimage -N -J -R -D -V "CUSTOMUSV2" -o ubuntu-12.10-server-i386-custom-preseed2.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table image (snip) 344756 extents written (673 MB) kinneko@BuildSV:~/_ISO/REMASTER$ ls -lh ubuntu-12.10-server-i386-custom-preseed2.iso -rw-r--r-- 1 root root 674M Feb 13 17:08 ubuntu-12.10-server-i386-custom-preseed2.iso
仮想マシンで試す。
う、やっぱ、d-iの中でnetcfgはハードコードされているみたいよ。
これかな?
kinneko@BuildSV:~/_ISO/REMASTER/image$ grep -R netcfg_1.68ubuntu16_i386.udeb ./*
./md5sum.txt:40f0c35b3ac33c9f1ce1e0c7eb33500b ./pool/main/n/netcfg/netcfg_1.68ubuntu16_i386.udeb
この前は通ったので、ファイル名しか見てなさそうだから違うかも。
kinneko@BuildSV:~/_ISO/REMASTER/image$ md5sum ./pool/main/n/netcfg/netcfg_1.68ubuntu17_i386.udeb 20d119be495ac3ea4037b11a630d3500 ./pool/main/n/netcfg/netcfg_1.68ubuntu17_i386.udeb kinneko@BuildSV:~/_ISO/REMASTER/image$ sudo vi md5sum.txt 20d119be495ac3ea4037b11a630d3500 ./pool/main/n/netcfg/netcfg_1.68ubuntu17_i386.udeb
ダメだ。
ギブアップ。16に書き直しておく。というか17と2つ置けばいいのかな。
kinneko@BuildSV:~/_ISO/REMASTER$ sudo cp image/pool/main/n/netcfg/netcfg_1.68ubuntu17_i386.udeb image/pool/main/n/netcfg/netcfg_1.68ubuntu16_i386.udeb
通った... orz
キーボード日本語になってません... orz
pyserialとmingettyはインストールされている。
日本語キーボード再び(あとまわし)
kinneko@BuildSV:~/_ISO/REMASTER/image/preseed$ sudo vi custom.cfg d-i console-keymaps-at/keymap select jp106
selectは不要なんじゃ?
それとも、実は"jp.106"とか?
jpだけどか、Japanだとか、jaだとか?
Japaneseか?
d-i console-setup/layoutcode string Japanese
ダメね。
あとまわし。
late_commandフックを使ってファイルをインストール
"preseed/late_command:"には、 インストールが終わって再起動する直前、 /target ファイルシステムをアンマウントする前に実行される処理を書いておける。
以下の処理は全部ここに入れる。
- ログインなしにroot起動するようにtty1を変更
- コンソールがスリープしないように変更
- コンソールが800x600になるように変更
- 追加のオリジナルプログラムを配置
- 追加のオリジナルプログラムを起動時に自動起動する
インストール中のマウント状態を調べてみる。
CDROMは/cdromにマウントされている。
さらに、あとで/target/media/cdromにリマウントされている模様。
sda1は/targetにマウントされている、
ファイルの置き場所を確保する。
kinneko@BuildSV:~/_ISO/REMASTER/image$ mkdir myfile
まずはシェルに落ちて止められるか確認。
kinneko@BuildSV:~/_ISO/REMASTER/image$ sudo vi preseed/custom.cfg d-i grub-installer/bootdev string (hd0,0) d-i preseed/late_command string \ in-target /bin/sh d-i finish-install/reboot_in_progress note
焼いてみる。
インストール画面がシェルに落ちるわけではなく、"Running preseed..."で停止している。
Alt+F2でシェルを起動してみると、/target/media/cdrom/myfileが見える。
うまくいっているようだ。
myfileに必要なファイルを置く。
あとは、late_commandに以下を実行させるだけ。
- /target/boot/grub/menu.lstの上書き
- /target/etc/init/tty1.confの上書き
- /target/root/.bashrcの上書き
- /target/root/に実行ファイル群を展開
d-i preseed/late_command string \ in-target cp /target/media/cdrom/myfile/menu.lst /target/boot/grub/menu.lst \ in-target cp /target/media/cdrom/myfile/tty1.conf /target/etc/init/tty1.conf \ in-target cp /target/media/cdrom/myfile/bashrc /target/root/.bashrc \ in-target cp -a /target/media/cdrom/myfile/programs /target/root/ \ in-target /bin/sh
iso作る。
541499 extents written (1057 MB)
足した分、でかくなったな。
あら、late_commandが長すぎたかな?
エラーになっている。
シェルスクリプトにまとめないとダメだな。
kinneko@BuildSV:~/_ISO/REMASTER/image/myfile$ vi install.sh #!/bin/sh cp /target/media/cdrom/myfile/menu.lst /target/boot/grub/menu.lst cp /target/media/cdrom/myfile/tty1.conf /target/etc/init/tty1.conf cp /target/media/cdrom/myfile/bashrc /target/root/.bashrc cp -a /target/media/cdrom/myfile/programs /target/root/ kinneko@BuildSV:~/_ISO/REMASTER/image/myfile$ chmod +x install.sh kinneko@BuildSV:~/_ISO/REMASTER/image/myfile$ sudo vi ../preseed/custom.cfg d-i preseed/late_command string \ in-target /bin/sh /target/media/cdrom/myfile/install.sh
In-target: /bin/sh: 0:
In-target: Can't open /target/media/cdrom/myfile/install.sh
シェルを起動して、install.shを直接実行するとうまくいく。
継続すると、結果は良好。
もうひと息。
in-target /target/media/cdrom/myfile/install.sh
エラーが変わった。
どうもlate_commandは、chrootで起動しているようだ。
in-targetしてるからか。
kinneko@BuildSV:~/_ISO/REMASTER$ sudo vi image/preseed/custom.cfg in-target /media/cdrom/myfile/install.sh
kinneko@BuildSV:~/_ISO/REMASTER$ vi image/myfile/install.sh #!/bin/sh cp /media/cdrom/myfile/menu.lst /boot/grub/menu.lst cp /media/cdrom/myfile/tty1.conf /etc/init/tty1.conf cp /media/cdrom/myfile/bashrc /root/.bashrc cp -a /media/cdrom/myfile/programs /root/
うまくいった!
isohybrid化しておく
kinneko@BuildSV:~/_ISO/REMASTER$ sudo isohybrid ubuntu-12.10-server-i386-custom-preseed2.iso isohybrid: Warning: more than 1024 cylinders: 1058 isohybrid: Not all BIOSes will be able to boot this device
デカすぎか。
いらんファイルをダイエットしておく。
390419 extents written (762 MB)
kinneko@BuildSV:~/_ISO/REMASTER$ sudo isohybrid ubuntu-12.10-server-i386-custom-preseed2.iso
よし成功。
残件
残ったこれは手動でいいかな。
- ログをHDDからUSBメモリへ回収する必要がある。
ネットワークつながっていればメールで飛ばすんだけど。
日本語キーボード設定の問題は未解決のまま。
実機での雑多な問題は、前の回を見てね。
あ、あと、起動すると全自動実行なので、まずHDDが上書きされても泣かないかどうかちゃんと確認してね。
そして、二度あることは三度ある...
http://d.hatena.ne.jp/kinneko/20130327/p1