続 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