# このフォークから本家版に移行する

## サーバーに Firefish を直接インストールしている場合

1. サーバーのバックアップを取る
2. サーバーを停止する

    ```bash
    sudo systemctl stop firefish
    ```

3. Firefish がインストールされているディレクトリ (e.g., `/home/firefish/firefish`) へ移動する

    ```bash
    cd /home/firefish/firefish
    ```

4. 最新版にアップデートする

    ```bash
    ./update.sh
    ```

5. `.config/default.yml` に書かれているデータベースの名前を確認する(以下の例では `firefish_db`)

    ```yaml
    db:
      host: localhost
      port: 5432
      db: firefish_db  # これ
    ```

6. 次のコマンドでデータベースをいじる前に、そのコマンドが正常に動作するか確認する(`firefish_db` の部分は自分のデータベース名に変更する)

    ```bash
    printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)" | sudo -u postgres psql --echo-all --set='ON_ERROR_STOP=1' --dbname=firefish_db
    ```

    最後の行が `ROLLBACK` で終わっていれば問題ありません。そうでない場合には[私にコマンドの実行ログを送ってください](https://code.naskya.net/naskya/firefish/source-by/main/docs/trouble_shooting.md#私にコマンドの実行ログを送る)。

7. このフォークで加えられたデータベースへの変更を実際に取り消す(`firefish_db` の部分は自分のデータベース名に変更する)

    ```bash
    sudo -u postgres psql --file=neko/revert.sql --dbname=firefish_db
    ```

8. PGroonga をアンインストールする

    コマンドの例

    ```bash
    sudo apt purge --remove postgresql-16-pgdg-pgroonga
    sudo add-apt-repository --remove ppa:groonga/ppa
    sudo apt-key del ACCC4CF8
    sudo apt update
    ```

9. Firefish がインストールされているディレクトリの親ディレクトリ (e.g., `/home/firefish`) に行く

    ```bash
    cd ..
    ```

10. Firefish がインストールされているディレクトリ (e.g., `./firefish`) の名前を変える

    ```bash
    mv firefish firefish.old
    ```

11. Firefish がインストールされているディレクトリと同じ名前で本家版の Firefish を clone する

    ```bash
    git clone https://git.joinfirefish.org/firefish/firefish.git firefish
    ```

12. 必要なファイルをコピーする

    ```bash
    rm -rf firefish/files firefish/custom firefish/.config
    cp -r firefish.old/files firefish
    cp -r firefish.old/custom firefish
    cp -r firefish.old/.config firefish
    ```

13. 新しい Firefish のディレクトリ (e.g., `./firefish`) に入り、`develop` ブランチに行く(実際には既に `develop` にいるはず)

    ```bash
    cd firefish
    git checkout develop
    ```

14. Firefish をビルドする

    ```bash
    corepack prepare pnpm@latest --activate
    pnpm install
    NODE_ENV=production pnpm run build
    pnpm run migrate
    ```

15. サーバーを起動して動作を確認する

    ```bash
    sudo systemctl start firefish
    ```

16. 元々 Firefish がインストールされていたディレクトリを削除する

    ```bash
    cd ..
    rm -rf firefish.old
    ```

## コンテナで Firefish を動かしている場合

Docker を使う場合には以下の `podman`, `podman-compose`, `--podman` をそれぞれ `docker`, `docker-compose`, `--docker` に読み替えてください。

1. サーバーのバックアップを取る
2. Firefish がインストールされているディレクトリ (e.g., `/home/firefish/firefish`) へ移動する

    ```bash
    cd /home/firefish/firefish
    ```

3. 最新版にアップデートする

    ```bash
    ./update.sh --podman
    ```

4. 一度サーバーを再起動し、自分のサーバーが起動したことを Web から確認したら再度停止してデータベースのコンテナのみを起動する

    ```bash
    podman-compose down
    podman-compose up --detach
    # 少し待って、サーバーが起動したことを確認する
    podman-compose down
    podman-compose up db --detach
    ```

5. `.config/docker.env` に書かれているユーザー名とデータベース名を確認する(以下の例では `firefish_db`)

    ```env
    # db settings
    POSTGRES_PASSWORD=very_strong_password
    POSTGRES_USER=firefish   # これがユーザー名
    POSTGRES_DB=firefish_db  # これがデータベース名
    ```

6. 次のコマンドでデータベースをいじる前に、そのコマンドが正常に動作するか確認する(`firefish` と `firefish_db` の部分は自分のユーザー名とデータベース名に変更する)

    ```bash
    podman-compose exec db psql --user=firefish --dbname=firefish_db --echo-all --set='ON_ERROR_STOP=1' --command="$(printf 'BEGIN;\n%s\nROLLBACK;' "$(cat neko/revert.sql)")"
    ```

    最後の行が `ROLLBACK` で終わっていれば問題ありません。そうでない場合には[私にコマンドの実行ログを送ってください](https://code.naskya.net/naskya/firefish/source-by/main/docs/trouble_shooting.md#私にコマンドの実行ログを送る)。

7. このフォークで加えられたデータベースへの変更を実際に取り消す(`mk1` の部分は自分のデータベース名に変更する)

    ```bash
    podman-compose exec db psql --user=firefish --dbname=firefish_db --command="$(cat neko/revert.sql)"
    ```

8. Firefish がインストールされているディレクトリの親ディレクトリ (e.g., `/home/firefish`) に行く

    ```bash
    cd ..
    ```

9. Firefish がインストールされているディレクトリ (e.g., `./firefish`) の名前を変える

    ```bash
    mv firefish firefish.old
    ```

10. Firefish がインストールされているディレクトリと同じ名前で本家版の Firefish を clone する

    ```bash
    git clone https://git.joinfirefish.org/firefish/firefish.git firefish
    ```

11. 必要なファイルをコピーする

    ```bash
    rm -rf firefish/files firefish/custom firefish/.config
    cp -r firefish.old/files firefish
    cp -r firefish.old/custom firefish
    cp -r firefish.old/.config firefish
    ```

12. 新しい Firefish のディレクトリ (e.g., `./firefish`) に入る

    ```bash
    cd firefish
    ```

13. サーバーを起動して動作を確認する

    ```bash
    podman-compose up --detach
    ```

    `docker-compose.yml` にカスタムが必要な場合には、各自で編集してください。

14. 元々 Firefish がインストールされていたディレクトリを削除する

    ```bash
    cd ..
    rm -rf firefish.old
    ```