コンテンツにスキップ

アップグレードと削除

アップグレードが置き換えるのは二つ — バイナリとサービスユニット — だけで、設定 と証明書には触れません。このページはそれを示し、コンテナでの同等の手順、版を 戻す必要があるときの手順、そして撤去を扱います。

パス アップグレード時
/etc/Pingclair/Pingclairfile 保持。インストーラは無いときだけ書きます。
/etc/Pingclair/Pingclairfile.example 現在の例に置き換わります。
/var/lib/pingclair/.local/share/pingclair 保持。発行済み証明書と ACME の状態はそのままです。
/var/lib/pingclair/html 保持。
/usr/local/bin/pingclairpc 新しいリリースに置き換わります。
/etc/systemd/system/pingclair.service 書き直され、サービスが再起動します。

⬆️ インストーラでアップグレードする

Section titled “⬆️ インストーラでアップグレードする”
ターミナルウィンドウ
curl -fsSL https://pingclair.com/install.sh | sudo bash

スクリプトは GitHub に最新リリースのタグを問い合わせ、表示し、アーカイブの SHA-256 を検証し、バイナリとユニットを置き換えてサービスを再起動します。既存の 設定ファイルには触れません。だからこれが初期化ではなくアップグレードになり ます。

Detected architecture: x86_64
Fetching latest release from dorianverlaine/pingclair...
Installing v0.2.0-rc.3 — a release candidate, not a final release.
pingclair-linux-x86_64.tar.gz: OK
✅ Installation Complete!
Config: /etc/Pingclair/Pingclairfile

新しい版と、以前の設定がまだ配信されていることを確認します。

ターミナルウィンドウ
pingclair version
pc service status
curl -i http://localhost/
v0.2.0-rc.3

インストーラは常に最新リリースを導入します。特定の版を指定するオプションは ありません。それが必要なときは下のロールバックを使います。

🐳 コンテナをアップグレードする

Section titled “🐳 コンテナをアップグレードする”

ホストには何も導入されていないので、アップグレードはタグの変更と pull です。 compose ファイルで新しいリリースを固定します。

services:
pingclair:
image: ghcr.io/dorianverlaine/pingclair:v0.2.0-rc.3
ターミナルウィンドウ
docker compose pull
docker compose up -d
docker logs pingclair 2>&1 | head -3
🚀 Starting Pingclair with config: /etc/pingclair/Pingclairfile
🚀 Starting Pingclair v0.2.0-rc.3
📄 Loaded configuration from: /etc/pingclair/Pingclairfile

設定と証明書ストアはボリュームの中にあるので、新しいコンテナは前のコンテナが 残した場所でそれらを見つけます。注意点が二つあります。

  • 80 ポートを公開するコンテナは、systemd のサービスが動いている間は起動 できません。 どちらかを止めます: sudo pc service stop、またはコンテナ側の 公開ポートを変えます。
  • latest は最新リリースを追いかけます。 本番では版を固定し、アップグレード が pull の副作用ではなく判断になるようにします。

新しい版を戻す必要があるときは、リリースホストから前の版を取得し、その版が 公開しているダイジェストと照合して、バイナリを差し替えます。

ターミナルウィンドウ
mkdir -p /tmp/rollback && cd /tmp/rollback
version=0.2.0-rc.2
base="https://releases.pingclair.com/pingclair/releases/$version"
curl -fsSL "$base/release.json" -o release.json
tarball=pingclair-linux-x86_64.tar.gz
expected="$(jq -r ".assets[] | select(.name == \"$tarball\") | .digest" release.json | sed 's/^sha256://')"
curl -fsSLO "$base/$tarball"
printf '%s %s\n' "$expected" "$tarball" | sha256sum -c -
mkdir -p extract && tar -xzf "$tarball" -C extract
pingclair-linux-x86_64.tar.gz: OK
ターミナルウィンドウ
sudo systemctl stop pingclair
sudo install -m 0755 extract/pingclair /usr/local/bin/pingclair
sudo systemctl start pingclair
pingclair version
v0.2.0-rc.2

戻した版に対して設定を検証します。その版が実装していないディレクティブは、無視 されるのではなく名前を挙げて拒否されます。

ターミナルウィンドウ
sudo pingclair validate /etc/Pingclair/Pingclairfile
ターミナルウィンドウ
sudo pc service stop
sudo systemctl disable pingclair
sudo rm /etc/systemd/system/pingclair.service
sudo systemctl daemon-reload
sudo rm /usr/local/bin/pingclair /usr/local/bin/pc

この後 systemctl status pingclairUnit pingclair.service could not be found と答え、コマンドは消え、80 ポートで何も待ち受けません。ディスクに残る ものは意図的にあなたのデータです。

/etc/Pingclair/Pingclairfile 設定。そのまま有効です
/var/lib/pingclair/.local/share/pingclair 発行済み証明書と ACME の状態
/var/lib/pingclair/html 案内ページ
/var/log/pingclair ログ出力先のディレクトリ

再導入する予定があるなら /var/lib/pingclair/.local/share/pingclair を残します。証明書と内部 ルートが生き残り、そのルートを信頼しているクライアントも動き続けます。その ホストで Pingclair を終えるなら、サービスアカウントごと削除します。

ターミナルウィンドウ
sudo rm -rf /etc/Pingclair /var/lib/pingclair /var/log/pingclair
sudo userdel pingclair
  • 想定と違う版が入った。 インストーラは常に最新のリリースタグを取ります。 pingclair version で確認し、特定の版が必要だったなら上のロールバックを 使います。
  • アップグレード後にサービスが起動しない。 sudo pingclair validate /etc/Pingclair/Pingclairfile を読みます。新しい版が 拒否するディレクティブは名前と代替を示して fail closed するので、journal が 直す行を教えます。
  • コンテナがすぐ終了する。 docker logs <container> が理由を示します。 よくある原因は、マウントした設定ディレクトリに /etc/pingclair/Pingclairfile が無いこと、またはホスト側でポートが使用中で あることです。
  • ストアの再生成後にクライアントが証明書を拒否する。 内部認証局を作り直す と、古いルートは何も署名しません。新しいルートを sudo PINGCLAIR_TLS_STORE=/var/lib/pingclair/.local/share/pingclair pingclair trust で導入します。