Installazione
Una sola riga installa ironflock su Linux o macOS. Richiede root, perché scrive in /usr/local/bin. In seguito, ironflock self-update lo porta alla release più recente, e ironflock version --check ti dice se ne è uscita una più recente.
curl -fsSL https://instance-registry.ironflock.com/dl/cli/install.sh | sudo bashCosa fa la riga di installazione
- Determina il sistema (Linux o macOS) e l’architettura della macchina: amd64, arm64 o ARM a 32 bit (da v5 a v7) su Linux, Apple silicon o Intel su macOS. Su Apple silicon, anche una shell eseguita sotto Rosetta 2 riceve la build per Apple silicon.
- Scarica
version.txte il binarioironflockdi quella versione per questa macchina dahttps://instance-registry.ironflock.com/dl/cli/. - Verifica entrambi con la chiave di release di IronFlock contenuta nello script. Su Linux verifica la firma OpenPGP (
.asc) consqvogpgv. Su macOS verifica la semplice firma RSA della stessa chiave (.sig) con/usr/bin/openssldel sistema, così non occorre installare nulla prima. - Installa il binario come
/usr/local/bin/ironflock, al posto di quello eventualmente presente. Il nuovo file viene copiato accanto al vecchio e poi rinominato al suo posto, così unironflockin esecuzione in quel momento continua a usare il binario da cui è partito. Su un Mac senza/usr/local/bin, lo script crea la cartella. - Esegue
ironflockcon gli argomenti indicati dopobash -s --. Senza argomenti si limita a installarlo e indica il passo successivo.
Su una macchina Linux con CPU amd64, l’output è simile a questo:
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 --helpSu un Mac, il passo successivo indicato è ironflock os flash, che scrive IronFlockOS per un dispositivo su una chiavetta USB o una scheda SD. Quando sostituisce un ironflock già presente, la riga Installed termina con , in place of the one that was there.
Requisiti
- Root — lo script scrive in
/usr/local/bin. Eseguilo consudo bash. curlowget— per i download.- Su Linux,
base64esqvogpgv— per la verifica della firma. apt dipende da uno trasqvegpgv, quindi ogni Debian e Ubuntu ne ha uno. Se mancano entrambi, lo script si interrompe e indicaapt install gpgv. - Su macOS, nulla che non sia già incluso nel sistema.
Lo script viene eseguito da una shell POSIX: bash, sh, dash o BusyBox ash.
Firma mancante o errata
Una firma mancante o errata interrompe lo script prima che installi qualcosa, e un ironflock installato in precedenza resta com’era. Lo script termina con il codice di uscita 1 e una riga su stderr, ad esempio:
install.sh: https://instance-registry.ironflock.com/dl/cli/linux/amd64/2.0.2/ironflock is not signed by IronFlock: not installing itUn download non riuscito interrompe lo script allo stesso modo: non viene installato nulla.
Installare ed eseguire un comando in una sola riga
Gli argomenti dopo bash -s -- passano a ironflock una volta installato. Questa riga installa ironflock e collega la macchina a IronFlock come il dispositivo del file di configurazione del dispositivo (.flock) device.flock:
curl -fsSL https://instance-registry.ironflock.com/dl/cli/install.sh | sudo bash -s -- agent install -c device.flockCon curl ... | bash, lo standard input dello script è lo script stesso. Per questo lo script fa leggere a ironflock l’input dal tuo terminale, così le domande del comando ti raggiungono comunque e rispondi come al solito. Senza un terminale (uno script cloud-init, la CI), ironflock non riceve input: un comando che pone una domanda termina con il codice di uscita 4, a meno che tu non aggiunga --yes. Lo script termina con il codice di uscita di ironflock. ironflock agent install descrive il comando.
Aggiornamento
sudo ironflock self-update sostituisce ironflock con la release più recente, dopo le stesse verifiche con la chiave di release di IronFlock (ironflock self-update). ironflock version --check mostra la versione che hai e se è uscita una release più recente (ironflock version).
Anche la riga di installazione all’inizio di questa pagina aggiorna: eseguila di nuovo, e sostituisce /usr/local/bin/ironflock con la release attuale.
Su un dispositivo IronFlockOS, ironflock fa parte del sistema, e ironflock os update lo aggiorna insieme al sistema.
Verificare prima lo script di installazione
Per controllare install.sh stesso prima che venga eseguito come root, scaricalo insieme alla sua firma, importa la chiave di release e verifica la firma con 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 deve segnalare una firma valida della chiave con l’impronta F6C9 4D96 CE31 5377 ACA7 C8EA 4990 5433 7321 2788. Confrontala con la chiave IronFlock Bootstrap in Chiavi di Firma. Poi esegui lo script verificato, senza argomenti oppure con gli argomenti per ironflock:
sudo bash install.sh
sudo bash install.sh agent install -c device.flockBase di download
ironflock e lo script di installazione scaricano dal cloud IronFlock, https://instance-registry.ironflock.com/dl. Una base di download diversa, ad esempio un mirror nella tua rete, si indica in uno di questi due modi. Per un dispositivo di un IronFlock Appliance, alcuni comandi trovano da soli il mirror di download dell’Appliance:
| Impostazione | Letta da | Precedenza |
|---|---|---|
--download-base <url> | ogni comando ironflock | prima |
la variabile d’ambiente IRONFLOCK_DL_BASE | install.sh e ogni comando ironflock | seconda |
il mirror di download dell’Appliance indicato dal file .flock del dispositivo | agent install, doctor, os install, os update | terza |
| il cloud IronFlock | ogni comando | ultima |
Sotto la base di download, lo script di installazione legge cli/version.txt e cli/<system>/<arch>/<version>/ironflock, ciascuno con la sua firma .asc e .sig. Li verifica con la chiave di release che contiene, qualunque sia la base di download, quindi un mirror distribuisce i file firmati di IronFlock senza modificarli. ironflock legge il catalogo e le immagini di IronFlockOS sotto ironflockos/, l’agente del dispositivo sotto device-agent/ e, sotto cli/, la release più recente (version.txt, per self-update e version --check) e i binari ironflock (per self-update e, per --host, quelli delle altre piattaforme).
Per impostazione predefinita, sudo non trasmette le variabili della tua shell. Imposta la variabile dopo sudo, oppure usa il flag:
# Installa ironflock da un mirror
curl -fsSL https://mirror.example.com/dl/cli/install.sh | sudo IRONFLOCK_DL_BASE=https://mirror.example.com/dl bash
# Collega questa macchina con l'agente del mirror
sudo ironflock agent install -c device.flock --download-base https://mirror.example.com/dlDue comandi usano la base di download in modo diverso. agent update fa aggiornare l’agente dal suo server di aggiornamento, l’update_url del suo file .flock, e la base di download non lo cambia. os update usa il flag, poi la variabile, poi l’update_url del file .flock dell’agente. Con --host, la base di download viene passata all’altra macchina; una base che contiene credenziali di login (https://user:[email protected]/dl) termina con il codice di uscita 2 prima che venga raggiunta qualsiasi macchina.
Dispositivi di un IronFlock Appliance
Il file .flock emesso da un IronFlock Appliance indica il mirror di download dell’Appliance come server di aggiornamento dell’agente (update_url), ad esempio http://10.0.0.5:15002/dl, oppure https://registry.<domain>/dl quando l’Appliance funziona con un dominio. Quando non sono impostati né --download-base né IRONFLOCK_DL_BASE, agent install, doctor e os install prendono i loro file da quel mirror, così una macchina che raggiunge l’Appliance ma non ironflock.com può essere collegata o convertita. Un file .flock del cloud IronFlock indica un host del cloud e usa il cloud.
- Ciò che il mirror non fornisce viene dallo stesso percorso sotto la base di download del cloud IronFlock, con un avviso: per
agent installuna rigaWarning:su stderr e una voce diwarningsnel risultato--json, peros installun avviso nel piano, perdoctorunwarningdel controllodownload_tree.agent installeos installfalliscono solo quando né il mirror né il cloud forniscono un file, e il loro errore indica allora entrambi. agent installeos installraggiungono il mirror direttamente, e il cloud attraverso il proxy, quando ce n’è uno.- Un mirror HTTPS con un certificato della CA propria dell’Appliance funziona solo dove il sistema della macchina considera attendibile quella CA.
Alcuni download vengono comunque da altrove:
install.she il binarioironflockvengono da ironflock.com. Con--host, il binario passa dal tuo computer alla macchina (Macchine remote via SSH).agent installprende i pacchetti della distribuzione e Docker dai loro server.self-updateeversion --checkleggono il flag, poi la variabile, altrimenti il cloud IronFlock, non il mirror dell’Appliance.
Dopo l’installazione, l’agente riceve gli aggiornamenti dall’Appliance. Vedi Dispositivi edge.
Completamento con Tab
ironflock completion stampa lo script che permette alla tua shell di completare le righe di comando di ironflock quando premi Tab.
ironflock completion <shell>La shell è bash, zsh o fish. Funziona su Linux e macOS. Senza root. Non chiede nulla. Il comando non ha flag propri; valgono i flag globali.
Esegui la riga per la tua shell per avere il completamento nella shell in cui stai scrivendo. Aggiungi la riga al file della terza colonna per averlo in ogni nuova shell:
| Shell | Riga | File |
|---|---|---|
| bash | eval "$(ironflock completion bash)" | ~/.bashrc; richiede il pacchetto bash-completion |
| zsh | source <(ironflock completion zsh) | ~/.zshrc, dopo compinit |
| fish | ironflock completion fish | source | ~/.config/fish/config.fish |
Lo script completa:
- i comandi e i loro flag;
- i valori dei flag che ne accettano solo pochi:
--channel,--variante--kerneldios images,--channeldios update, e--installer-confirm,--installer-aftere--installer-allow-usbdios flash; - un file
.flockper-c; - i nomi di file della shell per
--hosts,--proxy-password-file,--wifi-password-file,--image-file,--output,--drivee--disk.
Gli altri flag e gli argomenti degli altri comandi non completano nulla. Per completare, lo script chiede a ironflock le parole adatte, e ironflock risponde dal proprio elenco di comandi: il completamento non esegue alcun comando, non elenca unità, non scarica nulla e non raggiunge altre macchine, anche quando la riga contiene --host. Con --host o --hosts, ironflock completion riceve risposta su questa macchina, come --help.
# Completamento nella bash in cui stai scrivendo
eval "$(ironflock completion bash)"
# Completamento in ogni nuova bash
echo 'eval "$(ironflock completion bash)"' >> ~/.bashrc$ eval "$(ironflock completion bash)"
$ ironflock os images --kernel <Tab>
rt stdCon --json, il risultato è lo script in un oggetto JSON:
{"shell":"bash","script":"..."}Una shell mancante o sconosciuta, o più di una, è una riga di comando errata: codice di uscita 2, e l’errore indica le shell accettate.
ironflock version
Stampa la versione del binario ironflock e la piattaforma per cui è stato compilato. Con --check, chiede anche al server di download se è uscita una release più recente.
ironflock version [flags]Funziona su Linux e macOS. Senza root. Non chiede nulla. Valgono i flag globali.
| Flag | Significato |
|---|---|
--check | Chiede al server di download se è uscita una release più recente |
# La versione di ironflock su questa macchina
ironflock version
# La stessa come JSON
ironflock version --json
# Il binario eseguito su un'altra macchina via SSH: stessa versione, piattaforma di quella macchina
ironflock --host pi@device-17 version
# È uscita una release più recente?
ironflock version --checkironflock 2.0.2 linux/amd64{"version":"2.0.2","os":"linux","arch":"amd64"}Con --host, la piattaforma è quella dell’altra macchina, ad esempio ironflock 2.0.2 linux/arm64: l’altra macchina esegue un binario della stessa versione per la propria piattaforma.
Una build di sviluppo indica il suo commit: 2.0.0-23-g5b38681 è la build del commit 5b38681, 23 commit dopo la release 2.0.0.
È uscita una release più recente?
--check legge cli/version.txt della base di download (--download-base, altrimenti IRONFLOCK_DL_BASE, altrimenti il cloud IronFlock) e lo verifica rispetto alla sua firma (.asc) con la chiave di release di IronFlock contenuta nel binario. Chiede attraverso il proxy impostato da agent configure (/etc/ironflock/proxy.env), altrimenti attraverso il proxy dell’ambiente. Solo root legge quel file, quindi senza root usa quello dell’ambiente. version --check e self-update sono gli unici comandi che chiedono la release più recente; nessun comando lo fa da solo.
Una seconda riga su stdout dice cosa ha trovato e cosa installa una release più recente: self-update, oppure su 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.Quando version.txt indica la versione di questo binario, la seconda riga è This is the newest release. Quando questo binario è più recente, una build di sviluppo successiva alla release, la riga lo dice. Una build di sviluppo x.y.z-N-g<commit> conta come più recente della release x.y.z e più vecchia della successiva; con N = 0 equivale a x.y.z, e la riga dice che non è uscita una release più recente.
Con --json, l’oggetto ha due campi in più: latest_version, ciò che indica version.txt, e newer, se è più recente di questo binario.
{"version":"2.0.3","os":"linux","arch":"amd64","latest_version":"2.1.0","newer":true}Il codice di uscita è 0 sia che sia uscita una release più recente sia che non lo sia. È 1 quando il server non risponde, non ha un version.txt o ne ha uno non firmato con la chiave. Con --host, la prima riga indica il binario di questa build, come fa version, e l’altra macchina chiede al server.
ironflock self-update
Sostituisce il binario ironflock in esecuzione con la release più recente, oppure con la release indicata da --version, anche una più vecchia. La release viene verificata con la chiave di release di IronFlock prima che cambi qualcosa sul disco.
ironflock self-update [flags]Funziona su: Linux e macOS; non su IronFlockOS. Root: richiesto per /usr/local/bin/ironflock (Chi può sostituire il binario). Chiede: sì, dopo aver detto quale release sostituisce quale; --yes risponde.
| Flag | Significato |
|---|---|
--version <x.y.z> | La release da installare al posto della più recente, ad esempio 2.0.3; anche una più vecchia |
# Aggiorna ironflock alla release più recente; il comando chiede prima
sudo ironflock self-update
# Aggiorna senza domande e leggi il risultato come JSON
sudo ironflock self-update --yes --json
# Torna a una release più vecchia
sudo ironflock self-update --version 2.0.3
# Aggiorna l'ironflock installato su un'altra macchina
ironflock --host pi@device-17 self-update --yesCosa sostituisce, e con cosa
- Il file. Il binario in esecuzione, dopo aver risolto ogni collegamento simbolico: viene sostituito il file a cui porta un collegamento, e il collegamento resta. Il comando indica il file prima di ogni altra cosa. La cartella
/opt/ironflock/device-initdi un’installazione dell’agente contiene il record di quell’installazione, nessunironflock, e il comando non la tocca. - La release. Senza
--version, la più recente: quella indicata dacli/version.txtdella base di download (--download-base, altrimentiIRONFLOCK_DL_BASE, altrimenti il cloud IronFlock), il file che legge la riga di installazione. Il binario di una release ècli/<system>/<arch>/<version>/ironflock. Non ci sono canali: un altro albero è un’altra base di download, ad esempio un mirror. - Il proxy. I download passano attraverso il proxy impostato da
agent configure(/etc/ironflock/proxy.env), altrimenti attraversoHTTP_PROXY,HTTPS_PROXYeNO_PROXYdell’ambiente.sudoe un comando via--hostnon hanno alcun proxy nel loro ambiente. Il file appartiene a root, quindi un’esecuzione senza root usa il proxy dell’ambiente e lo dice. Il comando dice quando usa quello del file. - Niente da fare. Quando il binario è già quella release, o è più recente (una build di sviluppo successiva), il comando lo dice e termina con il codice di uscita 0, senza domande e senza download; l’
outcomedel risultato ècurrent. Senza--versionnon torna mai a una release più vecchia.
Le verifiche
Prima che il binario venga sostituito:
version.txtviene verificato rispetto alla sua firma con la chiave di release di IronFlock contenuta nel binario in esecuzione.- Il nuovo binario viene verificato rispetto alla sua firma con la stessa chiave, e rispetto alle sue informazioni di build: il programma
ironflock, per questa piattaforma, da un albero dei sorgenti non modificato. - Viene scritto accanto al vecchio, nella stessa cartella, con il modo, il proprietario e il gruppo del vecchio, ed eseguito una volta (
version --json). Deve dire di essere la release richiesta, su questa piattaforma. Una firma non vincola alcuna versione, quindi un binario firmato più vecchio fornito al posto del più recente viene rifiutato qui. - Solo allora viene rinominato al posto del vecchio, in un solo passo.
Non servono sqv né gpgv: ironflock verifica le firme da sé.
Un file che non supera una verifica non sostituisce mai il binario, e il nuovo file accanto viene rimosso di nuovo. Un’esecuzione che fallisce, viene rifiutata o viene interrotta lascia il vecchio binario com’era. Un comando ironflock in esecuzione mentre il file viene sostituito continua con il file da cui è partito. Un secondo Ctrl-C, o un’interruzione di corrente, tra la scrittura e la ridenominazione può lasciare il nuovo file (.ironflock.new-* accanto al binario); rimuovilo a mano.
Chi può sostituire il binario
Il comando richiede l’accesso in scrittura alla cartella del binario, e deve essere eseguito come proprietario del binario e membro del suo gruppo, oppure come root, così che il nuovo file mantenga il proprietario e il gruppo. Per /usr/local/bin/ironflock, dove lo mette la riga di installazione, significa root. Altrimenti il comando termina con il codice di uscita 3 prima di scaricare qualsiasi cosa, indica il proprietario o il gruppo, e indica la riga di comando con sudo.
IronFlockOS e altre macchine
- IronFlockOS porta
ironflockcon il suo sistema, e ogni aggiornamento del sistema operativo sostituisce il sistema nel suo insieme. Lì il comando termina con il codice di uscita 3 prima di esaminare qualsiasi cosa, e indicaos update. Sulla chiavetta di installazione di IronFlockOS rifiuta come i comandiagent. - Via
--host, il binario in esecuzione è la copia dell’esecuzione, che viene rimossa al termine del comando. Per questo il comando aggiorna invece/usr/local/bin/ironflockdella macchina. Senza quel file termina con il codice di uscita 3 e indica la riga di installazione. Anche unironflockinstallato che non si avvia, o non dice la sua versione, lo fa terminare con il codice di uscita 3, prima di scaricare qualsiasi cosa: la riga di installazione installaironflockda capo. - Su più macchine (
--hostpiù volte,--hosts), con--yes, ogni macchina aggiorna il proprio/usr/local/bin/ironflock.
Risultato
$ 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.Il binario viene scaricato dopo la risposta. Senza un terminale, o con --json, il comando richiede --yes. Con --json, per un binario che è già la release più recente:
{"outcome":"current","path":"/usr/local/bin/ironflock","version":"2.1.0","latest_version":"2.1.0"}| Campo | Valori |
|---|---|
action | updated quando il binario è stato sostituito; assente altrimenti |
outcome | updated (una release più recente, oppure con --version un’altra build dello stesso livello), downgraded (una release più vecchia, come richiesto da --version), current (niente da fare) |
path | il file che è stato sostituito, o che lo sarebbe stato |
version | la versione attuale di quel file |
previous_version | quando il file è stato sostituito: la versione precedente |
latest_version | ciò che indica version.txt; assente con --version, che non lo legge |
Codici di uscita
| Codice | Significato |
|---|---|
| 0 | aggiornato, oppure niente da fare |
| 1 | il download è fallito, una verifica è fallita, l’albero di download non ha un binario della release più recente per questa piattaforma, oppure la sostituzione è fallita. Il binario è com’era |
| 2 | riga di comando errata, anche un --version che non è una versione, o che l’albero di download non ha per questa piattaforma |
| 3 | su IronFlockOS, senza il diritto di sostituire il file, e via --host senza /usr/local/bin/ironflock o con uno che non dice la sua versione |
| 4 | alla domanda è stato risposto no, oppure non è stato possibile porla e --yes non è stato indicato |
| 130 | interrotto; il binario è com’era |