[実践編] Ubuntu Serverをスケールアウト型サーバーに配備する(後編)
前回に引き続き、後編では、preseedを使ったUbuntu Serverの自動インストールサーバーの構築手順を紹介します。
Ubuntu Serverにおける自動インストールサーバーの種類
インストール対象のサーバー台数が少ない場合、管理者は、Ubuntu Serverの物理メディア等を使って、ディスプレイに表示されるインストーラーの指示に従い、OSのインストールを行います。しかし、スケールアウト型基盤では、インストール対象となるサーバー台数が非常に多いため、OSのインストール作業を人間が手動で行うことは現実的ではありません。
Ubuntu Serverには、インストーラー画面でユーザーが行っていたキーボード等によるインストール作業を自動化する「preseed」と呼ばれる仕組みが備わっています。Ubuntu Serverのスケールアウト型基盤では、preseedを使った運用の自動化が管理工数削減に大きく貢献します。このpreseedを使ったUbuntu Serverの自動インストールには、大きく分けて以下の2種類があります。
- 自動インストール用のDVDメディアやisoイメージを作成し、ブートする方法
- 管理対象サーバーをPXEブートさせる方法
1. の自動インストール用のDVDメディアを作る方法は、管理サーバーに自動インストール用のDVDメディアのisoイメージを保管し、管理対象サーバーの遠隔管理チップの仮想メディア機能を使ってisoイメージをマウントすることで、複数の管理対象サーバーに一斉に自動インストールを行うことが可能です。また、isoイメージを焼き付けた物理メディアでもインストールが可能であるため、遠隔管理チップや管理サーバーがなくても、DVDドライブが管理対象に接続されていれば、OSの自動インストールが可能です。これは、ITの主幹部門で作成したisoイメージを、各システム部門の管理者に物理メディアとして配るような運用で見られる方法です。1. については、技術文書が日本HPのLinux/*BSD技術情報Webサイト「edlin - Enterprise direction for Linux」にありますので、参考にしてみてください。
> edlin - Enterprise direction for Linux
2. の方法は、PXEブートとpreseedによる無人インストールを行うための管理サーバーを構築する必要がありますが、管理対象サーバーにDVDドライブと遠隔管理チップがなくてもUbuntu Serverのインストールができます。多くのスケールアウト型のシステムやクラウド環境で採用されている方法です。
Preseedを使ったUbuntu Serverの自動インストール
以下では、2. の自動インストールを実現する管理サーバーの構築手順を述べます。先述のSTKサーバーで構築したDHCP、TFTPサーバーを使用します。まず、TFTPサーバーのdefaultファイルを以下のように記述します。
# vi /tftpboot/pxelinux.cfg/default ... default ubuntusvr120403lts ... label ubuntusvr120403lts kernel ubuntusvr120403lts/linux initrd ubuntusvr120403lts/initrd.gz append pkgsel/language-pack-patterns= pkgsel/install-language-support=false locale=en_US setup/layoutcode=en_US console-setup/charmap=UTF-8 console-setup/layoutcode=us console-setup/ask_detect=false interface=eth0 hostname=localhost auto=true preseed/url=http://172.16.12.1/ubuntusvr120403lts/preseed.cfg ←実際には1行で記述
Ubuntu Serverでは、append行で指定されているオプションを正しく付与しないと、管理対象サーバー上でのUbuntu Serverのインストーラーにおいて、人間の手動操作介入が発生し、preseedによる自動インストールが停止しますので注意してください。
Ubuntu ServerをHTTP経由で自動インストールするための設定
Ubuntu Severをネットワークインストールするためのプロトコルはいくつか存在しますが、今回はHTTP経由でインストールする管理サーバーを構築してみましょう。WebサービスがUbuntu Server標準の/var/wwwディレクトリで提供されているか確認後、管理サーバーでApache Webサービスを起動します。
# grep "/var/www" /etc/apache2/sites-available/default DocumentRoot /var/www <Directory /var/www/> # sysv-rc-conf apaceh2 on # service apache2 start
Ubuntu ServerのisoイメージをApache Webサービスで提供する/var/www/ubuntusvr120403ltsディレクトリに置き、ループバックマウントします。今回はディレクトリ名を「/var/www/ubuntusvr120403lts」にしました。このディレクトリ名は、上記のdefaultファイル内のpreseed/url=で指定した記述と矛盾がないようにします。
# mkdir -p /var/www/ubuntusvr120403lts/iso # ls -l /var/www/ubuntusvr120403lts/ total 680964 -rw-r--r-- 1 root root 697303040 Aug 28 15:18 ubuntu-12.04.3-server-amd64.iso # cd /var/www/html/ubuntusvr120403lts/ # mount -o loop,ro ubuntu-12.04.3-server-amd64.iso iso/
isoディレクトリにマウントされたUbuntu Serverのisoイメージの内容をコピーします。
# mkdir /var/www/ubuntusvr120403lts/dvd # cd /var/www/ubuntusvr120403lts/iso # find . ! -type l | cpio -pdum ../dvd/
Packages.gzファイルの処理において、Ubuntu12.04.xの自動インストールが停止する問題を回避する設定を行います。
# cd /var/www/ubuntusvr120403lts/dvd/dists/precise/restricted/binary-amd64 # gunzip Packages.gz # cp /var/www/ubuntusvr120403lts/iso/dists/precise/restricted/binary-amd64/Packages.gz . # ls Packages Packages.gz Release
preseed.cfgファイルの記述
Ubuntu Serverを自動インストールための設定ファイルpreseed.cfgを用意します。以下にGPTパーティションに対応したpreseed.cfgファイルの例を示します。
# vi /var/www/ubuntusvr120403lts/preseed.cfg d-i debian-installer/locale string en_US d-i localechooser/supported-locales en_US.UTF-8, ja_JP.UTF-8 d-i console-setup/ask_detect boolean false d-i console-setup/layoutcode string us d-i preseed/run string http://172.16.12.1/netcfg.sh ←固定IPアドレス設定に必要 d-i netcfg/use_autoconfig boolean false d-i netcfg/disable_autoconfig boolean true d-i netcfg/choose_interface select eth0 d-i netcfg/disable_dhcp boolean true d-i netcfg/get_nameservers string 172.16.12.1 d-i netcfg/get_ipaddress string 172.16.255.254 ←管理対象サーバーのIPアドレス d-i netcfg/get_netmask string 255.255.0.0←管理対象サーバーのネットマスク d-i netcfg/get_gateway string 172.16.12.1←デフォルトゲートウェイ d-i netcfg/confirm_static boolean true d-i netcfg/get_hostname string ubuntusvr254 ←管理対象サーバーのホスト名 d-i netcfg/get_domain string jpn.linux.hp.com←管理対象サーバーのドメイン名 d-i netcfg/wireless_wep string d-i keyboard-configuration/layoutcode string us←キーボードを指定(例では英語) d-i keyboard-configuration/modelcode pc105 d-i mirror/country string manual d-i mirror/http/hostname string 172.16.12.1 ←管理サーバーのIPアドレス d-i mirror/http/directory string /ubuntusvr120403lts/dvd/←isoイメージのコピー先 d-i mirror/http/proxy string d-i mirror/suite precise ←Ubuntu 12.04.xではpreciseを指定 d-i clock-setup/utc boolean false←UTCを使用しない d-i time/zone string Japan d-i clock-setup/ntp boolean false d-i partman-md/device_remove_md boolean true d-i partman-lvm/device_remove_lvm boolean true d-i partman/confirm_nooverwrite boolean true d-i partman-auto/disk string /dev/sda ←管理対象マシンの内蔵ディスクのデバイス名 d-i partman-auto/method string regular d-i partman/confirm boolean true d-i partman-auto/choose_recipe string ProLiant d-i partman/choose_partition select Finish partitioning and write changes to disk d-i partman/mount_style select traditional d-i partman-partitioning/default_label string gpt d-i partman-auto/expert_recipe string ProLiant :: \ 1 1 1 free \ $iflabel{ gpt } \ method{ biosgrub } \ . \ boot-root :: \ 300 50 300 ext4 \ ←/bootパーティションを300MB確保 $gptonly{ } \ $primary{ } $bootable{ } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \ ←/bootパーティションをext4で利用 mountpoint{ /boot } \ . \ 500 10000 -1 ext4 \ ←残りのディスク全て/パーティションに割り当て $gptonly{ } \ method{ format } format{ } \ use_filesystem{ } filesystem{ ext4 } \←/パーティションをext4で利用 mountpoint{ / } \ . \ 4096 600 4096 linux-swap \ ←スワップ領域を4GB確保 $gptonly{ } \ $primary{ } \ method{ swap } format{ } \ . d-i base-installer/install-recommends boolean true d-i base-installer/kernel/image string linux-generic d-i passwd/root-login boolean true ←rootアカウントでログイン可能にする d-i passwd/make-user boolean false d-i passwd/root-password password password←rootアカウントのパスワード設定 d-i passwd/root-password-again password password d-i passwd/user-password password insecure d-i passwd/user-password-again password insecure d-i user-setup/allow-password-weak boolean true d-i user-setup/encrypt-home boolean false d-i apt-setup/use_mirror boolean true d-i debian-installer/allow_unauthenticated boolean true tasksel tasksel/first multiselect none d-i pkgsel/include string openssh-server build-essential d-i pkgsel/upgrade select none d-i pkgsel/update-policy select none popularity-contest popularity-contest/participate boolean false d-i pkgsel/updatedb boolean true d-i grub-installer/grub2_instead_of_grub_legacy boolean true ←GRUB2を指定 d-i grub-installer/only_debian boolean true d-i grub-installer/bootdev string /dev/sda ←ブートデバイスを指定 d-i finish-install/reboot_in_progress note
管理対象サーバーに固定のIPアドレスを設定する場合、以下のnetcfg.shスクリプトを管理サーバーに配置します。上記preseed.cfgファイル内で指定していますので、記述方法を確認してみてください。
# vi /var/www/netcfg.sh #!/bin/sh killall.sh; netcfg
defaultファイルの記述とブート用イメージファイルの配置
管理対象サーバーがPXEブート後に自動インストールが開始されるようにするため、管理サーバーのdefaultファイル内の「default ubuntusvr120403lts」のエントリーが選択されるようにstk950capとstk950depの行頭に「#」を挿入しコメントアウトします。
defaultファイルの記述と矛盾がないように、Ubuntu Serverのisoイメージに収録されているPXEブート用のイメージファイルlinuxとinitrd.gzを管理サーバーに配置します。先述のSTKサーバーの構築時に配置したPXEブート用のイメージファイルvmlinuzとinitrd.imgとは異なりますので注意してください。
# mkdir /tftpboot/ubuntusvr120403lts # cd /var/www/ubuntusvr120403lts/iso/install/netboot/ubuntu-installer/amd64 # cp -a linux initrd.gz /tftpboot/ubuntusvr120403lts/
これでUbuntu Serverを自動インストールする準備が整いました。管理対象サーバーの電源を投入後、PXEブートが正常に行われて、人間のオペレーションが介入することなくインストールが完了することを確認してください。自動インストール完了後、管理対象サーバーにrootアカウントでログインできるはずです。
管理対象サーバーに固定IPアドレスが付与されていない場合は、netcfg.shスクリプトやpreseed.cfgファイル、Apache Webサーバーの設定や読み込み権限の設定等に誤りがある可能性がありますので、再度注意深く確認してください。
Ubuntu Serverの管理ソフトウェアHP Insight CMUとCanonical Landscape
Hadoopやオンラインゲーム、OSSクラウド等のスケールアウト基盤で大量のx86サーバーが利用されるようになり、OSやアプリケーションの配備の自動化、簡素化を行う管理ソフトウェアが注目を浴びています。OSの自動配備を行う管理ソフトウェアとしては、Red Hat社が提供するRHN SatelliteやNovell社のZENworksなどが存在しますが、HPでは2000年からから科学技術計算システム等で利用されているInsight CMU(インサイト・シー・エム・ユー)と呼ばれるLinuxに特化した管理ソフトウェアを提供しており、Ubuntu Serverの自動配備が可能となっています。
Insight CMU、RHN Satellite、ZENworksが稼働する管理サーバーはUbuntu ServerではないLinuxで稼働します。Insight CMUでは、先述のSTKやpreseedによる自動インストールの仕組みを組み合わせることが可能となっています。また、GUIから管理対象サーバーのファームウェアの管理、Ubuntu Serverの配備、OSのクローニング、複数ノードへの一斉コマンド発行や差分表示等が可能です。
Canonical社のLandscapeは、Ubuntu Serverに特化した管理ソフトウェアで、パッケージ管理や負荷状況の監視などを一元的に行うことができます。Landscapeは、Ubuntu Server上で稼働しますので、管理サーバーと管理対象サーバーをUbuntu Serverで統一することができます。また、VPNを使わずにインターネット回線を経由して企業内のUbuntu ServerのOS管理を行うことも可能であり、同一LAN環境には存在しないUbuntu Serverのシステムの再起動やシャットダウン、パッチの適用、スクリプトの実行等が可能です。
企業内LANに存在するUbuntu Serverのためのハードウェアの自動設定やOSの自動インストール等にInsight CMUを使用し、インターネット回線を経由して、遠隔のUbuntu ServerをLandscapeで管理するといった使い分けも考えられます。
サーバーOSにおける自動インストールの仕組みの比較
スケールアウト型システムで利用される自動インストールの仕組みは、OSによって大きく異なるため、OSの種類が増えると、バージョン毎による設定ファイルのメンテナンスも増えるため、運用が複雑化します。自動インストールの仕組みは、IT管理の入門者にはハードルが高く感じられるかもしれませんが、スケールアウト型システムを効率よく運用していくためには、各OSで実装されている自動化の仕組みや設定ファイルの特徴等の基本を知っておくことが重要です。
RHELやCentOSにおける自動インストールは、Kickstartと呼ばれる仕組みがあり、初心者でもわかりやすい設定ファイルが特徴的です。一方、Ubuntu ServerでもKickstartを使用することができますが、詳細な設定を行う場合は、preseedによる記述が基本となります。以下では、Ubuntu Serverとその他のサーバーOSについて、自動インストールの仕組みの特徴を簡単に表にまとめておきます。
最後に
Ubuntu Server実践編の第1回・第2回では、Ubuntu Serverをスケールアウト基盤に配備するための基本的な手順と技術要素を簡単に説明しました。次回は、Ubuntu Serverのベアメタル配備を行うMaaS(Metal-as-a-Service)とOSSのオーケストレーションを行うJujuついてご紹介します。
Ubuntu Serverの自動インストールサーバー構築に使用する「preseed」
『スケールアウト型OSSクラウド基盤に最適なUbuntu Serverをひも解く』 第6回のサンプルファイルです。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- [実践編] Ubuntu Serverをスケールアウト型サーバーに配備する(前編)
- Ansibleの機能を拡張するAnsible Tower
- [入門編] Ubuntu Serverとその他のサーバーOSを比較する
- ownCloud導入はじめの一歩(仮想マシンイメージとCentOS 7のインストール手順)
- [実践編] MaaSとJujuによるOSS配備、Ubuntu Serverの運用・管理(前編)
- Windows Azure上にLinuxインスタンスを立ち上げる(クエスト5)
- XML-RPCを利用したWeb API
- Windows Azure仮想マシンでLinuxサーバーを構築しよう
- [入門編] Ubuntu Serverの基礎(後編)
- Ansible:さらにPlaybookをきわめる