Ubuntu Server 11.10のHeadless install(シリアルコンソールでのインストール)
x86なLinuxマシンにVGAとキーボードを使ってシリアルコンソールの設定をするという方法は広く知られているし、UbuntuのWikiにも載っているんだけど、一度もVGA・キーボードを繋がずに設定するにはどうしたらええのん、そもそもVGA刺さってないよみたいな環境でのHOWTO。
始める前に
あなたのマシンのシリアルポートはCOM1=ttyS0ですか、COM2=ttyS1ですか。
どのマシンでもttyS0だという訳ではありません。ttyS1だけが存在する場合もあります。
確認例:
$ dmesg|grep ttyS [ 0.509461] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A [ 0.539653] 00:0b: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
ボーレートはいくつにしますか(BIOS Console Redirectionがある場合は、そちらの設定に合わせる)。
ISOにハードコーディングしてしまうので、最初にきちんと確認しておきましょう。
また、きちんとしたシリアルコンソール用のアプリを使いましょう。
Mac OS Xの場合、screenを使わないで下さい。化けます。
minicomなどをインストールすると良いでしょう。
カスタムISO作成
以下、ttyS1, 115200n8の場合の記述になっています。
各自の環境に合わせて記述を変えて下さい。
$ wget ftp://ftp.iij.ad.jp/pub/linux/ubuntu/releases/11.10/ubuntu-11.10-server-i386.iso $ sudo mount -o loop,ro ubuntu-11.10-server-i386.iso /mnt $ sudo cp -a /mnt/ ./ubuntu-serial-i386-ttyS1/
Ubuntu ServerのISOをダウンロードしてきて/mntにマウントし、./ubuntu-serail-i386-ttyS1にコピーします。
$ cd ./ubuntu-serial-i386-ttyS1/isolinux
$ sudo vi isolinux.cfg
isolinux.cfgを次のように編集します。
--- /mnt/isolinux/isolinux.cfg 2011-10-11 22:52:04.000000000 +0900 +++ isolinux.cfg 2011-12-09 16:00:31.558716174 +0900 @@ -1,6 +1,7 @@ +serial 0 115200 0x003 # D-I config version 2.0 include menu.cfg default vesamenu.c32 prompt 0 timeout 0 -ui gfxboot bootlogo +#ui gfxboot bootlogo
serial 0 115200 0x003で、ttyS0,115200を指定しています。
間違いのように思えますが、手元のマシンでは何故かこうしないとttyS1から出力が行われませんでした。
BIOS経由でシリアルIOを行う場合とLinuxカーネル経由でシリアルIOを行う場合で初期化状態なども異なるからかもしれませんが、理由は把握できていません。
$ sudo vi txt.cfg
続いてtxt.cfgを次のように編集します。
--- /mnt/isolinux/txt.cfg 2011-10-11 22:52:04.000000000 +0900 +++ txt.cfg 2011-12-08 17:57:29.535055847 +0900 @@ -2,15 +2,15 @@ label install menu label ^Install Ubuntu Server kernel /install/vmlinuz - append file=/cdrom/preseed/ubuntu-server.seed vga=788 initrd=/install/initrd.gz quiet -- + append file=/cdrom/preseed/ubuntu-server.seed vga=788 initrd=/install/initrd.gz quiet console=tty0 console=ttyS1,115200n8 -- label cloud menu label ^Enlist system with Ubuntu Orchestra Server kernel /install/vmlinuz - append modules=cobbler-enlist-udeb vga=788 initrd=/install/initrd.gz quiet -- + append modules=cobbler-enlist-udeb vga=788 initrd=/install/initrd.gz quiet console=tty0 console=ttyS1,115200n8 -- label check menu label ^Check disc for defects kernel /install/vmlinuz - append MENU=/bin/cdrom-checker-menu vga=788 initrd=/install/initrd.gz quiet -- + append MENU=/bin/cdrom-checker-menu vga=788 initrd=/install/initrd.gz quiet console=tty0 console=ttyS1,115200n8 -- label memtest menu label Test ^memory kernel /install/mt86plus
これは普通のカーネル引数の設定で、インストール済みイメージにシリアルコンソールの設定をする場合と変わりません。
$ cd ../.. $ sudo mkisofs -r -V "Ubuntu Serial Boot" -cache-inodes \ -l -b isolinux/isolinux.bin -c isolinux/boot.cat \ -no-emul-boot -boot-load-size 4 -boot-info-table \ -o ubuntu-serial-i386-ttyS1.iso \ ubuntu-serial-i386-ttyS1
これでubuntu-serial-i386-ttyS1.isoが作成されるので、CD-Rに焼いてブートしてください。
成功すると、VGA経由のセットアップ時と同様のテキストモードのDebian Installerが走るのでセットアップを行います。
最後にインストールの完了通知と再起動を求められるので、ここで一旦”Go Back"してメニューに戻り、"Execute Shell"でシェルを実行して下さい。
# chroot /target # vi /etc/default/grub
ここからはWikiに載っているインストール済みイメージへのシリアルコンソール設定操作と同じになります。
まずGRUBを設定します。
--- grub.ucf-dist 2011-10-14 18:40:37.090918167 +0900 +++ grub 2011-10-06 16:06:17.019994808 +0900 @@ -5,10 +5,10 @@ GRUB_DEFAULT=0 #GRUB_HIDDEN_TIMEOUT=0 -GRUB_HIDDEN_TIMEOUT_QUIET=true +#GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=2 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` -GRUB_CMDLINE_LINUX_DEFAULT="quiet" +#GRUB_CMDLINE_LINUX_DEFAULT="quiet" GRUB_CMDLINE_LINUX="console=ttyS1,115200n8r" # Uncomment to enable BadRAM filtering, modify to suit your needs @@ -17,7 +17,7 @@ #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef" # Uncomment to disable graphical terminal (grub-pc only) -#GRUB_TERMINAL=console +GRUB_TERMINAL=serial # The resolution used on graphical terminal # note that you can use only modes which your graphic card supports via VBE @@ -32,3 +32,5 @@ # Uncomment to get a beep at grub start #GRUB_INIT_TUNE="480 440 1" + +GRUB_SERIAL_COMMAND="serial --unit=1 --speed=115200 --word=8 --parity=no --stop=1"
# update-grub
設定を反映します。
# cp /etc/init/tty1.conf /etc/init/ttyS1.conf # vi /etc/init/ttyS1.conf
--- tty1.conf 2011-04-21 07:54:13.000000000 +0900 +++ ttyS1.conf 2011-10-06 16:08:06.179994820 +0900 @@ -1,10 +1,10 @@ -# tty1 - getty +# ttyS1 - getty # -# This service maintains a getty on tty1 from the point the system is +# This service maintains a getty on ttyS1 from the point the system is # started until it is shut down again. start on stopped rc RUNLEVEL=[2345] stop on runlevel [!2345] respawn -exec /sbin/getty -8 38400 tty1 +exec /sbin/getty -8 115200 ttyS1 vt102
ttyS1用のgettyの設定を作ります。
# exit # exit
シェルから抜けて再起動を行います。
以上で、Headless installが完了します。
普段、インストーラ任せにしていてインストール時にシェルを使う習慣の無い人は、こんな感じに活用するやり方を覚えると色々便利になってカスタマイズも効くようになるし良いと思います。
出来上がったISO
ttyS1でi386なイメージとか欲しい人居ないと思うけど、一応置いておく。
http://www.megaupload.com/?d=BT9V9EFK