İçeriğe atla
ColliePWA

07/Documentation

Crew komutları

Tek bir URL arkasında birden fazla makinenin Collie'si: davet etme, katılma, deputy, yük devretme

crew, tek bir lead altında Collie çalıştıran birkaç makinedir ve telefonunuz her makinenin herd alanına lead'in tek URL'si üzerinden erişir. Lead telefonunuzun ulaştığı makinedir, diğer her makine bir üyedir ve deputy devralmasına izin verilen tek üyedir.

Komutİşlevi
collie crew inviteTek kullanımlık, 10 dakikalık bir kayıt belirteci üretin (lead üzerinde)
collie crew add <ssh-host>kendi SSH'niz üzerinden bir eş kurun ve kaydını yapın (lead üzerinde)
`collie crew update <üye>… \--all`Her makinede, ardından lead'de, ardından her bir eşte kendi SSH'niz üzerinden teker teker ön kontrol yapın; ilk hata çalıştırmayı durdurur (ayrıntılar)
collie crew statusMod, üyeler, erişilebilirlik, secret alma ve bir bağlantının neden reddedildiği
collie crew rotateCrew gizli anahtarını yeniden oluşturun ve erişilebilir her eşe iletin
collie crew rename <name>Crew'a yeni bir ad verin (lead üzerinde)
collie crew remove <member>Bir üyenin sabitlemesini kaldırın ve onu unutun (lead üzerinde)
collie crew set-address <member> <host:port>Bu lead'in bir üyeyi aradığı adresi düzeltin
collie crew deputy <member>Devralabilecek TEK eşi belirleyin ve hazırlayın; --revoke kimseyi belirlemez
collie crew approve-promote <member>Lead üzerinde, bir üyenin devralması için onay; 10 dakika, tek kullanımlık; --cancel bunu temizler
collie crew join <lead-address> [<token>]Bir crew'a katılın (katılan makinede); bir belirteç verilmezse ister, stdin için - veya @file geçin
collie crew leaveCrew'dan ayrılın; bu makinedeki crew secret'ını ve diğer her üyenin sabitlenmiş sertifikasını siler
collie promoteBU makineyi lead yapın (devralan peer üzerinde; lead erişilemiyorsa --force)
collie reconnectBir üye taşındı: hiçbir şeyi yeniden kaydetmeden yeni adresine yönlendirin

collie join ve collie leave çalışmaya devam eder. Bunlar aynı argümanları ve çıkış kodlarını kullanan, collie crew join ve collie crew leave için alias'lardır.

collie pack da bu tablodaki her eylem için çalışmaya devam eder. Aynı argümanlar ve çıkış kodlarıyla collie crew için bir alias'tır. collie docs pack bu sayfayı yazdırır ve web uygulamasının /pack adresi /crew adresine yönlendirir. Her üçü de 2.0.0 sürümünde kaldırılacaktır (ADR 0038).

deputy, approve-promote ve promote komutları failover durumunu yönetir. Kurulum ve kurtarma talimatları için docs/deployment.md → standby kapısı ve kötü gün bölümlerine bakın.

İki makine, bir crew

İki komut bir makine ekler; biri Herdr, diğeri Collie içindir ve bunlara uymayan ana makineler için manuel bir yol mevcuttur.

herdr machine add --label <name> <ssh-target>   # prepare the remote host
collie crew add <ssh-host>                      # install Collie there and enroll it

herdr machine add başında oturduğunuz makinede çalışır. Uzak ana makineye Herdr kurar ve onu Herdr'ın kendi listesine kaydeder; makineyi crew'a eklemez. collie crew add lead üzerinde çalışır. <ssh-target> ve <ssh-host> aynı ana makinedir, user@host olarak veya ~/.ssh/config dosyanızdaki bir Host diğer adı olarak yazılır; <name> ise yalnızca Herdr'ın listesini etiketler.

collie crew add <ssh-host>, Collie'yi kendi ssh bağlantınız üzerinden uzak ana makineye kurar ve kaydeder. Token'ı yerel olarak üretir, uzak makinede Collie'yi yapılandırır ve orada collie crew join çalıştırır. herdr machine add komutunun oraya koyduğu Uzak ana makinede Herdr önceden kurulmuş gerektirir, bu yüzden iki komut birlikte kullanılır. Düz HTTP sunan bir lead için elle bir adım daha gerekir, çünkü crew add --insecure desteklemez: katılan makinede collie crew join --insecure çalıştırın. Belirli bir ana makine için crew add veya manuel yoldan birini kullanın, asla ikisini birden kullanmayın. Hedef belirtilmeden çalıştırılan collie crew add, ssh yapılandırmanızın ve Herdr'ın zaten bildiği ana makineleri her adın çözümlendiği ana makinede birleştirerek listeler; bu nedenle ana makineyi ikinci bir şekilde yazmak (aşağıda) yerine bu listeden seçin.

Manuel yol dört komuttan oluşur. Lead telefonunuzun zaten ulaştığı örnektir; katılan makinede Collie kurulu ve çalışıyor olmalıdır.

  1. Lead üzerinde token'ı üretin.
    collie crew invite        # prints one line: <token>.<lead-fingerprint>
  1. Katılan makinede crew'a katılın ve sorulduğunda token'ı yapıştırın.
    collie crew join lead
  1. Lead üzerinde, çalışan sürecin yeni üyeyi alması için onu yeniden başlatın.
    collie restart
  1. Lead üzerinde, bağlantının yanıt verdiğini doğrulayın.
    collie crew status        # the new member, its address, and whether the link answered

Belirteçler tek kullanımlıktır, on dakika geçerlidir ve bir kez görüntülenir. Lead yalnızca hash değerini saklar. invite komutunu çalıştırmak, gelen kaydı kabul edebilmesi için lead sürecini yeniden başlatır ve lead adını içeren katılma satırını yazdırır.

3. adım ikinci bir yeniden başlatmadır ve join kapanırken bunu belirtir. invite, kaydı kabul edebilmesi için lead'i yeniden başlattı. Ardından join yeni üyeyi diske yazdı ve çalışan süreç, tekrar yeniden başlatılana kadar o üyeye giden trafiğe vekillik etmez.

Etkileşimli bir terminalde, join belirteci girmenizi ister. Bir betikte - bayrağını geçirin ve belirteci stdin üzerinden sağlayın:

collie crew join lead.tail1234.ts.net -   # paste the token on stdin

Belirteci diskten okumak için bunun yerine @<file> bayrağını geçirin. Ham belirteçleri doğrudan argüman olarak geçirmek bir uyarı yazdırır, çünkü süreç listeleri argümanları tüm yerel kullanıcılara açık hale getirir (CREW_PROTOCOL.md §8.3).

Lead adresini, bu düğümden erişilebilen herhangi bir ana bilgisayar adına veya host:port değerine ayarlayın. Şema ve bağlantı noktası içermeyen bir adres, Collie'nin bağlandığı varsayılan bağlantı noktası olan https://<host>:8787 değerine çözümlenir. Lead bu değeri değiştirdiyse, crew invite çıktısı bağlantı noktasını belirtir. Varsayılan bir kurulum, önünde 443 numaralı bağlantı noktasında TLS bulunacak şekilde, 8787 numaralı bağlantı noktasında düz HTTP üzerinden yanıt verir; bu nedenle join, 8787 üzerinde TLS bulamayabilir. Belirteci düz HTTP üzerinden göndermeden önce bir kez onay ister; --insecure bunu otomatik olarak onaylar. Açık bir http:// adresi yine de --insecure gerektirir ve hiçbir şey sormaz.

Çoğullayıcı seçimi her düğüme özeldir. O düğümün kendi .env dosyasında, ikili kurulumda ~/.config/collie/.env konumunda veya Herdr kurulumunda Herdr eklenti yapılandırma dizininde COLLIE_MUX yapılandırın. Makineler arasındaki hat olan crew protokolü, çoğullayıcıya özel hiçbir alan içermez. Eşlerin v1 sürümünde yalnızca Herdr ile test edildiğini unutmayın (CREW_PROTOCOL.md §16).

Herdr makineleri ve ekip

Herdr'ın kayıtlı makineleri ile bir Collie crew'u iki ayrı listedir ve hiçbiri diğerini beslemez.

Makine eklemek için yukarıdaki İki makine, bir crew bölümüne bakın.

Herdr'ın makine listesi Herdr pencerenize aittir. Herdr 0.9.0 kayıtlı SSH hedeflerini istemcisinde tutar ve her kullandığınızda her birini SSH üzerinden açar. O makinelerdeki terminalleri, o pencerede, başında oturduğunuz makinede alırsınız.

Crew, her makinede Collie bulunmasıdır ve lead, her üyeye Collie'nin kendi şifreli bağlantısı üzerinden erişir; bu bağlantı, ssh bağlantınızı kullanan bir kurulumla bir kez yapılandırılır. Crew terminalleri de gösterir ve terminallerden daha fazlasını taşır. Yüklemeleri aktarır. Her makinenin günlüğünü ve denetim kaydını, bölmeyi çalıştıran makinede tutar. Tüm crew'u telefondan tek bir onayla günceller. Lead sessizleştiğinde ön kapıyı bir deputy'ye devredebilir. Hiçbir makine listesi bulunmayan tmux ve zellij altında da aynı şekilde çalışır.

neHerdr makine listesibir Collie crew'u
Bağlantıyı kim kurarHerdr istemcinizlider Collie
Bunu ne taşırssh, her kullanımdaCollie'nin kendi şifreli bağlantısı
Gördüğünüz şeyterminallerterminaller, yüklemeler, günlük, denetim kaydı, güncellemeler, yük devretme
Gördüğünüz yerHerdr pencereniztelefonunuz
tmux ve zellij ile çalışırhayırevet

Üç gerçek bu iki listeyi ayrı tutar ve her biri tek başına bir nedendir.

Telefon hiçbir zaman bir ssh anahtarı barındırmaz. Bir ssh anahtarı, makinede tam bir kabuk demektir ve telefon kaybolabilir. Telefon bunun yerine lead tarafından verilen bir eşleştirme kodunu tutar; bu kod yalnızca uygulamayı açar ve collie devices revoke <label> bu kodu yeniden başlatmaya gerek kalmadan canlı olarak sonlandırır (bir cihaz eşleştirin).

Yüklemeler, günlük ve denetim kaydı bölmeyi çalıştıran makinede bulunur. Ve iki makine arasındaki şifreli hat için Collie'nin kullandığı terim olan crew bağlantısı, bir üye kaydolduktan sonra ssh gerektirmez.

Böylece aynı şeyi iki kez kurmazsınız. SSH'yi bir kez kurarsınız ve her iki araç da onu kullanır. Herdr kendi penceresi için listesini tutar, Collie ise telefonunuz için crew'u tutar. Herdr'a bir makine eklemek onu crew'a eklemez. Herdr'dan bir makineyi kaldırmak onu crew'dan çıkarmaz. tmux veya zellij çalıştıran bir crew üyesi Herdr'ın listesinde hiçbir zaman görünmez.

Hedef belirtilmeden çalıştırılan collie crew add, her iki listeden de adaylar önerir; böylece bir ana makineyi asla iki kez yazmazsınız. ~/.ssh/config dosyanızdaki Host girdilerini okur ve herdr machine list --json komutunu çalıştırır. İki listeyi, her adın çözümlendiği ssh hedefine göre birleştirir. Komut, bu yapılandırmadaki bir Include yönergesini bir düzey derinlikte ve yalnızca ~/.ssh/ altındaki yollar için takip eder. Dahil edilen bir dosyadan dahil edilen başka bir dosyadaki takma adı önermez. Her satır adın nereden geldiğini gösterir: ssh config, herdr veya her ikisi. Bu crew'da zaten bulunan bir makinenin satırı, bir numara yerine o üyenin kimliğini taşır.

Bir crew nasıl bağlanır

Yalnızca lead bir ön kapı sunar ve crew içindeki diğer makinelerin hiçbiri kapı sunmaz.

Bir crew: telefon lead ile konuşur, lead ise her üyeyle konuşur.phoneleadits own agents, journal, uploads, auditmemberits own agents, journal, uploads, auditdeputyits own agents, journal, uploads, auditHTTPS, the phone talksto the lead onlycrew link, pinned TLSand the crew secret
Bir crew: telefon lead ile konuşur, lead ise her üyeyle konuşur.

Lead, yönetilen ön kapıdır ve PWA'yı sunar. Telefon lead'e /api/* üzerinde HTTPS üzerinden erişir ve başka hiçbir şeyle konuşmaz. Lead her üyeye /crew/v1/* üzerinde, crew sırrını taşıyan sabitlenmiş karşılıklı TLS üzerinden erişir. Üye, ön kapısı olmayan tam bir Collie'dir ve kendi aracılarını, günlüğünü, yüklemelerini ve denetim kaydını tutar. Yönetim, Herdr arayüz işlemi olmadan, tamamen CLI üzerinden yürütülür. Hattın kendisi CREW_PROTOCOL.md içinde belirtilmiştir.

Kod bir üyeye crew bağlantısı üzerinden değil, her zaman kendi ssh bağlantınız üzerinden ulaşır.youleadmemberdeputyssh, code rides herethe crew link carries runtime data, never code
Kod bir üyeye crew bağlantısı üzerinden değil, her zaman kendi ssh bağlantınız üzerinden ulaşır.

Kod her makineye kendi ssh bağlantınız üzerinden gider. crew add bir üyeyi bu şekilde kurar ve crew update onu eşitler. Crew bağlantısı çalışma zamanı verilerini taşır ve hiçbir zaman bir dağıtım kanalına dönüşmez.

Deputy'nin yedek kapısı yalnızca lead sessizleştiğinde açılır.phoneleaddeputystandby doorarmed by the lead's silencespent by your pairing credential
Deputy'nin yedek kapısı yalnızca lead sessizleştiğinde açılır.

Deputy, lead'in önceden belirlediği bir eş düğümdür. Üç rotaya sahip bir yedek kapıyı bağlar ve bu kapı hiçbir zaman yayımlanmaz. Lead'in sessizliği kapıyı etkinleştirir ve kendi eşleştirme kimlik bilginiz bunu harcar; böylece lead devre dışıyken telefon deputy'ye erişebilir.

install.sh tarafından kurulmamış üyeler

Bir crew, dosyaları başkasına ait olan üyeler hariç, her üyeyi telefondan günceller.

collie crew update ve telefonun tek dokunuşla crew güncellemesi, eski sürümün yanına yeni bir sürüm hazırlar ve onu devreye alır. Bu işlem, kurulum betiğinin ve Herdr'ın yaptığı iki kurulumda çalışır; her kurulumda çalışmaz, bu nedenle crew diğerlerini başarısız saymak yerine raporlar.

Paketlenmiş bir üye, kendi paket yöneticisini bekler. Dosyaları pacman, nix veya brew nereye koyduysa, o dosyaların sahibi o paket yöneticisidir ve Collie sahibi olmadığı bir dosyanın üzerine yazmaz (paketlenmiş bir kurulum). Crew ona asla güncelleme göndermez, belirlenebildiği durumlarda öneki için gereken komutla birlikte onu "paket yöneticisini bekliyor" olarak gösterir ve çalıştırmayı o olmadan tamamlanmış sayar. O makinede bu komutu çalıştırdığınızda eşitlenir ve bir sonraki kontrolde satır temizlenir.

Paketlenmiş bir LEAD üyelerini yine de eşitler. Lead de aynı nedenle kendi yükseltmesini reddeder ve reddin tüm sebebi bundan ibarettir: telefon yine de her üyeyi lead'in şu anda çalıştırdığı sürüme eşitler ve onay bunları kapsar. Paket yöneticisi lead'i yükselttikten ve üzerinde collie restart çalıştırdıktan sonra kendiliğinden hiçbir şey eşitlenmez; telefonun Güncellemeler sayfasındaki bir onay daha üyeleri lead'in yeni sürümüne getirir.

Bir kaynak checkout'u tam yetkili bir üyedir. Kendi klonlayıp derlediğiniz bir üye, diğer tüm checkout'lar gibi git üzerinden güncellenir, crew güncellemesini alır ve burada hakkında bir şey söylenmesine gerek yoktur. Lead etiketi çeker, tıpkı kendisinde yaptığı gibi yeniden derler ve yeniden başlatır.

Dolayısıyla karma bir crew normal bir crew'dur. Tek bir dokunuş, lead'in güncelleyebileceği her üyeyi eşitler, güncelleyemediklerini listeler ve paket yöneticilerini çalıştırdığınızda crew yeniden eşitlenmiş olur.

Crew adı

Bir crew adı görüntüleme verisidir ve bunu yalnızca lead gösterir. collie crew invite --name "the shed", oluşturulduğunda bir crew'a ad verir; --name olmadan oluşturulan bir crew ise "collie crew" olarak adlandırılır. Daha sonra değiştirmek için lead üzerinde collie crew rename <name> komutunu çalıştırın. Eylem, adı lead'in kendi crew-trust.json dosyasına yeniden yazar ve bridge'i yeniden başlatır; böylece collie crew status ve telefonun crew sayfası yeni adı hemen gösterir.

Bir üyeye hiçbir şey gönderilmez. Ad yalnızca bir kez, bir kayda lead'in verdiği yanıtta iletilir ve üye bunu hiçbir zaman göstermeden saklar. Yeniden adlandırmadan sonra katılan bir makine yeni adı alır, crew'da zaten bulunan üyeler ise eski metni kimsenin okumadığı bir alanda tutar. Ad kırpılır, en fazla 64 karakter uzunluğundadır ve denetim karakteri içermez. Bir peer üzerinde veya hiçbir crew'da yer almayan bir makinede, eylem reddedilir ve nerede çalıştırılacağını bildirir.

1.7.0 sürümünden güncelleme

Önce lead'i güncelleyin. Telefon ve collie crew update zaten bu sırayı kullanmaktadır ve 1.8.0 bunun için ikinci bir neden ekler.

Bunların hangi sürümler olduğunu hatırlamanız gerekmez. 1.8.0 sürümünden itibaren güncelleme bildirimi; band üzerinde, Güncellemeler kartında ve günlük push bildiriminde sonraki sürümün crew bağlantısını ne zaman değiştireceğini söyler ve orada da aynısını belirtir: önce lead'i güncelleyin, üyeler onu takip eder.

1.8.0 bir makinenin okuduğu adları yeniden adlandırır. İletişim yolları, iki ortam anahtarı, üç durum dosyası ve journal öneki artık crew adını taşır (ADR 0039). Bağlantı tamamen eskisi gibi davranır ve komut dosyalarınızın hiçbirini aynı gün taşımanız gerekmez.

1.8.0 sürümündeki bir lead, 1.7.0 üyesinin kendisini takip etmesini sağlamaya devam eder. Lead, eski /pack/v1/* yollarına bir sürüm boyunca yanıt verir; böylece hâlâ 1.7.0 sürümündeki bir üye kaydolur, hello yanıtı verir ve zaten sahip olduğu bağlantı üzerinden kendisini eşitler. Hâlâ 1.7.0 sürümündeki bir lead, 1.8.0 üyesinin durum satırını okuyamaz; önce lead sırasının geçerli olmasının nedeni de buydu.

Önce güncellediğiniz bir üye takılıp kalmaz. 1.8.0 üyesi /crew/v1/* adresini arar, 1.7.0 lead'e karşı bir kez /pack/v1/* adresine geri döner ve bunu yaptığını belirten tek bir journal satırı yazar. Eski yollar ve bu geri dönüş mantığı 1.9.0 sürümünde kaldırılacaktır, bu nedenle bu sürümden önce tüm crew'u 1.8.0 sürümüne taşıyın.

Yeni adlar

1.7.01.8.0Makinenizde ne olur
COLLIE_PACK_TIMEOUT_MSCOLLIE_CREW_TIMEOUT_MSYeni anahtar yokken eski anahtar okunmaya devam eder ve Collie başlangıçta tek satırlık bir uyarı kaydeder. Her iki eski anahtar da 1.9.0 sürümünde kaldırılacaktır
COLLIE_PACK_HELLO_TIMEOUT_MSCOLLIE_CREW_HELLO_TIMEOUT_MSAynısı
pack-trust.json, pack-ops.json, pack-runtime.jsoncrew-trust.json, crew-ops.json, crew-runtime.jsonİlk başlangıçta, ~/.local/state/collie/ içinde bir kez yeniden adlandırılır. Eski dosyanın kopyası tutulmaz
[pack][crew]Crew'un kendi journal satırlarındaki önek
/pack/v1/…/crew/v1/…Lead-üye bağlantısındaki her yol
PACK_PROTOCOL.mdCREW_PROTOCOL.mdKablo protokolünün kendisi

Uygun olduğunuzda kendi .env dosyanızdaki iki ortam değişkeni anahtarını yeniden adlandırın. Siz bunu yapana kadar Collie eski anahtarı okur ve her başlangıçta bu uyarıyı yazdırır.

Güncellemeyi kapsayan bir journal üzerinde her iki önek için grep çalıştırın:

journalctl --user -u collie | grep -E '\[(crew|pack)\]'

Güncellemeden önce yazılan bir satırda [pack], sonrasında yazılan bir satırda ise [crew] yazar. Tüm ekip 1.8.0 sürümüne geçtiğinde yalnızca [crew] için filtreleme yapın.

Bu sayfayı GitHub üzerinde düzenleyin