Ubuntu Linux 22.10でgitサーバを構築してみる
gitと言えば、Microsoftに買収されたgithubのWEBサービスやら、セルフホストするならgitlab、AWSならCodeCommitなど有名どころですが、外部に持たせずにシンプルなgitサーバを立てる方法があります。
今回はOpenssh経由でアクセスするgitサーバの方法を紹介します。
まずはOpensshが利用可能なサーバを用意します。
以下コマンドでgitをインストールします。
$ sudo apt install git
gitユーザを作成
今回はgitユーザを作成します。(gitユーザを作成せずとも既存ユーザ名でも可能)
$ sudo useradd git
$ sudo usermod -G git sudo
$ su git
gitディレクトリを作成
gitを格納するディレクトリを作成します。
筆者の場合は以下としました。
$ mkdir /var/git
gitディレクトリのアクセス権を設定
今回上記フォルダのアクセス権限を以下にします。
$ chown -R git /var/git
$ chgrp -R git /var/git
gitリポジトリを作成
以下コマンドでリポジトリを新規作成します。
$ mkdir /var/git/test.git
$ cd /var/git/test.git
$ git init --bare
gitリポジトリにCloneでアクセスしてみる
今度はgitサーバではない端末から、以下コマンドでアクセスします。
(尚、「.ssh/config」ファイルにホスト名の指定や、認証鍵も設定しておくと、パスワードなしでシンプルにアクセスできます。)
$ git clone ssh://git@xxx.xxx.xxx.xxx/var/git/test.git
うまく行けば以下のようなレスポンスが返ってきます。
❯ git clone ssh://git@git0/var/git/test.git
Cloning into 'test'...
warning: You appear to have cloned an empty repository.
ここでローカル側にはtest フォルダが作成されます。
gitにファイルを追加する
クローンがうまくいったので、ローカル側のテストフォルダにファイルを追加します。
適当にテキストファイルを作成し、addします。
$ git add test.txt
gitコミット、gitプッシュします。
以下コマンドでプッシュします。
$ git commit -m "First commit"
$ git push origin main
gitサーバ側にアップされたか確認します。
gitプッシュが完了したら、サーバ側のディレクトリがどうなったのか、確認してみます。
サーバ側には直接ファイルという形での管理ではなく、バイナリに変換されているようです。
フォルダ構成は以下
-rw-r--r-- 1 git git HEAD
drwxr-sr-x 2 git git branches
-rw-r--r-- 1 git git config
-rw-r--r-- 1 git git description
drwxr-sr-x 2 git git hooks
drwxr-sr-x 2 git git info
drwxr-sr-x 10 git git objects
drwxr-sr-x 4 git git refs
objectsフォルダ以下に2桁の16進数でフォルダが作成されて保管されていました。
drwxrwsr-x 2 git git 25
drwxrwsr-x 2 git git 64
drwxrwsr-x 2 git git 76
drwxrwsr-x 2 git git 9c
drwxrwsr-x 2 git git d1
drwxrwsr-x 2 git git fd
drwxr-sr-x 2 git git info
drwxr-sr-x 2 git git pack
さらに25のフォルダには以下のファイル名
38729d9e6bafa5e730ff04682e78f8d72c3ef2
中身はバイナリ形式で以下となっておりました。
x?Ϳ
?0?q?<???%1?A'???Eܮ?
??????#?}ˏOK?sjpSה?5???K!????г???b3"9٦?ȳ??
硗?,??#?u?:?^t?????~$l????5???i ?)4
したがって、サーバ側でgit管理した場合、ユーザは仮に別環境からはサーバに対してcloneで復元可能ですが、サーバ管理者はコード内容は確認できないため、クライアントサイドでID/PASSなど忘れないように管理が必要ということになりますね。
VSCodeでもアクセスしてみる
ローカルに作成したtestフォルダをリポジトリの場所として指定して開くと、
コマンドだけでなく、VScodeでもgitアクセスが可能です。
まとめ
今回はUbuntu Linux 22.10の環境でgitサーバを構築してみるというお話で、手順の紹介となりました。
何かの参考になれば幸いです。