Instalacja
Jedno polecenie instaluje ironflock w systemie Linux lub macOS. Wymaga roota, ponieważ zapisuje w /usr/local/bin. Później ironflock self-update aktualizuje go do najnowszego wydania, a ironflock version --check mówi, czy jest nowsze.
curl -fsSL https://instance-registry.ironflock.com/dl/cli/install.sh | sudo bashCo robi polecenie instalacyjne
- Rozpoznaje system (Linux lub macOS) i architekturę maszyny: amd64, arm64 lub 32-bitowy ARM (v5 do v7) w Linuksie, Apple silicon lub Intel w macOS. Na Apple silicon powłoka działająca pod Rosetta 2 również dostaje wersję dla Apple silicon.
- Pobiera
version.txtorazironflockw tej wersji dla tej maszyny zhttps://instance-registry.ironflock.com/dl/cli/. - Sprawdza oba pliki kluczem wydań IronFlock, który zawiera skrypt. W Linuksie sprawdza podpis OpenPGP (
.asc) za pomocąsqvlubgpgv. W macOS sprawdza zwykły podpis RSA tym samym kluczem (.sig) za pomocą systemowego/usr/bin/openssl, dzięki czemu niczego nie trzeba wcześniej instalować. - Instaluje plik binarny jako
/usr/local/bin/ironflock, w miejsce istniejącego. Nowy plik jest kopiowany obok starego i przez zmianę nazwy zajmuje jego miejsce, więcironflockdziałający w tym momencie zachowuje plik binarny, z którego wystartował. Na Macu bez/usr/local/binskrypt tworzy ten folder. - Uruchamia
ironflockz argumentami podanymi pobash -s --. Bez argumentów tylko instaluje i podaje następny krok.
Na maszynie z Linuksem i procesorem amd64 wyjście wygląda tak:
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 --helpNa Macu jako następny krok podaje ironflock os flash, które zapisuje IronFlockOS dla urządzenia na pendrivie USB lub karcie SD. Gdy zastępuje wcześniej zainstalowany ironflock, wiersz Installed kończy się słowami , in place of the one that was there.
Wymagania
- Root — skrypt zapisuje w
/usr/local/bin. Uruchom go przezsudo bash. curllubwget— do pobierania.- W Linuksie
base64orazsqvlubgpgv— do sprawdzenia podpisu. apt zależy odsqvlubgpgv, więc każdy Debian i Ubuntu ma jeden z nich. Gdy brakuje obu, skrypt zatrzymuje się i podajeapt install gpgv. - W macOS nic poza tym, co dostarcza system.
Skrypt wykonuje dowolna powłoka POSIX: bash, sh, dash lub BusyBox ash.
Brakujący lub błędny podpis
Brakujący lub błędny podpis zatrzymuje skrypt, zanim cokolwiek zainstaluje, a wcześniej zainstalowany ironflock pozostaje bez zmian. Skrypt kończy się kodem wyjścia 1 i jednym wierszem na stderr, na przykład:
install.sh: https://instance-registry.ironflock.com/dl/cli/linux/amd64/2.0.2/ironflock is not signed by IronFlock: not installing itNieudane pobieranie zatrzymuje skrypt w ten sam sposób: nic nie zostaje zainstalowane.
Instalacja i uruchomienie polecenia w jednym wierszu
Argumenty po bash -s -- trafiają do ironflock, gdy tylko zostanie zainstalowany. To polecenie instaluje ironflock i podłącza maszynę do IronFlock jako urządzenie z pliku konfiguracji urządzenia (.flock) device.flock:
curl -fsSL https://instance-registry.ironflock.com/dl/cli/install.sh | sudo bash -s -- agent install -c device.flockPrzy curl ... | bash standardowym wejściem skryptu jest sam skrypt. Dlatego skrypt pozwala ironflock czytać z twojego terminala: pytania polecenia nadal do ciebie docierają i odpowiadasz na nie jak zwykle. Bez terminala (skrypt cloud-init, CI) ironflock nie dostaje żadnego wejścia: polecenie, które zadaje pytanie, kończy się kodem wyjścia 4, chyba że dodasz --yes. Skrypt kończy się kodem wyjścia ironflock. Polecenie opisuje sekcja ironflock agent install.
Aktualizacja
sudo ironflock self-update zastępuje ironflock najnowszym wydaniem, po tych samych sprawdzeniach kluczem wydań IronFlock (ironflock self-update). ironflock version --check pokazuje, którą wersję masz i czy jest nowsze wydanie (ironflock version).
Polecenie instalacyjne z początku tej strony również aktualizuje: uruchom je ponownie, a zastąpi /usr/local/bin/ironflock bieżącym wydaniem.
Na urządzeniu z IronFlockOS ironflock jest częścią systemu, a ironflock os update aktualizuje go razem z systemem.
Najpierw zweryfikuj skrypt instalacyjny
Aby sprawdzić sam install.sh, zanim zostanie uruchomiony jako root, pobierz go razem z podpisem, zaimportuj klucz wydań i zweryfikuj podpis za pomocą 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 musi zgłosić prawidłowy podpis kluczem z odciskiem F6C9 4D96 CE31 5377 ACA7 C8EA 4990 5433 7321 2788. Porównaj go z kluczem IronFlock Bootstrap na stronie Klucze podpisujące. Następnie uruchom zweryfikowany skrypt, bez argumentów albo z argumentami dla ironflock:
sudo bash install.sh
sudo bash install.sh agent install -c device.flockBazowy adres pobierania
ironflock i skrypt instalacyjny pobierają pliki z chmury IronFlock, https://instance-registry.ironflock.com/dl. Inny bazowy adres pobierania, na przykład kopię lustrzaną w twojej sieci, podaje się na jeden z dwóch sposobów. Dla urządzenia IronFlock Appliance kilka poleceń samo znajduje kopię lustrzaną pobierania Appliance:
| Ustawienie | Kto je odczytuje | Kolejność |
|---|---|---|
--download-base <url> | każde polecenie ironflock | pierwsze |
zmienna środowiskowa IRONFLOCK_DL_BASE | install.sh i każde polecenie ironflock | drugie |
kopia lustrzana pobierania tego Appliance, który wskazuje plik .flock urządzenia | agent install, doctor, os install, os update | trzecie |
| chmura IronFlock | każde polecenie | ostatnie |
Pod bazowym adresem pobierania skrypt instalacyjny odczytuje cli/version.txt i cli/<system>/<arch>/<version>/ironflock, każdy z podpisami .asc i .sig. Sprawdza je kluczem wydań, który zawiera, niezależnie od bazowego adresu pobierania, więc kopia lustrzana udostępnia podpisane pliki IronFlock bez zmian. ironflock odczytuje katalog i obrazy IronFlockOS spod ironflockos/, agenta urządzenia spod device-agent/, a spod cli/ najnowsze wydanie (version.txt, dla self-update i version --check) oraz pliki binarne ironflock (dla self-update, a dla --host te dla innych platform).
Domyślnie sudo nie przekazuje dalej zmiennych twojej powłoki. Ustaw zmienną po sudo albo podaj flagę:
# Zainstaluj ironflock z kopii lustrzanej
curl -fsSL https://mirror.example.com/dl/cli/install.sh | sudo IRONFLOCK_DL_BASE=https://mirror.example.com/dl bash
# Podłącz tę maszynę, pobierając agenta z kopii lustrzanej
sudo ironflock agent install -c device.flock --download-base https://mirror.example.com/dlDwa polecenia używają bazowego adresu pobierania inaczej. agent update zleca agentowi aktualizację z jego własnego serwera aktualizacji, czyli z update_url jego pliku .flock, a bazowy adres pobierania tego nie zmienia. os update bierze flagę, potem zmienną, potem update_url pliku .flock agenta. Przez --host bazowy adres pobierania jest przekazywany na zdalną maszynę; adres z danymi logowania (https://user:[email protected]/dl) kończy się kodem wyjścia 2, zanim nastąpi połączenie z jakąkolwiek maszyną.
Urządzenia IronFlock Appliance
Plik .flock wydany przez IronFlock Appliance wskazuje kopię lustrzaną pobierania Appliance jako serwer aktualizacji agenta (update_url), na przykład http://10.0.0.5:15002/dl albo https://registry.<domain>/dl, gdy Appliance działa z domeną. Gdy nie ustawiono ani --download-base, ani IRONFLOCK_DL_BASE, agent install, doctor i os install pobierają pliki z tej kopii lustrzanej, więc maszynę, która dociera do Appliance, ale nie do ironflock.com, można podłączyć lub przekształcić. Plik .flock z chmury IronFlock wskazuje host chmury i korzysta z chmury.
- To, czego kopia lustrzana nie udostępnia, pochodzi z tej samej ścieżki pod bazowym adresem pobierania chmury IronFlock, z ostrzeżeniem: dla
agent installjest to wierszWarning:na stderr i wpis wwarningswyniku z--json, dlaos installostrzeżenie w planie, dladoctorwynikwarningtestudownload_tree.agent installios installkończą się błędem tylko wtedy, gdy pliku nie udostępnia ani kopia lustrzana, ani chmura, a ich błąd podaje wtedy oba źródła. agent installios installłączą się z kopią lustrzaną bezpośrednio, a z chmurą przez proxy, jeśli jest.- Kopia lustrzana HTTPS z certyfikatem własnego CA Appliance działa tylko tam, gdzie system maszyny ufa temu CA.
Niektóre pliki nadal pochodzą skądinąd:
install.shi plik binarnyironflockpochodzą z ironflock.com. Z--hostplik binarny trafia na maszynę z twojego komputera (Zdalne maszyny przez SSH).agent installpobiera pakiety dystrybucji i Dockera z ich własnych serwerów.self-updateiversion --checkodczytują flagę, potem zmienną, a w przeciwnym razie chmurę IronFlock, a nie kopię lustrzaną Appliance.
Po instalacji agent pobiera aktualizacje z Appliance. Zobacz Urządzenia brzegowe.
Uzupełnianie klawiszem Tab
ironflock completion wypisuje skrypt, dzięki któremu twoja powłoka uzupełnia wiersze poleceń ironflock po naciśnięciu klawisza Tab.
ironflock completion <shell>Powłoka to bash, zsh lub fish. Działa w systemach Linux i macOS. Bez roota. O nic nie pyta. Polecenie nie ma własnych flag; obowiązują flagi globalne.
Uruchom wiersz dla swojej powłoki, aby uzupełniać w powłoce, w której piszesz. Dodaj ten wiersz do pliku z trzeciej kolumny, aby uzupełniać w każdej nowej powłoce:
| Powłoka | Wiersz | Plik |
|---|---|---|
| bash | eval "$(ironflock completion bash)" | ~/.bashrc; wymaga pakietu bash-completion |
| zsh | source <(ironflock completion zsh) | ~/.zshrc, po compinit |
| fish | ironflock completion fish | source | ~/.config/fish/config.fish |
Skrypt uzupełnia:
- polecenia i ich flagi;
- wartości flag, które przyjmują jedną z kilku wartości:
--channel,--varianti--kernelpoleceniaos images,--channelpoleceniaos updateoraz--installer-confirm,--installer-afteri--installer-allow-usbpoleceniaos flash; - plik
.flockdla-c; - nazwy plików, tak jak uzupełnia je powłoka, dla
--hosts,--proxy-password-file,--wifi-password-file,--image-file,--output,--drivei--disk.
Inne flagi i argumenty innych poleceń niczego nie uzupełniają. Aby uzupełnić, skrypt pyta ironflock o pasujące słowa, a ironflock odpowiada z własnej listy poleceń: uzupełnianie nie uruchamia żadnego polecenia, nie wyświetla listy nośników, niczego nie pobiera i nie łączy się z żadną inną maszyną, także gdy wiersz zawiera --host. Z --host lub --hosts na ironflock completion odpowiada ta maszyna, tak jak na --help.
# Włącz uzupełnianie w bashu, w którym piszesz
eval "$(ironflock completion bash)"
# Włącz uzupełnianie w każdym nowym bashu
echo 'eval "$(ironflock completion bash)"' >> ~/.bashrc$ eval "$(ironflock completion bash)"
$ ironflock os images --kernel <Tab>
rt stdZ --json wynikiem jest skrypt w obiekcie JSON:
{"shell":"bash","script":"..."}Brak powłoki, nieznana powłoka lub więcej niż jedna to błędny wiersz poleceń: kod wyjścia 2, a komunikat błędu podaje akceptowane powłoki.
ironflock version
Wypisuje wersję pliku binarnego ironflock i platformę, dla której został zbudowany. Z --check pyta też serwer pobierania, czy jest nowsze wydanie.
ironflock version [flags]Działa w systemach Linux i macOS. Bez roota. O nic nie pyta. Obowiązują flagi globalne.
| Flaga | Znaczenie |
|---|---|
--check | Zapytaj serwer pobierania, czy jest nowsze wydanie |
# Wersja ironflock na tej maszynie
ironflock version
# To samo jako JSON
ironflock version --json
# Plik binarny działający na innej maszynie przez SSH: ta sama wersja, platforma tamtej maszyny
ironflock --host pi@device-17 version
# Czy jest nowsze wydanie?
ironflock version --checkironflock 2.0.2 linux/amd64{"version":"2.0.2","os":"linux","arch":"amd64"}Przez --host platforma jest platformą zdalnej maszyny, na przykład ironflock 2.0.2 linux/arm64: zdalna maszyna uruchamia plik binarny tej samej wersji dla własnej platformy.
Kompilacja deweloperska podaje swój commit: 2.0.0-23-g5b38681 to kompilacja commita 5b38681, 23 commity po wydaniu 2.0.0.
Czy jest nowsze wydanie?
--check odczytuje cli/version.txt z bazowego adresu pobierania (--download-base, a w przeciwnym razie IRONFLOCK_DL_BASE, a w przeciwnym razie chmura IronFlock) i sprawdza go na podstawie podpisu (.asc) kluczem wydań IronFlock, który zawiera plik binarny. Pyta przez proxy ustawione przez agent configure (/etc/ironflock/proxy.env), a w przeciwnym razie przez proxy ze środowiska. Ten plik odczytuje tylko root, więc bez roota polecenie bierze proxy ze środowiska. version --check i self-update to jedyne polecenia, które pytają o najnowsze wydanie; żadne polecenie nie robi tego samo z siebie.
Drugi wiersz na stdout mówi, co polecenie znalazło i co instaluje nowsze wydanie: self-update, a na 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.Gdy version.txt podaje wersję tego pliku binarnego, drugi wiersz brzmi This is the newest release. Gdy ten plik binarny jest nowszy, czyli jest kompilacją deweloperską po wydaniu, wiersz to mówi. Kompilacja deweloperska x.y.z-N-g<commit> jest nowsza niż wydanie x.y.z i starsza niż następne; przy N = 0 jest równa x.y.z, a wiersz mówi, że nie ma nowszego wydania.
Z --json obiekt ma dwa dodatkowe pola: latest_version, czyli to, co podaje version.txt, oraz newer, czyli czy jest to wersja nowsza niż ten plik binarny.
{"version":"2.0.3","os":"linux","arch":"amd64","latest_version":"2.1.0","newer":true}Kod wyjścia wynosi 0 niezależnie od tego, czy jest nowsze wydanie. Wynosi 1, gdy serwer nie odpowiada, nie ma version.txt albo ma plik, który nie jest podpisany tym kluczem. Przez --host pierwszy wiersz podaje plik binarny tej kompilacji, tak jak version, a o serwer pyta zdalna maszyna.
ironflock self-update
Zastępuje działający plik binarny ironflock najnowszym wydaniem albo wydaniem podanym w --version, także starszym. Wydanie jest sprawdzane kluczem wydań IronFlock, zanim cokolwiek zmieni się na dysku.
ironflock self-update [flags]Działa w: Linuksie i macOS; nie na IronFlockOS. Root: potrzebny dla /usr/local/bin/ironflock (Kto może zastąpić plik binarny). Pyta: tak, gdy już powie, które wydanie zastępuje które; --yes odpowiada.
| Flaga | Znaczenie |
|---|---|
--version <x.y.z> | Wydanie do zainstalowania zamiast najnowszego, na przykład 2.0.3; także starsze |
# Zaktualizuj ironflock do najnowszego wydania; polecenie najpierw pyta
sudo ironflock self-update
# Zaktualizuj bez pytania i odczytaj wynik jako JSON
sudo ironflock self-update --yes --json
# Wróć do starszego wydania
sudo ironflock self-update --version 2.0.3
# Zaktualizuj ironflock zainstalowany na innej maszynie
ironflock --host pi@device-17 self-update --yesCo zastępuje i czym
- Plik. Działający plik binarny, po rozwiązaniu wszystkich dowiązań symbolicznych: zastępowany jest plik, do którego prowadzi dowiązanie, a samo dowiązanie zostaje. Polecenie podaje ten plik przed wszystkim innym. Folder
/opt/ironflock/device-initinstalacji agenta zawiera wpis tej instalacji, a nieironflock, i polecenie go nie dotyka. - Wydanie. Bez
--versionnajnowsze: to, które podajecli/version.txtz bazowego adresu pobierania (--download-base, a w przeciwnym razieIRONFLOCK_DL_BASE, a w przeciwnym razie chmura IronFlock), czyli plik, który odczytuje polecenie instalacyjne. Plik binarny wydania tocli/<system>/<arch>/<version>/ironflock. Nie ma kanałów: inne drzewo to inny bazowy adres pobierania, na przykład kopia lustrzana. - Proxy. Pobieranie idzie przez proxy ustawione przez
agent configure(/etc/ironflock/proxy.env), a w przeciwnym razie przezHTTP_PROXY,HTTPS_PROXYiNO_PROXYze środowiska.sudoi polecenie przez--hostnie mają proxy w swoim środowisku. Plik należy do roota, więc uruchomienie bez roota bierze proxy ze środowiska i o tym informuje. Polecenie informuje też, gdy bierze proxy z pliku. - Nic do zrobienia. Gdy plik binarny jest już tym wydaniem albo jest od niego nowszy (kompilacja deweloperska po nim), polecenie o tym informuje i kończy się kodem wyjścia 0, bez pytania i bez pobierania;
outcomew wyniku tocurrent. Bez--versionnigdy nie wraca do starszego wydania.
Sprawdzenia
Zanim plik binarny zostanie zastąpiony:
version.txtjest sprawdzany na podstawie podpisu kluczem wydań IronFlock, który zawiera działający plik binarny.- Nowy plik binarny jest sprawdzany na podstawie podpisu tym samym kluczem oraz na podstawie informacji o kompilacji: program
ironflock, dla tej platformy, z niezmodyfikowanego drzewa źródeł. - Jest zapisywany obok starego, w tym samym folderze, z trybem, właścicielem i grupą starego, i uruchamiany raz (
version --json). Musi podać, że jest żądanym wydaniem, na tej platformie. Podpis nie wiąże wersji, więc starszy podpisany plik binarny udostępniony zamiast najnowszego zostaje odrzucony w tym miejscu. - Dopiero wtedy jego nazwa jest zmieniana na nazwę starego, w jednym kroku.
Nie trzeba sqv ani gpgv: ironflock sam sprawdza podpisy.
Plik, który nie przejdzie sprawdzenia, nigdy nie zastępuje pliku binarnego, a nowy plik obok niego zostaje ponownie usunięty. Uruchomienie, które się nie powiedzie, zostanie odrzucone lub przerwane, pozostawia stary plik binarny bez zmian. Polecenie ironflock działające w czasie zastępowania pliku kontynuuje z plikiem, z którego wystartowało. Drugie Ctrl-C albo zanik zasilania między zapisem a zmianą nazwy może pozostawić nowy plik (.ironflock.new-* obok pliku binarnego); usuń go ręcznie.
Kto może zastąpić plik binarny
Polecenie potrzebuje prawa zapisu w folderze pliku binarnego i musi działać jako właściciel pliku binarnego i członek jego grupy albo jako root, aby nowy plik zachował właściciela i grupę. Dla /usr/local/bin/ironflock, gdzie umieszcza go polecenie instalacyjne, oznacza to roota. W przeciwnym razie polecenie kończy się kodem wyjścia 3, zanim cokolwiek pobierze, podaje właściciela lub grupę i podaje wiersz poleceń z sudo.
IronFlockOS i inne maszyny
- IronFlockOS dostarcza
ironflockrazem z systemem, a każda aktualizacja systemu zastępuje system w całości. Tam polecenie kończy się kodem wyjścia 3, zanim cokolwiek sprawdzi, i wskazujeos update. Na pendrivie instalacyjnym IronFlockOS odmawia działania tak jak poleceniaagent. - Przez
--hostdziałający plik binarny jest kopią tego uruchomienia, usuwaną po zakończeniu polecenia. Dlatego polecenie aktualizuje zamiast niego/usr/local/bin/ironflockna maszynie. Bez tego pliku kończy się kodem wyjścia 3 i podaje polecenie instalacyjne. Zainstalowanyironflock, który nie działa albo nie podaje swojej wersji, także kończy je kodem wyjścia 3, zanim cokolwiek zostanie pobrane: polecenie instalacyjne instaluje wtedyironflockod nowa. - Na kilku maszynach (
--hostpodane więcej niż raz,--hosts), z--yes, każda maszyna aktualizuje swój/usr/local/bin/ironflock.
Wynik
$ 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.Plik binarny jest pobierany po odpowiedzi. Bez terminala albo z --json polecenie wymaga --yes. Z --json, dla pliku binarnego, który jest już najnowszym wydaniem:
{"outcome":"current","path":"/usr/local/bin/ironflock","version":"2.1.0","latest_version":"2.1.0"}| Pole | Wartości |
|---|---|
action | updated, gdy plik binarny został zastąpiony; w przeciwnym razie brak |
outcome | updated (nowsze wydanie albo, z --version, inna kompilacja na tym samym poziomie), downgraded (starsze wydanie, zgodnie z --version), current (nic do zrobienia) |
path | plik, który został zastąpiony lub zostałby zastąpiony |
version | obecna wersja tego pliku |
previous_version | gdy plik został zastąpiony: wersja sprzed zmiany |
latest_version | to, co podaje version.txt; brak z --version, które go nie odczytuje |
Kody wyjścia
| Kod | Znaczenie |
|---|---|
| 0 | zaktualizowano albo nie było nic do zrobienia |
| 1 | pobieranie się nie powiodło, sprawdzenie się nie powiodło, drzewo pobierania nie ma pliku binarnego najnowszego wydania dla tej platformy albo zastąpienie się nie powiodło. Plik binarny jest taki, jaki był |
| 2 | błędny wiersz poleceń, także --version, które nie jest wersją albo którego drzewo pobierania nie ma dla tej platformy |
| 3 | na IronFlockOS, bez prawa do zastąpienia pliku oraz przez --host bez /usr/local/bin/ironflock albo z takim, który nie podaje swojej wersji |
| 4 | na pytanie odpowiedziano „nie” albo nie można było go zadać, a nie podano --yes |
| 130 | przerwano; plik binarny jest taki, jaki był |