🐧

Linux 使いになりたい人向けの Intel N100 ミニ PC で構築する開発環境(6)- Windows 版 Gitea

2024/02/15に公開

はじめに

これは、Linux 使いになりたい人向けに Intel N100 ミニ PC を使って開発環境を構築する方法を解説する記事の第6弾です。第1弾はLinux 使いになりたい人向けの Intel N100 ミニ PC で構築する開発環境(1) - 構築する開発環境について にあり、そこから第2弾へと続いています。そちらからご覧ください。

ここで使用する Intel N100 ミニ PC の仕様は次のものを前提とします。

項目 内容
OS Windows 11 Pro
CPU Intel N100
メモリ 16GB
ストレージ SSD 512 GB
画面出力端子 HDMI×2
WiFi 5G/2.4G
イーサネット RJ45×1
Bluetoot BT4.2
USB USB3.0×2/USB2.0×2

このマシンで最終的に Windows と Ubuntu Desktop が使えるように環境構築することを目指します。zenn.dev を購読している人のレベルを考えると、画面キャプチャはそれほど必要がないと考えているため少なめです。また、説明についても明示しないとわかりにくいと思われるものに絞っているので少なめです。

なお、実際に作業するときは、ネットワーク回線については数GBのデータをダウンロードしても問題ないものを使うようにしてください。作業の中には、数GBのデータをダウンロードするものも含まれてますので、テザリング環境では使用可能なパケットを使い切ってしまうこともあります。

試してみるソフトウェア

今回、Hyper-V 仮想マシンで試してみるソフトウェアは次のとおりです。

ソフトウェア名 説明
OpenSSH Server SSH サーバー
Gitea Git リポジトリ管理システム

Gitea を Windows マシンで稼働させることを基本目標とします。Gitea を使用するにあたっては SSH クローンができるようにしたいので、OpenSSH Server も稼働させることにします。

Gitea と OpenSSH Server

前回までで Docker Desktop を使った Gitea の動作確認、試用ができたので、Windows 版をインストールして使ってみることにします。

ここで、Windows 版でも Gitea のビルトイン版の SSH サーバーが使えると思っていたのですが、実際に試してみたところ動作しませんでした。いろいろ調べてみましたが動作しない原因がよくわかりませんでした。ビルトイン版の SSH サーバーはプログラミング言語 Go で実装されているモジュールを使っているようだったので、動いても良いはずなのですが、START_SSH_SERVER = true を指定しても起動しませんでした。

そのため、ビルトイン版を使うのは諦めて、Windows の OpenSSH Server と組み合わせて利用する方法を試してみました。そうしたところ、こちらの方法だと SSH クローンができるようになりました。ということで、この設定方法で動かすことにします。

管理者としてプログラムを実行

この後、管理者としてプログラムを実行することが何度かあるので、Git Bash や PowerShell といったシェルから管理者としてプログラムを実行する方法について説明しておきます。

最初に PowerShell コマンドに -Command オプションでコマンドを指定すると、そのコマンドを PowerShell で実行できることを理解しておきましょう。

PowerShell -Command <コマンド>

ここで、Start-Process というコマンドがあり、これはパラメーターへ実行ファイルのパスを指定すると、そのファイルを実行してプロセスを開始することができます。また、このコマンドには -Verb オプションというものがあり、このオプションへ RunAs を指定すると、管理者としてプロセスを起動することができます。

たとえば、実行ファイルのパスに PowerShell の C:\Program Files\PowerShell\7\pwsh.exe を指定すると、管理者として実行する PowerShell を起動することができます。

Start-Process 'C:\Program Files\PowerShell\7\pwsh.exe' -Verb RunAs

また、実行ファイルのパスに Git Bash の C:\Program Files\Git\bin\bash.exe を指定すると、管理者として実行する Git Bash を起動することができます。

Start-Process 'C:\Program Files\Git\bin\bash.exe' -Verb RunAs

これを Git Bash、PowerShell のどちらからでも実行できるようにするには、PoserShell コマンドと組み合わせます。

PowerShell -Command "Start-Process '実行ファイルのパス' -Verb RunAs"

このコマンドを実行すると、実行ファイルについて、「このアプリがデバイスに変更を加えることを許可しますか?」と確認する画面が表示されます。「はい」をクリックすると、管理者で実行ファイルが起動されます。

OpenSSH for Windows

Windows で OpenSSH を使うには、公式に用意されている OpenSSH for Windows をインストールするのが良いです。

OpenSSH for Windows のインストールについては、Get started with OpenSSH for Windows に PowerShell を使ってインストールする方法の説明があります。

Git Bash で「管理者として実行する PowerShell」を起動します。

PowerShell -Command "Start-Process 'C:\Program Files\PowerShell\7\pwsh.exe' -Verb RunAs"

このコマンドを実行すると、PowerShell について、「このアプリがデバイスに変更を加えることを許可しますか?」と確認する画面が表示されます。「はい」をクリックすると 「管理者として実行する Git Bash」が起動します。

次に、「管理者として実行する PowerShell」で OpenSSH をインストールするにあたってオブジェクト名を確認します。そのためには Get-WindowsCapabilityWhere-Object コマンドをパイプライン | で組み合わせます。

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

OpenSSH にはクライアント用のものと、サーバー用のものがあり、どちらもインストールされていないと、このコマンドの実行結果は次のようになります。

Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

今回使用している Windows 評価版では、クライアント用の OpenSSH.Client~~~~0.0.1.0 の方はインストールされていました。ということで、ここではサーバー用の OpenSSH をインストールします。インストールするには Add-WindowsCapability コマンドを使います。

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

インストールには少し時間がかかります。気長に待ちましょう。

ちなみに、クライアント用の OpenSSH.Client~~~~0.0.1.0 の方をインストールする場合のコマンドは次のようになります。

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

OpenSSH for Windows は C:\Windows\System32\OpenSSH へインストールされます。dir コマンドで確認することができます。

dir C:\Windows\System32\OpenSSH

インストールが終わったら、SSH サーバー用のサービスである sshd サービスが Windows のサービスへ追加されます。これを起動するには、Start-Service コマンドを使います。また、自動起動を有効にするには、Set-Service コマンドを使います。

具体的に実行するコマンドは次のようになります。

Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

公開鍵の作成と登録

次に SSH ログイン用のキーペアを ssh-keygen コマンドで作成しておきます。Gitea 用のものは SSH クローン用に使うため、別に用意しておかないと、SSH ログインができなくなるからです。

すでに作成してある ~/.ssh/id_ed25519_gitea とは別のものを用意するので、今回はデフォルトのファイル名で作成します。また、コメントとして User@Win11Eval-win をつけて区別できるようにします。

ssh-keygen -t ed25519 -C "User@Win11Eval-win"

このようにして作成すると ~/.ssh/id_ed25519~/.ssh/id_ed25519.pub が作成されます。

次に、SSH ログインができるように OpenSSH 用の公開鍵を登録したファイルを用意します。

このファイルについて、Linux 系では ~/.ssh/authorized_keys にファイルを用意するのが基本ですが、Windows では一般ユーザーと管理者とでファイルのパスが変わるので注意しましょう。Git Bash でのパス表現を使うと、Windows の一般ユーザーは ~/.ssh/authorized_keys を使い、管理者は /c/ProgramData/ssh/administrators_authorized_keys を使います。

今回使用する Windows 評価版のユーザーである User は管理者なので、/c/ProgramData/ssh/administrators_authorized_keys を使います。ファイルを編集するには管理者権限が必要です。

ここでは「管理者として実行する Git Bash」を起動して作業しましょう。コマンドでの作業が苦手な場合は、メモ帳を管理者で実行して、ファイルが存在しない場合は新しくファイルを作成し、すでに存在する場合はファイルを編集します。いずれにせよ、ファイルへ ~/.ssh/id_ed25519.pub の内容を追加するというのでも良いです。

Git Bash で「管理者として実行する Git Bash」を起動するには、次のコマンドを実行します。

PowerShell -Command "Start-Process 'C:\Program Files\Git\bin\bash.exe' -Verb RunAs"

このコマンドを実行すると、Git for Windows について、「このアプリがデバイスに変更を加えることを許可しますか?」と確認する画面が表示されます。「はい」をクリックすると 「管理者として実行する Git Bash」が起動します。

この Git Bash を使ってファイルを用意します。まず、ls コマンドでファイルの存在を確認します。

User@WinDev2401Eval MINGW64 ~
$ ls  /c/ProgramData/ssh/administrators_authorized_keys
ls: cannot access '(略)_authorized_keys': No such file or directory

このように、No such file or directory と表示されて、ファイルが存在しない場合は、cp コマンドで ~/.ssh/id_ed25519.pub をコピーします。

User@WinDev2401Eval MINGW64 ~
$ cp ~/.ssh/id_ed25519.pub /c/ProgramData/ssh/administrators_authorized_keys

最後に cat コマンドで /c/ProgramData/ssh/administrators_authorized_keys の内容を確認します。

User@WinDev2401Eval MINGW64 ~
$ cat /c/ProgramData/ssh/administrators_authorized_keys
ssh-ed25519 AAAA(略)33 User@Win11Eval-win

ファイルが存在する場合は、cattee コマンドをパイプライン | で組み合わせて ~/.ssh/id_ed25519.pub の内容を /c/ProgramData/ssh/administrators_authorized_keys へ追加します。

追加するテキストの内容を持つファイルを入力ファイルとし、テキストを追加する先のファイルを出力ファイルとします。次のようにコマンドを組み合わせて実行することで、入力ファイルの内容を出力ファイルへ追加することができます。

cat <入力ファイルのパス>| tee -a <出力ファイルのパス>

実際に実行するときは、先にすでに登録されている公開鍵の内容を cat コマンドで確認しておきます。

User@WinDev2401Eval MINGW64 ~
$ cat /c/ProgramData/ssh/administrators_authorized_keys
(すでに登録されている公開鍵の内容)

それから、公開鍵を登録します。

User@WinDev2401Eval MINGW64 ~
$ cat ~/.ssh/id_ed25519.pub | tee -a /c/ProgramData/ssh/administrators_authorized_keys
ssh-ed25519 AA(略)33 User@Win11Eval-win

再度 cat コマンドを使って、公開鍵が登録できたことを確認します。

User@WinDev2401Eval MINGW64 ~
$ cat /c/ProgramData/ssh/administrators_authorized_keys
(すでに登録されている公開鍵の内容)
ssh-ed25519 AA(略)33 User@Win11Eval-win

SSH ログインの確認

準備ができたら、Git Bash から ssh コマンドを使って SSH 接続してみましょう。ssh コマンドの使い方は次のようになります。

ssh -i <秘密鍵のファイルパス> -p <ポート番号> <ユーザー名>@<ホスト名>

Windows で用意した OpenSSH Server はホスト名が localhost で、ポート番号 22 で接続待機しています。ユーザー名は User で、今回使用する秘密鍵のファイルパスは ~/.ssh/id_ed25519 になります。そのため、次のコマンドを実行すれば良いということになります。

ssh -i ~/.ssh/id_ed25519 -p 22 User@localhost

このコマンドを実行して SSH ログインが成功すると、Git Bash の画面がコマンドプロンプトの画面になります。これは OpenSSH Server へリモートログインしたときに使用するシェルプログラムにコマンドプロンプトが指定されているからです。

リモート接続の動作確認ができたら exit コマンドを実行します。すると、リモート接続が終了して、Git Bash の画面に戻ります。

Windows 版 Gitea のインストールと設定

ここでは Windows 版 Gitea のインストールについて説明します。Gitea Official Website を参考にしてインストールします。インストールするバージョンについては執筆時点で最新の 1.21.4 を使います。インストール用のファイルのダウンロードは https://dl.gitea.com/gitea/1.21.4/ からできます。

また、インストール先は /c/gitea ディレクトリーとします。Gitea は本格的なリレーショナルデータベース(RDB)と組み合わせて利用することができますが、ここでは本格的な使用をするわけではないので、手軽に使える SQLite で動かすことにします。

Gitea のダウンロード

Git Bash を起動して、/c/gitea ディレクトリーを作成してから、ファイルをダウンロードします。記事執筆時点で公式サイトでダウンロードを推奨される gitea-1.21.4-gogit-windows-4.0-amd64.exe をダウンロードします。ファイル検証用に gitea-1.21.4-gogit-windows-4.0-amd64.exe.asc もダウンロードします。

具体的に実行するコマンドは次のようになります。curl コマンドは Git Bash に同梱されているもので、Web サイトからファイルをダウンロードするときによく使われるものです。

mkdir /c/gitea && cd /c/gitea
curl -s -o gitea.exe https://dl.gitea.com/gitea/1.21.4/gitea-1.21.4-gogit-windows-4.0-amd64.exe
curl -s -o gitea.exe.asc https://dl.gitea.com/gitea/1.21.4/gitea-1.21.4-gogit-windows-4.0-amd64.exe.asc

なお、gitea-1.21.4-windows-4.0-amd64.exe というのもあります。gogit がついている方で調子が悪いときは、こちらの方を試してみると良いようです。

gitea.exe のファイルの検証をするには gpg コマンドと gitea.exe.asc ファイルを使います。

まず、検証のための準備として、gpg コマンドの --keyserver オプションへ「<キーサーバー>」、--recv オプションへ「<キー ID>」を指定して実行します。

gpg --keyserver <キーサーバー> --recv <キー ID>

ここでは、keys.openpgp.org のサーバーから gitea.exe の電子署名で使われている キー ID が 7C9E68152594688862D62AF62D9AE806EC1592E2Teabot のものを入手するので、次のコマンドを実行します。

gpg --keyserver keys.openpgp.org \
    --recv 7C9E68152594688862D62AF62D9AE806EC1592E2

それから gpg コマンドの --verify オプションを使って検証します。パラメーターには「<検証用ファイル>」と「<対象ファイル>」を指定します。

gpg --verify <検証用ファイル> <対象ファイル>

ここで使用する検証用ファイルは gitea.exe.asc で、対象は gitea.exe となるので、次のコマンドを実行します。

gpg --verify gitea.exe.asc gitea.exe

コマンド実行時のメッセージに Good signature from "Teabot <(略)>" とあれば検証は成功です。Teabot <(略)> の鍵自体は信頼できる第3者機関の電子署名がされたものではないのですが、公式 Web サイトの手順に従い、公式 Web サイトに記載のキー ID で取得したものを使っているので、正しいものだと考えて良いでしょう。

ファイルのダウンロードからインストールまでのコマンドを実際に実行すると次のようになります。

ここまでのコマンドを実際に実行したときの結果は次のようになります。

User@WinDev2401Eval MINGW64 ~
$ mkdir /c/gitea && cd /c/gitea

User@WinDev2401Eval MINGW64 /c/gitea
$ curl -s -o gitea.exe https://dl.gitea.com/gitea/1.21.4/gitea-1.21.4-gogit-windows-4.0-amd64.exe

User@WinDev2401Eval MINGW64 /c/gitea
$ curl -s -o gitea.exe.asc https://dl.gitea.com/gitea/1.21.4/gitea-1.21.4-gogit-windows-4.0-amd64.exe.asc

User@WinDev2401Eval MINGW64 /c/gitea
$ gpg --verify gitea.exe.asc gitea.exe
gpg: Signature made Wed Jan 17 12:23:08 2024 TST
gpg:                using RSA key CC64B1DB67ABBEECAB24B6455FC346329753F4B0
gpg: Good signature from "Teabot <(略)>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 7C9E 6815 2594 6888 62D6  2AF6 2D9A E806 EC15 92E2
     Subkey fingerprint: CC64 B1DB 67AB BEEC AB24  B645 5FC3 4632 9753 F4B0

Gitea のインストール

あとは、Git Bash で /c/gitea/gitea のパラメーターへ web を指定して実行します。また、--install-port 13000 も指定します。こうすると、インストール時にポート番号 13000 で Gitea が起動するので、初期設定すれば自動で Gitea の画面に遷移するようになります。

/c/gitea/gitea web --install-port 13000

なお、インストール時に Windows のファイアーウォールを許可する設定がでたら、「キャンセル」を選択します。ここではローカルマシンからしか使わないので、ファイアウォールの防御を緩和する必要はありません。

/images/20240210_gitea_win/win-gitea-01.png
gitea.exe をブロックを解除する確認の画面(「キャンセル」を選択)

なお、Gitea の起動は、gitea コマンド(gitea.exe コマンド)の出力結果から確認することができます。このコマンドを実際に実行すると次のような結果となります。

User@WinDev2401Eval MINGW64 /c/gitea
$ /c/gitea/gitea web --install-port 13000
2024/02/10 16:11:26 .../setting/security.go:168:loadSecurityFrom() [W] Enabling Query API Auth tokens is not recommended. DISABLE_QUERY_AUTH_TOKEN will default to true in gitea 1.23 and will be removed in gitea 1.24.
2024/02/10 16:11:26 cmd/web.go:242:runWeb() [I] Starting Gitea on PID: 7768
2024/02/10 16:11:26 cmd/web.go:111:showWebStartupMessage() [I] Gitea version: 1.21.4 built with GNU Make 4.3, go1.21.5 : bindata, sqlite, sqlite_unlock_notify
2024/02/10 16:11:26 cmd/web.go:112:showWebStartupMessage() [I] * RunMode: prod
2024/02/10 16:11:26 cmd/web.go:113:showWebStartupMessage() [I] * AppPath: C:/gitea/gitea.exe
2024/02/10 16:11:26 cmd/web.go:114:showWebStartupMessage() [I] * WorkPath: C:\gitea
2024/02/10 16:11:26 cmd/web.go:115:showWebStartupMessage() [I] * CustomPath: C:\gitea\custom
2024/02/10 16:11:26 cmd/web.go:116:showWebStartupMessage() [I] * ConfigFile: C:\gitea\custom\conf\app.ini
2024/02/10 16:11:26 cmd/web.go:117:showWebStartupMessage() [I] Prepare to run install page
2024/02/10 16:11:27 cmd/web.go:304:listen() [I] Listen: http://0.0.0.0:13000
2024/02/10 16:11:27 cmd/web.go:308:listen() [I] AppURL(ROOT_URL): http://localhost:13000/
2024/02/10 16:11:27 ...s/graceful/server.go:70:NewServer() [I] Starting new Web server: tcp:0.0.0.0:13000 on PID: 7768

最後の出力メッセージから Gitea が起動してポート番号 13000 でアクセス待機状態となったことがわかります。そうしたら、Web ブラウザから http://localhost:13000/ にアクセスします。すると、初期設定画面が表示されます。

画面にあるように指定します。

/images/20240210_gitea_win/win-gitea-02.png
Gitea for Windows 初期設定画面 その1

画面をスクロールしたら、こちらも画面にあるように指定します。

/images/20240210_gitea_win/win-gitea-03.png
Gitea for Windows 初期設定画面 その2

「Gitea をインストール」をクリックすると、Gitea のインストールが始まります。

/images/20240210_gitea_win/win-gitea-04.png
Gitea のインストール画面

インストールが終わると Gitea のトップページとなります。

/images/20240210_gitea_win/win-gitea-05.png
Gitea のトップページ

Gitea インストール後の設定

トップページの右上にある「登録」をクリックして、アカウントの登録画面を表示します。この画面でユーザーが登録できます。Windows のユーザー名(Windows 評価版 だと User)は Gitea で内部的に利用するので他のユーザー名で登録します。ここでは user001 を登録します。

/images/20240210_gitea_win/win-gitea-06.png
Gitea のアカウントの登録画面

必要な情報を指定してから「アカウントを登録」をクリックすると、指定したユーザーのアカウントが登録されて、自動でサインインします。サインインしたら、アカウント用メニューの「サイト管理」をクリックしてサイト管理のページを開きます。

/images/20240210_gitea_win/win-gitea-07.png
Gitea アカウント用メニューの「サイト管理」

それから、「サイト管理」のページにある「設定」を開きます。URL だと http://localhost:13000/admin/config になります。SSH の項目で、ビルトインサーバーが起動していないことを確認します。

/images/20240210_gitea_win/win-gitea-08.png
Gitea 「サイト管理」のページにある「設定」

次に、アカウント用メニューの「設定」をクリックし「ユーザー設定」のページを開きます。URL だと http://localhost:13000/user/settings/keys になります。

それから「SSH / GPG キー」を開きます。「SSH キーの管理」で、user001 用の公開鍵として ~/.ssh/id_ed25519_gitea.pub 内のテキストを追加します。

/images/20240210_gitea_win/win-gitea-09.png
Gitea SSH 公開鍵の登録

必要な指定をしたら「キーを追加」をクリックすると、「SSH キーの管理」の項目に登録した公開鍵の情報が表示されます。

/images/20240210_gitea_win/win-gitea-10.png
Gitea 「SSH / GPG キー」のページ

Windows サービスへ登録するための事前設定

Windows 版 Gitea のインストールが済んだら、Windows サービスへ登録するための事前設定をします。

設定にあたって、コンピュータ名の確認が必要です。Git Bash で確認するには echo コマンドを使って環境変数の ${COMPUTERNAME} を表示します。

User@WinDev2401Eval MINGW64 ~
$ echo ${COMPUTERNAME}
WINDEV2401EVAL

Git Bash からメモ帳を起動して /c/gitea/custom/conf/app.iniC:\gitea\custom\conf\app.ini)ファイルを編集します。

notepad /c/gitea/custom/conf/app.ini

ここで変更が必要なのは、RUN_USER です。これに <コンピュータ名>$ を指定します。また、[server]SSH_USER がインストール時に使ったアカウントのユーザー名となっていることを確認します。

今回の Windows 評価版では、コンピュータ名が WINDEV2401EVAL で、ユーザーが User となっています。そのため、Gitea の app.ini については、次のようになります。

app.ini(抜粋)
RUN_USER = WINDEV2401EVAL$
(略)
[server]
(略)
SSH_USER = User
(略)

なお、app.ini ファイルのサンプルは GitHub の gitea/custom/conf/app.example.ini にあります。さらにカスタマイズをしたい場合は、そちらも参考にすると良いでしょう。

設定を変更したら、それを反映するために Ctrl+C で gitea コマンドを終了させます。それから、今度は --install-port をつけないで起動します。

/c/gitea/gitea web

Windows 版 Gitea の動作確認とサービスへの登録

ここまでの作業で Windows 版 Gitea が使えるようになったので、動作を確認してからサービスへ登録します。動作確認としては、リポジトリのクローンについて HTTP と SSH の両方で試してみます。ただし、SSH クローンについては、もう少し設定の追加が必要です。

Gitea へ user001 のアカウントでサインインして、新規にリポジトリ proj を作成してから、Git Bash でクローンを実行します。

Gitea で新規リポジトリ作成

最初にリポジトリを作成してみましょう。サインインした後の画面で右上にある「+」をクリックすると表示されるメニューで「新しいリポジトリ」をクリックします。

新しいリポジトリを作成する画面が表示されるので、リポジトリ名を入力します。また、「公開/非公開」の欄はチェックをいれてプライベートなリポジトリとします。設定を間違えて Git リポジトリ管理システムが他のマシンからも参照できる状態となってしまったとしても、このように指定しておけば公開されません。

ここではリポジトリ名に「proj001」を指定することにします。さらに「リポジトリの初期設定」の欄もチェックします。こうしておくと、Git リポジトリを使うときによく用意されるファイルが自動で作られます。

それから「リポジトリを作成」をクリックすると、リポジトリが作成され、画面の URL は http://localhost:13000/user001/proj001 へ遷移します。

リポジトリの URL は HTTP 版は http://localhost:13000/user001/proj001.git となります。この URL を使った Git クローンの方はできるようになっています。

なお、リポジトリの URL を SSH とすると git@localhost:user001/proj001.git となります。

Windows 版 Gitea でリポジトリのクローン

それでは、Windows 版 Gitea でリポジトリのクローンをしてみましょう。Git Bash で git コマンドを使って HTTP の URL でリポジトリをクローンします。

git clone http://localhost:13000/user001/proj001.git

これで Gitea のリモートリポジトリ http://localhost:13000/user001/proj001.git と連携する proj001 ディレクトリーが作成されて、Git リポジトリが使えるようになるはずです。

Gitea のリポジトリを SSH クローンするための設定

次に Windows 版 Gitea でリポジトリの SSH クローンができるようにします。

Gitea 用に用意したキーペアのうち、~/.ssh/id_ed25519_gitea.pub ファイルの内容を使って command= のテキストを作成し、それを /c/ProgramData/ssh/administrators_authorized_keys(一般ユーザーの場合は ~/.ssh/id_ed25519_gitea.pub) ファイルへ追加します。

例えば、~/.ssh/id_ed25519_gitea.pub ファイルの内容が次のようになっていたとします。

id_ed25519_gitea.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8y1Xi6eEBXD2L4WPz9Kyp/MFYEtOt8rJJ0q5u/Z402 User@Win11Eval

次に、追加するテキストを作成します。最初に command= の行を追加します。command の内容は次になります。

copmmand="C:\gitea\gitea.exe --config=C:\gitea\custom\conf\app.ini serv key-1"

他にも設定がいくつか必要で、先程の内容へ , をつけて、続けて下記の指定もします。この指定内容は Gitea の公式ドキュメントに説明があるものをそのまま使っています。

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict <公開鍵の内容>

テキストが用意できたら、コピーします。管理者でメモ帳を起動し、/c/ProgramData/ssh/administrators_authorized_keys に対応する C:\ProgramData\ssh\administrators_authorized_keys を開き、すでに登録済みの ssh-ed25519 AA(略)33 User@Win11Eval-win の前に command=(略) の内容をペーストして保存します。一般ユーザーの場合はメモ帳を起動し C:\User\<ユーザーID>\.ssh\authorized_keys を編集します。

これで administrators_authorized_keys(または authorized_keys)は次の内容となります。

administrators_authorized_keys
command="C:\gitea\gitea.exe --config=C:\gitea\custom\conf\app.ini serv key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,no-user-rc,restrict ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ8y1Xi6eEBXD2L4WPz9Kyp/MFYEtOt8rJJ0q5u/Z402 User@Win11Eval
ssh-ed25519 AA(略)33 User@Win11Eval-win

administrators_authorized_keys (一般ユーザーの場合は authorized_keys)の用意が出来たら、SSH クローンのための準備はおしまいです。

Windows 版 Gitea でリポジトリの SSH クローン

以上の準備ができたら Git Bash から接続確認をしてみましょう。すでに HTTP の URL でクローンしたリポジトリがある場合は削除してから実行します。

rm -fr proj001

SSH で使用する秘密鍵ファイルを指定して git コマンドを実行する必要があるので、SSH でクローンする場合は次のようなコマンドになります。

git clone -c "core.sshCommand=ssh -i ~/.ssh/id_ed25519_gitea -F /dev/null" \
  ssh://User@localhost/user001/proj001.git

これで、SSH クローンができるはずです。

Windows サービスで Gitea 自動起動

動作確認が出来たので、Windows サービスで Gitea が自動起動するように設定しましょう。Gitea を起動している場合は Ctrl+C で停止しておきましょう。

Windows サービスで Gitea が自動起動するように設定するには sc.exe コマンドを使います。実行にあたっては、「管理者として実行するコマンドプロンプト」を使います。

それでは Git Bash から PowerShell コマンドで「管理者として実行するコマンドプロンプト」を開きましょう。

PowerShell -Command "Start-Process 'C:\Windows\System32\cmd.exe' -Verb RunAs"

Windows ターミナルのメニューから起動することも出来ます。

/images/20240210_gitea_win/gitea-service-01.png
Windows ターミナルからコマンドプロンプトを「管理者として実行する」メニュー

開いたコマンドプロンプトの画面で、次のコマンドを実行します。

sc.exe create gitea start= auto ^
  binPath= "\"C:\gitea\gitea.exe\" web --config \"C:\gitea\custom\conf\app.ini\""

実際に実行したときの画面は次のようになります。こちらではコマンドを1行で実行しています。

/images/20240210_gitea_win/gitea-service-02.png
Windows サービスで Gitea が自動起動するコマンドの実行

これで、Windows サービスに Gitea が登録されて、自動起動するようになります。

Windows サービスについて確認するには、Windows のサービスアプリを使います。これを起動するには、Windows のエクスプローラーで C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\ を開くと一覧に表示される「サービス」をクリックします。

Git Bash で explorer コマンドを使って、この場所を Windows エクスプローラーで開いてから、「サービス」をクリックしても良いです。

explorer "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools\"

サービスアプリでの gitea の表示は次のようになります。

/images/20240210_gitea_win/gitea-service-03.png
サービスに登録された gitea

登録直後はサービスが開始されていません。マウス右クリックで表示されるコンテキストメニューの「開始」をクリックすると、サービスが開始され、Windows 版 Gitea が起動します。

/images/20240210_gitea_win/gitea-service-04.png
gitea サービスの開始

ちなみに、Windows サービスから Gitea を解除する場合は次のコマンドを実行します。

sc.exe delete gitea

ファイアウォールの確認

OpenSSH Server と Gitea について、ファイアウォールの設定を確認します。どちらも localhost で使えれば良いのでファイアウォールで許可するアプリからは解除しておきます。なお、OpenSSH Server については、外部のマシンからログインできるようにしたい場合は、使うときだけ許可すれば良いでしょう。

アプリケーションに対してファイアウォールの確認や許可をするには「ファイアウォールによるアプリケーションの許可」の画面を使います。

この画面を表示するには、まずは「ファイアウォールとネットワーク保護」の画面を開きます。「ファイアウォールとネットワーク保護」の画面は、Windows の設定アプリで、「プライバシーとセキュリティ」-「Windows セキュリティ」-「ファイアウォールとネットワーク保護」をクリックすると表示できます。

/images/20240210_gitea_win/win-fw-sec.png
「Windows セキュリティ」の画面

次に、この画面にある「ファイアウォールによるアプリケーションの許可」をクリックします。

/images/20240210_gitea_win/win-fw.png
「ファイアウォールとネットワーク保護」の画面

すると、「ファイアウォールによるアプリケーションの許可」の画面が表示されます。

まず、OpenSSH Server について確認しておきましょう。OpenSSH Server については、他のマシンからリモートログインして使うなら、そのままにしておきます。使用する予定がないなら、「設定の変更」をクリックしてから、OpenSSH Server の行のチェックをすべてはずしてから「OK」をクリックして保存します。

/images/20240210_gitea_win/win-fw-gitea-02.png
ファイアウォールでの OpenSSH Server の設定

次に gitea について確認しておきましょう。名前の欄にチェックがなければ、ファイアウォール通過を許可しないということになるので大丈夫です。

/images/20240210_gitea_win/win-fw-gitea-02.png
ファイアウォールでの gitea の設定

ちなみに、gitea を他のマシンからも使えるように有効にしたい場合は、ファイアウォール通過を許可すれば良いので次のようにします。ただし、現状だと localhost の URL でサービスを提供しているため、実質的に他のマシンからは使えません。

/images/20240210_gitea_win/win-fw-openssh-server.png
gitea のファイアウォール通過用の設定

これで Gitea for Windows の試用環境を構築する方法についての説明はおしまいです。個人で日常的に使用している Windows マシンで使うということなら、これで十分でしょう。これを使って、ファイルのバージョン管理をしてみると良いでしょう。

あと、そろそろ,Git Bash にも慣れてきたのではないでしょう。Bash に慣れてきたら、Linux 使いに一歩近づいたことになります。

なお、本格的に使う場合は、今回紹介した設定以外に、https://gitea.example.jp のような URL でアクセスできるように、HTTPS の設定や名前解決のための設定が必要となります。また、DB も SQLite よりも本格的な PostgreSQL や MariaDB といったものを設定して連携させることになります。

Linux に慣れていると、Windows で Git リポジトリ管理システムを稼働させる設定を完了するまでに GUI も使いながらとなるので、結構大変だという印象です。本格的に使うとなると、別マシンで環境構築したくなることでしょう。そういった場合は別途 Windows マシンを購入するより、Linux マシンで構築して使うのが安価で済みます。構築のためのスキルを身につけるための時間は余計にかかりますが、そのスキルはソフトウェア開発を続けるなら、どこかで役に立つようになります。

Discussion