OpwnWrt をインストールしたルータで Git サーバーを構築しました。低消費電力でプライベートな Git サーバーです。
コンテンツ
実行環境
- ルーター
- Linksys WRT1900ACS
- OS
- OpenWrt 19.07.3
マルチユーザー環境はすでに構築済みであることが前提です。また、Extroot を使ってディスク容量を拡張済み でありディスクの空き容量も数GB以上あることを前提にしています。
パッケージ | バージョン |
---|---|
gitolite | 3.6.11-2 |
Gitolite をインストール
OpenWrt の gitolite パッケージは /srv/git/ にリポジトリを保存することを想定しています。
Gitolite をインストールします。
# opkg update
# opkg install gitolite openssh-keygen
リポジトリ用のディレクトリを作成します。
# mkdir -p /srv/git/.ssh
# touch /srv/git/.ssh/authorized_keys
# chmod 700 /srv/git/.ssh
# chmod 600 /srv/git/.ssh/authorized_keys
git リポジトリ用のディレクトリのオーナーを変更します。git ユーザーと git グループは Gitolite のインストール時に作成されています。
# chown -R git:git /srv/git/
(ローカルPCで作業) Gitolite 管理用ユーザー git 用の鍵を作成します。Linux か mac の場合は以下のコマンドで作成できます。作成後に公開鍵を表示してコピーします。
$ ssh-keygen -t rsa -b 4096 -C "Gitolite-admin" -f ./gitolite_key_admin.key
$ cat ./gitolite_key_admin.key.pub
(注意) 鍵のコメントにスペースが入っていると、後のセットアップでエラーが出ます。スペースはハイフン等で置き換えてください。
FATAL: algorithm mismatch: AAAAB3Nz... vs. +^ at /usr/libexec/gitolite/lib/Gitolite/Common.pm line 409.
(OpenWrt で作業) 先ほどコピーした公開鍵を OpenWrt の /srv/git/admin.pub にペーストします。
# vi /srv/git/admin.pub
git ユーザーに切り替えて Gitolite の初期設定を行います。
# su - git
$ gitolite setup -pk ~/admin.pub
admin.pub はすでに管理用リポジトリにコピーされていて不要なので削除します。
$ rm ~/admin.pub
Gitolite の管理用リポジトリをクローン
(ローカルPCで作業) Gitolite の管理用リポジトリ gitolite-admin をクローンします。以下のアドレスをクローンします。鍵は先ほど作成した gitolite_key_admin.key を使用します。Linux の git でも Windows の Sourcetree でもクローンできました。
ssh://git@<ADDRESS>:<PORT>/gitolite-admin
ssh://git@hogepiyo.com:2020/gitolite-admin
以後はこの gitolite-admin リポジトリを操作して Gitolite を設定していきます。
新しいユーザーを追加
(ローカルPCで作業) 管理ユーザーではない一般ユーザーを追加します。一般ユーザー用の鍵を新たに作成し、公開鍵を <Username>.pub のファイル名で gitolite-admin/keydir/ に保存します。
.../gitolite-admin/keydir/john.pub
新しいリポジトリを追加
(ローカルPCで作業) リポジトリの管理は gitolite-admin\conf\gitolite.conf を編集して行います。
テストとして hello-world リポジトリを追加します。
repo gitolite-admin
RW+ = admin
repo testing
RW+ = @all
repo hello-world
RW+ = @all
変更をコミット
(ローカルPCで作業) 変更を反映するには gitolite-admin リポジトリにコミットしてプッシュします。
hello-world リポジトリをテスト
(ローカルPCで作業) ssh://git@<ADDRESS>:<PORT>/hello-world を新しく作成した一般ユーザーでクローンできるかテストします。