The console was a default-grey tkinter window: no grouping, no state colour, no type scale, the privilege warning buried inside a monospace paragraph beside the repository path, "Çık" offered twice at two different sizes, and an output area that looked editable. The catalogue is 48 operations, 13 of them destructive, so the screen an operator actually reads before touching a fleet was the one surface with no hierarchy at all. Adds bfos/ui_theme.py, which mirrors web/static/tokens.css value for value -- the two surfaces describe the same fleet and must not disagree about what a colour means. It selects the `clam` theme because that renderer honours background/bordercolor on the elements being restyled; note that theming an element is not the same as redesigning a control, and the remaining gap is recorded in docs/UI-REMAINING-WORK.md rather than claimed as finished. What the redesign changes: - sections get headed regions instead of floating on the root background; - the privilege level becomes a header element and a banner, not a sentence; - one exit action, not two; - write operations are disabled with their reason visible when unprivileged, rather than hidden or silently listed; - the output well is styled as the read-only evidence it is. Tests: tests/test_bfos_gui_static.py moves to the new contract (68 -> assertions updated, none deleted); tests/test_bfos.py still 155/155, which is the check that the CLI and backend contracts survived a UI rewrite.
58 KiB
33 — Operatör Arayüzü Rehberi (bf)
Kısa özet: Bu rehber, Linux/DevOps'a yeni başlayan bir operatörün Blueforce cihazını git deposundan kurmasını ve tek giriş noktası olan
sudo bfgrafik operatör uygulaması ile cihazı işletmesini adım adım anlatır. Kurulum, filo işlemleri, merkez hazırlığı, araçlar ve cihaz bilgisi işlerinin tamamı bu pencereden açılır; komut ezberlemek gerekmez.
- Dosya:
docs/33-OPERATOR-CONSOLE.md - İlgili kararlar:
24-DECISION-LOG.md#K-09(golden image + kurucu),#K-12(kimlik formatı^[0-9]{8}$),#K-13(SSH anahtar zorunlu),#K-11(onaysız update yasağı),#K-21(durum modeli),#K-22(RDP her zaman hazır /bf-gui-*yalnız yerel GUI) - Uygulama: Python paketi
bfos(depo kökü) —bfos/ui_gui.py(grafik arayüz, tkinter),bfos/ui_theme.py(tasarım belirteçleri:web/static/tokens.css'in aynası),bfos/tui.py+bfos/cli.py(terminal konsolu),bfos/operations.py(iş mantığı + işlem kataloğu),bfos/runner.py(çalıştırma + denetim kaydı),bfos/config.py(Türkçe metinler) - Giriş noktası:
admin/bf(sarmalayıcı) →sudo bfvesudo bf --tui. Kurucu:admin/bf-bootstrap.sh - Yedek yol:
admin/bf-menu+admin/lib/*(eski bash konsolu) — ana yol değildir; yalnız Python'suz cihazlar ve olağanüstü durumlar için korunur - Durum: [ ] Taslak — pencere yerleşimi ve örnek satırlar LAB'da alınan gerçek koşuyla güncellenir
Dürüstlük notu (bu reponun kuralı): Aşağıdaki pencere ve çıktı örnekleri, tasarımı anlatmak için yazılmıştır. Gösterilen metinler uygulamanın kaynağından (
bfos/ui_gui.py,bfos/config.py,bfos/runner.py) alınmış gerçek satır biçimleridir; ancak pencere yerleşimi tema, ekran çözünürlüğü ve envanter içeriğine göre birebir farklı görünür. Kurulum betiğinin kendi çıktısı ([installer] ...satırları) LAB koşusunda bu dosyaya işlenir (§10, §13).
1. Amaç
Bu araç nedir? bf, cihaza sudo bf yazınca açılan grafik operatör uygulamasıdır. Varsayılan olarak basit mod gelir: ekranda üç büyük düğme vardır — Kur, Durum, Çıkış. Üst çubuktaki Detaylı mod düğmesiyle 5 kategori sekmesi açılır: Kurulum, Cihaz işlemleri, Merkez hazırlığı, Araçlar, Cihaz bilgisi. Listeden bir işlem seçip Komutu göster ve çalıştır düğmesine basarsın; uygulama senin adına doğru komutu üretir, çalıştırmadan önce gösterip onay ister ve ne yaptığını Türkçe satırlarla akıtır.
Neyi kolaylaştırır? Normalde cihazı kurmak, durumunu okumak, teşhis paketi almak veya bir filo işlemi başlatmak için onlarca komutu ve doğru sırasını bilmek gerekir. bf bunları sekmeler ve arama yapılabilir listeler altında toplar, her komutu çalıştırmadan önce gösterir, tehlikeli işlemlerde ikinci kez sorar, production dalgası ve sürüm kapısı için ayrı onay ister ve her işlemi bir denetim kaydına (/var/log/blueforce-console.log, mod 600) yazar. Kısacası: ezberleyeceğin tek şey sudo bf komutudur.
2. Kapsam
- Kapsam içi: Ubuntu'da ilk kurulum (git'ten indir + bootstrap), basit mod ve 5 kategori sekmesi, üst çubuktan hedef seçimi (bayi no / dalga / tüm filo), uçtan uca örnek seans, yetki modeli (
sudo bf= tam yetki), şifre dosyası (bf-creds) davranışı, grafik arayüz açılamadığında ne olacağı, en sık hatalar ve güvenlik kuralları. - Kapsam dışı: ISO/firstboot/offline provisioning yolu (26, 27 — artık ikincil/opsiyonel), merkez sunucularının kurulumu (07, 09 — arayüz yalnız hazırlar ve denetler, kurmaz), update onay zincirinin merkez tarafı (10, 21), rol bazlı eğitim müfredatı (31).
3. Kararlar
KARAR: Cihaz ve filo işlemlerinin tek operatör giriş noktası `sudo bf` grafik uygulamasıdır
(`bfos/ui_gui.py`, tkinter). Operatör komut ezberlemez; basit modda üç düğmeden,
detaylı modda kategori sekmesinden seçer.
GEREKÇE: Operatör profili Linux/DevOps'a yeni başlayan kişidir; serbest komut yazımı 700 cihazda
yazım hatasını filo arızasına çevirir (K-11 blast-radius). Arayüz her komutu
çalıştırmadan önce gösterir ve onay ister; dalga kapılı playbook'lara bayrak sessizce
geçirilmez, operatör kapıyı ayrıca onaylar.
ALTERNATİF: Numara yazılan terminal menüsü (`sudo bf --tui`, aynı iş mantığı) — grafik ekran
yoksa (SSH/başsız oturum) yedek yol olarak korunur. Eski bash konsolu (`admin/bf-menu`)
— Python'suz cihaz için son çare olarak durur, ana yol değildir.
Yalnız merkez Semaphore UI — saha cihazında çevrimdışıyken erişilemez; merkez tarafı
için korunur (09).
RİSK: Arayüzün katalog tablosu, altındaki playbook'tan ayrışır ve yanlış kapıyla çalıştırır;
azaltma: komut üretimi playbook kapsamını (simple/wave/release) playbook dosyasının
kendisinden okuyup karşılaştırır, uyuşmazlıkta **çalıştırmayı reddeder**
(`bfos/operations.py` + `bfos/ui_gui.py` → kapsam karşılaştırması; yıkıcı işlemler için
ayrıca katalog playbook'la senkron doğrulanır).
MALİYET: Ücretsiz.
LİSANS: Yok (kurum içi operatör aracı).
KARAR: Kurulum git deposundan yapılır: depo klonlanır ve `sudo admin/bf-bootstrap.sh`
(veya `curl -fsSL <repo>/admin/bf-bootstrap.sh | sudo bash`) çalıştırılır. Kurulum
paketleri DEPONUN İÇİNDEDİR (`provisioning/offline-repo/packages/`, 1321 .deb, Git LFS):
kurulan cihaz HİÇBİR ŞEY İNDİRMEZ, kurulum için internet gerekmez. ISO/firstboot yolu
(26, 27) silinmez, ikincil/opsiyonel yol olarak korunur.
GEREKÇE: Dağıtım imajı/ISO üretimi bu fazda yapılmayacaktır; en hızlı doğrulanabilir yol, sürümü
Git geçmişiyle izlenebilen tek bir bootstrap scriptidir. Bootstrap repoyu
`/opt/blueforce-linux` (veya bulunduğu checkout) altına alır, ön koşulları kurar,
`bf-*` araçlarını ve grafik arayüz girişini (`/usr/local/bin/bf`) `/usr/local/bin`'e
bağlar; cihaz kimliği (bayi no) hiçbir zaman bir imaja gömülmez (K-09/K-12).
İnternet yalnız `git clone` adımında gerekir; saha cihazı kurulduktan sonra çevrimdışı
çalışır.
ALTERNATİF: Tek USB Field OS ISO (K-20) — üretim/doğrulama maliyeti yüksek olduğu için bu fazda
birincil yol değil; yedek olarak korunur. USB'ye elle kopyalama — sürüm izi ve
güncellenebilirlik yok; elendi.
RİSK: `curl | bash` deseni kötüye kullanıma açıktır; azaltma: script yalnız resmi depo
adresinden çalıştırılır, `git clone` ile içeriği önce incelenebilir, secret yazmaz,
`git reset`/`stash` yapmaz ve yerel değişiklikleri asla silmez.
MALİYET: Ücretsiz.
LİSANS: Yok (kurum içi script).
KARAR: Grafik arayüz varsayılandır; açılamıyorsa uygulama SUSMAZ: Türkçe hata verir ve
`sudo bf --tui` yolunu önerir. Grafik arayüz için gereken `python3-tk` paketi çevrimdışı
depoda pinlidir (`provisioning/offline-repo/manifests/base-packages.txt`) ve kurulum
sonu kapısı `scripts/install/installer/modules/18-final-check.sh` tkinter'ı ayrıca
denetler; eksikse kurulum durdurulmaz, WARN yazıp terminal konsolunu işaret eder.
GEREKÇE: Minimal imajlarda `python3` vardır ama pencere araç takımı yoktur; operatör ne arayüz
ne de başka bir yol bulamazsa elinde hiçbir giriş noktası kalmaz ve cihazda internet
olmadığı için bu durumu düzeltemez. Paketin depoda pinli olması bu riski kurulum
anında kapatır; kapı ayrıca görünür bir uyarı bırakır.
ALTERNATİF: tkinter'ı kurulum dışı bırakmak — sahada tek giriş noktası terminale düşerdi; elendi.
tkinter yokluğunda kurulumu durdurmak — çalışan bir terminal konsolu varken cihazı
kurulmamış bırakırdı; elendi (uyarı verilir, kurulum sürer).
RİSK: Çevrimdışı depo güncellenmezse pin eskir; azaltma: paket seti Git LFS ile sürümlenir ve
depo bütünlüğü kurulum öncesi doğrulanır (offline depo denetimi).
MALİYET: Ücretsiz.
LİSANS: Yok.
KARAR: Şifre/kimlik bilgisi üretimi OPSİYONELDİR ve VARSAYILAN OLARAK KAPALIDIR; yalnız
`bf-creds --generate` açıkça istendiğinde üretilir ve parola hiçbir zaman
ekrana/loga/komut satırına yazılmaz.
GEREKÇE: SSH zaten anahtar zorunludur (parola girişi kapalı, `blueforce` hesabı kilitli — K-13);
kullanılmayan bir parola üretmek sızma yüzeyini büyütür. Varsayılan kapalı olması
secret'ın git'e/medyaya/support bundle'a kaçmasını da baştan engeller.
ALTERNATİF: Kurulumda otomatik parola üretimi — hiçbir kanal bu parolayı kullanmadığı için
gereksiz secret üretir; elendi. Parolayı repoya/ISO'ya gömmek — secret yasağına aykırı;
yasak.
RİSK: Kayıt dosyası yanlış yere kopyalanıp paylaşılır; azaltma: dosya `/root` altında mod
`600`, `--fetch` hedefi `admin/secrets/` git-ignore'lu (dizin `700`), parola yalnız
dosyaya yazılır.
MALİYET: Ücretsiz.
LİSANS: Yok.
4. Neden Bu Karar?
700 cihazlık bir filoda en pahalı hata, teknisyenin yanlış komutu yanlış cihazda çalıştırmasıdır. Grafik arayüz bu riski dört yerden küçültür: (1) operatör komut yazmaz, listeden doğru işlemi seçer; (2) her komut çalıştırılmadan önce bir onay penceresinde görünür ve onay ister — "ne çalışacak?" sorusu asla cevapsız kalmaz, komut çıktı alanına da ayrıca yazılır; (3) filo işlemleri hedefi üst çubuktan açıkça seçtirir (bayi no / dalga / tüm filo) ve dalga kapılarını (production için production yazma, sürüm kapısı için GATE yazma) operatöre ayrıca onaylatır; (4) yıkıcı işlemler ikinci bir onay penceresi ister ve yetki yoksa düğme yerine çalıştırma katmanı reddeder. Grafik arayüz aynı zamanda bir görünürlük kazancıdır: katalogda hangi işlemin kapsamı (yerel — bu cihaz, filo — dalga kapılı, filo — sürüm kapılı) ve türü (salt-okunur / YIKICI) olduğu listede renkli olarak durur.
Git tabanlı kurulum "hangi sürüm sahada?" sorusunu git log ile yanıtlanabilir kılar; kurulum paketlerinin depoda Git LFS ile durması ise "saha cihazı kurulurken ne indiriyor?" sorusunu hiçbir şey olarak yanıtlar. Şifre üretiminin varsayılan kapalı olması aynı felsefenin devamıdır: anahtar zaten var, ikinci bir gizli bilgi üretmenin faydası yok.
5. Alternatifler
| Alternatif | Artı | Eksi | Sonuç |
|---|---|---|---|
Grafik operatör uygulaması (sudo bf, tkinter) |
En keşfedilebilir; komutu gösterip onay ister; hedef ve kapılar tek ekranda; denetim kaydı tutar; çevrimdışı çalışır | Grafik oturum gerekir; tkinter paketi (depoda pinli) | Seçildi |
Terminal konsolu (sudo bf --tui, aynı bfos iş mantığı) |
Grafik ekran gerektirmez; SSH/başsız oturumda çalışır | Numara yazmaya dayanır, daha az keşfedilebilir | Yedek (grafik açılamazsa önerilir) |
Eski bash konsolu (admin/bf-menu) |
Python'suz cihazda da çalışır | Ayrı bir katalog tablosu; iki giriş noktası zamanla ayrışır | Yedek (son çare) |
| Dokümandan komut kopyalama | Araç gerektirmez | Sıra atlama + yanlış hedef riski | Elendi |
| Yalnız Semaphore UI (web) | Güzel arayüz, merkezden yönetim | Saha cihazında çevrimdışı erişilemez; cihaz-kurulumunu kapsamaz | Merkez için korunur (09) |
Tek düz komut scripti (bf-do) |
Basit | Keşfedilebilirlik ve hedef seçimi yok, acemi için anlaşılmaz | Elendi |
6. Avantajlar
- Öğrenme maliyeti tek satır:
sudo bf. Basit modda iki iş kararı yeter:Kur,Durum. - Her komut çalıştırılmadan önce onay penceresinde gösterilir; komut çıktı alanına da yazılır. Tehlikeli işlemler iki kez onaylanır — yanlış komut/yanlış sıra riski ortadan kalkar.
- Katalogda 48 işlem vardır ve her birinin kapsamı ile türü listede görünür: 13 işlem yıkıcı (yazma), 35 işlem salt-okunur. Yıkıcı satırlar listede kırmızı gösterilir (
YIKICI/salt-okunursütunu). - Filo işlemleri yalnız mevcut playbook'larla ve açık bir hedefle çalışır; arayüz yeni playbook üretmez ve envanter dışı bir cihaza dokunmaz.
- Uzun süren işler arka planda koşar: çıktı canlı akar, pencere kilitlenmez,
Çalışanı iptal etile durdurulabilir. - Çevrimdışı çalışır — ISO/firstboot yoluna bağımlı değildir; kurulum paketleri de depodadır, saha cihazı hiçbir şey indirmez.
- Grafik ekran yoksa uygulama Türkçe hata verip
sudo bf --tuiyolunu gösterir; operatör kör bırakılmaz. - Denetim kaydı (
/var/log/blueforce-console.log, mod600) komutu, hedefi ve çıkış kodunu kaydeder; secret ve ham komut çıktısı kayda yazılmaz (tek bir temizleyici,password=/token=/secret=/private_key=/PEM bloklarını<redacted>yapar).
7. Dezavantajlar
- Katalog tablosu ile playbook'lar arasında kapsam (scope) uyuşmazlığı olursa komut üretilmez ve arayüz çalıştırmayı reddeder; bu, playbook güncellemesiyle katalog kaydının birlikte güncellenmesini zorunlu kılar.
- Grafik arayüz bir pencere sistemine ihtiyaç duyar:
DISPLAY/WAYLAND_DISPLAYyoksa (başsız sunucu, X yönlendirmesiz SSH) açılmaz — o durumda terminal konsoluna düşülür. - Cihaz işlemleri sekmesindeki filo işlemleri için makinede
ansible-playbookgerekir; yoksa arayüz envanter notundaUYARI: ansible-playbook bulunamadı; filo işlemleri çalışmazsatırını gösterir ve komut üretilemez. - Çok özel/tek seferlik işler katalogda yoksa operatör kabuğa döner (kataloğa ekleme PR ile yapılır,
bfos/operations.py). - Grafik katalog, terminal konsolunun kapsamının tamamını taşır: 48 işlemin hepsi
Detaylı modsekmelerinden erişilebilir (ölçüldü;Araçlarsekmesinde 9 işlem,Cihaz bilgisisekmesinde ortam/kimlik/ağ/kaynak/servis ekranları).sudo bf --tuikolaylık için vardır, eksik bir yetenek için değil. - Her onay ayrı bir denetim satırı üretir; komutun ham çıktısı kayda kopyalanmaz (K-14).
8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
| Katalog bayatlar, yanlış kapıyla çalıştırır | Orta | Yüksek | Komut üretimi playbook kapsamını dosyadan okur, uyuşmazlıkta reddeder; statik testler katmanında katalog↔playbook doğrulaması her sürümde koşar |
| Operatör "tüm filo" hedefini yanlışlıkla seçer | Orta | Yüksek | Wave-scoped playbook'larda filo dalga dalga ilerler, her dalga ayrı onaylanır; production için production yazma zorunlu (09/10) |
| Yetkisiz oturumda yazma işlemi denenir | Orta | Orta | Açılışta başlıkta uyarı şeridi; yazma işlemleri kapalı ve çalıştırma katmanı da reddeder ([ENGELLENDİ]), §9.8 |
| Grafik arayüz açılamaz (başsız/X yok) | Orta | Orta | Türkçe hata + sudo bf --tui önerisi, çıkış kodu 3; terminal konsolu aynı iş mantığını kullanır |
python3-tk imajda eksik kalır |
Düşük | Orta | Paket çevrimdışı depoda pinli; kurulum sonu kapısı tkinter'ı denetler ve eksikse WARN + --tui yolu yazar |
curl | bash ile sahte script çalıştırma |
Düşük | Yüksek | Yalnız resmi depo adresi; git clone + gözden geçirme önerilir |
| Şifre kaydı yanlışlıkla paylaşılır | Düşük | Yüksek | Varsayılan kapalı; /root/blueforce-credentials.txt mod 600; admin/secrets/ git-ignore'lu (§9.5) |
| İşlem yarıda kalkar (elektrik) | Orta | Orta | Kurulum idempotent; Kurulum → Başarısız kuruluma devam et (--resume) sunulur (§11) |
| Arayüz, envanter dışı cihaza dokunur | Düşük | Yüksek | Hedefler envanterden çözülür; cihaz/grup bulunamazsa komut üretilmez |
9. Uygulama Planı
Bu bölüm sıfırdan başlayan içindir. Her adımda hangi komutu nereye yazacağın ve ekranda ne göreceğin yazılıdır.
9.1 Ubuntu'da ilk kurulum — adım adım
Ön koşullar (elinde olması gerekenler):
- Ubuntu Server tabanlı bir makine (desteklenen baseline
24.04/26.04). sudoyetkisi olan bir kullanıcı.- Kurulum başlangıcında internet (repoyu git'ten indirmek için). Kurulum paketleri deponun içinde geldiği için cihaza kurulan hiçbir şey indirilmez; cihaz kurulduktan sonra çalışması için internet gerekmez.
Adım 1 — Terminali aç. Ekranda şöyle bir satır görürsün:
emirhan@makine:~$
$ işareti "senin yazacağın yer" demektir; $ işaretini sen yazmazsın. Aşağıdaki komutları bu satıra yazıp Enter'a bas.
Adım 2 — Git kurulu mu?
git --version
Beklenen çıktı: git version 2.x.y. command not found yazarsa kur:
sudo apt update && sudo apt install -y git
[sudo] password for emirhan: yazınca klavyeden parolanı yaz — ekranda hiçbir karakter görünmez, bu normaldir — sonra Enter.
Adım 3 — Depoyu indir (klonla).
git clone https://github.com/emirhanmamak-blueforce/Blueforce-Linux.git
cd Blueforce-Linux
Ekranda Cloning into 'Blueforce-Linux'... görürsün ve komut $ satırına döner. Depo Git LFS kullandığı için kurulum paket setinin de indiğinden emin ol (git lfs pull); paket sayısı provisioning/offline-repo/packages/ altında 1321 .deb olmalıdır.
Adım 4 — Bootstrap'ı çalıştır. İki yol var, ikisi de aynı sonucu verir.
Yol A — depo içinden (önerilen; önce içeriği inceleyebilirsin):
sudo admin/bf-bootstrap.sh
Yol B — tek satırla (depoyu klonlamadan; repoyu /opt/blueforce-linux altına klonlar):
curl -fsSL https://raw.githubusercontent.com/emirhanmamak-blueforce/Blueforce-Linux/main/admin/bf-bootstrap.sh | sudo bash
sudo admin/bf-bootstrap.sh --checkhiçbir şeyi değiştirmeden ne yapılacağını raporlar (root bile gerekmez). Önce bunu çalıştırmak iyi alışkanlıktır.
Bootstrap bf-* araçlarını /usr/local/bin'e bağlar ve grafik arayüz girişini hazırlar; kendi özet çıktısında iki konsolu ayrı satırlarda bildirir: console : /usr/local/bin/bf (Python, primary) ve fallback : /usr/local/bin/bf-menu (bash). Son satırlar:
bf-bootstrap: summary
repository : /opt/blueforce-linux
branch : main
revision : <git hash>
tools : <N> linked into /usr/local/bin
console : /usr/local/bin/bf (Python, primary)
fallback : /usr/local/bin/bf-menu (bash)
next : sudo bf
Installation complete. To get started: sudo bf
Kurulum tamam. Başlamak için: sudo bf
| Bootstrap ne yapar | Ne yapmaz |
|---|---|
Ön koşulları kurar (git, curl, ansible-core) |
Cihaz kimliği (bayi no) atamaz |
| Repoyu klonlar veya mevcut checkout'u fast-forward eder | git reset / git stash yapmaz; yerel değişikliği silmez |
admin/bf-*, scripts/diagnostics/bf-*, scripts/maintenance/bf-* araçlarını /usr/local/bin'e bağlar |
Parola/secret üretmez veya indirmez |
admin/bf'yi çalıştırılabilir yapıp /usr/local/bin/bf bağını kurar (bf-menu yedek olarak kalır) |
Disk bölmez, servis silmez, onaysız paket güncellemez |
Adım 5 — Arayüzü aç ve doğrula.
sudo bf
Pencere açılıyorsa kurulum tamam. Bundan sonra her iş için aynı komut:
sudo bf
Bundan sonra ezberleyeceğin tek şey bu komuttur. Pencereden çıkmak için
Çıkışdüğmesi: basit modda üçüncü büyük düğme, detaylı modda eylem çubuğunun alt satırında. Tek çıkış kontrolü olduğu için ikisi aynı anda görünmez.
tkinter notu (grafik arayüz için gerekli). Pencerenin açılabilmesi için python3-tk paketi gerekir. Bu paket çevrimdışı depoda pinlidir (provisioning/offline-repo/manifests/base-packages.txt), yani normal kurulumda senin bir şey yapmana gerek yoktur; kurulum sonu kapısı (scripts/install/installer/modules/18-final-check.sh) tkinter'ı denetler. Yine de eksikse uygulama şu Türkçe hatayı verir ve çıkış kodu 3 ile biter:
tkinter bulunamadı; masaüstü arayüzü başlatılamıyor (teknik ayrıntı: ...).
Bu, minimal kurulumlarda sık görülür: tkinter ayrı bir sistem paketidir.
Ubuntu/Debian üzerinde kurmak için:
sudo apt install -y python3-tk
sudo apt update && sudo apt install -y python3-tk
tkinter kurmak istemiyorsanız terminal menüsünü kullanın: sudo bf --tui
İnternet yoksa paketi kuramazsın; terminal konsolu çalışmaya devam eder: sudo bf --tui.
Grafik ekran yoksa (SSH / başsız oturum). DISPLAY ve WAYLAND_DISPLAY tanımlı değilse pencere açılmaz; uygulama şu Türkçe mesajı yazıp çıkış kodu 3 ile biter:
Grafik ekran bulunamadı (DISPLAY ve WAYLAND_DISPLAY tanımlı değil).
SSH veya başsız (headless) bir oturumda masaüstü penceresi açılamaz.
Bu durumda terminal menüsünü kullanın:
sudo bf --tui
Yerel ekranda çalıştırmak için oturum açık bir makinede deneyin:
python3 -m bfos.ui_gui
9.2 Arayüzü kullanma — sekme sekme
sudo bf çalıştırınca basit mod açılır. Pencere koyu bir başlık bandıyla açılır; bandda solda Blueforce Field OS — Yönetim ve Blueforce saha cihazı yönetimi (Kur / Durum / Bakım), ortada hedef kimliği (HEDEF: — seçilmedi / cihaz BF-12010193 (bf-12010193) / dalga 'pilot_1' / tüm filo (envanterdeki her cihaz)), sağda cihaz durumu rozeti (KURULDU / KAYITLI / HAZIR / HATA / YOK) ve yetki rozeti (TAM YETKİ ya da SALT-OKUNUR) durur. Yetki bir durumdur, gömülü bir cümle değildir: yetkisiz açılışta bandın hemen altında turuncu bir şerit aynı bilgiyi tam cümleyle yineler. Bandın altında HEDEF paneli (bayi no, dalga, tüm filo), gövde, komut çıktısı ve eylem çubuğu gelir; depo yolu ile kullanılan katalog kaynağı (örn. bfos.operations + bfos.runner) bandın içinde sessiz bir satırdır.
Basit mod (varsayılan): ekranda Ne yapmak istiyorsunuz? sorusu ve üç büyük düğme — Kur, Durum, Çıkış. Kur bir seçim penceresi açar: Ön kontrol (--check), Kurulumu başlat, Vazgeç. Durum salt-okunur özeti (info-summary) çalıştırır. Daha fazlası için üst çubuktaki Detaylı mod düğmesine bas.
Ne yapmak istiyorsunuz?
[ Kur ] bu cihazı kurar (bayi no gerekir)
[ Durum ] salt-okunur özet
[ Çıkış ] pencereyi kapatır
Detaylı mod: 5 kategori sekmesi açılır. Sekmelerin üstünde bir özet şerit vardır: büyük rakam işlem sayısıdır (48 işlem), yanında 13 yıkıcı ve 35 salt-okunur sessiz satırlar olarak durur; yetkisiz oturumda şeridin sağında yazma işlemleri kapalı yazar. Her sekmede solda işlem listesi (sütunlar: İşlem, Kapsam, Tür, Durum) ve üstünde bir Süz: alanı, sağda SEÇENEKLER VE AÇIKLAMA paneli vardır; seçtiğin işlemin kapsamı, playbook yolu ve varsa zorunlu alanları orada görünür. Tür sütunu yıkıcı işlemlerde kırmızı YIKICI, diğerlerinde salt-okunur yazar; Durum sütunu işlemin çalıştırılabilir olduğunu (açık) ya da kapalı olduğunu (kapalı — sudo bf) söyler. Eylem çubuğu iki satırdır: üstte Komutu göster ve çalıştır (yıkıcı işlem seçiliyse kırmızı, yetkisizse kapalı ve nedeni yanında yazılı) ve sağında durum göstergesi (HAZIR / ÇALIŞIYOR / TAMAM / HATA — sözcük + renk); altta Çıktıyı temizle, Çalışanı iptal et, Yalnız denetim (--check), Çıktı panelini gizle ve Çıkış.
| Sekme | İşlem sayısı | Yazma (yıkıcı) | Salt-okunur |
|---|---|---|---|
| Kurulum | 6 | 3 (Bu cihazı kur, Başarısız kuruluma devam et, Tek modül çalıştır) |
3 (ön kontrol, modül durumu, kurulum günlüğü) |
| Cihaz işlemleri | 21 | 9 (servis yeniden başlatmalar, grafik oturumu aç/kapat, betik, reboot, paket güncellemesi) | 12 (11 filo raporu + log toplama) |
| Merkez hazırlığı | 4 | 0 | 4 |
| Araçlar | 9 | 1 (Bu kopyayı güncelle) |
8 |
| Cihaz bilgisi | 8 | 0 | 8 |
| Toplam | 48 | 13 | 35 |
Sekme sekme hangi işler var:
1) Kurulum (bu cihaz) — yalnız senin oturduğun makineyi kurar; hiçbir filo cihazına dokunmaz. Üst çubukta bayi no (8 hane) dolu olmalıdır; boşsa Komutu göster ve çalıştır bir uyarı penceresi açar.
| # | İşlem (arayüzde görünen ad) | Tür | Ne yapar |
|---|---|---|---|
| 1 | Kurulum ön kontrolü (--check) | salt-okunur | Kurulum betiğini --check ile çalıştırır; hiçbir şey yazmaz (kayıt/durum/dizin oluşturmaz) |
| 2 | Bu cihazı kur | YIKICI | Tam kurulum; hedef cihaz kimliği BF-<bayi no>, ana makine adı bf-<bayi no> |
| 3 | Başarısız kuruluma devam et (--resume) | YIKICI | Yarıda kalan kurulumu idempotent biçimde sürdürür; zaten OK olan modüller atlanır |
| 4 | Tek modül çalıştır (--only) | YIKICI | Tek bir kurulum modülünü çalıştırır (01-precheck … 18-final-check), modül adı seçenekten girilir |
| 5 | Kurulum modül durumu | salt-okunur | /var/lib/blueforce/install-state içeriğini gösterir: hangi modül hangi durumda |
| 6 | Kurulum günlüğü (son 40 satır) | salt-okunur | /var/log/blueforce-install.log sonunu gösterir |
Kurulum seçenekleri: Yerel çevrimdışı depodan kur (--offline) ve Zaten OK olan modülleri atla (--resume) onay kutuları. Kurulum paketleri deponun içinde olduğu için --offline pratikte varsayılan yoldur; cihaz hiçbir şey indirmez. Geçersiz bayi no'da (7/9 hane, harf, boşluk) komut hiç üretilmez: üst çubukta kırmızı uyarı çıkar ve Komutu göster ve çalıştır bir hata penceresi açar.
2) Cihaz işlemleri (filo) — yalnız repodaki mevcut playbook'ları, açık bir hedefle çalıştırır. Üst çubuktan bayi no, dalga ya da Tüm filo (dikkat) seçilir.
Salt-okunur raporlar (11 işlem, hiçbiri cihazı değiştirmez):
| # | İşlem | Ne yapar |
|---|---|---|
| 1 | Erişilebilirlik testi (ping) | SSH erişilebilirliği |
| 2 | Çalışma süresi | Açık kalma süresi ve sistem yükü |
| 3 | Disk kullanımı | Disk doluluğu; eşik üstünde uyarır (eşik opsiyonel girilir) |
| 4 | Docker durumu | Docker servisi ve konteynerler |
| 5 | Paket sürümleri | Sabitlenmiş paketlerin kurulu sürümleri |
| 6 | Bekleyen güvenlik güncellemeleri | Yalnız rapor; hiçbir paket kurmaz |
| 7 | Kurulum fazı raporu | Cihaz başına state.json fazı |
| 8 | Kayıt ve merkez kanıtı | ENROLLED/READY iddialarını merkezi kanıta karşı denetler |
| 9 | Field OS sürüm raporu | Sürüm; istenirse sapma (drift) denetimi |
| 10 | Uzak erişim kanalları | SSH/xRDP/RustDesk/WireGuard hazırlığı |
| 11 | Çevrimdışı hazırlık raporu | İnternetsiz kurulum için yerel ön koşullar |
Bakım işlemleri (10 işlem; 9'u yıkıcı, hepsi ikinci onay ister):
| İşlem | Kapsam | Not |
|---|---|---|
| xRDP servisini yeniden başlat | tek cihaz/grup | Servis yeniden başlatma |
| RustDesk servisini yeniden başlat | tek cihaz/grup | Servis yeniden başlatma |
| WireGuard servisini yeniden başlat | tek cihaz/grup | wg-quick@wg0 |
| İzinli bir servisi yeniden başlat | tek cihaz/grup | Yalnız izinli servis adları (blueforce-agent, docker, ssh, sshd, systemd-journald, cron) |
| Grafik arayüzü kapat (headless) | dalga kapılı | Dalgayı multi-user.target'e alır |
| Grafik arayüzü aç (bakım) | dalga kapılı | Grafik oturumu yeniden başlatır |
| Log topla / destek paketi | dalga kapılı | Zaman damgalı journal + destek paketi (salt-okunur) |
| Onaylı betik çalıştır | dalga kapılı | Yalnız /opt/blueforce/bin ve /usr/local/sbin |
| Kontrollü yeniden başlatma | sürüm kapılı | Sıralı yeniden başlatma + sağlık kapısı; bekleme süresi girilir |
| Onaylı paket güncellemesi kur | sürüm kapılı | paket=sürüm pinleri + dalga ve sağlık kapıları |
GUI kapatxRDP'i durdurmaz.xrdp/xrdp-sesmanher zaman enable+active kalır;bf-gui-*yalnız yerel fiziksel grafik katmanını kontrol eder (K-22). "GUI kapalı ≠ RDP kapalı."
3) Merkez hazırlığı — merkez entegrasyonunu denetler/hazırlar; merkez sunucusunu kurmaz. Dört işlemin tamamı salt-okunurdur:
| # | İşlem | Ne gösterir |
|---|---|---|
| 1 | Envanter hedefleri | Dalga/grup/cihaz sayıları |
| 2 | Doldurulmamış PLACEHOLDER denetimi | ansible/inventory/group_vars/all.yml içinde kalan PLACEHOLDER değerleri |
| 3 | Yapılandırılmış merkez uç noktaları | WireGuard hub, izleme ve depo anahtarları (secret gösterilmez) |
| 4 | Merkez hazırlık kontrol listesi | Kayıttan önce merkezde var olması gerekenler |
--tuimenüsünde bu sekmenin karşılığında ayrıca "Merkez hazırlık durumu", "uç noktaları dene" (DNS+TCP) ve "dalga geçiş kapısı durumu" ekranları vardır.
4) Araçlar — repo ve yerel yardımcılar. Yalnız Bu kopyayı güncelle (git pull --ff-only) yazma işlemidir; kalan 8'i salt-okunurdur: İşlem kataloğunu göster (--list), Yerel çevrimdışı kapısı (bf-check-local), Kayıt kapısı (bf-check-enrollment), Teslim kapısı (bf-check-ready), Derin teşhis (bf-diagnostics), Field OS sürüm kimliği (bf-release), Destek paketi oluştur, Konsol denetim günlüğü (son 40 satır).
5) Cihaz bilgisi — sekiz salt-okunur ekran: Durum özeti (sağlık + kurulum durumu), Kimlik (hostname, cihaz no), Ağ (adres, rota, DNS, WireGuard), Disk, bellek, yük, Kurulu pinlenmiş paketler, Servis durumu, Son journal hataları, Kurulum/kayıt durumu (state.json beyaz liste).
Not (WireGuard): Arayüz WireGuard private/preshared key'lerini hiçbir zaman istemez, göstermez veya kaydetmez; yalnız peer durumunu, port ve el sıkışma zamanlarını okur.
9.3 Hedef seçimi: tek cihaz mı dalga mı
Filo işlemlerinde hedef üst çubuktan seçilir; işlem seçildiğinde ekran hedefi ayrıca sormaz, çubuktaki değeri kullanır:
HEDEF [ Detaylı mod ]
Bayi no (8 hane) [ 12010193 ] Dalga [ pilot_1 ▾ ] [ ] Tüm filo (dikkat)
Bayi no geçerli: BF-12010193
| Hedef türü | Çubukta ne yaparsın | Örnek | Boyut | Tipik kullanım |
|---|---|---|---|---|
| Tek cihaz | Bayi no alanına 8 hane yaz | 12010193 |
1 | Arıza teşhisi, tek cihaz bakımı |
| Dalga / grup | Dalga açılır listesinden bir dalga seç |
lab |
2 | Yeni playbook denemesi (önce LAB kuralı) |
| Dalga / grup | Dalga listesi |
pilot_1 / pilot_2 / wave_1 / wave_2 |
5 / 20 / 50 / 100 | Kademeli yayılım (K-11) |
| Tüm filo | Tüm filo (dikkat) kutusunu işaretle |
— | kalan | Yalnız onaylı; dalga dalga ilerler |
Bayi no alanına yazdıkça anında doğrulanır; geçerliyse durum satırı Bayi no geçerli: BF-12010193 yazar, geçersizse kırmızı uyarı görünür (örn. Geçersiz bayi numarası '1201019': tam 8 hane olmalıdır (verilen uzunluk: 7). Örnek: 12010193).
Kurallar (arayüzün kendi davranışı):
- Tek cihaz normalde en güvenli seçenektir; cihaz envanterde yoksa komut üretilmez (
... onaylı bir dalga grubunda değilveyaenvanterde yok). - Dalga / grup listesi, envanterde gerçekten bulunan onaylı dalgalarla doldurulur; envanter okunamazsa varsayılan onaylı dalga sırası gösterilir.
- Wave-scoped bir playbook'ta tüm filo seçilirse araç, dalgaları sırayla (
lab → pilot_1 → pilot_2 → wave_1 → wave_2 → production) işler ve her dalga için ayrı ayrı onay ister; bir dalga başarısız olursa sonraki dalgaya geçmez (katalogdaki filo işlemleri ilk hatada durur). - Release-gated playbook'lar (reboot, paket güncellemesi) tek cihaz veya tüm filo kabul etmez; tek onaylı dalga ister.
- production dalgası ayrıca
productionyazdırılarak, sürüm kapısı iseGATEyazdırılarak onaylanır. Hiçbir kapı sessizce geçilmez: onay pencereleri sıraylaPRODUCTION onayı — canlı filo,Production ek onayı,Sürüm kapısı onayı (dalga: <dalga>),FİLO GENELİ onayı(kutuyaallyazılır) veİKİNCİ ONAY — yıkıcı işlembaşlıklarıyla açılır.
9.4 Uçtan uca örnek seans
Aşağıdaki iki kısa seans, kurulumdan günlük işletime tipik akışı gösterir. Metin biçimleri uygulamanın kendi metinleridir; kurulum betiğinin kendi [installer] satırları LAB koşusunda eklenir.
Seans A — Yeni cihazın kurulumu (bayi no girme)
emirhan@makine:~$ sudo bf
Pencere açılır: Blueforce Field OS — Yönetim / Blueforce saha cihazı yönetimi (Kur / Durum / Bakım).
- Üst çubuktaki
Bayi no (8 hane)alanına12010193yaz:
HEDEF
Bayi no (8 hane) [ 12010193 ] Dalga [ lab ▾ ] [ ] Tüm filo (dikkat)
Bayi no geçerli: BF-12010193
- Basit modda
Kurdüğmesine bas. Seçim penceresi açılır (başlık:Kurulum):
Bu cihazda ne yapılacak?
Ön kontrol (--check) hiçbir şey yazmaz; kurulum cihazı değiştirir.
[ Ön kontrol (--check) ] [ Kurulumu başlat ] [ Vazgeç ]
- Önce
Ön kontrol (--check)ile kuru koşu yapmak iyi alışkanlıktır: komut çıktı alanında görünür ve çalışır — hiçbir şey yazmaz.
========================================================================
Çalıştırılıyor: Kurulum ön kontrolü (--check)
bash /opt/blueforce-linux/scripts/install/blueforce-install.sh --dealer-id 12010193 --check
========================================================================
... (kurulum betiğinin kendi --check satırları) ...
[OK] Komut başarıyla tamamlandı (çıkış kodu 0).
- Şimdi gerçek kurulum: yeniden
Kur→Kurulumu başlat. Komut, çalışmadan önce bir onay penceresinde gösterilir:
Çalıştırılacak komut(lar):
bash /opt/blueforce-linux/scripts/install/blueforce-install.sh --dealer-id 12010193 --offline
İşlem : Bu cihazı kur [install-local]
Kapsam : yerel — bu cihaz
Açıklama: Cihazı kurar, hostname'i bf-<bayi-no> yapar.
Hedef : cihaz BF-12010193 (bf-12010193)
Yetki : root gerekir — konsolu sudo ile açın.
Not : Hedef cihaz kimliği: BF-12010193 (bf-12010193).
UYARI: Bu YIKICI bir işlemdir; seçili hedefte değişiklik yapar.
Bu komut çalıştırılsın mı? [Evet] [Hayır]
Evet dedikten sonra ikinci onay gelir (yıkıcı işlem), ardından komut çıktı alanına yazılır ve koşar:
========================================================================
Çalıştırılıyor: Bu cihazı kur
bash /opt/blueforce-linux/scripts/install/blueforce-install.sh --dealer-id 12010193 --offline
========================================================================
... (kurulum betiği yerel paket deposunu bulur, 18 modülü sırayla koşar) ...
[OK] Komut başarıyla tamamlandı (çıkış kodu 0).
Kurulum sonunda cihaz PROVISIONED_OFFLINE olur; READY değildir — merkeze kayıt (enrollment) ve merkezi kanal kanıtı gerekir (K-21). Bunu görmek için Cihaz bilgisi sekmesinden Kurulum/kayıt durumu (state.json beyaz liste) ya da Durum özeti açılır.
Seans B — Günlük kontrol (salt-okunur rapor) ve teşhis paketi
Üst çubuk: Hedef: [ 12010193 ] Dalga [ pilot_1 ▾ ]
Detaylı mod → Cihaz işlemleri sekmesi → listeden "Erişilebilirlik testi (ping)" satırını seç
Alt çubuk: [ Komutu göster ve çalıştır ]
Onay penceresi:
Çalıştırılacak komut(lar):
ansible-playbook -i ansible/inventory/hosts.yml ansible/playbooks/bf-ping.yml --limit bf-12010193
İşlem : Erişilebilirlik testi (ping) [ping]
Kapsam : filo — tek cihaz/grup (salt-okunur)
Hedef : cihaz BF-12010193 (bf-12010193)
Not : (playbook çıktısı canlı akar)
Bu komut çalıştırılsın mı? [Evet] [Hayır]
Çıktı alanında playbook çıktısı canlı akar; iş bitince:
[OK] Komut başarıyla tamamlandı (çıkış kodu 0).
Teşhis paketi için: Araçlar sekmesi → Destek paketi oluştur. Paket yolu çıktı alanında yazılır ve paket parola, private key veya token içermez (K-14). Denetim kaydını görmek için aynı sekmedeki Konsol denetim günlüğü (son 40 satır) açılır.
9.5 Kimlik bilgileri / şifre dosyası (opsiyonel — varsayılan KAPALI)
Önce şunu bil: SSH bu cihazda anahtar zorunludur; parola girişi kapalıdır ve blueforce bakım hesabı kilitlidir (K-13). Yani günlük yönetim için parolaya ihtiyaç yoktur. Bu yüzden şifre üretimi varsayılan olarak kapalıdır ve yalnız açıkça istenirse yapılır.
| Konu | Davranış (admin/bf-creds) |
|---|---|
| Varsayılan | Kapalı. sudo bf-creds hiçbir parola üretmez; yalnız cihazda zaten var olan gizlileri raporlar. |
| Üretme | sudo bf-creds --generate — cihaz kaydını yazar (ayrıca BF_GENERATE_CREDENTIALS=1) |
| Kayıt dosyası | /root/blueforce-credentials.txt (mod 0600) — cihaz kimliği (BF-<no>), hostname, oluşturma zamanı, WireGuard public anahtarı + private anahtarın yolu (içeriği değil), varsa RustDesk ID ve yerel yönetici parolası |
| Çekme (merkeze/kasaya) | sudo bf-creds --fetch — <repo>/admin/secrets/<bayi-no>.txt (dizin 0700, dosya 0600, git-ignore'lu) |
| Parola ekranda görünür mü? | Hayır. Parola yalnızca dosyaya yazılır; stdout/stderr'e, log'a veya komut satırına asla konmaz. |
| Git'e / ISO'ya / destek paketine girer mi? | Hayır. Secret hiçbir zaman depoya, medyaya veya support bundle'a konmaz. |
| SSH'ı değiştirir mi? | Hayır. bf-creds sshd_config'i düzenlemez, hesap açmaz/kilit açmaz, parola girişi yolunu açmaz. |
Neden varsayılan kapalı? Kullanılmayan her secret fazladan bir sızma yüzeyidir. Anahtar tabanlı erişim varken ikinci bir parola üretmek, sadece "git'e kaçabilecek yeni bir dosya" yaratır. İstisna (ör. yerel konsolda geçici bir parola isteyen bir ekip) --generate ile karşılanır ve kayıt dosyasının varlığı kayda geçer. Varsayılanı değiştirmek bir karar gerektirir; sessizce açılmaz.
9.6 Bir şey ters giderse — en sık 5 hata
| # | Belirti (ekranda ne görürsün) | Neden | Çözüm |
|---|---|---|---|
| 1 | bf: command not found |
Bootstrap çalışmamış veya araçlar bağlanmamış | Bootstrap'ı tekrar koş: sudo admin/bf-bootstrap.sh; sonra tam yoldan dene: sudo /usr/local/bin/bf. Python'suz cihazda yedek: sudo bf-menu |
| 2 | Başlık bandında turuncu SALT-OKUNUR rozeti ve bandın altında turuncu şerit: Yönetici yetkisi yok: salt-okunur raporlar çalışır, kurulum ve değişiklik gerektiren işlemler kapalıdır. Tam yetki için: sudo bf |
Arayüz sudo olmadan açıldı; yazma işlemleri kapalı (listede kalır, Durum sütunu kapalı — sudo bf yazar) |
Pencereyi kapat ve sudo bf ile aç (§9.8) |
| 3 | Hata penceresi: Geçersiz bayi numarası '1201019': tam 8 hane olmalıdır (verilen uzunluk: 7). Örnek: 12010193 |
Bayi no 8 haneli ve yalnız rakam olmalı | Tam 8 hane, sadece rakam gir; baştaki sıfırı silme. Örnek: 12010193 |
| 4 | Envanter notunda UYARI: ansible-playbook bulunamadı; filo işlemleri çalışmaz (sudo apt install ansible). |
Makinede Ansible yok | sudo apt install ansible (reponun kurulumu ansible-core'u zaten kurar) ve araçları bağla: sudo admin/bf-bootstrap.sh |
| 5 | Komut üretilemedi: Playbook bulunamadı: ansible/playbooks/... veya ... konsol kapsamı 'X' beklerken playbook 'Y' beyan ediyor. |
Katalog ile repo checkout'u uyuşmuyor (eski checkout veya --repo yanlış) |
Araçlar sekmesinden Bu kopyayı güncelle (git pull --ff-only) veya doğru repoyu ver: sudo bf --repo /opt/blueforce-linux; arayüzü yeniden başlat |
Ek olarak sık görülen dört durum:
- Grafik ekran yok (
Grafik ekran bulunamadı (DISPLAY ve WAYLAND_DISPLAY tanımlı değil)., çıkış kodu 3): Terminal konsolunu kullan:sudo bf --tui. Yerel ekranda oturum açık bir makinedepython3 -m bfos.ui_guiçalışır. - tkinter yok (
tkinter bulunamadı; masaüstü arayüzü başlatılamıyor ...):sudo apt install -y python3-tk(paket çevrimdışı depoda pinlidir) ya dasudo bf --tui. Pencere açılamadı; grafik oturumuna erişilemiyor.: SSH oturumundasın ve X yönlendirmesi yok, ekran kilitli ya da başka bir kullanıcının X sunucusuna bağlanıyorsun;sudo bf --tuiile devam et.git cloneinternet/DNS hatası (Could not resolve host): İnternet/DNS'i kontrol et; yalnız bu adımda internet gerekir. Kurulum paketleri depodadır, saha cihazı hiçbir şey indirmez.
9.7 Güvenlik kuralları
- Secret git'e, ISO'ya veya destek paketine girmez. Parola, private key ve token repoda/medyada bulunmaz; destek paketi çıktısı secret sızdırmaz (K-14). Denetim kaydı da tek bir temizleyiciden geçer:
password=/token=/secret=/api_key=/private_key=/psk=değerleri ve PEM blokları<redacted>olur. - Onaysız update yoktur. Güncelleme yalnız
Cihaz işlemlerisekmesindekiOnaylı paket güncellemesi kurile,paket=sürümpinleri + dalga kapısı + sağlık kapısı altında yapılır (K-11). Serbestapt upgrade,latestimaj veya otomatik güncelleyici mimaride yoktur (Bekleyen güvenlik güncellemeleriyalnız raportur). - Yıkıcı işlemler onaylıdır. Her komut çalıştırılmadan önce onay penceresinde gösterilir, onay istenir ve çıktı alanına da yazılır; yıkıcı işlemler ayrıca ikinci kez sorulur; onaylar eklendikten sonra komut değiştiyse kesin komut yeniden gösterilip onaylatılır.
productiondalgası içinproduction, sürüm kapısı içinGATE, tüm filo içinallyazılması zorunludur. Disk bölme/silme arayüzde otomatikleştirilmemiştir. - Yetki kapısı çalıştırma katmanındadır. Yetkisiz oturumda yazma işlemleri kapalıdır ve komut planı root gerektiriyorsa çalıştırma katmanı son savunma olarak reddeder (
[ENGELLENDİ]); ayrıntı §9.8. - SSH yalnız anahtarla. Parola girişi kapalı,
blueforcehesabı kilitli; paylaşılan private key yasaktır (K-13). - Tek kullanımlık enrollment token kaydedilmez. Token arayüz dışında bir kez girilir; denetim kaydı ham çıktıyı ve secret'ı yazmaz (K-17).
- Cihaz kimliği imajda taşınmaz. Bayi no yalnız ilk kurulum seansında üst çubuktaki alana girilir (K-09/K-12).
9.8 Yetki modeli
Arayüz beklenen kullanımda tam yetkili çalışır: sudo bf. Kurulum betiği dosya sistemine yazar, servisleri yönetir ve güvenlik duvarı temel çizgisini uygular; bu yüzden yazma işlemleri root ister. Ama arayüz root olmadan da açılır — çünkü raporlar repoyu ve envanteri okur, root gerektirmez.
| Durum | Ne olur |
|---|---|
sudo bf (tam yetki) |
Başlık bandında yeşil TAM YETKİ rozeti. 48 işlemin tamamı çalışır: kurulum, filo bakımı, paket güncellemesi, kontrollü reboot ve --check koşuları |
| Root değil (yetkisiz açılış) | Başlık bandında turuncu SALT-OKUNUR rozeti; bandın altında turuncu şerit: Yönetici yetkisi yok: salt-okunur raporlar çalışır, kurulum ve değişiklik gerektiren işlemler kapalıdır. Tam yetki için: sudo bf. 35 salt-okunur işlem çalışır (raporlar, envanter denetimi, bilgi ekranları, destek paketi); 13 yıkıcı işlem listede kalır ama kapalıdır (Tür = YIKICI, Durum = kapalı — sudo bf) ve Komutu göster ve çalıştır düğmesi kapalı çizilip nedenini kendi yanında yazar |
| Yetkisizken yazma denenirse | Yazma işlemleri düğme düzeyinde kapalıdır; bir yol bulunup denenirse çalıştırma katmanı reddeder ve çıktı alanına [ENGELLENDİ] Bu işlem yönetici yetkisi gerektirir (sudo bf). yazılır, işlem çalışmaz (çıkış kodu 2) |
--check kipi |
Salt-okunur olduğu için yetki istemez: Yalnız denetim (--check) kutusu işaretliyse deneme koşusu yetkisiz oturumda da yapılabilir |
Hangi işlemler yetki ister: katalogda 13 yıkıcı işlem — Bu cihazı kur, Başarısız kuruluma devam et, Tek modül çalıştır (Kurulum); servis yeniden başlatmalar (xRDP, RustDesk, WireGuard, izinli servis), Grafik arayüzü kapat/aç, Onaylı betik çalıştır, Kontrollü yeniden başlatma, Onaylı paket güncellemesi kur (Cihaz işlemleri); Bu kopyayı güncelle (Araçlar). Yetki kuralı tek kaynaktan türetilir: bir işlem yıkıcı olarak işaretliyse root gerektirir; ayrıca belirtildiyse o değer geçerlidir.
Planlama yetki istemez: komut önizlemesi, onay pencereleri ve --check üretimi root olmadan da çalışır, böylece operatör "bu benim yetkimle ne yapar?" sorusunu cevaplayabilir. Reddetme yalnız gerçek çalıştırmaya düşer.
10. Test Planı
| Test | Beklenen sonuç | Ortam |
|---|---|---|
sudo admin/bf-bootstrap.sh iki kez koşulur |
İkinci koşu hata üretmez (idempotent), araçlar yerinde, /usr/local/bin/bf bağlı |
LAB(2) |
sudo bf --list / python3 -m bfos.ui_gui --list |
48 işlem, 5 kategori, 13 YIKICI / 35 salt-okunur, pencere açılmadan listelenir | LAB(2) |
sudo bf açılır, Çıkış ile kapanır |
Pencere açılır, hiçbir değişiklik yapılmaz | LAB(2) |
python3 tests/test_bfos_gui_static.py |
Tema belirteçleri web/static/tokens.css ile birebir aynı; durum sözlüğü beş sözcük; yetkisiz oturumda yazma işlemleri listede ve nedeni yazılı; pencere açılmadan koşar |
LAB(2) |
sudo bf --tui ile aynı işlem listesi |
Terminal konsolu iki giriş noktası ayrışmadan çalışır | LAB(2) |
Grafik ekran olmadan (env -u DISPLAY -u WAYLAND_DISPLAY sudo bf) |
Türkçe hata + sudo bf --tui önerisi, çıkış kodu 3 |
LAB(2) |
| tkinter'siz ortamda başlatma | Türkçe hata + python3-tk ipucu + --tui önerisi, çıkış kodu 3; kurulum sonu kapısı bunu WARN olarak kaydeder |
LAB(2) |
Kurulum → Ön kontrol (--check) |
Değişiklik yok, rapor üretir | LAB(2) |
Kurulum → Bu cihazı kur, bayi no 12010193, --offline |
PROVISIONED_OFFLINE; ana makine adı bf-12010193; ağ erişimi olmadan tamamlanır |
LAB(2) |
| Geçersiz bayi no (7/9 hane, harf) | Kırmızı uyarı; Komutu göster ve çalıştır hata penceresi açar, komut üretilmez |
LAB(2) |
Cihaz işlemleri → Kontrollü yeniden başlatma, tek cihaz |
İki onay istenir; cihaz yeniden başlar; denetim satırı yazılır | LAB(2) |
Wave-scoped playbook, hedef Tüm filo (dikkat) |
Dalga dalga; her dalga ayrı onaylanır; hata sonraki dalgayı durdurur | LAB(2) |
| production dalgası denemesi | production yazılmadan çalışmaz |
LAB(2) |
Araçlar → Konsol denetim günlüğü |
Mod 600; secret ve ham komut çıktısı yok |
LAB(2) |
Yetkisiz oturum: bf --dry-run ile yazma işlemi planla, sonra çalıştırmayı dene |
Başlıkta uyarı şeridi; [ENGELLENDİ] satırı; hiçbir komut çalışmaz; çıkış kodu 2 |
LAB(2) |
sudo bf-creds (bayraksız) |
Hiçbir parola üretilmez, açıkça söyler | LAB(2) |
sudo bf-creds --generate |
Kayıt dosyası 0600; parola ekranda görünmez |
LAB(2) |
11. Rollback
- Kurulum yarıda kaldıysa:
Kurulumsekmesi →Başarısız kuruluma devam et (--resume); modüller idempotenttir ve zatenOKolanlar atlanır. - Yanlış bayi no girildiyse: doğru no ile tam yeniden koşu; kimlik modülü ana makine adını üzerine yazar (K-12).
- Bootstrap yanlış kurulduysa: repoyu güncelleyip (
Araçlar→Bu kopyayı güncelle,git pull --ff-only) yeniden koş; bootstrap hiçbir şeyi silmez,git reset/stashyapmaz, yerel çalışmanı korur. - Filo işlemi başarısız dalga bıraktıysa:
Onaylı paket güncellemesi kurgeri alma zinciri önceki onaylı release manifestine döner (10, 30). - Grafik arayüz bozulduysa/başlatılamıyorsa: iş emri durdurmaz —
sudo bf --tuiile aynı iş mantığına devam edilir; Python'un kendisi de yoksa yedek bash konsolusudo bf-menukullanılır. - Çözülmeyen cihaz: 17-RECOVERY seviye merdiveni (L8 = temiz yeniden kurulum) uygulanır.
12. Kontrol Listesi
bfospaketi ve giriş dosyasıadmin/bfrepoda mevcut;sudo bfgrafik arayüzü açar,sudo bf --tuiterminal konsolu.admin/bf-bootstrap.sh/usr/local/bin/bfbağını kurar; bash konsolu (admin/bf-menu) yedek olarak korunur, ana yol değildir.- Kurulum git tabanlı (clone + bootstrap); kurulum paketleri depoda (1321
.deb, Git LFS) — kuran kişi hiçbir şey indirmez. python3-tkçevrimdışı depoda pinli; kurulum sonu kapısı tkinter'ı denetler ve eksikse WARN +--tuiyolu bildirir.- Her komut çalıştırılmadan önce gösterilip onaylanıyor; yıkıcı işlemler iki kez soruyor; onay sonrası komut değişirse kesin komut yeniden onaylatılıyor.
- Bayi no kapısı
^[0-9]{8}$; geçersiz girişte komut üretilmiyor. - Filo işlemleri açık hedefle; wave-scoped filo akışı dalga dalga ilerliyor; production için
productionyazma zorunlu. - Katalog, playbook kapsamıyla uyuşmazsa çalıştırmayı reddediyor (kapsam playbook dosyasından okunur).
- Yetki modeli:
sudo bftam yetki; yetkisiz açılışta yazma işlemleri kapalı ve çalıştırma katmanı[ENGELLENDİ]ile reddediyor. - Pencere
docs/DESIGN.mdyönergesine göre çiziliyor: koyu başlık bandı (ürün adı + hedef kimliği + cihaz durumu + yetki), beyaz paneller,KURULDU/KAYITLI/HAZIR/HATA/YOKrozetleri (sözcük + renk), tek çıkış kontrolü; renk ve boşluk değerleribfos/ui_theme.pyüzerindenweb/static/tokens.css'ten geliyor ve statik testle karşılaştırılıyor. - Grafik ekran/tkinter yokluğunda Türkçe hata +
sudo bf --tuiönerisi ve çıkış kodu 3. - Şifre üretimi varsayılan kapalı; yalnız
bf-creds --generateile üretiliyor; parola ekrana/loga gitmiyor. Cihaz işlemleriiçinde onaysız güncelleme seçeneği yok;Bekleyen güvenlik güncellemeleriyalnız rapor.- Denetim kaydı mod
600; secret ve ham komut çıktısı yazılmıyor. - Örnek pencere/çıktı satırları gerçek LAB koşusuyla (özellikle kurulum betiğinin
[installer]satırları) güncellendi.
13. Açık Sorular
- Katalog işlemlerinin playbook kümesiyle tam eşleşmesi: yeni playbook'lar kataloğa nasıl eklenecek (
bfos/operations.py+ sekme tablosu) ve bu süreç hangi PR şablonuyla yürüyecek (sahibi: 09 + arayüz sahibi). - Terminal konsolunda bulunup grafik katalogda ayrı işlem olmayan araçlar (ortam bilgisi, canlı donanım kontrolü, uzak erişim durumu, donanım envanteri, merkez uç noktası probu) sekme listesine taşınacak mı; iki giriş noktası bu noktada bilinçli olarak ayrı mı kalacak (sahibi: arayüz sahibi + 15).
- Merkez hazırlığı ekranlarının gerçek merkez uç noktaları geldiğinde hangi kanıtı "hazır" sayacağı (sahibi: 29/21 yazarları).
bf-creds --fetchhedefinin (admin/secrets/) kurumsal kasa (vault) akışına bağlanması (sahibi: 06-ssh + merkezi admin).- Arayüz işlem geçmişinin merkezi log toplamaya (Loki/ELK, Faz-sonrası) dahil edilip edilmeyeceği (sahibi: 15-LOGGING yazarı).
- Git kurulumu ile ISO/firstboot yolunun uzun vadeli rolü: ISO tamamen arşiv mi, yedek yol mu kalır (sahibi: yönetim + 26 yazarı).
- Kurumsal proxy/air-gapped sahalarda
git cloneyerine iç ayna (mirror) deposu kullanılacak mı; bootstrap--repo/BF_REPO_URLile buna hazır mı (sahibi: merkezi admin). - Grafik arayüzün uzak masaüstü (xRDP) oturumu üzerinden de çalıştırılması desteklenen/desteklenmeyen bir senaryo mu; K-22 ile ilişkisi (sahibi: 08-rdp + arayüz sahibi).
Ek: Arayüz haritası
flowchart TB
START["sudo bf<br/>(grafik arayüz, varsayılan)"] --> WIN["Pencere: Blueforce Field OS — Yönetim<br/>üst çubuk: Bayi no (8 hane) + Dalga + Tüm filo"]
WIN --> SIMPLE["Basit mod (varsayılan)<br/>3 büyük düğme: Kur / Durum / Çıkış"]
WIN -->|"üstte 'Detaylı mod'"| DETAIL["Detaylı mod<br/>5 kategori sekmesi"]
SIMPLE -. "Detaylı mod düğmesi" .-> DETAIL
DETAIL --> T1["Kurulum (6 işlem, 3 yazma)<br/>ön kontrol / bu cihazı kur / resume / --only<br/>modül durumu / kurulum günlüğü"]
DETAIL --> T2["Cihaz işlemleri (21 işlem, 9 yazma)<br/>11 salt-okunur rapor + 10 bakım işlemi"]
DETAIL --> T3["Merkez hazırlığı (4, hepsi salt-okunur)<br/>envanter / PLACEHOLDER / uç noktalar / kontrol listesi"]
DETAIL --> T4["Araçlar (9 işlem, 1 yazma)<br/>checkout güncelle / katalog / kapılar / destek paketi / denetim kaydı"]
DETAIL --> T5["Cihaz bilgisi (8, hepsi salt-okunur)<br/>özet / kimlik / ağ / kaynaklar / paketler / servisler / journal / state"]
WIN --> FOOT["Alt çubuk: Komutu göster ve çalıştır / Çıktıyı temizle /<br/>Çalışanı iptal et / Yalnız denetim (--check) / Çıkış"]
FOOT --> GATES{"Onaylar: komut önizleme →<br/>dalga adı / production / GATE / all →<br/>yıkıcı ikinci onay"}
GATES --> RUN["Komut çıktı alanına yazılır ve koşar<br/>denetim kaydı: /var/log/blueforce-console.log (600)"]
START -. "grafik ekran veya tkinter yoksa<br/>(çıkış kodu 3, Türkçe hata)" .-> TUI["sudo bf --tui<br/>(terminal konsolu, yedek)"]
TUI -. "python3 yoksa" .-> BASH["admin/bf-menu<br/>(bash konsolu, son çare)"]
Ek: İlk kurulum ve durum akışı
flowchart LR
G["git clone<br/>Blueforce-Linux"] --> LFS["git lfs pull<br/>provisioning/offline-repo/packages/<br/>1321 .deb"]
LFS --> B["sudo admin/bf-bootstrap.sh<br/>(veya curl | sudo bash)"]
B --> BF["/usr/local/bin/bf<br/>+ bf-menu (yedek)"]
BF --> GUI["sudo bf<br/>grafik arayüz"]
GUI --> ID["Üst çubuk: bayi no gir<br/>ör. 12010193"]
ID --> INST["Kurulum sekmesi → Bu cihazı kur<br/>--offline (yerel paket deposu)"]
INST --> MOD["18/18 modül OK<br/>+ final-check: tkinter kapısı"]
MOD --> PO["PROVISIONED_OFFLINE<br/>yerel kurulum bitti"]
PO -->|"Cihaz bilgisi: kayıt durumu"| EN["ENROLLED"]
EN -->|merkez kanal kanıtı| RDY["READY<br/>teslim edilebilir"]
GUI -. "grafik ekran yok / tkinter yok" .-> TUI["sudo bf --tui"]
B -. "ISO/firstboot yolu<br/>(ikincil, opsiyonel)" .-> FB["docs/26 / docs/27"]
Ek: Hızlı referans (arayüz ↔ komut)
Her satırda önce arayüzdeki yol, sonra aynı işin sudo bf --tui (terminal konsolu) karşılığı, en altta altta çalışan komut/playbook yazar.
| Arayüzde (grafik) | sudo bf --tui karşılığı |
Altında çalışan komut / playbook |
|---|---|---|
Basit mod → Kur → Ön kontrol (--check) |
1) Kur → 1) Ön kontrol (--check) |
blueforce-install.sh --dealer-id <8hane> --check |
Basit mod → Kur → Kurulumu başlat |
1) Kur → 2) Bu cihazı kur |
blueforce-install.sh --dealer-id <8hane> (--offline, --resume opsiyonel) |
Kurulum → Başarısız kuruluma devam et |
Kurulum → 3) Başarısız kurulumu sürdür |
blueforce-install.sh --dealer-id <8hane> --resume |
Kurulum → Tek modül çalıştır (--only) |
Kurulum → 4) Tek modül çalıştır |
blueforce-install.sh --dealer-id <8hane> --only <modül> |
Kurulum → Kurulum modül durumu / Kurulum günlüğü |
Kurulum → 5) / 6) |
/var/lib/blueforce/install-state, /var/log/blueforce-install.log |
Basit mod → Durum / Cihaz bilgisi → Durum özeti |
1) Kur menüsünden 2) Durum / Cihaz bilgisi → 2) Sağlık özeti |
bf-status, state.json beyaz listesi, envanter hedefleri |
Cihaz işlemleri → Erişilebilirlik testi (ping) |
Cihaz işlemleri → 1) Salt okunur raporlar → ping |
bf-ping.yml |
Cihaz işlemleri → Field OS sürüm raporu |
Cihaz işlemleri → salt-okunur raporlar → Field OS sürümü | bf-fieldos-version.yml |
Cihaz işlemleri → Log topla / destek paketi |
Cihaz işlemleri → 2) Bakım işlemleri → log topla |
bf-collect-logs.yml |
Cihaz işlemleri → Kontrollü yeniden başlatma |
Cihaz işlemleri → bakım işlemleri → kontrollü reboot | bf-reboot.yml (sürüm kapılı, sıralı + sağlık kapısı) |
Cihaz işlemleri → Onaylı paket güncellemesi kur |
Cihaz işlemleri → bakım işlemleri → onaylı güncelleme | bf-deploy-update.yml (paket=sürüm pinleri) |
Cihaz işlemleri → Grafik arayüzü kapat/aç |
Cihaz işlemleri → bakım işlemleri → GUI off / on | bf-gui-off.yml / bf-gui-on.yml (xRDP'e dokunmaz, K-22) |
Merkez hazırlığı → Envanter hedefleri |
Merkez hazırlığı → 1..5 ekranları |
envanter okuma + group_vars/all.yml denetimi + DNS/TCP probe (--tui) |
Araçlar → Bu kopyayı güncelle |
Araçlar → 1) Depoyu güncelle |
git -C <repo> pull --ff-only |
Araçlar → İşlem kataloğunu göster |
Araçlar → 3) İşlem kataloğunu göster |
bf --list (48 işlem, kategori kategori) |
Araçlar → Yerel çevrimdışı kapısı / Kayıt kapısı / Teslim kapısı |
Araçlar → 4), 5), 6) |
bf-check-local, bf-check-enrollment, bf-check-ready (--check) |
Araçlar → Derin teşhis / Field OS sürüm kimliği |
Araçlar → 7), 10) |
bf-diagnostics (yoksa bf-status), bf-release |
Araçlar → Destek paketi oluştur |
Araçlar → 12) Destek paketi |
bf-support-bundle --out-dir /var/tmp |
Araçlar → Konsol denetim günlüğü |
Araçlar → 13) Konsol denetim kaydını göster |
tail -n 40 /var/log/blueforce-console.log |
Cihaz bilgisi → Kimlik / Ağ / Disk, bellek, yük / Servis durumu / Son journal hataları |
Cihaz bilgisi → 1), 4), 5), 7), 8) |
hostname + state.json, ip/resolv.conf/wg show, df-free-uptime, systemctl is-active, journalctl -p err -n 20 |
Cihaz bilgisi → Kurulum/kayıt durumu |
Cihaz bilgisi → 3) Kurulum ve kayıt durumu |
state.json beyaz liste (phase, enrollment_status, fleet_status, device_id, provisioning_id) |
| (arayüzde ayrı işlem değil) | Araçlar → 2) Ortam ve sürüm bilgisi, 8) Canlı donanım / OS kontrolü, 9) Uzak erişim kanalları, 11) Donanım envanteri |
environment_lines, bf-live-hw-check, bf-remote-status --check, bf-hardware-inventory.sh |
| Arayüz dışı (opsiyonel) | Arayüz dışı (opsiyonel) | sudo bf-creds --generate / --fetch |
| Denetim kaydı | Denetim kaydı | /var/log/blueforce-console.log (mod 600; yazılamazsa $XDG_STATE_HOME/blueforce/blueforce-console.log) |
| Grafik ekran/tkinter yoksa | Bu konsol | sudo bf --tui; Python yoksa sudo bf-menu |