Vagrant provisionでchefを実行する(Windows8.1)

No Comments

昔、下記のような投稿をしたけれど、Vagrantとchefを合わせて実行するなら、わざわざknife-soloを使う必要はない。

Windows 8 に Vagrant と chef-solo をインストールしてみた

Chefの設定をVagrantfileに書いておいて、

でchefを実行するのが非常に簡単。
別途sshやrsyncを用意する必要もない。

環境はWindows8.1。

Vagrant、VirtualBox、Ruby

まず、下記の通りにVagrant、VirtualBox、Rubyをインストールしておく。
ChocolateyでWindowsにVirtualBox, Vagrant, Rubyをインストールしてみた

vagrant-omnibusプラグインのインストール

BoxにChefがインストールされていない場合に、インストールしてくれるプラグイン。
knife-soloのprepareに相当するものか。

下記のコマンドで簡単に入る。

Berkshelfのインストール(任意)

Opscodeのレシピなど、Chefサーバーから簡単にCookbookをとってくるためのツール。

このBerkshelf、Windowsだと依存関係の問題があり、2014年6月現在、コマンド一発ではインストールできない。

※vagrant-berkshelfというプラグインもあるけれど、Berkshelf 4以降は開発が終了する様子。

Berkの実行(任意)

ChefのルートディレクトリにBerksfileという名前で、下記のように記述する。

そのあと、下記のコマンドを実行すると、自動的にCookbookをcookbooks内に取得してくれる。

Vagrantfileへの記載

omnibusプラグインを使う場合config.omnibus.chef_versionの行を足す必要がある。
そうすると、vagrant up時にVMにchefをインストールする。

Vagrantfileの例はこんな感じ。

chef.add_recipeのところは下記のようにしても動いた。
(Vagrantのドキュメントではchef.add_recipeを使っている。)

Chefの実行

この状態でvagrant upを実施し、下記のコマンドでchefを走らせられる。

Windowsでknife-soloを使おうとすると、sshとかrsyncとか面倒な問題があるので、こちらのほうがよさげ。


ChocolateyでWindowsにVirtualBox, Vagrant, Rubyをインストールしてみた

1 Comment

Chocolateyをインストール

ChocolateyはWindows用のパッケージ管理ツール。
aptとかyumみたいなもの。

環境はWindows8.1。

下記を見てインストールする。
https://chocolatey.org/

2014年6月現在だと、コマンドプロンプトに下記を入力すればインストールできる。

ChocolateyでVirtualBoxとVagrantをインストール

まず、下記のコマンドでヘルプを見てみる。

どうやらlistで検索できるようだ。

結果は下記。

うん、最新!
それにしても関連するパッケージまで表示されるとは。
インストールはchocolatey installコマンド。
このコマンドはchocolatey installはcinstと省略できる。

ちなみにバージョン指定は下記のようにやる。

インストール中に”ユーザーアカウント制御”のダイアログが出るのだけれど、-yオプションとかはないのかな。
制御機能自体は無効化したくない。。。

ChocolateyでRubyをインストール

いつもRubyInstallerのサイトでダウンロード、インストールしてDevKitを入れていたけれど、これも自動化できないかな。

おお、ある。素晴らしい。

下記、コマンドプロンプトだとエラーが出たので、PowerShellを使って実行した。(するとうまくいく)
Chocolateyはコマンドプロンプトではなく、PowerShellを使って実行したほうがよさげ。

ただ、困ったことに勝手にCドライブにインストールされた。
インストール先のドライブを選べないのかな。
ヘルプを見たところ、特にそんな記載はなかった。。。
環境変数ChocolateyBinRootというのが勝手に設定されているのだけれどこれかな?(未調査)

ま、すごく便利だからいいか。


手動で Base Box 作成

No Comments

VagrantのBase Boxを作成してみた。

環境はWindows8 Pro 64bit。(だけど、あまり関係ないかも)

一般的にはBaseBoxはWebのテンプレートから取ってきて使えば良いので、一般的にはやる必要がないとのこと。
カスタムBaseBoxを作る必要がある時のみ行う。
作成手順は下記に載っており、この通りに進める。

なお、配布用に省スペース化のような最適化する項目は省いている。

http://docs.vagrantup.com/v1/docs/base_boxes.html

※veeweeを使えば、今回のBase Box作成の作業は自動化できるみたい。

VMを作成する

ここではUbuntu1210 Desktopの32bit版を用いる。
まず、vagrant-ubuntu-1210_32_Desktopという名前を付けてVMを作る。
VagrantのBoxはvagrant-[OS名]というルールがある。

VMの情報としては配布する場合、下記を使うことが推奨されている。

  • Hostname: vagrant-[os-name], e.g. vagrant-debian-lenny
  • Domain: vagrantup.com
  • Root Password: vagrant
  • Main account login: vagrant
  • Main account password: vagrant

HDDはVDI形式で作成。そして、可変サイズで40GB割り当てた。
NICはNATとする必要がある。
ディスクファイルをCD/DVDドライブに挿入してVMを起動する。
するとインストーラが起動して、PC名などを入力する画面になる。
ここで、私は下記の情報を入力した。

  • Your name: vagrant
    ここは何でも良い?
  • Your computer’s name: vagrant
    vagrant-[OS名]のほうがよいかも。
  • Pick a username: vagrant
  • Choose a password: vagrant
  • Confirm your password: vagrant
  • Log in automaticallyにチェックを入れた.
    これはチェックを入れず、ログイン時にパスワードを入力するようにしてもいいはず。

ポートフォワーディングの設定

VirtualBoxの[設定]メニューの[ネットワーク]の項目でルールを作成する

  • ホスト
    • IP
      空白 → 自動的に127.0.0.1になる
    • Port
      2222
  • VM
    • IP
      空白 → 自動的に127.0.0.1になる
    • Port
      22

この後、VMを再起動する。

権限のセットアップ

ここでは、sudo実行時にパスワードを入力しなくてもコマンドを実行できるようにする。

  1. VMにログインする。
  2. ターミナルを開いて下記を入力し、adminグループを追加する。
    $ sudo groupadd admin
  3. 下記を入力し、vagrantユーザーの所属グループをadminに変更する。
    $ sudo usermod -g admin vagrant
  4. 下記を実行する。
    $ sudo visudo
  5. %admin ALL=(ALL) ALLになっている行の真下に下記を追加する。
    %admin ALL=NOPASSWD: ALL
  6. Defaultsに下記を追加。
    Defaults env_keep = “SSH_AUTH_SOCK”
  7. その後、Ctrl-oを入力し、/etc/sudoersというファイル名で保存。
  8. $ sudo visudoを再実行し,%sudo ALL=(ALL:ALL) ALLをコメントする。
    # %sudo ALL=(ALL:ALL) ALL
  9. 下記を実行し、反映させる。
    $ sudo /etc/init.d/sudo restart

以上が終了すると、sudo時にパスワードを聞かれなくなる。

VirtualBox Guest Additionsをインストールする

まず,システムに必要なパッケージのインストール。

VirtualBoxの「デバイス」→「Guest Additions のインストール …」を選択。

すると、CDにマウントされ、起動するので、Runボタンを押すとVirtualBox Guest Additionsがインストールされる。

初期ソフトウェアのセットアップ

それぞれ、下記のコマンドでインストールする。

  • Ruby – Use the dev package so mkmf is present for Chef to compile
    1. $ sudo apt-get install ruby
  • RubyGems – To install the Chef gem
    1. $ sudo apt-get install rubygems
  • Puppet – To install Puppet (also ensure that a ‘puppet’ group is present!)
    1. $ sudo apt-get install puppet
  • Chef gem – For provisioning support (gem install chef)
    1. $ sudo apt-get install ruby1.9.1-dev(rubyのバージョンを合わせること)
    2. $ sudo gem install chef
  • SSH
    1. $ sudo apt-get install ssh
    2. $ ssh-keygen -t rsaを実行してsshサーバーの準備をしておく。(すべてデフォルト値でOK)

Public Key(公開鍵)を用いたssh認証の設定

Boxを一般公開用にする場合、vagrantで共用の公開鍵をauthorized_keysに登録しておく。
そのために、下記の公開鍵と秘密鍵をダウンロードして、VMに送る。

https://github.com/mitchellh/vagrant/tree/master/keys/

パーミッションは600として、~/.ssh以下に保存。

  • authorized_keys(公開鍵をコピー)
  • vagrant→id_rsa(ファイル名変更)
  • vagrant.pub→id_rsa.pub(ファイル名変更)

Base Boxのエクスポート

下記のコマンドでVMをBase Boxとしてエクスポートする。

しばらく待った後、package.boxというファイルが出来る。
これがBase Boxである。

Base BoxをVagrantで使う

下記のコマンドでaddする。

後は、initしてupすれば立ち上がる。

knife-soloでchef-soloの実行を確認できた。
Base BoxはWebサーバー上に置いておけば便利そう。


Windows7でChromiumをビルドする

No Comments

Chromiumをビルドしてみた。
リビジョン番号は139214。
(ChromiumはGoogle ChromeのもとになっているオープンソースのWebブラウザ)

環境はWindows7 64bitで,Visual Studio 2010 Expressを用いる。
また,すでにgitがインストールされているとする。

基本的に下記のページに指示に従えば良かった。

Build Instructions (Windows)

ビルド前の準備

VS2010Expressの場合は下記をの2つを実施する。

  • Prerequisite software
    注意点は下記の通り。
    • Windows 7.1 SDK
      こいつをインストールした後にVS2010C++SP1をインストールするとコンパイラを上書きされるというバグあり。(手順の中に修正プログラムのインストールも含まれているので問題はない)
    • KB articles: KB957912, KB958842, KB960075, KB967631, KB971092, and KB2519277
      KB971092はVS2008用のためインストール出来ず。
    • Cygwin
      インストールしなかった。以下,コマンドはすべてコマンドプロンプトから実行した。
  • Setting up the environment for Visual Studio 2010
    途中で,”gclient runhooks”を実行する箇所があるけれど,depot_toolsが無いと実行できないので,取得後実行する。
    後は手順通りにやれば問題なく実施できる。

depot_toolsの取得

depot_toolsをインストールするディレクトリにて下記のコマンドを実行する。

次にWindowsの環境変数PATHにこのdepot_toolsまでのパスを通す。

ソースの取得

ソースを取得するディレクトリにて,下記のコマンドを実行する。

作成されたリポジトリの内容は下記で確認できる。

次に,ソースを実際に取得する

ソースが取得できたら次はビルド。

ビルド

取得したソースのsrc/chrome/chrome.slnをダブルクリックで実行する。
そしてこのソリューションをビルドする。
(動かすだけならchromeプロジェクトをビルドすればよいみたい。)

ビルドが完了するとsrc/build/Debug(またはRelease)にchromium.exeができるので,これを実行すればChromiumが起動する。

http://www1205uf.sakura.ne.jp/wp/world/wp-content/uploads/2012/05/chromium.png

ビルドの失敗の修正

手順通りにやってもいくつかビルドエラーが起こったので,その時に解決した方法をメモ。

ファイルのエンコードの間違い

下記のようなエラーが起こった。

エラー箇所は下記のようになっており,C++コンパイラがコードをUnicodeとして認識していないのが原因らしい。

そこで,解決方法はこのファイルを選択し,[ファイル]-[保存オプションの詳細設定]を選択する。

http://www1205uf.sakura.ne.jp/wp/world/wp-content/uploads/2012/05/change_encoding.png

次に,開くダイアログにてエンコードに”Unicode(UTF-8 シグネチャ付き)-コードページ65001″を選択し保存。

http://www1205uf.sakura.ne.jp/wp/world/wp-content/uploads/2012/05/change_encoding2.png

これで解決した。

ANSIコードページに表示できないUnicodeが含まれている

次に下記のようなエラーが出た。
警告をエラーとして扱ったため,オブジェクトファイルが生成されなかったとのこと。

ANSI コード ページに表示できない,Unicodeの文字を使っているのが原因とのこと。
とりあえず警告をエラーとして扱うのを無効化して回避。。。
問題が出ていたunit_testプロジェクトにて下記の赤枠のように設定する。
構成を”すべての構成”にしておかないと,Debug,Releaseの両方には適用されないので注意。

http://www1205uf.sakura.ne.jp/wp/world/wp-content/uploads/2012/05/warning_error_off.png

これで解決。

インストーラーの作成

chrome.slnをビルドしただけでは,インストーラー(mini_installer.exe)は作成されなかった。

そこで,src\chrome\installerの中のmini_installer.slnをダブルクリックで起動する。
ソリューションをビルドすればDebug(またはRelease)フォルダにmini_installer.exeが生成されているはず。

これをダブルクリックで実行すればPCにインストールされる。

Chromiumのリビジョン番号を知る

作成したインストーラーの名前にリビジョン番号を追加しておきたくなった。
これからソースを更新していってもリビジョン番号がわかるようにしたい。

そのためにはsrcディレクトリに入って,下記を実行する。

すると下記のように表示される。

ここのRevisionがリビジョン番号を示している。

gclientのツールでもわかるのかと,helpを見て調べたがよくわからなかった(汗)


オレオレ証明書に対してWindows7標準のWebDAVクライアントを使う

No Comments

Windows7でオレオレ証明書を用いたWebDAVサーバーに標準のクライアントからは接続できない。

これはWindows7では信頼されたサーバー証明書でないとアクセスできないという制限があるためである。

しかし,オレオレ証明書を信頼されたサーバー証明書としてインストールすると接続することができる。

それには下記の手順を踏む必要がある。
プロトコルはもちろんhttpsで,Basic認証ありとする。

  1. オレオレのサーバー証明書を信頼出来るルート証明書としてインストールする。インストールするにはIEを用いることができる。
  2. “コンピュータ”を右クリックして表示される”ネットワークドライブの割り当て”を用いて接続する。

上記はググればいくらでもでてきて,この方法で殆どの人が解決しているようだった。

しかし,なぜか失敗する。

“ネットワークドライブの割り当て”の接続中にBasic認証のダイアログが表示されるのだけれど,正しいものを入力してもエラーになってしまう。

なぜだろうと思って調べたら,オレオレ証明書の方に問題があった。

Common Name(略してCN)が設置先のサーバーのドメイン名(www.domain.co.jpみたいな)と異なっていたのである。

この場合,上記手順によってオレオレ証明書を信頼するように設定しても,アクセスしようとしているサイトと表示されるサイトが別物の可能性が生じ,危険なサイトと判断されてしまう。

これがダメだったらしい。

オレオレ証明書を作り直し,CNを正しいサーバーのドメイン名に変更すれば,問題なく接続できた。

めでたしめでたし(汗)


NT-Emacsの日本語対応

No Comments

下記のサイトが非常にまとまっていてわかり易かった。

Amrta – NTEmacs で UTF-8 な環境構築を試行錯誤

該当する箇所は”まずは文字コード関連の設定をなるべく UTF-8 にする。”というとこから。
環境をUTF-8で統一することで,Diredやシェルの日本語の文字化けが起こらなくなり,grep-findコマンドで日本語を検索できるようになった。

後はこの環境にあわせてShellモードでCygwinのbashを使うように設定し,自分にとって非常に使いやすい環境を構築できた。
下記,環境変数CYGWIN_HOMEにはCygwinのインストールディレクトリを設定してある。


gnupackのEmacsが使いやすい件について

No Comments

WindowsのGNU Emacsを使ってみて非常に不便だったのが,Windows標準のMS IMEで日本語のインライン入力ができないことだった。

自分が入力中の文字が分からないのである。
(スペースで変換すると,候補のポップアップは表示されるも,場所はスクリーン右下。。。)

調べたところ,修正パッチがあり,これを適用してビルドし直すと解決するらしい。

Emacsのバージョンを上げるたびにビルドし直すのは面倒だな~と思って(本家でも修正が入ると思うけど)探したら,
パッチを適用してビルドしたバイナリがあった。

gnupack

必要なのはemacsのみなので,”emacs only”のリンクからバイナリをダウンロード。

欲しかったものを見つけた。

ちなみにUSキーボードで日本語入力のON/OFFを切り替えるのに”Alt-`”を使うと,下記のメッセージが毎回表示される。

<M-kanji> is undefined

これは下記のように~/.emacsでM-kanjiをignore関数に割り当てることで解決。