WPP
Forgejo をアップグレードした

以前も書いたかもですが、自宅 Synology NAS では Forgejo が git サーバとして動作しています。

どうもアタックされていたようで知らないユーザが作成されていました。とはいえ不思議なことにそれ以外の被害はなさそうです。Dockerコンテナで動かしていたので、それ以上何もできなかったのかもしれません。

Forgejo のバージョンも 7 となっていて公式を確認すると随分遅れてしまっています。これを機に復旧がてらアップグレードしました。

復旧作業

もともと永続化データをNASのディレクトリに逃がしているので、復旧にあたっては、作成されたゴミユーザーを消してコンテナを新たに作成すればきれいな状態で再開することができそうです。

  1. NASのコンテナマネージャを開き Forgejo のコンテナを選択する
  2. ターミナルを開き、bash コンソールを起動する
  3. 以下のコマンドで不要なユーザーを削除する
# su - git
$ forgejo admin user list  ; 不要なユーザーの ID を確認する
$ forgejo admin user delete --purge -id 1234

不要な設定の無効化

確認はしていませんが、当初インストールしたときにはコンテナイメージの設定をいじらなかったと思うのですがどうもオンラインサインアップ機能が生きているので攻撃者がユーザを作成できる状態なようです。

設定を変更してオンラインサインアップ機能を無効化します。

設定はファイルはコンテナ内の /data/gitea/conf/app.ini にあります。

NAS 側から編集してもいいですし、コンテナ内にコンソールで入って編集してもいいです。

DISABLE_REGISTRATON が false になっているので true に変更します。

DISABLE_REGISTRATION = true

そうすると、ログイン画面にユーザーサインアップのリンクが消えるはずです。

ユーザーを追加するには、管理者でログインして、管理者が追加すれば OK です。

Forgejo のアップグレード

参考リンクの公式によると、バージョンは1つずつアップグレードしろってことなので 8 > 9 > 10 > 11 と四回アップグレードする必要があるみたいです。

NAS上の dokcker-compose.yml を変更していきます。

  1. コンテナマネージャからプロジェクトを選択します。
  2. プロジェクト名を選択して、YAML Configuration タブにすすみます。

以下のような要領で書き換えます。

container_name は書き換えなくてもいいのですが、コンテナタブで表示されるとすぐに変更されたことがわかるので変えています。

この設定は、sysnlogy NAS に限らず docker-compose 使っていれば同じですね。

version: '3'

networks:
  forgejo:
    external: false

services:
  server:
    # :7 から :8 に変更した
    image: data.forgejo.org/forgejo/forgejo:8

    # forgejo7 を forgejo8 に変更した
    container_name: forgejo8
    environment:
      - USER_UID=1000
      - USER_GID=1000
    restart: always
    networks:
      - forgejo
    volumes:
      - /volume1/docker/forgejo:/data
      #- /etc/timezone:/etc/timezone:ro
      #- /etc/localtime:/etc/localtime:ro
    ports:
      - '8002:3000'
      - '8003:22'

バージョンを確認するには、コンテナマネージャからコンソールを起動して確認することができます。

# foegejo --version 
 目的のメジャーバージョン番号が表示される

上で書いたようにバージョンを一気に飛ぶことができないので、必要な回数繰返して終了。

参考

Installation with Docker | Forgejo – Beyond coding. We forge.

VSCode で g++ を使うための設定

他のページもちらほら見つかるが自分的最小メモを残しておく。

VSCode には予め CMake Tools のエクステンションをインストールしておく。

そして VSCode 上でステップ実行(デバッグ)するために 2 つの設定ファイルを作成 (編集)する必要があります。

tasks.json でビルド方法を定義し、launch.json でデバック起動方法を定義します。

CMake extensionの設定

CMake がインストールされていると VSCode の左下のほうに CMake .. のような表示が出てくるのでそこをクリックして、コンパイラを選択します。

tasks.json の設定

task.json ではビルドコマンドを定義します。なのでここでは、cmake を使ったビルド環境に合わせて調整します。

プロジェクトのフォルダに .vscode フォルダがあるはずなのでその中の tasks.json を編集します。

CTRL + SHIFT + P を押して tasks: Configure task などを選んで設定を追加します。

{
    "tasks": [
        {
            "label": "CMake: build",
            "type": "shell",
            "command": "/usr/bin/cmake",
            "args": [
                "--build",
                "${workspaceFolder}/build",
                "--config",
                "Debug"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": [
                "$gcc"
            ],
            "detail": "Task generated by CMake Tools."
        }
    ],
    "version": "2.0.0"
}

“label” は表示される名前なので好きな感じにして OK です。
“command” と “args” でコマンドラインを組み立てます。ソースと同じディレクトリで実行するなら
`cmake –build ./build –config Debug` というコマンドになります。
ビルドディレクトリを変えたければ “${workspaceFolder}/build” を変更します。

tasks.json を設定しても、VSCode の Run メニューとかでは実行できないようです。どうしたら実行できるのかは後で調べる。

launch.json の設定

launch.json では VSCode の デバッグタブ? (左端の Run & Debug) で上部に表示できるデバッグ時の起動方法を設定する。

デバッグタブのギヤアイコンをクリックすると設定を追加できる。

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "CMake Debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${command:cmake.launchTargetPath}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [
                {
                    "name": "PATH",
                    "value": "S{env:PATH}",
                    // "name": "LD_LIBRARY_PATH",
                    // "value": "/usr/local/cuda-11.8/lib64:/usr/local/cuda-11.8/lib64/stubs:/usr/local/cuda-11.8/targets/x86_64-linux/lib"
                }
            ],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb.",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "CMake: build"
        }
    ]
}

launch.json はきほんそのままで動くみたいだが、
“environment” に PATH や LD_LIBRARY を追加すると
`PATH=xxx LD_LIBRARY [ビルドしたプログラム]`
のように起動することになるらしい。

これで次回からも設定に戸惑わなくなりそう。