BLOGSpeee開発陣による技術情報発信ブログです。開発環境Tweet永遠の中二病です、ごきげんよう。学生時代の趣味はWindowsの再インストールでした。環境構築って面倒ですよね。単純作業の割には微妙な手順ミスで後からハマったりして、もっと自動化、効率化できないかなと昔から思っていました。Windowsにも自動インストールの仕組みは以前からありましたが、そのための設定がまた大変だったものです。UNIX界隈で仮想環境の構築と言われてどんな手順を思い浮かべるでしょうか?仮想マシンを立てるOSのイメージをダウンロードOSインストールミドルウェアインストール設定諸々ざっと挙げても沢山ありますね。これを手作業でやっていては大変です。した作業を自動化する仕組みは色々あって、KickstartのようなOSインストールの自動化であったり、Puppetのようなサーバの集中設定管理のようなものは以前から提供されていました。最近だと、昨年はVagrantやChefのようなツールが大いに話題になりました。これらは仮想マシンの操作やプロビジョニング(ソフトウェアの整備やシステム環境設定など、稼働するための準備全般)という部分をプログラマブルに行えるようにするためのものです。上記の手順だと4〜5に相当する部分+αですね。OK!はい、あとは1〜3まで自動化できれば、ワンストップで仮想環境が作れそうです。ところが、1〜3に相当する仮想マシンイメージの作成に関することは、Vagrant/Chefと比較するとほとんど話題に上がっていません。いうのも、予め用意されたイメージファイルが各所で配布されているので、大抵はそれを利用しているからなのですね。個人用途などではそれでも十分かと思いますが、業務利用となると素性の明らかな...つまり意図された手順に沿ってインストールされた仮想マシンを使いたいもの。そこで今回は、Vagrantから利用することを想定した仮想マシンイメージを実際に作る事例を紹介しようと思います。6.5を想定しています。他のOSや仮想化ソフトウェアを利用される場合は一部を読み替えていただければと思います。前置きが長くなりましたが、今回の環境構築のゴールは仮想マシンにCentOSをインストールして、Vagrantから利用できるようになることです。これを踏まえ、想定環境は次の通りとしました。各ツールのバージョンは執筆当時の最新版です。0.5.1また今回仮想マシンを作成するにあたっては、Packerというツールを使用します。EC2やDigitalOceanのようなクラウドサービスについても一貫性のあるインタフェースで作成できるため、汎用性を考慮してこちらを選びました。必要なソフトウェアのインストールPackerは公式サイトのダウンロードページに各プラットフォーム向けのパッケージがありますので、こちらをダウンロード、インストールします。homebrewのようにパッケージ管理システム上に存在する場合もありますので、そちらからインストールしても構わないでしょう。VirtualBoxとVagrantもインストールが必要になります。これらは公式サイトからパッケージでダウンロード、インストールします。Vagrantはパッケージ管理システム上にも存在しますが、執筆時点ではバージョンが古いのでパッケージからインストールします。設定ファイルの作成Packerを設定するにあたって、今回は次の3つのファイルを作成します。Packer自体の設定ファイルOSインストール後のプロビジョニング用シェルスクリプトOS自動インストール用の設定ファイルVagrantの設定ファイルPacker自体の設定ファイルまずPacker自体の設定ファイルですが、これはJSON形式で記述します。作業ディレクトリは任意ですが、その配下にBoxが作成されることを考慮しておくと良いでしょう。ファイル名も任意ですが、ここでは便宜上「packer.json」とします。]}この中で説明が必要な項目について触れていきます。buildersのtypeは過去のバージョンでは「virtualbox」でしたが、最新版では「virtualbox-iso」となります。buildersのssh_usernameとssh_passwordは仮想マシンにログインする時に使います。buildersのboot_waitは、ブート時に待つ時間で、環境によるかもしれませんが短すぎるとコマンドの入力に失敗します。buildersのboot_commandは、ブート時にPakerがOSインストーラを操作するためのコマンド群です。provisionersは、OSインストール後のプロビジョニングについて記述します。今回はシェルスクリプトとして「provisioners.sh」を呼び出すようにしていますが、ChefやPuppetも使おうと思えば使えます。post-processorsは、インストール終了後の出力情報です。ここではVagrant用に「centos-6.4-x86_64.box」というファイル名で保存します。OSインストール後のプロビジョニング用シェルスクリプト次に、provisionersの項目で外に出したプロビジョニング用スクリプトです。こちらも作業ディレクトリディレクトリにprovisionersで指定したファイル(今回はprovisioners.sh)を設置します。setupここで行っているのは、主にVirtualBoxのGuestAdditionsをインストールするための設定と、Vagrantを利用してSSHログインするための設定です。ただのシェルスクリプトですので、読めば理解いただけるかと思います。yumでインストールしているパッケージはGuestAdditionsに必要な最低限のものとなっています。OS自動インストール用の設定ファイル次に、OS自動インストール用の設定ファイルを用意します。Linuxの場合はKickstartという自動インストールの仕組みがありますので、その設定ファイルを作成します。こちらは作業ディレクトリに「ks.kfg」として設置します。/etc/sudoers.d/vagrant%endこちらについては、Vagrantを利用して「vagrant/vagrant」でログインできるように、またパスワード無しでsudoできるようにしています。rootのパスワードもひとまず「vagrant」としていますので、適宜変更してください。Vagrantの設定ファイル最後にVagrantの設定ファイルですが、こちらはvagrantコマンドでスケルトンを生成できますので、利用してみましょう。作業ディレクトリ上で次のコマンドを発行してください。centos-6.5-x86_64これで作業ディレクトリ上に「Vagrantfile」というファイルが生成されますので、次の箇所だけ編集します。:public_networkなお、この設定ではネットワークインタフェースが複数ある場合に選択を求められることになりますので、環境に応じて次のように指定しておくと自動選択されます。(AirPort)"イメージ作成さて、これでイメージ作成の準備は整いました。作業ディレクトリ上で次のコマンドを発行してください。packer.json設定に問題が無ければ、あとは放置しておくだけで仮想マシンイメージの作成が完了します。upと打ち込んでみましょう。ssh」で接続するなり、壊すなり、お好きなようにご利用ください。下記のようなエラーが発生する場合があるようです。setupとすることで再度正常にGuestAdditionsがインストールされます。あとがき最後が実に呆気なかったのですが、それだけ自動化の威力が大きいということでご勘弁を...。ある環境構築をゼロから行えるようになりました。この仕組みを使えば、多人数の業務プロジェクトなどでも標準化された開発環境を容易に実現できるようになります。Packerを利用すれば、クラウドサーバの構築についても同じインタフェースが利用できますので、本番環境の構築にも手を広げられる可能性が見えてくるのではないでしょうか。今回紹介した内容はPackerの中でもほんの一部ですので、ぜひ思い思いの使い方をしていただければと思います。インフラ環境もいよいよ本格的に、職人技から自動化の時代になってきた感がありますね。楽をしても良い所は、どんどん楽をしたいものです。新卒エンジニアの中嶋です。buildSpeeeエンジニアの義田(@yoppiblog)です。俺のYeomanはまちがっている。参加してきました月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。