+++ date = "2019-12-23JST" tags = ["dotfiles","archlinux"] title = "Packer + Vagrant + Ansibleで構築するdotfiles" slug = "dotfiles" +++ アドベントカレンダーに参加しています。 - [dotfiles Advent Calendar 2019](https://qiita.com/advent-calendar/2019/dotfiles) 今回は、dotfilesに[Ansible](https://docs.ansible.com/)を導入してみると便利かもしれないという話をします。 ### 自動化スクリプトが動かなくなってた話 私は、昔、ArchLinuxを自動でインストールし、dotfilesを適用し、その上でデスクトップを構築するまでを以下のコマンドでやっていた時期がありました。 ```sh $ curl -L git.io/air|zsh ``` ですが、最近実行してみると、やっぱり動かなくなっていたのです! ### dotfilesのメンテもいつの間にかやらなくなる話 dotfilesも同じく、最初はちゃんとpushするんですが、そのうち、commitがめんどくさくなってしまい、いつの間にかメンテナンスしなくなっていました。 そんな時、Ansibleで構築してみると便利かもしれないと思ったので、今回は、Ansible + dotfilesで環境一新してみることにしたのです。 (魔界化したdotfilesは何から手を付けていいのかわからない) `Ansible`とは環境構築を自動化するツールです。`dotfiles`は設定ファイル群で、今回はこれらを組み合わせます。 仮想環境は、[Packer](https://www.packer.io/), [Vagrant](https://www.vagrantup.com/), [ArchLinux](https://www.archlinux.org/download/)を使います。PackerでArchLinuxのVagrantイメージを作り、その上にdotfilesをおいて`Ansible Playbook`を実行しデスクトップ環境を構築するという流れでやってみたいと思います。 デスクトップのi3は、`Mod4 + Enter`でTerminalを起動。 https://github.com/elnappo/dotfiles ![](https://raw.githubusercontent.com/syui/img/master/old/archlinux_dotfiles_2019_qiita_ac_01.png) ### Packer + VagrantでArchLinuxの仮想環境を構築 ArchLinuxは、なかなか良さげのVagrantイメージがありませんでした。ということで、Packerで作ることにします。 まずは必要なものをインストール。 ```sh $ brew install packer $ brew cask install vagrant ``` 続いて、Packerの設定ファイルを取ってきて、PackerでVagrantイメージを作ります(今回のために作った)。 https://github.com/syui/arch ```sh $ git clone https://github.com/syui/arch $ cd arch/packer $ packer build arch.json ``` 作ったVagrantイメージをクラウドに保存して、ダウンロード起動します。 ```sh $ 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を適用してデスクトップを構築します。 ```sh # 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のメンテナンスしよう!