2016年03月30日

OSインストールの自動化

自己紹介
Furyu Tech Blogを読んで下さっているみなさん、初めまして。 コンテンツ・メディア第1事業部のインフラチームに所属していると藤本佳世と申します。今回が初投稿となりますが、これからみなさんに「フリューのインフラ技術」をご紹介できればと思っています。 どうぞよろしくお願い致します。
インフラの仕事
インフラの仕事は、サーバの選定から始まり、OS・ミドルウェアのインストールや監視など様々な仕事があります。 開発メンバーがスムーズに仕事をこなせるよう、日々「縁の下の力持ち」として頑張っています。 今回は、インフラ業務の中でも、「OSインストールの自動化」について、お話したいと思います。
PXEブート
みなさん、「PXEブート」はご存知ですか?
PXE(Preboot eXecution Environment)とは、コンピュータのブート環境の一つで、ネットワークブートを利用することにより、OSイメージを使用して起動できます。
今までフリューでは、ISOイメージ(DVD)を用意し、手動でインストールを行っていました。これは、とても時間がかかる作業です。しかし、PXEブートを導入する事により、「OSインストールの自動化」を実現しました。
簡単にPXEブートの流れを説明すると、
- 新規サーバを購入
- PXEサーバと新規サーバをネットワークケーブルで接続
- PXEブート起動
- OSが自動でインストールされる
PXEサーバについて
PXEブートを可能にするため、PXEサーバを構築をします。構築には、Cobblerを使用します。 Cobblerとは、Python製のツールで、ネットワークインストールを簡潔に行う仕組みを備えた、PXEブート向けの統合環境です。
※詳しくはhttp://cobbler.github.io/
フリューのPXEサーバ
Vagrant上に、PXEサーバ(CentOS6.6,64bit)を構築しました。
- VirtualBox-4.3
- vagrant_1.7.2
※基本的なVagrantの使い方について、FuryuTechBlogで紹介しているので、こちらも是非読んでください。
http://tech.furyu.jp/blog/?p=2317
今回は少し応用で、vagrantを動かしている物理サーバの未使用インターフェース(eth3)とvagrantのインターフェースをbridgeで繋げています。
※Vagrantfileの記述
1 2 |
<code>config.vm.network :public_network, ip: "10.0.2.15", netmask: "255.255.255.0", bridge: "eth3" </code> |
イメージとしては、新規購入したサーバと物理サーバ(eth3)をネットワークケーブルで接続し、vagrant上のPXEブートを起動させています。
構築方法
事前準備1
1 2 3 |
<code>vim /etc/selinux/config SELINUX=disabled </code> |
事前準備2
1 2 3 |
<code>/etc/init.d/iptables stop chkconfig iptables off </code> |
事前準備3
1 2 3 |
<code>yum groupinstall "Development Tools" yum groupinstall "Base" </code> |
※開発に最低限必要なパッケージをまとめてインストールできます。
1.Cobblerインストール
※ここでは、後程使うパッケージも一緒にインストールしておきます。
1 2 |
<code>yum install cobbler pykickstart dhcp cman -y </code> |
Cobblerのバージョン確認
1 2 3 |
<code>cobbler --version Cobbler 2.6.3 </code> |
※少し前に構築したので、現在の最新バージョンは2.6.11です。(2016年3月時点)
2.rsyncを有効にします
1 2 3 |
<code>vim /etc/xinetd.d/rsync disable = no </code> |
3.tftpを有効にします
1 2 3 |
<code>vim /etc/xinetd.d/tftp disable = no </code> |
4.dhcp設定
※ここで記述している10.0.2.XXのアドレスは、物理サーバの未使用インターフェースに割り当てられる、PXE用dhcpアドレスを指定しています。
1 2 3 4 5 6 7 8 9 10 11 |
<code>vim /etc/cobbler/dhcp.template subnet 10.0.2.0 netmask 255.255.255.0 { option routers 10.0.2.3; option domain-name-servers 10.0.2.3; option subnet-mask 255.255.255.0; range dynamic-bootp 10.0.2.101 10.0.2.254; range dynamic-bootp 10.0.2.101 10.0.2.254; default-lease-time 21600; max-lease-time 43200; next-server $next_server; </code> |
5.Cobblerパスワードを設定します
1 2 3 |
<code>openssl passwd -1 -salt "cobbler" "パスワードを指定" $1$cobblerxxxxxxxxxxxxxxxxxxxx </code> |
6.Cobbler設定
1 2 3 4 5 6 7 |
<code>vim /etc/cobbler/settings server: IPアドレス manage_dhcp: 1 next_server: ゲートウェイアドレス default_password_crypted: "$1$cobblerxxxxxxxxxxxxxxxxxxxx" ←手順5で取得したもの pxe_just_once: 1 </code> |
7.Cobblerとxinetdを起動します
1 2 3 4 5 |
<code>/etc/init.d/cobblerd start /etc/init.d/xinetd start cobbler get-loaders cobbler check </code> |
下記のようなメッセージが表示されることがあります。その場合は、メッセージ内容に従って、修正をして下さい。
※1のSELinuxに関して、事前準備でSELINUX=disabledにしているので、ここは無視します。
1 2 3 4 5 6 7 8 9 |
<code>1 : you need to set some SELinux content rules to ensure cobbler serves content correctly in your SELinux environment, run the following: /usr/sbin/semanage fcontext -a -t public_content_t "/tftpboot/.*" && /usr/sbin/semanage fcontext -a -t public_content_t "/var/www/cobbler"/images/.* 2 : reposync is not installed, need for cobbler reposync, install/upgrade yum-utils? 3 : yumdownloader is not installed, needed for cobbler repo add with --rpm-list parameter, install/upgrade yum-utils? </code> |
8.ISOイメージのインポート(少し時間がかかります)
※ISOイメージ取得先https://www.centos.org/download/
1 2 |
<code>cobbler import --name={任意のOS名を指定} --path={OSイメージ場所を指定} </code> |
cobblerの設定を追加したり変更したりした後は、必ずsyncする必要があります。
インポートした後も、設定をシンクします。 エラーがでなければ、TASK COMPLETEと最後に表示されます。
1 2 3 4 5 6 7 8 9 |
<code>cobbler sync : : running shell triggers from /var/lib/cobbler/triggers/sync/post/* running python triggers from /var/lib/cobbler/triggers/change/* running python trigger cobbler.modules.scm_track running shell triggers from /var/lib/cobbler/triggers/change/* *** TASK COMPLETE *** </code> |
設定を確認する場合は、下記コマンドを実行。
1 2 |
<code>cobbler report </code> |
これでOSイメージは用意はできました。 次に、下記のようなOS詳細設定はどのようにするのでしょうか?
- 言語設定
- 時間
- rootパスワード
- パーティション設定
それは、「Kickstart」を使います。
To Be Continued
次回は、「Kickstart」設定方法について、お話ししたいと思います。