アプライアンスのコマンド
ironflock appliance コマンドは、自分で運用する Linux サーバーに IronFlock アプライアンスをインストールし、その後も管理します。アプライアンスのインストール、設定の変更、更新、開始、停止、再起動、ログの読み取り、admin パスワードのリセット、シークレットのバックアップ、復元、ローテーション、そして削除に使います。
アプライアンスとは、現場の 1 台のマシン上で動作する IronFlock システム一式です。アプライアンスとは何か、その HTTPS モード、ネットワーク、運用については IronFlock アプライアンス で説明しています。マシンの要件(CPU、メモリ、ストレージ、時刻同期)は、その インストール のページにあります。
注意:これらのコマンドは、
ironflockのリリース 2.1.0 で新しく追加されました。新規の Ubuntu 24.04 仮想マシン(amd64)上で、appliance installからappliance remove --purgeまでのテスト実行に 1 回合格しています。失敗する更新と、それに伴う以前のリリースへのロールバックは、まだ検証されていません。
アプライアンス
| コマンド | 内容 |
|---|---|
appliance install | このマシンにアプライアンスをインストールして開始する。またはインストール済みのアプライアンスを指定のリリースにする |
appliance configure | 設定を変更する:ライセンス、TLS モード、プロキシ、ホスト名、トンネル、二要素認証のポリシー |
appliance update | アプライアンスをリリースに更新し、更新が失敗した場合は以前のリリースに戻す |
appliance start | アプライアンスを開始する |
appliance stop | 再び開始するまでアプライアンスを停止する |
appliance restart | アプライアンスを再起動する |
appliance logs | アプライアンスのサービスのログを表示する |
appliance reset-admin-password | UI ユーザー admin に新しいパスワードを設定する |
appliance backup | アプライアンスのシークレットを tar.gz アーカイブに書き出す |
appliance restore | シークレットのバックアップを元に戻す |
appliance rotate | アプライアンスのシークレットを 1 つ新しい値にする |
appliance revoke-direct-access | 以前の FILE_CRED_KEY で作成された直接アクセスキーを削除する |
appliance remove | このマシンからアプライアンスを削除する |
アプライアンスのコマンドは Linux で動作します。appliance install には、systemd を備えた Debian または Ubuntu ベースのシステムが必要です。macOS では、コマンドは何かを調べる前に終了コード 3 で終了します。アプライアンスのマシン上で実行するか、Mac から --host で実行してください。
コマンドは root として、sudo で実行してください。システムを変更するコマンドは、root でない場合は終了コード 3 で終了し、自分で sudo を呼び出すことはありません(root 権限)。
各コマンドは、グローバルフラグ --yes、--json、--download-base、--host、--hosts、--parallel も受け付けます(グローバルフラグ)。質問には端末が必要です。端末がない場合は --yes を指定してください(質問と確認)。
ironflock status は、インストール済みのアプライアンスについて、バージョンとチャネル、UI のアドレス、ライセンスがあるかどうか、サービス、サービスの健全性、待機中の更新を表示します(ironflock status)。
インストール済みのアプライアンスの構成
| パスまたはユニット | 内容 |
|---|---|
/opt/ironflock | インストールディレクトリ(--install-dir で別の場所を指定できます)。root のものです |
/opt/ironflock/.env | アプライアンスの設定とすべてのシークレット |
/opt/ironflock/license.env | ライセンスキー |
/opt/ironflock/install.json | インストールの選択の記録。root だけが読めます(後述) |
/opt/ironflock/.update-previous | 更新の実行中に保存される、以前のリリースのコピー(後述) |
/opt/ironflock/triggers/apply-update.status、apply-update.log | 最後の更新の進捗と出力。UI がこれを読み取ります |
ironflock.service | アプライアンスのコンテナを Docker Compose で実行する systemd サービス。起動のたびに開始します |
/usr/local/bin/ironflock | アプライアンスのユニットが、起動時も含めて開始のたびに実行する ironflock |
/etc/ironflock/appliance.json | インストールがホストに加えた変更の記録。appliance remove がこれを元に戻します |
インストールは ironflock.service のほかに、ウォッチドッグと、UI からの更新が失敗したときに 1 時間ごとに再試行するタイマーをセットアップします。ウォッチドッグは 5 分ごとにルーターとバックエンドをチェックし、正常でなければ ironflock.service を再起動します(5 分に 1 回まで)。
/usr/local/bin/ironflock はそのままにしておいてください。アプライアンスのユニットが、開始のたびにこれを実行します。appliance install は別の場所からの実行を拒否し、そこにインストールする方法を示します。ironflock status を root で実行すると、このバイナリがない場合や、最後にアプライアンスをインストールまたは更新したものより古い場合に警告します。sudo ironflock self-update で最新のリリースに置き換えられます(ironflock self-update)。
アプライアンスは、ホスト自身のデバイスエージェントも実行します。appliance install は、--no-agent を指定しない限りこれをインストールします。このエージェントは agent コマンド で管理します。
一度に 1 つの変更
アプライアンスのインストール、更新、その他の変更は、一度に 1 つだけ実行されます。2 つ目の実行は 1 つ目を待ち、その旨を示します:
Another IronFlock install, update or other change of the appliance is running on this host (process <pid>); waiting up to <time> for it to finishinstall、update、configure、rotate、revoke-direct-access、reset-admin-password、restore は最大 1 時間待ちます。start、stop、restart、remove は最大 30 秒待ちます。それでもほかの実行が続いている場合、コマンドは何も変更せず、終了コード 3 で終了します。
ironflock appliance install
IronFlock アプライアンスを /opt/ironflock にインストールして開始します。すべてのサービスが正常になり、IronFlock クラウドがアプライアンスに到達できるまで待ってから、Web UI の admin ログインを 1 回だけ端末に表示します。
ironflock appliance install --license-file <file> [flags]動作環境: systemd を備えた Debian または Ubuntu ベースの Linux。root: 必要。
インストールは次のものをセットアップします:
- チャネルのリリース、または
--versionで指定したリリース。アプライアンスのリリース鍵で検証します。 - アプライアンスの設定とシークレット。
- ホスト自身のデバイスエージェントと、ない場合は Docker。
- ホストの設定。
- ライセンスキーによる、レジストリへの Docker のログイン。
- リリースのイメージ。
ironflock.service。
Docker がない場合、インストールは get.docker.com の Docker のインストールスクリプトを root で実行します。このダウンロードは TLS だけで保護されています。
| フラグ | 意味 |
|---|---|
--license-file <file> | ライセンスキー、または LICENSE_KEY=<key> を含むファイル。- は標準入力から読み取ります |
--license <key> | ライセンスキーそのもの。ps に表示されるため、--license-file を推奨します |
--version <x.y.z> | インストールするアプライアンスのバージョン。既定値:チャネルの最新 |
--channel <channel> | リリースチャネル:production、test、all。既定値:インストール済みのアプライアンスのもの、なければ production |
--tls | アプライアンス独自の CA による証明書で、Web UI を HTTPS で提供する。デバイスは引き続き暗号化なしで接続します。以降の実行でも有効のままです |
--tls-cert <file> | アプライアンスのドメイン用の、組織の証明書ファイル。--tls-key と一緒に指定します。デバイスはその後ドメインを使います |
--tls-key <file> | --tls-cert の鍵ファイル。パスフレーズなし |
--no-tls | Web UI をプレーン HTTP で提供する。何も暗号化されないため、信頼できるネットワーク専用です。既定値で、以降の実行でも無効のままです |
--tunnel | デバイスの Web UI へのトンネルを有効にする。既定値で、有効のままです |
--no-tunnel | そのトンネルを無効にする。無効のままです |
--extra-host <name> | Web UI の別の名前。複数回、またはカンマ区切りで指定します |
--2fa <policy> | 二要素認証のポリシー:available、effective、required。既定値:effective |
--interactive | アプライアンスのアドレスとドメインを質問し、エージェントのインストールにも質問させる |
--no-agent | ホスト自身のデバイスエージェントをインストールしない。その場合、Docker がインストールされている必要があります |
--http-proxy <url> | Docker、エージェント、アプライアンスの HTTP プロキシ。http://proxy:3128 のような形、またはパスワードを含めない http://user@proxy:3128。"" で削除します |
--https-proxy <url> | Docker、エージェント、アプライアンスの HTTPS プロキシ。"" で削除します |
--no-proxy <hosts> | プロキシを経由しないホスト(カンマ区切り) |
--proxy-password-file <file> | プロキシ URL に記載したユーザーのパスワードを 1 行で含むファイルまたはパイプ(/dev/stdin) |
--no-start | すべてを書き込んで有効にするが、何も開始しない。ヘルスチェックもクラウドのチェックも行いません |
--skip-cloud-gate | IronFlock クラウドがアプライアンスに到達するのを待たない |
--skip-login | レジストリにログインしない。イメージは Docker 自身の認証情報で取得するか、手動で読み込みます。その場合、ライセンスキーは任意です |
--registry <host> | アプライアンスのイメージのレジストリ。既定値:instance-registry.ironflock.com |
--registry-user <user> | レジストリのログインのユーザー。既定値:ironflock-appliance |
--bucket-url <url> | アプライアンスのリリースが公開されている場所。既定値:https://instance-registry.ironflock.com/dl/appliance |
--install-dir <directory> | インストールディレクトリ。既定値:/opt/ironflock |
HTTPS モードと、それぞれが暗号化するものについては、HTTPS と証明書 と セキュリティ で説明しています。プロキシのパスワードは シークレット のルールに従います。パスワードを含むプロキシ URL は、コマンドラインの誤りです。
ライセンスキー
ライセンスキーは、ironflock.com の プロフィール → インスタンス で作成する Instance Key です(インストール)。--license-file または --license で渡します。すでにインストール済みのアプライアンスは、どちらも指定しなくてもキーを保持します。license.env にある、有効なライセンスキーではないキー(ライセンスキーは UUID です)は、アプライアンスのどのコマンドも警告を出して無視します。その場合、実行にはキーか --skip-login が必要です。
環境変数
一部のフラグは、既定値を環境変数から取得します:
| 変数 | 設定するもの |
|---|---|
IRONFLOCK_VERSION、IRONFLOCK_CHANNEL | --version、--channel |
IRONFLOCK_INSTALL_DIR | --install-dir |
IRONFLOCK_REGISTRY、IRONFLOCK_REGISTRY_USER | --registry、--registry-user |
IRONFLOCK_BUCKET_URL | --bucket-url |
IRONFLOCK_2FA | --2fa |
IRONFLOCK_EXTRA_HOSTS | --extra-host |
IRONFLOCK_SKIP_CLOUD_GATE | --skip-cloud-gate |
IRONFLOCK_APPLIANCE_HOST、IRONFLOCK_APPLIANCE_DOMAIN | アプライアンスのアドレスとドメイン。--interactive が質問するもの |
IRONFLOCK_CLOUD_TUNNEL_TCP | 0、false、off、no 以外の値を指定すると、プロキシがない場合に、トンネルのクラウド接続が TCP ポート 7000 を使えるようになります |
sudo は、シェルの変数のほとんどを引き継ぎません。sudo env NAME=value ironflock appliance install ... で渡してください。
インストールの選択の記録
root だけが読める <install-dir>/install.json は、.env にもユニットにも残らない選択を保持します。レジストリとそのユーザー、アプライアンスのホスト(IRONFLOCK_APPLIANCE_HOST)、--no-agent、--bucket-url のダウンロードベース、最後にアプライアンスをインストールまたは更新した ironflock のバージョンです。パスワード、トークン、鍵は含みません。
以降の appliance install、appliance update、appliance configure は、フラグ(またはその変数)で別の指定がない限り、これらの選択を保ちます。指定したフラグが優先され、記録されます。既定値に戻すには、--registry ""、--no-agent=false、または空の IRONFLOCK_APPLIANCE_HOST を指定します。
記録が読み取れない場合や、より新しい形式の記録の場合、install、update、configure は何かを変更する前に、終了コード 3 で停止します。メッセージには対処方法が示されます。記録を別の場所に移してフラグを付けて再度インストールするか、より新しい ironflock を使います。
再実行
インストール済みのアプライアンスで実行すると、コマンドはアプライアンスを指定したリリースとオプションに合わせ、シークレットと設定は保ちます。リリースを意図的に変更するときに使います。ironflock appliance install --version <version> は、そのリリースがすでに動作している場合でも、もう一度プルし、再起動し、チェックします。
途中で止まった実行は、同じコマンドをもう一度実行すると、止まったところから続行します。
ヘルスチェックに合格すると、インストールは更新が保存した以前のリリースのコピー(/opt/ironflock/.update-previous)を削除します。インストールしたリリースが、動作させるべきリリースだからです。
最初の変更以降は、端末や SSH セッションが失われても(SIGHUP)、出力が読まれなくなっても(閉じたパイプ)、インストールは止まりません。Ctrl-C と SIGTERM では止まります。admin パスワードが失われないように、インストールは SSH セッションが失われた後も端末に書き込み続けます。そのため、sudo の use_pty 設定では、開いたままで読まれなくなった端末が、インストールロックを保持したままインストールを止めてしまうことがあります。
例
# アプライアンスをインストールする。ライセンスキーはファイルから読み取る
sudo ironflock appliance install --license-file license.txt
# アプライアンス独自の CA による HTTPS でインストールする。キーは標準入力から読み取る
sudo ironflock appliance install --license-file - --tls < license.txt
# プロキシの背後でインストールする。.corp.example.com 配下のホストはプロキシを経由しない
sudo ironflock appliance install --https-proxy http://proxy.example.com:3128 --no-proxy .corp.example.com
# アプライアンスのアドレスとドメインを質問し、HTTPS でインストールする
sudo ironflock appliance install --license-file license.txt --interactive --tls拒否する場合と失敗する場合
- ユニットがそのままでは記載できない
--bucket-urlのダウンロードベース(ログイン情報、%、空白、$、\、引用符、制御文字、UTF-8 でないバイトを含むもの)は、何かが書き込まれる前に終了コード 2 で拒否されます。 - root で実行されていない場合、インストールの選択の記録が読み取れない場合、ほかの実行が 1 時間の待機を超えてインストールロックを保持している場合、コマンドは終了コード 3 で拒否します。実行中の
ironflockが/usr/local/bin/ironflockでない場合も拒否し、そこにインストールする方法を示します。 - 手順が失敗すると、コマンドは終了コード 1 で終了します。続行するには、同じコマンドをもう一度実行してください。
ironflock appliance configure
インストール済みのアプライアンスの設定を変更します。ライセンス、TLS モード(自社の証明書も含む)、プロキシ、UI の追加のホスト名、トンネル、二要素認証のポリシーです。
ironflock appliance configure [flags]動作環境: インストール済みのアプライアンスがある Linux。root: 必要。
設定はアプライアンスの .env とファイルに残るため、更新しても保たれます。指定しなかった設定は、アプライアンスの現在の値を保ちます。アプライアンスを再起動するのは何かを変更した実行だけなので、同じコマンドを 2 回実行しても、2 回目は何も変更しません。
| フラグ | 意味 |
|---|---|
--license <key> | アプライアンスの新しいライセンスキー |
--license-file <file> | 新しいライセンスキーをこのファイルから読み取る。- は標準入力から読み取ります |
--skip-login | 新しいライセンスキーでレジストリにログインしない |
--registry <host> | ログインするレジストリ。既定値:アプライアンスのミラーが同期元にしているもの |
--registry-user <user> | レジストリのログインのユーザー。既定値:ironflock-appliance |
--tls | アプライアンス独自の CA による証明書で、UI を HTTPS で提供する |
--tls-cert <file> | TLS 証明書ファイル。--tls-key と一緒に指定します |
--tls-key <file> | --tls-cert の鍵ファイル |
--no-tls | UI をプレーン HTTP で提供する。何も暗号化されないため、信頼できるネットワーク専用です |
--http-proxy <url> | HTTP プロキシの URL。空にするとプロキシを解除します |
--https-proxy <url> | HTTPS プロキシの URL。空にするとプロキシを解除します |
--no-proxy <list> | プロキシを経由しないもの(カンマ区切りのリスト) |
--extra-host <name> | UI の別の名前。繰り返し指定するか、カンマ区切りのリストで指定します |
--tunnel | アプリの Web UI のトンネルを有効にする |
--no-tunnel | トンネルを無効にする |
--2fa <policy> | 二要素認証のポリシー:available、effective、required |
--bucket-url <url> | アプライアンスのリリースが公開されている場所。TLS に必要な Caddyfile 用です。既定値:https://instance-registry.ironflock.com/dl/appliance |
--install-dir <directory> | インストールディレクトリ。既定値:/opt/ironflock |
- 新しいライセンス(
--license、--license-file、標準入力からの--license-file -)は、書き込まれる前にレジストリを開けることが確認されます。そのレジストリのログインは、--registryに--registry-userとして行い、なければインストールが選んだもの(記録)、それもなければアプライアンスのミラーが同期元にしているレジストリに対して行います。--registryまたは--registry-userを付けたログインは、更新のためにそれらを記録に残します。 --tls-certと--tls-keyは自社の証明書をインストールして TLS を有効にし、デバイスはアプライアンスのドメインに移行します。--http-proxy ""または--https-proxy ""を単独で指定すると、プロキシを解除します。- インストールの
--no-agentはそのまま保たれます。 - TLS に必要な Caddyfile は、
--bucket-urlから、なければインストールがリリースを取得した場所から取得します。
例
# アプライアンスに、ファイルから新しいライセンスキーを設定する
sudo ironflock appliance configure --license-file license.txt
# 組織の証明書で UI を提供する
sudo ironflock appliance configure --tls-cert wildcard.crt --tls-key wildcard.key
# プロキシを設定し、再び解除する
sudo ironflock appliance configure --https-proxy http://proxy.example.com:3128 --no-proxy .corp.example.com
sudo ironflock appliance configure --https-proxy ""
# すべてのユーザーに二要素認証を必須にする
sudo ironflock appliance configure --2fa required--2fa required を設定する前に、すべてのアカウントに二要素認証が設定されていることを確認してください。設定していないユーザーはサインインできなくなります(アカウントとアクセス)。
拒否する場合
root で実行されていない場合、インストールの選択の記録が読み取れない場合、ほかの実行が 1 時間の待機を超えてインストールロックを保持している場合、そして更新が途中で中断されている間(更新が途中で中断された場合)、コマンドは終了コード 3 で拒否し、何も変更しません。
ironflock appliance update
このマシンのアプライアンスを、そのチャネルの最新のリリース、または --version で指定したリリースに更新します。リリースはアプライアンスのリリース鍵で検証され、そのイメージがプルされ、アプライアンスはそのリリースで再起動します。コマンドは、すべてのサービスが正常になり、IronFlock クラウドがアプライアンスに到達できるまで待ちます。アプライアンスはシークレットと設定を保ちます。新しいリリースが正常になると、以前のリリースのイメージは削除されます。
ironflock appliance update [flags]動作環境: インストール済みのアプライアンスがある Linux。root: 必要。質問: --discard-previous の場合を除き、しません。
| フラグ | 意味 |
|---|---|
--version <x.y.z> | インストールするリリース、またはチャネルの最新を表す latest(既定値)。意図的に戻すための古いリリースも指定できます |
--channel <channel> | チャネルを切り替える:production、test、all。既定値:インストール済みのもの |
--bucket-url <url> | アプライアンスのリリースが公開されている場所 |
--discard-previous | 何も更新しない。更新が保存した以前のリリースのコピーを削除し、それ以外は何も変更しない(後述) |
リリースは、--bucket-url、なければ IRONFLOCK_BUCKET_URL、なければインストールがリリースを取得した場所(その選択の記録 /opt/ironflock/install.json、またはユニットが示すもの)、それもなければ IronFlock から取得します。レジストリ、そのユーザー、アプライアンスのホスト、--no-agent は、インストールが選んだままです。
新しいチャネルは、更新が成功すればそのまま残ります。ロールバックすると、以前のチャネルに戻ります。UI の Apply update も同じ更新を実行します。
チェックに合格すると、インストールや更新は、アプライアンス自身のデバイスを、以前はすべてのアプライアンスが共有していたシークレットから APPLIANCE_DEVICE_SECRET の値に移行させます。その後、そのエージェントは実行の 35 秒後に再起動します。移行できない場合は理由を示す警告になり、次のインストールまたは更新で再試行します。
すでに最新の場合
チャネルの最新のリリース(または --version で指定したリリース)を、同じチャネルとダウンロードベースですでに実行しているアプライアンスは、そのままにされます。コマンドはその旨を示し、終了コード 0 で終了します。--json では result が nothing-to-do です。そのリリースを意図的にもう一度プルし、再起動し、チェックするには、ironflock appliance install --version <version> を実行してください。
これが当てはまるのは、最後の更新がきれいな状態で終わったアプライアンスだけです。以前のリリースのコピーが保存されている場合(途中で中断された更新)や、ステータスファイルが failed または running を示している場合、更新はすべてをもう一度実行します。
ロールバック
更新は、何かを変更する前に、動作中のリリースのファイルを /opt/ironflock/.update-previous に保存します。アプライアンスを変更した後で更新が失敗すると、それらのファイルが元に戻され、以前のリリースが再び開始します。イメージはマシン上にあるため、ネットワークは不要です。これは最大 3 回試みられます。その後、コマンドはあきらめ、以前のリリースのファイルをそのまま残すため、アプライアンスが次に開始するのはそのリリースです。
何かを変更する前に失敗した更新は、それ以上何も変更せず、その旨を示します。たとえば、リリースが存在しない、署名されていない、ダウンロードベースが応答しない場合です。
リリースによっては、実行中のものより新しい ironflock が必要なことがあります。その場合は何も変更されず、コマンドは先にどの ironflock をインストールすべきかを示します。appliance update が ironflock を自分で更新することはありません。ironflock self-update で最新のものをインストールします。
ステータスファイルと再試行
更新は、UI の更新と同じく進捗を triggers/apply-update.status に書き込むため、UI にそれが表示されます。出力は triggers/apply-update.log にも書き込まれます。UI からの失敗した更新を再試行するタイマーは、このコマンドによる更新が失敗した場合や、何かを変更する前に停止された場合には再試行しません。
中断
- Ctrl-C または SIGTERM は、更新が何かを変更する前であれば、更新を停止します。それ以降は、1 回目で以前のリリースに戻し(終了コード 130)、2 回目ですぐに停止します。
- 端末や SSH セッションが失われても(SIGHUP)、出力が読まれなくなっても、更新は止まりません。更新もロールバックも最後まで実行されます。どう終わったかは、ステータスファイルと
ironflock statusで確認できます。 - 端末なしの
--host経由では、最初の 2 回の Ctrl-C がマシンに届きます。1 回目の後、コマンドはマシン上の更新が終わるのを最大 30 分待ちます。2 回目の後は 15 秒待ち、3 回目でこちら側はすぐに終了します。こちら側でセッションが失われた場合や SIGTERM は Ctrl-C とはみなされず、コマンドはこちら側ですぐに終了します。こちら側が先に終了した場合でも、更新はマシン上で続き、どう終わったかはironflock --host <machine> statusで確認できます。
更新が途中で中断された場合
更新が途中で中断されたとは、更新がアプライアンスの変更を始めた後で終わらなかったことを指します。停止された、マシンが停止した、またはロールバックで以前のリリースを起動できなかった場合です。このとき、インストールディレクトリには 2 つのリリースのファイルが混在していることがあります。保存されたコピーは動作することがわかっているリリースを示し、ironflock status もそれを示します。
- 次の更新は、まずそのコピーを元に戻してから更新します。コピーが読み取れない場合や元に戻せない場合は、終了コード 3 で更新を停止し、エラーは
ironflock appliance install --version <version>を示します。 - 1 時間ごとの再試行タイマーは、新しいリリースがない場合でも、自分でコピーを元に戻し、そのリリースを再起動してチェックします。
configure、rotate、revoke-direct-access、restore、reset-admin-passwordは、何かを変更する前に終了コード 3 で拒否します。これらは 3 つの解決策を示します:ironflock appliance update、ironflock appliance install --version <version>、そしてネットワークがない場合はironflock appliance update --discard-previousです。backupは読み取るだけで、警告を出します。start、stop、restartはコピーに触れません。removeは、アプライアンスのほかのファイルとともにコピーも削除します。appliance installはいつもどおり実行され、ヘルスチェックに合格するとコピーを削除します。
途中で中断された更新のファイルを手動で扱うには、先に .env に IRONFLOCK_UPDATE_RETRY=off を設定してください。そうしないと、再試行タイマーが約 1 時間以内に以前のリリースを元に戻します。この設定は、ロールバックも含めて再試行タイマー全体を無効にします。
--discard-previous
ironflock appliance update --discard-previous [--yes]何も更新しません。更新が保存した以前のリリースのコピー(/opt/ironflock/.update-previous)を、どのような状態でも、読み取れない場合でも削除し、それ以外は何も変更しません。ネットワークは不要です。
更新が途中で中断され、以前のリリースが再び開始しない場合に、ネットワークなしで抜け出す方法です。インストールディレクトリのファイルは現在の状態のまま残り、そのリリースには戻せなくなり、拒否していたコマンドが再び実行できるようになります。
削除するものを示してから質問し、「No」があらかじめ選択されています。--yes は「はい」と答えます。端末がない場合や --json では --yes が必要で、ない場合は終了コード 4 で終了します。コピーがない場合はその旨を示し、終了コード 0 で終了します。--version、--channel、--bucket-url とは組み合わせられません(終了コード 2)。--json では、結果に action(discarded、cleaned、none)、path、version、state、removed が含まれます。
例
# チャネルの最新のリリースに更新する
sudo ironflock appliance update
# リリース 1.6.41 をインストールする。それに戻す場合にも使う
sudo ironflock appliance update --version 1.6.41
# test チャネルに切り替え、結果を JSON で読み取る
sudo ironflock appliance update --channel test --json
# ネットワークなしで、以前のリリースのコピーを削除する
sudo ironflock appliance update --discard-previous結果
{"from":"1.6.40","target":"1.6.41","version":"1.6.41","result":"updated"}| フィールド | 意味 |
|---|---|
from | 更新前のリリース |
target | 更新が目指したリリース |
version | 現在インストールされているリリース |
result | updated。アプライアンスがすでにそのリリースで、更新がもう一度プル、再起動、チェックした場合は up-to-date。アプライアンスがそのままにされた場合は nothing-to-do |
失敗した更新は、アプライアンスが以前のリリースに戻ったかどうかを示すエラーになります。--json では、中断された場合も含め、その kind は次のいずれかです:
| 種類 | 意味 |
|---|---|
rolled_back | 更新が失敗し、以前のリリースが再び動作している |
rollback_failed | 更新が失敗し、ロールバックで以前のリリースを起動できなかった |
not_rolled_back | 更新が失敗し、ロールバックされなかった |
unchanged | 更新が何かを変更する前に失敗した。たとえば、ダウンロードベースが応答しない |
copy_left | 新しいリリースは動作しているが、以前のリリースのコピーを削除することも印を付けることもできなかった。再試行タイマーが約 1 時間以内に以前のリリースを元に戻す可能性があります。エラーは解決策を示します(まず IRONFLOCK_UPDATE_RETRY=off、次に --discard-previous) |
| 終了コード | 意味 |
|---|---|
| 0 | 更新した、すでに最新、または何もすることがなかった |
| 1 | 更新が失敗した(ロールバックの有無を問わない)。copy_left も含む |
| 2 | コマンドラインの誤り。ユニットが記載できないダウンロードベースなど |
| 3 | root でない、アプライアンスがインストールされていない、ほかの実行が待機時間を超えてインストールロックを保持していた、保存されたコピーが読み取れないか元に戻せない、インストールの選択の記録が読み取れない、より新しい ironflock が必要 |
| 130 | 中断された。種類は同じです |
ironflock appliance start
動作していないアプライアンスを開始します。ironflock.service がそのコンテナを開始し(docker compose up)、ウォッチドッグとそのほかのパスとタイマーが再び開始します。サービスが立ち上がるまで 1、2 分かかります。サービスの健全性は ironflock status で確認できます。
ironflock appliance start [flags]動作環境: インストール済みのアプライアンスがある Linux。root: 必要。質問: なし。このコマンドに固有のフラグはありません。
アプライアンスが動作していなかったために、復元 がデータベースロールを古いパスワードのまま残した場合、それらのロールは、データベースが動作し始めると(最大 1 分)、復元した .env のパスワードになります。応答しないロールは警告を出して次の開始に持ち越され、開始は続行します。
sudo ironflock appliance start
sudo ironflock appliance start --jsonほかの実行がアプライアンスを変更している間、コマンドは最大 30 秒待ち、その旨を示します。その実行が続いている場合は、何も変更せずに終了コード 3 で終了します。
ironflock appliance stop
アプライアンスを停止します。ウォッチドッグとそのほかのパスとタイマー、およびそれらが開始したものを停止し、次に ironflock.service を停止します。これによりコンテナが停止して削除されます(docker compose down)。データは残ります。
ironflock appliance stop [flags]動作環境: インストール済みのアプライアンスがある Linux。root: 必要。質問: あり。停止すると何が止まるかを示した後で質問します。--yes で答えられます。
UI がオフラインになり、アプライアンスに接続するすべてのデバイスも、このマシンのエージェントも含めてオフラインになります。アプライアンスは ironflock appliance start で、または次の起動で再び開始します。このコマンドに固有のフラグはありません。
# アプライアンスを停止する。コマンドは何が止まるかを示して質問する
sudo ironflock appliance stop
# 質問なしで停止する
sudo ironflock appliance stop --yes「いいえ」と答えた場合、または端末がなく --yes もない場合は、終了コード 4 で終了します。ほかの実行がアプライアンスを変更している間は、start と同じように待ちます。
ironflock appliance restart
アプライアンスを再起動します。ironflock.service は、ウォッチドッグと同じように、コンテナを停止して再び開始します(docker compose down、次に up)。appliance stop が停止したパスとタイマーも再び開始します。
ironflock appliance restart [flags]動作環境: インストール済みのアプライアンスがある Linux。root: 必要。質問: なし。このコマンドに固有のフラグはありません。
UI と、アプライアンスに接続するデバイスは 1、2 分オフラインになります。データは残ります。サービスが立ち上がったら、ironflock status でその健全性を確認できます。復元が古いパスワードのまま残したデータベースロールは、start と同じく .env のパスワードになります。
sudo ironflock appliance restart
sudo ironflock appliance restart --jsonほかの実行がアプライアンスを変更している間は、start と同じように待ちます。
ironflock appliance logs
docker compose logs と同じ形で、アプライアンスのサービスが書き込んだ内容を表示します。既定では、各サービスの最後の 100 行です。何も変更しません。
ironflock appliance logs [<service>...] [flags]動作環境: インストール済みのアプライアンスがある Linux。root: 必要。質問: なし。
router、backend、kratos、caddy のようにサービス名を指定すると、そのサービスのログだけを表示します。
| フラグ | 意味 |
|---|---|
--lines <n> | 各サービスの最後の n 行、または all。既定値:100。--since を付けた場合はすべて |
--since <time> | ある時刻以降の行だけ:現在からさかのぼる期間(10m、2h、3d)、またはこのマシンの時計での時刻(2026-11-10 09:00、09:00、2026-11-10T09:00:00Z) |
--follow | Ctrl-C まで、サービスが書き込む行を表示し続ける |
--json を付けると、各行がその行をメッセージとする JSON オブジェクトになります。
# 各サービスの最後の 100 行
sudo ironflock appliance logs
# 直近 1 時間にバックエンドが書き込んだすべて
sudo ironflock appliance logs backend --since 1h
# ルーターと Kratos の最後の 20 行と、その後 Ctrl-C までのすべての新しい行
sudo ironflock appliance logs router kratos --follow --lines 20ironflock appliance reset-admin-password
パスワードを紛失したオペレーターのために、UI ユーザー admin に新しいパスワードを設定します。パスワードはまずデータベースに設定され、これにより admin のアクティブなセッションがすべて終了します。次に .env に APPLIANCE_ADMIN_PASSWORD として設定されます。アプライアンスが動作している必要があります。
ironflock appliance reset-admin-password [flags]動作環境: 動作中のアプライアンスがある Linux。root: 必要。
| フラグ | 意味 |
|---|---|
--install-dir <directory> | インストールディレクトリ。既定値:/opt/ironflock |
新しいパスワードは 1 回だけ、端末にだけ表示されます。端末がない場合や --json を付けた場合、コマンドは代わりにその保存場所を示します。更新が途中で中断されている間は、終了コード 3 で拒否します(更新が途中で中断された場合)。
sudo ironflock appliance reset-admin-passwordironflock appliance backup
アプライアンスのうち、作り直せないものすべてを tar.gz アーカイブに書き出します。すべてのシークレットを含む .env、license.env、TLS 証明書のローカル CA、レジストリのトークン鍵ペア、シークレットの台帳、rotation.log です。
ironflock appliance backup [-o <file>] [flags]動作環境: Linux。root: 必要。
| フラグ | 意味 |
|---|---|
-o, --output <file> | アーカイブをこのファイルに書き出す。ファイルは新しく作成され、root だけが読めます |
--install-dir <directory> | インストールディレクトリ。既定値:/opt/ironflock |
-o がない場合、アーカイブは標準出力に出力されます。標準出力は端末であってはなりません。リダイレクト先のファイルは、その所有者だけが読めるようにされます。
警告:アーカイブには、アプライアンスのすべてのシークレットが含まれます。失われた
FLEETDB_SECRET_KEYSやFILE_CRED_KEYは、ほかの方法では復元できません。アーカイブを暗号化し、ボリュームのバックアップと一緒に保管してください。
アーカイブに含まれないもの:TLS 証明書とその鍵(生成された証明書は CA から再署名されます)、Kratos の設定、リリースのファイル、Docker ボリューム。certs/ca と registry-token-certs からは、インストールがそこに作成するファイル(rootCA.crt、rootCA.key、rootCA.srl、token_private.key、token_public.crt、token_public.der。.prev または .new 付きのものも)を取り込みます。そこにあるほかのファイルは、restore がほかのファイルを受け付けないため、その名前を示す警告を出して除外されます。
# root だけが読めるファイルにアーカイブを書き出す
sudo ironflock appliance backup -o /root/appliance-secrets.tar.gz
# 標準出力に書き出し、ファイルに保存する
sudo ironflock appliance backup > appliance-secrets.tar.gzironflock appliance restore
appliance backup が書き出したバックアップを、インストールディレクトリに戻します。
ironflock appliance restore <file> [flags]動作環境: Linux。root: 必要。
| フラグ | 意味 |
|---|---|
--force | インストール済みのアプライアンスのシークレットを置き換える |
--install-dir <directory> | インストールディレクトリ。既定値:/opt/ironflock |
コマンドはバックアップに含まれるファイルだけを取り込み、それぞれにインストールと同じ所有者とモードを設定します。certs/ca と registry-token-certs では、インストールがそこに作成するファイルだけを取り込みます。それ以外のものを含むアーカイブは、何かが変更される前に拒否され、エラーはそれが何かを示します。
インストール済みのアプライアンスのシークレットは、--force を付けた場合にだけ置き換えられます。その .env は .env.prev として残ります。--force がない場合、インストール済みのアプライアンスへの復元は、何かを変更する前に終了コード 3 で拒否され、メッセージは --force を付けた復元と、その後の appliance restart を示します。
バックアップ内のライセンスキーが有効なライセンスキーでない場合は、警告を出してそのまま復元されます。アプライアンスのどのコマンドもそのキーを無視します。
データベースのパスワード
- アプライアンスのデータベースが動作している間は、そのロールはすぐに復元したパスワードになります。その後、すべてのサービスが復元したファイルを読み込むように、アプライアンスを再起動してください(
appliance restart)。 - アプライアンスが動作していない間は、データベースロールは以前のパスワードのままです。復元はそれらに印を付けます(
<install-dir>/.db-roles-pending。--jsonではroles_pending)。次の開始で、復元した.envのパスワードが設定されます。appliance startまたはrestart、起動時の開始、インストール、更新のいずれでもかまいません。
# インストール済みのアプライアンスに復元し、再起動する
sudo ironflock appliance restore appliance-secrets.tar.gz --force
sudo ironflock appliance restart更新が途中で中断されている間は、終了コード 3 で拒否します(更新が途中で中断された場合)。
ironflock appliance rotate
アプライアンスのシークレットを 1 つ新しい値にします。新しい値は、古い値が保持されている場所(データベースロール、エージェントのデバイスファイル、レジストリのトークン鍵ペア)と .env に設定されます。その後、そのシークレットを読み取るサービスだけが再作成され、コマンドはそれらが正常であることを確認します。
ironflock appliance rotate <name> [flags]動作環境: 動作中のアプライアンスがある Linux。root: 必要。質問: ほかの場所にも保持されているシークレットの場合。--yes で答えられます。
| フラグ | 意味 |
|---|---|
--keep-direct-access | FILE_CRED_KEY で:以前に作成された直接アクセスキーを引き続き使えるようにする |
--revoke-direct-access | FILE_CRED_KEY で:以前に作成された直接アクセスキーを無効にして削除する |
--install-dir <directory> | インストールディレクトリ。既定値:/opt/ironflock |
変更前の .env は .env.prev として残り、root だけが読めます。rotation.log には各ローテーションが記録され、値は記録されません。
- ほかの場所にも保持されているシークレット(データ、デバイス、トークン)は、ローテーションの前に質問します。
--yesで答えられます。 FILE_CRED_KEYでは、顧客の直接アクセスキーをどうするかの選択が必要です。--keep-direct-access:引き続き使えます。定期的なローテーション向けで、後でrevoke-direct-accessで終了させます。--revoke-direct-access:無効になって削除されます。漏えいの疑いがある場合に使います。APPLIANCE_ADMIN_PASSWORDはreset-admin-passwordと同じです。
ローテーションできるシークレット:
POSTGRES_PASSWORD, PGPASSWORD_KRATOS, PGPASSWORD_ACCT_MANAGER,
PGPASSWORD_ACCT_PUSHER, PGPASSWORD_EXT_ACCT_USER, PGPASSWORD_AUDIT_SANDBOX,
DATASERVICE_PASSWORD, WAMP_SYSTEM_SECRET, WAMP_SECRET_SVC_VDM,
WAMP_SECRET_SVC_IDE, WAMP_SECRET_SVC_IDE_PROXY, WAMP_SECRET_SVC_GIT,
WAMP_SECRET_SVC_REGISTRY, WAMP_SECRET_SVC_REGISTRY_PROXY,
WAMP_SECRET_SVC_ACCT, WAMP_SECRET_SVC_ACCT_PUSH, WAMP_SECRET_SVC_PAYMENT,
WAMP_SECRET_SVC_FLEETDB, WAMP_SECRET_SVC_FLEETFILES, WAMP_SECRET_SVC_AI,
WAMP_SECRET_SVC_TUNNEL, WAMP_SECRET_SVC_RENDERER, WAMP_SECRET_SVC_WEBSERVER,
WAMP_SECRET_SVC_REAPI, WAMP_SECRET_SVC_AUTH, RENDER_TICKET_KEY,
FILES_FORWARD_SECRET, KRATOS_WEBHOOK_SECRET, KRATOS_SECRETS_PAGINATION,
REGISTRY_HTTP_SECRET, TUNNEL_DASHBOARD_PASSWORD, EDGE_SESSION_SECRET,
OBJECTSTORE_ADMIN_ACCESS_KEY, OBJECTSTORE_ADMIN_SECRET_KEY, FILE_CRED_KEY,
FLEETDB_SECRET_KEYS, KRATOS_SECRETS_COOKIE, KRATOS_SECRETS_CIPHER,
APPLIANCE_DEVICE_SECRET, APPLIANCE_ADMIN_PASSWORD, REGISTRY_TOKEN_KEYローテーションが各種類のシークレットに与える影響と、IronFlock チームと一緒にしかローテーションすべきでないシークレットについては、内部シークレットのローテーション で説明しています。
# 1 つのサービスのシークレットをローテーションする
sudo ironflock appliance rotate WAMP_SECRET_SVC_AI
# ファイルキーを定期的にローテーションする。直接アクセスキーは引き続き使える
sudo ironflock appliance rotate FILE_CRED_KEY --keep-direct-access --yes更新が途中で中断されている間は、終了コード 3 で拒否します(更新が途中で中断された場合)。
ironflock appliance revoke-direct-access
--keep-direct-access を付けて行った FILE_CRED_KEY のローテーションを終了させます。現在の FILE_CRED_KEY で作成されていない顧客の直接アクセスキーは、すべて無効になって削除されます。キー自体は残ります。fleetfiles サービスが再作成され、削除したものを報告します。
ironflock appliance revoke-direct-access [flags]動作環境: インストール済みのアプライアンスがある Linux。root: 必要。質問: あり。それらのキーの所有者は新しいキーを作成する必要があるためです。--yes で答えられます。
| フラグ | 意味 |
|---|---|
--install-dir <directory> | インストールディレクトリ。既定値:/opt/ironflock |
sudo ironflock appliance revoke-direct-access更新が途中で中断されている間は、終了コード 3 で拒否します(更新が途中で中断された場合)。
ironflock appliance remove
このマシンから IronFlock アプライアンスを削除し、インストールがホストに記録した変更を元に戻します。--purge を指定しない限り、データは残ります。
ironflock appliance remove [flags]動作環境: Linux。root: 必要。質問: あり。削除されるものと残るものを一覧表示した後で質問します。「No」があらかじめ選択されているため、Enter だけでは何も削除されません。
| フラグ | 意味 |
|---|---|
--purge | 指定しない場合に残るものも削除する:インストールディレクトリ、ボリューム、イメージ |
--force | 失敗した呼び出しを越えて続行し、元に戻す処理が失敗し続けるホスト変更の記録を破棄する |
--install-dir <directory> | インストールディレクトリ。既定値:ユニットが示すもの、なければ /opt/ironflock |
削除するもの:
- アプライアンスの systemd ユニット、コンテナ、Docker のネットワーク。
- IronFlock レジストリへの Docker のログイン。
- インストールがホストに記録したすべての変更(
/etc/ironflock/appliance.json):書き込んだプロキシ設定、Docker のdaemon.jsonの設定、ジャーナルの設定、マスクしたスリープターゲット。 - 更新がロールバックのために保存した以前のリリースのコピー(インストールディレクトリ内の
.update-previous)。
アプライアンスのコンテナの匿名ボリュームも、--purge の有無にかかわらず削除されます。名前付きボリュームと、コンテナがまだ使っているボリュームは削除されません。
残るもの
--purge を指定しない場合、後でインストールしたときに引き継げるよう、アプライアンスのデータは残ります:
- インストールディレクトリ(
/opt/ironflock)。シークレットを含む.env、license.env、インストールの選択の記録(install.json)、復元で設定できなかったデータベースのパスワードの印(.db-roles-pending)を含みます。 - Docker のボリューム。
--purge はこれらとイメージも削除します。アプライアンスが保持していたものは完全になくなります。
--purge を指定しても、次のものは残ります:
- Docker 自体と、ホストのデバイスエージェント。 エージェントは
ironflock agent removeで削除します。 - アプライアンスが書き込んだ後に変更されたファイル。 たとえば
ironflock agent configureが設定したプロキシ設定と、それを指定するドロップインです。これにより、エージェントはプロキシを保ちます。 - エージェントの記録(
/opt/ironflock/device-init/installed.json)がエージェントのものとしているもの、およびエージェントがマスクしたスリープターゲット。これらはironflock agent removeが削除します。
呼び出しが失敗した場合
元に戻す処理の呼び出しが失敗し続ける場合(たとえば、手動で削除された Docker の再起動)、記録は残ります。コマンドはどの呼び出しが失敗したかを示し、エラーで終了します。その呼び出しが成功するようになってから再度実行するか、--force を付けて実行してください。--force は記録をそのまま破棄し、無効にできないユニットや応答しない Docker を越えて続行します。
アプライアンスのインストール、更新、その他の変更が実行されている間、コマンドは最大 30 秒待ち、その旨を示します。その実行が続いている場合は、何も変更せずに終了コード 3 で終了します。
例
# アプライアンスを削除し、データは残す。コマンドは削除されるものを一覧表示して質問する
sudo ironflock appliance remove
# 質問なしで、すべてのデータとともにアプライアンスを削除する
sudo ironflock appliance remove --purge --yes「いいえ」と答えた場合、または端末がなく --yes もない場合は、終了コード 4 で終了します。
アプライアンスを完全に削除する前に、まだオンラインのうちにライセンスを移行または解放してください(廃止)。