Homebrew環境におけるGiteaのエクスポート:brew services start giteaとgitea webの違いがわかる男

なんか色々躓いたので、復元は後日にして、今回はエクスポートについてのみ。なんか色々ハマった。

具体的には、最初に gitea web で動かして、その後 brew services start giteaのほうがいいやんけと思ってそっちにしたんだが、その後バックアップ手順を確認しようと gitea dumpしたら、なぜか最初に gitea web で作ったほうがバックアップされる。よく見たら実行プログラムのパスが違っており、それによって読み込まれる設定ファイルが違ったと思われる。

目次

環境

  • M2 Pro Mac mini, Intel Mac mini 2018
  • macOS 14.7.7 (Sonoma)
  • gitea 1.24.5 (via brew)
  • brew services start giteaで起動

giteaが分裂した。

公式: Backup and Restore | Gitea Documentation

公式にあるとおり、エクスポートはコマンドが用意されており、 gitea dump -c /path/to/app.iniに尽きる。ただここで問題は、 gitea のパスとコンフィグファイルのパスである。

たとえばコイツを見てくれ。コイツをどう思う?

> ps aux | grep -i gitea
user       19745   0.7  0.5 412867040 168992   ??  S     7:38PM   0:00.56 /opt/homebrew/opt/gitea/bin/gitea web --work-path /opt/homebrew/var/gitea

> which gitea
/opt/homebrew/bin/gitea

すごく……パスが違います……。

giteaコマンドは /opt/homebrew/bin/giteaなんだが、brewで起動する gitea/opt/homebrew/opt/gitea/bin/giteaという。

ただ、こいつらはバイナリとしては同じ臭い。

> ls -la /opt/homebrew/bin/gitea 
/opt/homebrew/bin/gitea@ -> ../Cellar/gitea/1.24.5/bin/gitea
> ls -li /opt/homebrew/Cellar/gitea/1.24.5/bin/gitea
251898619 -r-xr-xr-x  1 user  admin  107386178 Aug 14 01:34 

> ls -la /opt/homebrew/opt/gitea/bin/gitea
/opt/homebrew/opt/gitea/bin/gitea*
> ls -li  /opt/homebrew/opt/gitea/bin/gitea
251898619 -r-xr-xr-x  1 user  admin  107386178 Aug 14 01:34 /opt/homebrew/opt/gitea/bin/gitea*

なので、実行プログラムのパスで、読み込まれる暗黙のコンフィグパスが異なったものと思われる。brewで起動した方は、--work-pathを指定しているね。ここにコンフィグファイルもある。

パスの違いがわかる男

ということで、work-pathも踏まえて、dumpのコマンドは以下となる。停止できるなら停止したほうが安全だね。

brew services stop gitea
gitea dump -c /opt/homebrew/var/gitea/custom/conf/app.ini
brew services start gitea

ファイル名に日付けを入れるなら

gitea dump -c /opt/homebrew/var/gitea/custom/conf/app.ini -f gitea-backup-$(date +%Y%m%d-%H%M%S).zip

こいつをunzipすると以下のような感じだ。

gitea-backup-YYYYMMDD-HHMMSS.zip
├── app.ini                 # 設定ファイル
├── data/                   # アプリケーションデータ
│   ├── attachments/        # 添付ファイル
│   ├── avatars/           # アバター画像
│   ├── gitea.db           # データベースファイル
│   └── ...
├── repos/                  # Gitリポジトリ
│   └── user/repo.git/     # 実際のGitリポジトリ
└── gitea-db.sql           # データベースダンプ

このうち、app.iniは違うマシンでやるときにはゴチャゴチャと手動調整しないといけなくなると思う。ネットワーク環境とか、リポジトリのパスとか、環境によって変わるはずなので。特にMacからLinux……とかやるとね。

所感

サクッとできるだろうと思ったら思いのほか躓いた。LLMは永遠に存在しないパスを教えてくれるので10倍疲れた。インフラ周りになると途端に無能になるLLMさんェ……。それでもいるだけマシだろうと言われたらそうかもしれないんだが、昔は検索したら同じようなところで躓いた人の記事が出たもんだけどなぁと思ってしまう。

まぁ今回は brew services あんまり使ったことなかったから、それでちょっとハマったよね。自分でplist作ったら問題なかったんだろうけど。

今回はMacかつHomebrew経由特有の問題があったので、Dockerコンテナなら環境の共通化は多少できると思う。けど、ネットワーク環境とかはやっぱり違うだろうし、 app.iniは同一マシンでの復元以外は基本的に編集しないといけないんじゃないかな。となると、編集項目が1箇所でも5箇所でも、編集しないといけない時点で大して変わらないし、Docker使うと docker-compose.ymlの管理もあるから、どっちがいいかはちょっとわかんないね。

疲れたので、復元はまた後日。

この記事をいいなと思っていただけた方、よければ高評価・チャンネル登録……はないので、コメント・SNSでシェア・ブックマーク、RSSフィード登録を、よろしくお願い致します。

コメント

コメントする

目次