Ubuntu Weekly Recipe

第154回 さくらVPSへのネットブートインストールをPreseedingで自動化する

この記事を読むのに必要な時間:およそ 6 分

成人の日も過ぎて新年気分も一段落し,皆様いかがお過ごしでしょうか。おそらく,年末の大掃除できれいになったご家庭やお勤め先では,新しい気持ちで事に取り組まれているものと思います。⁠きれいになった部屋にはきれいな作業環境を」ということで,今回はUbuntuインストールに関する話題です。

昨年,さくらインターネットがKVMを使ったVPSサービスとしてさくらのVPSの提供を開始し,低価格に対して自由度の高さや日本語サポートという魅力も相まって各所で話題となりました。Recipeでも第142回では「カスタムOSインストール」機能を使ってUbuntu 10.04やそのデスクトップ環境をインストールする方法を紹介しています。

しかしながら,カスタムOSインストール機能はUbuntuだと今のところ10.04しかインストールできません。また,標準のCentOSと異なりインストール時に手動で設定が必要になります。テスト目的で新しいバージョンを使いたかったり,環境を何度も再インストールする場合,これは少し不便です。幸い,さくらのVPSの場合,ブラウザからシリアルコンソールアクセスが可能なので,ネットブートインストールを使えば任意のバージョンのUbuntuをインストールできます※1)⁠また,PreseedingやKickstartを使ってインストール自体を自動化することもできます。

そこで今回はこの二つを組み合わせることで,⁠OS再インストール」機能を使ってCentOSを入れ直す時ほどではないにしろ,簡単にUbuntu環境をリフレッシュする方法をご紹介します。

※1
ネットブートインストールは,カスタムOSインストールが正式に提供される前にもUbuntuをさくらのVPSにインストールする方法として使われていました。

インストールの前に

手動でインストールする場合は,ネットワーク設定なども自前で行わなくてはなりません。そこで,あらかじめ設定値を確認しておきましょう。具体的には,ifconfig,hostnameコマンドなどで,IPv4のIPアドレス,ネットマスク,ゲートウェイアドレス,ホスト名を控えておくと良いでしょう。

ネットブートインストール

ネットブートインストールとは,ディスクもしくはインターネット上に置いたインストール機能を持った最低限のイメージを使ってインストールする方法です。通常のインストールと違ってCD-ROMドライブを必要としません。また,今回の方法はイメージを仮想マシン側のディスク上に置くため,TFTPブートのときのように外部サーバを用意する必要もありません。ただし,インストール対象のブートローダの設定ができること,インストール中にアーカイブサーバへアクセスできることが必要になります※2)⁠

※2
あらかじめ別途パーティションを用意しておき,そこにインストールCDの内容を展開すればアーカイブサーバへのアクセスも必要ありません。詳しいやり方は,Ubuntuのドキュメントを参照してください。

インストーラのダウンロード

まずはネットブートインストール用のイメージをダウンロードします。CDイメージのアーカイブサイトに,リリース/アーキテクチャ毎のインストールイメージのリンクが掲載されていますので,各自の環境にあわせたものをダウンロードしてください。ここでは,仮想マシン上に10.10(Maverick)のamd64版をダウンロードしています。

$ wget http://archive.ubuntu.com/ubuntu/dists/maverick/main/installer-amd64/current/images/netboot/netboot.tar.gz

すべての設定ファイルが入ったnetboot.tar.gzをダウンロードしていますが,今回必要なのはlinuxとinitrd.gzの二つだけです。これらをブートローダから見える場所(以下の例では/boot/ubuntu)にコピーします。

$ tar zxvf netboot.tar.gz
$ cd ubuntu-installer/amd64
$ sudo mkdir /boot/ubuntu
$ sudo cp linux initrd.gz /boot/ubuntu

GRUBの設定

先ほどコピーしたイメージから起動するよう,GRUBを設定します。リモートコンソールを使っている場合は起動時に,ESCキーを押すことでも起動エントリを直接編集・選択できます※3が、今回は設定ファイルを編集してあらかじめ起動エントリを作っておく方法を紹介します。なお,GRUB LegacyとGRUB 2とでは設定方法が異なりますので,ここでは両方を記載しておきます。

標準インストールされているCentOSはGRUB Legacyを使っているので仮想マシンの設定ファイル(/boot/grub/grub.conf)を編集します※4)⁠このファイルに以下のコードを追加してください。

title Ubuntu Netboot Install
root (hd0,0)
kernel /boot/ubuntu/linux ro root=LABEL=/ console=tty0 console=ttyS0,115200n8r
initrd /boot/ubuntu/initrd.gz

カスタムOSインストールなどで,Ubuntu 9.10以降をインストールした場合は,GRUB 2が入っています。その場合は,仮想マシン上の/etc/grub.d/40_customを/etc/grub.d/09_netbootとしてコピーした上で,以下のような内容になるよう編集します。09にしているのは,10_linuxのエントリより前に持ってくることで,標準で選択されるエントリにするためです。

!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.

menuentry "Ubuntu Netboot Install" {
        set root (hd0,0)
        linux /boot/ubuntu/linux ro root=LABEL=/ console=tty0 console=ttyS0,115200n8r
        initrd /boot/ubuntu/initrd.gz
}

GRUB 2の場合は編集後,update-grubを実行して,設定内容が/boot/grub.cfgに反映されていることを確認してください。

$ sudo update-grub
※3
GRUB 2の場合はESCキーからShiftキーに変更されています。ただしさくらのVPSだとkeystatusコマンドがfalseを返すらしく(/etc/grub.d/30_os-prober参照)⁠ESCでしか起動エントリを表示できません。
※4
同じくGRUB Legacyを採用している古いUbuntuの場合はgrub.confではなくmenu.lstを使います。

実際にインストールしてみる

GRUB Legacy/2いずれの場合も,前節までの設定が終わったら仮想マシンを再起動します。リモートコンソールから,コンソールログインしrebootコマンドで再起動すればその後のインストール作業も続けて行えるので便利です。GRUB Legacyの場合は起動画面になったらESCキーを押してGRUB画面に移行し,"Ubuntu Netboot Install"を選択します。GRUB 2の場合は,上記設定をしているなら自動で"Ubuntu Netboot Install"が選択されるはずです※5)⁠

インストール画面は,カスタムOSインストールガイドにあるそれとほぼ変わりません。テキストベースのインストールの流れを体験しておくと,後述のPreseedingの設定時に理解しやすくなりますので,テスト目的も兼ねて一度試しておくと良いでしょう。なお,SSHログインを行いたい場合は,"Choose software to install"で"OpenSSH server"を選択してください。

インストールが完了したら,ログインして動作確認します。なお,同じアドレスにSSHログインしていた場合は,仮想マシンにあるSSHサーバの鍵が変わっていますので,ローカル側の鍵を削除しておく必要があります。

$ ssh-keygen -R (仮想マシンのIPアドレス and/or ホスト名)

確認するポイントとしてはログイン自体ができるかどうか,ネットワーク設定も正しく行われておりインターネットに接続できるかどうかなどになります。うまくインストールできたのなら,次はインストールの自動化に進みます。

※5
もちろん,GRUB Legacyの場合でも自動で選択されるエントリ番号を,あらかじめ"Ubuntu Netboot Install"のそれに設定しておくことができます。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入