【Vagrant1.3.4】provisioner/shell:のbinaryオプションの検証
こんにちは。最近は寝る時の服装を長袖に変えた@at_grandpaです。
始めに前記事についてのお詫びをさせてください。
お詫び
前回、前々回とVagrantを触ってきたわけですが、gemでインストールしたVagrant1.0.7を使用していました。
ところが、公式ではgemでのインストールを非推奨としています。
ですので、パッケージから最新バージョンをインストールしました。
gemでインストールされた方は、以下から最新バージョンをダウンロードし、インストールしてください。
http://downloads.vagrantup.com/
1.0.7をインストールした方、申し訳ございませんでした。
引き続き、今日の記事を御覧ください。
Vagrant1.3.4
さて、2013/10/02に、Vagrant1.3.4がリリースされました。
https://github.com/mitchellh/vagrant/blob/master/CHANGELOG.md
主な変更・追加箇所は、以下となっています。
provisioner/shell:
にbinary
オプションを追加guests/suse:
において、CFEngineのインストールをサポート- その他 BUG FIXES
今回は1の挙動を確かめてみようと思います。
※Twitterで間違った説明をしていました。検証結果から今回の記事が正しいと思われます。すみませんでした。
Vagrantfileを編集して確かめてみる
SHELL PROVISIONER
今回の対象はprovisioner/shell:
です。
provisionerは後日詳しく書こうと思いますが、一言で言うと「VM立ち上げ時に実行する処理」を意味します。
provisioner/shell:
は、立ち上げ時に実行するシェルスクリプトのことを意味します。
改行コードが変換されるか検証
binary
オプションの挙動は、Vagrant Docs - SHELL PROVISIONER によると以下のようになっています。
binary
(boolean) - Vagrant automatically replaces Windows line endings with Unix line endings. If this is true, then Vagrant will not do this. By default this is "false".
true
だと自動変換しない。デフォルトはfalse
。
なんてわかりにくい記述なんだ・・・。
では、上記を確かめてます。
各改行コードのシェルスクリプトファイルを用意
LF
(unix)、CR+LF
(win)、CR
(mac) の3種類の改行コードのシェルスクリプトファイルを用意します。
vimで unix.sh, win.sh, mac.sh という名前のファイルを作成し編集します。それぞれ、
:set fileformat=unix :set fileformat=dos :set fileformat=mac
と設定した上で、以下のスクリプトファイルを作成しました。
#!/bin/sh echo hogehoge! echo fugafuga!
3つのファイルとも中身は同じですが、改行コードだけが異なります。
Vagrantfileの設定
Vagrantfileは以下のように設定します。
# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "cent_os" # 各自のbox-name config.vm.provision "shell", binary: true, # trueは自動変換なし path: "unix.sh" # シェルスクリプトのPath end
true
or false
とそれぞれのファイルの組わせを実行してみます。
各パターンの検証
各パターンの組み合わせ全てをVagrantfileに記述し、vagrant up
した結果を示します。
binary: true (自動変換なし)の場合
LF
(unix) 成功!
$ vagrant up ... [default] Running: ... hogehoge! fugafuga!
CR+LF
(win) 失敗!
$ vagrant up ... [default] Running: ... bash: /tmp/vagrant-shell: /bin/sh^M: bad interpreter: No such file or directory No error message
CR
(mac) 失敗!
$ vagrant up ... [default] Running: ... echo: bad interpreter: No such file or directory No error message
binary: false (自動変換あり)の場合
LF
(unix) 成功!
$ vagrant up ... [default] Running: ... hogehoge! fugafuga!
CR+LF
(win) 成功!
$ vagrant up ... [default] Running: ... hogehoge! fugafuga!
CR
(mac) 失敗!
$ vagrant up ... [default] Running: ... echo: bad interpreter: No such file or directory No error message
CR
全滅!\(^o^)/ まぁそうですよねー。
まとめ
今回は、各改行コードのおいてprovisioner/shell:
のbinary
オプションの挙動を確かめました。
結果は次の通りです。
binary:true (自動変換なし)
*LF
(unix) -> 実行可能
*CR+LF
(win) -> エラー
*CR
(mac) -> エラー
binary:false (自動変換あり)
*LF
(unix) -> 実行可能
*CR+LF
(win) -> 実行可能
*CR
(mac) -> エラー
以上の結果より、このオプションが付いたことで、Windowsで編集したVagrantfileもunixで実行できるようになりました。
こういった細かいアップデートのおかげで、どんどん使いやすくなっていくんですね。
今後のアップデートにも期待です。