軽量な Github クローン Gitea の Archlinux への導入備忘録

# 基本手順
## パッケージからのインストール
### 概略
pacman にてインストール、systemd から起動、web から初期設定、(管理)ユーザー登録、systemd 自動起動への登録と進みます。
### 実行
```bash
$ sudo pacman -S gitea tea ＃公式関連ツールの tea も同時にインストールするのがお勧め。
$ pacman -Ql gitea
gitea /etc/
gitea /etc/gitea/
gitea /etc/gitea/app.ini
gitea /usr/
gitea /usr/bin/
gitea /usr/bin/gitea
gitea /usr/lib/
gitea /usr/lib/systemd/
gitea /usr/lib/systemd/system/
gitea /usr/lib/systemd/system/gitea.service
gitea /usr/lib/sysusers.d/
gitea /usr/lib/sysusers.d/gitea.conf
gitea /usr/lib/tmpfiles.d/
gitea /usr/lib/tmpfiles.d/gitea.conf
gitea /usr/share/
gitea /usr/share/licenses/
gitea /usr/share/licenses/gitea/
gitea /usr/share/licenses/gitea/LICENSE
$ cat /usr/lib/systemd/system/gitea.service
#cat の結果は一部抜粋
User=gitea #公式リポジトリでインストールすると gitea ユーザーとグループで設定される。
#gitea 公式ドキュメントでは git ユーザーのため読み替えと関連部分の変更が必要となる。 
Group=gitea
Environment=USER=gitea HOME=/var/lib/gitea GITEA_WORK_DIR=/var/lib/gitea
ExecStart=/usr/bin/gitea web -c /etc/gitea/app.ini #設定ファイルは /etc/gitea/app.ini。
$ ls -l /etc/gitea
-rw-rw---- 1 root gitea 108763 Nov 22 20:20 app.ini
$ sudo -u gitea cat /etc/gitea/app.ini #公式手順では推奨されていないが直接編集も可能。
$ sudo systemctl start gitea
$ sudo systemctl status gitea #シェルにエラー表示を返してくれないため。
$ xdg-open http://localhost:3000 #もしくは任意のブラウザー、デフォルトポートは3000。
#初回は初期設定画面に飛ぶ、初期設定せずに放置するのはセキュリティリスク。
#折り畳まれた部分に最初のユーザー登録があり、最初に登録したユーザーは自動で Admin 権限を持つ。
#下に参考画像掲載。
$ sudo -u gitea gitea admin user create --username hoge --email fuga@piyo.com --admin --random-password #WEBで登録した場合には不要。
generated random password is 'HOGEHOGE'
New user 'hoge' has been successfully created!
$ sudo -u gitea gitea admin user list
ID   Username Email         IsActive IsAdmin 2FA
1    hoge     fuga@piyo.com true     true    false
$ sudo -u gitea gitea doctor check --all #簡易セキュリティチェック
$ sudo systemctl enable gitea
```
![初期設定画面参考画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/476309/9ced0f31-5428-63e1-447b-0f269d583da0.jpeg)
初期設定画面の参考画像。

### 補足
参考までに [公式手順へのリンク](https://docs.gitea.com/installation/install-from-package) も載せておきます。公式ではインストール前に [データベースの用意](https://docs.gitea.com/installation/database-prep) がありますが、基本的には sqlite3 か既に動作させているデータベースサーバーの利用で足りるかと考え紹介は省略します。
~~ユーザーの Admin 権限の変更関係のドキュメントとソースが発見できない、おそらく存在しない。既に作成済でリポジトリ等を所持しているユーザーの権限昇降に困る。インストール完了後の初期設定周辺の公式ドキュメントが存在しない。~~


## ユーザーログインからリポジトリ作成
### Webからの利用
ブラウザーで設定したサーバーとポート、デフォルトは http(s)://localhost:3000 に接続して下さい、基本的に github と同じ感覚で使えます。

### CLIからの利用
#### API用トークンの取得
WEB の settings → applications → Manage Access Tokensから取得可能です。スコープについては [公式ドキュメント](https://docs.gitea.com/administration/command-line#admin) 参照。
CLIから取得したい場合は下記等です。[API利用の公式ドキュメント](https://docs.gitea.com/next/development/api-usage) が存在します。~~ドキュメント通りにやったら access token must have a scope エラーで初っ端から動作せず、ソースを読んで解決するはめに。~~

```bash
# gitea admin サブコマンド利用
$ sudo -u gitea gitea admin user generate-access-token --username hoge --token-name FUGA --scopes all
Access token was successfully created: HOGETOKEN

# curl による API利用
$ curl -H "Content-Type: application/json" -d '{"name":"[TOKENNAME]" , "scopes" : ["all"]}' -u [USERNAME]:[PASSWORD] http://localhost:3000/api/v1/users/[USERNAME]/tokens #scopesは配列
{"id",HOGE,"name":"[TOKENNAME]","sha1":"HOGETOKEN","token_last_eight":"PIYO","scopes":["all"]}
```

#### リポジトリ作成
##### 公式手順 curlからの利用
```bash
$ curl "http://localhost:3000/api/v1/user/repos" -H "accept: application/json" -H "Authorization: token HOGETOKEN" -H "Content-Type: application/json" -d "{ \"name\": \"FUGA\" , \"private\" : true }"
```
他のAPIについては 自サーバーの /api/swagger もしくは [公式のAPIドキュメント](https://gitea.com/api/swagger) をブラウズすれば curl によるコマンド例等も出してくれます。~~表示されるコマンド例にはブラウザでの表示という仕様上の制限があるので参考程度です。~~ 基本的には非公式のツールを導入した方が簡便でしょう。

##### 非公式ツールからの利用
[gitea-cli](https://github.com/bashup/gitea-cli)は最終更新こそ古いですが、bashスクリプトのため変更しやすく、プラグイン機能も存在するため拡張も容易です。
```bash
$ wget -O getea-cli https://raw.githubusercontent.com/bashup/gitea-cli/refs/heads/master/bin/gitea
$ chmod u+x gitea-cli
$ vi $HOME/.config/gitearc #GITEA_USER=HOGE GITEA_URL=http://localhost:3000 GITEA_API_TOKEN=HOGETOKEN を三行で書きます。もしくは環境変数として設定しても機能します。
$ ./gitea-cli --description "FUGA" --private new HOGE #リポジトリ作成
```
他にもリポジトリの作成は[grp](https://github.com/feraxhp/grp)~~ドキュメント未整備。ソースに文字列がハードコードされてるのも疑問。https前提でローカルでの運用が面倒。~~ や [gcli](https://github.com/herrhotzenplotz/gcli)~~ドキュメント未整備、ついでにソースの異常検出等が気に入らない、[Valgrindは日常的に利用しましょう。](https://github.com/herrhotzenplotz/gcli/issues/122)~~ 等がありますが、個人的には使用していません。

## issue関連
### Web
ほぼ github感覚で利用できます。

### CLI
giteaチーム作成の [tea](https://gitea.com/gitea/tea)を推奨します。要は gh コマンドです。

```bash
$ tea help

   tea - command line tool to interact with Gitea
   version Version: 0.9.2  golang: 1.20.1

 USAGE
   tea command [subcommand] [command options] [arguments...]

 DESCRIPTION
   tea is a productivity helper for Gitea. It can be used to manage most entities on
   one or multiple Gitea instances & provides local helpers like 'tea pr checkout'.
   
   tea tries to make use of context provided by the repository in $PWD if available.
   tea works best in a upstream/fork workflow, when the local main branch tracks the
   upstream repo. tea assumes that local git state is published on the remote before
   doing operations with tea.    Configuration is persisted in $XDG_CONFIG_HOME/tea.

 COMMANDS
   help, h  Shows a list of commands or help for one command
   ENTITIES:
     issues, issue, i                  List, create and update issues
     pulls, pull, pr                   Manage and checkout pull requests
     labels, label                     Manage issue labels
     milestones, milestone, ms         List and create milestones
     releases, release, r              Manage releases
     times, time, t                    Operate on tracked times of a repository's issues & pulls
     organizations, organization, org  List, create, delete organizations
     repos, repo                       Show repository details
     comment, c                        Add a comment to an issue / pr
   HELPERS:
     open, o                         Open something of the repository in web browser
     notifications, notification, n  Show notifications
     clone, C                        Clone a repository locally
   MISCELLANEOUS:
     whoami    Show current logged in user
     admin, a  Operations requiring admin access on the Gitea instance
   SETUP:
     logins, login                  Log in to a Gitea server
     logout                         Log out from a Gitea server
     shellcompletion, autocomplete  Install shell completion for tea

 OPTIONS
   --help, -h     show help (default: false)
   --version, -v  print the version (default: false)

 EXAMPLES
   tea login add                       # add a login once to get started

   tea pulls                           # list open pulls for the repo in $PWD
   tea pulls --repo $HOME/foo          # list open pulls for the repo in $HOME/foo
   tea pulls --remote upstream         # list open pulls for the repo pointed at by
                                       # your local "upstream" git remote
   # list open pulls for any gitea repo at the given login instance
   tea pulls --repo gitea/tea --login gitea.com

   tea milestone issues 0.7.0          # view open issues for milestone '0.7.0'
   tea issue 189                       # view contents of issue 189
   tea open 189                        # open web ui for issue 189
   tea open milestones                 # open web ui for milestones

   # send gitea desktop notifications every 5 minutes (bash + libnotify)
   while :; do tea notifications --mine -o simple | xargs -i notify-send {}; sleep 300; done

 ABOUT
   Written & maintained by The Gitea Authors.
   If you find a bug or want to contribute, we'll welcome you at https://gitea.com/gitea/tea.
   More info about Gitea itself on https://gitea.io.

$ tea login add --url="http://localhost:3000" --token=HOGETOKEN #tea login add のみで対話型インターフェイスが利用可能です。tokenを与えずBasic認証しようとするとスコープ指定エラーが出ます。
$ tea login
+------+-----------------------+-----------+------+---------+
| NAME |          URL          |  SSHHOST  | USER | DEFAULT |
+------+-----------------------+-----------+------+---------+
| HOGE | http://localhost:3000 | localhost | FUGA | false   |
+------+-----------------------+-----------+------+---------+
$ tea login HOGE
$ tea issues
$ tea issues --help
```

# その他諸々
他の関連ツールは[Awesome Gitea](https://gitea.com/gitea/awesome-gitea)あたりから探すのが早いです。
git push でのリポジトリ作成には /etc/gitea/app.ini の[repository]欄に ENABLE_PUSH_CREATE_USER = true 並びに ENABLE_PUSH_CREATE_ORG = true を追記します。

# TODO
CIDI用の act_runner 記事、変態変態変態向けの rootless 記事追加。
前書きにgitea紹介とDevOps環境の必要性を追加、紹介記事に変更。