takafumi blog

日々の勉強メモ

【Vagrant】 apacheの設定方法

環境   CentOS 7.0 apache2.4.6

httpdのインストール、起動はVagrantに限らず、通常のCentOS7の手順と同じ。

$ sudo yum install -y httpd httpd-devel
$ sudo systemctl start httpd

自動起動の設定をするなら、

$ sudo systemctl enable httpd.service

これで状態を確認すると、

sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2016-01-05 22:33:04 JST; 6min ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 3066 (httpd)
   Status: "Total requests: 10; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─3066 /usr/sbin/httpd -DFOREGROUND
           ├─3067 /usr/sbin/httpd -DFOREGROUND
           ├─3068 /usr/sbin/httpd -DFOREGROUND
           ├─3069 /usr/sbin/httpd -DFOREGROUND
           ├─3070 /usr/sbin/httpd -DFOREGROUND
           ├─3071 /usr/sbin/httpd -DFOREGROUND
           └─3072 /usr/sbin/httpd -DFOREGROUND

Jan 05 22:33:03 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Jan 05 22:33:04 localhost.localdomain httpd[3066]: AH00558: httpd: Could not reliably determine the server's fully qualifi...ssage
Jan 05 22:33:04 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.


さてこれにアクセスできるようにするには、Vagrantfileの以下の行からコメントをはずせばよい。

config.vm.network "private_network", ip: "192.168.33.10"

これで、vagrant reloadし、192.168.33.10にブラウザからアクセスすればよい。

f:id:takafumi-s:20160105225157j:plain

【Node.js】 いつの間にかバージョン表記が変わってた

環境   CentOS 7.0 Node.js 5.3.0

Node.jsを最新版にしようと思って、最新版を調べたら、バージョンが5.3.0?

CentOS7.0にNode.js最新版をインストール - takafumi blog

のときは0.12.2とかだったのに。

で気が付いたんですが、Node.jsとio.jsが統合したんでしたね。
バージョンがio.jsを引き継いで、3から4として扱われたらしい。

JavaScriptプラットフォーム「Node.js v4.0.0」がリリース、io.jsと統合し、今後は定期的なリリースに移行:CodeZine(コードジン)

Previous Releases | Node.js

インストール方法は変わりなし。

【Vim】 コマンドラインからvimコマンドを実行

vim -c "NeoBundleInstall" -e
とか-e -cオプションでexモードのコマンドを実行できる。

が、何故かvim開いてから実行だと問題ないのに、コマンドライン実行だとエラー出るコマンドとかがある。

と言う事で何か方法がないのかと思ってググッてみた。

vimコマンドを端末から実行する - Qiita

つまり
vim +":NeoBundleInstall"
とか+を使う事で、実際にvimを開いてから、実行できるらしい。


きちんとエラー調べるべき。
という気もするが、コマンドラインvimコマンド使う事自体、あまりないのでとりあえず妥協。


【Vagrant】 プロビジョニングで環境を自動構築

環境  Vagrant 1.8.1 VirtualBox 5.0.12

プロビジョニングの実行タイミング

はじめてvagrant upを行ったときに、実行される処理。
2回目以降は以下のようなメッセージが表示されている。

==> default: flag to force provisioning. Provisioners marked to run always will still run.

明示的に、プロビジョニングを実行する場合は
vagrant up --provision
vagrant reload --provision
とする。


プロビジョニングの書き方

1. Vagrantfileにインラインで書く

以下のように書く。

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: <<-SHELL
    echo 'HELLO!'
    date
    yum insatall -y mysql-server
  SHELL
end

以下のようにも書ける。

script = <<SCRIPT
echo 'HELLO!'
date
yum insatall -y mysql-server
SCRIPT

Vagrant.configure("2") do |config|
  config.vm.provision :shell, :inline => script
end
2. 別ファイルに書く
Vagrant.configure("2") do |config|
  config.vm.provision "shell", path: "provision.sh"
end

pathの部分はホスト側(Windows)のパスになる。
ただし実行するファイル(provision.sh)内のパスは、ゲスト側(CentOS)のパスになる事に注意。

chefやansibleも同様に書ける。


と言う事で作ってみた。

takafumi-s · GitHub

最小限の構成だけど、完全に自動化しようとすると結構大変。
これで今後は、デスクトップPCとノートPCの環境が統一できるかな?


【Vagrant】 独自のboxを作成する

環境  Vagrant 1.8.1 VirtualBox 5.0.12

既存のVMからboxイメージを作成する

ホスト側から以下のようにする。

PS> vagrant package --base VMName --output Custom.box
==> VMName: Attempting graceful shutdown of VM...
    VMName: Guest communication could not be established! This is usually because
    VMName: SSH is not running, the authenticationinformation was changed,
    VMName: or some other networking issue. Vagrant will force halt, if
    VMName: capable.
==> VMName: Forcing shutdown of VM...
==> VMName: Clearing any previously set forwarded p
orts...
==> VMName: Exporting VM...
==> VMName: Compressing package to: Custom.box

--baseVirtualBox上の名前
--output は新しいboxの名前

【参考】

Vagrant:package作成時「VM not created. Moving on…」をエラーが出たら | ログってなんぼ

--outputが未指定だと、package.boxになる


新しいboxファイルを、vagrantのboxに登録する

PS> vagrant box add NewBox Custom.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'NewBox' (v0) for provider:
    box: Unpacking necessary files from: file://Custom.box
    box: Progress: 100% (Rate: 461M/s, Estimated time remaining: --:--:--)
==> box: Successfully added box 'NewBox' (v0) for 'virtualbox'!

PS> vagrant box list
NewBox           (virtualbox, 0)
bento/centos-7.1 (virtualbox, 2.2.2)

となる。

【Vagrant】 VirtualBoxのGuestAdditionsを自動で更新する

環境  Vagrant 1.8.1 VirtualBox 5.0.12

割と有名な事らしいけど、VirtualBoxのゲストでカーネルに更新があったときは、GuestAdditionsを入れなおす必要があるらしい。

VirtualBox共有フォルダ覚書 | dark_greenの日記 | スラド

当然知らず、vagrantVM作って即yum upgradeしたところ、vagrantでのファイル共有ができなくなった。

==> default: Mounting shared folders...                                        
    default: /vagrant =>  C:/Users/<ユーザー名>/VirtualBox VMs/CentOS7.x
Failed to mount folders in Linux guest. This is usually because the "vboxsf" file system is not available. Please verify that the guest additions are properly installed in the guest and can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

とはいえ、ゲスト側で毎度GuestAdition入れなおすのは面倒なので、何か方法がないかとググッてみた。

まさにこれです。

vagrantプラグインを以下のコマンドで導入。

PS> vagrant plugin install vagrant-vbguest

後は普通にvagrant upでOK。

起動時にゲストが自動で更新される。



【追記】

と思ったら罠が。

vagrant-vbguestは常に最新版のGuestAdditionsをインストールしようとする。

つまり、カーネル側も最新になっていないと、GuestAdditionsだけが更新され、結局バージョン違いで問題になる事がある。

vagrant-vbguestプラグインがGuestAdditionsを無効にしてしまう - Qiita

dotless-de/vagrant-vbguest · GitHub

と言う事で、Vagrantfileに通常は更新無効の設定を書いておく

Vagrant::Config.run do |config|
  config.vbguest.auto_update = false
end