インストール
1 行のコマンドで Linux または macOS に ironflock をインストールできます。/usr/local/bin に書き込むため、root 権限が必要です。その後は、ironflock self-update で最新のリリースに更新でき、ironflock version --check で新しいリリースが出ているかどうかを確認できます。
curl -fsSL https://instance-registry.ironflock.com/dl/cli/install.sh | sudo bashインストール用の 1 行が行うこと
- マシンのシステム(Linux または macOS)とアーキテクチャを判別します。Linux では amd64、arm64、32 ビット ARM(v5〜v7)、macOS では Apple シリコンまたは Intel です。Apple シリコンでは、Rosetta 2 の下で動作するシェルにも Apple シリコン向けのビルドが使われます。
https://instance-registry.ironflock.com/dl/cli/から、version.txtと、そのバージョンのこのマシン用のironflockをダウンロードします。- その両方を、スクリプトに含まれる IronFlock のリリース鍵で検証します。Linux では、OpenPGP 署名(
.asc)をsqvまたはgpgvで検証します。macOS では、同じ鍵による素の RSA 署名(.sig)をシステムの/usr/bin/opensslで検証するため、事前に何もインストールする必要がありません。 - バイナリを
/usr/local/bin/ironflockとしてインストールし、既存のものがあれば置き換えます。新しいファイルは古いファイルの隣にコピーされ、古いファイルの名前に変更されます。そのため、その時点で実行中のironflockは、起動したときのバイナリを使い続けます。/usr/local/binがない Mac では、スクリプトがフォルダーを作成します。 bash -s --の後に指定した引数でironflockを実行します。引数がない場合は、インストールだけを行い、次の手順を示します。
amd64 CPU を搭載した Linux マシンでは、出力は次のようになります:
Download base: https://instance-registry.ironflock.com/dl
Downloading ironflock 2.0.2 (linux/amd64)...
Signature verified (key F6C94D96CE315377ACA7C8EA4990543373212788).
Installed ironflock 2.0.2 as /usr/local/bin/ironflock.
Connect this machine to IronFlock with:
sudo ironflock agent install -c /path/to/device.flock
All commands: ironflock --help
Tab completion in your shell: ironflock completion --helpMac では、示される次の手順は ironflock os flash です。これは、デバイス用の IronFlockOS を USB スティックまたは SD カードに書き込みます。既存の ironflock を置き換えた場合、Installed の行は , in place of the one that was there. で終わります。
必要なもの
- root — スクリプトは
/usr/local/binに書き込みます。sudo bashで実行してください。 curlまたはwget— ダウンロードに使います。- Linux では
base64と、sqvまたはgpgv— 署名の検証に使います。apt はsqvとgpgvのどちらかに依存しているため、Debian と Ubuntu には必ずどちらかがあります。どちらもない場合、スクリプトは停止し、apt install gpgvを示します。 - macOS では、システムに付属するもの以外は不要 です。
スクリプトは POSIX シェル(bash、sh、dash、BusyBox ash)で実行されます。
署名がない、または正しくない場合
署名がないか正しくない場合、スクリプトは何もインストールせずに停止し、以前にインストールされた ironflock はそのまま残ります。スクリプトは終了コード 1 で終了し、stderr に 1 行を出力します。例:
install.sh: https://instance-registry.ironflock.com/dl/cli/linux/amd64/2.0.2/ironflock is not signed by IronFlock: not installing itダウンロードに失敗した場合も、スクリプトは同じように停止し、何もインストールされません。
インストールとコマンドの実行を 1 行で行う
bash -s -- の後の引数は、インストールされた ironflock に渡されます。次の 1 行は ironflock をインストールし、デバイス設定ファイル(.flock)device.flock のデバイスとして、マシンを IronFlock に接続します:
curl -fsSL https://instance-registry.ironflock.com/dl/cli/install.sh | sudo bash -s -- agent install -c device.flockcurl ... | bash の形では、スクリプトの標準入力はスクリプト自身です。そのためスクリプトは、ironflock が端末から入力を読み取れるようにしています。コマンドの質問はこれまでどおり表示され、通常どおり答えられます。端末がない場合(cloud-init スクリプト、CI)、ironflock には入力がありません。質問するコマンドは、--yes を付けない限り終了コード 4 で終了します。スクリプトは ironflock の終了コードで終了します。コマンドの説明は ironflock agent install を参照してください。
更新
sudo ironflock self-update は、IronFlock のリリース鍵による同じチェックの後で、ironflock を最新のリリースに置き換えます(ironflock self-update)。ironflock version --check は、インストールされているバージョンと、新しいリリースが出ているかどうかを表示します(ironflock version)。
このページの冒頭にあるインストール用の 1 行でも更新できます。もう一度実行すると、/usr/local/bin/ironflock が現在のリリースに置き換わります。
IronFlockOS デバイスでは、ironflock はシステムに含まれており、ironflock os update がシステムとともに更新します。
インストールスクリプトを事前に検証する
install.sh が root で実行される前にスクリプト自体を確認するには、署名と一緒にダウンロードし、リリース鍵をインポートして、gpg で署名を検証します:
curl -fsSLO https://instance-registry.ironflock.com/dl/cli/install.sh
curl -fsSLO https://instance-registry.ironflock.com/dl/cli/install.sh.asc
curl -fsSL https://instance-registry.ironflock.com/dl/cli/ironflock-bootstrap.asc | gpg --import
gpg --verify install.sh.asc install.shgpg が、フィンガープリント F6C9 4D96 CE31 5377 ACA7 C8EA 4990 5433 7321 2788 の鍵による有効な署名であると報告する必要があります。このフィンガープリントを、署名鍵 に記載された IronFlock Bootstrap 鍵と照合してください。その後、検証済みのスクリプトを、引数なしで、または ironflock 用の引数を付けて実行します:
sudo bash install.sh
sudo bash install.sh agent install -c device.flockダウンロードベース
ironflock とインストールスクリプトは、IronFlock クラウド https://instance-registry.ironflock.com/dl からダウンロードします。ネットワーク内のミラーなど、別のダウンロードベースを指定する方法は 2 つあります。IronFlock アプライアンスのデバイスでは、いくつかのコマンドがアプライアンスのダウンロードミラーを自分で見つけます:
| 設定 | 読み取るもの | 優先順位 |
|---|---|---|
--download-base <url> | すべての ironflock コマンド | 1 番目 |
環境変数 IRONFLOCK_DL_BASE | install.sh とすべての ironflock コマンド | 2 番目 |
デバイスの .flock ファイルが指定するアプライアンスのダウンロードミラー | agent install、doctor、os install、os update | 3 番目 |
| IronFlock クラウド | すべてのコマンド | 最後 |
インストールスクリプトは、ダウンロードベースの下から cli/version.txt と cli/<system>/<arch>/<version>/ironflock を、それぞれの .asc 署名と .sig 署名とともに読み取ります。ダウンロードベースがどこであっても、スクリプトに含まれるリリース鍵でこれらを検証するため、ミラーは IronFlock の署名済みファイルを変更せずに配信します。ironflock は、IronFlockOS のカタログとイメージを ironflockos/ の下から、デバイスエージェントを device-agent/ の下から、最新のリリース(self-update と version --check 用の version.txt)と ironflock バイナリ(self-update 用と、--host で使うほかのプラットフォーム用)を cli/ の下から読み取ります。
既定では、sudo はシェルの変数を引き継ぎません。変数は sudo の後に設定するか、フラグを指定してください:
# ミラーから ironflock をインストールする
curl -fsSL https://mirror.example.com/dl/cli/install.sh | sudo IRONFLOCK_DL_BASE=https://mirror.example.com/dl bash
# ミラーのエージェントでこのマシンを接続する
sudo ironflock agent install -c device.flock --download-base https://mirror.example.com/dl2 つのコマンドは、ダウンロードベースの使い方が異なります。agent update は、エージェントを自身の更新サーバー(.flock ファイルの update_url)から更新させ、ダウンロードベースはこれを変えません。os update は、フラグ、次に変数、次にエージェントの .flock ファイルの update_url の順に使います。--host では、ダウンロードベースは別のマシンにも引き継がれます。ログイン情報を含むダウンロードベース(https://user:[email protected]/dl)を指定すると、どのマシンにも接続する前に終了コード 2 で終了します。
IronFlock アプライアンスのデバイス
IronFlock アプライアンスが発行する .flock ファイルは、エージェントの更新サーバー(update_url)として、アプライアンスのダウンロードミラーを指定しています。たとえば http://10.0.0.5:15002/dl、アプライアンスがドメインで動作している場合は https://registry.<domain>/dl です。--download-base も IRONFLOCK_DL_BASE も設定されていない場合、agent install、doctor、os install はファイルをそのミラーから取得します。そのため、アプライアンスには到達できても ironflock.com には到達できないマシンも、接続したり変換したりできます。IronFlock クラウドの .flock ファイルはクラウドのホストを指定しており、クラウドから取得します。
- ミラーが提供しないものは、IronFlock クラウドのダウンロードベースの下の同じパスから、警告付きで取得します。警告は、
agent installでは stderr のWarning:の行と--jsonの結果のwarningsの項目、os installでは計画の警告、doctorではチェックdownload_treeのwarningです。agent installとos installが失敗するのは、ミラーからもクラウドからもファイルを取得できない場合だけで、そのときエラーは両方を示します。 agent installとos installは、ミラーには直接接続し、クラウドにはプロキシがあればプロキシを経由して接続します。- アプライアンス独自の CA による証明書を使う HTTPS のミラーは、マシンのシステムがその CA を信頼している場合にだけ使えます。
一部のダウンロードは、引き続きほかの場所から取得します:
install.shとironflockバイナリは ironflock.com から取得します。--hostでは、バイナリはあなたのコンピューターからマシンに送られます(SSH 経由のリモートマシン)。agent installは、ディストリビューションのパッケージと Docker を、それぞれのサーバーから取得します。self-updateとversion --checkは、フラグ、次に変数を読み取り、なければ IronFlock クラウドを使います。アプライアンスのミラーは使いません。
インストール後、エージェントはアプライアンスから更新を取得します。エッジデバイス を参照してください。
タブ補完
ironflock completion は、Tab キーを押したときにシェルが ironflock のコマンドラインを補完できるようにするスクリプトを出力します。
ironflock completion <shell>シェルは bash、zsh、fish のいずれかです。Linux と macOS で動作します。root は不要です。質問はしません。このコマンドに固有のフラグはなく、グローバルフラグ が適用されます。
入力中のシェルで補完するには、そのシェル用の行を実行します。新しく開くすべてのシェルで補完するには、3 列目のファイルにその行を追加します:
| シェル | 行 | ファイル |
|---|---|---|
| bash | eval "$(ironflock completion bash)" | ~/.bashrc。パッケージ bash-completion が必要です |
| zsh | source <(ironflock completion zsh) | ~/.zshrc、compinit の後 |
| fish | ironflock completion fish | source | ~/.config/fish/config.fish |
スクリプトが補完するのは次のものです:
- コマンドとそのフラグ
- 少数の決まった値のいずれかを取るフラグの値:
os imagesの--channel、--variant、--kernel、os updateの--channel、os flashの--installer-confirm、--installer-after、--installer-allow-usb -cに指定する.flockファイル--hosts、--proxy-password-file、--wifi-password-file、--image-file、--output、--drive、--diskに指定する、シェルのファイル名
そのほかのフラグと、ほかのコマンドの引数は何も補完されません。補完のとき、スクリプトは当てはまる語を ironflock に問い合わせ、ironflock は自身のコマンド一覧から答えます。補完ではコマンドは実行されず、ドライブの一覧も取得されず、何もダウンロードされず、ほかのマシンにも接続しません。行に --host が含まれていても同じです。--host または --hosts を付けても、ironflock completion は --help と同じく、このマシンで応答されます。
# 入力中の bash で補完する
eval "$(ironflock completion bash)"
# 新しく開くすべての bash で補完する
echo 'eval "$(ironflock completion bash)"' >> ~/.bashrc$ eval "$(ironflock completion bash)"
$ ironflock os images --kernel <Tab>
rt std--json を付けると、結果はスクリプトを含む JSON オブジェクトになります:
{"shell":"bash","script":"..."}シェルの指定がない場合、不明なシェルの場合、複数のシェルを指定した場合は、コマンドラインの誤りです。終了コード 2 で終了し、エラーには受け付けるシェルが示されます。
ironflock version
ironflock バイナリのバージョンと、ビルド対象のプラットフォームを表示します。--check を付けると、新しいリリースが出ているかどうかもダウンロードサーバーに問い合わせます。
ironflock version [flags]Linux と macOS で動作します。root は不要です。質問はしません。グローバルフラグ が適用されます。
| フラグ | 意味 |
|---|---|
--check | 新しいリリースが出ているかどうかをダウンロードサーバーに問い合わせる |
# このマシンの ironflock のバージョン
ironflock version
# 同じ内容を JSON で
ironflock version --json
# SSH 経由で別のマシン上で実行されるバイナリ:同じバージョンで、そのマシンのプラットフォーム用
ironflock --host pi@device-17 version
# 新しいリリースは出ているか
ironflock version --checkironflock 2.0.2 linux/amd64{"version":"2.0.2","os":"linux","arch":"amd64"}--host では、プラットフォームは別のマシンのものになります(例:ironflock 2.0.2 linux/arm64)。別のマシンでは、同じバージョンの、そのマシンのプラットフォーム用のバイナリが実行されます。
開発ビルドはコミットを示します。2.0.0-23-g5b38681 は、リリース 2.0.0 から 23 コミット後のコミット 5b38681 のビルドです。
新しいリリースが出ているか
--check は、ダウンロードベース(--download-base、なければ IRONFLOCK_DL_BASE、なければ IronFlock クラウド)の cli/version.txt を読み取り、バイナリに含まれる IronFlock のリリース鍵で、その署名(.asc)を検証します。問い合わせには、agent configure が設定したプロキシ(/etc/ironflock/proxy.env)を、なければ環境のプロキシを使います。このファイルは root しか読めないため、root でない場合は環境のプロキシを使います。最新のリリースを問い合わせるコマンドは version --check と self-update だけで、自動で問い合わせるコマンドはありません。
stdout の 2 行目に、見つかった内容と、新しいリリースをインストールする方法(self-update、IronFlockOS では os update)が示されます。
$ ironflock version --check
ironflock 2.0.3 linux/amd64
ironflock 2.1.0 is out at https://instance-registry.ironflock.com/dl. 'sudo ironflock self-update' installs it.version.txt がこのバイナリのバージョンを示している場合、2 行目は This is the newest release. です。このバイナリのほうが新しい場合(リリース後の開発ビルド)は、その旨が示されます。開発ビルド x.y.z-N-g<commit> は、リリース x.y.z より新しく、次のリリースより古いものとして扱われます。N = 0 の場合は x.y.z と同じ扱いで、新しいリリースは出ていないと示されます。
--json を付けると、オブジェクトにフィールドが 2 つ加わります。version.txt が示すバージョンの latest_version と、それがこのバイナリより新しいかどうかを示す newer です。
{"version":"2.0.3","os":"linux","arch":"amd64","latest_version":"2.1.0","newer":true}終了コードは、新しいリリースが出ているかどうかにかかわらず 0 です。サーバーが応答しない場合、version.txt がない場合、鍵で署名されていない version.txt の場合は 1 です。--host では、version と同じく 1 行目はこのビルドのバイナリを示し、サーバーへの問い合わせは別のマシンが行います。
ironflock self-update
実行中の ironflock バイナリを、最新のリリース、または --version で指定したリリース(古いものも可)に置き換えます。ディスク上の何かを変更する前に、リリースを IronFlock のリリース鍵で検証します。
ironflock self-update [flags]動作環境: Linux と macOS。IronFlockOS では動作しません。root: /usr/local/bin/ironflock には必要です(バイナリを置き換えられるユーザー)。質問: あり。どのリリースがどのリリースを置き換えるかを示した後で質問します。--yes で答えられます。
| フラグ | 意味 |
|---|---|
--version <x.y.z> | 最新の代わりにインストールするリリース(例:2.0.3)。古いものも指定できます |
# ironflock を最新のリリースに更新する。コマンドは先に質問する
sudo ironflock self-update
# 質問なしで更新し、結果を JSON で読み取る
sudo ironflock self-update --yes --json
# 古いリリースに戻す
sudo ironflock self-update --version 2.0.3
# 別のマシンにインストールされている ironflock を更新する
ironflock --host pi@device-17 self-update --yes何を何で置き換えるか
- ファイル。 実行中のバイナリです。シンボリックリンクはすべてたどります。リンク先のファイルが置き換えられ、リンクはそのまま残ります。コマンドは何よりも先にそのファイルを示します。エージェントのインストールのフォルダー
/opt/ironflock/device-initは、そのインストールの記録を保持するもので、ironflockは含みません。コマンドはこのフォルダーに触れません。 - リリース。
--versionがない場合は最新のリリースです。つまり、ダウンロードベース(--download-base、なければIRONFLOCK_DL_BASE、なければ IronFlock クラウド)のcli/version.txtが示すもので、インストール用の 1 行が読み取るのと同じファイルです。リリースのバイナリはcli/<system>/<arch>/<version>/ironflockです。チャネルはありません。別のツリーを使うには、ミラーなど別のダウンロードベースを指定します。 - プロキシ。 ダウンロードには、
agent configureが設定したプロキシ(/etc/ironflock/proxy.env)を、なければ環境のHTTP_PROXY、HTTPS_PROXY、NO_PROXYを使います。sudoと--host経由のコマンドでは、環境にプロキシがありません。このファイルは root のものなので、root でない実行では環境のプロキシを使い、その旨を示します。ファイルのプロキシを使う場合も、コマンドはその旨を示します。 - 何もしない場合。 バイナリがすでにそのリリースであるか、それより新しい場合(リリース後の開発ビルド)、コマンドはその旨を示し、質問もダウンロードもせずに終了コード 0 で終了します。結果の
outcomeはcurrentです。--versionがない場合、古いリリースに戻ることはありません。
チェック
バイナリを置き換える前に、次のことを行います:
- 実行中のバイナリに含まれる IronFlock のリリース鍵で、
version.txtをその署名と照合します。 - 新しいバイナリを、同じ鍵による署名と、そのビルド情報と照合します。プログラムが
ironflockであり、このプラットフォーム用で、変更されていないソースツリーからビルドされている必要があります。 - 新しいバイナリを、古いバイナリの隣の同じフォルダーに、古いものと同じモード、所有者、グループで書き込み、1 回実行します(
version --json)。新しいバイナリは、要求されたリリースであり、このプラットフォーム用であると応答する必要があります。署名はバージョンを結び付けないため、最新のものの代わりに古い署名済みバイナリが配信された場合は、ここで拒否されます。 - その後で初めて、1 回の操作で古いバイナリの名前に変更します。
sqv も gpgv も不要です。ironflock が自分で署名を検証します。
チェックに失敗したファイルがバイナリを置き換えることはなく、隣に置いた新しいファイルは再び削除されます。失敗した実行、拒否された実行、中断された実行では、古いバイナリはそのまま残ります。ファイルの置き換え中に実行されている ironflock のコマンドは、起動したときのファイルを使い続けます。書き込みと名前の変更の間に 2 回目の Ctrl-C や電源断があると、新しいファイル(バイナリの隣の .ironflock.new-*)が残ることがあります。手動で削除してください。
バイナリを置き換えられるユーザー
新しいファイルが所有者とグループを引き継げるように、コマンドにはバイナリのフォルダーへの書き込み権限が必要で、バイナリの所有者でそのグループのメンバーとして、または root として実行する必要があります。インストール用の 1 行が置く /usr/local/bin/ironflock の場合は、root です。そうでない場合、コマンドは何かをダウンロードする前に終了コード 3 で終了し、所有者またはグループと、sudo を付けたコマンドラインを示します。
IronFlockOS とほかのマシン
- IronFlockOS は
ironflockをシステムとともに備えており、OS の更新のたびにシステム全体が置き換わります。そこでは、コマンドは何かを調べる前に終了コード 3 で終了し、os updateを示します。IronFlockOS のインストーラースティックでは、agentコマンドと同じく拒否されます。 --hostでは、実行中のバイナリはその実行用のコピーで、コマンドの終了時に削除されます。そのため、コマンドは代わりにマシンの/usr/local/bin/ironflockを更新します。このファイルがない場合は終了コード 3 で終了し、インストール用の 1 行を示します。インストール済みのironflockが動作しない場合や、バージョンを応答しない場合も、何かをダウンロードする前に終了コード 3 で終了します。インストール用の 1 行でironflockを新たにインストールしてください。- 複数のマシンでは(
--hostを複数回、または--hosts)、--yesを付けると、各マシンがその/usr/local/bin/ironflockを更新します。
結果
$ sudo ironflock self-update
This ironflock is 2.0.3, at /usr/local/bin/ironflock.
Download base: https://instance-registry.ironflock.com/dl (from default)
The downloads go through the proxy of the install's record (/etc/ironflock/proxy.env).
The newest release at https://instance-registry.ironflock.com/dl is ironflock 2.1.0 (its version.txt is signed by key F6C94D96CE315377ACA7C8EA4990543373212788).
ironflock 2.1.0 replaces 2.0.3 at /usr/local/bin/ironflock.
A command of ironflock that runs now goes on with 2.0.3; the next one runs 2.1.0.
? Install ironflock 2.1.0? Yes
Downloading ironflock 2.1.0 for linux/amd64 from https://instance-registry.ironflock.com/dl.
Signature verified (key F6C94D96CE315377ACA7C8EA4990543373212788): the program ironflock for linux/amd64.
The new file says it is ironflock 2.1.0 linux/amd64; it is in place.
ironflock at /usr/local/bin/ironflock is updated from 2.0.3 to 2.1.0.バイナリは回答の後でダウンロードされます。端末がない場合、または --json を付けた場合、コマンドには --yes が必要です。--json を付けた場合、すでに最新のリリースであるバイナリでは次のようになります:
{"outcome":"current","path":"/usr/local/bin/ironflock","version":"2.1.0","latest_version":"2.1.0"}| フィールド | 値 |
|---|---|
action | バイナリを置き換えた場合は updated。それ以外の場合はない |
outcome | updated(新しいリリース、または --version を付けた場合は同等の別のビルド)、downgraded(--version で指定した古いリリース)、current(何もしない) |
path | 置き換えたファイル、または置き換えるはずだったファイル |
version | そのファイルの現在のバージョン |
previous_version | ファイルを置き換えた場合の、以前のバージョン |
latest_version | version.txt が示すバージョン。--version を付けた場合は version.txt を読まないため、ない |
終了コード
| コード | 意味 |
|---|---|
| 0 | 更新した、または何もすることがなかった |
| 1 | ダウンロードの失敗、チェックの失敗、ダウンロードツリーにこのプラットフォーム用の最新リリースのバイナリがない、または置き換えの失敗。バイナリは元のまま |
| 2 | コマンドラインの誤り。バージョンではない --version、またはダウンロードツリーにこのプラットフォーム用がない --version も含む |
| 3 | IronFlockOS 上、ファイルを置き換える権限がない、--host で /usr/local/bin/ironflock がない、またはバージョンを応答しない |
| 4 | 質問に「いいえ」と答えた、または質問できず --yes が指定されていない |
| 130 | 中断された。バイナリは元のまま |