ITインフラエンジニアのおつむの整理

ITインフラエンジニア(現ニート)の頭の整理場所。ほぼ日記になる予定。

gitを使用したサーバのconfig管理方法

背景

サーバの設定ファイルを変更したことの履歴とかを残したいけどどうすればいいだろうとずっと考えていて、以下の記事を見かけたしまねしてみるか~と思ってました。

qiita.com

が、記事最後に記載されてありましたがgitで管理する方法がよさそうだなと思い、今日から試しに実行してみました。ちょうど最近gitを勉強したのでちょうどいいです。

Gitでの管理方針

設定変更したファイルがあるディレクトリでgit initを使用して、設定ファイルのバージョン管理をします。 今までは元ファイルのバックアップをサフィックスに日付を付与してコピーしてから設定ファイルを編集していました。それを今後はGitで管理します。 例として、環境変数を付与するために.bashrcを編集する際の手順を以下に記載します。

  • 今まで
$ cp -p .bashrc .bashrc.yyyymmdd
$ vi .bashrc #更新
  • これから(初回)
$ git init
$ git add .bashrc
$ git commit -m "<commit message>"
  • これから(更新する際)
$ vi .bashrc
$ git add -u
$ git commit -m "<commit message>"

手順の長さとしては今までのほうがシンプルですが、ただどんどんバックアップが増えてしまい邪魔だと感じたり、またどの設定ファイルをいじったのか忘れがちでした。

それをgitで管理するようになると、git管理しているディレクトリでは.gitディレクトリが作成されるので.gitディレクトリを検索すればよいではないか!となり、これが個人的に一番うれしいです。

検索はfindコマンドで、以下エイリアスを設定しました。

alias gitfind='sudo find ~ /opt -name .git | sed s/.git//'
$ gitfind
/home/horonium/
/opt/docker/awscliv2/

一般ユーザに設定した例のためsudoを付与、また検索するディレクトリはルートディレクトリをしているするとsudoを付与していても権限不足で余計なエラーが出るので、よく設定変更するディレクトリを指定(/opt, /etc, ~)、あと.gitは表示されなくてもいいかと思いsedで置換。

これでgit管理しているディレクトリが表示されるため、表示されたディレクトリでgitのstatusやls-filesを実行すればどの設定ファイルを修正したかわかります。この辺もう少し工夫すれば、gitで管理しているファイル一覧とかも出せそうですね。いったん今回は様子見ですが。