能書き
私的サーバー構築日誌:仕切り直しからの自宅サーバー構築の続きです。
MicroServer N54L に Ubuntu24.04LTS をインストールしてZFSで使うように設定した我が家のファイルサーバですが、前回はHDDの内の1台を交換しました。
さあここからだ!となる前に、/etc
をバージョン管理します。但し私の個人的な好みで、GitではなくSubversionを使います。その為etckeeperは使いません。
既に何度か同じ内容の記事を書いていますが、私の作業記録という事で。
目標
我が家のファイルサーバ MicroServer N54Lの/etc
をSubversionでバージョン管理できるように設定し、最初のコミットを実行します。
参考文献
/etc
のバージョン管理とは関係ありませんが、もしxmllist
コマンドがあればSubversionのログを自由に操作できます。
- 確認 - 俺様サーバー構築記 - Subversionサーバーの構築@デスクトップパソコン - Qiita
- 確認 - 俺様サーバー構築記 - Subversionをインストールして /etc をバージョン管理@全機 - Qiita
準備
システムのアップデート
apt
コマンドのリポジトリuniverseを追加します。
sudo apt-add-repository universe
この時、続行するなら[ENTER]を押せ、との表示が出ます。素直にEnterキーを押します。
$ sudo apt-add-repository universe
Adding component(s) 'universe' to all repositories.
Press [ENTER] to continue or Ctrl-c to cancel.
そしてパッケージ関連の更新など。
sudo apt update
sudo apt upgrade
Subversionインストール
パッケージ
svnパッケージをインストール。
sudo apt install -y subversion
インストールできたか確認します。
svn --version | head -n2
表示内容は、例えば下記のようになります。
$ svn --version | head -n2
svn, version 1.14.3 (r1914484)
compiled Apr 1 2024, 04:55:49 on x86_64-pc-linux-gnu
Subversionのバージョンは1.14.3になりました。そしてman svn
もinfo svn
も、公式ページでも、レッドブックを読めと書いてありました。
リポジトリ
今回はとにかく/etc
のバージョン管理を開始するのが目標ですので、汎用的なプロジェクト用の設定は後日とします。
- Subversion操作用ユーザは作成しません。
/etc
バージョン管理はrootが行います。 - 汎用リポジトリの場所も用意しません。
汎用ではなく/etc
の為のリポジトリの場所は、/etc/.svn_repo
とします。
当然、svnの管理対象外とする設定を忘れてはなりません。その手順は後述。
sudo mkdir /etc/.svn_repo
sudo svnadmin create /etc/.svn_repo/
/etc
を作業コピーにする
cd /tmp
mkdir etc
sudo svn import etc file:///etc/.svn_repo/ -m "create project"
rmdir etc
sudo svn co file:///etc/.svn_repo/ /etc
ちゃんと出来たか確認。
ls -dl /etc/.svn
/etc/.svn
ディレクトリが出来ていればOKです。例えば下記のように表示されればOK。
$ ls -dl /etc/.svn
drwxr-xr-x 4 root root 4096 Nov 28 20:33 /etc/.svn
バージョン管理
最初の一歩
※以前問題を起こしていたファイル/etc/ssl/certs/NetLock*
は、今は問題無く処理できるようになったようです。
cd /etc
sudo svn add *
sudo ls *- | sudo xargs -rt svn revert
svn revert
の結果は下記のように表示されます。
$ sudo ls *- | sudo xargs -rt svn revert
svn revert group- gshadow- passwd- shadow- subgid- subuid-
Reverted 'group-'
Reverted 'gshadow-'
Reverted 'passwd-'
Reverted 'shadow-'
Reverted 'subgid-'
Reverted 'subuid-'
Subversion管理から外したファイルを確認してみます。
sudo svn st --no-ignore | grep -E "^(\?|I)"
結果は下記の通り。
$ sudo svn st --no-ignore | grep -E "^(\?|I)"
? .pwd.lock
? .resolv.conf.systemd-resolved.bak
? .svn_repo
? .updated
? group-
? gshadow-
? passwd-
? shadow-
? subgid-
? subuid-
.pwd.lock
については以前調べました。バージョン管理は不要です。どうも更新時に設定されるロックファイルらしい。という訳で無視します。
さて、最初のcommitです。コミットメッセージは何でも良いんですが。
sudo svn ci -m "first commit"
どういう訳か部分的にリビジョン不一致を起こす模様。そのため下記コマンドも実行します。
sudo svn up /etc
確認
ログを表示させてみます。
sudo svn log /etc
こんな風に表示されます。
$ sudo svn log /etc
------------------------------------------------------------------------
r1 | root | 2024-11-28 20:39:17 +0900 (Thu, 28 Nov 2024) | 1 line
first commit
------------------------------------------------------------------------
余談ですが、xmllint
コマンドがあれば、--xml
オプションと組み合わせて色んな値を抽出する事が出来ます。head
とかsed
とかを組み合わせてビクビクしながら調整する必要はありません。が、現状ではインストールされていませんので、参考文献を示すだけにしておきます(参考文献の章を参照)
無視ファイル
現時点でSubversion管理下に無いファイルは、すべて無視ファイルとして登録します。
sudo bash -c "svn propset svn:ignore -F <(svn st | cut -b9-) ."
状態を確認します。
$ cd /etc
$ sudo svn st
M .
$ sudo svn di
Index: .
===================================================================
--- . (revision 1)
+++ . (working copy)
Property changes on: .
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,10 ##
+.pwd.lock
+.resolv.conf.systemd-resolved.bak
+.svn_repo
+.updated
+group-
+gshadow-
+passwd-
+shadow-
+subgid-
+subuid-
これも/etc
の変更ですのでcommitします。
sudo svn ci -m"set svn:ignore"
sudo svn up /etc
仕舞い
これで/etc
をバージョン管理できるようになりました。個人的な好みでSubversionですが。もしgitを使いたい方は、素直にetckeeperを使用した方がよろしいでしょう。私はこれで行きます。