📑

設定ファイルをGitHubで管理する

2024/05/03に公開

ターミナルやシェルなどをカスタマイズ後に管理するのがめんどう、、、
でもPCを移行したときなどにもう一度カスタマイズしていくのは大変なので管理しておきたい。

ということで、dotfilesとしてGitHubで管理することにしました。

※機密情報であるAPIキーやパスワード、大きなバイナリファイルは上げないようにね。

環境

OS:Kubuntu 24.04
shell:zsh

どうやる?

  • dotfilesのリポジトリをGitHubにprivateで作成
  • 自動同期のスクリプトを作成
  • ログファイルの管理
  • cronでスクリプトをスケジュール実行

でやることにしました。

作成したファイル

私の場合は、
~/Hobby ディレクトリでコードを管理しているので、
~/Hobby/dotfilesというディレクトリを作成しました。
ディレクトリのパスや何を管理するかなどは適宜置き換えてください。

ディレクトリ構成

dotfiles
├── log
│  └── sync_dotfiles.log
├── README.md
└── sync_dotfiles.sh

sync_dotfiles.sh

#!/bin/bash

# ログファイル
LOG_FILE="$HOME/Hobby/dotfiles/log/sync_dotfiles.log"

# .zshrc
ZSH_SOURCE="$HOME/.zshrc"
ZSH_DESTINATION="$HOME/Hobby/dotfiles/.zshrc"

# .xprofile
XPROFILE_SOURCE="$HOME/.xprofile"
XPROFILE_DESTINATION="$HOME/Hobby/dotfiles/.xprofile"

# git
GIT_SOURCE="$HOME/.gitconfig"
GIT_DESTINATION="$HOME/Hobby/dotfiles/.gitconfig"
GIT_HOBBY_SOURCE="$HOME/.gitconfig_hobby"
GIT_HOBBY_DESTINATION="$HOME/Hobby/dotfiles/.gitconfig_hobby"

# copy
cp $ZSH_SOURCE $ZSH_DESTINATION
cp $XPROFILE_SOURCE $XPROFILE_DESTINATION
cp $GIT_SOURCE $GIT_DESTINATION
cp $GIT_HOBBY_SOURCE $GIT_HOBBY_DESTINATION

# GitHubへの同期
cd $HOME/Hobby/dotfiles
git add .
git commit -m "Update dotfiles"
git push origin main

# ログに記録
echo "$(date) : updated and pushed to GitHub." >> $LOG_FILE

README.md


# スクリプト

## 権限変更
chmod +x $HOME/Hobby/dotfiles/sync_dotfiles.sh

## 実行
/bin/bash $HOME/Hobby/dotfiles/sync_dotfiles.sh


# cron job
## Cronジョブの確認
crontab -l

## cronジョブを削除または編集する
crontab -e

# cron job time schedule
## 毎日深夜0時
0 0 * * * /bin/bash $HOME/Hobby/dotfiles/log/sync_dotfiles.sh
## 一分ごとに実行
* * * * * /bin/bash $HOME/Hobby/dotfiles/log/sync_dotfiles.sh
## 10分ごとに実行
*/10 * * * * /bin/bash $HOME/Hobby/dotfiles/log/sync_dotfiles.sh
## 一時間ごとに実行
0 * * * * /bin/bash $HOME/Hobby/dotfiles/log/sync_dotfiles.sh
## AM 10:00に実行
0 10 * * * /bin/bash $HOME/Hobby/dotfiles/log/sync_dotfiles.sh
## PM 10:00 (22:00) に実行
0 22 * * * /bin/bash $HOME/Hobby/dotfiles/log/sync_dotfiles.sh

# logrotate
sudo vim /etc/logrotate.d/sync_dotfiles

## logrotate config edit(logrotateは$HOMEが使えない)
/home/yuuki/Hobby/dotfiles/log/sync_dotfiles.log {
    weekly          # ログファイルを週に1回ローテートします。
    rotate 1        # 1つの古いログファイルを保持します。2つ目が生成されると、最も古いログファイルが削除されます。
    compress        # 古いログファイルをgzip形式で圧縮します。
    delaycompress   # 圧縮を1サイクル遅らせます。これにより、最新のローテートされたファイルは圧縮されず、次のローテート時に圧縮されます。
    missingok       # ログファイルが見つからない場合でもエラーになりません。
    notifempty      # ログファイルが空の場合はローテートしません。
    create 640 yuuki yuuki # ローテート後に新しいログファイルを作成します。640はファイルのパーミッションで、所有者は yuuki、グループも yuuki です。
}

## 確認・実行テスト
sudo logrotate --debug /etc/logrotate.d/sync_dotfiles

.gitignore

log/

Setup

crontab -e のコマンドをすると、nanoかviで編集画面にいくと思うので、
スクリプトのスケジュールを追加する。

ログファイルは要らないけど一応動いているか確認するときに作成しました。
githubでは管理不要なので.gitignoreに登録。
沢山はいらないので、logrotateを設定。

これで管理の手間はいらないですね。

Discussion