/etc配下のファイルもmise.tomlで管理したい
【mise】mise bootstrapで開発機のセットアップを宣言的に管理する
で紹介したmise bootstrapのうち、/etc配下の設定ファイルやディレクトリの配置だけを担当するのがmise bootstrap filesである。[bootstrap.files]と[bootstrap.directories]に書いた内容を、実際のファイルシステムの状態に反映する。
このコマンドはroot権限でシステムのファイルを直接書き換えるため、検証はDockerの使い捨てコンテナで行った。
基本: contentでファイルを作成する
contentにファイルの中身を書くと、指定したパスにそのままファイルが作成される。
[bootstrap.files]
"/etc/motd" = { content = "Welcome!\n" }
$ mise bootstrap files apply -y
mise system files: applied 1 change(s)
mode/owner/groupでパーミッションと所有者を指定する
modeでパーミッション、owner/groupで所有ユーザー・グループを指定できる。
[bootstrap.files]
"/etc/motd" = { content = "Welcome!\n", mode = "0644", owner = "root", group = "root" }
指定しなかった場合、パーミッションはファイルが0644、ディレクトリが0755という固定値になり、所有者はrootになる。umaskの設定には影響されない。
sourceで既存ファイルからコピーする
contentの代わりにsourceを指定すると、既存のファイルパスからコピーして配置できる。
[bootstrap.files]
"/etc/myapp.conf" = { source = "./config/production.conf" }
contentとsourceはどちらか一方が必須で、どちらも指定しない場合はpresent files require source or contentというエラーになる。また、配置先の親ディレクトリが存在しない場合は自動作成されずmanaged file parent does not existというエラーになるため、/etc/myapp/config.ymlのように既存ディレクトリの配下にないパスを指定する場合は、次のセクションで紹介する[bootstrap.directories]にも親ディレクトリを追加しておく必要がある。
ディレクトリも同様に作成できる
[bootstrap.directories]で、ディレクトリの作成とパーミッションを管理できる。
[bootstrap.directories]
"/opt/myapp" = { mode = "0755" }
stateでファイルを削除する
state = "absent"を指定すると、そのファイルが存在する場合に削除する。
[bootstrap.files]
"/etc/legacy-config.conf" = { state = "absent" }
過去に配置した設定ファイルが不要になった場合、mise.tomlからエントリを消すだけでなくstate = "absent"を指定することで、実際のファイルシステムからも削除できる。
mise bootstrap files statusで状態を確認する
mise bootstrap files statusで、[bootstrap.files]/[bootstrap.directories]の各項目が現在どういう状態かを確認できる。
$ mise bootstrap files status
create directory:/opt/myapp absent directory mode 0755 /work/project/mise.toml
create file:/etc/motd absent file mode 0644 /work/project/mise.toml
applyを実行した後に確認すると、状態がunchangedに変わる。
$ mise bootstrap files status
unchanged directory:/opt/myapp directory mode 0755 uid 0 gid 0 directory mode 0755 /work/project/mise.toml
unchanged file:/etc/motd file mode 0644 uid 0 gid 0 file mode 0644 /work/project/mise.toml
–dry-runでプレビューする
mise bootstrap files apply --dry-runで、実際には変更せず何が起こるかだけを表示できる。
$ mise bootstrap files apply --dry-run
would create directory /opt/myapp
would write file /etc/motd
実際にrootでファイルシステムを変更する前に、意図した変更内容になっているか確認できる。
