Packer + Vagrant + Ansibleで構築するdotfiles
アドベントカレンダーに参加しています。
今回は、dotfilesにAnsibleを導入してみると便利かもしれないという話をします。
自動化スクリプトが動かなくなってた話
私は、昔、ArchLinuxを自動でインストールし、dotfilesを適用し、その上でデスクトップを構築するまでを以下のコマンドでやっていた時期がありました。
ですが、最近実行してみると、やっぱり動かなくなっていたのです!
dotfilesのメンテもいつの間にかやらなくなる話
dotfilesも同じく、最初はちゃんとpushするんですが、そのうち、commitがめんどくさくなってしまい、いつの間にかメンテナンスしなくなっていました。
そんな時、Ansibleで構築してみると便利かもしれないと思ったので、今回は、Ansible + dotfilesで環境一新してみることにしたのです。
(魔界化したdotfilesは何から手を付けていいのかわからない)
Ansible
とは環境構築を自動化するツールです。dotfiles
は設定ファイル群で、今回はこれらを組み合わせます。
仮想環境は、Packer, Vagrant, ArchLinuxを使います。PackerでArchLinuxのVagrantイメージを作り、その上にdotfilesをおいてAnsible Playbook
を実行しデスクトップ環境を構築するという流れでやってみたいと思います。
デスクトップのi3は、Mod4 + Enter
でTerminalを起動。
https://github.com/elnappo/dotfiles
Packer + VagrantでArchLinuxの仮想環境を構築
ArchLinuxは、なかなか良さげのVagrantイメージがありませんでした。ということで、Packerで作ることにします。
まずは必要なものをインストール。
$ brew install packer
$ brew cask install vagrant
続いて、Packerの設定ファイルを取ってきて、PackerでVagrantイメージを作ります(今回のために作った)。
https://github.com/syui/arch
$ git clone https://github.com/syui/arch
$ cd arch/packer
$ packer build arch.json
作ったVagrantイメージをクラウドに保存して、ダウンロード起動します。
$ vagrant login
$ vagrant box add syui/arch arch.box --force
$ vim vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "syui/arch"
config.ssh.private_key_path = "~/.ssh/vagrant"
config.ssh.guest_port = 22
config.ssh.username = "arch"
config.ssh.host = "127.0.0.1"
config.vm.synced_folder ".", "/vagrant", disabled: true
end
# 他の人は秘密鍵がないのでsshできない(virtualboxから起動してください)
$ vagrant up
$ vagrant ssh-config
$ vagrant status
$ vagrant ssh
# pass
# root : root
# arch : arch
$ su arch
$ cd
dotfilesからAnsibleを適用する
最後に、Ansibleを適用してデスクトップを構築します。
# https://github.com/elnappo/dotfiles
$ cd dotfiles/init
$ ./setup.sh
$ startx
Ansible + dotfilesはどうなのか?
Ansibleは、初見にとってはわかりやすいです。
例えば、他人のdotfilesを一見しても、なかなか把握しづらい場合があります。ですが、Ansibleなら設定ファイルを見ればなんとなくわかります。
私のような、いつの間にかメンテナンスが億劫になって、現在使っているdotfilesがどんどんと魔界になって、自分でも把握しづらくなってしまうような人には、Ansible + dotfilesは便利かもしれないと思いました。
ですが、一方で、dotfilesをちゃんと管理できている人にとっては、絶対に、シェルスクリプトのほうがいいと思います。なぜなら、シェルスクリプトのほうが書きやすいからです。それに、時間経過で動かなくなる可能性も比較的低いですからね、シェルスクリプト。
こういう部分を修正するのは、やっぱりシェルスクリプトでやるほうが手っ取り早いことが多いのです。
なので、dotfilesを継続メンテナスできている人は、Ansibleで管理するのは、あまりおすすめできません。手間が増えるだけです。
しかし、dotfilesを構築する取っ掛かりとして、あるいは、いつの間にか放置になってしまう人にとっては、Ansibleで書いておくと、あとで動かしやすいかもしれないと思いました。
結論 : dotfilesのメンテナンスしよう!