日記

日本語の勉強のためのブログ

【Vagrant】provisionを用いてzsh+preztoを自動セットアップ

目標

vagrant upするだけで

  • デフォルトのシェルがzsh
  • preztoのセットアップも完了している

ような環境を実現する。

はじめに注意

初期状態ではroot権限でprovisionスクリプトが実行されるので、スクリプト内の$HOME/rootに置換されてしまう *1
今回はこの仕様がpreztoセットアップの妨げになるため、Vagrantfileのconfig.vm.provisionprevileged: falseを指定し、一般ユーザ(vagrant)で実行されるようにしておく。

config.vm.provision "shell", privileged: false, path: "./vagrant_init.sh"

参考: qiita.com

作成したVagrantfileとprovision用スクリプト

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "generic/ubuntu2204"
  config.vm.synced_folder "./share", "/share"
  config.vm.provision "shell", privileged: false, path: "./vagrant_init.sh"
end

vagrant_init.sh

#!/bin/sh
sudo apt update -qq
sudo apt install -y -qq zsh git

# === zsh ===
## "setopt EXTENDED_GLOB"はpreztoインストール時に自動設定されるので書かなくてよい
git clone --recursive https://github.com/sorin-ionescu/prezto.git $HOME/.zprezto
## https://qiita.com/honono-bonono/items/66c37d99ffddc66d3a06
ln -s $HOME/.zprezto/runcoms/zlogin    $HOME/.zlogin
ln -s $HOME/.zprezto/runcoms/zlogout   $HOME/.zlogout
ln -s $HOME/.zprezto/runcoms/zpreztorc $HOME/.zpreztorc
ln -s $HOME/.zprezto/runcoms/zprofile  $HOME/.zprofile
ln -s $HOME/.zprezto/runcoms/zshenv    $HOME/.zshenv
ln -s $HOME/.zprezto/runcoms/zshrc     $HOME/.zshrc
sudo chsh -s $(which zsh) vagrant

*1:たとえば今回の例では、"git clone *.git $HOME/.zprezto"を実行すると、/home/vagrant/.zpreztoではなく/root/.zpreztoにダウンロードされてしまう