Open6
Synology DS223にForgejoをインストールしたい会

まぁDockerとか入ってるし簡単でしょ多分。

イメージの取得
DSMからやる方法はわからなかったのでコマンドラインで。。 sudo su
して、
ash-4.4# docker pull codeberg.org/forgejo/forgejo:11
この方法で取得しても、ちゃんとDSMのContainer managerに表示される。

コンテナの作成
/data
にファイルを見せればOK。

Oktaで認証させたい
Oktaのadmin consoleで新しいアプリ統合を用意して、OpenID Connect な Webアプリを指定する:
- サインインリダイレクトURI:
http://<Forgejo側のIPアドレスとポート>/user/oauth2/適当に何か文字列/callback
-- 設定の下部に書かれている (★Forgejoに認証ソースを登録してから再度設定する) - "Organizationの全員にアクセスを許可" -- 別に後からアサインしても良いけど。。
登録すると、クライアントシークレット等が発行される。Forgejoに戻って、新しい認証ソースを追加する:
- 認証タイプ: OAuth2
- 認証名: 適当に何か文字列 ★ これを入れないとForgejoに表示されるcallback URLが正常に埋まらない
- OAuth2プロバイダー: OpenID Connect
- クライアントID と クライアントシークレットはOktaが発行したもの
- OpenID Connect自動検出URL: https://<テナント名>.okta.com/.well-known/openid-configuration
これで、ForgejoのサインインページにOktaが追加されて、サインインできるようになる。
他のOpenID Connectプロバイダでも同様に設定できるはず。

Git Credential Managerへの登録
Forgejoは最初からGCMや git-credential-oauth
をサポートしている。
$ git config --global credential.<ForgejoのURL>.oauthClientId e90ee53c-94e2-48ac-9358-a874fb9e0662
$ git config --global credential.<ForgejoのURL>.oauthAuthorizeEndpoint "/login/oauth/authorize"
$ git config --global credential.<ForgejoのURL>.oauthTokenEndpoint "/login/oauth/access_token"
... これは Windowsだと上手く動かなかった 。
oauthTokenEndpoint = C:/Program Files/Git/login/oauth/access_token
みたいにパス展開されてしまう。手動で .gitconfig
に
[credential "<ForgejoのURL>"]
oauthClientId = e90ee53c-94e2-48ac-9358-a874fb9e0662
oauthAuthorizeEndpoint = /login/oauth/authorize
oauthTokenEndpoint = /login/oauth/access_token
と書いた方が良いんだろう多分。
あと、なんか動かないと思ったら手元のGCMが超古かった:
$ git-credential-manager version
Git Credential Manager for Windows version 1.20.0

Conan2レジストリへのログイン
ドキュメントは古いので使えない。
トークンの発行
2要素認証を使っている場合はパスワードは使えないのでトークンを発行する。アプリケーション → アクセストークンで "許可の選択" から package
を "読み取りと書き込み" にしたトークンを生成させる。生成したトークンは画面に一度だけ表示されるので、それをパスワードマネージャーなりなんなりに突っ込んでおく。
リモートの追加
まず、 remote add <リモート名>
のようにしてremoteを追加する。
conan remote add local https://<Forgejoのホスト名>/api/packages/okuoku/conan
その後、 login
コマンドでログインする。
conan remote login local okuoku
パスワードとして発行したトークンを入力する。