StupidDog's blog

IT関連の手近な所で、疑問に思った事を調べた記録

「windwos7にvagrantでUbuntu13.10 server+Puppet+Chefの実験環境を構築する」|ただいまRubyの修行中

はじめに

普段はUbuntu12.10 DesktopをホストOSとして、Ubuntu13.10 Serverの仮想環境を作成しています。
今回は、Windowsを使用している人をサポートするためにWindows7をホストOSとして同じ環境を作成しました。
VagrantWindowsをホストOSとしても使用できる事は知識として知っていますが、経験しなければ知りえないことがあります。
以下に2014年4月4日時点で各プロダクトの最新のリリース版を使用して構築した方法をまとめます。

2014.4.5 追記
tbpgrさんより、Chef-SoloインストールのVagrant Pluginの情報を貰ったのでChefインストール部分の再構築中です。Vagrant Pluginを使用しなかった場合に何が必要かを残しておくために変更はしないで残します。

「windwos7にvagrantでUbuntu13.10 server+Puppet+Chefの実験環境を構築する(Ver.2)」|ただいまRubyの修行中 - StupidDog's blog

概要

  1. VirtualBoxのインストール
  2. Vagrantのインストール
  3. Gitのインストール(sshコマンドを利用したい為)
  4. 仮想環境の構築(vagrant up)とssh接続テスト(vagrant ssh)
  5. 仮想環境へChefのインストール

1.VirtualBoxのインストール

VirtualBoxインストーラーをDownloads – Oracle VM VirtualBoxからダウンロードします。
(ファイル「VirtualBox-4.3.10-93012-Win.exe」)

インストール自体はインストーラーに従ってクリックしていくだけで終わります。
途中にセキュリティ上の確認メッセージがでますが以下のものなら「インストール」とします。

オプションの設定(初期状態から変更なし)


インストールの確認メッセージ




2.Vagrantのインストール

VagrantインストーラーをDownload Vagrant - Vagrantからダウンロードします。
(ファイル「vagrant_1.5.2.msi」)

これもインストーラーに従ってクリックしていくだけで終わります。
インストール先が初期状態で「C:\HashiCorp\Vagrant」になっています。
変更する場合は管理者権限が必要な場所にならないように注意してください。

3.Gitのインストール

これはソース管理を行うから普段から入れてます。コマンドラインで使用できるssh.exeが入っているので環境構築後にssh接続確認に使用します。
GitのインストーラーをGitからダウンロードします。
(ファイル「Git-1.9.0-preview20140217.exe」※previewだけど良しとします)

サーチパスの追加

インストーラーによりgitコマンドはパスが通った状態になっています。
追加でsshコマンドを使用するためのパスを通します。

[windows]+[R]で「ファイル名を指定して実行」ダイアログを開き「SystemPropertiesAdvanced」と入力し「システムのプロパティ」ダイアログを開きます。
f:id:StupidDog:20140404014557j:plain
f:id:StupidDog:20140404015228j:plain

システム環境変数の変数Pathの末尾が「C:\Program Files (x86)\Git\cmd」になっていると思います。
この後に「;C:\Program Files (x86)\Git\bin」を追加します。(区切りの;を忘れずに)

4.仮想環境の構築とssh接続テスト

始めはUbuntu12.04 Desktopを構築しようしました。しかし、公開されているBoxファイルのイメージと今回使用しているVirtualBoxのバージョンが離れすぎたためか起動に失敗してしまうので断念しました。
用途としてはGUIが不要なので、いつも使っているPuppet Vagrant Boxesで公開されてるBoxファイルを使用します。
f:id:StupidDog:20140404024603p:plain

ここからはコマンドライン操作となります。
[windows]+[R]で「ファイル名を指定して実行」ダイアログを開き「cmd」と入力して「コマンドプロンプト」を開きます。
※以降の\は¥に読み替えてください。

仮想環境用のディレクトリを作成する

管理用ディレクトリを作成して、そこをカレントディレクトリとします。
ここでは「F:」ドライブ上に「F:\vm\z001」として作成しました。

C:\>f:
F:\>mkdir vm\z001
F:\>cd vm\z001
F:\vm\z001>
Vagrantfileを作成する

管理用ディレクトリに以下の内容で「vagrantfile」ファイルを作成します。
ファイル名は大小文字の区別はありませんが、拡張子が付かないように注意してください。
(※Windows上ではvagrantfileもVagrantfileも同じとして扱われます)

VAGRANT_API_VERSION = "2"

Vagrant.configure(VAGRANT_API_VERSION) do |config|
  config.vm.box = "ubuntu1310"
  config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-1310-i386-virtualbox-puppet.box"
end
仮想環境を構築する
F:\vm\z001>type vagrantfile

VAGRANT_API_VERSION = "2"

Vagrant.configure(VAGRANT_API_VERSION) do |config|
  config.vm.box = "ubuntu1310"
  config.vm.box_url = "http://puppet-vagrant-boxes.puppetlabs.com/ubuntu-1310-i386-virtualbox-puppet.box"
end

F:\vm\z001>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu1310'...
==> default: Matching MAC address for NAT networking...
==> default: Setting the name of the VM: z001_default_1396545723721_56124
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Connection timeout. Retrying...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => F:/vm/z001
構築した環境へsshで接続する

vagrant ssh」コマンドを実行した後は、構築した仮想マシン上での操作となります。
ssh接続に失敗する場合は、sshコマンドへのサーチパスが間違っていないなか確認してください。

F:\vm\z001>vagrant ssh
Welcome to Ubuntu 13.10 (GNU/Linux 3.11.0-12-generic i686)

 * Documentation:  https://help.ubuntu.com/
Last login: Thu Apr  3 10:26:19 2014 from 10.0.2.2

vagrant@ubuntu1310-i386:~$ ruby -v
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
vagrant@ubuntu1310-i386:~$ perl -v

This is perl 5, version 14, subversion 2 (v5.14.2) built for i686-linux-gnu-thread-multi-64int
(with 80 registered patches, see perl -V for more detail)

Copyright 1987-2011, Larry Wall

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

vagrant@ubuntu1310-i386:~$ python -V
Python 2.7.5+

5.仮想環境へChefのインストール

Puppetが入っている環境ですが、同じ用途で使用されるChefというものがあります。
現場によりどちらかが利用されていると思います。
どちらも実際に動かして試せる環境があると便利なので、Chefも入れてみます。
インストール自体は簡単で以下のコマンドを実行するだけです。

Install Chef 11.x on a Workstation — Chef Single-page Topics
Run the omnibus installerを参照しました。

vagrant@ubuntu1310-i386:~$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 14401  100 14401    0     0   2152      0  0:00:06  0:00:06 --:--:--  3547
Downloading Chef  for ubuntu...
downloading https://www.opscode.com/chef/metadata?v=&prerelease=false&p=ubuntu&pv=13.10&m=i686
  to file /tmp/install.sh.1286/metadata.txt
trying wget...
url     https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/13.04/i686/chef_11.10.4-1.ubuntu.13.04_i386.deb
md5     86dc72fa5b37eee71bf239a4a39df14b
sha256  144d7d05aadcc0cdd084c9d4b46f08ae30485d6cc267c902ff5d31230a5b86a3
downloaded metadata file looks valid...
downloading https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/13.04/i686/chef_11.10.4-1.ubuntu.13.04_i386.deb
  to file /tmp/install.sh.1286/chef_11.10.4-1.ubuntu.13.04_i386.deb
trying wget...
Comparing checksum with sha256sum...
Installing Chef
installing with dpkg...
Selecting previously unselected package chef.
(Reading database ... 62328 files and directories currently installed.)
Unpacking chef (from .../chef_11.10.4-1.ubuntu.13.04_i386.deb) ...
Setting up chef (11.10.4-1.ubuntu.13.04) ...
Thank you for installing Chef!

vagrant@ubuntu1310-i386:~$ chef-solo -v
Chef: 11.10.4

chef-soloのインストールが出来ました。
しかし、これだけでは足りませんので機能の追加をします。

knife-soloのインストール

このインストールにより、knifeにサブコマンドとしてsoloが追加されます。
Chefではディレクトリの構成が決められています。
その雛形の生成などの手助けをしてくれるコマンドです。
(※ホントはもっと色々だけど習得が進むまでこの認識で良しとします)

インストール方法として以下の説明が多いのですが、サラの環境からだとエラーとなる人が多いと思います。

$ gem install knife-solo --no-ri --no-rdoc

パッケージが足らないのと、ログ出力先に管理者権限が必要となります。
そのため以下のような順序でコマンドを実行することになります。

$ sudo apt-get install git
$ sudo apt-get install ruby1.9.1-dev
$ sudo apt-get install make
$ sudo gem install knife-solo --no-ri --no-rdoc

以上で、「knife solo ~」が使用できるようになりました。
暫く使用してから、実際にchefを使用した環境設定の足がかりをまとめたい…
(figletインストールするまでに迷走した物語などを)

まとめ

Ubuntu12.10とWindows7の二種類のホストOS上に、Vagrantを使い「同じVagrantfile」から「同じBoxファイル」をベースとして同じ仮想環境を構築できることが確認できました。
当然、この環境に変更を加えてからBoxファイルにまとめUbuntu12.10をホストOSとする環境へ復元できます。
VirtualBoxのバージョンが上がっても、有志で公開されているBoxファイルのバージョンは更新されるとは限らないのでVagrantで何でも解決!とは行きませんが、現場でBoxを作成して管理すれば、増員時に開発環境の構築ミスで手戻りなんてことは減らせるかと思います。
PuppetとChefの実験環境も揃ったのでプロビジョニングへ・・・

あれRubyどこ行ったノД≦)ノ