Blueforce-Linux/docs/33-OPERATOR-CONSOLE.md
emirhanmamak-blueforce 2bad7fbb7f feat(console): application shell with overview, browser, drawer and safety UX
The console was a flat form: every control on the root window, 48 operations
as undifferentiated rows, a giant output textarea, privilege as a buried
sentence. It now has a shell: a fixed header band (product, target, device
state, privilege) plus a page body, and in detailed mode a sidebar with five
operation categories and an Activity page.

What changed (presentation layer only; _execute, gates, run_plan, audit and
redaction untouched):
- simple mode is an Overview: four state cards (target/device/privilege/
  inventory) plus Install/Status/Exit, instead of the raw form;
- the target is one segmented control (Device/Wave/Entire fleet) with a single
  scope source of truth; the dealer text can no longer silently override the
  wave, and the scope stays visible across pages;
- operations are browsed, not dumped: icon + name + explanation + scope/risk
  badges, with a detail panel (meta grid, warnings, options form, backend-built
  command preview on demand);
- destructive confirmations are dedicated dialogs showing OPERATION/TARGET/
  SCOPE/EFFECT with a fleet/production strip and focus on Cancel; the token
  dialog is styled; secrets never enter either;
- the output textarea is an execution drawer (IDLE/RUNNING with mm:ss /
  DONE-FAILED with duration and exit code) streaming the same backend output;
- write operations stay visible but disabled with their reason when
  unprivileged, in both entry points;
- new module bfos/ui_widgets.py (~490 lines, stdlib + tkinter only, no colour
  literals): canvas line icons, segmented control, collapsible panel, meta
  grid, timer, the two safety dialogs.

Tests: test_bfos_gui_static.py 95 OK, test_bfos.py 155 OK, run-all.sh 12/12.
The colour-literal test now also scans ui_widgets.py (proven by mutation:
a #ff0000 probe goes red, green after removal). Live QA: zero geometry errors
over 712 widgets, all 48 operations listed, 13 write ops disabled with reasons
without root, TUI and --list smoke-tested.

Known limits: no dark theme (tokens ready); the detail page's target line does
not refresh when the target changes mid-form (the confirmation dialog always
shows the current one); visual QA was geometry + OCR, not a human eye.
2026-09-16 23:21:41 +03:00

60 KiB
Raw Blame History

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 bf grafik 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 bf ve sudo 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 kenar çubuklu kabuk açılır: 5 katalog bölümü (Kurulum, Cihaz işlemleri, Merkez hazırlığı, Araçlar, Cihaz bilgisi) + Etkinlik. Tarayıcıdan 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ı bölümler 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 kenar çubuklu 5 bölüm, parçalı seçiciden hedef seçimi (cihaz / 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 kenar çubuğundaki bölümden 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-okunur sü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 et ile 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 --tui yolunu gösterir; operatör kör bırakılmaz.
  • Denetim kaydı (/var/log/blueforce-console.log, mod 600) 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_DISPLAY yoksa (başsız sunucu, X yönlendirmesiz SSH) açılmaz — o durumda terminal konsoluna düşülür.
  • Cihaz işlemleri bölümündeki filo işlemleri için makinede ansible-playbook gerekir; yoksa arayüz envanter notunda UYARI: ansible-playbook bulunamadı; filo işlemleri çalışmaz satı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ı mod bölümlerinden erişilebilir (ölçüldü; Araçlar bölümünde 9 işlem, Cihaz bilgisi bölümünde ortam/kimlik/ağ/kaynak/servis ekranları). sudo bf --tui kolaylı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).
  • sudo yetkisi 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 --check hiç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 — bölüm bölüm

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 (parçalı kapsam seçici + bağlamsal girdi), gövde, yürütme çekmecesi (başlık + 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 Genel Bakış vardır: dört durum kartı — HEDEF (büyük kimlik + tür satırı), CİHAZ DURUMU (rozet + sözcük), YETKİ (rozet + sudo bf ipucu), ENVANTER (dalga sayısı + ilk dalgalar) — ve altında Hızlı işlemler kutusunda üç 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. Yetkisiz oturumda Kur kapalıdır ve nedeni düğmenin üstünde yazar. Daha fazlası için üst çubuktaki Detaylı mod düğmesine bas.

     Genel Bakış

     [HEDEF: BF-12010193] [DURUM: HAZIR] [YETKİ: ...] [ENVANTER: 6 dalga]

     Hızlı işlemler
     [ Kur    ]      bu cihazı kurar (bayi no gerekir)
     [ Durum  ]      salt-okunur özet
     [ Çıkış  ]      pencereyi kapatır

Detaylı mod: solda bir kenar çubuğu açılır: beş katalog bölümü (adetleriyle — Kurulum, Cihaz işlemleri, Merkez hazırlığı, Araçlar, Cihaz bilgisi) ve Etkinlik sayfası. Bölümlerin ü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 bölümde solda işlem tarayıcı (üstte Süz: alanı; satırlar: ikon + ad + tek satır açıklama + tür ve durum rozetleri + ok), sağda İŞLEM AYRINTISI paneli vardır: başlık, açıklama, HEDEF/KAPSAM/YETKİ/TÜR ızgarası, koşullu uyarılar, seçenek formu, katlanır komut önizlemesi (Önizlemeyi oluştur düğmesi komutu gerçek backend ile üretir, çalıştırmaz) ve birincil Komutu göster ve çalıştır düğmesi. Rozetler: türde yıkıcı işlemlerde kırmızı YIKICI, diğerlerinde salt-okunur; durumda açık ya da kapalı — sudo bf. Yazma işlemleri listede kalır, solar, nedenini yazar — gizlenmez. Etkinlik sayfası bu oturumda biten çalışmaları (zaman, işlem, hedef, sonuç) listeler; sır göstermez. 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ış. Çıktı panelinin üstünde yürütme başlığı vardır: boşken BOŞTA + Etkin işlem yok., çalışırken ÇALIŞIYOR + işlem · hedef + geçen süre, bitince TAMAM/HATA + süre + çıkış kodu.

Bölüm İş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

Bölüm bölüm 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 kapat xRDP'i durdurmaz. xrdp/xrdp-sesman her 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

--tui menüsünde bu bölümün 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 çubuktaki parçalı seçiciden verilir; üç kapsam birbirini dışlar ([Cihaz | Dalga | Tüm filo]), görünür kapsam tektir ve işlem seçildiğinde ekran hedefi ayrıca sormaz, seçicideki değeri kullanır:

  HEDEF                                                              [ Detaylı mod ]
     [ Cihaz ] [ Dalga ] [ Tüm filo ]
     Bayi no (8 hane) [ 12010193 ]
     Bayi no geçerli: BF-12010193
Hedef türü Seçicide ne yaparsın Örnek Boyut Tipik kullanım
Tek cihaz Cihaz parçasını seç, bayi no alanına 8 hane yaz 12010193 1 Arıza teşhisi, tek cihaz bakımı
Dalga / grup Dalga parçasını seç, listeden bir dalga seç lab 2 Yeni playbook denemesi (önce LAB kuralı)
Dalga / grup Dalga parçası pilot_1 / pilot_2 / wave_1 / wave_2 5 / 20 / 50 / 100 Kademeli yayılım (K-11)
Tüm filo Tüm filo parçasını seç (şerit açılır) — 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ğil veya envanterde 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 production yazdırılarak, sürüm kapısı ise GATE yazdırılarak onaylanır. Hiçbir kapı sessizce geçilmez: onay pencereleri sırayla PRODUCTION onayı — canlı filo, Production ek onayı, Sürüm kapısı onayı (dalga: <dalga>), FİLO GENELİ onayı (kutuya all yazılır) ve İKİNCİ ONAY — yıkıcı işlem baş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).

  1. Üst çubuktaki Bayi no (8 hane) alanına 12010193 yaz:
  HEDEF
     Bayi no (8 hane) [ 12010193 ]     Dalga [ lab ▾ ]     [ ] Tüm filo (dikkat)
     Bayi no geçerli: BF-12010193
  1. Basit modda Kur düğ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ç ]
  1. Ö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).
  1. Ş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 bölümünden 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 bölümü → tarayıcıdan "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 bölümü → 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ı bölümdeki 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 rozeti 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 bölümünden 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 makinede python3 -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 da sudo 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 --tui ile devam et.
  • git clone internet/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ı

  1. 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.
  2. Onaysız update yoktur. Güncelleme yalnız Cihaz işlemleri sekmesindeki Onaylı paket güncellemesi kur ile, paket=sürüm pinleri + dalga kapısı + sağlık kapısı altında yapılır (K-11). Serbest apt upgrade, latest imaj veya otomatik güncelleyici mimaride yoktur (Bekleyen güvenlik güncellemeleri yalnız raportur).
  3. 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. production dalgası için production, sürüm kapısı için GATE, tüm filo için all yazılması zorunludur. Disk bölme/silme arayüzde otomatikleştirilmemiştir.
  4. 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.
  5. SSH yalnız anahtarla. Parola girişi kapalı, blueforce hesabı kilitli; paylaşılan private key yasaktır (K-13).
  6. 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).
  7. 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

  1. Kurulum yarıda kaldıysa: Kurulum sekmesi → Başarısız kuruluma devam et (--resume); modüller idempotenttir ve zaten OK olanlar atlanır.
  2. Yanlış bayi no girildiyse: doğru no ile tam yeniden koşu; kimlik modülü ana makine adını üzerine yazar (K-12).
  3. 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/stash yapmaz, yerel çalışmanı korur.
  4. Filo işlemi başarısız dalga bıraktıysa: Onaylı paket güncellemesi kur geri alma zinciri önceki onaylı release manifestine döner (10, 30).
  5. Grafik arayüz bozulduysa/başlatılamıyorsa: iş emri durdurmaz — sudo bf --tui ile aynı iş mantığına devam edilir; Python'un kendisi de yoksa yedek bash konsolu sudo bf-menu kullanılır.
  6. Çözülmeyen cihaz: 17-RECOVERY seviye merdiveni (L8 = temiz yeniden kurulum) uygulanır.

12. Kontrol Listesi

  • bfos paketi ve giriş dosyası admin/bf repoda mevcut; sudo bf grafik arayüzü açar, sudo bf --tui terminal konsolu.
  • admin/bf-bootstrap.sh /usr/local/bin/bf bağı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 + --tui yolu 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 production yazma zorunlu.
  • Katalog, playbook kapsamıyla uyuşmazsa çalıştırmayı reddediyor (kapsam playbook dosyasından okunur).
  • Yetki modeli: sudo bf tam yetki; yetkisiz açılışta yazma işlemleri kapalı ve çalıştırma katmanı [ENGELLENDİ] ile reddediyor.
  • Pencere docs/DESIGN.md yönergesine göre çiziliyor: koyu başlık bandı (ürün adı + hedef kimliği + cihaz durumu + yetki), beyaz paneller, KURULDU/KAYITLI/HAZIR/HATA/YOK rozetleri (sözcük + renk), tek çıkış kontrolü; renk ve boşluk değerleri bfos/ui_theme.py üzerinden web/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 --generate ile üretiliyor; parola ekrana/loga gitmiyor.
  • Cihaz işlemleri içinde onaysız güncelleme seçeneği yok; Bekleyen güvenlik güncellemeleri yalnı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 --fetch hedefinin (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 clone yerine iç ayna (mirror) deposu kullanılacak mı; bootstrap --repo/BF_REPO_URL ile 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