Skip to Content

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 bash

Co robi polecenie instalacyjne

  1. 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.
  2. Pobiera version.txt oraz ironflock w tej wersji dla tej maszyny z https://instance-registry.ironflock.com/dl/cli/.
  3. Sprawdza oba pliki kluczem wydań IronFlock, który zawiera skrypt. W Linuksie sprawdza podpis OpenPGP (.asc) za pomocą sqv lub gpgv. 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ć.
  4. 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ęc ironflock działający w tym momencie zachowuje plik binarny, z którego wystartował. Na Macu bez /usr/local/bin skrypt tworzy ten folder.
  5. Uruchamia ironflock z argumentami podanymi po bash -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 --help

Na 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 przez sudo bash.
  • curl lub wget — do pobierania.
  • W Linuksie base64 oraz sqv lub gpgv — do sprawdzenia podpisu. apt zależy od sqv lub gpgv, więc każdy Debian i Ubuntu ma jeden z nich. Gdy brakuje obu, skrypt zatrzymuje się i podaje apt 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 it

Nieudane 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.flock

Przy 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.sh

gpg 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.flock

Bazowy 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:

UstawienieKto je odczytujeKolejność
--download-base <url>każde polecenie ironflockpierwsze
zmienna środowiskowa IRONFLOCK_DL_BASEinstall.sh i każde polecenie ironflockdrugie
kopia lustrzana pobierania tego Appliance, który wskazuje plik .flock urządzeniaagent install, doctor, os install, os updatetrzecie
chmura IronFlockkażde polecenieostatnie

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/dl

Dwa 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 install jest to wiersz Warning: na stderr i wpis w warnings wyniku z --json, dla os install ostrzeżenie w planie, dla doctor wynik warning testu download_tree. agent install i os install koń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 install i os 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.sh i plik binarny ironflock pochodzą z ironflock.com. Z --host plik binarny trafia na maszynę z twojego komputera (Zdalne maszyny przez SSH).
  • agent install pobiera pakiety dystrybucji i Dockera z ich własnych serwerów.
  • self-update i version --check odczytują 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łokaWierszPlik
basheval "$(ironflock completion bash)"~/.bashrc; wymaga pakietu bash-completion
zshsource <(ironflock completion zsh)~/.zshrc, po compinit
fishironflock 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, --variant i --kernel polecenia os images, --channel polecenia os update oraz --installer-confirm, --installer-after i --installer-allow-usb polecenia os flash;
  • plik .flock dla -c;
  • nazwy plików, tak jak uzupełnia je powłoka, dla --hosts, --proxy-password-file, --wifi-password-file, --image-file, --output, --drive i --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 std

Z --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.

FlagaZnaczenie
--checkZapytaj 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 --check
ironflock 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.

FlagaZnaczenie
--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 --yes

Co 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-init instalacji agenta zawiera wpis tej instalacji, a nie ironflock, i polecenie go nie dotyka.
  • Wydanie. Bez --version najnowsze: to, które podaje cli/version.txt z bazowego adresu pobierania (--download-base, a w przeciwnym razie IRONFLOCK_DL_BASE, a w przeciwnym razie chmura IronFlock), czyli plik, który odczytuje polecenie instalacyjne. Plik binarny wydania to cli/<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 przez HTTP_PROXY, HTTPS_PROXY i NO_PROXY ze środowiska. sudo i polecenie przez --host nie 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; outcome w wyniku to current. Bez --version nigdy nie wraca do starszego wydania.

Sprawdzenia

Zanim plik binarny zostanie zastąpiony:

  1. version.txt jest sprawdzany na podstawie podpisu kluczem wydań IronFlock, który zawiera działający plik binarny.
  2. 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ł.
  3. 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.
  4. 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 ironflock razem 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 wskazuje os update. Na pendrivie instalacyjnym IronFlockOS odmawia działania tak jak polecenia agent.
  • Przez --host działający plik binarny jest kopią tego uruchomienia, usuwaną po zakończeniu polecenia. Dlatego polecenie aktualizuje zamiast niego /usr/local/bin/ironflock na maszynie. Bez tego pliku kończy się kodem wyjścia 3 i podaje polecenie instalacyjne. Zainstalowany ironflock, 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 wtedy ironflock od nowa.
  • Na kilku maszynach (--host podane 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"}
PoleWartości
actionupdated, gdy plik binarny został zastąpiony; w przeciwnym razie brak
outcomeupdated (nowsze wydanie albo, z --version, inna kompilacja na tym samym poziomie), downgraded (starsze wydanie, zgodnie z --version), current (nic do zrobienia)
pathplik, który został zastąpiony lub zostałby zastąpiony
versionobecna wersja tego pliku
previous_versiongdy plik został zastąpiony: wersja sprzed zmiany
latest_versionto, co podaje version.txt; brak z --version, które go nie odczytuje

Kody wyjścia

KodZnaczenie
0zaktualizowano albo nie było nic do zrobienia
1pobieranie 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ł
2błędny wiersz poleceń, także --version, które nie jest wersją albo którego drzewo pobierania nie ma dla tej platformy
3na IronFlockOS, bez prawa do zastąpienia pliku oraz przez --host bez /usr/local/bin/ironflock albo z takim, który nie podaje swojej wersji
4na pytanie odpowiedziano „nie” albo nie można było go zadać, a nie podano --yes
130przerwano; plik binarny jest taki, jaki był
Last updated on