diff --git a/.gitignore b/.gitignore
index 16f7982..c9f3d30 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,11 @@
# Nothing here ships; the reviewed tooling lives in provisioning/offline-repo/.
/tmp/
+# Python bytecode caches. Every .pyc is regenerated on import, so tracking them
+# only produces noisy diffs and a stale artifact in the checkout.
+__pycache__/
+*.py[cod]
+
# ---------------------------------------------------------------------------
# Field OS build artifacts.
# These are large, generated, and reproducible from a verified upstream ISO.
@@ -34,6 +39,13 @@ packages.lock.tsv
# ...but never inside the committed bundle.
!provisioning/offline-repo/built/
!provisioning/offline-repo/built/**
+#
+# Except the bundle's own pool/ copy of the .deb files: those packages are
+# already tracked once under provisioning/offline-repo/packages/, and the same
+# ~890 MB does not need a second path in the repository. What the installer
+# needs from this directory is the index (Packages, Packages.gz,
+# packages.lock.tsv, SHA256SUMS) plus repo-manifest.yaml.
+provisioning/offline-repo/built/pool/
# Documentation site (generated)
docs-site/node_modules/
diff --git a/README.md b/README.md
index 58d0c36..7423bc9 100644
--- a/README.md
+++ b/README.md
@@ -10,11 +10,11 @@
%100 ücretsiz / self-hosted Linux filo mimarisi: başka bir DevOps mühendisinin sıfırdan kurabileceği doküman setinin ve çalışan iskeletin ana reposu. Dokümanlar Türkçedir; komut, dosya, servis ve terim adları İngilizce kalır.
-**Kurulum git tabanlıdır:** depo klonlanır, `admin/bf-bootstrap.sh` operatör araçlarını kurar ve sahada tek giriş noktası olan `sudo bf-menu` kategori menüsü açılır. ISO/firstboot provisioning yolu (bkz. [`docs/26`](docs/26-BLUEFORCE-FIELD-OS-ISO.md), [`docs/27`](docs/27-OFFLINE-PROVISIONING.md)) **ikincil/opsiyoneldir**, silinmez. Sıfırdan başlayan için adım adım rehber: [`docs/33-OPERATOR-CONSOLE.md`](docs/33-OPERATOR-CONSOLE.md).
+**Kurulum git tabanlıdır:** depo klonlanır, `admin/bf-bootstrap.sh` operatör araçlarını kurar ve sahada tek giriş noktası olan **grafik operatör uygulaması** `sudo bf` açılır. Uygulama Python'dur (`bfos`), Türkçedir ve terminal menüsü aynı kodun yedek arayüzüdür (`sudo bf --tui`) — grafik ekran yoksa veya tkinter kurulu değilse devreye girer. ISO/firstboot provisioning yolu (bkz. [`docs/26`](docs/26-BLUEFORCE-FIELD-OS-ISO.md), [`docs/27`](docs/27-OFFLINE-PROVISIONING.md)) **ikincil/opsiyoneldir**, silinmez. Sıfırdan başlayan için adım adım rehber: [`docs/33-OPERATOR-CONSOLE.md`](docs/33-OPERATOR-CONSOLE.md).
## Hızlı Başlangıç (git ile kurulum)
-Kurulumun birincil yolu **git deposudur**; ISO/provisioning yolu (aşağıdaki §Kurulum Akışı, [`docs/26`](docs/26-BLUEFORCE-FIELD-OS-ISO.md)) ikincil ve opsiyoneldir. Sahadaki tek giriş noktası `sudo bf-menu` **operatör konsoludur**: kategoriler numarayla seçilir, komut ezberlenmez.
+Kurulumun birincil yolu **git deposudur**; ISO/provisioning yolu (aşağıdaki §Kurulum Akışı, [`docs/26`](docs/26-BLUEFORCE-FIELD-OS-ISO.md)) ikincil ve opsiyoneldir. Sahadaki tek giriş noktası **`bf` operatör uygulamasıdır**: her iş ekrandan yapılır, komut ezberlenmez.
```bash
# 1) Depoyu indir
@@ -27,14 +27,18 @@ sudo admin/bf-bootstrap.sh
# Depoyu klonlamadan tek satır alternatifi:
# curl -fsSL https://raw.githubusercontent.com/emirhanmamak-blueforce/Blueforce-Linux/main/admin/bf-bootstrap.sh | sudo bash
-# 3) Operatör konsolunu aç
-sudo bf-menu
+# 3) Operatör uygulamasını aç (grafik arayüz)
+sudo bf
+# Grafik ekran yoksa (SSH, başsız sunucu) aynı uygulamanın terminal konsolu:
+sudo bf --tui
```
-Menüden **1) Installation → 2) Install this device** seçilir ve 8 haneli bayi no girilir (ör. `12010193` → cihaz `BF-12010193`, hostname `bf-12010193`). Kurulum sonunda cihaz `PROVISIONED_OFFLINE` olur; `READY` yalnız merkez kanalları doğrulanınca alınır.
+Uygulama açılınca **Kurulum → Bu cihazı kur** seçilir ve 8 haneli bayi no girilir (ör. `12010193` → cihaz `BF-12010193`, hostname `bf-12010193`). Kurulum sonunda cihaz `PROVISIONED_OFFLINE` olur; `READY` yalnız merkez kanalları doğrulanınca alınır.
+
+**Yetki:** kurulum ve durum değiştiren işlemler yönetici yetkisi ister. `sudo bf` ile açıldığında tüm işlemler açıktır; yetkisiz açılırsa uygulama bunu başlangıçta söyler ve yalnız salt-okunur raporları çalıştırır.
- Sıfırdan başlayan için adım adım rehber (hangi ekranda ne yazılır): [`docs/33-OPERATOR-CONSOLE.md`](docs/33-OPERATOR-CONSOLE.md)
-- Menü ↔ komut eşlemesi ve kategori haritası aynı dokümanın Ek'lerindedir; özet soru-cevap: [`SUMMARY.md`](SUMMARY.md).
+- Ekran ↔ komut eşlemesi ve kategori haritası aynı dokümanın Ek'lerindedir; özet soru-cevap: [`SUMMARY.md`](SUMMARY.md).
## Field OS Nedir?
diff --git a/SUMMARY.md b/SUMMARY.md
index 78951fb..e6d4dec 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -11,10 +11,10 @@
## 1. Field OS için Kısa Soru-Cevap (2026-09-16 turu)
- **Blueforce Field OS nedir?** — Ubuntu Server 26.04.1+ LTS üzerinde maintain edilen GNOME katmanı bulunan, çevrimdışı kurulabilen, merkezden yönetilen; onaysız güncelleme yapmayan ve 4 uzak erişim kanalı kullanan **endüstriyel saha işletim sistemi standardıdır**. Üç parçası vardır: zemin (Ubuntu LTS + GNOME + terminale boot), provisioning (tek kurucu + autoinstall/offline APT/firstboot + tek USB Field OS ISO) ve işletme (WireGuard + 4 kanal + Docker/MEG + monitoring + Ansible/Semaphore). **Medya tabanı sapması:** kanonik baseline Ubuntu **Server**'dır; build host'ta checksum'ı doğrulanmış tek medya Ubuntu **Desktop** ISO olduğu için üretilen ilk ISO Desktop tabanlıdır (manifest `baseline_deviation` bloğu). Hedef işletim sistemi yine Server paket setidir (`ubuntu-server` + `ubuntu-desktop-minimal` + GNOME, terminale boot); sapma yalnız medya tabanındadır ve LAB kararı bekler. → [`00`](docs/00-MASTER-PLAN.md), [`01`](docs/01-ARCHITECTURE.md), [`26`](docs/26-BLUEFORCE-FIELD-OS-ISO.md), [`31`](docs/31-LEARNING-GUIDE.md) (K-01, K-02, K-20)
-- **Nasıl kurulur?** — Kurulumun birincil yolu **git deposudur**: `git clone https://github.com/emirhanmamak-blueforce/Blueforce-Linux.git` → `cd Blueforce-Linux` → `sudo admin/bf-bootstrap.sh` (depoyu klonlamadan tek satır alternatifi: `curl -fsSL https://raw.githubusercontent.com/emirhanmamak-blueforce/Blueforce-Linux/main/admin/bf-bootstrap.sh | sudo bash`) → `sudo bf-menu`. Bootstrap yalnız operatör araçlarını ve `bf-*` komutlarını kurar; **cihaz kimliği (bayi no) İSTEMEZ**, disk bölmez, veri silmez, onaysız güncelleme yapmaz (idempotent). Kimlik ilk `bf-menu` seansında girilir. ISO/firstboot yolu ([`26`](docs/26-BLUEFORCE-FIELD-OS-ISO.md)/[`27`](docs/27-OFFLINE-PROVISIONING.md)) **ikincil/opsiyoneldir** ve silinmez. Ayrıntılı adım adım rehber: [`33`](docs/33-OPERATOR-CONSOLE.md). → [`05`](docs/05-ONE-CLICK-INSTALLER.md), [`33`](docs/33-OPERATOR-CONSOLE.md) (K-09, K-12, K-20)
-- **Menü nasıl kullanılır?** — Sahadaki tek giriş noktası `sudo bf-menu` **operatör konsoludur**: 5 kategori numarayla seçilir, komut ezberlenmez (**1** Installation, **2** Device operations, **3** Central (preparation), **4** Tools, **5** Device information; ana ekranda `q` = çıkış, alt menülerde `0` = geri). Her komut çalıştırılmadan önce ekranda gösterilir ve onay istenir; yıkıcı işlemler iki kez sorar. Kurulumda "**Dealer number (8 digits)**" sorulur (ör. `12010193` → `BF-12010193` / `bf-12010193`); geçersiz format kurulumu başlatmaz (K-12). Filo işlemleri (kategori 2) hedefi **tek cihaz (bayi no) / grup-dalga (lab, pilot_1, pilot_2, wave_1, wave_2, production) / tüm filo** olarak seçtirir; wave-scoped playbook'ta "tüm filo" dalga dalga ilerler ve her dalga ayrı onaylanır, production için `production` yazmak zorunludur (K-11). Onaysız güncelleme seçeneği **yoktur**; `bf-gui-*` yalnız **yerel fiziksel** ekranı açar/kapatır, RDP (xrdp/xrdp-sesman) her zaman hazırdır (K-22). Şifre üretimi opsiyoneldir ve **varsayılan kapalıdır** (`bf-creds --generate`; parola ekrana/loga gitmez). Denetim log'u `/var/log/blueforce-console.log` (mod `600`). → [`33`](docs/33-OPERATOR-CONSOLE.md), [`09`](docs/09-FLEET-MANAGEMENT.md), [`10`](docs/10-UPDATE-AND-ROLLBACK-POLICY.md) (K-11, K-13, K-22)
+- **Nasıl kurulur?** — Kurulumun birincil yolu **git deposudur**: `git clone https://github.com/emirhanmamak-blueforce/Blueforce-Linux.git` → `cd Blueforce-Linux` → `sudo admin/bf-bootstrap.sh` (depoyu klonlamadan tek satır alternatifi: `curl -fsSL https://raw.githubusercontent.com/emirhanmamak-blueforce/Blueforce-Linux/main/admin/bf-bootstrap.sh | sudo bash`) → **`sudo bf`** (grafik operatör uygulaması) → `Kurulum` sekmesi → **"Bu cihazı kur"** → 8 haneli bayi no → onay. Bootstrap yalnız operatör araçlarını ve `bf-*` komutlarını kurar; **cihaz kimliği (bayi no) İSTEMEZ**, disk bölmez, veri silmez, onaysız güncelleme yapmaz (idempotent). **Kurulum internetsizdir:** paketler depoyla gelir (`provisioning/offline-repo/packages/`, 1321 `.deb`, ~888 MB, Git LFS) ve kuran kişi hiçbir şey indirmez; kurucu yerel paket deposunu kendi bulur (`--offline` gerekmez). Grafik ekran veya `python3-tk` yoksa uygulama Türkçe yönlendirme yapıp **`sudo bf --tui`** terminal konsolunu önerir (çıkış kodu 3). ISO/firstboot yolu ([`26`](docs/26-BLUEFORCE-FIELD-OS-ISO.md)/[`27`](docs/27-OFFLINE-PROVISIONING.md)) **ikincil/opsiyoneldir** ve silinmez. Ayrıntılı adım adım rehber: [`33`](docs/33-OPERATOR-CONSOLE.md). → [`05`](docs/05-ONE-CLICK-INSTALLER.md), [`33`](docs/33-OPERATOR-CONSOLE.md) (K-09, K-12, K-20)
+- **Arayüz nasıl kullanılır?** — Sahadaki tek giriş noktası **grafik operatör uygulamasıdır**: `sudo bf` (Python paketi `bfos`, Tkinter arayüzü `bfos/ui_gui.py`); pencere başlığı `Blueforce Field OS — Yönetim`. Basit modda üç düğme vardır (`Kur`, `Durum`, `Çıkış`); **`Detaylı mod`** ile 5 sekme açılır: `Kurulum`, `Cihaz işlemleri`, `Merkez hazırlığı`, `Araçlar`, `Cihaz bilgisi`. Hedef üst çubuktan seçilir: **Bayi no (8 hane)** (`^[0-9]{8}$` doğrulamalı) veya dalga grubu (lab, pilot_1, pilot_2, wave_1, wave_2, production); geçersiz format komut üretmez (K-12). Her komut çalıştırılmadan önce ekranda gösterilir ve onay istenir; yıkıcı işlemler iki kez sorar; production kapsamı için ek onay (ve `production` yazma) gerekir (K-11). Grafik ekran yoksa (SSH/başsız oturum) veya `python3-tk` kurulu değilse uygulama Türkçe hata verip **`sudo bf --tui`** terminal konsolunu önerir (çıkış kodu 3); eski bash menü `sudo admin/bf-menu` yalnız **yedek**tir, ana yol değildir. `sudo bf` = tam yetki; root değilse uygulama başlangıçta uyarır ve yalnız salt-okunur raporları çalıştırır (yazma işlemleri çalıştırma katmanında da reddedilir). Onaysız güncelleme seçeneği **yoktur**; `bf-gui-*` yalnız **yerel fiziksel** ekranı açar/kapatır, RDP (xrdp/xrdp-sesman) her zaman hazırdır (K-22). Şifre üretimi opsiyoneldir ve **varsayılan kapalıdır** (`bf-creds --generate`; parola ekrana/loga gitmez). Denetim log'u `/var/log/blueforce-console.log` (mod `600`). → [`33`](docs/33-OPERATOR-CONSOLE.md), [`05`](docs/05-ONE-CLICK-INSTALLER.md), [`09`](docs/09-FLEET-MANAGEMENT.md), [`10`](docs/10-UPDATE-AND-ROLLBACK-POLICY.md) (K-11, K-13, K-22)
- **ISO nasıl build edilir?** — Autoinstall kurulum **motorudur**, Blueforce Field OS ISO ise **paketleme/dağıtım** yöntemidir; ikisi rakip değil, birlikte kullanılır. `provisioning/iso/build-blueforce-iso.sh --upstream-iso --checksum-file ` çalıştırılır; builder base ISO'yu doğrular, ağacı çıkarır, autoinstall + firstboot + offline-repo araçlarını ekler, GRUB satırlarına autoinstall yazar ve boot düzenini base ISO'nun kendi `as_mkisofs` reçetesinden yeniden kurar. **ISO üretilmiştir:** `dist/Blueforce-Field-OS-1.0.0-amd64.iso` (6 481 917 952 byte, SHA256 `cb0cc56f…d431296`), El Torito BIOS+UEFI korunmuş, `/autoinstall.yaml` medya kökünde. Boot kabulü (UEFI/Legacy/Secure Boot) ve air-gapped kurulum hâlâ LAB işidir; resmi Ubuntu ISO + NoCloud seed USB yedek/geri dönüş yoludur. → [`26`](docs/26-BLUEFORCE-FIELD-OS-ISO.md), [`32`](docs/32-REPOSITORY-AUDIT-AND-CONFLICTS.md) (K-15, K-20)
-- **Offline kurulum nasıl çalışır?** — Sürümlü medya + offline APT snapshot kullanılır; `blueforce-install.sh --offline` yalnız yerel `file:` APT kaynağından paket kurar (uzak indirme, key download, `apt download` yok) ve kurulum `PROVISIONED_OFFLINE` durumuna gelir. Subiquity'nin `apt.fallback` varsayılanı zaten `offline-install`'dır. Medya manifestlerinde somut `package=version` pinleri yoksa kurucu `OFFLINE BLOCKED` ile durur — "offline olur" demek için paket seti gerçekten dolu olmalıdır. → [`27`](docs/27-OFFLINE-PROVISIONING.md), [`31`](docs/31-LEARNING-GUIDE.md) (K-16, K-20, K-21)
+- **Offline kurulum nasıl çalışır?** — Paketler **git deposunda taşınır** (`provisioning/offline-repo/packages/`, 1321 `.deb`, ~888 MB, Git LFS ile takip edilir) ve kuran kişi **hiçbir şey indirmez**: `sudo bf` → Kurulum sekmesi → "Bu cihazı kur" akışı internetsiz çalışır. Kurucu yerel paket deposunu **kendi bulur** (sıra: `BF_OFFLINE_REPO` → `/provisioning/offline-repo/built` → `/opt/blueforce/offline-repo`); `--offline` bayrağı **zorunlu değildir**, yalnız yerel depoyu zorlar. İki hata durumu vardır ve ikisinde de paket adımlarına geçilmez, sistemde hiçbir değişiklik yapılmaz: depo hiç yoksa aranan yollar + `ÇIKIŞ NEDENİ: yerel paket deposu bulunamadı.` (exit 1); depo bozuksa `OFFLINE BLOCKED: ` (exit 1). Grafik arayüzün gerektirdiği `python3-tk` paketi de offline depoda pinlidir. Sonuç `PROVISIONED_OFFLINE`'dır. → [`27`](docs/27-OFFLINE-PROVISIONING.md), [`05`](docs/05-ONE-CLICK-INSTALLER.md), [`31`](docs/31-LEARNING-GUIDE.md) (K-16, K-20, K-21)
- **Device state'leri nedir?** — Üç durum, tek sıra: `PROVISIONED_OFFLINE` → `ENROLLED` → `READY`. Tek kaynak `/var/lib/blueforce/state.json`, okuma komutu `bf-enrollment-status`. `READY` **tek durum değildir**: "kuruldu" READY değildir, "token alındı" READY değildir; yalnız WireGuard + merkezi remote + monitoring kanıtı doğrulanınca READY yazılır ve `bf-check-ready` bu kanıtı her seferinde yeniden denetler. → [`27`](docs/27-OFFLINE-PROVISIONING.md), [`29`](docs/29-DEVICE-ENROLLMENT.md) (K-16, K-17, K-21)
- **Internet olmadan ne olur?** — Yerel kurulum tamamlanır: paketler offline snapshot'tan gelir, cihaz `PROVISIONED_OFFLINE` olur. Cihaz çalışır ama merkezce doğrulanmamıştır: uzaktan erişim/izleme kanalları ve READY kapısı kapalı kalır. Yerel GUI kapalıyken bile xRDP servisi ayaktadır; ancak WireGuard tüneli olmadığı için merkezden erişilemez. → [`27`](docs/27-OFFLINE-PROVISIONING.md) (K-16, K-21, K-22)
- **Internet gelince ne olur?** — Merkezi admin, `BF-`'ya bağlı kısa ömürlü ve tek kullanımlık token üretir; teknisyen tokenı yalnız cihaz ekranına girer (`bf-enroll --token-stdin`). Token tüketilince WireGuard yapılandırması atomik kurulur ve durum `ENROLLED` olur. Ardından güncel WG handshake, xRDP/RustDesk yapılandırması ve merkezi `monitoring`/`remote`/`management` kanıtı doğrulanınca `READY` yazılır; kanıt `pending` ya da eksikse cihaz ENROLLED'da kalır (fail-closed). → [`29`](docs/29-DEVICE-ENROLLMENT.md) (K-17, K-21)
@@ -24,7 +24,7 @@
- **Field OS version nasıl takip edilir?** — Cihazda `bf-release` komutu okunur; kaynak sırası `BF_RELEASE_MANIFEST` → `/etc/blueforce/release-manifest.yaml` → legacy `/etc/blueforce-release` → repo manifesti. Manifest `status: skeleton` ise komut `UNAPPROVED_SKELETON` yazar ve **exit≠0** verir: iskelet medya dağıtılabilir release sayılmaz. Gerçek sürüm kimliği immutable release manifestiyle (ISO/seed/offline APT snapshot/installer/Ansible commit + checksum) eşleşir. → [`30`](docs/30-FIELD-OS-RELEASE-MANAGEMENT.md) (K-18, K-24)
- **Operatör hangi rehberden öğrenir?** — Linux, ağ, otomasyon, ISO, enrollment ve rollback pratikleri yalnız LAB'da [`31`](docs/31-LEARNING-GUIDE.md) ile çalışılır; komutlar örnektir ve LAB doğrulaması gerektirir.
-Bu 12 soru + öğrenme rehberi sorusu, karar günlüğünde S-28…S-37 olarak izlenir ([Ek B-2](docs/24-DECISION-LOG.md)); bu tura `docs/33` ile **"Nasıl kurulur?"** ve **"Menü nasıl kullanılır?"** soruları eklendi (yukarıdaki ilk bloğun devamı).
+Bu 12 soru + öğrenme rehberi sorusu, karar günlüğünde S-28…S-37 olarak izlenir ([Ek B-2](docs/24-DECISION-LOG.md)); bu tura `docs/33` ile **"Nasıl kurulur?"** ve **"Arayüz nasıl kullanılır?"** soruları eklendi (yukarıdaki ilk bloğun devamı); kurulum ve arayüz anlatımı grafik operatör uygulaması (`sudo bf`) üzerinedir, terminal yolu yedektir.
---
@@ -47,13 +47,16 @@ Bu 12 soru + öğrenme rehberi sorusu, karar günlüğünde S-28…S-37 olarak i
Ansible, Prometheus, log, envanter, runbook) join anahtarıdır. Örn. `BF-12010193` / `bf-12010193`. → [`02`](docs/02-DEVICE-NAMING-AND-INVENTORY.md) (K-12)
6. **İlk PC hazırlığı nasıl?** — İmaj dondurulmadan **önce** `bf-hardware-inventory.sh` ile donanım
taraması (CPU/RAM/disk/NIC/GPU profilleri) ve Windows keşfi (F0); profilsiz imaj sahada rastgele kırılır. → [`18`](docs/18-PILOT-AND-700-DEVICE-ROLLOUT.md), [`28`](docs/28-WINDOWS-TO-LINUX-MIGRATION.md) (K-09, K-19)
-7. **Yeni PC kurulumu kaç adım?** — Teknisyen için akış: USB medyasıyla Ubuntu kur →
- `blueforce-install.sh --offline` + 8 haneli bayi no → `bf-status` ile `PROVISIONED_OFFLINE` gör →
- internet geldiğinde enrollment ve merkezi kontrolleri tamamla; yalnız sonra `READY` teslim edilir. →
- [`27`](docs/27-OFFLINE-PROVISIONING.md), [`29`](docs/29-DEVICE-ENROLLMENT.md), [`20`](docs/20-FIELD-TECHNICIAN-RUNBOOK.md) (K-16, K-17, K-21)
-8. **Installer nasıl çalışacak?** — Tek giriş `blueforce-install.sh --dealer-id <8hane>`; çevrimdışı yol
- `--offline` ile yerel medya/snapshot kullanır ve yalnız `PROVISIONED_OFFLINE` yazar. `READY`, installer
- çıkış kodu değil enrollment sonrası merkezi WireGuard, erişim ve monitoring doğrulamasının sonucudur. →
+7. **Yeni PC kurulumu kaç adım?** — Teknisyen için akış: USB medyasıyla Ubuntu kur → depo kopyasını getir
+ → `sudo bf` → Hedef: bayi no → Kurulum → "Bu cihazı kur" (8 haneli bayi no) → durumda `PROVISIONED_OFFLINE` gör →
+ internet geldiğinde enrollment ve merkezi kontrolleri tamamla; yalnız sonra `READY` teslim edilir.
+ Paketler depoyla geldiği için kurulumda **indirme yapılmaz**. →
+ [`05`](docs/05-ONE-CLICK-INSTALLER.md), [`27`](docs/27-OFFLINE-PROVISIONING.md), [`29`](docs/29-DEVICE-ENROLLMENT.md), [`20`](docs/20-FIELD-TECHNICIAN-RUNBOOK.md) (K-16, K-17, K-21)
+8. **Installer nasıl çalışacak?** — Tek giriş grafik operatör uygulamasıdır (`sudo bf` → `Kurulum` sekmesi →
+ "Bu cihazı kur"); bu düğme `blueforce-install.sh --dealer-id <8hane>` motorunu çağırır ve paket deposunu
+ otomatik bulur (`--offline` zorunlu değil). Yedek yol `sudo bf --tui`, acil yedek bash menü `sudo admin/bf-menu`.
+ Kurucu yalnız `PROVISIONED_OFFLINE` yazar. `READY`, installer çıkış kodu değil enrollment sonrası merkezi
+ WireGuard, erişim ve monitoring doğrulamasının sonucudur. →
[`05`](docs/05-ONE-CLICK-INSTALLER.md), [`27`](docs/27-OFFLINE-PROVISIONING.md), [`29`](docs/29-DEVICE-ENROLLMENT.md) (K-21)
9. **WireGuard mimarisi?** — **Hub-spoke**: merkez hub (`10.8.0.1`), her cihaz spoke (peer adı `bf-`,
sabit `/32`); istemcide `PersistentKeepalive = 25` + `wg-quick@wg0` enable; SSH/RDP yalnızca tünel
@@ -171,7 +174,7 @@ kaynak URL'ler [`24 Ek A`](docs/24-DECISION-LOG.md).
## Ek: QA Doğrulama (2026-09-16 güncellemesi)
- **33 numaralı doküman mevcut:** `docs/00` … `docs/32` (+ `docs/_TEMPLATE.md`); kanonik set `00`–`31`, `32` denetim/çelişki raporudur.
- - **Ek (operatör konsolu):** `docs/33-OPERATOR-CONSOLE.md` eklendi (§1–§13 + Mermaid; git kurulumu + `bf-menu` menü rehberi). Numaralı set artık `docs/00` … `docs/33` (34 dosya).
+ - **Ek (operatör konsolu):** `docs/33-OPERATOR-CONSOLE.md` eklendi (§1–§13 + Mermaid; git kurulumu + grafik operatör arayüzü (`sudo bf`) ve `sudo bf --tui` yedek konsolu rehberi). Numaralı set artık `docs/00` … `docs/33` (34 dosya).
- **13 başlık:** 33 dosyanın tamamında §1–§13 sıralı ve eksiksiz (bu turda `docs/32` §1–§13 yapısına getirildi).
- **Mermaid:** 33/33 dosyada ≥1 diyagram; toplam 35 blok (30 dosyada 1, birkaçında 2+).
- **BF-/bf- tutarlılığı:** insan arayüzü `BF-`, makine adı `bf-`; aykırı kullanım yok (kalan `BF-xxxx`/`BF-no` ifadeleri şablon yer tutucudur).
@@ -185,5 +188,7 @@ kaynak URL'ler [`24 Ek A`](docs/24-DECISION-LOG.md).
`check-provisioning-static.sh`, `test-firstboot-static.sh` **GEÇTİ**; `check-specs.sh` iki **bayat sabit** nedeniyle düşer
(kanonik doküman sayısı `32`→`33`, Mermaid toplamı `34`→`35`); `test-field-os-lifecycle.sh` **kırmızı** (READY/durum sözleşmesi).
Düzeltmeler `tests/` ve ilgili provisioning akışı kapsamındadır — ayrıntı [`docs/32 §10`](docs/32-REPOSITORY-AUDIT-AND-CONFLICTS.md).
-- **Üretim artefaktı:** henüz `*.iso` yok, `*.deb` havuzu yok, offline pinler `UNPINNED` sentinel, `packages.lock.tsv` yok,
- merkezi enrollment endpoint'i yok. Yani "offline kurulum çalışıyor" bugün **kanıtlanmış değildir**; F2A/F2B kapıları açıktır.
+- **Üretim artefaktı:** `*.deb` havuzu artık repoda: `provisioning/offline-repo/packages/` altında 1321 paket (~888 MB, Git LFS),
+ pin manifestolarında `UNPINNED` sentinel kalmadı ve `python3-tk` (grafik arayüz) dahil pinlendi. Ancak kurucunun aradığı `built/` bundle dizini
+ (Packages, Packages.gz, packages.lock.tsv, SHA256SUMS, pool/) bu checkout'ta **yok**; bu haliyle kurulum "yerel paket deposu yok" diyerek fail-closed durur,
+ repo sorumlusunun `build-index.sh` koşup `built/` dizinini commit'lemesi gerekir. Merkezi enrollment endpoint'i yok; air-gapped kurulum ve ISO boot kabulü LAB işidir.
diff --git a/bfos/__pycache__/__init__.cpython-311.pyc b/bfos/__pycache__/__init__.cpython-311.pyc
deleted file mode 100644
index 2995015..0000000
Binary files a/bfos/__pycache__/__init__.cpython-311.pyc and /dev/null differ
diff --git a/bfos/__pycache__/cli.cpython-311.pyc b/bfos/__pycache__/cli.cpython-311.pyc
deleted file mode 100644
index 1185665..0000000
Binary files a/bfos/__pycache__/cli.cpython-311.pyc and /dev/null differ
diff --git a/bfos/__pycache__/config.cpython-311.pyc b/bfos/__pycache__/config.cpython-311.pyc
deleted file mode 100644
index 03c8406..0000000
Binary files a/bfos/__pycache__/config.cpython-311.pyc and /dev/null differ
diff --git a/bfos/__pycache__/operations.cpython-311.pyc b/bfos/__pycache__/operations.cpython-311.pyc
deleted file mode 100644
index 584a339..0000000
Binary files a/bfos/__pycache__/operations.cpython-311.pyc and /dev/null differ
diff --git a/bfos/__pycache__/runner.cpython-311.pyc b/bfos/__pycache__/runner.cpython-311.pyc
deleted file mode 100644
index 028ad85..0000000
Binary files a/bfos/__pycache__/runner.cpython-311.pyc and /dev/null differ
diff --git a/bfos/__pycache__/tui.cpython-311.pyc b/bfos/__pycache__/tui.cpython-311.pyc
deleted file mode 100644
index d20537d..0000000
Binary files a/bfos/__pycache__/tui.cpython-311.pyc and /dev/null differ
diff --git a/bfos/__pycache__/ui_gui.cpython-311.pyc b/bfos/__pycache__/ui_gui.cpython-311.pyc
deleted file mode 100644
index 8d0c760..0000000
Binary files a/bfos/__pycache__/ui_gui.cpython-311.pyc and /dev/null differ
diff --git a/bfos/cli.py b/bfos/cli.py
index de62250..a4fd668 100644
--- a/bfos/cli.py
+++ b/bfos/cli.py
@@ -62,6 +62,10 @@ def build_parser() -> argparse.ArgumentParser:
)
parser.add_argument("-h", "--help", action="help", help="bu yardımı göster ve çık")
parser.add_argument("-V", "--version", action="store_true", help="sürümü göster ve çık")
+ parser.add_argument("--gui", action="store_true",
+ help="grafik arayüzü aç (varsayılan davranış)")
+ parser.add_argument("--tui", action="store_true",
+ help="terminal konsolunu aç (grafik arayüz açılamıyorsa yedek)")
parser.add_argument("--full", action="store_true",
help="detaylı mod: tüm kategoriler ve 21 playbook görünür")
parser.add_argument("--dry-run", action="store_true",
@@ -1010,10 +1014,33 @@ def catalogue_lines() -> List[str]:
# ---------------------------------------------------------------------------
# Entry point
# ---------------------------------------------------------------------------
+def _wants_tui(args: argparse.Namespace) -> bool:
+ """Whether this invocation belongs to the terminal console.
+
+ The GUI is the default. A few flags exist only in the terminal console --
+ they print text and exit, or tune terminal rendering -- so an invocation
+ carrying one of them must stay there instead of being swallowed by the
+ router. ``--tui`` forces it explicitly.
+ """
+ if args.tui:
+ return True
+ if args.gui:
+ return False
+ # --list prints a text catalogue (the TUI's report format) and exits; it is
+ # a report, not an interactive surface, so it stays in the terminal console.
+ return bool(args.list or args.check or args.list_targets or args.no_color
+ or args.log_file != config.DEFAULT_LOG_FILE
+ or args.lang != config.DEFAULT_LANG)
+
+
def main(argv: Optional[Sequence[str]] = None) -> int:
parser = build_parser()
args = parser.parse_args(argv)
+ if args.tui and args.gui:
+ sys.stderr.write("HATA: --tui ve --gui birlikte kullanılamaz.\n")
+ return config.EXIT_USAGE
+
if args.version:
sys.stdout.write("{0} {1}\n".format(config.PROGRAM_NAME, config.VERSION))
return config.EXIT_OK
@@ -1023,6 +1050,23 @@ def main(argv: Optional[Sequence[str]] = None) -> int:
value=args.lang, supported=", ".join(config.SUPPORTED_LANGS)) + "\n")
return config.EXIT_USAGE
+ if not _wants_tui(args):
+ # Imported lazily: the GUI pulls in tkinter, and the terminal console
+ # must keep working on a device where that import is unavailable.
+ from . import ui_gui
+ gui_argv: List[str] = []
+ if args.full:
+ gui_argv.append("--full")
+ if args.dry_run:
+ gui_argv.append("--dry-run")
+ if args.repo:
+ gui_argv.extend(["--repo", args.repo])
+ if args.inventory:
+ gui_argv.extend(["--inventory", args.inventory])
+ if args.list:
+ gui_argv.append("--list")
+ return ui_gui.main(gui_argv)
+
try:
repo = resolve_repo(args.repo)
except Refused as exc:
diff --git a/bfos/config.py b/bfos/config.py
index 5e32a88..0abb313 100644
--- a/bfos/config.py
+++ b/bfos/config.py
@@ -325,6 +325,10 @@ MSG_COMMAND_TITLE = "Çalıştırılacak komut"
MSG_RUN_ASK = "Bu komut çalıştırılsın mı? [y=çalıştır / c=--check ile çalıştır / N=iptal]: "
MSG_DESTRUCTIVE_WARN = "DURUM DEĞİŞTİREN İŞLEM: {label}"
MSG_DESTRUCTIVE_SUB = "Onaylamadan önce yukarıdaki komutu okuyun; seçilen cihazları değiştirir."
+MSG_ROOT_REQUIRED = (
+ "Bu işlem BU cihazda root yetkisi gerektirir.\n"
+ "Konsolu tekrar sudo ile başlatın: sudo bf"
+)
MSG_DESTRUCTIVE_GATE = (
"Yıkıcı işlem kapısı: {label} seçilen cihazları değiştirir. "
"Bu onaydan sonra komut üretilir ve çalıştırmadan önce ayrıca sorulur."
diff --git a/bfos/runner.py b/bfos/runner.py
index 56c8c7a..4416ca6 100644
--- a/bfos/runner.py
+++ b/bfos/runner.py
@@ -276,6 +276,11 @@ class Runner:
self.audit.write(config.AUDIT_CANCEL, "operatör iptal etti :: " + command_string(argv))
return RunResult(argv=list(argv), cancelled=True)
+ # NOTE: this method does not enforce root. The terminal console gates a
+ # destructive operation earlier (App.require_root, config.MSG_ROOT_REQUIRED)
+ # and the GUI gates it at its execution choke point (ui_gui.run_plan).
+ # Enforcing here as well double-guarded the same rule and fired before
+ # the console's own message, so the operator saw the wrong explanation.
self.audit.write(config.AUDIT_RUN, command_string(final))
result = self._spawn_exit_code(final)
result.check = "--check" in final
diff --git a/bfos/ui_gui.py b/bfos/ui_gui.py
index 4fde5a0..bfc60e4 100644
--- a/bfos/ui_gui.py
+++ b/bfos/ui_gui.py
@@ -194,7 +194,10 @@ PLAYBOOK_DIR_REL = "ansible/playbooks"
MENU_REL = "admin/bf-menu"
TK_PACKAGE_HINT = "sudo apt install -y python3-tk"
-TERMINAL_MENU_HINT = "sudo bf-menu"
+# Grafik arayüz açılamadığında kullanılacak yol: aynı bfos uygulamasının
+# terminal konsolu. Bash menü (bf-menu) hâlâ yedek olarak durur ama Python
+# konsolu ana yoldur, o yüzden önce o önerilir.
+TERMINAL_MENU_HINT = "sudo bf --tui"
# ---------------------------------------------------------------------------
# tkinter -- opsiyonel ice aktarma
@@ -257,9 +260,19 @@ class Operation:
description: str = ""
playbook: str = ""
options: tuple[OptionSpec, ...] = ()
- requires_root: bool = False
+ # None means "not stated": the value is then derived from `destructive` by
+ # the property below, so a write operation cannot be marked read-only by
+ # omission. An operation that genuinely differs states the value.
+ requires_root: bool | None = None
needs_dealer: bool = False
+ @property
+ def needs_root(self) -> bool:
+ """Whether this operation must run as root to be allowed."""
+ if self.requires_root is None:
+ return bool(self.destructive)
+ return bool(self.requires_root)
+
@property
def is_fleet(self) -> bool:
return self.scope in ("simple", "wave", "release")
@@ -318,7 +331,7 @@ class CommandPlan:
commands: tuple[tuple[str, ...], ...] = ()
destructive: bool = False
- requires_root: bool = False
+ requires_root: bool | None = None
operation_id: str = ""
target_label: str = ""
notes: tuple[str, ...] = ()
@@ -326,6 +339,13 @@ class CommandPlan:
dry_run: bool = False
check_mode: bool = False
+ @property
+ def needs_root(self) -> bool:
+ """Whether running this plan requires root (derived when not stated)."""
+ if self.requires_root is None:
+ return bool(self.destructive)
+ return bool(self.requires_root)
+
@property
def lines(self) -> tuple[str, ...]:
"""Kopyala/yapistir edilebilir komut satirlari (bf-menu %q ile ayni fikir)."""
@@ -580,7 +600,7 @@ def preview_text(
parts.append(f"Hedef : {target.label}")
elif plan.target_label:
parts.append(f"Hedef : {plan.target_label}")
- if plan.requires_root:
+ if plan.needs_root:
parts.append("Yetki : root gerekir — konsolu sudo ile açın.")
if plan.check_mode:
parts.append("Kip : --check (deneme) — hiçbir değişiklik uygulanmaz.")
@@ -1073,6 +1093,12 @@ def run_plan(
for line in plan.lines:
emit(f"[deneme] {line}")
return RunResult(0, True, "[deneme] komut çalıştırılmadı.\n")
+ if plan.needs_root and not write_operations_enabled():
+ # Last line of defence: every execution path funnels through this
+ # function, so the root rule holds even if a future caller builds the
+ # plan itself instead of going through the GUI's run button.
+ emit("[ENGELLENDİ] " + NON_ROOT_DISABLED_HINT)
+ return RunResult(2, False, NON_ROOT_DISABLED_HINT + "\n")
chunks: list[str] = []
for index, argv in enumerate(plan.commands, start=1):
@@ -1411,7 +1437,7 @@ class CatalogueBackend:
return CommandPlan(
commands=(tuple(argv),),
destructive=operation.destructive,
- requires_root=operation.requires_root,
+ requires_root=operation.needs_root,
operation_id=operation.id,
target_label=target.label + (f" (dalga {wave})" if wave else ""),
notes=tuple(notes),
@@ -1654,7 +1680,7 @@ class CatalogueBackend:
return CommandPlan(
commands=tuple(commands),
destructive=operation.destructive,
- requires_root=operation.requires_root,
+ requires_root=operation.needs_root,
operation_id=operation.id,
target_label=label,
notes=tuple(notes),
@@ -1801,18 +1827,30 @@ class ModuleBackend:
category = get("category") or "Cihaz işlemleri"
if category not in CATEGORIES:
category = "Cihaz işlemleri"
- scope = get("scope") or get("declared_scope") or "simple"
+ scope = str(get("scope") or get("declared_scope") or "simple")
prompt = get("prompt") or "none"
+ destructive = bool(get("destructive") or get("is_destructive") or False)
+ # requires_root is left None unless the source actually states it, so the
+ # Operation property derives it from `destructive`. Reading the field
+ # with a False default marked every real operation read-only and the
+ # root gate never fired; the catalogue's `destructive` flag is the
+ # honest signal. An operation that states the value keeps that answer.
+ stated_root = None
+ if isinstance(item, dict):
+ if "requires_root" in item:
+ stated_root = bool(item["requires_root"])
+ elif getattr(item, "requires_root", None) is not None:
+ stated_root = bool(item.requires_root)
return Operation(
id=str(op_id),
label=str(label),
category=str(category),
- destructive=bool(get("destructive") or get("is_destructive") or False),
- scope=str(scope),
+ destructive=destructive,
+ scope=scope,
description=str(get("description") or ""),
playbook=str(get("playbook") or ""),
options=_prompt_options(str(prompt)),
- requires_root=bool(get("requires_root") or False),
+ requires_root=stated_root,
needs_dealer=bool(get("needs_dealer") or False),
)
@@ -2069,7 +2107,7 @@ class ModuleBackend:
return CommandPlan(
commands=(tuple(argv),),
destructive=operation.destructive,
- requires_root=operation.requires_root,
+ requires_root=operation.needs_root,
operation_id=operation.id,
target_label=f"cihaz {dealer_to_device_id(dealer)} ({dealer_to_host(dealer)})",
notes=tuple(notes),
@@ -2100,7 +2138,7 @@ class ModuleBackend:
return CommandPlan(
commands=(tuple(argv),),
destructive=operation.destructive,
- requires_root=operation.requires_root,
+ requires_root=operation.needs_root,
operation_id=operation.id,
target_label="bu cihaz (yerel)",
notes=tuple(notes),
@@ -2466,6 +2504,14 @@ class BfGui: # pragma: no cover - pencere gerektirir (statik testler dokunmaz)
text="DENEME KİPİ (--dry-run): komutlar gösterilir, çalıştırılmaz.",
foreground="#a05000",
).pack(anchor="w")
+ if not is_root():
+ # Söylenmezse operatör kurulumu başlatır ve yarı yolda yetki
+ # hatasıyla karşılaşır; kapı bu yüzden başlangıçta görünür.
+ ttk.Label(
+ header,
+ text=ROOT_REQUIRED_NOTICE,
+ foreground="#a05000",
+ ).pack(anchor="w")
def _build_mode_bar(self) -> None:
bar = ttk.Frame(self.root)
@@ -2866,6 +2912,14 @@ class BfGui: # pragma: no cover - pencere gerektirir (statik testler dokunmaz)
self.output.write_now("=" * 72)
def _start_run(self, plan: CommandPlan) -> None:
+ if plan.needs_root and not write_operations_enabled():
+ # The button is disabled for this case, so reaching here means the
+ # gate was bypassed (stale widget state, a future caller). Refusing
+ # in the one place every run goes through keeps the rule true for
+ # the whole surface instead of one control.
+ self.output.write_now("[ENGELLENDİ] " + NON_ROOT_DISABLED_HINT)
+ self.status.configure(text="Yönetici yetkisi gerekli.")
+ return
self.running = True
self.cancel_event.clear()
self.run_button.configure(state="disabled")
@@ -2978,6 +3032,34 @@ def print_catalogue(backend, stream=None) -> None:
)
+# ---------------------------------------------------------------------------
+# Yetki kapisi
+# ---------------------------------------------------------------------------
+def is_root() -> bool:
+ """True when the process can install, write state and drive Ansible.
+
+ The installer writes to the filesystem, manages services and applies the
+ firewall baseline, so the GUI is expected to run under sudo. Reports read
+ the repository and the inventory and work without it, which is why the
+ console still starts as a normal user and explains the difference instead
+ of refusing to launch.
+ """
+ geteuid = getattr(os, "geteuid", None)
+ return True if geteuid is None else geteuid() == 0
+
+
+ROOT_REQUIRED_NOTICE = (
+ "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"
+)
+NON_ROOT_DISABLED_HINT = "Bu işlem yönetici yetkisi gerektirir (sudo bf)."
+
+
+def write_operations_enabled() -> bool:
+ """Whether operations that change the device may be offered."""
+ return is_root()
+
+
# ---------------------------------------------------------------------------
# Baslatma
# ---------------------------------------------------------------------------
diff --git a/docs/05-ONE-CLICK-INSTALLER.md b/docs/05-ONE-CLICK-INSTALLER.md
index 839cb2d..02a41be 100644
--- a/docs/05-ONE-CLICK-INSTALLER.md
+++ b/docs/05-ONE-CLICK-INSTALLER.md
@@ -1,37 +1,40 @@
# 05 — Tek-Tık Kurucu (One-Click Installer)
-> Kısa özet: Sahada tek komutla cihazı READY yapan `blueforce-install.sh`: bayi no doğrulaması, 18 modül, idempotent yeniden-koşu ve final-check kapısı. Teknisyenin çalıştırdığı tek şeydir.
+> Kısa özet: Sahadaki tek giriş noktası **grafik operatör uygulamasıdır**: `sudo bf` → Kurulum sekmesi → "Bu cihazı kur". Bayi no doğrulaması, 18 modül, idempotent yeniden-koşu ve final-check kapısı `blueforce-install.sh`'ın işidir. Paketler git deposunda taşınır; **kurulum internetsizdir**. Terminal yedeği: `sudo bf --tui`.
- Dosya: `docs/05-ONE-CLICK-INSTALLER.md`
-- İlgili kararlar: `24-DECISION-LOG.md#K-09` (tek kurucu), `K-11` (update kapalı), `K-12` (kimlik formatı), `K-03` (bf-gui), `K-10` (Docker disiplini)
+- İlgili kararlar: `24-DECISION-LOG.md#K-09` (tek kurucu), `K-11` (update kapalı), `K-12` (kimlik formatı), `K-03` (bf-gui), `K-10` (Docker disiplini), `K-16` (offline)
+- İlgili dokümanlar: `33-OPERATOR-CONSOLE.md` (arayüz rehberi), `27-OFFLINE-PROVISIONING.md` (paket deposu sözleşmesi)
- Durum: [ ] Taslak
---
## 1. Amaç
-Saha teknisyeninin uzmanlık gerektirmeden cihazı standarda getirmesi: tek komut, tek girdi (bayi no), net sonuç (READY / hata + log yolu). Yarım kalan veya hatalı kurulumun güvenli tekrarı.
+Saha teknisyeninin uzmanlık gerektirmeden cihazı standarda getirmesi: tek giriş noktası (`sudo bf`), tek girdi (8 haneli bayi no), net sonuç (`PROVISIONED_OFFLINE` / hata + neden). Yarım kalan veya hatalı kurulumun güvenli tekrarı.
+
+Teknisyen terminal komutu, bayrak veya dosya yolu ezberlemez: kurulum grafik arayüzdeki düğmeyle başlatılır, komut arayüzde gösterilir ve onay alınmadan çalıştırılmaz.
## 2. Kapsam
-- Kapsam içi: komut arayüzü, bayi-no doğrulama, 18 modül listesi ve sırası, idempotency kuralları, log/bundle çıktısı, çıkış kodları.
-- Kapsam dışı: modül iç kodları (repo `scripts/install/`), imaj üretim yöntemi (04), filo-side yapılandırma (09).
+- Kapsam içi: grafik uygulama üzerinden kurulum akışı, kurucu betiğin komut yüzeyi, bayi-no doğrulama, 18 modül listesi ve sırası, paket deposu keşfi ve hata durumları, idempotency kuralları, log/çıkış kodları.
+- Kapsam dışı: modül iç kodları (repo `scripts/install/installer/modules/`), imaj üretim yöntemi (04), filo-side yapılandırma (09), arayüzün tüm ekranları (33).
## 3. Kararlar
```text
-KARAR: Saha kurulumu tek giriş noktasıdır: `sudo ./blueforce-install.sh --dealer-id <8hane>`; bayi no `^[0-9]{8}$` ile doğrulanır, uymayan girdi kurucuyu başlatmaz.
-GEREKÇE: Tek komut teknisyen hatasını en aza indirir; format kapısı yanlış kimliğin 9 sisteme yayılmasını baştan engeller (K-12).
-ALTERNATİF: Çok scriptli kurulum (ağ.sh, gui.sh, …) — sıra hatası ve atlanan adım riski nedeniyle elendi.
-RİSK: Tek dosya büyüdükçe bakımı zorlaşır; azaltma: 18 bağımsız modül + ana orkestratör ayrımı.
+KARAR: Saha kurulumunun tek giriş noktası grafik operatör uygulamasıdır: `sudo bf` → Kurulum sekmesi → "Bu cihazı kur". Kurucu betik (`scripts/install/blueforce-install.sh`) bu düğmenin çağırdığı motordur ve aynı akış terminalden `sudo bf --tui` ile de yürütülebilir. Eski bash menü (`admin/bf-menu`) yedek yoldur, ana yol değildir.
+GEREKÇE: Tek giriş noktası ve tek düğme teknisyen hatasını en aza indirir; grafik arayüz komutu çalıştırmadan önce gösterir ve onay ister, böylece görünmez komut kalmaz. Bayi no `^[0-9]{8}$` ile doğrulanır; format kapısı yanlış kimliğin 9 sisteme yayılmasını baştan engeller (K-12).
+ALTERNATİF: Yalnız bash menülü kurulum (`admin/bf-menu`) — grafik arayüz yoksa çalışır ama sahadaki ana yolu oluşturmaz; yedek olarak korundu. Çok scriptli kurulum (ağ.sh, gui.sh, …) — sıra hatası ve atlanan adım riski nedeniyle elendi.
+RİSK: Tek dosya büyüdükçe bakımı zorlaşır; azaltma: 18 bağımsız modül + ana orkestratör ayrımı. Grafik arayüz `python3-tk` gerektirir; azaltma: paket offline depoda pinlidir ve ekransız/paketsiz ortamda uygulama Türkçe yönlendirme yapıp `--tui` önerir.
MALİYET: Ücretsiz.
-LİSANS: Yok (şirket içi script).
+LİSANS: Yok (şirket içi script + standart kütüphane ile yazılmış Python arayüz).
```
```text
-KARAR: Kurucu 18 modülden oluşur (`01-precheck` … `18-final-check`); her modül idempotenttir — yeniden koşu güvenli ve kaldığı yerden tamamlayıcıdır.
-GEREKÇE: Saha elektriği/kesintisi yarım kurulum üretir; idempotency olmadan her kesinti temiz-kurulum demektir. Final-check kapısı (modül 18) exit 0 vermeden cihaz kurulu sayılmaz; offline akışta sonuç `PROVISIONED_OFFLINE`, token sonrası `ENROLLED`, yalnız merkezi kanallar doğrulanınca `READY` olur (27/29).
-ALTERNATİF: Tek seferlik (non-idempotent) script — kesinti durumunda belirsiz ara durum nedeniyle elendi.
+KARAR: Kurucu 18 modülden oluşur (`01-precheck` … `18-final-check`); her modül idempotenttir — yeniden koşu güvenli ve kaldığı yerden tamamlayıcıdır. Paketler yerel paket deposundan gelir ve depo otomatik bulunur; `--offline` bayrağı zorunlu değildir.
+GEREKÇE: Saha elektriği/kesintisi yarım kurulum üretir; idempotency olmadan her kesinti temiz-kurulum demektir. Final-check kapısı (modül 18) exit 0 vermeden cihaz kurulu sayılmaz; offline akışta sonuç `PROVISIONED_OFFLINE`, token sonrası `ENROLLED`, yalnız merkezi kanallar doğrulanınca `READY` olur (27/29). Depoyu kuran kişinin hatırlaması gereken bayrak sayısı sıfırdır.
+ALTERNATİF: Tek seferlik (non-idempotent) script — kesinti durumunda belirsiz ara durum nedeniyle elendi. `--offline` bayrağını zorunlu tutmak — operatör bayrağı unuttuğunda kurulum durur; bayrak geriye uyumluluk için korundu.
RİSK: Modülün idempotent yazılmaması (çift kayıt, çift key); azaltma: §10'daki çift-koşu testi her modül için zorunlu.
MALİYET: Ücretsiz.
LİSANS: Yok.
@@ -39,115 +42,203 @@ LİSANS: Yok.
## 4. Neden Bu Karar?
-700 cihaz × teknisyen başına değişen beceri = kurulumun "tek komut + tek soru" olması şarttır. 18 modül, her kararın (update-kapalı, Docker-disiplini, GUI-anahtarı, kimlik, servisler) ayrı denetlenebilir adımdır; modül numarası log satırında görünür, arıza hangi adımda kaldıysa oradan devam edilir.
+700 cihaz × teknisyen başına değişen beceri = kurulumun "tek düğme + tek soru" olması şarttır. Grafik arayüz bu düğmeyi verir; 18 modül ise her kararın (update-kapalı, Docker-disiplini, GUI-anahtarı, kimlik, servisler) ayrı denetlenebilir adımıdır. Modül numarası log satırında görünür, arıza hangi adımda kaldıysa oradan devam edilir; arayüz aynı durumu "Kurulum modül durumu" işlemiyle salt-okunur gösterir.
## 5. Alternatifler
| Alternatif | Artı | Eksi | Sonuç |
|---|---|---|---|
+| Grafik arayüz + tek kurucu betik | Tek giriş, komut ezberi yok, onay görünür | Grafik katman gerekir (`python3-tk`, ekran) | **Seçildi** |
+| Yalnız bash menülü kurulum (`admin/bf-menu`) | Grafik katman gerekmez | Ana yol olarak terminal bilgisi ister; ekran yok | Yedek yol |
| Çok scriptli kurulum | Küçük dosyalar | Sıra/atlama hatası | Elendi |
| Non-idempotent tek script | Daha basit kod | Kesintide temiz-kurulum zorunluluğu | Elendi |
| İnteraktif sihirbaz (çok sorulu) | Esnek | Teknisyen hatası, otomasyona kapalı | Elendi |
## 6. Avantajlar
-- Tek komut = eğitim maliyeti minimum, runbook tek sayfa.
+- Tek giriş noktası (`sudo bf`) = eğitim maliyeti minimum, runbook tek sayfa.
- Idempotency = kesinti korkusu yok, "bir daha koş" her sorunun ilk cevabı.
-- Final-check = READY iddiası ölçülebilir, dalga kapılarına bağlanır.
+- Final-check = kurulum sonucu ölçülebilir, dalga kapılarına bağlanır.
+- İnternetsiz çalışır: paketler repoda gelir, kuran kişi hiçbir şey indirmez.
## 7. Dezavantajlar
- 18 modülün her biri için idempotency testi yazma maliyeti.
-- Tek giriş noktası, modül-atlama (debug) ihtiyacında `--from/--only` bayraklarını zorunlu kılar.
+- Tek giriş noktası, modül-atlama (debug) ihtiyacında `--from/--only/--resume` bayraklarını zorunlu kılar.
+- Grafik arayüz `python3-tk` paketine ve bir grafik oturuma bağlıdır; bu ikisi yoksa operatör terminal konsoluna (`sudo bf --tui`) düşer.
## 8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
| Modül idempotent değil (çift kayıt) | Orta | Orta | Çift-koşu testi (§10) + code review kuralı |
-| Teknisyen yanlış no girer | Orta | Orta | Format kapısı + onay ekranı (`BF-xxxx, onaylıyor musunuz?`) |
-| Kurucu yarıda kesilir, cihaz ara durumda sahaya alınır | Düşük | Yüksek | Final-check exit 0 olmadan READY yok; `bf-status` bunu gösterir |
+| Teknisyen yanlış no girer | Orta | Orta | Format kapısı (`^[0-9]{8}$`) + onay ekranı (`BF-12010193, onaylıyor musunuz?`) |
+| Kurucu yarıda kesilir, cihaz ara durumda sahaya alınır | Düşük | Yüksek | Final-check exit 0 olmadan kurulum tamamlanmaz; arayüzdeki "Kurulum modül durumu" ve `bf-status` bunu gösterir |
+| Grafik arayüz açılmaz (başsız oturum) | Orta | Düşük | Uygulama Türkçe hata + `sudo bf --tui` önerir (19 §T-10) |
+| `python3-tk` eksik kalır | Düşük | Orta | Paket offline depoda pinli; `18-final-check` tkinter'ı denetler ve eksikse WARN yazar |
## 9. Uygulama Planı
-1. Komut arayüzü:
+### 1. Giriş noktası — grafik operatör uygulaması (ana yol)
```bash
-sudo ./blueforce-install.sh --dealer-id 12010193 [--from 07] [--only 18-final-check] [--check]
-# --check: değişiklik yapmadan denetim (final-check + modül durumları)
-# --from: belirtilen modülden devam et | --only: tek modül koş
+sudo bf # grafik arayüz (bfos paketi, bfos/ui_gui.py, Tkinter)
```
-2. Bayi-no doğrulama: `^[0-9]{8}$`; uymazsa exit 2 + kullanım mesajı. Geçerse onay ekranı (`BF-12010193` + hostname `bf-12010193` gösterilir).
-3. 18 modül (sıra sözleşmedir, yeri `scripts/install/`):
+Akış:
-| # | Modül | İşlev (dayandığı karar) |
+1. Pencere açılır: başlık **Blueforce Field OS — Yönetim**.
+2. Basit modda üç düğme vardır: `Kur`, `Durum`, `Çıkış`. Üstteki **`Detaylı mod`** ile 5 sekme açılır: `Kurulum`, `Cihaz işlemleri`, `Merkez hazırlığı`, `Araçlar`, `Cihaz bilgisi`.
+3. Üst çubuktaki **Hedef > Bayi no (8 hane)** alanına numara yazılır (örn. `12010193`); format geçersizse arayüz uyarır ve komut üretilmez.
+4. `Kurulum` sekmesinde **`Bu cihazı kur`** (veya hiçbir şey yazmayan ön kontrol **`Kurulum ön kontrolü (--check)`**) seçilir.
+5. Arayüz komutu **önce ekranda gösterir**, sonra onay ister; onaylanmadan çalıştırılmaz. Yıkıcı işlemler ikinci kez sorar; production kapsamı ayrı onay ister.
+6. Kurulum çıktısı ekranda akar; bitince sonuç ve çıkış kodu görünür.
+
+`Bu cihazı kur` işleminin iki opsiyonel seçeneği vardır: `Yerel çevrimdışı depodan kur (--offline)` ve `Zaten OK olan modülleri atla (--resume)`. **`--offline` işaretlenmese de varsayılan kaynak yerel depodur**; bayrak yalnız niyeti sabitler.
+
+### 2. Yedek yol — terminal konsolu
+
+```bash
+sudo bf --tui # aynı uygulamanın terminal arayüzü (grafik ekran yoksa / tkinter yoksa)
+```
+
+- `DISPLAY` ve `WAYLAND_DISPLAY` tanımlı değilse (SSH, başsız kurulum) uygulama Türkçe açıklama yazar ve **çıkış kodu 3** ile `sudo bf --tui` önerir.
+- `python3-tk` kurulu değilse (`tkinter` import edilemiyor) aynı şekilde Türkçe hata + `python3-tk` kurulum ipucu verir ve **çıkış kodu 3** ile terminal konsolunu önerir.
+- Eski bash menü `sudo admin/bf-menu` **yalnız yedek yoldur**; dokümanlarda ve iş akışında ana yol olarak kullanılmaz.
+
+### 3. Yetki
+
+- `sudo bf` = tam yetki (kurulum, servis, firewall, Ansible).
+- Root değilse uygulama başlangıçta uyarır ve yalnız **salt-okunur raporları** çalıştırır: "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". Yazma işlemleri hem arayüzde kapalıdır hem de çalıştırma katmanında reddedilir (onaylansa bile komut çalışmaz).
+
+### 4. Bayi-no doğrulama
+
+`^[0-9]{8}$`; uymazsa arayüz geçersiz numarayı reddeder ve kurucu komut üretilmez (doğrudan CLI kullanımında exit 2 + kullanım mesajı). Geçerliyse onay ekranında `BF-12010193` + hostname `bf-12010193` gösterilir.
+
+### 5. 18 modül (sıra sözleşmedir, yeri `scripts/install/installer/modules/`)
+
+| # | Modül | İşlev |
|---|---|---|
-| 01 | `01-precheck` | OS sürümü (26.04.1+), disk/RAM minimumu, root yetkisi, internet kontrolü |
-| 02 | `02-dealer-id` | No doğrulama + hostname `bf-` atama (K-12) |
-| 03 | `03-base-packages` | Temel paketler + `unattended-upgrades` kapatma (K-11) |
-| 04 | `04-gnome` | GNOME kurulumu (K-02) |
-| 05 | `05-xrdp` | xRDP + sesman + `bf-gui-on/off` yazımı (K-03) |
-| 06 | `06-ssh-hardening` | `blueforce` kullanıcısı, key-auth, root/password kapalı (K-13) |
-| 07 | `07-wireguard` | Spoke config, peer `bf-`, keepalive 25, `wg-quick@wg0` enable (K-05) |
-| 08 | `08-docker` | Docker CE + `unless-stopped` + log rotasyonu + localhost-bind (K-10) |
-| 09 | `09-meg` | MEG konteyneri (sabit tag, `latest` yok) (K-10) |
-| 10 | `10-rustdesk` | RustDesk istemci + VDS adresi + `BF-` etiketi (K-04) |
-| 11 | `11-meshcentral` | MeshCentral agent + `BF-` adı (K-04) |
-| 12 | `12-monitoring` | Node Exporter + textfile + Uptime Push (K-07) |
-| 13 | `13-firewall` | UFW profili (SSH/RDP yalnızca WG) (K-05) |
-| 14 | `14-inventory` | `bf-hardware-inventory.sh` koşusu, JSON+MD üretimi (02) |
-| 15 | `15-logging` | journald + Docker rotasyon + `bf-status/bf-diagnostics` (K-14) |
-| 16 | `16-boot` | multi-user default + BIOS notu + servis enable denetimi (K-03) |
-| 17 | `17-ansible-bootstrap` | Bootstrap SSH key + ilk pull/Ansible kaydı (K-06/K-13) |
-| 18 | `18-final-check` | Tüm kapılar: kimlik, servisler, update-kapalı, Docker politikası, READY damgası |
+| 01 | `01-precheck` | Root, Ubuntu sürümü, RAM/disk ön kontrolü; ağ yalnız bilgi (kapı değil) |
+| 02 | `02-system` | Temel APT kaynakları, `unattended-upgrades` kapatma, saat dilimi (K-11) |
+| 03 | `03-user` | `blueforce` bakım kullanıcısı, kısıtlı sudoers, zorunlu yönetici anahtarı (K-13) |
+| 04 | `04-hostname` | Doğrulanmış bayi no'dan hostname `bf-` (K-12) |
+| 05 | `05-network` | Ağ raporu: yerel bağlantı, rota/DNS (DNS zorunlu tutulmaz — offline kurulum) |
+| 06 | `06-wireguard` | Cihaz anahtar çifti; `wg0.conf` enrollment'ın işidir (K-05/K-17) |
+| 07 | `07-ssh` | Yönetici anahtarı doğrulandıktan **sonra** sshd sertleştirme |
+| 08 | `08-rdp` | xRDP + GNOME oturumu, terminale boot varsayılanı, multi-user (K-03/K-22) |
+| 09 | `09-rustdesk` | Yalnız pinli/sağlanan paketten RustDesk istemci (K-04) |
+| 10 | `10-docker` | Docker CE + rotasyonlu `daemon.json` + enable (K-10) |
+| 11 | `11-meg` | MEG yer tutucusu: vendor `.deb` varsa kurar, yoksa SKIP + kabul listesi |
+| 12 | `12-monitoring` | Node Exporter + textfile collector dizini (K-07) |
+| 13 | `13-firewall` | UFW deny-in tabanı + Docker yayın-portu politikasının kalıcılığı (K-05/K-10) |
+| 14 | `14-update-policy` | APT hold'ları + otomatik update zamanlayıcılarını kapatma (K-11) |
+| 15 | `15-logrotate` | journald tavanları + uygulama logrotate politikası (K-14) |
+| 16 | `16-gui` | GNOME minimal + bakım araçları; terminale boot varsayılanı (K-03) |
+| 17 | `17-healthcheck` | Teşhis ve enrollment komutlarını kurar; enrollment'ı çalıştırmaz |
+| 18 | `18-final-check` | Son yaşam döngüsü kapısı: offline yerelde tamamlanır, `READY` merkez kanıtı ister; tkinter denetimi (yoksa WARN) |
-4. Idempotency kuralları (her modül için zorunlu):
- - Varlık kontrolü önce (`id blueforce`, `dpkg -l`, `systemctl is-enabled`): varsa atla, yoksa kur.
- - Dosya yazımları atomik (tmp + rename) ve tekrarlanabilir (aynı girdi → aynı çıktı).
- - Anahtar/secret üretimi bir kez (`/var/lib/blueforce/.modül-done` damgası); `--force` olmadan yeniden üretilmez.
- - Her modül `/var/log/blueforce-install.log` dosyasına `MODÜL-NO + OK/SKIP/FAIL` satırı yazar.
-5. Çıkış kodları: `0` READY, `1` modül hatası (no logda), `2` argüman/format hatası.
+Modül çıkış kodları: `0` OK, `3` SKIP (opsiyonel adım, yapılacak bir şey yok), diğer ≠ 0 FAIL.
+
+### 6. Paket deposu — otomatik keşif, iki hata durumu, sıfır indirme
+
+Installer paket deposunu **kendi bulur**; `--offline` bayrağı **gerekmez** (geriye uyumluluk için kabul edilir, yalnız yerel depoyu zorlar). Arama sırası (ilk eksiksiz aday kazanır):
+
+1. `BF_OFFLINE_REPO` ortam değişkeni (operatör/repo sorumlusu override'ı),
+2. `/provisioning/offline-repo/built` (git deposuyla gelen paket seti),
+3. `/opt/blueforce/offline-repo` (cihaza kurulmuş paket deposu).
+
+Depo bulunduğunda ekrana Türkçe duyuru yazılır: `Yerel paket deposu bulundu: paket, ` + `Depo`, `Kaynak`, `Kip` satırları. İki farklı başarısızlık vardır ve **ikisinde de paket modüllerinden önce durulur, sistemde hiçbir değişiklik yapılmaz**:
+
+| Durum | Ekran | Sonuç |
+|---|---|---|
+| Depo hiçbir yerde yok | `HATA: Yerel paket deposu yok. Repo sorumlusuna başvurun: provisioning/offline-repo/README.md` + aranan yollar + `ÇIKIŞ NEDENİ: yerel paket deposu bulunamadı.` | exit 1 |
+| Depo bulundu ama bozuk/eksik | `OFFLINE BLOCKED: ` + Türkçe çıkış nedeni (ör. checksum uyuşmazlığı, eksik `Packages`/`packages.lock.tsv`, eksik pin) | exit 1 |
+
+Uzak APT kaynağı, `curl`, `wget`, anahtar indirme veya `apt download` çağrılmaz. Yalnız geliştirme/test için `--online` vardır ve üretim cihazlarında kullanılmaz (DİKKAT uyarısı yazar).
+
+### 7. Kurucu betiğin komut yüzeyi (yedek/otomasyon)
+
+```bash
+sudo ./scripts/install/blueforce-install.sh --dealer-id 12010193 [--from 07] [--only 18-final-check] [--resume] [--check] [--yes]
+# --check : değişiklik yapmadan denetim (final-check + modül durumları)
+# --from : belirtilen modülden devam et | --only: tek modül koş | --resume: OK modülleri atla
+# --yes : onay sormadan başla (otomasyon; GUI bu bayrağı kullanmaz)
+# --offline: yerel depoyu zorla (varsayılan zaten yerel) | --online: yalnız geliştirme/test
+```
+
+### 8. Idempotency kuralları (her modül için zorunlu)
+
+- Varlık kontrolü önce (`id blueforce`, `dpkg -l`, `systemctl is-enabled`): varsa atla, yoksa kur.
+- Dosya yazımları atomik (tmp + rename) ve tekrarlanabilir (aynı girdi → aynı çıktı).
+- Anahtar/secret üretimi bir kez; `--force` olmadan yeniden üretilmez.
+- Her modül `/var/log/blueforce-install.log` dosyasına modül no + OK/SKIP/FAIL satırı yazar.
+
+### 9. Çıkış kodları ve sonuç durumu
+
+Kurucu betik: `0` başarı (offline akışta `PROVISIONED_OFFLINE`), `1` engellendi veya modül hatası (no logda), `2` argüman/format hatası. Grafik/terminal arayüz: `3` grafik katman yok (ekran veya `python3-tk`), `2` kullanım hatası (`--tui` + `--gui` birlikte verilemez), `0` normal kapanış.
+
+`READY` bir kurucu çıkış kodu değildir: offline akış `PROVISIONED_OFFLINE` yazar, `READY` yalnız merkezi kanallar doğrulandığında (29/30) yazılır.
## 10. Test Planı
| Test | Beklenen sonuç | Ortam |
|---|---|---|
-| Geçersiz no (7/9 hane, harf, boş) | exit 2, kurulum başlamaz | LAB(2) |
+| Geçersiz no (7/9 hane, harf, boş) | Arayüz reddeder / CLI exit 2, kurulum başlamaz | LAB(2) |
+| `sudo bf` ile kurulum (grafik) | Komut önce gösterilir, onay ister, kurulum `PROVISIONED_OFFLINE` ile biter | LAB(2) masaüstü oturumu |
+| `DISPLAY` yokken `sudo bf` | Türkçe yönlendirme + `sudo bf --tui` önerisi, exit 3, sistem değişmez | LAB(2) SSH |
+| `python3-tk` yokken `sudo bf` | Türkçe "tkinter bulunamadı" + paket ipucu, exit 3 | LAB(2) minimal imaj |
| Her modülün çift-koşusu | İkinci koşu exit 0, durum değişmez (diff boş) | LAB(2) |
-| Elektrik-kesintisi simülasyonu (modül 09 ortasında kill) | `--from 09` ile tamamlanır, final exit 0 | LAB(2) |
-| `18-final-check` tüm kapıları | Eksik adımda FAIL + modül nosu, READY yok | LAB(2) |
-| `--check` kuru koşusu | Değişiklik yapmaz, rapor üretir | P1(5) |
+| Elektrik-kesintisi simülasyonu (modül 09 ortasında kill) | `--from 09` veya arayüzdeki `--resume` ile tamamlanır, final exit 0 | LAB(2) |
+| `18-final-check` tüm kapıları | Eksik adımda FAIL + modül nosu, başarı damgası yok | LAB(2) |
+| `--check` kuru koşusu (GUI ön kontrol / CLI) | Değişiklik yapmaz, rapor üretir | P1(5) |
+| Depo yokken kurulum denemesi | Türkçe hata + aranan yollar + çıkış nedeni, exit 1, sistem değişmez | LAB(2) |
+| Depo bozukken kurulum denemesi | `OFFLINE BLOCKED: ` + Türkçe çıkış nedeni, exit 1 | LAB(2) |
## 11. Rollback
-1. Modül hatası: logdaki modül nosundan `--from ` ile devam edilir.
-2. Yanlış no: doğru no ile tam yeniden koşu (idempotent, kimlik modülü üzerine yazar).
+1. Modül hatası: arayüzdeki "Kurulum modül durumu"/log ile modül nosu bulunur; `--from ` veya arayüzdeki `Başarısız kuruluma devam et (--resume)` ile sürdürülür.
+2. Yanlış no: doğru no ile tam yeniden koşu (idempotent, hostname modülü üzerine yazar).
3. Düzelmeyen cihaz: 17-RECOVERY LEVEL 9 (temiz imaj + kurucu).
+4. Paket deposu bozuksa sahada onarılmaz: repo sorumlusu depoyu yeniden üretip commit eder, güncel git tarafı çekilir ve komut tekrarlanır (27 §11).
## 12. Kontrol Listesi
-- [ ] 18 modül dosyası `scripts/install/` altında numaralı ve çalışır durumda.
-- [ ] Her modülde varlık-kontrolü + damga + log satırı var.
+- [ ] 18 modül dosyası `scripts/install/installer/modules/` altında numaralı ve çalışır durumda.
+- [ ] Grafik arayüzde `Kurulum` sekmesi ve `Bu cihazı kur` işlemi bayi-no kapısına bağlı.
+- [ ] Uygulama ekransız ortamda ve tkinter yokken Türkçe yönlendirme + `--tui` önerisi verip exit 3 ile çıkıyor.
+- [ ] Her modülde varlık-kontrolü + log satırı var.
- [ ] Format regex'i 02 ile aynı (`^[0-9]{8}$`).
-- [ ] `18-final-check` K-10/K-11 kapılarını denetliyor (unless-stopped, latest yok, update kapalı).
-- [ ] `--check/--from/--only` bayrakları çalışıyor.
+- [ ] `18-final-check` K-10/K-11 kapılarını ve tkinter denetimini içeriyor.
+- [ ] Depo keşif sırası ve iki hata durumu (yok / bozuk) ekranda Türkçe ve fail-closed.
+- [ ] `--check/--from/--only/--resume` bayrakları çalışıyor; `--offline` zorunlu değil.
## 13. Açık Sorular
-- [ ] Kurucu USB'de mi, merkezden `curl` ile mi alınacak (saha interneti varsayımı) (sahibi: Faz 3, 04 yazarı ile ortak).
+- [ ] Paket setinin sahaya taşınması: git clone (Git LFS) mı, repo sorumlusunun hazırladığı `/opt/blueforce/offline-repo` kopyası mı birincil? (sahibi: Faz 3, 04/27 yazarları ile ortak)
- [ ] MEG sabit tag'inin kim tarafından, hangi onay ile güncelleneceği (sahibi: 10-UPDATE / 12-DOCKER yazarları).
+- [ ] Arayüzün grafik ekran gerektirmeyen cihazlarda varsayılan modu (`--tui` mi, grafik mi) — saha ölçümü ile karar (sahibi: 33 + saha operasyonu).
---
-## Ek: Kurucu Akış
+## Ek: Kurulum Akışı (grafik arayüz)
```mermaid
flowchart TB
- CMD["sudo ./blueforce-install.sh
--dealer-id <8hane>"] --> FMT{"^[0-9]8$ ?"}
- FMT -->|Hayır| EXIT2["exit 2
kullanım mesajı"]
- FMT -->|Evet| M01["01-precheck … 17-bootstrap
(idempotent modüller)"]
+ CMD["sudo bf
(grafik operatör uygulaması)"] --> EKRAN{"Grafik ekran +
python3-tk var mı?"}
+ EKRAN -->|Hayır| TUI["Türkçe yönlendirme + exit 3
sudo bf --tui"]
+ EKRAN -->|Evet| HEDEF["Hedef: Bayi no (8 hane)"]
+ HEDEF --> FMT{"^[0-9]{8}$ ?"}
+ FMT -->|Hayır| UYARI["Arayüz uyarır
komut üretilmez"]
+ FMT -->|Evet| KUR["Kurulum sekmesi
'Bu cihazı kur'"]
+ KUR --> ONAY["Komut gösterilir + onay
(yıkıcı: ikinci onay)"]
+ ONAY --> DEPO{"Yerel paket deposu aranır
BF_OFFLINE_REPO → built → /opt/blueforce/offline-repo"}
+ DEPO -->|"hiçbiri yok"| YOK["Türkçe hata + aranan yollar
ÇIKIŞ NEDENİ: bulunamadı · exit 1"]
+ DEPO -->|"bozuk/eksik"| BOZ["OFFLINE BLOCKED: sebep
exit 1 · sistem değişmez"]
+ DEPO -->|"eksiksiz"| M01["01-precheck … 17-healthcheck
(idempotent modüller)"]
M01 --> M18["18-final-check"]
- M18 -->|Tümü OK| READY["READY damgası
bf-status yeşil"]
- M18 -->|FAIL| LOG["modül nosu + log yolu
--from ile devam"]
+ M18 -->|Hepsi OK| OFFLINE["PROVISIONED_OFFLINE"]
+ M18 -->|FAIL| LOG["modül nosu + log yolu
--from / --resume ile devam"]
+ OFFLINE --> ENR["Token → ENROLLED"]
+ ENR --> READY["Merkez kanalları doğrulandı → READY"]
```
diff --git a/docs/19-TROUBLESHOOTING.md b/docs/19-TROUBLESHOOTING.md
index 13c4eab..f0ec4f7 100644
--- a/docs/19-TROUBLESHOOTING.md
+++ b/docs/19-TROUBLESHOOTING.md
@@ -14,8 +14,8 @@ Tekrar eden arızalarda teşhisi hızlandırmak: belirtiyi bulan teknisyen/admin
## 2. Kapsam
-- Kapsam içi: boot, ağ/VPN, SSH, RDP/GUI, RustDesk, MeshCentral, Docker/MEG, disk, monitoring belirti tabloları.
-- Kapsam dışı: seviye kararları (17), adım-adım kurulum (20), merkez onay akışı (21).
+- Kapsam içi: boot, ağ/VPN, SSH, RDP/GUI, RustDesk, MeshCentral, Docker/MEG, disk, monitoring ve operatör arayüzü (grafik/terminal konsol, paket deposu keşfi) belirti tabloları.
+- Kapsam dışı: seviye kararları (17), adım-adım kurulum (20), merkez onay akışı (21), arayüzün tüm ekranları (33).
## 3. Kararlar
@@ -69,6 +69,14 @@ docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.RestartPolicy}}'
df -h / /var/lib/docker | cat
```
+Aynı raporlar operatör arayüzünden de okunur (komut ezberi gerekmez):
+
+```text
+Arayüzden: sudo bf → `Durum` düğmesi (Durum özeti) ya da Detaylı mod → Cihaz bilgisi sekmesi
+ (kimlik, ağ/WireGuard, kaynaklar, servisler, son journal hataları — hepsi salt-okunur)
+Komutla (yedek): sudo bf --tui → Cihaz bilgisi menüsü
+```
+
### T-1 — Cihaz açılmıyor / ekranda hiçbir şey yok
| # | Neden (olasılık sırası) | Tanı | Çözüm |
@@ -147,6 +155,29 @@ Yükseltme: WG kalkmıyorsa RustDesk/MeshCentral ile devam (17-L4); onlar de yok
| 2 | Uptime Push gelmiyor | Kuma "last seen" | Cihaz interneti + push job'ı (T-3'e dön) |
| 3 | Etiket yanlış (`BF-`) | Prometheus target etiketleri | Envanterle eşitle (02) |
+### T-10 — Grafik operatör arayüzü açılmıyor (`sudo bf` pencere açmıyor / hemen kapanıyor)
+
+| # | Neden (olasılık sırası) | Tanı | Çözüm |
+|---|---|---|---|
+| 1 | Ekran yok (SSH/başsız oturum) | Ekranda "Grafik ekran bulunamadı (DISPLAY ve WAYLAND_DISPLAY tanımlı değil)" + yönlendirme; çıkış kodu `3` | `sudo bf --tui` ile aynı işlemleri terminal konsolunda yürüt; yerel ekranda pencereli kullanmak için oturum açık bir makinede `sudo bf` |
+| 2 | `python3-tk` kurulu değil (minimal imaj) | "tkinter bulunamadı; masaüstü arayüzü başlatılamıyor" + paket ipucu; çıkış kodu `3` | Çevrimdışı sahada paket kurulmaz: paket offline depoda pinlidir (`manifests/base-packages.txt`) ve normal kurulumla gelir. Eksikse `sudo bf --tui` ile devam et ve merkeze bildir; kurulum sonu kapısı (`18-final-check`) bu durumda **WARN** yazar ve kurulumu düşürmez |
+| 3 | `DISPLAY` var ama X/Wayland erişilemiyor (ssh -X yok, oturum kilitli) | "Pencere açılamadı; grafik oturumuna erişilemiyor" + teknik ayrıntı; çıkış kodu `3` | `sudo bf --tui`; yerel oturumda çalıştırıyorsan kilitli ekranı aç veya `ssh -X` yerine yerel konsolu kullan |
+| 4 | Uygulama açıldı ama yazma işlemleri kapalı | Arayüzde "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" | Komutu `sudo` ile çalıştır; aynı işlem root olmadan çalıştırma katmanında da reddedilir |
+
+Yükseltme: pencere hiç açılmıyorsa ve `sudo bf --tui` de çalışmıyorsa (Python 3.8+ yok veya `bfos` paketi bulunamıyor) merkeze telefon aç; yedek bash menü `sudo admin/bf-menu` ana yol değildir, yalnız acil yedektir.
+
+### T-11 — "Yerel paket deposu bulunamadı" (kurulum paket adımlarına geçmiyor)
+
+| # | Neden (olasılık sırası) | Tanı | Çözüm |
+|---|---|---|---|
+| 1 | Depo cihazda hiç yok | Ekranda `HATA: Yerel paket deposu yok. Repo sorumlusuna başvurun: provisioning/offline-repo/README.md` + **aranan yollar** + `ÇIKIŞ NEDENİ: yerel paket deposu bulunamadı.`; çıkış kodu `1`, sistem değişmez | Paket setini git ile tam olarak getir (paketler Git LFS ile gelir) ya da repo sorumlusunun bıraktığı kopyayı `/opt/blueforce/offline-repo` altına koy; kurulumu tekrar çalıştır |
+| 2 | `packages/` dolu ama indeks (`built/`) yok | Aynı "depo yok" hatası: aday eksiksiz sayılmaz | Kurucu `Packages`, `Packages.gz`, `packages.lock.tsv`, `SHA256SUMS` dosyalarının **hepsini** arar; yalnız `.deb` havuzu yetmez. Repo sorumlusu `build-index.sh` ile `built/` dizinini üretip commit eder |
+| 3 | Depo bulundu ama bozuk/eksik | `OFFLINE BLOCKED: ` + Türkçe çıkış nedeni (ör. checksum doğrulaması başarısız, kilit biçimi bozuk, pinlenen paket depoda yok); çıkış kodu `1` | Sahada onarılmaz: repo sorumlusu seti `add-packages.sh` + `build-index.sh` ile yeniden üretir, güncel git tarafı çekilir ve komut tekrarlanır. Cihazda hiçbir değişiklik yapılmadı |
+| 4 | `BF_OFFLINE_REPO` yanlış | `OFFLINE BLOCKED: BF_OFFLINE_REPO mutlak bir yerel dizin olmalıdır.` | Değişkeni kaldır (varsayılan arama sırası kullanılır) veya geçerli bir mutlak dizin ver |
+| 5 | "--offline bayrağını vermedim" kuşkusu | — | Bayrak **zorunlu değil**: kurucu depoyu her durumda otomatik arar (sıra: `BF_OFFLINE_REPO` → `/provisioning/offline-repo/built` → `/opt/blueforce/offline-repo`) |
+
+Yükseltme: paket seti sahada üretilmez/onarılmaz. İki denemede de aynı hata varsa cihazda hata ayıklamayı bırak, repo sorumlusuna başvur; kurulum paket adımlarına geçmediği için cihaz yarım durumda **kalmaz** (fail-closed).
+
## 10. Test Planı
| Test | Beklenen sonuç | Ortam |
@@ -154,6 +185,9 @@ Yükseltme: WG kalkmıyorsa RustDesk/MeshCentral ile devam (17-L4); onlar de yok
| Her T girdisindeki ilk tanı komutu LAB'da çalışır | Komut + örnek çıktı bu dosyada | LAB(2) |
| WG-kill → T-3 → L4 onarım tatbikatı | < hedef sürede tünel döner | P1(5) |
| Disk-doldur simülasyonu → T-8 | Alarm + temizlik çalışır | LAB(2) |
+| `DISPLAY` yok + `python3-tk` yok senaryoları → T-10 | Her iki durumda Türkçe yönlendirme, çıkış kodu 3, `--tui` önerisi | LAB(2) |
+| Depo dizini kaldırılmış cihazda kurulum → T-11 | Türkçe hata + aranan yollar + çıkış nedeni, exit 1, sistem değişmez | LAB(2) |
+| Yalnız `packages/`, indeks yok → T-11/2 | Kurulum "depo yok" diyerek durur (fail-closed) | LAB(2) |
## 11. Rollback
@@ -165,12 +199,15 @@ Yanlış çözüm uygulandıysa 17-L3 (son değişikliği geri alma) işletilir;
- [ ] Komutların tamamı LAB 26.04.1 imajında denendi.
- [ ] Hiçbir girdide secret/şifre yazılmıyor.
- [ ] MEG'e özgü satırlar 13 ile çapraz linkli.
+- [ ] T-10/T-11 çıkış kodları (3 / 1) ve hata metinleri gerçek çıktıyla doğrulandı.
+- [ ] Arayüz yolu belirtilen her girdide "Arayüzden" + "Komutla (yedek)" satırı var.
## 13. Açık Sorular
- [ ] Kesin `bf-gui-*` birim adları + GNOME oturum satırı — LAB çıktısı (sahibi: Faz 3).
- [ ] MEG log hacmi ölçümü → T-8 eşikleri (sahibi: 12-DOCKER yazarı).
- [ ] Turkcell CGNAT tanı notları — P1 verisi (sahibi: 08-WIREGUARD yazarı).
+- [ ] `python3-tk` dışındaki grafik bağımlılıklarının da offline pinde gerekli olup olmadığı — LAB doğrulaması (sahibi: 27 + 33 yazarları).
---
@@ -178,7 +215,10 @@ Yanlış çözüm uygulandıysa 17-L3 (son değişikliği geri alma) işletilir;
```mermaid
flowchart TB
- SORUN["Arıza bildirimi
bf-status + systemctl --failed"] --> ACILIR{"Cihaz açılıyor mu?"}
+ SORUN["Arıza bildirimi
bf-status + systemctl --failed"] --> ARAC{"Sorun cihaz mı,
operatör arayüzü mü?"}
+ ARAC -->|"Arayüz açılmıyor"| T10["T-10: DISPLAY / tkinter → sudo bf --tui"]
+ ARAC -->|"Kurulum paket adımına geçmiyor"| T11["T-11: yerel paket deposu"]
+ ARAC -->|Cihaz| ACILIR{"Cihaz açılıyor mu?"}
ACILIR -->|Hayır| T1["T-1: güç / BIOS / disk"]
ACILIR -->|Evet| BOOTOK{"Servisler kalkıyor mu?"}
BOOTOK -->|Hayır| T2["T-2: failed servis / disk dolu"]
diff --git a/docs/20-FIELD-TECHNICIAN-RUNBOOK.md b/docs/20-FIELD-TECHNICIAN-RUNBOOK.md
index 21e6d3c..894440c 100644
--- a/docs/20-FIELD-TECHNICIAN-RUNBOOK.md
+++ b/docs/20-FIELD-TECHNICIAN-RUNBOOK.md
@@ -1,41 +1,43 @@
# 20 — Saha Teknisyeni Runbook
-> Kısa özet: Sahada cihaz başına giden teknisyenin el kitabı. Tek akış: USB'yi tak → kur → bayi numarasını gir → READY'yi gör → çık. Komut ezberi istenmez; her adımda "ne göreceksin, ne yazacaksın" vardır.
+> Kısa özet: Sahada cihaz başına giden teknisyenin el kitabı. Tek akış: USB'yi tak → Ubuntu'yu kur → `sudo bf` → bayi numarasını gir → sonucu gör. Komut ezberi istenmez: kurulum, durum ve destek paketi grafik arayüzdeki düğmelerle yapılır; her adımda "ne göreceksin, ne yazacaksın" vardır.
- Dosya: `docs/20-FIELD-TECHNICIAN-RUNBOOK.md`
-- İlgili kararlar: `24-DECISION-LOG.md#K-09` (USB → script → bayi no → READY), `#K-12` (bayi no → `BF-`), `#K-14` (`bf-status`, support-bundle)
+- İlgili kararlar: `24-DECISION-LOG.md#K-09` (USB → kurucu → bayi no), `#K-12` (bayi no → `BF-`), `#K-14` (`bf-status`, support-bundle), `#K-16` (offline kurulum)
+- İlgili dokümanlar: `33-OPERATOR-CONSOLE.md` (arayüz rehberi), `27-OFFLINE-PROVISIONING.md` (paket deposu)
- Durum: [ ] Taslak
---
## 1. Amaç
-Teknisyenin sahada tek başına, telefonsuz bile cihazı READY hale getirmesi. Bu dosya "neden" anlatmaz, "ne yap" söyler. Neden merak eden 01'e bakar.
+Teknisyenin sahada tek başına, telefonsuz bile cihazı teslim edilebilir hale getirmesi. Bu dosya "neden" anlatmaz, "ne yap" söyler. Neden merak eden 01'e bakar.
## 2. Kapsam
-- Kapsam içi: USB ile sıfır kurulum, bayi no girişi, READY kontrolü, arızalı cihazda ilk 3 hareket, merkeze ne zaman telefon açılacağı.
+- Kapsam içi: USB ile sıfır kurulum, grafik arayüzü açma, bayi no girişi, kurulum sonucunu doğrulama, arızalı cihazda ilk 3 hareket, merkeze ne zaman telefon açılacağı.
- Kapsam dışı: merkez onayları (21), arıza teşhis tablosu detayı (19 — sadece yönlendirme), update dalgaları (10).
## 3. Kararlar
```text
-KARAR: Teknisyen akışı 4 adımdır: USB → kur → bayi no → READY. Teknisyen hostname, IP, anahtar, config dosyası ile uğraşmaz; hepsini `blueforce-install.sh` yapar.
-GEREKÇE: K-09'un hedef akışı; insan hatası en çok elle config'de olur. Teknisyenin tek manuel girdisi 8 haneli bayi numarasıdır (K-12).
-ALTERNATİF: Teknisyene tam Linux eğitimi + manuel kurulum — 700 cihazda standardizasyon bozulur; elendi.
-RİSK: Script USB'si eski sürüm kalır; azaltma: USB etiketinde sürüm + merkezden "şu sürümden eski USB'yi kullanma" duyurusu.
+KARAR: Teknisyen akışı 4 adımdır: USB → Ubuntu kur → `sudo bf` ile kurulum (bayi no) → sonucu gör. Grafik arayüz tek giriş noktasıdır; terminal konsolu (`sudo bf --tui`) yalnız grafik ekran veya tkinter yoksa kullanılan yedektir. Teknisyen hostname, IP, anahtar, paket yolu veya config dosyası ile uğraşmaz; paketler depoyla gelir ve kurulumda internet gerekmez.
+GEREKÇE: K-09/K-16'nın hedef akışı; insan hatası en çok elle config ve ezberlenen komutta olur. Teknisyenin tek manuel girdisi 8 haneli bayi numarasıdır (K-12).
+ALTERNATİF: Teknisyene tam Linux eğitimi + manuel kurulum — 700 cihazda standardizasyon bozulur; elendi. Yalnız bash menülü kurulum — grafik arayüz varken gereksiz terminal bilgisi ister; yedek yol olarak korundu.
+RİSK: Depo kopyası eski sürüm kalır; azaltma: repo sürüm etiketi + merkezden "şu sürümden eski kopyayı kullanma" duyurusu.
MALİYET: Ücretsiz.
LİSANS: Yok.
```
## 4. Neden Bu Karar?
-Teknisyenin işi "bilgisayarcılık" değil "bayi cihazını çalışır teslim etmek"tir. Karar, teknisyenin dikkatini tek kritik noktaya toplar: bayi numarasını doğru girmek. Geri kalan her şey script + merkez otomasyonudur. Bu yüzden bu dosya kısa cümlelerle, emir kipiyle yazılır.
+Teknisyenin işi "bilgisayarcılık" değil "bayi cihazını çalışır teslim etmek"tir. Karar, teknisyenin dikkatini tek kritik noktaya toplar: bayi numarasını doğru girmek. Geri kalan her şey uygulama + merkez otomasyonudur. Bu yüzden bu dosya kısa cümlelerle, emir kipiyle yazılır.
## 5. Alternatifler
| Alternatif | Artı | Eksi | Sonuç |
|---|---|---|---|
+| Grafik arayüz (`sudo bf`) | Tek düğme, komut ezberi yok, onay görünür | Grafik katman gerekir | **Seçildi** |
| Detaylı Linux kılavuzu | Bilgili teknisyen | Uzun, hata açık, herkes okumaz | Elendi |
| Merkezden uzaktan kurulum (teknisyensiz) | Saha maliyeti yok | İlk kurulumda cihazda internet/VPN yok | Elendi (ilk kurulum sahada) |
@@ -43,19 +45,21 @@ Teknisyenin işi "bilgisayarcılık" değil "bayi cihazını çalışır teslim
- Yeni teknisyen 1 saatlik eğitimle sahaya çıkar.
- Her cihaz aynı adımla kurulur; "ustalık farkı" kapanır.
+- Kurulum internetsiz çalışır: paket seti depodan gelir, hiçbir şey indirilmez.
## 7. Dezavantajlar
-- Script'in yapmadığını teknisyen de yapamaz; olağandışı durumda merkeze bağımlıdır (bilerek böyle).
-- USB medyası fiziksel lojistik ister (sürüm takibi).
+- Uygulamanın yapmadığını teknisyen de yapamaz; olağandışı durumda merkeze bağımlıdır (bilerek böyle).
+- Depo kopyası (paket setiyle birlikte ~888 MB) fiziksel/lojistik takip ister.
## 8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
-| Bayi no yanlış girilir | Orta | Yüksek | Script ekranda `BF-`'yu gösterir, teknisyen bayiye onaylatır |
-| Eski USB ile kurulum | Orta | Orta | USB sürüm etiketi + kurucu açılışta sürümü söyler |
-| READY görülmeden sahadan çıkılır | Düşük | Yüksek | Kontrol listesi imzalanmadan iş kapanmaz |
+| Bayi no yanlış girilir | Orta | Yüksek | Arayüz `BF-`'yu gösterir, teknisyen bayiye onaylatır |
+| Eski depo kopyası ile kurulum | Orta | Orta | Repo sürüm etiketi + kurucu başlangıçta depoyu ve paket sayısını söyler |
+| Grafik arayüz açılmaz (ekran/tkinter) | Orta | Orta | `sudo bf --tui` yedeği; sorun merkeze bildirilir |
+| Sonuç görülmeden sahadan çıkılır | Düşük | Yüksek | Kontrol listesi imzalanmadan iş kapanmaz |
## 9. Uygulama Planı
@@ -69,82 +73,109 @@ Teknisyenin işi "bilgisayarcılık" değil "bayi cihazını çalışır teslim
> Göreceğin: Ubuntu kurulum ekranı. Bunu görmüyorsan: USB tam takılı mı, BIOS boot sırası USB mi? Olmazsa merkeze telefon aç.
-**ADIM 2 — Ubuntu'yu kur.**
+**ADIM 2 — Ubuntu'yu kur ve depo kopyasını getir.**
1. Ekrandaki kurulumu varsayılanlarla tamamla (dil: Türkçe, disk: tamamını kullan).
2. Kurulum bitince USB'yi çıkarma, bilgisayarı yeniden başlat.
+3. Repo kopyasını cihaza getir (merkezin söylediği yolla: `git clone` — paketler Git LFS ile birlikte gelir — veya hazır kopya `/opt/blueforce/offline-repo` altına konur).
-**ADIM 3 — Kurucu scripti çalıştır, bayi numarasını gir.**
+> Paketler repoyla birlikte gelir; **internetten hiçbir şey indirilmez**.
+
+**ADIM 3 — Grafik arayüzü aç, bayi numarasını gir, kurulumu başlat.**
1. Terminali aç, şunu yaz:
```bash
-sudo ./blueforce-install.sh
+sudo bf
```
-2. Script senden **8 haneli bayi numarasını** ister. Faturadaki/sistemdeki numarayı yaz, Enter'a bas. Örnek: `12010193`.
-3. Script ekranda şunu gösterecek:
+2. Pencere açılır: başlık **Blueforce Field OS — Yönetim**. (Ekran yoksa veya tkinter yoksa uygulama Türkçe uyarı verir; o zaman `sudo bf --tui` yaz — §D.)
+3. Üst çubuktaki **Hedef > Bayi no (8 hane)** alanına **8 haneli bayi numarasını** yaz. Faturadaki/sistemdeki numarayı kullan. Örnek: `12010193`.
+4. **Kurulum** sekmesi → **`Bu cihazı kur`**.
+5. Arayüz komutu ekranda gösterir ve onay ister. `BF-12010193` görünüyor mu? Doğruysa onayla; yanlışsa iptal et ve numarayı düzelt.
```text
-Device ID: BF-12010193
-Hostname: bf-12010193
+Arayüzden: sudo bf → Hedef: Bayi no (8 hane) → Kurulum → "Bu cihazı kur"
+Komutla (yedek):
+ sudo bf --tui # terminal konsolu; Kurulum menüsünden aynı akış
+ sudo ./scripts/install/blueforce-install.sh --dealer-id 12010193
```
-4. Numarayı bayiye sesli onaylat: "Cihaz numaranız BF-12010193, doğru mu?" Yanlışsa scriptten çık, tekrar çalıştır.
+6. Numarayı bayiye sesli onaylat: "Cihaz numaranız BF-12010193, doğru mu?"
-**ADIM 4 — READY'yi gör, çık.**
+**ADIM 4 — Sonucu gör, çık.**
-1. Script bitene kadar bekle (kapatma, fişi çekme).
-2. Sonunda şunu çalıştır:
+1. Kurulum bitene kadar bekle (kapatma, fişi çekme). Cihazın açık kalması şart.
+2. Sonucu gör:
-```bash
-bf-status
+```text
+Arayüzden: `Durum` düğmesi (basit mod) → Durum özeti ya da Kurulum sekmesi → "Kurulum modül durumu"
+Komutla (yedek): bf-status
```
-3. Offline medya ile kurulumda önce **PROVISIONED_OFFLINE** görmen normaldir; bu durumda cihaz READY değildir. İnternet geldiğinde merkezden tek-kullanımlık enrollment token iste ve 29'daki adımı uygula.
-4. Token sonrası **ENROLLED** görünür; WireGuard, remote ve monitoring merkezi doğrulaması bitince **READY** görmelisin.
-5. READY sonrası kontrol listesini doldur (§12), sahadan çık.
+3. **`PROVISIONED_OFFLINE`** görmen normaldir: kurulum yerelde tamamlandı, cihaz internetsiz kuruldu. Bu durumda cihaz `READY` değildir.
+4. İnternet geldiğinde merkezden tek-kullanımlık enrollment token iste ve 29'daki adımı uygula.
+5. Token sonrası **ENROLLED** görünür; WireGuard, remote ve monitoring merkezi doğrulaması bitince **READY** görürsün.
+6. READY sonrası kontrol listesini doldur (§12), sahadan çık.
### B. Arızalı cihaza gittin — ilk 3 hareket
-1. `bf-status` çalıştır. Kırmızı satır hangisi? Not al.
-2. Bilgisayarı bir kez yeniden başlat. Düzelirse READY'yi gör, çık.
-3. Düzelmezse support paketini al, merkeze gönder:
+1. Durumu oku:
-```bash
-bf-support-bundle --out /tmp/bf--bundle.tar.gz
+```text
+Arayüzden: sudo bf → `Durum` düğmesi (Durum özeti)
+Komutla (yedek): bf-status
+```
+
+Kırmızı satır hangisi? Not al.
+2. Bilgisayarı bir kez yeniden başlat. Düzelirse READY'yi gör, çık.
+3. Düzelmezse destek paketini al, merkeze gönder:
+
+```text
+Arayüzden: sudo bf → Detaylı mod → Araçlar sekmesi → "Destek paketi oluştur"
+Komutla (yedek): bf-support-bundle --out /tmp/bf--bundle.tar.gz
```
Paketi merkeze ilet (telefonla nasıl göndereceğin söylenir), merkez sana söylemeden başka komut çalıştırma.
### C. Merkeze telefon açma kuralları
-Hemen ara: READY alamıyorsan, aynı arıza 2 cihazda üst üste çıktıysa, donanım kırık/yanık kokusu varsa, bayi numarasından emin değilsen.
-Arama: cihaz başında ol, `BF-`'yu ve `bf-status` çıktısını hazır tut.
+Hemen ara: sonucu alamıyorsan, aynı arıza 2 cihazda üst üste çıktıysa, donanım kırık/yanık kokusu varsa, bayi numarasından emin değilsen.
+Arama: cihaz başında ol, `BF-`'yu ve durum özetini/`bf-status` çıktısını hazır tut.
+
+### D. Grafik arayüz açılmıyor — yedek yol
+
+| Belirti | Ne yap |
+|---|---|
+| "Grafik ekran bulunamadı" / SSH oturumu | `sudo bf --tui` yaz; aynı işlemler terminal menüsünde numaralarla yürür |
+| "tkinter bulunamadı" | `sudo bf --tui` ile devam et ve merkeze bildir; `python3-tk` paketi kurulum depounda pinlidir (19 §T-10) |
+| Pencere açıldı ama dondu | Pencereyi kapat, `sudo bf --tui` ile devam et, merkeze bildir |
## 10. Test Planı
| Test | Beklenen sonuç | Ortam |
|---|---|---|
-| Sıfır teknisyen 4 adımı desteksiz yapar | READY < hedef süre | LAB(2) |
-| Yanlış bayi no girilir | Script uyarır, kuruluma devam etmez | LAB(2) |
-| Elektrik kesintisi simülasyonu sonrası `bf-status` | READY döner | LAB(2) |
+| Sıfır teknisyen 4 adımı desteksiz yapar | Hedef teslim durumu < hedef süre | LAB(2) |
+| Yanlış bayi no girilir | Uygulama uyarır, komut üretilmez/çalışmaz | LAB(2) |
+| Ekransız oturumda `sudo bf` | Türkçe yönlendirme + `sudo bf --tui` önerisi, exit 3 | LAB(2) |
+| Depo kopyası olmayan cihazda kurulum | Türkçe hata + aranan yollar + çıkış nedeni, sistem değişmez | LAB(2) |
+| Elektrik kesintisi simülasyonu sonrası durum | Kurulum kaldığı yerden tamamlanır; durum doğru raporlanır | LAB(2) |
## 11. Rollback
-Teknisyen rollback yapmaz. Kurulum yarıda kesildiyse: baştan başla (ADIM 1). İkinci denemede de olmazsa merkeze telefon aç — merkez 17-RECOVERY'den seviyeyi seçer.
+Teknisyen rollback yapmaz. Kurulum yarıda kesildiyse: `sudo bf` → Kurulum sekmesi → **`Başarısız kuruluma devam et (--resume)`** (komutla yedek: aynı kurucu `--resume` bayrağıyla). İkinci denemede de olmazsa merkeze telefon aç — merkez 17-RECOVERY'den seviyeyi seçer.
## 12. Kontrol Listesi
-- [ ] USB sürümü güncel (etiket + merkez duyurusu eşleşiyor).
+- [ ] Depo kopyası/checkout sürümü güncel (etiket + merkez duyurusu eşleşiyor).
- [ ] `BF-` bayiye onaylatıldı.
-- [ ] `bf-status` → READY görüldü.
+- [ ] Kurulum sonucu görüldü (`PROVISIONED_OFFLINE` normaldir; READY için §A/ADIM 4-5).
- [ ] Cihaz fişe + internete bağlı bırakıldı.
- [ ] İş formu dolduruldu (bayi no, tarih, teknisyen adı).
## 13. Açık Sorular
-- [ ] Kurulum USB'sinin dağıtım/sürüm takip yöntemi (sahibi: merkezi admin, 21).
+- [ ] Depo kopyasının sahaya taşınma/sürüm takip yöntemi (git clone + LFS mı, hazır kopya mı) (sahibi: merkezi admin, 21).
- [ ] İş formu kağıt mı mobil mi (sahibi: 25-ROADMAP).
- [ ] Hedef kurulum süresi (öneri: P2'de ölçülecek).
@@ -155,11 +186,15 @@ Teknisyen rollback yapmaz. Kurulum yarıda kesildiyse: baştan başla (ADIM 1).
```mermaid
flowchart TB
USB["USB tak → aç"] --> KUR["Ubuntu kur"]
- KUR --> SCR["sudo ./blueforce-install.sh"]
- SCR --> NO["Bayi no gir
(8 hane)"]
- NO --> ONAY["BF-no'yu bayiye onaylat"]
- ONAY --> BEKLE["Script bitsin"]
- BEKLE --> READY["bf-status → READY?"]
- READY -->|evet| CIK["Formu doldur → çık"]
- READY -->|hayır| TEL["Merkeze telefon aç"]
+ KUR --> DEPO["Depo kopyasını getir
(paketler LFS ile gelir, indirme yok)"]
+ DEPO --> BF["sudo bf"]
+ BF --> EKRAN{"Grafik ekran +
python3-tk var mı?"}
+ EKRAN -->|Hayır| TUI["sudo bf --tui
(yedek terminal konsolu)"]
+ EKRAN -->|Evet| NO["Hedef: Bayi no (8 hane)"]
+ TUI --> NO
+ NO --> ONAY["Arayüz komutu gösterir + onay
BF-no'yu bayiye onaylat"]
+ ONAY --> BEKLE["Kurulum bitsin
(kapatma / fişi çekme)"]
+ BEKLE --> DURUM["Durum: PROVISIONED_OFFLINE / ENROLLED / READY"]
+ DURUM -->|"READY"| CIK["Formu doldur → çık"]
+ DURUM -->|"sorun var"| TEL["Destek paketi + merkeze telefon aç"]
```
diff --git a/docs/21-CENTRAL-ADMIN-RUNBOOK.md b/docs/21-CENTRAL-ADMIN-RUNBOOK.md
index 3819e1d..6e74c9a 100644
--- a/docs/21-CENTRAL-ADMIN-RUNBOOK.md
+++ b/docs/21-CENTRAL-ADMIN-RUNBOOK.md
@@ -1,27 +1,28 @@
# 21 — Merkezi Yönetici Runbook
-> Kısa özet: Merkezdeki yöneticinin el kitabı: hangi işlemi kim onaylar, update'i kim başlatır, dalga kapıları nasıl açılır, teknisyen ne zaman sahaya sürülür. Yetki ve sıra bu dosyadadır.
+> Kısa özet: Merkezdeki yöneticinin el kitabı: hangi işlemi kim onaylar, update'i kim başlatır, dalga kapıları nasıl açılır, teknisyen ne zaman sahaya sürülür. Yetki ve sıra bu dosyadadır. Filo işlemleri grafik arayüzden (`sudo bf` → `Cihaz işlemleri`) yürütülür; komut satırı karşılıkları yedek/otomasyon yoludur.
- Dosya: `docs/21-CENTRAL-ADMIN-RUNBOOK.md`
- İlgili kararlar: `24-DECISION-LOG.md#K-06` (Ansible/Semaphore), `#K-11` (onay zinciri + dalgalar), `#K-13` (anahtar dağıtımı)
+- İlgili dokümanlar: `33-OPERATOR-CONSOLE.md` (arayüz rehberi), `10-UPDATE-AND-ROLLBACK-POLICY.md` (dalga politikası), `20-FIELD-TECHNICIAN-RUNBOOK.md` (saha)
- Durum: [ ] Taslak
---
## 1. Amaç
-Merkezde "kim, neyi, hangi sırayla yapar" sorusunu kapatmak. Update'i kim başlatır, dalgayı kim onaylar, acil durumda kim karar verir — hepsi burada yazar, kriz anında aranmaz.
+Merkezde "kim, neyi, hangi sırayla yapar" sorusunu kapatmak. Update'i kim başlatır, dalgayı kim onaylar, acil durumda kim karar verir — hepsi burada yazar, kriz anında aranmaz. İşlemler tek arayüzde toplanır: `sudo bf` (grafik) veya `sudo bf --tui` (yedek terminal konsolu).
## 2. Kapsam
-- Kapsam içi: rol ve onay yetkileri, update başlatma akışı, dalga kapı prosedürü, anahtar/erişim yönetimi, acil durum yetkisi, günlük/haftalık rutinler.
-- Kapsam dışı: tek cihaz kurulum adımları (20), komut-seviyesi teşhis (19), kurtarma seviye tablosu (17 — buradan çağrılır).
+- Kapsam içi: rol ve onay yetkileri, update başlatma akışı, dalga kapı prosedürü, arayüz üzerinden filo işlemi yürütme, anahtar/erişim yönetimi, acil durum yetkisi, günlük/haftalık rutinler.
+- Kapsam dışı: tek cihaz kurulum adımları (20), komut-seviyesi teşhis (19), kurtarma seviye tablosu (17 — buradan çağrılır), merkez sunucusunun kurulumu (arayüzde yalnız "Merkez hazırlığı" denetimleri vardır).
## 3. Kararlar
```text
-KARAR: Update'i yalnızca merkezi yönetici başlatır; teknisyen, bayi veya otomatik zamanlayıcı update tetikleyemez. Her dalga geçişi açık onay (Semaphore kapı adımı + kayıt) gerektirir.
-GEREKÇE: K-11 "onaysız update yasak" ilkesinin operasyonel karşılığıdır; tek başlatma noktası = denetlenebilirlik. Otomatik tetikleyici olmaması, zamanlanmış sürprizleri engeller.
+KARAR: Update'i yalnızca merkezi yönetici başlatır; teknisyen, bayi veya otomatik zamanlayıcı update tetikleyemez. Her dalga geçişi açık onay gerektirir: arayüzden çalıştırıldığında "production" yazma adımı + production ek onayı, gündelik/sürüm kapsamlı işlemlerde kapı sözcüğü; Semaphore iş akışı kullanılıyorsa kapı adımı Semaphore'dadır.
+GEREKÇE: K-11 "onaysız update yasak" ilkesinin operasyonel karşılığıdır; tek başlatma noktası = denetlenebilirlik. Otomatik tetikleyici olmaması, zamanlanmış sürprizleri engeller. Onay olmadan komut üretilmez: arayüz komutu önce gösterir, kapı adımını geçmeyen çağrıda bayrağı kendiliğinden eklemez.
ALTERNATİF: Takvimli otomatik dalga başlatma — onay kaydı zayıflar, arızada "kim başlattı" belirsizleşir; elendi.
RİSK: Yönetici izindeyken update kilitlenir; azaltma: en az 2 onay yetkilisi tanımlanır (asıl + vekil).
MALİYET: Ücretsiz.
@@ -39,7 +40,7 @@ LİSANS: Yok.
## 4. Neden Bu Karar?
-700 cihazda en tehlikeli cümle "ben başlattım sandım"dır. Başlatma yetkisini tek role toplamak, hem hatayı hem suçu önler: hata olursa kayıttan bulunur, suçlama olursa kayıt konuşur. Vekil kuralı, tek kişiye bağımlılığı kaldırır.
+700 cihazda en tehlikeli cümle "ben başlattım sandım"dır. Başlatma yetkisini tek role toplamak, hem hatayı hem suçu önler: hata olursa kayıttan bulunur, suçlama olursa kayıt konuşur. Vekil kuralı, tek kişiye bağımlılığı kaldırır. Arayüz bu disiplini görünür kılar: dalga kapsamlı her işlemde komut, bayraklarıyla birlikte ekranda gösterilir, production dalgası için `production` yazılmadan komut çalışmaz; her karar `/var/log/blueforce-console.log` (mod `600`) dosyasına düşer.
## 5. Alternatifler
@@ -48,24 +49,28 @@ LİSANS: Yok.
| Herkes update başlatabilir | Hızlı | Onaysız yayılım, denetimsizlik | Elendi |
| Tam otomatik pipeline | Eforsuz | Politika ihlali (K-11) | Elendi |
| Tek onay yetkilisi | Net | İzin/hastalıkta kilit | Elendi (asıl+vekil) |
+| Yalnız serbest `ansible-playbook` komutu | Esnek | Kapı bayrakları elle yazılır, atlanabilir | Elendi (arayüz kapıyı bayrakla bağlar) |
## 6. Avantajlar
-- Her update'in "kim başlattı, kim onayladı, ne zaman" kaydı vardır.
+- Her update'in "kim başlattı, kim onayladı, ne zaman" kaydı vardır (konsol denetim günlüğü).
- Acil durumda bile sıra korunur; hız, sıranın içinde ayarlanır.
+- Hedef seçimi tek yerden yapılır: tek cihaz (bayi no), dalga grubu (lab, pilot_1, pilot_2, wave_1, wave_2, production) veya tüm filo.
## 7. Dezavantajlar
- Onay adımı update'i yavaşlatır (bilerek; hız 25-ROADMAP'ta acil yoluyla dengelenir).
-- Semaphore kapı adımı atlanırsa politika kağıtta kalır — teknik zorunluluk şarttır.
+- Kapı adımı atlanırsa (serbest CLI ile run) politika kağıtta kalır — teknik zorunluluk şarttır.
+- Arayüz grafik katman gerektirir; merkez sunucusunda yoksa `sudo bf --tui` kullanılır.
## 8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
-| Kapı adımı bypass edilir (CLI'dan direkt run) | Orta | Yüksek | Semaphore dışı prod run'ı yasaktır; denetim logu izlenir |
+| Kapı adımı bypass edilir (arayüz dışı CLI run) | Orta | Yüksek | Semaphore/arayüz dışı prod run yasaktır; denetim günlüğü izlenir |
| İki yetkili de ulaşılamaz | Düşük | Orta | Acil iletişim zinciri + önceden tanımlı duraklatma (devam etme, durdur) |
| Anahtar sızıntısı | Düşük | Yüksek | Per-admin anahtar iptali + rotasyon (K-13) |
+| Yanlış hedefe işlem (grup/tüm filo) | Orta | Yüksek | Hedef arayüzde tek tek seçilir; `--limit` komutta görünür, onay istenir |
## 9. Uygulama Planı
@@ -81,16 +86,34 @@ LİSANS: Yok.
### Standart update akışı (yönetici gözüyle)
1. Update talebi gelir (güvenlik bülteni / MEG sürümü / OS yaması) → etki + geri alma planı raporlanır.
-2. Onay yetkilisi LAB'ı başlatır: Semaphore'da job + kayıt.
+2. Onay yetkilisi LAB'ı başlatır: Semaphore'da job + kayıt (veya arayüzden dalga işlemi).
3. LAB çıkış kriteri tuttuysa P1 → P2 → W1 → W2 → PROD, her kapıda açık onay.
4. Herhangi bir dalgada halt kuralı (18) tetiklenirse: yayılım DURUR, 17-L3 işletilir, kök neden bulunmadan kapı açılmaz.
5. PROD bitiminde kapanış kaydı (başarı/arıza sayısı, süre).
-```bash
-# örnek: onaylı dalga run (operatör, onay sonrası)
-ansible-playbook playbooks/update.yml --limit wave_p1
-# örnek: kapı kontrolü — onaysız PROD engeli (ilke; teknik karşılığı Semaphore'da)
-# PROD limiti yalnızca "prod-onay" etiketli job ile koşar
+```text
+Arayüzden (merkez operatörü):
+ sudo bf → Detaylı mod → Cihaz işlemleri sekmesi
+ → işlemi seç (örn. "Kontrollü yeniden başlatma" / "Onaylı paket güncellemesi")
+ → Hedef: dalga grubu (lab, pilot_1, pilot_2, wave_1, wave_2, production)
+ → kapı adımı: production için 'production' yazmak ZORUNLU
+ → komut ekranda gösterilir → onay → çalışır
+
+Komutla (yedek / otomasyon):
+ ansible-playbook -i ansible/inventory/... ansible/playbooks/bf-reboot.yml \
+ --limit wave_p1 -e operation_wave=wave_1 -e operation_confirmed=true
+# production_override / allow_production_reboot yalnız production ek onayıyla eklenir.
+# Kapı kuralı: önceki dalga sağlık kapısını geçmediyse çalıştırılmaz (10).
+```
+
+Planlama/denetim komutlarının arayüz karşılıkları:
+
+```text
+Arayüzden: sudo bf → Merkez hazırlığı sekmesi
+ (envanter hedefleri ve dalga/cihaz sayıları, PLACEHOLDER denetimi,
+ merkez uç noktaları, hazırlık kontrol listesi — hepsi salt-okunur)
+Komutla (yedek): sudo bf --tui → Merkez hazırlığı menüsü
+ admin/bf-menu --list-targets # yedek bash menüsü
```
### Anahtar ve erişim yönetimi
@@ -101,34 +124,39 @@ ansible-playbook playbooks/update.yml --limit wave_p1
### Günlük / haftalık rutinler
-- Günlük (operatör, 10 dk): Uptime Kuma UP/DOWN, Prometheus `up` == 0 listesi, gece reboot olanlar, yedek job durumu.
+- Günlük (operatör, 10 dk): Uptime Kuma UP/DOWN, Prometheus `up` == 0 listesi, gece reboot olanlar, yedek job durumu. Cihaz durumu için arayüzden `Durum` düğmesi ya da `Cihaz işlemleri > Kurulum fazı raporu`.
- Haftalık (yönetici, 30 dk): dalga takvimi, açık halt'lar, anahtar/envanter uyumsuzlukları, `PROVISIONED_OFFLINE`/`ENROLLED` bekleyen cihaz kuyruğu, release manifest/rollback kanıtı ve L9 tatbikat sayacı (27/29/30).
## 10. Test Planı
| Test | Beklenen sonuç | Ortam |
|---|---|---|
-| Onaysız PROD run denemesi | Engellenir + log düşer | Merkez test |
+| Onaysız PROD run denemesi | Engellenir (`production` yazılmadan komut çalışmaz) + denetim günlüğüne yazılır | Merkez test |
| Semaphore kapalıyken Ansible CLI run | Onaylı iş CLI'dan koşar (K-06) | LAB(2) |
| Vekil ile dalga onayı | Kayıtta vekil adı görünür | Merkez test |
+| Arayüzden dalga hedefi seçimi | Komutta doğru `--limit` görünür, yanlış hedefte komut üretilmez | Merkez test |
+| Grafik arayüz yokken yönetim işlemleri | `sudo bf --tui` ile aynı işlemler yürütülür | LAB(2) SSH |
## 11. Rollback
1. Hatalı dalga: 17-L3 + 10-UPDATE rollback zinciri; kapı bir sonraki dalgaya kapatılır.
2. Hatalı onay: aynı yetkili (veya vekil) durdurma kararı verir; "devam" kararı verilemez, yalnızca "dur + geri al".
+3. Arayüzden başlatılan yanlış kapsamlı işlem: komut ekranda ve denetim günlüğünde hedefiyle kayıtlıdır; kapsam bu kayıttan doğrulanıp geri alma adımı planlanır.
## 12. Kontrol Listesi
- [ ] Asıl + vekil isimle tanımlı ve iletişim bilgileri güncel.
-- [ ] Semaphore'da PROD kapı adımı teknik olarak zorunlu.
-- [ ] Her dalga onayı kayıtlı (kim, ne zaman, hangi sürüm).
+- [ ] Semaphore'da PROD kapı adımı teknik olarak zorunlu; arayüzde production için 'production' yazma adımı çalışıyor.
+- [ ] Her dalga onayı kayıtlı (kim, ne zaman, hangi sürüm) — `/var/log/blueforce-console.log` mod `600`.
- [ ] Ayrılan personelin anahtarı kaldırıldı.
+- [ ] Merkez operatörleri grafik arayüzü (`sudo bf`) ve yedek terminal konsolunu (`sudo bf --tui`) biliyor.
## 13. Açık Sorular
- [ ] Acil tanımı eşikleri (CVSS/aktif sömürü) — 10-UPDATE ile ortak onay (sahibi: yönetici).
- [ ] Kapanış raporu formatı ve saklama süresi (sahibi: 25-ROADMAP).
- [ ] Read-only yönetim panosu kapsamı (sahibi: 14-MONITORING yazarı).
+- [ ] Arayüzün merkez sunucusunda (`sudo bf --tui` mi, grafik mi) varsayılan kullanımı (sahibi: 33 + merkez ekibi).
---
@@ -139,7 +167,10 @@ flowchart TB
TALEP["Update talebi
(güvenlik / MEG / OS)"] --> KAYIT["Değişiklik kaydı
kapsam + geri alma planı"]
KAYIT --> ONAY{"Onay yetkilisi
(asıl veya vekil)"}
ONAY -->|Ret| KAPANIR["Kapanış kaydı (ret)"]
- ONAY -->|Onay| LAB["LAB(2) → P1(5) → P2(20)"]
+ ONAY -->|Onay| UI["sudo bf → Cihaz işlemleri
hedef: dalga grubu"]
+ UI --> KAPI0{"Kapı adımı
production ise 'production' yaz"}
+ KAPI0 -->|Geçmedi| DUR0["Komut çalışmaz
(denetim günlüğü: CANCEL)"]
+ KAPI0 -->|Geçti| LAB["LAB(2) → P1(5) → P2(20)"]
LAB --> KAPI{"Sağlık kapısı temiz mi?"}
KAPI -->|Halt| DUR["Yayılım DURUR → 17-L3 rollback"]
KAPI -->|Temiz| WAVE["W1(50) → W2(100) → PROD(~523)"]
diff --git a/docs/27-OFFLINE-PROVISIONING.md b/docs/27-OFFLINE-PROVISIONING.md
index e110334..112f012 100644
--- a/docs/27-OFFLINE-PROVISIONING.md
+++ b/docs/27-OFFLINE-PROVISIONING.md
@@ -1,83 +1,102 @@
# 27 — Offline Provisioning
-> Kısa özet: İnternet yokken Field OS kurulumu ve yerel paket yüklemesi yapılabilir. Bu yol yalnız `PROVISIONED_OFFLINE` durumuna getirir; cihaz, tek kullanımlık enrollment token ve merkezi kanallar doğrulanmadan `ENROLLED` veya `READY` olmaz.
+> Kısa özet: Paketler **git deposunun içindedir** (`provisioning/offline-repo/packages/`, 1321 `.deb`, ~888 MB, Git LFS ile takip edilir). Saha kurulumu internet **gerektirmez** ve kuran kişi **hiçbir şey indirmez**: `sudo bf` → Kurulum sekmesi → "Bu cihazı kur" → 8 haneli bayi no → onay. Bu yol yalnız `PROVISIONED_OFFLINE` durumuna getirir; cihaz, tek kullanımlık enrollment token ve merkezi kanallar doğrulanmadan `ENROLLED` veya `READY` olmaz.
>
> - Dosya: `docs/27-OFFLINE-PROVISIONING.md`
>
-> **Uygulama sözleşmesi:** Kurucu, paket setini **kendi kendine bulur** ve varsayılan olarak yerel depodan kurar; `--offline` bayrağı artık **gerekmez** (geriye uyumluluk için kabul edilir, yalnız yerel depoyu zorlar). Arama sırası: (1) `BF_OFFLINE_REPO` ortam değişkeni, (2) `/provisioning/offline-repo/built`, (3) `/opt/blueforce/offline-repo`; ilk eksiksiz aday kazanır. Yerel `file:` APT kaynağı dışında hiçbir kaynak kullanılmaz: uzak APT source, curl, wget, anahtar indirme veya `apt download` çağrılmaz. **İnternet kurulum için gerekmez.** İki farklı başarısızlık vardır: depo hiç yoksa kurulum Türkçe bir hata ve `ÇIKIŞ NEDENİ: yerel paket deposu bulunamadı.` ile durur; depo bulunup da doğrulanamazsa (eksik `Packages`, `Packages.gz`, `packages.lock.tsv`, `SHA256SUMS`; checksum uyuşmazlığı; boş/bozuk kilit; eksik pin) `OFFLINE BLOCKED: ` ile durur. Her iki durumda da paket modüllerinden önce durulur, kurulum başlamaz ve sistemde hiçbir değişiklik yapılmaz. Paketler bu git deposunda taşınır ve **repo sorumlusu** tarafından `add-packages.sh` + `build-index.sh` ile bu depoya konur; kuran kişi hiçbir şey indirmez. Yalnız geliştirme/test için `--online` vardır ve **üretim cihazlarında kullanılmaz**.
+> **Uygulama sözleşmesi:** Kurucu, paket setini **kendi kendine bulur** ve varsayılan olarak yerel depodan kurar; `--offline` bayrağı artık **gerekmez** (geriye uyumluluk için kabul edilir, yalnız yerel depoyu zorlar). Arama sırası: (1) `BF_OFFLINE_REPO` ortam değişkeni, (2) `/provisioning/offline-repo/built`, (3) `/opt/blueforce/offline-repo`; ilk eksiksiz aday kazanır. Yerel `file:` APT kaynağı dışında hiçbir kaynak kullanılmaz: uzak APT source, curl, wget, anahtar indirme veya `apt download` çağrılmaz. **İnternet kurulum için gerekmez.** İki farklı başarısızlık vardır: depo hiç yoksa kurulum Türkçe bir hata, aranan yollar ve `ÇIKIŞ NEDENİ: yerel paket deposu bulunamadı.` ile durur; depo bulunup da doğrulanamazsa (eksik `Packages`, `Packages.gz`, `packages.lock.tsv`, `SHA256SUMS`; checksum uyuşmazlığı; boş/bozuk kilit; eksik pin) `OFFLINE BLOCKED: ` ile durur. Her iki durumda da paket modüllerinden önce durulur, kurulum başlamaz ve sistemde hiçbir değişiklik yapılmaz. Paketler bu git deposunda taşınır ve **repo sorumlusu** tarafından `add-packages.sh` + `build-index.sh` ile bu depoya konur; kuran kişi hiçbir şey indirmez. Yalnız geliştirme/test için `--online` vardır ve **üretim cihazlarında kullanılmaz**. Grafik arayüz `python3-tk` paketine bağlıdır; bu paket offline depoda bilinçli olarak pinlidir (`manifests/base-packages.txt`).
> - İlgili kararlar: `24-DECISION-LOG.md#K-16`, `#K-09`, `#K-11`, `#K-12`
+> - İlgili dokümanlar: `05-ONE-CLICK-INSTALLER.md` (kurucu), `33-OPERATOR-CONSOLE.md` (arayüz), `provisioning/offline-repo/README.md` (paket hazırlama)
> - Durum: [ ] Taslak
---
## 1. Amaç
-Saha interneti kesik veya güvenilmezken tekrarlanabilir, denetlenebilir ve secretsiz ilk kurulumu tanımlamak.
+Saha interneti kesik veya güvenilmezken tekrarlanabilir, denetlenebilir ve secretsiz ilk kurulumu tanımlamak. Kuran kişi paket aramaz, indirmez, bayrak ezberlemez: paket seti depoyla birlikte gelir.
## 2. Kapsam
-- Kapsam içi: seed USB veya git checkout, offline APT repository/snapshot, kurucunun yerel depoyu otomatik bulması, durum damgası ve sonradan enrollment.
-- Kapsam dışı: merkezi peer atama ve token doğrulama (29), release imzalama (30).
+- Kapsam içi: git checkout (paketler dahil) veya kurulmuş `/opt/blueforce/offline-repo`, offline APT bundle (`built/`), kurucunun yerel depoyu otomatik bulması, iki hata durumu, grafik arayüz üzerinden kurulum, `python3-tk` pini, durum damgası ve sonradan enrollment.
+- Kapsam dışı: merkezi peer atama ve token doğrulama (29), release imzalama (30), paket setinin nasıl üretildiği (repo sorumlusunun işi, `provisioning/offline-repo/README.md`).
## 3. Kararlar
```text
-KARAR: Offline kurulum, imzalı/sürümlü medya ya da git checkout ve ayrı offline APT kaynağıyla yapılır; paket seti kurucu tarafından otomatik bulunur ve sonuç durumu yalnızca PROVISIONED_OFFLINE'dır.
-GEREKÇE: Paket indirme veya merkezi API'ye erişim yokken cihaz standarda getirilebilir; fakat merkezde doğrulanmamış kimlik ve kanallar READY iddiası yapamaz. Operatörün hatırlaması gereken bayrak sayısı azaldıkça saha hatası azalır: yerel depo varsayılan kaynaktır.
+KARAR: Paket seti git deposunda taşınır ve cihaz grafik arayüzden (`sudo bf` → Kurulum → "Bu cihazı kur") internetsiz kurulur; paket deposu kurucu tarafından otomatik bulunur ve sonuç durumu yalnızca PROVISIONED_OFFLINE'dır.
+GEREKÇE: Paket indirme veya merkezi API'ye erişim yokken cihaz standarda getirilebilir; fakat merkezde doğrulanmamış kimlik ve kanallar READY iddiası yapamaz. Kuran kişinin indirme yapmaması ve bayrak hatırlamaması saha hatasını ortadan kaldırır: yerel depo varsayılan ve tek kaynaktır.
ALTERNATİF: İnternet gelene kadar kurulum yapmama — saha ziyareti ve bekleme maliyeti nedeniyle elendi. Kurulumu `--offline` bayrağına bağlamak — operatör bayrağı unuttuğunda kurulum durur; otomatik keşif seçildi, bayrak geriye uyumluluk için korundu.
-RİSK: Eski veya karışık paket snapshot'ı; manifest, checksum ve release kimliği ile azaltılır. Yanlış/eski depo bulunması; arama sırası ve her adayda eksiksizlik denetimi ile azaltılır.
-MALİYET: Ücretsiz.
+RİSK: Eski veya karışık paket snapshot'ı; manifest, checksum ve release kimliği ile azaltılır. Yanlış/eski depo bulunması; arama sırası ve her adayda eksiksizlik denetimi ile azaltılır. Grafik arayüzün `python3-tk` paketine bağımlılığı; paketin offline depoda pinlenmesi ve eksikliğinde `sudo bf --tui` yedeği ile azaltılır.
+MALİYET: Ücretsiz (depo boyutu git tarafında ~888 MB).
LİSANS: APT — https://manpages.ubuntu.com/manpages/noble/en/man8/apt.8.html ; dpkg — https://manpages.ubuntu.com/manpages/noble/en/man1/dpkg.1.html ; Ubuntu offline kurulum ayrıntısı 26.04 için LAB doğrulamalıdır.
```
## 4. Neden Bu Karar?
-Offline medya ve git deposu, işletim sistemi ve zorunlu paketleri taşır; merkezi sırları taşımamalıdır. Durum makinesi, "kuruldu" ile "merkezce güvenildi" arasındaki farkı görünür yapar. Paket setini **repo sorumlusu** hazırlayıp sürümlediği için sahada "hangi paket nereden geldi?" sorusu `packages.lock.tsv` ve `repo-manifest.yaml` ile yanıtlanır; kuran kişi paket aramaz ve indirmez.
+**Paketler artık ayrı bir medyada değil, bu git deposunda taşınır:** `provisioning/offline-repo/packages/` altında 1321 `.deb` (~888 MB) durur ve `.gitattributes` ile **Git LFS** üzerinden takip edilir (`*.deb filter=lfs ...`). Bu yüzden sahada "hangi paket nereden geldi?" sorusu ne internete ne de dış medyaya bağlıdır; aynı soru `packages.lock.tsv` ve `repo-manifest.yaml` ile yanıtlanır. Kuran kişi paket aramaz ve **indirmez**; klonladığı depo seti zaten taşır.
+
+Durum makinesi, "kuruldu" ile "merkezce güvenildi" arasındaki farkı görünür yapar: offline kurulum yalnız `PROVISIONED_OFFLINE` üretir.
## 5. Alternatifler
| Alternatif | Artı | Eksi | Sonuç |
|---|---|---|---|
-| Sürümlü offline APT repo | Tekrarlanabilir | Medya yönetimi | **Seçildi** |
+| Sürümlü offline APT bundle + repoda taşınan paketler | Tekrarlanabilir, indirme yok, medya lojistiği yok | Git deposu ~888 MB büyür (LFS) | **Seçildi** |
+| Ayrı fiziksel seed USB medyası | Depo küçük kalır | Medya zimmeti/sürüm takibi, kaybolma riski | Yedek/geri dönüş yolu |
| Rastgele `.deb` dosyaları | İlk anda kolay | Bağımlılık/sürüm belirsiz | Elendi |
| İnternet bekleme | Basit | Saha blokajı | Elendi |
| Yerel depoyu operatörün `--offline` bayrağıyla göstermesi | Basit | Bayrak unutulunca kurulum durur, saha hatası üretir | Elendi (bayrak geriye uyumluluk için korundu) |
## 6. Avantajlar
-- Bağlantısız sahada standarda yakın kurulum.
-- Paket manifesti ile hangi sürümün yüklendiği kanıtlanır.
-- Kurulum yapan kişi **hiçbir indirme yapmaz** ve bayrak ezberlemez: paketler zaten deponun içindedir, kurucu depoyu kendisi bulur.
+- Bağlantısız sahada standarda yakın kurulum; **kuran kişi hiçbir indirme yapmaz** ve bayrak ezberlemez.
+- Paket manifesti ve kilit dosyası ile hangi sürümün yüklendiği kanıtlanır.
+- Nesil farkı yoktur: repo sorumlusu paketleri bir kez commit eder, 700 cihaz aynı setten kurulur.
+- Kurulum akışı grafik arayüzde tek düğmedir; terminal bilgisi gerekmez.
## 7. Dezavantajlar
-- Medya sürümü ve paket snapshot'ı düzenli yenilenmelidir.
+- Git deposu paket setiyle birlikte büyür (LFS clone/pull maliyeti); derin clone sahada zaman alabilir.
- Offline cihaz merkezi izleme ve erişim kanalları doğrulanana kadar operasyonel olarak hazır değildir.
+- Paket snapshot'ı yenilenmediği sürece güvenlik güncellemeleri geride kalır (onaysız update zaten yasak, K-11).
## 8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
-| Eski güvenlik paketi | Orta | Orta | Süre sonu olan release medyası, hızlı enrollment kuyruğu |
-| Secret USB'ye yazılır | Düşük | Yüksek | Secret taraması; token yalnız bir kez ve cihazda girilir |
+| Eski güvenlik paketi | Orta | Orta | Süre sonu olan release medyası/repo sürümü, hızlı enrollment kuyruğu |
+| Secret repoda kalır | Düşük | Yüksek | Secret taraması (test), token yalnız bir kez ve cihazda girilir |
| Yarım paket işlemi | Orta | Orta | `dpkg --configure -a`, idempotent kurucu |
-| Kurucu yanlış/eski depoyu bulur | Düşük | Orta | Arama sırası sabittir; aday eksiksiz değilse kullanılmaz, en son `BF_OFFLINE_REPO` ile açıkça yönlendirilebilir |
+| Kurucu yanlış/eski depoyu bulur | Düşük | Orta | Arama sırası sabittir; aday eksiksiz değilse kullanılmaz, `BF_OFFLINE_REPO` ile açıkça yönlendirilebilir |
+| Paketler var ama indeks (`built/`) yok | Orta | Yüksek | Kurucu fail-closed durur ("yerel paket deposu yok"); repo sorumlusu `build-index.sh` koşup `built/` dizinini commit eder |
+| Grafik arayüz açılamıyor | Orta | Düşük | `python3-tk` offline depoda pinli; ekransız ortamda `sudo bf --tui` |
## 9. Uygulama Planı
-1. Medya manifesti: Field OS release, ISO checksum, seed checksum, offline APT snapshot kimliği, kurucu commit'i.
-2. Paket setini **repo sorumlusu** hazırlar: `.deb` dosyalarını `add-packages.sh` ile depoya koyar, `build-index.sh` ile `provisioning/offline-repo/built` indeksini üretir, `packages.lock.tsv` / `SHA256SUMS` / `repo-manifest.yaml` ile birlikte commit eder. Kuran kişi yalnız git tarafını çeker.
+1. Medya/repo manifesti: Field OS release, ISO checksum, offline APT snapshot kimliği, kurucu commit'i.
+2. Paket setini **repo sorumlusu** hazırlar: `.deb` dosyalarını `add-packages.sh` ile `provisioning/offline-repo/packages/` altına koyar (Git LFS), pinleri `manifests/*.txt` içinde `package=version` olarak doldurur, `build-index.sh` ile `provisioning/offline-repo/built/` indeksini (`Packages`, `Packages.gz`, `packages.lock.tsv`, `SHA256SUMS`, `pool/`) üretir. Kuran kişi yalnız git tarafını çeker.
3. Kurulumda yalnız genel paketler kullanılır; kurucu yerel depoyu **otomatik bulur** ve `--offline` gerekmez.
4. Kurucu yerel durum dosyasına `PROVISIONED_OFFLINE` yazar; `READY` yazması yasaktır.
5. İnternet geldiğinde 29'daki tek-kullanımlık token ile enrollment başlatılır; sonra merkezi kanallar test edilir.
-Kuran kişinin komutu (bayrak yok, tek zorunlu bilgi bayi numarası):
+### Kuran kişinin akışı (grafik arayüz — ana yol)
+
+1. Depoyu getir: `git clone ` (paketler Git LFS ile gelir) — veya repo sorumlusunun bıraktığı kopyada `/opt/blueforce/offline-repo` hazırdır.
+2. `sudo bf` — pencere açılır: **Blueforce Field OS — Yönetim**.
+3. Üst çubuk **Hedef > Bayi no (8 hane)** alanına numarayı yaz (örn. `12010193`).
+4. **Kurulum** sekmesi → **`Bu cihazı kur`** (hiçbir şey yazmayan ön kontrol için: `Kurulum ön kontrolü (--check)`).
+5. Komut ekranda gösterilir, onay istenir; onaylandıktan sonra kurulum çalışır. `--offline` işaretlemek **zorunlu değildir** (varsayılan kaynak zaten yerel depodur).
+6. Sonuç: `PROVISIONED_OFFLINE`. Arayüzdeki **Kurulum modül durumu** ve `bf-status` ile doğrulanır.
```bash
-# Konsoldan (önerilen): Python operatör konsolu; bash yedek yolu sudo bf-menu
+# Ana yol (grafik arayüz)
sudo bf
+# → Hedef: Bayi no (8 hane) → Kurulum sekmesi → "Bu cihazı kur"
-# Doğrudan kurucu ile
+# Yedek yol (grafik ekran yoksa veya python3-tk yoksa): aynı uygulamanın terminal arayüzü
+sudo bf --tui
+
+# Doğrudan kurucu ile (otomasyon / teşhis)
sudo ./scripts/install/blueforce-install.sh --dealer-id 12010193
# Bilinçli olarak başka bir depo dizinini göstermek (nadir, repo sorumlusu isterse)
@@ -85,6 +104,10 @@ BF_OFFLINE_REPO=/mnt/blueforce-repo/built \
sudo ./scripts/install/blueforce-install.sh --dealer-id 12010193
```
+### Depo keşfi ve iki hata durumu
+
+Sıra (ilk eksiksiz aday kazanır): `BF_OFFLINE_REPO` → `/provisioning/offline-repo/built` → `/opt/blueforce/offline-repo`. Bir aday "eksiksiz" sayılmak için `Packages`, `Packages.gz`, `packages.lock.tsv` ve `SHA256SUMS` dosyalarının hepsini içermelidir; yalnız `packages/` (ham `.deb` havuzu) yeterli **değildir** — indeksin `build-index.sh` ile üretilmiş olması gerekir.
+
Depo bulunduğunda ekranda şu duyuru çıkar:
```text
@@ -98,7 +121,16 @@ Depo hiçbir yerde yoksa kurulum başlamadan durur:
```text
HATA: Yerel paket deposu yok. Repo sorumlusuna başvurun: provisioning/offline-repo/README.md
-...
+
+Aranan yerler:
+ - depodaki hazır paket seti — yok: /provisioning/offline-repo/built
+ - cihazdaki kurulu paket deposu — yok: /opt/blueforce/offline-repo
+
+Ne yapmalı:
+ 1) Paket setini git ile tam olarak getirin ... ya da /opt/blueforce/offline-repo altına koyun.
+ 2) Kurulumu yeniden çalıştırın.
+
+Kuruluma hiç başlanmadı; sistemde hiçbir değişiklik yapılmadı.
ÇIKIŞ NEDENİ: yerel paket deposu bulunamadı.
```
@@ -114,15 +146,22 @@ OFFLINE BLOCKED:
`--online` yalnız geliştirme/test makinesi içindir; paketleri internetten çeker ve üretim cihazlarında kullanılmaz.
+### `python3-tk` neden offline depoda pinli?
+
+Grafik operatör uygulaması Tkinter ile yazılmıştır ve tkinter Ubuntu'da **ayrı bir pakettir** (`python3-tk`); minimal Ubuntu Server kurulumunda Python vardır ama tkinter yoktur. İnternetsiz sahada `apt install python3-tk` **çalışmaz**, bu yüzden paket ve bağımlılık kümesi (`python3-tk`, `python3.14-tk`, `libtk8.6`) `provisioning/offline-repo/manifests/base-packages.txt` içinde pinlidir ve depodan gelir. Kurulum sonu kapısı `scripts/install/installer/modules/18-final-check.sh` tkinter'ı denetler; eksikse **WARN** yazar ve kurulumu düşürmez (cihaz yine kurulur, operatör terminal konsoluna `sudo bf --tui` ile devam eder).
+
## 10. Test Planı
| Test | Beklenen sonuç | Ortam |
|---|---|---|
| İnternetsiz kurulum | Paketler manifestten kurulur, dış indirme yok | LAB(2) air-gapped |
| Depo yolu verilmeden kurulum | Kurucu depoyu otomatik bulur (`repo/built`), duyuru satırını yazar | LAB(2) |
+| Grafik arayüzden kurulum | `sudo bf` → Kurulum → "Bu cihazı kur" ile `PROVISIONED_OFFLINE` | LAB(2) masaüstü oturumu |
| `BF_OFFLINE_REPO` ile başka dizin | Verilen dizin kullanılır; geçersizse durur | LAB(2) |
-| Depo hiç yok | Türkçe hata + `ÇIKIŞ NEDENİ: yerel paket deposu bulunamadı.`, exit 1, sistem değişmez | LAB(2) |
+| Depo hiç yok | Türkçe hata + aranan yollar + `ÇIKIŞ NEDENİ: yerel paket deposu bulunamadı.`, exit 1, sistem değişmez | LAB(2) |
| Depo var ama bozuk (checksum/pin) | `OFFLINE BLOCKED: ` + Türkçe çıkış nedeni, exit 1, sistem değişmez | LAB(2) |
+| Yalnız `packages/` var, `built/` yok | Depo "yok" sayılır, kurulum başlamaz (fail-closed) | LAB(2) |
+| `python3-tk` eksik imaj | `sudo bf` Türkçe hata + ipucu, exit 3; `18-final-check` WARN yazar, kurulum düşmez | LAB(2) |
| DNS/WAN kesik | Kurucu dış indirme istemez; `01-precheck` ağı yalnız bilgi olarak yazar, `05-network` DNS zorunlu tutmaz | LAB(2) |
| `--online` üretimde denenmez | Yalnız geliştirme/test; kurucu uyarı yazar | LAB(2) |
| `bf-status` | `PROVISIONED_OFFLINE`; READY değil | LAB(2) |
@@ -131,26 +170,29 @@ OFFLINE BLOCKED:
## 11. Rollback
1. Paket işlemi bozuksa aynı onaylı snapshot ile `dpkg --configure -a` ve kurucu yeniden çalıştırılır.
-2. Yanlış medya sürümü geri çekilir; önceki onaylı medya manifestiyle yeniden kurulur.
+2. Yanlış repo sürümü geri çekilir; önceki onaylı manifestle yeniden kurulur.
3. Yerel depo bozuksa sahada onarılmaz: repo sorumlusu depoyu yeniden üretip commit eder (`add-packages.sh` + `build-index.sh`), kurulum yapan kişi güncel git tarafını çekip komutu tekrarlar.
4. Kimlik/token hatasında cihaz resetlenmez; 29'daki token iptal/yenileme prosedürü uygulanır.
+5. Arayüz sorunuysa (ekran/tkinter) rollback gerekmez: `sudo bf --tui` ile aynı akış yürütülür.
## 12. Kontrol Listesi
-- [ ] Offline medya/git manifesti ve checksum'ları var.
-- [ ] Paket seti repoda: `provisioning/offline-repo/built` (`Packages`, `Packages.gz`, `packages.lock.tsv`, `SHA256SUMS`, `pool/`).
+- [ ] Paket seti repoda: `provisioning/offline-repo/packages/` (1321 `.deb`, Git LFS ile takip ediliyor).
+- [ ] Bundle indeksi repoda: `provisioning/offline-repo/built/` (`Packages`, `Packages.gz`, `packages.lock.tsv`, `SHA256SUMS`, `pool/`).
- [ ] `repo-manifest.yaml` güncel; pin listesi ile paket havuzu uyuşuyor.
-- [ ] Medyada/depoda cihaz kimliği, private key veya kalıcı token yok.
+- [ ] Depoda/repoda cihaz kimliği, private key veya kalıcı token yok.
+- [ ] `python3-tk` ve bağımlılıkları `manifests/base-packages.txt` içinde pinli; `18-final-check` tkinter'ı denetliyor.
- [ ] Kuran kişinin komutu `--offline` bayrağı istemiyor; depo otomatik bulunuyor.
+- [ ] Grafik arayüz akışı (bayi no → Kurulum → "Bu cihazı kur") yazılı ve ekransız ortam için `sudo bf --tui` belgeli.
- [ ] İnternet kapalıyken kurulum tamamlanıyor; dış indirme çağrısı yok.
- [ ] `PROVISIONED_OFFLINE` görünür ve READY kapısı kapalı.
- [ ] Sonradan enrollment sahibi/kuyruğu kayıtlı.
## 13. Açık Sorular
-- [ ] Offline APT snapshot yenileme sıklığı — sahibi: release yöneticisi.
-- [ ] Medyanın fiziksel zimmet ve imha süreci — sahibi: saha operasyonu.
-- [ ] Git checkout ile ISO/medya yolundan hangisinin birincil olduğu ve `--online` geliştirme yolunun hangi ortamlarda serbest olduğu — sahibi: yönetim + 26/33 yazarları.
+- [ ] Offline paket seti yenileme sıklığı ve Git LFS bant genişliği/kotaysa sahaya taşıma yöntemi — sahibi: release yöneticisi.
+- [ ] Paketlerin sahaya taşınmasında git clone mu, hazır `/opt/blueforce/offline-repo` kopyası mı birincil — sahibi: saha operasyonu + 05 yazarı.
+- [ ] `--online` geliştirme yolunun hangi ortamlarda serbest olduğu — sahibi: yönetim + 26/33 yazarları.
---
@@ -158,8 +200,9 @@ OFFLINE BLOCKED:
```mermaid
flowchart LR
- M["ISO/seed veya git checkout
+ repodaki offline APT"] --> D{"Kurucu yerel depoyu arar
BF_OFFLINE_REPO → repo/built → /opt/blueforce/offline-repo"}
- D -->|"hiçbiri yok / eksik"| X["HATA: Yerel paket deposu yok
ÇIKIŞ NEDENİ: bulunamadı · exit 1
sistem değişmez"]
+ M["git checkout (paketler LFS ile)
veya /opt/blueforce/offline-repo"] --> G["sudo bf → Kurulum → 'Bu cihazı kur'"]
+ G --> D{"Kurucu yerel depoyu arar
BF_OFFLINE_REPO → repo/built → /opt/blueforce/offline-repo"}
+ D -->|"hiçbiri yok / eksik"| X["HATA: Yerel paket deposu yok
aranan yollar + ÇIKIŞ NEDENİ · exit 1
sistem değişmez"]
D -->|"eksiksiz aday bulundu"| V{"Doğrulama katmanı:
dosya listesi, SHA256SUMS, kilit, pin ↔ pool"}
V -->|"başarısız"| B["OFFLINE BLOCKED: sebep
ÇIKIŞ NEDENİ: doğrulanamadı · exit 1"]
V -->|"geçti"| P["PROVISIONED_OFFLINE"]
diff --git a/docs/33-OPERATOR-CONSOLE.md b/docs/33-OPERATOR-CONSOLE.md
index 760a435..cb1416a 100644
--- a/docs/33-OPERATOR-CONSOLE.md
+++ b/docs/33-OPERATOR-CONSOLE.md
@@ -1,95 +1,162 @@
-# 33 — Operatör Konsolu Rehberi (`bf-menu`)
+# 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-menu` **kategori menüsü** ile cihazı işletmesini adım adım anlatır. Kurulum, filo işlemleri, merkez hazırlığı, araçlar ve cihaz bilgisi ekranlarının tamamı bu menüden açılır; komut ezberlemek gerekmez.
+> 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: `admin/bf-menu` (+ `admin/lib/tui.sh`, `admin/lib/targets.sh`), `admin/bf-bootstrap.sh`, `admin/bf-creds`
-- Durum: [ ] Taslak — ekran çıktıları **örnektir (taklit)** ve LAB'da alınan gerçek çıktıyla güncellenir
+- Uygulama: Python paketi `bfos` (depo kökü) — `bfos/ui_gui.py` (grafik arayüz, tkinter), `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 menü ekranları ve çıktılar, tasarımı anlatmak için yazılmış **örnek ekranlardır**; terminal genişliğine, renklerin kapalı olmasına ve envanter içeriğine göre birebir farklı görünebilir. Gerçek çıktılar ilk LAB koşusunda bu dosyaya işlenir (§10, §13).
+> **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-menu`, cihaza `sudo bf-menu` yazınca açılan, numaralarla gezilen bir **operatör konsoludur**. Ekranda 5 kategori çıkar (Kurulum, Cihaz işlemleri, Merkez hazırlığı, Araçlar, Cihaz bilgisi); bir numara yazıp Enter'a basarsın, konsol senin adına doğru komutu çalıştırır ve ne yaptığını Türkçe/İngilizce satırlarla gösterir.
+**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-menu` bunları numaralı başlıklar altında toplar, **çalıştırmadan önce komutu ekranda gösterip onay ister**, tehlikeli işlemlerde iki kez sorar ve her işlemi bir denetim log'una (`/var/log/blueforce-console.log`, mod `600`) yazar. Kısacası: ezberleyeceğin tek şey `sudo bf-menu` komutudur.
+**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), ana menü ve 5 kategori, tek cihaz/grup/tüm filo hedef seçimi, uçtan uca örnek seans, şifre dosyası (`bf-creds`) davranışı, en sık 5 hata ve güvenlik kuralları.
-- Kapsam dışı: ISO/firstboot/offline provisioning yolu (26, 27 — artık **ikincil/opsiyonel**), merkez sunucularının kurulumu (07, 09 — konsol yalnız **hazırlar ve denetler**, kurmaz), update onay zincirinin merkez tarafı (10, 21), rol bazlı eğitim müfredatı (31).
+- 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
```text
-KARAR: Cihaz ve filo işlemlerinin tek operatör giriş noktası `sudo bf-menu` kategori menüsüdür; operatör komut ezberlemez, numaralı kategoriden 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). Konsol 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: Operatörün dokümandan komut kopyalaması — sıra atlama ve yanlış hedef seçme riski yüksek; elendi. Yalnız merkez Semaphore UI — saha cihazında çevrimdışıyken erişilemez; merkez tarafı için korunur (09).
-RİSK: Konsolun tablosu, altındaki playbook'tan ayrışır ve yanlış kapıyla çalıştırır; azaltma: konsol her playbook'un kapsamını (simple/wave/release) playbook'un kendisinden okuyup karşılaştırır, uyuşmazlıkta **çalıştırmayı reddeder** (`admin/bf-menu` → `bf_playbook_check`).
+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ı).
```
```text
-KARAR: Kurulum git deposundan yapılır: depo klonlanır ve `sudo admin/bf-bootstrap.sh` (veya `curl -fsSL /admin/bf-bootstrap.sh | sudo bash`) çalıştırılır. 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ı (git, curl, ansible-core) kurar ve `bf-*` araçlarını `/usr/local/bin`'e bağlar; cihaz kimliği (bayi no) hiçbir zaman bir imaja gömülmez (K-09/K-12).
-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.
+KARAR: Kurulum git deposundan yapılır: depo klonlanır ve `sudo admin/bf-bootstrap.sh`
+ (veya `curl -fsSL /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).
```
```text
-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.
+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.
+```
+
+```text
+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. Konsol bu riski üç yerden küçültür: (1) operatör komut yazmaz, doğru işlemi seçer; (2) her komut **çalıştırılmadan önce ekranda** görünür ve onay ister — "ne çalışacak?" sorusu asla cevapsız kalmaz; (3) filo işlemleri hedefi (`--limit`) açıkça seçtirir ve dalga kapılarını (production için `production`, release kapısı için `GATE` yazma) operatöre ayrıca onaylatır. Git tabanlı kurulum ise "hangi sürüm sahada?" sorusunu `git log` ile yanıtlanabilir kılar. Şifre üretiminin varsayılan kapalı olması aynı felsefenin devamıdır: anahtar zaten var, ikinci bir gizli bilgi üretmenin faydası yok.
+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ç |
|---|---|---|---|
-| Numaralı kategori konsolu (`bf-menu`) | Keşfedilebilir, komutu gösterip onay ister, çevrimdışı çalışır, denetim log'u tutar | Konsol tablosu playbook'la senkron tutulmalı | **Seçildi** |
+| 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) |
-| Grafik masaüstü aracı (GUI uygulaması) | Görsel | Cihazlar terminale boot eder (K-03), ek bağımlılık ister | Elendi |
| 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-menu`.
-- Her komut çalıştırılmadan önce gösterilir; tehlikeli işlemler iki kez onaylanır — yanlış komut/yanlış sıra riski ortadan kalkar.
-- Filo işlemleri yalnız mevcut playbook'larla ve açık `--limit` ile çalışır; konsol **yeni playbook üretmez** ve envanter dışı bir cihaza dokunmaz.
-- Çevrimdışı çalışır — ISO/firstboot yoluna bağımlı değildir.
-- Denetim log'u (`/var/log/blueforce-console.log`, mod `600`) komutu, hedefi ve çıkış kodunu kaydeder; **secret ve ham playbook çıktısı log'a yazılmaz**.
+- Öğ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ı `` yapar).
## 7. Dezavantajlar
-- Konsol tablosu ile playbook'lar arasında kapsam (scope) uyuşmazlığı olursa konsol çalıştırmayı reddeder; bu, playbook güncellemesiyle konsolun birlikte güncellenmesini zorunlu kılar (`admin/bf-menu` → `bf_playbook_check`).
-- Kategoriler 2, 3 ve 5-filo için makinede `ansible-playbook` gerekir; yoksa konsol açıklama verir ama işlemi çalıştırmaz.
-- Çok özel/tek seferlik işler konsol kataloğunda yoksa operatör kabuğa döner (kataloğa ekleme PR ile yapılır).
-- TUI çıktısı log'a birebir kopyalanmaz; her seçim ayrı bir denetim satırı üretir (K-14).
+- 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 sekmesindeki 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`).
+- Terminal konsolunda bulunan bazı ikincil araçlar (ortam bilgisi, canlı donanım kontrolü, uzak erişim durumu, donanım envanteri) grafik katalogda ayrı işlem olarak listelenmez; gerektiğinde `sudo bf --tui` ile açılır (§Ek: Hızlı referans).
+- Her onay ayrı bir denetim satırı üretir; komutun ham çıktısı kayda kopyalanmaz (K-14).
## 8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
-| Konsol bayatlar, yanlış kapıyla çalıştırır | Orta | Yüksek | `bf_playbook_check` kapsam karşılaştırması uyuşmazlıkta reddeder; §10 testi her sürümde koşar |
+| 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) |
-| `curl | bash` ile sahte script çalıştırma | Düşük | Yüksek | Yalnız resmi depo adresi; `git clone` + gözden geçirme önerilir |
+| 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; menü "Resume after a failed run" sunar (§9.6) |
-| Konsol, envanter dışı cihaza dokunur | Düşük | Yüksek | Hedefler envanterden çözülür; cihaz/grup bulunamazsa işlem reddedilir |
+| İş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ı
@@ -101,7 +168,7 @@ Bu bölüm sıfırdan başlayan içindir. Her adımda **hangi komutu nereye yaza
- Ubuntu Server tabanlı bir makine (desteklenen baseline `24.04` / `26.04`).
- `sudo` yetkisi olan bir kullanıcı.
-- Kurulum sırasında **internet** (repoyu git'ten indirmek için). Cihaz kurulduktan sonra çalışması için internet gerekmez.
+- 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:
@@ -132,7 +199,7 @@ 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.
+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.
@@ -148,26 +215,22 @@ sudo admin/bf-bootstrap.sh
curl -fsSL https://raw.githubusercontent.com/emirhanmamak-blueforce/Blueforce-Linux/main/admin/bf-bootstrap.sh | sudo bash
```
-Bootstrap ne yapar (kendi özet çıktısı, örnek):
+> `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:
```text
-bf-bootstrap: ubuntu 26.04 is a supported baseline
-bf-bootstrap: dependency check
-bf-bootstrap: dependencies present: git curl ansible-playbook
-bf-bootstrap: cloning https://github.com/emirhanmamak-blueforce/Blueforce-Linux.git (branch main) into /opt/blueforce-linux
-bf-bootstrap: linked 26 tools into /usr/local/bin
-bf-bootstrap: bf-menu ready: /usr/local/bin/bf-menu
-
bf-bootstrap: summary
repository : /opt/blueforce-linux
branch : main
revision :
- tools : 26 linked into /usr/local/bin
- bf-menu : /usr/local/bin/bf-menu
- next : sudo bf-menu
+ tools : 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-menu
-Kurulum tamam. Başlamak için: sudo bf-menu
+Installation complete. To get started: sudo bf
+Kurulum tamam. Başlamak için: sudo bf
```
| Bootstrap ne yapar | Ne yapmaz |
@@ -175,297 +238,271 @@ Kurulum tamam. Başlamak için: sudo bf-menu
| Ö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-menu`'yü çalıştırılabilir yapıp `sudo bf-menu`'yü hazırlar | Disk bölmez, servis silmez, onaysız paket güncellemez |
+| `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 |
-> `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.
-
-**Adım 5 — Menüyü aç ve doğrula.**
+**Adım 5 — Arayüzü aç ve doğrula.**
```bash
-sudo bf-menu
+sudo bf
```
-Menü açılıyorsa kurulum tamam. Bundan sonra her iş için aynı komut:
+Pencere açılıyorsa kurulum tamam. Bundan sonra her iş için aynı komut:
```bash
-sudo bf-menu
+sudo bf
```
-> **Bundan sonra ezberleyeceğin tek şey bu komuttur.** Menüden çıkmak için ana ekranda `q`; alt menülerde önce `0` (geri), sonra `q` (çıkış).
+> **Bundan sonra ezberleyeceğin tek şey bu komuttur.** Pencereden çıkmak için `Çıkış` düğmesi (basit modda üçüncü düğme, alt çubukta da bir `Çıkış` düğmesi var).
-### 9.2 Menüyü kullanma — kategori kategori
-
-`sudo bf-menu` çalıştırınca **ana menü** açılır. Bir numara yazıp Enter'a bas.
-
-**Ana menü (örnek ekran):**
+**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:
```text
-==============================================================================
- Blueforce operator console 1.0.0
- repo: /opt/blueforce-linux
-==============================================================================
+tkinter bulunamadı; masaüstü arayüzü başlatılamıyor (teknik ayrıntı: ...).
- Categories
+Bu, minimal kurulumlarda sık görülür: tkinter ayrı bir sistem paketidir.
+Ubuntu/Debian üzerinde kurmak için:
- 1) Installation this device, local one-click installer
- 2) Device operations fleet playbooks, explicit target
- 3) Central (preparation) verify and prepare central integration
- 4) Tools repository and local helpers
- 5) Device information read-only information screens
+ sudo apt install -y python3-tk
+ sudo apt update && sudo apt install -y python3-tk
-------------------------------------------------------------------------------
- q) Quit the console
- Log: /var/log/blueforce-console.log
-------------------------------------------------------------------------------
-Choice >
+tkinter kurmak istemiyorsanız terminal menüsünü kullanın: sudo bf --tui
```
-Kategori kategori ne yapar ve hangi soruları sorar:
+İnternet yoksa paketi kuramazsın; **terminal konsolu çalışmaya devam eder**: `sudo bf --tui`.
-**1) Installation (bu cihaz)** — yalnız **senin oturduğun makineyi** kurar; hiçbir filo cihazına dokunmaz.
+**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:
```text
- 1) Pre-flight check installer --check, writes nothing
- 2) Install this device full run, asks dealer number
- 3) Resume after a failed run installer --resume
- 4) Run a single module installer --only
- 5) Show module state /var/lib/blueforce/install-state
- 6) Show the installer log tail of /var/log/blueforce-install.log
-```
-Sorduğu sorular: **`Dealer number (8 digits) >`**; 2. ve 3. seçenekte ayrıca "offline repo'dan mı kurulsun?" ve "zaten OK olan modüller atlansın mı?" onayları; son olarak **`Run this command? [y=run / c=run with --check / N=cancel]`**. 2, 3 ve 4 numaralı seçenekler `root` ister (konsolu `sudo` ile açtıysan hazırdır). Format yanlışsa (`^[0-9]{8}$` uymuyorsa) konsol kurulumu başlatmaz.
+Grafik ekran bulunamadı (DISPLAY ve WAYLAND_DISPLAY tanımlı değil).
-**2) Device operations (filo)** — yalnız repodaki **mevcut** playbook'ları, açık bir hedefle çalıştırır.
+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. Başlıkta `Blueforce Field OS — Yönetim`, altında `Blueforce saha cihazı yönetimi (Kur / Durum / Bakım)`, ardından depo yolu ve kullanılan katalog kaynağı (gerçek iş mantığı katmanı, örn. `bfos.operations + bfos.runner`) görünü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.
```text
- 1) Read-only reports 11 operations, no change on any device
- 2) Maintenance actions 10 operations, some destructive
- 3) Show inventory targets groups, hosts and counts
+ Ne yapmak istiyorsunuz?
+
+ [ Kur ] bu cihazı kurar (bayi no gerekir)
+ [ Durum ] salt-okunur özet
+ [ Çıkış ] pencereyi kapatır
```
-*2.1 Read-only fleet reports (11 işlem, hiçbiri cihazı değiştirmez):*
+**Detaylı mod:** 5 kategori **sekmesi** açılır. Her sekmede solda işlem listesi (sütunlar: `İşlem`, `Kapsam`, `Tür`), sağda `Seçenekler ve açıklama` paneli vardır; seçtiğin işlemin kapsamı, playbook yolu ve varsa zorunlu alanları orada görünür. Alt çubukta `Komutu göster ve çalıştır`, `Çıktıyı temizle`, `Çalışanı iptal et`, `Yalnız denetim (--check)`, `Çıkış` ve durum etiketi (`Hazır.`) bulunur.
+
+| 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-`, ana makine adı `bf-` |
+| 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 | Ping / reachability | SSH erişilebilirliği (salt-okunur) |
-| 2 | Uptime | Çalışma süresi ve yük |
-| 3 | Disk usage | Disk kullanımı; eşik üstünde uyarır (eşik sorulur) |
-| 4 | Docker status | Docker servisi ve konteynerler |
-| 5 | Package versions | Pinlenmiş paketlerin kurulu sürümleri |
-| 6 | Pending security updates | **Yalnız rapor**; asla kurmaz |
-| 7 | Provisioning phase report | Cihaz başına `state.json` fazı |
-| 8 | Enrollment + central evidence | ENROLLED/READY iddialarını merkezi kanıta karşı denetler |
-| 9 | Field OS version report | Sürüm; istenirse drift kontrolü (beklenen sürüm sorulur) |
-| 10 | Remote access channels | SSH/xRDP/RustDesk/WireGuard hazırlığı |
-| 11 | Offline readiness report | Offline provisioning yerel ön koşulları |
+| 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 |
-*2.2 Fleet maintenance (10 işlem, bir kısmı yıkıcı):*
+*Bakım işlemleri (10 işlem; 9'u yıkıcı, hepsi ikinci onay ister):*
-| # | İşlem | Not |
+| İşlem | Kapsam | Not |
|---|---|---|
-| 1–3 | Restart RDP / RustDesk / WireGuard | Servis yeniden başlatma |
-| 4 | Restart an allowlisted service | Yalnız izinli servis adları (`blueforce-agent`, `docker`, `ssh`, `sshd`, `systemd-journald`, `cron`) |
-| 5 | GUI off (headless) | Dalgayı `multi-user.target`'e alır |
-| 6 | GUI on (maintenance) | Grafik oturumu geri açar |
-| 7 | Collect logs / support bundle | Zaman damgalı journal + snapshot paketi (satır sayısı sorulur) |
-| 8 | Run an approved script | Yalnız `/opt/blueforce/bin` ve `/usr/local/sbin` |
-| 9 | Controlled reboot | Seri yeniden başlatma + sağlık kapısı (bekleme süresi sorulur) |
-| 10 | Deploy approved package update | `package=version` pinleri + sağlık kapısı |
+| 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ı |
-> **`bf-gui-off` 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ı."
+> **`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) Central (preparation)** — merkez entegrasyonunu **denetler/hazırlar**; merkez sunucusunu **kurmaz**.
+**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 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:
```text
- 1) Central readiness report inventory, placeholders, admin key
- 2) Show configured central endpoints WireGuard hub, monitoring, mirror
- 3) Probe central endpoints DNS + TCP, read-only
- 4) Wave rollout gate state per-wave device counts and gate rules
- 5) Central preparation checklist what must exist before enrollment
+ [Detaylı mod] Hedef: [ 12010193 ] Bayi no (8 hane) [ pilot_1 ▾ ] Dalga [ ] Tüm filo (dikkat)
```
-**4) Tools** — repo ve yerel yardımcılar.
-
-```text
- 1) Update this checkout git pull --ff-only
- 2) Environment and reference info paths, versions, resolved settings
- 3) Show the operation catalogue --list output
- 4) Local offline gate bf-check-local
- 5) Enrollment gate bf-check-enrollment
- 6) Ready gate bf-check-ready
- 7) Deep diagnostics bf-diagnostics (or bf-status)
- 8) Field OS release identity bf-release
- 9) Hardware inventory bf-hardware-inventory.sh
- 10) Support bundle bf-support-bundle --out-dir
- 11) Show the console log last 40 lines of the audit log
-```
-
-**5) Device information** — salt-okunur bilgi ekranları.
-
-```text
- 1) Identity hostname, device id, dealer number
- 2) Health summary bf-status
- 3) Provisioning and enrollment state state.json whitelist + bf-enrollment-status
- 4) Network addresses, route, DNS, WireGuard peers
- 5) Disk, memory, CPU df, free, load
- 6) Installed pinned packages dpkg-query
- 7) Service status ssh, xrdp, rustdesk, docker, wg, meshagent
- 8) Recent journal errors journalctl -p err
- 9) Inventory summary waves, groups, counts
- 10) Resolve a target check a dealer number or group
-```
-
-> **Not (WireGuard):** Konsol WireGuard private/preshared key'lerini **hiçbir zaman istemez, göstermez veya loglamaz**; yalnız peer durumunu okur.
-
-### 9.3 Cihaz seçimi: tek cihaz mı grup mu
-
-Kategori **2**'de bir işlem seçtiğinde konsol önce **hedefi** sorar:
-
-```text
- Target selection (mode: wave)
- 1) Single device by dealer number 8 digits, e.g. 12010101
- 2) Group / wave lab, pilot_1, pilot_2, wave_1, wave_2, production
- 3) All devices in the fleet asks per wave for wave-scoped playbooks
- 9) Type the target directly dealer number, group or 'all'
-Target >
-```
-
-| Hedef türü | Menüde ne yazarsın | Örnek | Boyut | Tipik kullanım |
+| Hedef türü | Çubukta ne yaparsın | Örnek | Boyut | Tipik kullanım |
|---|---|---|---|---|
-| Tek cihaz | bayi no (8 hane) | `12010101` | 1 | Arıza teşhisi, tek cihaz bakımı |
-| Grup / dalga | grup adı | `lab` | 2 | Yeni playbook denemesi (önce LAB kuralı) |
-| Grup / dalga | grup adı | `pilot_1` / `pilot_2` / `wave_1` / `wave_2` | 5 / 20 / 50 / 100 | Kademeli yayılım (K-11) |
-| Tüm filo | `3` (veya doğrudan `all`) | — | kalan | Yalnız onaylı; dalga dalga ilerler |
+| 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 |
-Kurallar (konsolun kendi davranışı):
+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`).
-- **Tek cihaz** normalde en güvenli seçenektir; cihaz envanterde yoksa konsol **reddeder** (`is not in the inventory`).
-- **Grup / dalga** seçiminde liste, her grubun cihaz sayısıyla ve onaylı dalga olup olmadığıyla gösterilir.
-- **Wave-scoped** bir playbook'ta tüm filo seçilirse konsol, 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**.
-- **Release-gated** playbook'lar (reboot, deploy-update) tek cihaz veya tüm filo kabul etmez; **tek onaylı dalga** ister.
-- **production** dalgası ayrıca `production` yazdırılarak, release kapısı ise `GATE` yazdırılarak onaylanır. Hiçbir kapı sessizce geçilmez.
+Kurallar (arayüzün kendi davranışı):
-### 9.4 Uçtan uca örnek seans (örnek ekran çıktısı)
+- **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: )`, `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.
-Aşağıdaki iki kısa seans, kurulumdan günlük işletime tipik akışı gösterir. (Çıktılar **örnektir**.)
+### 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)**
```text
-emirhan@makine:~$ sudo bf-menu
-
-==============================================================================
- Blueforce operator console 1.0.0
- repo: /opt/blueforce-linux
-==============================================================================
-
- Categories
- 1) Installation 2) Device operations 3) Central (preparation)
- 4) Tools 5) Device information
-
-------------------------------------------------------------------------------
- q) Quit the console
- Log: /var/log/blueforce-console.log
-------------------------------------------------------------------------------
-Choice > 1
-
-==============================================================================
- 1) Installation (this device)
- Local install only -- no fleet device is touched here
-==============================================================================
-
- 1) Pre-flight check installer --check, writes nothing
- 2) Install this device full run, asks dealer number
- 3) Resume after a failed run installer --resume
- 4) Run a single module installer --only
- 5) Show module state /var/lib/blueforce/install-state
- 6) Show the installer log tail of /var/log/blueforce-install.log
-
-------------------------------------------------------------------------------
- 0) Back q) Quit the console
-------------------------------------------------------------------------------
-Choice > 1
-Read-only pre-flight: the installer creates no log, state or directory in --check mode.
-Dealer number (8 digits) > 12010193
-
- Pre-flight check for BF-12010193
-
- bash /opt/blueforce-linux/scripts/install/blueforce-install.sh --dealer-id 12010193 --check
-
-[1/18] precheck ........ OK [2/18] system ........ OK
-... [18/18] final-check ... OK
-
-Press Enter to continue
+emirhan@makine:~$ sudo bf
```
-Şimdi gerçek kurulum (aynı menüden **2**):
+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:
```text
-Choice > 2
-Dealer number (8 digits) > 12010193
-Install from the local offline repository (--offline)? [y/N] n
-
-[i] Target device: BF-12010193 (bf-12010193)
-
- Command
- bash /opt/blueforce-linux/scripts/install/blueforce-install.sh --dealer-id 12010193
-
-[WARN] This is a DESTRUCTIVE operation: install on BF-12010193
-Proceed? [y=run / c=run with --check / N=cancel] y
-
-[1/18] precheck ..................... OK
-[2/18] system ....................... OK
-...
-[18/18] final-check .................. OK
-
-[OK] Command finished successfully (exit 0).
-Press Enter to continue
+ Hedef: [ 12010193 ] Bayi no (8 hane) [ lab ▾ ] Dalga [ ] Tüm filo (dikkat)
+ durum: Bayi no geçerli: BF-12010193
```
-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 kategori **5 → 3** (Provisioning and enrollment state) açılır.
+2) Basit modda `Kur` düğmesine bas. Seçim penceresi açılır (başlık: `Kurulum`):
+
+```text
+ Bu cihazda ne yapılacak?
+
+ Ön kontrol (--check) hiçbir şey yazmaz; kurulum cihazı değiştirir.
+
+ [ Ön kontrol (--check) ] [ Kurulumu başlat ] [ Vazgeç ]
+```
+
+3) Ö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.
+
+```text
+========================================================================
+ Ç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).
+```
+
+4) Şimdi gerçek kurulum: yeniden `Kur` → `Kurulumu başlat`. Komut, **çalışmadan önce** bir onay penceresinde gösterilir:
+
+```text
+ Ç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- 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:
+
+```text
+========================================================================
+ Ç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**
```text
-Choice > 2
-
-==============================================================================
- 2) Device operations
- Existing playbooks only, always with an explicit target
-==============================================================================
-
- 1) Read-only reports 11 operations, no change on any device
- 2) Maintenance actions 10 operations, some destructive
- 3) Show inventory targets groups, hosts and counts
-
-------------------------------------------------------------------------------
- 0) Back q) Quit the console
-------------------------------------------------------------------------------
-Choice > 1
-
- ... 1) Ping / reachability 2) Uptime 3) Disk usage 4) Docker status ...
-
-Choice > 1
-
- Target selection (mode: any)
- 1) Single device by dealer number 8 digits, e.g. 12010101
- 2) Group / wave lab, pilot_1, pilot_2, wave_1, wave_2, production
- 3) All devices in the fleet
- 9) Type the target directly dealer number, group or 'all'
-Target > 1
-Dealer number (8 digits) > 12010193
-
- Command
- ansible-playbook -i ansible/inventory/hosts.yml ansible/playbooks/bf-ping.yml --limit bf-12010193
-
-Run this command? [y=run / c=run with --check / N=cancel] y
-
-PLAY [Ping / reachability] ...
-bf-12010193 | SUCCESS => {"changed": false, "ping": "pong"}
-
-[OK] Command finished successfully (exit 0).
+Ü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 ]
```
-Teşhis paketi için kategori **4 → 10** (Support bundle); paket yolu ekranda yazılır ve paket **parola, private key veya token içermez** (K-14).
+Onay penceresi:
+
+```text
+ Ç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:
+
+```text
+[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)
@@ -487,125 +524,170 @@ Teşhis paketi için kategori **4 → 10** (Support bundle); paket yolu ekranda
| # | Belirti (ekranda ne görürsün) | Neden | Çözüm |
|---|---|---|---|
-| 1 | `bf-menu: command not found` | Bootstrap çalışmamış veya araçlar bağlanmamış | Bootstrap'ı tekrar koş: `sudo admin/bf-bootstrap.sh`; sonra `sudo /usr/local/bin/bf-menu` ile tam yoldan dene |
-| 2 | `[ERROR] This operation needs root on THIS device.` | Kurulum seçenekleri root ister; konsolu `sudo`'suz açtın | Konsolu `sudo bf-menu` ile aç (kural: bu işlem için konsol `Re-run the console with sudo: sudo admin/bf-menu` der) |
-| 3 | `[ERROR] Invalid dealer number '1201019': it must match ^[0-9]{8}$ (8 digits, no spaces).` | Bayi no 8 haneli ve yalnız rakam olmalı | Tam 8 hane, sadece rakam gir; baştaki sıfırı silme. Örnek: `12010193` |
-| 4 | `[WARN] ansible-playbook not found ... fleet operations cannot run.` veya `[WARN] ... is not available` | Makinede Ansible yok ya da araç PATH'te değil | `sudo apt install ansible` (reponun kurulumu `ansible-core`'u zaten kurar) ve araçları bağla: `sudo admin/bf-bootstrap.sh` |
-| 5 | `[ERROR] Playbook not found: ansible/playbooks/...` / `Refusing to run ... the console expects scope 'X' but the playbook declares 'Y'.` | Konsol ile repo checkout'u uyuşmuyor (eski checkout veya `--repo` yanlış) | Kategori **4 → 1** ile checkout'u güncelle (`git pull --ff-only`) veya doğru repoyu ver: `sudo bf-menu --repo /opt/blueforce-linux` |
+| 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 | Pencere açılıyor ama başlıkta 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ı | 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 iki durum:
+Ek olarak sık görülen dört durum:
-- **`git clone` internet/DNS hatası** (`Could not resolve host`): İnternet/DNS'i kontrol et; kurulum için internet yalnız bu adımda gerekir.
-- **`[ERROR] ... is not in the inventory`**: Cihaz veya grup `ansible/inventory`'de yok; hedefi envanterle eşle (02) veya `bf-bootstrap` ile checkout'u güncelle.
+- **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; `bf-support-bundle` çıktısı secret sızdırmaz (K-14).
-2. **Onaysız update yoktur.** Güncelleme yalnız kategori 2 → "Deploy approved package update" ile, `package=version` 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 (kategori 2'de "Pending security updates" **yalnız rapor**tur).
-3. **Yıkıcı işlemler onaylıdır.** Her komut çalıştırılmadan önce ekranda gösterilir, onay istenir; yıkıcı işlemler ayrıca ikinci kez sorulur; production dalgası için `production` ve release kapısı için `GATE` yazılması zorunludur. Disk bölme/silme konsolda otomatikleştirilmemiştir.
-4. **SSH yalnız anahtarla.** Parola girişi kapalı, `blueforce` hesabı kilitli; paylaşılan private key yasaktır (K-13).
-5. **Tek kullanımlık enrollment token loglanmaz.** Token konsol dışında bir kez girilir; denetim log'u ham çıktıyı ve secret'ı yazmaz (K-17).
-6. **Cihaz kimliği imajda taşınmaz.** Bayi no yalnız ilk kurulum seansında girilir (K-09/K-12).
+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ı `` 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 rapor**tur).
+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) | 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ıkta turuncu uyarı şeridi: `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 kapalıdır** |
+| 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 | LAB(2) |
-| `sudo bf-menu --list` / `--list-targets` | İşlem kataloğu ve envanter hedefleri hatasız listelenir | LAB(2) |
-| `sudo bf-menu` açılır, `q` ile çıkılır | Konsol hiçbir değişiklik yapmaz | LAB(2) |
-| Kategori 1 → 1 kuru koşu (`--check`) | Değişiklik yok, rapor üretir | LAB(2) |
-| Kategori 1 → 2 kurulum, bayi no `12010193` | `PROVISIONED_OFFLINE`; hostname `bf-12010193` | LAB(2) |
-| Geçersiz bayi no (7/9 hane, harf) | Konsol kurulumu başlatmaz | LAB(2) |
-| Kategori 2 → 2 → 9 reboot, tek cihaz | Onay istenir; cihaz yeniden başlar; log satırı yazılır | LAB(2) |
-| Kategori 2 wave-scoped playbook, hedef "all" | Dalga dalga; her dalga ayrı onaylanır; hata sonraki dalgayı durdurur | LAB(2) |
+| `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) |
+| `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) |
-| Kategori 4 → 11 konsol log'u | Mod `600`; secret ve ham playbook çıktısı yok | 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: kategori **1 → 3 "Resume after a failed run"** (`--resume`); modüller idempotenttir.
-2. Yanlış bayi no girildiyse: doğru no ile tam yeniden koşu; kimlik modülü hostname'i üzerine yazar (K-12).
-3. Bootstrap yanlış kurulduysa: repoyu güncelleyip (`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: "Deploy approved package update" geri alma zinciri önceki onaylı release manifestine döner (10, 30).
-5. Çözülmeyen cihaz: 17-RECOVERY seviye merdiveni (L8 = temiz yeniden kurulum) uygulanır.
+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
-- [x] `admin/bf-bootstrap.sh`, `admin/bf-menu` ve `admin/bf-creds` repoda mevcut; `sudo bf-menu` tek giriş noktası.
-- [x] Kurulum git tabanlı (clone + bootstrap); ISO yolu ikincil/opsiyonel olarak korunuyor (26 silinmedi).
-- [x] Her komut çalıştırılmadan önce gösterilip onaylanıyor; yıkıcı işlemler iki kez soruyor.
-- [x] Bayi no kapısı `^[0-9]{8}$`; geçersiz girişte kurulum başlamıyor.
-- [x] Filo işlemleri açık `--limit` ile; wave-scoped `all` dalga dalga ilerliyor; production için `production` yazma zorunlu.
-- [x] Konsol, playbook kapsamıyla uyuşmazsa çalıştırmayı reddediyor.
+- [x] `bfos` paketi ve giriş dosyası `admin/bf` repoda mevcut; `sudo bf` grafik arayüzü açar, `sudo bf --tui` terminal konsolu.
+- [x] `admin/bf-bootstrap.sh` `/usr/local/bin/bf` bağını kurar; bash konsolu (`admin/bf-menu`) yedek olarak korunur, ana yol değildir.
+- [x] Kurulum git tabanlı (clone + bootstrap); kurulum paketleri depoda (1321 `.deb`, Git LFS) — kuran kişi hiçbir şey indirmez.
+- [x] `python3-tk` çevrimdışı depoda pinli; kurulum sonu kapısı tkinter'ı denetler ve eksikse WARN + `--tui` yolu bildirir.
+- [x] 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.
+- [x] Bayi no kapısı `^[0-9]{8}$`; geçersiz girişte komut üretilmiyor.
+- [x] Filo işlemleri açık hedefle; wave-scoped filo akışı dalga dalga ilerliyor; production için `production` yazma zorunlu.
+- [x] Katalog, playbook kapsamıyla uyuşmazsa çalıştırmayı reddediyor (kapsam playbook dosyasından okunur).
+- [x] Yetki modeli: `sudo bf` tam yetki; yetkisiz açılışta yazma işlemleri kapalı ve çalıştırma katmanı `[ENGELLENDİ]` ile reddediyor.
+- [x] Grafik ekran/tkinter yokluğunda Türkçe hata + `sudo bf --tui` önerisi ve çıkış kodu 3.
- [x] Şifre üretimi varsayılan **kapalı**; yalnız `bf-creds --generate` ile üretiliyor; parola ekrana/loga gitmiyor.
-- [x] Kategori 2'de onaysız güncelleme seçeneği **yok**; "Pending security updates" yalnız rapor.
-- [x] Denetim log'u mod `600`; secret ve ham playbook çıktısı yazılmıyor.
-- [ ] Örnek ekran çıktıları gerçek LAB çıktısıyla değiştirildi.
+- [x] `Cihaz işlemleri` içinde onaysız güncelleme seçeneği **yok**; `Bekleyen güvenlik güncellemeleri` yalnız rapor.
+- [x] 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
-- [ ] Konsol işlem kataloğunun playbook kümesiyle tam eşleşmesi: `bf-service-restart`/`bf-run-script` gibi yeni playbook'lar kataloğa nasıl eklenecek (süreç/PR şablonu) (sahibi: 09 + konsol sahibi).
-- [ ] Merkez hazırlığı ekranlarının (kategori 3) gerçek merkez endpoint'leri geldiğinde hangi kanıtı "hazır" sayacağı (sahibi: 29/21 yazarları).
+- [ ] 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).
-- [ ] Konsol işlem geçmişinin merkezi log toplamaya (Loki/ELK, Faz-sonrası) dahil edilip edilmeyeceği (sahibi: 15-LOGGING yazarı).
+- [ ] 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: Menü haritası
+## Ek: Arayüz haritası
```mermaid
flowchart TB
- START["sudo bf-menu"] --> MAIN{"Ana menü — kategori seç
q = çıkış"}
- MAIN --> C1["1) Installation
bu cihazı kurar (filo cihazına dokunmaz)"]
- MAIN --> C2["2) Device operations
mevcut playbook'lar + açık hedef"]
- MAIN --> C3["3) Central (preparation)
merkez entegrasyonunu denetle/hazırla"]
- MAIN --> C4["4) Tools
repo + yerel yardımcılar"]
- MAIN --> C5["5) Device information
salt-okunur bilgi ekranları"]
- C1 --> I1["1 Kuru koşu --check
2 Kurulum (bayi no)
3 Devam --resume
4 Tek modül --only
5 Modül durumu / 6 Log"]
- C2 --> P1["2.1 Salt-okunur raporlar (11)"]
- C2 --> P2["2.2 Bakım işlemleri (10, yıkıcı onaylı)"]
- C2 --> P3["2.3 Envanter hedefleri"]
- C3 --> K1["Hazırlık raporu / endpoint'ler / probe
dalga kapı durumu / kontrol listesi"]
- C4 --> T1["Checkout güncelle / ortam bilgisi / katalog
gate'ler / bf-release / destek paketi / log"]
- C5 --> D1["Kimlik / sağlık / durum / ağ / disk
paketler / servisler / journal / envanter"]
+ START["sudo bf
(grafik arayüz, varsayılan)"] --> WIN["Pencere: Blueforce Field OS — Yönetim
üst çubuk: Bayi no (8 hane) + Dalga + Tüm filo"]
+ WIN --> SIMPLE["Basit mod (varsayılan)
3 büyük düğme: Kur / Durum / Çıkış"]
+ WIN -->|"üstte 'Detaylı mod'"| DETAIL["Detaylı mod
5 kategori sekmesi"]
+ SIMPLE -. "Detaylı mod düğmesi" .-> DETAIL
+ DETAIL --> T1["Kurulum (6 işlem, 3 yazma)
ön kontrol / bu cihazı kur / resume / --only
modül durumu / kurulum günlüğü"]
+ DETAIL --> T2["Cihaz işlemleri (21 işlem, 9 yazma)
11 salt-okunur rapor + 10 bakım işlemi"]
+ DETAIL --> T3["Merkez hazırlığı (4, hepsi salt-okunur)
envanter / PLACEHOLDER / uç noktalar / kontrol listesi"]
+ DETAIL --> T4["Araçlar (9 işlem, 1 yazma)
checkout güncelle / katalog / kapılar / destek paketi / denetim kaydı"]
+ DETAIL --> T5["Cihaz bilgisi (8, hepsi salt-okunur)
özet / kimlik / ağ / kaynaklar / paketler / servisler / journal / state"]
+ WIN --> FOOT["Alt çubuk: Komutu göster ve çalıştır / Çıktıyı temizle /
Çalışanı iptal et / Yalnız denetim (--check) / Çıkış"]
+ FOOT --> GATES{"Onaylar: komut önizleme →
dalga adı / production / GATE / all →
yıkıcı ikinci onay"}
+ GATES --> RUN["Komut çıktı alanına yazılır ve koşar
denetim kaydı: /var/log/blueforce-console.log (600)"]
+ START -. "grafik ekran veya tkinter yoksa
(çıkış kodu 3, Türkçe hata)" .-> TUI["sudo bf --tui
(terminal konsolu, yedek)"]
+ TUI -. "python3 yoksa" .-> BASH["admin/bf-menu
(bash konsolu, son çare)"]
```
## Ek: İlk kurulum ve durum akışı
```mermaid
flowchart LR
- G["git clone
Blueforce-Linux"] --> B["sudo admin/bf-bootstrap.sh
(veya curl | sudo bash)"]
- B --> M["sudo bf-menu"]
- M --> ID["Kategori 1: bayi no gir
ör. 12010193"]
- ID --> INST["18/18 modül OK"]
- INST --> PO["PROVISIONED_OFFLINE
yerel kurulum bitti"]
- PO -->|kategori 5: enrollment| EN["ENROLLED"]
+ G["git clone
Blueforce-Linux"] --> LFS["git lfs pull
provisioning/offline-repo/packages/
1321 .deb"]
+ LFS --> B["sudo admin/bf-bootstrap.sh
(veya curl | sudo bash)"]
+ B --> BF["/usr/local/bin/bf
+ bf-menu (yedek)"]
+ BF --> GUI["sudo bf
grafik arayüz"]
+ GUI --> ID["Üst çubuk: bayi no gir
ör. 12010193"]
+ ID --> INST["Kurulum sekmesi → Bu cihazı kur
--offline (yerel paket deposu)"]
+ INST --> MOD["18/18 modül OK
+ final-check: tkinter kapısı"]
+ MOD --> PO["PROVISIONED_OFFLINE
yerel kurulum bitti"]
+ PO -->|"Cihaz bilgisi: kayıt durumu"| EN["ENROLLED"]
EN -->|merkez kanal kanıtı| RDY["READY
teslim edilebilir"]
+ GUI -. "grafik ekran yok / tkinter yok" .-> TUI["sudo bf --tui"]
B -. "ISO/firstboot yolu
(ikincil, opsiyonel)" .-> FB["docs/26 / docs/27"]
```
-## Ek: Hızlı referans (menü ↔ komut)
+## Ek: Hızlı referans (arayüz ↔ komut)
-| Menüde | Altında çalışan komut / playbook |
-|---|---|
-| 1 → 1 Kuru koşu | `blueforce-install.sh --dealer-id <8hane> --check` |
-| 1 → 2 Kurulum | `blueforce-install.sh --dealer-id <8hane>` (`--offline`, `--resume` opsiyonel) |
-| 1 → 4 Tek modül | `blueforce-install.sh --dealer-id <8hane> --only ` |
-| 1 → 5 / 6 Modül durumu / log | `/var/lib/blueforce/install-state`, `/var/log/blueforce-install.log` |
-| 2.1 → 1 Ping | `bf-ping.yml` |
-| 2.1 → 9 Field OS sürümü | `bf-fieldos-version.yml` |
-| 2.2 → 7 Log topla | `bf-collect-logs.yml` |
-| 2.2 → 9 Kontrollü reboot | `bf-reboot.yml` (release-gated, seri + sağlık kapısı) |
-| 2.2 → 10 Onaylı güncelleme | `bf-deploy-update.yml` (`package=version` pinleri) |
-| 3 → 1..5 Merkez hazırlığı | `ansible/inventory/group_vars/all.yml` denetimi + DNS/TCP probe |
-| 4 → 4/5/6 Kapılar | `bf-check-local`, `bf-check-enrollment`, `bf-check-ready` |
-| 4 → 8 Sürüm kimliği | `bf-release` |
-| 4 → 10 Destek paketi | `bf-support-bundle --out-dir` |
-| 5 → 2/3 Sağlık ve durum | `bf-status`, `/var/lib/blueforce/state.json`, `bf-enrollment-status` |
-| Konsol dışı (opsiyonel) | `sudo bf-creds --generate` / `--fetch` |
-| Denetim log'u | `/var/log/blueforce-console.log` (mod `600`) |
+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 ` |
+| 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 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` |
diff --git a/provisioning/offline-repo/add-packages.sh b/provisioning/offline-repo/add-packages.sh
index cfcf99f..de2d983 100755
--- a/provisioning/offline-repo/add-packages.sh
+++ b/provisioning/offline-repo/add-packages.sh
@@ -146,9 +146,13 @@ inspect_deb() {
printf ' dpkg-deb çıktısı: %s\n' "$raw" >&2
return 1
fi
- DEB_PKG="$(printf '%s\n' "$raw" | sed -n '1p')"
- DEB_VER="$(printf '%s\n' "$raw" | sed -n '2p')"
- DEB_ARCH="$(printf '%s\n' "$raw" | sed -n '3p')"
+ # Only the value of each field belongs in these variables: dpkg-deb prints
+ # ": ", and keeping the label made every real package fail the
+ # name check ("Package: curl" is not a package name). The test suite stubs
+ # dpkg-deb, so this only shows up against real .deb files.
+ DEB_PKG="$(printf '%s\n' "$raw" | sed -n 's/^Package: //p')"
+ DEB_VER="$(printf '%s\n' "$raw" | sed -n 's/^Version: //p')"
+ DEB_ARCH="$(printf '%s\n' "$raw" | sed -n 's/^Architecture: //p')"
if [[ ! "$DEB_PKG" =~ $PACKAGE_NAME_RE ]]; then
printf 'HATA: paket adı geçersiz: "%s" (%s)\n' "$DEB_PKG" "$file" >&2
@@ -175,8 +179,12 @@ scan_existing() {
[[ -d "$PACKAGES_DIR" ]] || return 0
while IFS= read -r -d '' deb; do
sha="$(file_sha256 "$deb")"
- pkg="$(dpkg-deb -f "$deb" Package 2>/dev/null || true)"
- ver="$(dpkg-deb -f "$deb" Version 2>/dev/null || true)"
+ # Strip the ": " label dpkg-deb prints; the map keys are package and
+ # version values, and a labelled key never matches the incoming candidate
+ # (so a version conflict went undetected and the same package was copied
+ # twice).
+ pkg="$(dpkg-deb -f "$deb" Package 2>/dev/null | sed -n 's/^Package: //p' || true)"
+ ver="$(dpkg-deb -f "$deb" Version 2>/dev/null | sed -n 's/^Version: //p' || true)"
if [[ -z "$pkg" || -z "$ver" ]]; then
printf 'UYARI: packages/ içindeki okunamayan dosya yok sayıldı: %s\n' "${deb##*/}" >&2
continue
diff --git a/provisioning/offline-repo/build-index.sh b/provisioning/offline-repo/build-index.sh
index e7098da..5b22006 100755
--- a/provisioning/offline-repo/build-index.sh
+++ b/provisioning/offline-repo/build-index.sh
@@ -284,10 +284,14 @@ fi
while IFS= read -r -d '' deb; do
base="$(basename "$deb")"
+ # dpkg-deb prints ": "; only the value belongs in the pool key,
+ # so strip the label. Taking the whole line made every package fail the name
+ # check and the pool came out empty -- a stub dpkg-deb in the test suite hides
+ # this, so it only surfaces against real .deb files.
raw="$(dpkg-deb -f "$deb" Package Version Architecture 2>/dev/null || true)"
- package="$(printf '%s\n' "$raw" | sed -n '1p')"
- version="$(printf '%s\n' "$raw" | sed -n '2p')"
- arch="$(printf '%s\n' "$raw" | sed -n '3p')"
+ package="$(printf '%s\n' "$raw" | sed -n 's/^Package: //p')"
+ version="$(printf '%s\n' "$raw" | sed -n 's/^Version: //p')"
+ arch="$(printf '%s\n' "$raw" | sed -n 's/^Architecture: //p')"
if [[ ! "$package" =~ $PACKAGE_NAME_RE || -z "$version" ]]; then
POOL_ERRORS+=("$base: geçerli bir Debian paketi okunamadı; add-packages.sh ile ekleyin")
continue
@@ -447,6 +451,11 @@ else
rm -rf "$OUTPUT"
mv -- "$STAGE" "$OUTPUT"
STAGE=''
+ # mktemp -d creates 0700, and this directory is delivered: the installer reads
+ # the bundle, an operator inspects it, and a build host may copy it as another
+ # user. A private mode makes a valid bundle look missing (the installer's
+ # readability probe sees an unreadable directory), so publish it explicitly.
+ chmod 0755 "$OUTPUT"
printf 'OK: depo yazıldı: %s\n' "$(rel_to_repo "$OUTPUT")"
fi
@@ -540,8 +549,8 @@ printf ' git add -f %s\n' "$(rel_to_repo "$OUTPUT")"
printf ' git add %s\n' "$(rel_to_repo "$MANIFEST_OUT")"
printf ' git commit -m "offline repo: %d paket, offline APT indeksi"\n' "$POOL_TOTAL"
if [[ ! -d "$SCRIPT_DIR/build" ]]; then
- printf '\nNOT: provisioning/iso/build-blueforce-iso.sh offline depoyu "build" adıyla arıyor.\n'
- printf ' ISO ile aynı yolu kullanmak isterseniz: ./build-index.sh --output build\n'
+ printf '\nNOT: provisioning/iso/build-blueforce-iso.sh varsayılan olarak bu dizini ("built/") arar.\n'
+ printf ' Eski "build/" adı yalnız uyarıyla kabul edilir; bu çıktı ISO ile uyumludur.\n'
fi
printf '\nDoğrulama (hedef cihazda /opt/blueforce/offline-repo):\n'
printf ' cd /opt/blueforce/offline-repo && sha256sum -c SHA256SUMS\n'
diff --git a/provisioning/offline-repo/build-offline-repo.sh b/provisioning/offline-repo/build-offline-repo.sh
index 2f5e931..95c9bee 100755
--- a/provisioning/offline-repo/build-offline-repo.sh
+++ b/provisioning/offline-repo/build-offline-repo.sh
@@ -249,7 +249,10 @@ for list in "$SCRIPT_DIR/manifests/base-packages.txt" "$SCRIPT_DIR/manifests/rem
pins=$((pins + 1))
found=0
for deb in "${debs[@]}"; do
- [[ "$(dpkg-deb -f "$deb" Package)=$(dpkg-deb -f "$deb" Version)" == "$pin" ]] && found=1 && break
+ # dpkg-deb prints ": ", so the label has to be stripped
+ # before the value can be compared with a "package=version" pin.
+ deb_pin="$(dpkg-deb -f "$deb" Package | sed -n 's/^Package: //p')=$(dpkg-deb -f "$deb" Version | sed -n 's/^Version: //p')"
+ [[ "$deb_pin" == "$pin" ]] && found=1 && break
done
[[ "$found" -eq 1 ]] || { printf 'Pinned package not supplied locally: %s\n' "$pin" >&2; exit 1; }
done < "$list"
diff --git a/provisioning/offline-repo/built/Packages b/provisioning/offline-repo/built/Packages
new file mode 100644
index 0000000..eaf2973
--- /dev/null
+++ b/provisioning/offline-repo/built/Packages
@@ -0,0 +1,36962 @@
+Package: 3cpio
+Architecture: amd64
+Version: 0.14.0-1ubuntu1
+Static-Built-Using: rust-defaults (= 1.88.0ubuntu3)
+Priority: optional
+Section: utils
+Source: rust-threecpio
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Rust Maintainers
+Installed-Size: 713
+Depends: libc6 (>= 2.39), libgcc-s1 (>= 4.2)
+Recommends: zstd
+Suggests: bzip2, lz4, lzop, xz-utils
+Filename: pool/3cpio_0.14.0-1ubuntu1_amd64.deb
+Size: 285342
+MD5sum: 5829d45e7440bc9aa6127588f17b28b3
+SHA1: 1700e6198a346d5ed82a0981bdac6509fba6af89
+SHA256: f5c5134cfde8015c24a511b1f3087af7387280ddf009e0d83e92676bf8b9c4ac
+SHA512: c6d8da36367859f89810be93810c0a23210ce0933e7cd409049839496fc0f01bed7793a050d0085a2d175409c837e3ab421a1d4fbc3bec30973cd6dc48a6dc34
+Homepage: https://github.com/bdrung/3cpio
+Description: Manage initrd cpio archives
+ 3cpio is a tool to manage initramfs cpio files for the Linux kernel. The Linux
+ kernel's initramfs buffer format is based around the newc or crc cpio formats.
+ Multiple cpio archives can be concatenated and the last archive can be
+ compressed. Different compression algorithms can be used depending on what
+ support was compiled into the Linux kernel. 3cpio is tailored to initramfs
+ cpio files and will not gain support for other cpio formats.
+ .
+ 3cpio supports creating, examining, listing, and extracting the content of
+ the initramfs cpio.
+
+Package: accountsservice
+Architecture: amd64
+Version: 23.13.9-8ubuntu5.2
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian freedesktop.org maintainers
+Installed-Size: 536
+Depends: default-dbus-system-bus | dbus-system-bus, libaccountsservice0 (= 23.13.9-8ubuntu5.2), libc6 (>= 2.34), libglib2.0-0t64 (>= 2.83.0), libpolkit-gobject-1-0 (>= 0.99)
+Recommends: default-logind | logind, polkitd
+Suggests: gnome-control-center
+Filename: pool/accountsservice_23.13.9-8ubuntu5.2_amd64.deb
+Size: 72650
+MD5sum: 807c69e443e56acad4e0512c39bf860e
+SHA1: 82fb20f38a5c622304a3d2c19a2259ade9374d12
+SHA256: f4aa92d98b523787aab1582487b7099448cd01ad56cabdbb596f3ea20f09d072
+SHA512: 55ea10ba9e4df9ebb3f5a4d2dd4498474cb2a4021083acec8d0a6541f7e82724efd97f325f7f4c0b6799e42c3decd279774af943d3d6a5c0cd653ce2d2f80c62
+Homepage: https://www.freedesktop.org/wiki/Software/AccountsService/
+Description: query and manipulate user account information
+ The AccountService project provides a set of D-Bus
+ interfaces for querying and manipulating user account
+ information and an implementation of these interfaces,
+ based on the useradd, usermod and userdel commands.
+
+Package: acl
+Architecture: amd64
+Version: 2.3.2-2
+Multi-Arch: foreign
+Priority: optional
+Section: utils
+Maintainer: Ubuntu Developers
+Original-Maintainer: Guillem Jover
+Installed-Size: 192
+Depends: libacl1 (= 2.3.2-2), libc6 (>= 2.38)
+Filename: pool/acl_2.3.2-2_amd64.deb
+Size: 39366
+MD5sum: 67416bb769b7729971cbc47ad9818e1d
+SHA1: 974d99b36f0c173136769bb83a7b02300a10a27d
+SHA256: 74bb8008be63c1deb1cd9e9ebde8189a762962a6cc4e0a36d4943380ed46a15f
+SHA512: e3671b824b556fae019f98137c2e6199de2565c22065aa63ba6be2425e93e1eea37e1fbdff0be3c58b73a316f5441ca39385d5ef387172fa868742ced63aa207
+Homepage: https://savannah.nongnu.org/projects/acl/
+Description: access control list - utilities
+ This package contains the getfacl and setfacl utilities needed for
+ manipulating access control lists. It also contains the chacl IRIX
+ compatible utility.
+
+Package: adwaita-icon-theme
+Architecture: all
+Version: 50.0-1
+Multi-Arch: foreign
+Priority: optional
+Section: gnome
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian GNOME Maintainers
+Installed-Size: 13488
+Provides: adwaita-icon-theme-full (= 50.0-1), gnome-icon-theme-symbolic
+Depends: gtk-update-icon-cache, hicolor-icon-theme
+Recommends: librsvg2-common
+Suggests: adwaita-icon-theme-legacy
+Breaks: adwaita-icon-theme-full (<< 45.1), gnome-themes-standard-data (<< 3.18.0-2~), libmutter-12-0 (<< 44.8-3~), libmutter-13-0 (<< 45.3-3~)
+Replaces: adwaita-icon-theme-full (<< 45.1), gnome-themes-standard-data (<< 3.18.0-2~)
+Filename: pool/adwaita-icon-theme_50.0-1_all.deb
+Size: 580384
+MD5sum: cf8c9551043ac778781871584471ddfe
+SHA1: 59c58d0761c9338309d172ada5dd48d7a5f1855c
+SHA256: db9f11a94f993de589e7d8879664cb371eb8aefc8a2bce100d923951e4ef30c8
+SHA512: ca5c46452485b18cda25c5588e86547148306282b257a3086fe81561ca23098e31bdadcff260085e83f3f1097b1f393057afadf7b7572a07b2cca63f7a28160f
+Homepage: https://gitlab.gnome.org/GNOME/adwaita-icon-theme
+Description: default icon theme of GNOME
+ This package contains the default icon theme used by the GNOME desktop.
+ The icons are used in core apps like Settings, Files, and GNOME Shell.
+ .
+ Other apps are recommended to include their own icons using the GNOME
+ Design Team's Icon Development Kit.
+
+Package: alsa-base
+Architecture: all
+Version: 1.0.25+dfsg-0ubuntu9
+Multi-Arch: foreign
+Priority: optional
+Section: sound
+Source: alsa-driver
+Maintainer: Ubuntu Core Developers
+Original-Maintainer: Debian ALSA Maintainers
+Installed-Size: 441
+Provides: alsa
+Depends: kmod (>= 17-1), linux-sound-base, udev
+Recommends: alsa-utils
+Suggests: apmd (>= 3.0.2-1), alsa-oss, oss-compat
+Filename: pool/alsa-base_1.0.25+dfsg-0ubuntu9_all.deb
+Size: 144288
+MD5sum: e02e408591493f6ffa7cab9271ea6524
+SHA1: 3f95344a0892d3ab4ffce0f4d2dfa7e23937678f
+SHA256: e8eabd601da99025d1c1e3cbff5dea11d9ec3792dd18485ef957e486d21eb679
+SHA512: 57dc842e5d0d9726eeaedcbad75e4e092d22412a493daae7461f891aeb414838750908bb177312f0bd69423e5fcdfcbee2cfd134f51a294dbee3037c2daf7e26
+Homepage: http://www.alsa-project.org/
+Description: ALSA driver configuration files
+ This package contains various configuration files for
+ the ALSA drivers.
+ .
+ For ALSA to work on a system with a given sound card,
+ there must be an ALSA driver for that card in the kernel.
+ Linux 2.6 as shipped in linux-image packages contains
+ ALSA drivers for all supported sound cards in the form
+ of loadable modules. A custom alsa-modules package can
+ be built from the sources in the alsa-source package
+ using the m-a utility (included in the module-assistant
+ package). Please read the README.Debian file for more
+ information about loading and building modules.
+ .
+ ALSA is the Advanced Linux Sound Architecture.
+
+Package: alsa-topology-conf
+Architecture: all
+Version: 1.2.5.1-3build1
+Multi-Arch: foreign
+Priority: optional
+Section: libs
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian ALSA Maintainers
+Installed-Size: 420
+Breaks: libasound2-data (<< 1.2.1)
+Replaces: libasound2-data (<< 1.2.1)
+Enhances: libasound2-data
+Filename: pool/alsa-topology-conf_1.2.5.1-3build1_all.deb
+Size: 15646
+MD5sum: d9cdd8cb35161f306e7f1caee9583ba9
+SHA1: 2efdfc89592d67330813511b2589b39625f9a119
+SHA256: bbc3fc573a85d8dfbc30f83c5ee709f76963bb72a96d10943dc149ce1fdf8074
+SHA512: 76ed4aedd08d5758ce9eeb29dd2892cc830589271eb2888041791426efc1414f51a14e06385585dea37c009fc28dcbe3febb300db67e5e61f513e545e87e3faa
+Homepage: https://www.alsa-project.org/
+Description: ALSA topology configuration files
+ This package contains ALSA topology configuration files that can be used
+ by libasound2 for specific audio hardware.
+ .
+ ALSA is the Advanced Linux Sound Architecture.
+
+Package: alsa-ucm-conf
+Architecture: all
+Version: 1.2.15.3-1ubuntu1.5
+Multi-Arch: foreign
+Priority: optional
+Section: libs
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian ALSA Maintainers
+Installed-Size: 1530
+Depends: libasound2t64 (>= 1.2.15)
+Filename: pool/alsa-ucm-conf_1.2.15.3-1ubuntu1.5_all.deb
+Size: 106020
+MD5sum: 094d0fae654a944fc419f66267363205
+SHA1: 0fee06a99475bdf87fc2b8932f514507eac6c673
+SHA256: a086022cda58b905cab9a0b8d9be50bab1e2f854724b874f44862cdf00f15f5d
+SHA512: b4dc2d85d402b20cc3f782b7bed6a9cfb48cd96dc66ab52053cc0358b95996ae3729ea85d8553005545db1de86b225cf776c3893fda2796e63a14f88f95ddde9
+Homepage: https://www.alsa-project.org/
+Description: ALSA Use Case Manager configuration files
+ This package contains ALSA Use Case Manager configuration of audio
+ input/output names and routing for specific audio hardware. They can be
+ used with the alsaucm tool.
+ .
+ Installing these configuration files is absolutely necessary to make some
+ sound hardware work. Its installation is highly recommended in order to
+ use ALSA-backed hardware.
+ .
+ ALSA is the Advanced Linux Sound Architecture.
+
+Package: alsa-utils
+Architecture: amd64
+Version: 1.2.15.2-1ubuntu1
+Multi-Arch: foreign
+Priority: optional
+Section: sound
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian ALSA Maintainers
+Installed-Size: 2752
+Provides: audio-mixer
+Depends: kmod (>= 17-1~), libasound2t64 (>= 1.2.15), libatopology2t64 (>= 1.2.2), libc6 (>= 2.38), libfftw3-single3 (>= 3.3.10), libncursesw6 (>= 6), libsamplerate0 (>= 0.1.7), libtinfo6 (>= 6)
+Suggests: dialog
+Filename: pool/alsa-utils_1.2.15.2-1ubuntu1_amd64.deb
+Size: 1217576
+MD5sum: 41c9f8bc0f7f625032b64022fda1fae8
+SHA1: 99e5c5946b4e6aca00985bad7f3e838aff484053
+SHA256: d24c8b4b7155fe184873a808482f317c23fa8858e36cf9712235c9accdd43884
+SHA512: 8f59f94338198269f157b59a3fa8642a1889e304da5853b29af74fb5f272d80ec04124594ea516ee9994eff32a790a42b5fb954395f8b1a4444d7cfcc7dccf12
+Homepage: https://www.alsa-project.org/
+Description: Utilities for configuring and using ALSA
+ Included tools:
+ - alsactl: advanced controls for ALSA sound drivers
+ - alsaloop: create loopbacks between PCM capture and playback devices
+ - alsamixer: curses mixer
+ - alsaucm: alsa use case manager
+ - amixer: command line mixer
+ - amidi: read from and write to ALSA RawMIDI ports
+ - aplay, arecord: command line playback and recording
+ - aplaymidi, arecordmidi: command line MIDI playback and recording
+ - aconnect, aseqnet, aseqdump: command line MIDI sequencer control
+ - iecset: set or dump IEC958 status bits
+ - speaker-test: speaker test tone generator
+ .
+ ALSA is the Advanced Linux Sound Architecture.
+
+Package: anacron
+Architecture: amd64
+Version: 2.3-45ubuntu1
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Lance Lin
+Installed-Size: 99
+Depends: libc6 (>= 2.38)
+Recommends: cron | cron-daemon
+Suggests: default-mta | mail-transport-agent, rsyslog | system-log-daemon, powermgmt-base
+Filename: pool/anacron_2.3-45ubuntu1_amd64.deb
+Size: 29528
+MD5sum: f1b7f18e85d50657716f4c2bda414a0c
+SHA1: c5d75a9d7a774c2a18fb9c572799a79ab331acd9
+SHA256: 243d09f952b9d9d83f0717e1ad2b41436e99b4352e79eb94d791483740e05189
+SHA512: 37ae1e95407eb18e066dbe815be3eb58f307ff743f8063ccda91eb8df6f20a35b8eb2021037e50a1963033f5c80b5e1564cce5165d883e956b22f33379a05cd7
+Homepage: http://sourceforge.net/projects/anacron/
+Description: cron-like program that doesn't go by time
+ Anacron (like "anac(h)ronistic") is a periodic command scheduler. It
+ executes commands at intervals specified in days. Unlike cron, it
+ does not assume that the system is running continuously. It can
+ therefore be used to control the execution of daily, weekly, monthly,
+ and yearly jobs (or anything with a period of n days), on systems that
+ don't run 24 hours a day. When installed and configured properly,
+ Anacron will make sure that the commands are run at the specified
+ intervals as closely as machine uptime permits.
+ .
+ This package is pre-configured to execute the daily jobs of the
+ Debian system. You should install this program if your system isn't
+ powered on 24 hours a day to make sure the maintenance jobs of other
+ Debian packages are executed each day.
+
+Package: apparmor
+Architecture: amd64
+Version: 5.0.2-0ubuntu1~26.04.1
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian AppArmor Team
+Installed-Size: 2456
+Depends: debconf, debconf (>= 0.5) | debconf-2.0, libapparmor1 (>= 5.0.1), libc6 (>= 2.38), libgcc-s1 (>= 3.3.1), libstdc++6 (>= 14), libzstd1 (>= 1.5.5)
+Suggests: apparmor-profiles-extra, apparmor-utils
+Breaks: apparmor-profiles-extra (<< 1.21), fcitx-data (<< 1:4.2.9.1-1ubuntu2), snapd (<< 2.44.3+20.04~)
+Replaces: fcitx-data (<< 1:4.2.9.1-1ubuntu2)
+Filename: pool/apparmor_5.0.2-0ubuntu1~26.04.1_amd64.deb
+Size: 379516
+MD5sum: 0d3f28acb16ab74c429506d713cb6be0
+SHA1: f3276738467fb911e6819480a17dcc7d34258152
+SHA256: 8621170a44534ef32ab4f7e26a5cacabb2077a5a95bcb5236c0652f118032820
+SHA512: cb462837eaa34dfbbd5e2bff0b97a8687285fdc947379896b0405db3e94ed4e99c795e10da87eb424742ec197a70afdf38d61776f645feb9127af9d9b0cf376c
+Homepage: https://apparmor.net/
+Description: user-space parser utility for AppArmor
+ apparmor provides the system initialization scripts needed to use the
+ AppArmor Mandatory Access Control system, including the AppArmor Parser
+ which is required to convert AppArmor text profiles into machine-readable
+ policies that are loaded into the kernel for use with the AppArmor Linux
+ Security Module.
+
+Package: apport
+Architecture: all
+Version: 2.34.1-0ubuntu0.1
+Priority: optional
+Section: utils
+Maintainer: Ubuntu Developers
+Installed-Size: 640
+Depends: apport-core-dump-handler | python3-systemd, apport-core-dump-handler | python3-zstandard, apport-core-dump-handler | systemd-coredump, gir1.2-glib-2.0 (>= 1.29.17), python3, python3-apport (>= 2.34.1-0ubuntu0.1), python3-gi, sensible-utils
+Recommends: apport-symptoms, python3-systemd
+Suggests: apport-gtk | apport-kde, pkexec, polkitd
+Breaks: python-apport (<< 2.2-0ubuntu1)
+Replaces: python-apport (<< 2.2-0ubuntu1)
+Filename: pool/apport_2.34.1-0ubuntu0.1_all.deb
+Size: 83878
+MD5sum: cce9d9b2e6eeb29c57bfefd0923f0fda
+SHA1: 43197abfc35151753a951225b1fc6630ce537f74
+SHA256: f9daec86d175e75040b9723fad22ce54d1ccec9d0a00829ab3e8a7f4add603a9
+SHA512: ccb75393c130197916c4afcc8dd85395717e3211e861b174f5293d32c8fb7a939472a92fd933deb4c0269313658e6c18b7aa58e290d5ac7bd930da6acbc7f13c
+Homepage: https://wiki.ubuntu.com/Apport
+Description: automatically generate crash reports for debugging
+ apport automatically collects data from crashed processes and
+ compiles a problem report in /var/crash/. This utilizes the crashdump
+ helper hook provided by the Ubuntu kernel.
+ .
+ This package also provides a command line frontend for browsing and
+ handling the crash reports. For desktops, you should consider
+ installing the GTK+ or Qt user interface (apport-gtk or apport-kde).
+
+Package: apport-core-dump-handler
+Architecture: all
+Version: 2.34.1-0ubuntu0.1
+Priority: optional
+Section: utils
+Source: apport
+Maintainer: Ubuntu Developers
+Installed-Size: 28
+Provides: core-dump-handler
+Depends: apport (>= 2.27.0-0ubuntu7~)
+Conflicts: core-dump-handler
+Breaks: apport (<< 2.27.0-0ubuntu7~)
+Replaces: apport (<< 2.27.0-0ubuntu7~), core-dump-handler
+Filename: pool/apport-core-dump-handler_2.34.1-0ubuntu0.1_all.deb
+Size: 9674
+MD5sum: 82320924f7528d59fbd4291cf080ec51
+SHA1: 8f058188c34f47436fb7e57d5196793f9bc50a57
+SHA256: 7a52cb6a63084a6bc4b3cbdcb966323027209dbe62ff868c4235713aae96104c
+SHA512: 5adb5475bd6632ffe61d89438043b039a46e1a6ff44977aeb1863ea8039dd19462640ecece55ebcbb972ee71cdd656cfd0e6608d3a7093bcf9047d754b7aa399
+Homepage: https://wiki.ubuntu.com/Apport
+Description: Kernel core dump handler for Apport
+ apport automatically collects data from crashed processes and
+ compiles a problem report in /var/crash/. This utilizes the crashdump
+ helper hook provided by the Ubuntu kernel.
+ .
+ This package provides the service that configures the kernel (via
+ /proc/sys/kernel/core_pattern) to forward the crash dumps to apport.
+
+Package: apport-gtk
+Architecture: all
+Version: 2.34.1-0ubuntu0.1
+Priority: optional
+Section: gnome
+Source: apport
+Maintainer: Ubuntu Developers
+Installed-Size: 69
+Depends: apport (>= 0.41), gir1.2-gtk-3.0 (>= 3.1.90), gir1.2-wnck-3.0, gnome-terminal | x-terminal-emulator, procps, python3, python3-apport (>= 2.34.1-0ubuntu0.1), python3-gi, whoopsie-preferences
+Recommends: gdb | gdb-minimal, update-notifier
+Filename: pool/apport-gtk_2.34.1-0ubuntu0.1_all.deb
+Size: 9852
+MD5sum: f7d96b3d7d98044f1cff59fff1ea9cf8
+SHA1: 2850390894776d57108d1149e2f4d6d2a7afa59a
+SHA256: 38cd5d6f4a1fe3f77b517ee32f06a0fd10c140fb1f8ca65e664aca023179d9d2
+SHA512: 9ba9e12e39a305f88024165e7ffa812dc6ae59ead548b7397cb134d80f586c9724209f834a8a2b8dc8840829652c0717ea3d387fb26f15bb7ff0fc572a59799f
+Homepage: https://wiki.ubuntu.com/Apport
+Description: GTK+ frontend for the apport crash report system
+ apport automatically collects data from crashed processes and
+ compiles a problem report in /var/crash/. This utilizes the crashdump
+ helper hook provided by the Ubuntu kernel.
+ .
+ This package provides a GTK+ frontend for browsing and handling the
+ crash reports.
+
+Package: apport-symptoms
+Architecture: all
+Version: 0.25build1
+Priority: optional
+Section: utils
+Maintainer: Ubuntu Developers
+Installed-Size: 60
+Recommends: apport
+Filename: pool/apport-symptoms_0.25build1_all.deb
+Size: 13038
+MD5sum: dc8c4dd5b47ba8439669dd8ed1c0f76c
+SHA1: 791930d29eae1a9fa0a63f7e8520c150128f4e5a
+SHA256: 4d84a8ade9b48c128e53cfd871a254104b4d0c443837642a6bf5817f5b8f77ba
+SHA512: 2481aced394a2dc983e07a4a05772b860ead323f17cca9cc1ee0334c5ab6318da785db7b16fec6c46b96f690275a2c84f43930ac150df795ac6aaee3e8be0e90
+Homepage: https://wiki.ubuntu.com/Apport
+Description: symptom scripts for apport
+ Apport intercepts program crashes, collects debugging information about the
+ crash and the operating system environment, and sends it to bug trackers in a
+ standardized form. It also offers the user to report a bug about a package,
+ with again collecting as much information about it as possible.
+ .
+ This package extends Apport by some "symptom" scripts, so that bug reporters
+ do not have to guess the correct package, but report problems based on
+ symptoms that they have (like "sound problem"), through an interactive process.
+
+Package: appstream
+Architecture: amd64
+Version: 1.1.2-1
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Matthias Klumpp
+Installed-Size: 352
+Depends: shared-mime-info, libappstream5 (>= 1.0.0), libc6 (>= 2.34), libglib2.0-0t64 (>= 2.76.0)
+Suggests: apt-config-icons
+Filename: pool/appstream_1.1.2-1_amd64.deb
+Size: 72440
+MD5sum: 805ca5f98a56517faf06f78a68b52528
+SHA1: 7b23a2cc889c01b52fcdf766926c785e37948c9b
+SHA256: a4b97af1709a6809619afeb18b73a15100e70b0683544027ca1ba8f0655b8643
+SHA512: a2af44f2692c0b2f722c3e33695853f818b93f09325e61e7b2862fb4889d0a3ff6666f4014cc7359e183f4b4339312a5ea7b4efa541aa5710e97ccce0638e793
+Homepage: https://www.freedesktop.org/wiki/Distributions/AppStream/
+Description: Software component metadata management
+ AppStream is a metadata specification which permits software components to
+ provide information about themselves to automated systems and end-users
+ before the software is actually installed.
+ The AppStream project provides facilities to easily access and transform
+ this metadata, as well as a few additional services to allow building
+ feature-rich software centers and similar applications.
+ .
+ This package provides tools to generate, maintain and query the AppStream
+ data pool of installed and available software, and enables integration
+ with the APT package manager.
+ .
+ The 'appstreamcli' tool can be used for accessing the software component
+ pool as well as for working with AppStream metadata directly, including
+ validating it for compliance with the specification.
+
+Package: apt-config-icons
+Architecture: all
+Version: 1.1.2-1
+Multi-Arch: foreign
+Priority: optional
+Section: misc
+Source: appstream
+Maintainer: Ubuntu Developers
+Original-Maintainer: Matthias Klumpp
+Installed-Size: 23
+Depends: appstream
+Filename: pool/apt-config-icons_1.1.2-1_all.deb
+Size: 4328
+MD5sum: 007ad34a84eafe0feefdf815b04bf969
+SHA1: 0115320b544395aa501ec167fbdce38f3500ce7d
+SHA256: 4c8fdfa01d54c5b58d4d0aee2ba4cf54b261b88b9b834ae6d369b41cc06cb7a0
+SHA512: e74641e800f8c602034d81a5bebc3de261f9b90f66f948d7132dc4f41564e39d944741720d131dc1712015af1ebc39673d89d8526dea2a09cb910864d059f11e
+Homepage: https://www.freedesktop.org/wiki/Distributions/AppStream/
+Description: APT configuration snippet to enable icon downloads
+ This package contains an APT configuration snippet that enables the
+ download of an icon tarball containing application icons for display in
+ software centers.
+ Icons get downloaded directly from the archive via regular cache updates,
+ and match the software currently available in the respective archive suites.
+ .
+ This snippet enables icons of the default icon size set in the AppStream
+ specification for software centers, 64x64px. It also enables downloads
+ of smaller 48x48px icons.
+
+Package: apt-config-icons-hidpi
+Architecture: all
+Version: 1.1.2-1
+Multi-Arch: foreign
+Priority: optional
+Section: misc
+Source: appstream
+Maintainer: Ubuntu Developers
+Original-Maintainer: Matthias Klumpp
+Installed-Size: 23
+Depends: apt-config-icons
+Filename: pool/apt-config-icons-hidpi_1.1.2-1_all.deb
+Size: 4252
+MD5sum: 9706f639d83857a8aef4d261f02d3776
+SHA1: ccdedebd5292dc35a73eecdd6cb168f45015da1e
+SHA256: 90d3b2b81892c79e3b3d7ee5fbf6cfccdb38cf9559354ed6b2d438bf537350a9
+SHA512: b9e245237ae1ff22dbff30f465a6aa8a8fac1d8a0ac2758dfb82863ba563e24c4b01fefb41834fcf7322093b4bf70b7b2fed960c19cfd2e21fd52476715b43c8
+Homepage: https://www.freedesktop.org/wiki/Distributions/AppStream/
+Description: APT configuration snippet to enable HiDPI icon downloads
+ This package contains an APT configuration snippet that enables the
+ download of an icon tarball containing application icons for display in
+ software centers.
+ Icons get downloaded directly from the archive via regular cache updates,
+ and match the software currently available in the respective archive suites.
+ .
+ This snippet enables icons in the size of 64x64@2, that are suitable for
+ HiDPI displays.
+
+Package: apt-transport-https
+Architecture: all
+Version: 3.2.0
+Multi-Arch: foreign
+Priority: optional
+Section: oldlibs
+Source: apt
+Maintainer: Ubuntu Developers
+Original-Maintainer: APT Development Team
+Installed-Size: 36
+Depends: apt (>= 1.5~alpha4)
+Filename: pool/apt-transport-https_3.2.0_all.deb
+Size: 3928
+MD5sum: d2415080538340aecfc56a4c5ea90488
+SHA1: d4f38cd0aa1dad7601548b7f61199789b9efa0c1
+SHA256: 1b87f0d3826ddecffd7c584332abc779696855a5c7da114a1778e988e4e664ea
+SHA512: 78290338afbbc780e74a713570d1382e1f79e7be151e28e61e148307953ebbd422fb28b18dadab6cc4d0729d29ca70eede9164dc9c9f3d967d9101984bfc7fbd
+Description: transitional package for https support
+ This is a dummy transitional package - https support has been moved into
+ the apt package in 1.5. It can be safely removed.
+
+Package: aptdaemon
+Architecture: all
+Version: 2.0.2build1
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Julian Andres Klode
+Installed-Size: 156
+Depends: gir1.2-glib-2.0, polkitd | policykit-1, python3-aptdaemon (= 2.0.2build1), python3-gi, python3:any
+Breaks: python3-aptdaemon.pkcompat, software-center (<< 1.1.21)
+Replaces: python3-aptdaemon.pkcompat
+Filename: pool/aptdaemon_2.0.2build1_all.deb
+Size: 12394
+MD5sum: 56b43aa717d75b623ad2fb6bcec74034
+SHA1: 50a9e579c20eab2ec5ce736478361053861c9d1b
+SHA256: f61792620f6b4a59f7ae66cbde2e60aa2e1e43f80acb2d603e1764de851959d7
+SHA512: 86b532dabfc197125f25f98ab2aeb6dbdba0d6108d79b9f687f0868b46a45d9f9178425d2df84ef87e2a763929dcce8888e53e0fe6273a214798abf558271f92
+Homepage: https://launchpad.net/aptdaemon
+Description: transaction based package management service
+ Aptdaemon allows normal users to perform package management tasks, e.g.
+ refreshing the cache, upgrading the system, installing or removing software
+ packages.
+ .
+ Currently it comes with the following main features:
+ .
+ - Programming language independent D-Bus interface, which allows one to
+ write clients in several languages
+ - Runs only if required (D-Bus activation)
+ - Fine grained privilege management using PolicyKit, e.g. allowing all
+ desktop user to query for updates without entering a password
+ - Support for media changes during installation from DVD/CDROM
+ - Support for debconf (Debian's package configuration system)
+ - Support for attaching a terminal to the underlying dpkg call
+ .
+ This package contains the aptd script and all the data files required to run
+ the daemon. Moreover it contains the aptdcon script, which is a command
+ line client for aptdaemon. The API is not stable yet.
+
+Package: aptdaemon-data
+Architecture: all
+Version: 2.0.2build1
+Priority: optional
+Section: admin
+Source: aptdaemon
+Maintainer: Ubuntu Developers
+Original-Maintainer: Julian Andres Klode
+Installed-Size: 459
+Replaces: python-aptdaemon-gtk (<= 0.41+bzr580-0ubuntu1)
+Filename: pool/aptdaemon-data_2.0.2build1_all.deb
+Size: 179964
+MD5sum: 8e4169cdb7a9f83e3cf65d823f1e567b
+SHA1: 2f4e90c7d8c736282e14896baefac293f5d60f9f
+SHA256: 470cc371c84a8d305387c4fe9ea02ce41cffb2a483b947c056a47198d87040b3
+SHA512: 10b6284d107de2f9e08062a9460d76ae4dfe9bbf05ff9a7397629aec981cd2f003a8e645526c0115204c008cabafec95456524f14ee52099f276a30b96e02fb3
+Homepage: https://launchpad.net/aptdaemon
+Description: data files for clients
+ Aptdaemon is a transaction based package management daemon. It allows
+ normal users to perform package management tasks, e.g. refreshing the
+ cache, upgrading the system, installing or removing software packages.
+ .
+ This package provides common data files (e.g. icons) for aptdaemon
+ clients.
+
+Package: aspell
+Architecture: amd64
+Version: 0.60.8.2-3
+Multi-Arch: foreign
+Priority: optional
+Section: text
+Maintainer: Ubuntu Developers
+Original-Maintainer: Agustin Martin Domingo
+Installed-Size: 340
+Provides: aspell-bin
+Depends: libaspell15 (= 0.60.8.2-3), libc6 (>= 2.38), libncursesw6 (>= 6), libstdc++6 (>= 5), libtinfo6 (>= 6), dictionaries-common
+Recommends: aspell-en | aspell-dictionary | aspell6a-dictionary
+Suggests: aspell-doc, spellutils
+Breaks: aspell-bin (<< 0.60.3-2)
+Replaces: aspell-bin (<< 0.60.3-2)
+Filename: pool/aspell_0.60.8.2-3_amd64.deb
+Size: 89708
+MD5sum: 172666cdcfeaa8baa3621bf62023fd89
+SHA1: c23a55361d30a3d272d30aee0c58be27c9dd8143
+SHA256: fc682bc1080e5ceb6ca1e620e817d009bf37d5acae9077cbb834af2d594a6a45
+SHA512: 59a51e8e232be5a21d530e516edcdf5c8efae435798c5b573be5d5e82208e2d9a3cba6561b8cf2c21a87c2854afd055f7d46b5e704c889731480ae95ec5a2d86
+Homepage: http://aspell.net/
+Description: GNU Aspell spell-checker
+ GNU Aspell is a spell-checker which can be used either as a standalone
+ application or embedded in other programs. Its main feature is that it
+ does a much better job of suggesting possible spellings than just about
+ any other spell-checker available for the English language, including
+ Ispell and Microsoft Word. It also has many other technical
+ enhancements over Ispell such as using shared memory for dictionaries
+ and intelligently handling personal dictionaries when more than one
+ Aspell process is open at once.
+ .
+ Aspell is designed to be a drop-in replacement for Ispell.
+
+Package: aspell-en
+Architecture: all
+Version: 2020.12.07-0-1.1build1
+Multi-Arch: foreign
+Priority: optional
+Section: text
+Maintainer: Ubuntu Developers
+Original-Maintainer: Dr. Tobias Quathamer
+Installed-Size: 429
+Provides: aspell-dictionary
+Depends: aspell, dictionaries-common
+Filename: pool/aspell-en_2020.12.07-0-1.1build1_all.deb
+Size: 303032
+MD5sum: 9ed064d6ff53e2f1b079cfc868a38958
+SHA1: 364a5af165792f90c4ce52db269abfdebc29571a
+SHA256: 02e624fc2537d0268330b214039941ff4a41116c89c99b11f7f43110f7bf33ff
+SHA512: ac1a225f9297b1807b037fadc64b6a5e17d4582aaf57647706aee4cf6561deac256f59a3539c15a045d05070df462cfec9190a87eba5c1723daf8e445332e7e4
+Homepage: http://aspell.net/
+Description: English dictionary for GNU Aspell
+ This package contains all the required files to add support for English
+ language to the GNU Aspell spell checker.
+ .
+ American, British, Canadian and Australian spellings are included.
+
+Package: at-spi2-common
+Architecture: all
+Version: 2.60.4-0ubuntu0.1
+Multi-Arch: foreign
+Priority: optional
+Section: misc
+Source: at-spi2-core
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Accessibility Team
+Installed-Size: 52
+Breaks: at-spi2-core (<< 2.46.0-2~)
+Replaces: at-spi2-core (<< 2.46.0-2~)
+Filename: pool/at-spi2-common_2.60.4-0ubuntu0.1_all.deb
+Size: 6604
+MD5sum: 4038f8bc537bbf62cd1b3b22bc799a83
+SHA1: 94a011301f9289483fd9de395ffb3d6c1026ea96
+SHA256: 2ed4e9bf31e9d76c65ec60c79dcdde5be27979b67d7c5e1a8b7d32cc97c82c41
+SHA512: 27af839d811da282d38684cf94c5765ac4b90eac73b149f295475252d323a92a88d88570b72ee3b69cc7b93600d8e2b7866b8cc3d21548b9a102b25233ca395b
+Homepage: https://wiki.gnome.org/Accessibility
+Description: Assistive Technology Service Provider Interface (common files)
+ This package contains the common resource files of GNOME Accessibility.
+
+Package: at-spi2-core
+Architecture: amd64
+Version: 2.60.4-0ubuntu0.1
+Multi-Arch: foreign
+Priority: optional
+Section: misc
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Accessibility Team
+Installed-Size: 182
+Depends: libatspi2.0-0t64 (= 2.60.4-0ubuntu0.1), libc6 (>= 2.38), libdbus-1-3 (>= 1.10), libglib2.0-0t64 (>= 2.80.0), libsystemd0, libx11-6, libxtst6 (>= 2:1.2.5), at-spi2-common, gsettings-desktop-schemas
+Filename: pool/at-spi2-core_2.60.4-0ubuntu0.1_amd64.deb
+Size: 59560
+MD5sum: 43407dc5af14d65f2a6af6b2e62d6cb3
+SHA1: 6bfa9349c6968a171af8f80989346a3721a07375
+SHA256: 8de8d211ef7f517bb2182cf50bd25d36bfce546030f30519ebdfd230612cb209
+SHA512: e6add52375574ab7942bbe444144038d6ca8acd66c69f9b8038bc29f6a6d3756b7653103e8c374235e19a12b15af3b0864c25f96f58f50db4d7f3c0beff75689
+Homepage: https://wiki.gnome.org/Accessibility
+Description: Assistive Technology Service Provider Interface (D-Bus core)
+ This package contains the core components of GNOME Accessibility.
+
+Package: avahi-daemon
+Architecture: amd64
+Version: 0.8-18ubuntu1.1
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: avahi
+Maintainer: Ubuntu Developers
+Original-Maintainer: Utopia Maintenance Team
+Installed-Size: 262
+Depends: libavahi-common3 (= 0.8-18ubuntu1.1), libavahi-core7 (= 0.8-18ubuntu1.1), libc6 (>= 2.38), libcap2 (>= 1:2.10), libdaemon0 (>= 0.14), libdbus-1-3 (>= 1.10), libexpat1 (>= 2.0.1), libsystemd0, adduser, default-dbus-system-bus | dbus-system-bus
+Recommends: libnss-mdns
+Suggests: avahi-autoipd
+Filename: pool/avahi-daemon_0.8-18ubuntu1.1_amd64.deb
+Size: 64024
+MD5sum: edce00d9cf644a314157fe8dc22c32bf
+SHA1: 7a9b643381da88f80f9fea9141b2fdf71a1951d9
+SHA256: 2ee0d3765a2bc7eba82fdb4fe9a1e3d37d4b795276cd9001bdb33d59458d4b40
+SHA512: 9ab6836bc66c43d6abf276e13618ddd89e5958cf3d7330a2726956c77083c042b48a0db2834ba04ba79803d8777f73e34e09fa9cf9988dca8cb7c65aeaba06a1
+Homepage: https://avahi.org/
+Description: Avahi mDNS/DNS-SD daemon
+ Avahi is a fully LGPL framework for Multicast DNS Service Discovery.
+ It allows programs to publish and discover services and hosts
+ running on a local network with no specific configuration. For
+ example you can plug into a network and instantly find printers to
+ print to, files to look at and people to talk to.
+ .
+ This package contains the Avahi Daemon which represents your machine
+ on the network and allows other applications to publish and resolve
+ mDNS/DNS-SD records.
+
+Package: baobab
+Architecture: amd64
+Version: 49.1-2
+Priority: optional
+Section: gnome
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian GNOME Maintainers
+Installed-Size: 876
+Depends: dconf-gsettings-backend | gsettings-backend, libadwaita-1-0 (>= 1.6~beta), libc6 (>= 2.34), libcairo2 (>= 1.2.4), libglib2.0-0t64 (>= 2.80.0), libgraphene-1.0-0 (>= 1.5.4), libgtk-4-1 (>= 4.15.1), libpango-1.0-0 (>= 1.14.0)
+Recommends: yelp
+Filename: pool/baobab_49.1-2_amd64.deb
+Size: 137630
+MD5sum: d68279b6e75e08233deb9c829e9aaf92
+SHA1: c85c0853a04ba94471b684101dcfb90849ab6ba5
+SHA256: 6330bfc7d5b90188e5194f61bb2dd2a1bfef95828347701892b889821f5778e7
+SHA512: ae1d58766b11ae987d858c38a0e47376536ef85e7be39da4e612be974a135cc4a995f825951ec8bca197b1c08eda8dbd3b6a6377703421c4c869a0293e7afa66
+Homepage: https://apps.gnome.org/Baobab/
+Description: GNOME disk usage analyzer
+ Disk Usage Analyzer is a graphical, menu-driven application to analyse
+ disk usage in a GNOME environment. It can easily scan either the whole
+ filesystem tree, or a specific user-requested directory branch (local or
+ remote).
+ .
+ It also auto-detects in real-time any changes made to your home
+ directory as far as any mounted/unmounted device. Disk Usage Analyzer
+ also provides a full graphical treemap window for each selected folder.
+
+Package: bc
+Architecture: amd64
+Version: 1.07.1-4build1
+Multi-Arch: foreign
+Priority: standard
+Section: math
+Maintainer: Ubuntu Developers
+Original-Maintainer: Ryan Kavanagh
+Installed-Size: 211
+Depends: libc6 (>= 2.38), libreadline8t64 (>= 6.0)
+Filename: pool/bc_1.07.1-4build1_amd64.deb
+Size: 86458
+MD5sum: bf9547a6a1404f543f70033eb5f7ec35
+SHA1: f10d4fe8f62e950c91c4adf3b806d025caa113a5
+SHA256: cbc2e84d1f5dfe8debebebf24869988b8cf12151de5a66cce298d3f370dfe919
+SHA512: 5821f5fdcd9b048f2f7b12e740c916c64088583416d68f80598d63dc4cdcfb9b0b6f72f77df3287020c0df63da0286024ded9b91c309e83ac6afeb5fb1a7da00
+Homepage: https://www.gnu.org/software/bc/
+Description: GNU bc arbitrary precision calculator language
+ GNU bc is an interactive algebraic language with arbitrary precision which
+ follows the POSIX 1003.2 draft standard, with several extensions including
+ multi-character variable names, an `else' statement and full Boolean
+ expressions. GNU bc does not require the separate GNU dc program.
+
+Package: bind9-dnsutils
+Architecture: amd64
+Version: 1:9.20.24-1ubuntu0.3
+Multi-Arch: foreign
+Priority: standard
+Section: net
+Source: bind9
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian DNS Team
+Installed-Size: 517
+Provides: dnsutils
+Depends: bind9-host | host, bind9-libs (= 1:9.20.24-1ubuntu0.3), libc6 (>= 2.38), libedit2 (>= 2.11-20080614-0), libidn2-0 (>= 2.0.0), libjemalloc2 (>= 2.1.1), libkrb5-3 (>= 1.6.dfsg.2)
+Filename: pool/bind9-dnsutils_1%3a9.20.24-1ubuntu0.3_amd64.deb
+Size: 163510
+MD5sum: 8dd59423f3a85ad60620be4bb0a7d1d9
+SHA1: 31f4064b781077d5cb2a137b6e3f909800c77bcc
+SHA256: e149f6d40e29b4915b237aed92ba972c6c5ff565a056066e7fd5d20204cca832
+SHA512: d2868182ee1de4a019f3a53ab6798fe15b9299d4d85c8e3066bd35d67b184edfc5914410f584767d95b26837a141c772910b3ce81c9efb54b667b0071a4b59f7
+Homepage: https://www.isc.org/downloads/bind/
+Description: Clients provided with BIND 9
+ The Berkeley Internet Name Domain (BIND 9) implements an Internet domain
+ name server. BIND 9 is the most widely-used name server software on the
+ Internet, and is supported by the Internet Software Consortium, www.isc.org.
+ .
+ This package delivers various client programs related to DNS that are
+ derived from the BIND 9 source tree.
+ .
+ - dig - query the DNS in various ways
+ - nslookup - the older way to do it
+ - nsupdate - perform dynamic updates (See RFC2136)
+
+Package: bind9-host
+Architecture: amd64
+Version: 1:9.20.24-1ubuntu0.3
+Multi-Arch: foreign
+Priority: standard
+Section: net
+Source: bind9
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian DNS Team
+Installed-Size: 141
+Provides: host
+Depends: bind9-libs (= 1:9.20.24-1ubuntu0.3), libc6 (>= 2.38), libidn2-0 (>= 2.0.0)
+Breaks: bind-host (<< 1:9.13.6~)
+Replaces: bind-host (<< 1:9.13.6~)
+Filename: pool/bind9-host_1%3a9.20.24-1ubuntu0.3_amd64.deb
+Size: 49658
+MD5sum: 456a590a551f18b87894a41184efba00
+SHA1: 96272193a812155c918273d6d3d25cc2283400f7
+SHA256: 0506d3148a63e5fd2ca3df54a6024fb275d4cdc179f431afd89afbcc3d201910
+SHA512: e380b1deffc4dbe2f88cb77dfcf59773ab03c0a389677ec9a6513d896aec2bbf5f72baf7fd6c1af40b73b780a1663e6ca93507685aa77340fabf3b3f59093cde
+Homepage: https://www.isc.org/downloads/bind/
+Description: DNS Lookup Utility
+ This package provides the 'host' DNS lookup utility in the form that
+ is bundled with the BIND 9 sources.
+
+Package: bind9-libs
+Architecture: amd64
+Version: 1:9.20.24-1ubuntu0.3
+Multi-Arch: same
+Priority: standard
+Section: libs
+Source: bind9
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian DNS Team
+Installed-Size: 3530
+Depends: libc6 (>= 2.38), libgssapi-krb5-2 (>= 1.17), libjemalloc2 (>= 4.0.0), libjson-c5 (>= 0.15), libkrb5-3 (>= 1.6.dfsg.2), liblmdb0 (>= 0.9.7), libmaxminddb0 (>= 1.3.0), libnghttp2-14 (>= 1.12.0), libssl3t64 (>= 3.4.0), liburcu8t64 (>= 0.13.0), libuv1t64 (>= 1.38.0), libxml2-16 (>= 2.14.1), zlib1g (>= 1:1.1.4)
+Breaks: bind-libs (<< 1:9.13.6~)
+Replaces: bind-libs (<< 1:9.13.6~)
+Filename: pool/bind9-libs_1%3a9.20.24-1ubuntu0.3_amd64.deb
+Size: 1312808
+MD5sum: 75ecee0b571a4fbd7c0c17fc4022121e
+SHA1: 0938aee91e7a8288a77b73da7138870c4c393058
+SHA256: 7b0826714aea9c412452d0e7c310218e0dd6114e763fc6f1b9e90d1091dd3547
+SHA512: 69b8de12f3e4e806cf47e1ff4f812f5c025ac1f75a25d0dae34db93acd6a6480376f3360d16c14e6323070f8afa2f4ac876b9f9b00ab69ef2975aea4dd2884e3
+Homepage: https://www.isc.org/downloads/bind/
+Description: Shared Libraries used by BIND 9
+ The Berkeley Internet Name Domain (BIND 9) implements an Internet domain
+ name server. BIND 9 is the most widely-used name server software on the
+ Internet, and is supported by the Internet Software Consortium, www.isc.org.
+ .
+ This package contains a bundle of shared libraries used by BIND 9.
+
+Package: binutils
+Architecture: amd64
+Version: 2.46-3ubuntu2
+Priority: optional
+Section: devel
+Maintainer: Ubuntu Developers
+Original-Maintainer: Matthias Klose
+Installed-Size: 1150
+Provides: elf-binutils
+Depends: libbinutils (= 2.46-3ubuntu2), libc6 (>= 2.38), libgcc-s1 (>= 3.0), libgprofng0 (>= 2.45.50), libstdc++6 (>= 13.1), binutils-common (= 2.46-3ubuntu2), binutils-x86-64-linux-gnu (= 2.46-3ubuntu2)
+Suggests: binutils-doc (>= 2.46-3ubuntu2), gprofng-gui, binutils-gold
+Conflicts: binutils-mingw-w64-i686 (<< 2.23.52.20130612-1+3), binutils-mingw-w64-x86-64 (<< 2.23.52.20130612-1+3), binutils-multiarch (<< 2.27-8), modutils (<< 2.4.19-1)
+Breaks: binutils-aarch64-linux-gnu (<< 2.43.90), binutils-i686-linux-gnu (<< 2.43.90), binutils-riscv64-linux-gnu (<< 2.43.90), binutils-x86-64-linux-gnu (<< 2.43.90), libc6-dev (<< 2.42-2ubuntu4)
+Replaces: binutils-aarch64-linux-gnu (<< 2.43.90), binutils-common (<< 2.43.90), binutils-i686-linux-gnu (<< 2.43.90), binutils-riscv64-linux-gnu (<< 2.43.90), binutils-x86-64-linux-gnu (<< 2.43.90)
+Filename: pool/binutils_2.46-3ubuntu2_amd64.deb
+Size: 224544
+MD5sum: 4d502fcb112601b6c9ee161abe58be92
+SHA1: 4d3b67c256691c950eb0a729ab33002094bee3cd
+SHA256: d14fc7bf644b495083f77c99ff168f1a2215c8b3b7ad5202e0345dc1092002b0
+SHA512: 01b80afdbd3ad15b3f0c9bd42d6a87131fbe424f8ab11045fa89dccea91f35589863f33e9b287b469d77d86189a24ebd43183b22ed396d1554ad4cd8953fa382
+Homepage: https://www.gnu.org/software/binutils/
+Description: GNU assembler, linker and binary utilities
+ The programs in this package are used to assemble, link and manipulate
+ binary and object files. They may be used in conjunction with a compiler
+ and various libraries to build programs.
+
+Package: binutils-common
+Architecture: amd64
+Version: 2.46-3ubuntu2
+Multi-Arch: same
+Priority: optional
+Section: devel
+Source: binutils
+Maintainer: Ubuntu Developers
+Original-Maintainer: Matthias Klose
+Installed-Size: 532
+Breaks: binutils (<< 2.38.50.20220527-2), binutils-multiarch (<< 2.38.50.20220527-2)
+Replaces: binutils (<< 2.38.50.20220527-2), binutils-multiarch (<< 2.38.50.20220527-2)
+Filename: pool/binutils-common_2.46-3ubuntu2_amd64.deb
+Size: 221612
+MD5sum: 4a4945a63f96a6c145d33bae0c9bfa7a
+SHA1: 7baef0b7bf5e99a6932af03dac6eff7cb94a8087
+SHA256: 3c846f001d87b16e5038a3919ca975276808a2db17459308a9d0f965c1cddac5
+SHA512: 040d0fd46db6f74805a8e1fcb3b3cbfb167e5e66ed76c8e0d9434a11eebeb21a596f97df483d2ce28011f7b0be31f789d07c2dbbe348c4ac59f3ea6866fff9bf
+Homepage: https://www.gnu.org/software/binutils/
+Description: Common files for the GNU assembler, linker and binary utilities
+ This package contains the localization files used by binutils packages for
+ various target architectures and parts of the binutils documentation. It is
+ not useful on its own.
+
+Package: binutils-x86-64-linux-gnu
+Architecture: amd64
+Version: 2.46-3ubuntu2
+Multi-Arch: allowed
+Priority: optional
+Section: devel
+Source: binutils
+Maintainer: Ubuntu Developers
+Original-Maintainer: Matthias Klose
+Installed-Size: 6109
+Depends: binutils-common (= 2.46-3ubuntu2), libbinutils (= 2.46-3ubuntu2), libc6 (>= 2.38), libctf-nobfd0 (>= 2.36), libctf0 (>= 2.36), libjansson4 (>= 2.14), libsframe3 (>= 2.45.50), libzstd1 (>= 1.5.5), zlib1g (>= 1:1.1.4)
+Suggests: binutils-doc (= 2.46-3ubuntu2)
+Breaks: binutils (<< 2.29-6), binutils-dev (<< 2.38.50.20220609-2)
+Replaces: binutils (<< 2.29-6), binutils-dev (<< 2.38.50.20220609-2)
+Filename: pool/binutils-x86-64-linux-gnu_2.46-3ubuntu2_amd64.deb
+Size: 1150176
+MD5sum: aed2ce183c049598d07b44fa25b71a32
+SHA1: d4244b9992f4455fc8a351297d9dba9cd7c9eead
+SHA256: 91fa094c31783f7ccf0f0df8ed06447655c40476ba61fc95dbd245a313f8171e
+SHA512: 64fbe100e6c2e6ad1ed3328f12233a514408eafd50d2fab16fadf759e1544fd0bd1bf5bdecf2db54873fc4bb443c853e5fbec07b16441166f9cc024135b9dd7b
+Homepage: https://www.gnu.org/software/binutils/
+Description: GNU binary utilities, for x86-64-linux-gnu target
+ This package provides GNU assembler, linker and binary utilities
+ for the x86-64-linux-gnu target.
+ .
+ You don't need this package unless you plan to cross-compile programs
+ for x86-64-linux-gnu and x86-64-linux-gnu is not your native
+ platform.
+
+Package: bluez
+Architecture: amd64
+Version: 5.85-4ubuntu0.2
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Bluetooth Maintainers
+Installed-Size: 4899
+Depends: default-dbus-system-bus | dbus-system-bus, kmod, udev, systemd | systemd-standalone-sysusers | systemd-sysusers, libasound2t64 (>= 1.0.17), libc6 (>= 2.42), libdbus-1-3 (>= 1.10), libdw1t64 (>= 0.127), libglib2.0-0t64 (>= 2.76.0), libreadline8t64 (>= 7.0~rc1), libudev1 (>= 196)
+Suggests: pulseaudio-module-bluetooth
+Filename: pool/bluez_5.85-4ubuntu0.2_amd64.deb
+Size: 1550492
+MD5sum: c05dae64656ba5b7d1b90d81c3091750
+SHA1: 96d57fbba6a7f801ffa098c228a6033abd198f87
+SHA256: 3d10739644e47a795ca5605b8693f9821b0812c28daf95b11aa2d1f12d567d08
+SHA512: 38d8c8177a0c78e53e7f590839d3560e939c86688a338779752ff892fb087135b53f19b543ce533d703f6b8271d5ea956da668706186fe84d049bb4e81468f61
+Homepage: http://www.bluez.org
+Description: Bluetooth tools and daemons
+ This package contains tools and system daemons for using Bluetooth devices.
+ .
+ BlueZ is the official Linux Bluetooth protocol stack. It is an Open Source
+ project distributed under GNU General Public License (GPL).
+
+Package: bluez-cups
+Architecture: amd64
+Version: 5.85-4ubuntu0.2
+Priority: optional
+Section: admin
+Source: bluez
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Bluetooth Maintainers
+Installed-Size: 85
+Depends: cups, libc6 (>= 2.38), libdbus-1-3 (>= 1.10), libglib2.0-0t64 (>= 2.12.0)
+Filename: pool/bluez-cups_5.85-4ubuntu0.2_amd64.deb
+Size: 27846
+MD5sum: badd42475882107ae17ddfa1bf970353
+SHA1: caac7f77790dc53cd59ecdc6989c4d96c5d48f84
+SHA256: 9204262033d802191aecee9f47c3d970c7147ea846bbd22f609c0793ce51ab7a
+SHA512: 8388d5b7cf56896bdf96a76ce640cdd2f169604e6d98a3e482c8bf926c78a54ca0707730f39ca00a442d5d6f3b5beac0ce2fec49ef3074108e1256752fba3a2f
+Homepage: http://www.bluez.org
+Description: Bluetooth printer driver for CUPS
+ This package contains a driver to let CUPS print to Bluetooth-connected
+ printers.
+ .
+ BlueZ is the official Linux Bluetooth protocol stack. It is an Open Source
+ project distributed under GNU General Public License (GPL).
+
+Package: bluez-obexd
+Architecture: amd64
+Version: 5.85-4ubuntu0.2
+Priority: optional
+Section: admin
+Source: bluez
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Bluetooth Maintainers
+Installed-Size: 727
+Depends: libc6 (>= 2.38), libdbus-1-3 (>= 1.10), libebook-1.2-21t64 (>= 3.17), libebook-contacts-1.2-4t64 (>= 3.16.2), libedataserver-1.2-27t64 (>= 3.17), libglib2.0-0t64 (>= 2.78.0), libsystemd0
+Recommends: dbus-user-session
+Suggests: evolution-data-server
+Filename: pool/bluez-obexd_5.85-4ubuntu0.2_amd64.deb
+Size: 243752
+MD5sum: 6209be33e5d7ca6ec413584918c4d589
+SHA1: c97b62bf3300bb377e5f3f213d0da2a9f2226dae
+SHA256: 287ddfddf6074fb4dd4586e474bec54d7cccebc77dd2933b193dfcd125cbf1d3
+SHA512: e8bc9d82febd06066ecc773a4497b41e6db0583737ba75a086356fc00c913c13075433a8d849116e33c0330734d4e82bf32b28dcdf04a6b34422b34061ac4cc5
+Homepage: http://www.bluez.org
+Description: bluez obex daemon
+ This package contains a OBEX(OBject EXchange) daemon.
+ .
+ OBEX is communication protocol to facilitate the exchange of the binary
+ object between the devices.
+ .
+ This was the software that is independent as obexd, but this has been
+ integrated into BlueZ from BlueZ 5.0.
+ .
+ BlueZ is the official Linux Bluetooth protocol stack. It is an Open Source
+ project distributed under GNU General Public License (GPL).
+
+Package: bolt
+Architecture: amd64
+Version: 0.9.10-1
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian freedesktop.org maintainers
+Installed-Size: 454
+Depends: libc6 (>= 2.38), libglib2.0-0t64 (>= 2.80.0), libpolkit-gobject-1-0 (>= 0.99), libudev1 (>= 183)
+Filename: pool/bolt_0.9.10-1_amd64.deb
+Size: 142144
+MD5sum: 890de3709120c2e2e67d60ea1183a4cc
+SHA1: 87648b64d6aa3bb2e94da0f8f5ff96bade932318
+SHA256: 2a91d14abab644e9bb7f0250459e6f5b5c75b109b9244cd12282c753a5d42c1f
+SHA512: 7c2f65c35553c8e6b573e042d77f77681d7197e33a79989ef48861443002e460589d0eb082363faeae72a376c2579c915fb39b271037ab42f8ba4b2e598d9a08
+Homepage: https://gitlab.freedesktop.org/bolt/bolt
+Description: system daemon to manage thunderbolt 3 devices
+ Thunderbolt 3 features different security modes that require
+ devices to be authorized before they can be used. The D-Bus API can be
+ used to list devices, enroll them (authorize and store them in the
+ local database) and forget them again (remove previously enrolled
+ devices). It also emits signals if new devices are connected (or
+ removed). During enrollment devices can be set to be automatically
+ authorized as soon as they are connected. A command line tool, called
+ boltctl, can be used to control the daemon and perform all the above
+ mentioned tasks.
+
+Package: brltty
+Architecture: amd64
+Version: 6.7-1ubuntu6
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Accessibility Team
+Installed-Size: 10332
+Depends: libasound2t64 (>= 1.0.16), libbluetooth3 (>= 4.91), libbrlapi0.8 (>= 6.7), libc6 (>= 2.42), libcap2 (>= 1:2.10), libdbus-1-3 (>= 1.10), libexpat1 (>= 2.0.1), libglib2.0-0t64 (>= 2.76.0), libgpm2 (>= 1.20.7), libicu78 (>= 78.1-1~), liblouis20 (>= 3.36.0), libncursesw6 (>= 6), libpcre2-32-0 (>= 10.22), libpolkit-gobject-1-0 (>= 0.101), libsystemd0, libtinfo6 (>= 6), polkitd | policykit-1
+Recommends: python3
+Suggests: brltty-speechd, brltty-x11, console-braille, unicode-cldr-core
+Replaces: libbrlapi1 (<< 3.7.2-7.1)
+Filename: pool/brltty_6.7-1ubuntu6_amd64.deb
+Size: 1654728
+MD5sum: a987e95dd3c784afc9cf8ae57029b546
+SHA1: 713686084467c4c5252b02658bead8197b2c0369
+SHA256: 81b7adffacea9ecf86cab24b66fd0b2bc0f7272106afa285c4b6e3f8891c45d8
+SHA512: eb7176eeba5b1c783378d1a8cbb0b7b32660f9953322558188c192183c1cdad0ed60ff4e108343d63e76f69d6bb28b42fbd704254b29d71a52d495599f67761b
+Homepage: https://brltty.com
+Description: Access software for a blind person using a braille display
+ BRLTTY is a daemon which provides access to the console (text mode)
+ for a blind person using a braille display. It drives the braille
+ display and provides complete screen review functionality.
+ The following display models are supported:
+ * Alva/Optelec (ABT3xx, Delphi, Satellite, Braille System 40, BC 640/680)
+ * Baum
+ * BrailComm
+ * BrailleLite
+ * BrailleNote
+ * Cebra
+ * EcoBraille
+ * EuroBraille (AzerBraille, Clio, Esys, Iris, NoteBraille, Scriba)
+ * Freedom Scientific (Focus and PacMate)
+ * Handy Tech
+ * HIMS (Braille Sense, SyncBraille)
+ * HumanWare (Brailliant)
+ * Iris
+ * LogText 32
+ * MDV
+ * Metec (BD-40)
+ * NinePoint
+ * Papenmeier
+ * Pegasus
+ * Seika
+ * Tieman (Voyager, CombiBraille, MiniBraille, MultiBraille,
+ BraillePen/EasyLink)
+ * Tivomatic (Albatross)
+ * TSI (Navigator, PowerBraille)
+ * VideoBraille
+ * VisioBraille
+ .
+ BRLTTY also provides a client/server based infrastructure for applications
+ wishing to utilize a Braille display. The daemon process listens for incoming
+ TCP/IP connections on a certain port. A shared object library for clients is
+ provided in the package libbrlapi0.8. A static library, header files and
+ documentation is provided in package libbrlapi-dev. Bindings to other
+ programming languages can be found in cl-brlapi (Lisp), libbrlapi-java (Java)
+ and python3-brlapi (Python).
+
+Package: bsdextrautils
+Architecture: amd64
+Version: 2.41.3-3ubuntu2.2
+Multi-Arch: foreign
+Priority: optional
+Section: utils
+Source: util-linux
+Maintainer: Ubuntu Developers
+Original-Maintainer: Chris Hofstaedtler
+Installed-Size: 285
+Depends: libc6 (>= 2.38), libsmartcols1 (= 2.41.3-3ubuntu2.2), libtinfo6 (>= 6)
+Breaks: bsdmainutils (<< 12.1.3), util-linux (<< 2.41.2-2~)
+Replaces: bsdmainutils (<< 12.1.3), util-linux (<< 2.41.2-2~)
+Filename: pool/bsdextrautils_2.41.3-3ubuntu2.2_amd64.deb
+Size: 86650
+MD5sum: 96d6f317e6e39eb96086215110bea895
+SHA1: 9782af97509cefe727866ae59cab0ea6630e2205
+SHA256: a711db104cbae55b4b4bdbc646111b819164446c6762826d8a39983635729603
+SHA512: e34eaacb60b8a4ed3452a68d62b26a9bd0e19b2bf80ed4dd41030ea2ab9d8847b55ecf9aff84271a60ff3240a82fdfc0a741a74f581bbbacf1ed69b737288396
+Homepage: https://github.com/util-linux/util-linux
+Description: extra utilities from 4.4BSD-Lite
+ This package contains some extra BSD utilities: col, colcrt, colrm, column,
+ hd, hexdump, look, rev, ul.
+ Other BSD utilities are provided by bsdutils and calendar.
+
+Package: bubblewrap
+Architecture: amd64
+Version: 0.11.1-1ubuntu0.1
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Utopia Maintenance Team
+Installed-Size: 133
+Depends: libc6 (>= 2.38), libcap2 (>= 1:2.10), libselinux1 (>= 3.1~)
+Filename: pool/bubblewrap_0.11.1-1ubuntu0.1_amd64.deb
+Size: 50806
+MD5sum: f81933e1f30821aad1bf079f500b0659
+SHA1: d819730ad8554be4426f741f2e8909b0f2d30001
+SHA256: b353088d1003adb3f760deeccfb84c47928a36c8dc102bf680efc94eb19f4408
+SHA512: d801b63aab8d38e4485805fc41ad5e96ecf5b9bfcfcc08941dae8caeedb87bf894fbd8939e01804158bf5501a5f8347d45049b56655ce88db4e9e57754192481
+Homepage: https://github.com/containers/bubblewrap
+Description: utility for unprivileged chroot and namespace manipulation
+ bubblewrap uses Linux namespaces to launch unprivileged containers.
+ These containers can be used to sandbox semi-trusted applications such
+ as Flatpak apps, image/video thumbnailers and web browser components,
+ or to run programs in a different library stack such as a Flatpak runtime
+ or a different Debian release.
+ .
+ By default, this package relies on a kernel with user namespaces enabled.
+ Official Debian and Ubuntu kernels are suitable.
+ .
+ On kernels without user namespaces, system administrators can make the
+ bwrap executable setuid root, allowing it to create unprivileged
+ containers even though ordinary user processes cannot.
+
+Package: busybox-initramfs
+Architecture: amd64
+Version: 1:1.37.0-7ubuntu1
+Priority: optional
+Section: shells
+Source: busybox
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Install System Team
+Installed-Size: 351
+Depends: libc6 (>= 2.42)
+Filename: pool/busybox-initramfs_1%3a1.37.0-7ubuntu1_amd64.deb
+Size: 190892
+MD5sum: c74beea2aef9c4411704a0d727df93d7
+SHA1: 1c074e51d398c45dbff6889cd0ef945fd13ad227
+SHA256: ce2e5af197a7e16931a32470beec9750e6f6c3cb1b1572c936aec0638a6503a2
+SHA512: 5c01f9a8d2be29a784c88ded1d910924c138ff301c253f1174ec2cf1f88f5c883ed8cd2f03c6f68d55444c2f26539f1da3daaaf12a2d3421fd9ca6f08906e249
+Homepage: http://www.busybox.net
+Description: Standalone shell setup for initramfs
+ BusyBox combines tiny versions of many common UNIX utilities into a single
+ small executable. It provides minimalist replacements for the most common
+ utilities you would usually find on your desktop system (i.e., ls, cp, mv,
+ mount, tar, etc.). The utilities in BusyBox generally have fewer options than
+ their full-featured GNU cousins; however, the options that are included
+ provide the expected functionality and behave very much like their GNU
+ counterparts.
+ .
+ busybox-initramfs provides a simple stand alone shell that provides
+ only the basic utilities needed for the initramfs.
+
+Package: busybox-static
+Architecture: amd64
+Version: 1:1.37.0-7ubuntu1
+Built-Using: glibc (= 2.42-2ubuntu4)
+Priority: optional
+Section: shells
+Source: busybox
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Install System Team
+Installed-Size: 2188
+Provides: busybox
+Conflicts: busybox
+Replaces: busybox
+Filename: pool/busybox-static_1%3a1.37.0-7ubuntu1_amd64.deb
+Size: 1033568
+MD5sum: c769d47dcf081de11e94e0e86a02cd78
+SHA1: 17479fa0538ccdac4ed0a458fbb7ef87bab24fed
+SHA256: fd605342f62268753076aa7d9321ff098b36ba53e47434145a9aedc28fd141a4
+SHA512: e0aecebefd23bd437a00a385ebfa5e316374922f8fcdb8faba81208c189130da924434cc514b4ab56c69f83cf756905a6e469158290d72bf8db99ac8dd34bd8c
+Homepage: http://www.busybox.net
+Description: Standalone rescue shell with tons of builtin utilities
+ BusyBox combines tiny versions of many common UNIX utilities into a single
+ small executable. It provides minimalist replacements for the most common
+ utilities you would usually find on your desktop system (i.e., ls, cp, mv,
+ mount, tar, etc.). The utilities in BusyBox generally have fewer options than
+ their full-featured GNU cousins; however, the options that are included
+ provide the expected functionality and behave very much like their GNU
+ counterparts.
+ .
+ busybox-static provides you with a statically linked simple stand alone shell
+ that provides all the utilities available in BusyBox. This package is
+ intended to be used as a rescue shell, in the event that you screw up your
+ system. Invoke "busybox sh" and you have a standalone shell ready to save
+ your system from certain destruction. Invoke "busybox", and it will list the
+ available builtin commands.
+
+Package: ca-certificates
+Architecture: all
+Version: 20260601~26.04.1
+Multi-Arch: foreign
+Priority: standard
+Section: misc
+Maintainer: Ubuntu Developers
+Original-Maintainer: Julien Cristau
+Installed-Size: 333
+Depends: openssl (>= 1.1.1), debconf (>= 0.5) | debconf-2.0
+Breaks: ca-certificates-java (<< 20121112+nmu1)
+Enhances: openssl
+Filename: pool/ca-certificates_20260601~26.04.1_all.deb
+Size: 138514
+MD5sum: e50f4530af1a3b5ed95af39a3e7e2739
+SHA1: e7afdc5a5ea4be7e61aa70ba532615c0d8213823
+SHA256: 6077d27c6b6f8b23590cb01ff877ed8c804a67a5442cc32b5a33da10d2bd0e90
+SHA512: d7d7406d19810f3c88471673e40ad6a7dcf00c689fed1634f1d68f7498a4d0bb6418a48d0c7020e2ef56333ed973bbda7787b863702e575ef0e4d2ed0dd044da
+Description: Common CA certificates
+ Contains the certificate authorities shipped with Mozilla's browser to allow
+ SSL-based applications to check for the authenticity of SSL connections.
+ .
+ Please note that Debian can neither confirm nor deny whether the
+ certificate authorities whose certificates are included in this package
+ have in any way been audited for trustworthiness or RFC 3647 compliance.
+ Full responsibility to assess them belongs to the local system
+ administrator.
+
+Package: cloud-guest-utils
+Architecture: all
+Version: 0.33-1build1
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: cloud-utils
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Cloud Team
+Installed-Size: 61
+Depends: e2fsprogs, fdisk, python3:any
+Recommends: gdisk
+Suggests: cloud-init
+Filename: pool/cloud-guest-utils_0.33-1build1_all.deb
+Size: 18670
+MD5sum: 295c08c58b62965942952650e574aac0
+SHA1: 665330074f0bf7f13b0249712111637889bd200e
+SHA256: 23041599f546279bb1fda510cb1154e2f8892444d38be39da9a03289b2bb43b8
+SHA512: d5877d477d46d5416ea70c1cf36d3822b02e8f73c0f630eb894cf62458399e198f6b17c1161eb2b1227a104ad4f52381fb3fa7eb9daf97e8a29638dbd310a0ce
+Homepage: https://launchpad.net/cloud-utils
+Description: cloud guest utilities
+ This package contains programs useful inside cloud instance.
+ It contains 'growpart' for resizing a partition during boot, which is normally
+ done with the aid of cloud-init.
+
+Package: cloud-init
+Architecture: all
+Version: 26.1-0ubuntu3~26.04.1
+Priority: optional
+Section: admin
+Maintainer: Ubuntu Developers
+Installed-Size: 15
+Depends: cloud-init-base (= 26.1-0ubuntu3~26.04.1), python3-serial, python3-passlib
+Filename: pool/cloud-init_26.1-0ubuntu3~26.04.1_all.deb
+Size: 2110
+MD5sum: c8bea5475e8b8c12964f2cb40f2211f1
+SHA1: 7ea2d2540f07d6cd8d7efda021686ec85de3f119
+SHA256: a9a6115ee0ff0c4e04997f7dccc23a4aec4545cd25c39fcfac527224cf040bba
+SHA512: 2d68e18cec333cac513c7bbd6409bb6b2f185d92f45df857ee266363bf73b38905dfa82bcdc6ca6ab936d38d05aacb89df043fc3c51fb2574c85a2c0b2b98fb2
+Homepage: https://cloud-init.io/
+Description: initialization and customization tool for cloud instances
+ Cloud-init is the industry standard multi-distribution method for
+ cross-platform cloud instance initialization. It is supported across all major
+ public cloud providers, provisioning systems for private cloud infrastructure,
+ and bare-metal installations.
+ .
+ Cloud instances are initialized from a disk image and instance data:
+ .
+ * Cloud metadata
+ * User data (optional)
+ * Vendor data (optional)
+ .
+ Cloud-init will identify the cloud it is running on during boot, read any
+ provided metadata from the cloud and initialize the system accordingly. This
+ may involve setting up the network and storage devices to configuring SSH
+ access key and many other aspects of a system. Later on the cloud-init will
+ also parse and process any optional user or vendor data that was passed to
+ the instance.
+ .
+ This is a metapackage that includes every cloud-init dependency.
+
+Package: cloud-init-base
+Architecture: all
+Version: 26.1-0ubuntu3~26.04.1
+Priority: optional
+Section: admin
+Source: cloud-init
+Maintainer: Ubuntu Developers
+Installed-Size: 3012
+Depends: cloud-guest-utils | cloud-utils, dhcpcd-base, iproute2, netcat-openbsd, netplan.io, procps, python3, python3-configobj, python3-debconf, python3-requests, python3-jinja2, python3-jsonpatch, python3-jsonschema, python3-oauthlib, python3-yaml, debconf (>= 0.5) | debconf-2.0, python3:any
+Recommends: eatmydata, gdisk, gnupg, python3-apt, software-properties-common
+Suggests: openssh-server, ssh-import-id
+Breaks: cloud-init (<< 25.1.1-0ubuntu2~), cloud-init-base
+Replaces: cloud-init (<< 25.1.1-0ubuntu2~), cloud-init-base
+Filename: pool/cloud-init-base_26.1-0ubuntu3~26.04.1_all.deb
+Size: 587498
+MD5sum: ed9ce243cda02c4c7c6fa9230b555ea3
+SHA1: eed795252827e0ac9bd6c54c6dac39f13f852908
+SHA256: 1ea9b30278090bff9eab18641397ef6d097a286c3ae9e9348759f256b3d91629
+SHA512: b7abedf614f75934c15ad8e3711e1723f4c9354122a8011876e510653bce19c427b9c0baaf035ea76571cb2c14b9b8d6399c456042b1c80f99ebfc8241332c19
+Homepage: https://cloud-init.io/
+Description: initialization and customization tool for cloud instances
+ Cloud-init with minimal dependencies, refer to cloud-init for more
+ information.
+
+Package: colord
+Architecture: amd64
+Version: 1.4.8-3
+Multi-Arch: foreign
+Priority: optional
+Section: graphics
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian freedesktop.org maintainers
+Installed-Size: 1019
+Depends: acl, colord-data, polkitd, dconf-gsettings-backend | gsettings-backend, systemd | systemd-standalone-sysusers | systemd-sysusers, libc6 (>= 2.34), libcolord2 (>= 1.4.3), libcolorhug2 (>= 0.1.30), libdbus-1-3 (>= 1.10), libglib2.0-0t64 (>= 2.80.0), libgudev-1.0-0 (>= 146), libgusb2a (>= 0.2.2), liblcms2-2 (>= 2.2+git20110628), libpolkit-gobject-1-0 (>= 0.99), libsane1 (>= 1.0.27), libsqlite3-0 (>= 3.5.9), libsystemd0
+Suggests: colord-sensor-argyll
+Filename: pool/colord_1.4.8-3_amd64.deb
+Size: 219688
+MD5sum: 485a7cd35a61f148e6cf0a098cd54eed
+SHA1: 870d811582d22e225163873821a855f8d6b365e8
+SHA256: 0bd99a498f6030db7fb85a1cd7e0bf100615dcab2ba6c0c1c4f231279fc68756
+SHA512: 5c6297695ae8588aea1751a8c5be9ec0f822b1592a8547c7b370bdccce7afbf5c4c7ea8e1dbacb7f3189b8f76bf7b37fd82aa9e7ed96e2fceedb0d4d237ae922
+Homepage: https://www.freedesktop.org/software/colord/
+Description: system service to manage device colour profiles -- system daemon
+ colord is a system service that makes it easy to manage, install and generate
+ colour profiles to accurately colour manage input and output devices.
+ .
+ It provides a D-Bus API for system frameworks to query, a persistent data
+ store, and a mechanism for session applications to set system policy.
+ .
+ This package contains the dbus-activated colord system daemon.
+
+Package: colord-data
+Architecture: all
+Version: 1.4.8-3
+Priority: optional
+Section: graphics
+Source: colord
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian freedesktop.org maintainers
+Installed-Size: 2596
+Filename: pool/colord-data_1.4.8-3_all.deb
+Size: 1255772
+MD5sum: 021aa6459af9711f7fd120288aeb20c8
+SHA1: cb147d4cee335ac7c1689faf018184db503c9d93
+SHA256: ad714cd24a4a30a1e3dd262b002648a1b9deca08008cd3574b7a42e34a51589f
+SHA512: 7a33de232515cd5cf5339d2165916e7788651d44aef8bd0d86b05bd1a500490119bc4c61ddf2a140fe5009b405e3879bfcc556e18afbd19d686fabeb0be8afa9
+Homepage: https://www.freedesktop.org/software/colord/
+Description: system service to manage device colour profiles -- data files
+ colord is a system service that makes it easy to manage, install and generate
+ colour profiles to accurately colour manage input and output devices.
+ .
+ It provides a D-Bus API for system frameworks to query, a persistent data
+ store, and a mechanism for session applications to set system policy.
+ .
+ This package contains data for the colord system daemon.
+
+Package: console-setup
+Architecture: all
+Version: 1.237ubuntu3.1
+Multi-Arch: foreign
+Priority: optional
+Section: utils
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Install System Team
+Installed-Size: 407
+Pre-Depends: debconf | debconf-2.0
+Depends: console-setup-linux | hurd, xkb-data (>= 0.9), keyboard-configuration (= 1.237ubuntu3.1), debconf (>= 0.5) | debconf-2.0
+Suggests: lsb-base (>= 3.0-6), locales
+Conflicts: console-setup-mini
+Breaks: lsb (<< 2.0-6), lsb-base (<< 3.0-6), lsb-core (<< 2.0-6)
+Filename: pool/console-setup_1.237ubuntu3.1_all.deb
+Size: 102654
+MD5sum: 701343cd91306f4121b76dd60e924192
+SHA1: 3b56cc0dca7c6083cc894f30574c179643c95ee7
+SHA256: 220b7317f878d2099c7911657fa98507a89ca47bad3c76ae34239b9fda149cf4
+SHA512: 776ebf749c2a621ff9835b86b69efe1c838e948ac8265fab0f2c5eb91875ae67f1313800854b3a8a962359dfa40bee3e59cc5cf956a215ed82e15529bf622832
+Description: console font and keymap setup program
+ This package provides the console with the same keyboard
+ configuration scheme as the X Window System. As a result, there is no
+ need to duplicate or change the keyboard files just to make simple
+ customizations such as the use of dead keys, the key functioning as
+ AltGr or Compose key, the key(s) to switch between Latin and
+ non-Latin mode, etc.
+ .
+ The package also installs console fonts supporting many of the
+ world's languages. It provides an unified set of font faces - the
+ classic VGA, the simplistic Fixed, and the cleaned Terminus,
+ TerminusBold and TerminusBoldVGA.
+
+Package: console-setup-linux
+Architecture: all
+Version: 1.237ubuntu3.1
+Static-Built-Using: fonts-dejavu (= 2.37-8build1), unifont (= 1:16.0.04-1build1)
+Multi-Arch: foreign
+Priority: optional
+Section: utils
+Source: console-setup
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Install System Team
+Installed-Size: 7291
+Provides: console-terminus
+Depends: kbd (>= 0.99-12) | console-tools (>= 1:0.2.3-16), keyboard-configuration (= 1.237ubuntu3.1), init-system-helpers (>= 1.29~) | initscripts
+Suggests: console-setup
+Breaks: console-cyrillic (<= 0.9-11), console-setup (<< 1.71), console-terminus
+Replaces: console-setup (<< 1.71), console-terminus
+Filename: pool/console-setup-linux_1.237ubuntu3.1_all.deb
+Size: 6206020
+MD5sum: 2bd2c8c4bac5adc4cc40c4f169a4eb6e
+SHA1: 18f9a42a6bd7abb7ea1b5241f3cea2e4004697d4
+SHA256: 18f100eb0e3baf792e2c091e00276a3c65e507c15306aebd8d71b09ba1d3804e
+SHA512: 511e2f220d1f2afb6c0ae80d9488b6863b884f2db26e54d9cd343ca212c8061e6fbf637131fbd6f93673f3f9d47fe22515b22eca96a1cdf65e9e768fd2bbbb5b
+Description: Linux specific part of console-setup
+ This package includes fonts in psf format and definitions of various
+ 8-bit charmaps.
+
+Package: containerd.io
+Architecture: amd64
+Version: 2.3.5-1~ubuntu.26.04~resolute
+Priority: optional
+Section: devel
+Maintainer: Containerd team
+Installed-Size: 85162
+Provides: containerd, runc
+Depends: libc6 (>= 2.38), libseccomp2 (>= 2.6.0)
+Conflicts: containerd, runc
+Replaces: containerd, runc
+Filename: pool/containerd.io_2.3.5-1~ubuntu.26.04~resolute_amd64.deb
+Size: 22409096
+MD5sum: 8f1f7ac64b55931eba8a4d123d2e1c63
+SHA1: 30ef76d3da682d8d701c11e2490953b666f381fd
+SHA256: a5988582d779e62dd968a1f2312ff8cd25670c185ebf94e4e5331ad1dcc1c287
+SHA512: 85ceae76e2993c10fd95f94912fa659cff4d33d3722c0c497c94669629b31ad16e355ccacae8eff0f551ae309e9c78659d634d7fbe05cd3441f6fc6053f03a4e
+Homepage: https://containerd.io
+Description: An open and reliable container runtime
+
+Package: cpp
+Architecture: amd64
+Version: 4:15.2.0-5ubuntu1
+Multi-Arch: allowed
+Priority: optional
+Section: interpreters
+Source: gcc-defaults (1.230ubuntu1)
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian GCC Maintainers
+Installed-Size: 37
+Depends: cpp-15 (>= 15.2.0-2~), cpp-x86-64-linux-gnu (= 4:15.2.0-5ubuntu1)
+Suggests: cpp-doc
+Conflicts: cpp-doc (<< 1:2.95.3), gcc (<< 4:13.2.0-3)
+Filename: pool/cpp_4%3a15.2.0-5ubuntu1_amd64.deb
+Size: 22420
+MD5sum: 472c9b90f4822b3bb55d524419690046
+SHA1: c4d5440ae75299200bfb2961bb4b58217266b053
+SHA256: 05a64873a18fb10d52ba2c8ee1fd0a605a974d75264d824ef2771c799f49ea63
+SHA512: cf8ce02c3a9dbef03d57ef6757196be1fc6479b0fa43376474709e4f0c026ebffee85f42f4f914a4fab3e2d82eb6b758e9c8ae776d04af62826aa43586106643
+Description: GNU C preprocessor (cpp)
+ The GNU C preprocessor is a macro processor that is used automatically
+ by the GNU C compiler to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+ .
+ This is a dependency package providing the default GNU C preprocessor.
+
+Package: cpp-15
+Architecture: amd64
+Version: 15.2.0-16ubuntu1
+Priority: optional
+Section: interpreters
+Source: gcc-15
+Maintainer: Ubuntu Core developers
+Original-Maintainer: Debian GCC Maintainers
+Installed-Size: 11
+Depends: gcc-15-base (= 15.2.0-16ubuntu1), cpp-15-x86-64-linux-gnu (= 15.2.0-16ubuntu1)
+Suggests: gcc-15-locales (>= 15)
+Breaks: hardening-wrapper (<< 2.8+nmu3), libmagics++-dev (<< 2.28.0-4)
+Filename: pool/cpp-15_15.2.0-16ubuntu1_amd64.deb
+Size: 1030
+MD5sum: 02eb788c68e1af8e34b382bbc9ad1d78
+SHA1: 18b51569dea813b82d12a647346c9a7297cfb1b0
+SHA256: baacc9086e17c8cadc3603365e660f907bca483de4446e56e6f1bc25da4c02be
+SHA512: afe4d641fd0e29fd7f3726d206c573ec2ac9245c8c06027f3c1518efe062b63a8ebc1ecea790c3263adafb37a1424e6e621b4b1d7be4ddb85570bdf3dbc18c75
+Homepage: http://gcc.gnu.org/
+Description: GNU C preprocessor
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the compiler.
+
+Package: cpp-15-x86-64-linux-gnu
+Architecture: amd64
+Version: 15.2.0-16ubuntu1
+Multi-Arch: foreign
+Priority: optional
+Section: interpreters
+Source: gcc-15
+Maintainer: Ubuntu Core developers
+Original-Maintainer: Debian GCC Maintainers
+Installed-Size: 37902
+Depends: gcc-15-base (= 15.2.0-16ubuntu1), libc6 (>= 2.38), libgmp10 (>= 2:6.3.0+dfsg), libisl23 (>= 0.15), libmpc3 (>= 1.1.0), libmpfr6 (>= 3.1.3), libzstd1 (>= 1.5.5), zlib1g (>= 1:1.1.4)
+Suggests: gcc-15-locales (>= 15), cpp-15-doc (>= 15)
+Breaks: hardening-wrapper (<< 2.8+nmu3), libmagics++-dev (<< 2.28.0-4)
+Filename: pool/cpp-15-x86-64-linux-gnu_15.2.0-16ubuntu1_amd64.deb
+Size: 12899858
+MD5sum: a5123a7b09ce9e3ae785f33d5fa3c73d
+SHA1: b610f7caf3568ae6f2b8db226dfa337b30674351
+SHA256: 1649aa71c45b047feda5b9ca303c94799bdba5befa5c9de9735cbfc59c3ef93f
+SHA512: 9bfe5ab8e7240403052c5955ceb0fc3207fff373a84ec3b33e26423df377b30790da34d27054f30b5c8699f9d5c0866fff3d41855e1e708856db318de364d212
+Homepage: http://gcc.gnu.org/
+Description: GNU C preprocessor for x86_64-linux-gnu
+ A macro processor that is used automatically by the GNU C compiler
+ to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those
+ who require the preprocessor configured for the
+ x86_64-linux-gnu architecture but not the compiler.
+
+Package: cpp-x86-64-linux-gnu
+Architecture: amd64
+Version: 4:15.2.0-5ubuntu1
+Multi-Arch: foreign
+Priority: optional
+Section: interpreters
+Source: gcc-defaults (1.230ubuntu1)
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian GCC Maintainers
+Installed-Size: 21
+Depends: cpp-15-x86-64-linux-gnu (>= 15.2.0-2~)
+Suggests: cpp-doc
+Breaks: cpp (<< 4:13.2.0-3)
+Replaces: cpp (<< 4:13.2.0-3)
+Filename: pool/cpp-x86-64-linux-gnu_4%3a15.2.0-5ubuntu1_amd64.deb
+Size: 5840
+MD5sum: e1cc2dd95d765646f8ee5658a7863f39
+SHA1: 924784868287124949f0d76bdc64983ef2e5d80a
+SHA256: 18b35148f64d0bb17b5c34efa6bdeefa4df9ca122ba12130f7245bccd65a950a
+SHA512: 20bfdb464992d03d5438c2477aa5dcbd0d0e8d98fd972fe479e213a4cfff2c40b6475861a5ec0341baa5807dd6ecfecf9f7af9379f5008347e6bcb1f4093da05
+Description: GNU C preprocessor (cpp) for the amd64 architecture
+ The GNU C preprocessor is a macro processor that is used automatically
+ by the GNU C compiler to transform programs before actual compilation.
+ .
+ This package has been separated from gcc for the benefit of those who
+ require the preprocessor but not the cross-compiler for amd64 architecture.
+ .
+ This is a dependency package providing the default GNU C preprocessor
+ for the amd64 architecture.
+
+Package: cracklib-runtime
+Architecture: amd64
+Version: 2.9.6-5.2build3
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: cracklib2
+Maintainer: Ubuntu Developers
+Original-Maintainer: Jan Dittberner
+Installed-Size: 583
+Depends: file, libcrack2 (>= 2.9.6-5.2build3), libc6 (>= 2.34)
+Recommends: wamerican | wordlist
+Filename: pool/cracklib-runtime_2.9.6-5.2build3_amd64.deb
+Size: 147498
+MD5sum: 971f37d8f966b9a56f7469ac47d43d7a
+SHA1: 450745af5e2d03393b7470f149209da1b44c991f
+SHA256: b4796647beb74387211fcf9265ef6aa1e3539585de91f8b81a3fa3645ad8c612
+SHA512: 5d7ecdf229f90506388133ff38c97988cc2a77bce2ce85e1fc6dbc279e54602944997e481163c33c0b9a043ceffc618b2faf8d4b94565c429d1fef8bbd632eb6
+Homepage: https://github.com/cracklib/cracklib
+Description: runtime support for password checker library cracklib2
+ Run-time support programs which use the shared library in libcrack2
+ including programs to build the password dictionary databases used by
+ the functions in the shared library.
+
+Package: crash
+Architecture: amd64
+Version: 9.0.1+~16.3-1ubuntu1
+Priority: optional
+Section: utils
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian QA Group
+Installed-Size: 14891
+Depends: libc6 (>= 2.42), libgcc-s1 (>= 4.2), libgmp10 (>= 2:6.3.0+dfsg), liblzo2-2 (>= 2.02), libmpfr6 (>= 3.1.3), libncursesw6 (>= 6), libsnappy1v5 (>= 1.2.2), libstdc++6 (>= 14), libtinfo6 (>= 6), libzstd1 (>= 1.5.5), binutils
+Suggests: kexec-tools, makedumpfile
+Filename: pool/crash_9.0.1+~16.3-1ubuntu1_amd64.deb
+Size: 5180566
+MD5sum: 98bdcc5636671f952e7385ee856a8c15
+SHA1: 4b2e3e1d17dbfbfc4b6685dcb331259b978a4858
+SHA256: f233ef2a645cd77830b389e2168b75deec5ccc55cde0f342a7e20851ddbda0b0
+SHA512: 217727315b9268dafd5aa9315a80f455d0160292fdf63d93b9969b9723cad17a64d9be9277cc4e6fffc958ada8c779928fb93a6ba323ae97ec034f7c1383b021
+Homepage: https://crash-utility.github.io/
+Description: kernel debugging utility, allowing gdb like syntax
+ The core analysis suite is a self-contained tool that can be used to
+ investigate either live systems, or multiple different core dump formats
+ including kdump, LKCD, netdump and diskdump.
+ .
+ o The tool is loosely based on the SVR4 crash command, but has been
+ completely integrated with gdb in order to be able to display
+ formatted kernel data structures, disassemble source code, etc.
+ .
+ o The current set of available commands consist of common kernel core
+ analysis tools such as a context-specific stack traces, source code
+ disassembly, kernel variable displays, memory display, dumps of
+ linked-lists, etc. In addition, any gdb command may be entered,
+ which in turn will be passed onto the gdb module for execution.
+ .
+ o There are several commands that delve deeper into specific kernel
+ subsystems, which also serve as templates for kernel developers
+ to create new commands for analysis of a specific area of interest.
+ Adding a new command is a simple affair, and a quick recompile
+ adds it to the command menu.
+ .
+ o The intent is to make the tool independent of Linux version dependencies,
+ building in recognition of major kernel code changes so as to adapt to
+ new kernel versions, while maintaining backwards compatibility.
+
+Package: cron
+Architecture: amd64
+Version: 3.0pl1-200ubuntu1
+Multi-Arch: foreign
+Priority: important
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Georges Khaznadar
+Installed-Size: 235
+Provides: cron-daemon
+Pre-Depends: init-system-helpers (>= 1.54~), cron-daemon-common
+Depends: libc6 (>= 2.38), libpam0g (>= 0.99.7.1), libselinux1 (>= 3.1~), sensible-utils, libpam-runtime
+Suggests: anacron, logrotate, checksecurity, supercat, bat, default-mta | mail-transport-agent
+Conflicts: bcron, cronie, systemd-cron
+Replaces: bcron, cronie, systemd-cron
+Filename: pool/cron_3.0pl1-200ubuntu1_amd64.deb
+Size: 88556
+MD5sum: d571cecb65949ddae35bb13337a9629d
+SHA1: f1a05500f133fa36eecc2dbc658a5ccd89ec15c6
+SHA256: 6b2b3b88313f35b30f50af59940c0b6ba82d992021585430763ffa3f71fb6b03
+SHA512: 195745735abba43edee4fad1210366b7c76db68c5794e8a3731cc10d40314df85f1bc74bc3ed6ac16c7a29fa1ca9776995e41d0e250286892d1de84594413214
+Homepage: https://ftp.isc.org/isc/cron/
+Description: process scheduling daemon
+ The cron daemon is a background process that runs particular programs at
+ particular times (for example, every minute, day, week, or month), as
+ specified in a crontab. By default, users may also create crontabs of
+ their own so that processes are run on their behalf.
+ .
+ Output from the commands is usually mailed to the system administrator
+ (or to the user in question); you should probably install a mail system
+ as well so that you can receive these messages.
+ .
+ This cron package does not provide any system maintenance tasks. Basic
+ periodic maintenance tasks are provided by other packages, such
+ as checksecurity.
+
+Package: cron-daemon-common
+Architecture: all
+Version: 3.0pl1-200ubuntu1
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: cron
+Maintainer: Ubuntu Developers
+Original-Maintainer: Georges Khaznadar
+Installed-Size: 54
+Depends: systemd | systemd-standalone-sysusers | systemd-sysusers, adduser
+Conflicts: bcron (<< 0.11-9.1), cron (<< 3.0pl1-140), cronie (<< 1.6.1-5), systemd-cron (<< 1.15.18-1.1)
+Breaks: systemd-cron (<< 1.15.19-5~)
+Replaces: bcron (<< 0.11-9.1), cron (<< 3.0pl1-140), cronie (<< 1.6.1-5), systemd-cron (<< 1.15.18-1.1)
+Filename: pool/cron-daemon-common_3.0pl1-200ubuntu1_all.deb
+Size: 15748
+MD5sum: f06cbbec2e882693891331517c1252d1
+SHA1: 7698e9e4a19f8363100c5cb5fb452ec613d9531a
+SHA256: 1630217f880e7a6c1a689365fce3b75ce34a2f09f1688ca56d5e4063f9bd5d9c
+SHA512: f29a733264203a468dff999fc62c911c209bef85cd1170f516d030a05e6e5eccf053bbf8a58122cd13f0089daac7c385f8d93051d2a13d8b2fd11cf339f59673
+Homepage: https://ftp.isc.org/isc/cron/
+Description: process scheduling daemon's configuration files
+ The cron daemon is a background process that runs particular programs at
+ particular times (for example, every minute, day, week, or month), as
+ specified in a crontab. By default, users may also create crontabs of
+ their own so that processes are run on their behalf.
+ .
+ This package provides configuration files which must be there to
+ define scheduled process sets.
+
+Package: cups
+Architecture: amd64
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 1040
+Depends: cups-client (>= 2.4.16-1ubuntu1.3), cups-common (>= 2.4.16-1ubuntu1.3), cups-core-drivers (>= 2.4.16-1ubuntu1.3), cups-daemon (>= 2.4.16-1ubuntu1.3), cups-filters, cups-ppdc, cups-server-common (>= 2.4.16-1ubuntu1.3), debconf (>= 0.5) | debconf-2.0, ghostscript, libcups2t64 (= 2.4.16-1ubuntu1.3), poppler-utils, procps, libavahi-client3 (>= 0.6.16), libavahi-common3 (>= 0.6.16), libc6 (>= 2.38), libgcc-s1 (>= 3.3.1), libstdc++6 (>= 5), libusb-1.0-0 (>= 2:1.0.16)
+Recommends: avahi-daemon, colord
+Suggests: cups-bsd, cups-pdf, foomatic-db-compressed-ppds | foomatic-db, smbclient, udev
+Filename: pool/cups_2.4.16-1ubuntu1.3_amd64.deb
+Size: 292606
+MD5sum: 0b9020931a427381041ea7151b4a7856
+SHA1: a59b8e61cd133f866d44ab53d20dc92852a2e9f1
+SHA256: c164caf8c9c5d41f056895f6737423ae57943cf23440889a4ca16042327f5add
+SHA512: a279dbbbb38589146a2d908e65290af1dc4a4f15d1e110e254384db40629b92a37ce50f1380b1c34249ec90311845cdacd5fc91b8989379b493d1b51c7c2cf31
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - PPD/driver support, web interface
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpd and the like. It supports the Internet
+ Printing Protocol (IPP), and has its own filtering driver model for
+ handling various document types.
+ .
+ This package provides the parts of CUPS which are needed for using printer
+ drivers.
+
+Package: cups-browsed
+Architecture: amd64
+Version: 2.1.1-0ubuntu3
+Priority: optional
+Section: net
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 332
+Depends: cups-daemon, lsb-base, libavahi-client3 (>= 0.6.16), libavahi-common3 (>= 0.6.16), libavahi-glib1 (>= 0.6.16), libc6 (>= 2.42), libcups2t64 (>= 2.0.2), libcupsfilters2t64 (>= 2.0~b4-0ubuntu1), libglib2.0-0t64 (>= 2.80.0), libppd2 (>= 2:2.0~b4-0ubuntu1)
+Recommends: avahi-daemon
+Breaks: cups-filters (<< 1.4.0~)
+Replaces: cups-filters (<< 1.4.0~)
+Enhances: cups
+Filename: pool/cups-browsed_2.1.1-0ubuntu3_amd64.deb
+Size: 118402
+MD5sum: 4a44ea7407b98665caa4e7e3b5b3e143
+SHA1: a54d46df19adcfa1426c76859bbb080006ed732f
+SHA256: fca5e52a4504fe6672197635b800323273f2d8221b416a38604fa89f944950b3
+SHA512: ab55cdf0fad9e7616cdc4a8818f67c3079378f8eb5282644163d8f41564c045677d72ff4c13a6caca511a58187c819c5668cf74597c4fbe3551df8dca980e368
+Homepage: http://www.openprinting.org/
+Description: OpenPrinting cups-browsed
+ This package provides cups-browsed, a daemon which browses the Bonjour
+ broadcasts of shared remote CUPS printers and makes the printers
+ available locally, replacing the CUPS broadcasting/browsing which was
+ dropped in CUPS 1.6.x. This way the old behavior of having the remote
+ printers available automatically is now re-implemented with Bonjour.
+ .
+ cups-browsed is also useful with a CUPS >= 1.6 client to allow the
+ latter to browse the printer list of CUPS < 1.6 servers (by using the
+ old 'cups' protocol in BrowseRemoteProtocols).
+ .
+ cups-browsed is also useful with a CUPS >= 1.6 server to allow CUPS <
+ 1.6 clients to browse its printer list (by using the old 'cups'
+ protocol in BrowseLocalProtocols).
+
+Package: cups-bsd
+Architecture: amd64
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: cups
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 135
+Provides: lpr
+Depends: cups-client (= 2.4.16-1ubuntu1.3), cups-common (>= 2.4.16-1ubuntu1.3), debconf (>= 0.5) | debconf-2.0, libcups2t64 (= 2.4.16-1ubuntu1.3), libc6 (>= 2.38)
+Suggests: cups, inetutils-inetd | inet-superserver, update-inetd
+Conflicts: lpr, lprng
+Replaces: lpr
+Filename: pool/cups-bsd_2.4.16-1ubuntu1.3_amd64.deb
+Size: 42324
+MD5sum: 0af3db9d321cf50517c2254be7c0df00
+SHA1: ddb7d6abea53f1dcd580e523beca67af543b48ff
+SHA256: 26975659cba7ea97371a44c2ac34ce1813f4a691b715881f38b3a28f6f9f7757
+SHA512: c583c8f3dcb7990cf1495c4122992e23de9ede8c3eebb5bf05cdd862578e1a586a7f7e9a13c58d28d586740671df6203efaf0b18f922fa8d2fa62a4ca2f8f03e
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - BSD commands
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpr, lpd and the like. It supports the
+ Internet Printing Protocol (IPP), and has its own filtering driver
+ model for handling various document types.
+ .
+ This package provides the BSD commands for interacting with CUPS. It
+ is provided separately to allow CUPS to coexist with other printing
+ systems (to a small degree).
+
+Package: cups-client
+Architecture: amd64
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: cups
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 437
+Depends: adduser, cups-common (>= 2.4.16-1ubuntu1.3), libcups2t64 (= 2.4.16-1ubuntu1.3), libc6 (>= 2.38)
+Suggests: cups, cups-bsd, smbclient
+Conflicts: lprng
+Filename: pool/cups-client_2.4.16-1ubuntu1.3_amd64.deb
+Size: 153692
+MD5sum: f0ee488fd13f272ed751ce5fbb0118ef
+SHA1: 0aff43c1260b67c549aef96b35c07e5f387e4b42
+SHA256: cddb97968598f332299ca17a32137b0936b1b2d11c450fd48548732f805d0818
+SHA512: 785f8e63c8542833c43f5ae39508ececa52114f6f13af491875a042f3acc8300048446edf4c85b74af47688611e7dab092c3804204e192e2958465fa57b87e0c
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - client programs (SysV)
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpd and the like. It supports the Internet
+ Printing Protocol (IPP), and has its own filtering driver model for
+ handling various document types.
+ .
+ This package provides the System V style print client programs.
+
+Package: cups-common
+Architecture: all
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: cups
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 4283
+Filename: pool/cups-common_2.4.16-1ubuntu1.3_all.deb
+Size: 274412
+MD5sum: 89cd3e4948dfcfe4ec9e0599544981a9
+SHA1: 8be0f0a8e903283a17d75c8f22dbd8f759451246
+SHA256: 2059cf512e584786357d21d89701c67cf7e4e128f6f12e7bbc04a3cb2c408603
+SHA512: ebcf276c73920882cb91aead17e901d286ea462f218d4d0ea9f1c1d4fa2aaf9ba67c9a8cb29f1ee14e14c0a952f20b304718838d93faf093b3ee1212b3b588d6
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - common files
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpd and the like. It supports the Internet
+ Printing Protocol (IPP), and has its own filtering driver model for
+ handling various document types.
+ .
+ This package provides common files for CUPS server and client packages.
+
+Package: cups-core-drivers
+Architecture: amd64
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: cups
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 129
+Depends: cups-daemon (>= 2.4.16-1ubuntu1.3), cups-filters-core-drivers, libcups2t64 (= 2.4.16-1ubuntu1.3), libc6 (>= 2.38)
+Recommends: avahi-daemon
+Breaks: cups-server-common (<< 2.1.0-7~)
+Replaces: cups-server-common (<< 2.1.0-7~)
+Filename: pool/cups-core-drivers_2.4.16-1ubuntu1.3_amd64.deb
+Size: 28980
+MD5sum: d2aa990a3164f5d9d62722d3aac5ab3d
+SHA1: 0b6dd5b81c1951e216115499aca99ede53675035
+SHA256: 7473dec4a2e4eef38861fec60188559cc5e9ebb06fa10290a3f044d1d66a7a63
+SHA512: c8126c0a04421ef2f6d4718119cb05f0562809165df057ce1260e946fb5a5be16743e8f90fd07c64c544c25f23b881920c3730e5b4e50a8dd00c46929e670dd0
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - driverless printing
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpd and the like. It supports the Internet
+ Printing Protocol (IPP), and has its own filtering driver model for
+ handling various document types.
+ .
+ This package provides the parts of CUPS which are needed for driverless
+ printing on IPP printers with common data formats.
+
+Package: cups-daemon
+Architecture: amd64
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: cups
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 916
+Depends: adduser, bc, libcups2t64 (= 2.4.16-1ubuntu1.3), lsb-base, procps, ssl-cert, libapparmor1 (>= 2.7.0~beta1+bzr1772), libavahi-client3 (>= 0.6.16), libavahi-common3 (>= 0.6.16), libc6 (>= 2.38), libdbus-1-3 (>= 1.10), libglib2.0-0t64 (>= 2.22.0), libgssapi-krb5-2 (>= 1.17), libpam0g (>= 0.99.7.1), libpaper2 (>= 2.2.5), libsnapd-glib-2-1 (>= 1.61), libsystemd0
+Recommends: avahi-daemon, colord, cups-browsed, ipp-usb
+Suggests: cups, cups-bsd, cups-client (>= 2.4.16-1ubuntu1.3), cups-common (>= 2.4.16-1ubuntu1.3), cups-filters, cups-pdf, cups-ppdc, cups-server-common (>= 2.4.16-1ubuntu1.3), foomatic-db-compressed-ppds | foomatic-db, ghostscript, poppler-utils, smbclient, udev
+Breaks: cups (<< 2.1.0-6~)
+Replaces: cups (<< 2.1.0-6~)
+Filename: pool/cups-daemon_2.4.16-1ubuntu1.3_amd64.deb
+Size: 366524
+MD5sum: 06a45961a12c3c38ea511be442648882
+SHA1: b97d651908a46f8208d06335390bd1eda696404e
+SHA256: 570d4b6c925a999bf127fbb45c732331a2a57864b6889bc54f22ef3a2db10559
+SHA512: dba7349bbc9f61384144bd7080bfde5526f6049eb0dee7a6d00bfc3e4f78d57bca42fe7ad7274871cbe3262d6efe83fd38829329050806b4137da09194b44616
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - daemon
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpd and the like. It supports the Internet
+ Printing Protocol (IPP), and has its own filtering driver model for
+ handling various document types.
+ .
+ This package provides the CUPS scheduler/daemon.
+
+Package: cups-filters
+Architecture: amd64
+Version: 2.0.1-0ubuntu4.1
+Priority: optional
+Section: net
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 834
+Provides: foomatic-filters, foomatic-filters-beh, ghostscript-cups
+Depends: bc, cups-filters-core-drivers (>= 2.0.1-0ubuntu4.1), ghostscript, poppler-utils, libc6 (>= 2.42), libcups2t64 (>= 2.3~b6), libcupsfilters2t64 (>= 2.0~b4-0ubuntu1), libppd2 (>= 2:2.0~b4-0ubuntu1)
+Recommends: colord, printer-driver-braille, liblouisutdml-bin | liblouis-bin
+Suggests: antiword, docx2txt, foomatic-db-compressed-ppds | foomatic-db, imagemagick, lynx
+Conflicts: foomatic-filters, foomatic-filters-beh, ghostscript-cups
+Replaces: foomatic-filters, foomatic-filters-beh, ghostscript-cups
+Filename: pool/cups-filters_2.0.1-0ubuntu4.1_amd64.deb
+Size: 125098
+MD5sum: ab03b33f5cd6e2a5197f973f437bf8fd
+SHA1: 4d3390fc104e4467b40c3e6f247f959e2fad0537
+SHA256: 36141549cc52bd2cf2a02eaebcf8646dc4c99bc57b57c06f5c4f749b28e78535
+SHA512: aafa402d196e29719458b5b6b864ffc568e474570e62aa39f69878ae7226c6ae228aa0679d2506cea8a6f30fe8b9024d8b3acefc4ef378416a94b4da320f5517
+Homepage: http://www.openprinting.org/
+Description: OpenPrinting CUPS Filters - Main Package
+ This package provides additional CUPS filters which are not provided
+ by the CUPS project itself. This includes filters for a PDF based
+ printing workflow.
+ .
+ This package contains the filters for printing with drivers/PPDs and
+ for converting non-PDF input files to PDF.
+
+Package: cups-filters-core-drivers
+Architecture: amd64
+Version: 2.0.1-0ubuntu4.1
+Priority: optional
+Section: net
+Source: cups-filters
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 311
+Depends: bc, cups-ipp-utils, poppler-utils, libc6 (>= 2.38), libcups2t64 (>= 2.3~b6), libcupsfilters2t64 (>= 2.0~b4-0ubuntu1), libppd2 (>= 2:2.0~b4-0ubuntu1)
+Breaks: cups-filters (<< 2.0.1-0ubuntu3)
+Replaces: cups-filters (<< 2.0.1-0ubuntu3)
+Filename: pool/cups-filters-core-drivers_2.0.1-0ubuntu4.1_amd64.deb
+Size: 51190
+MD5sum: 1198c7b088467c7ec2a76b7a324390ff
+SHA1: 8cf712fb8910527c46127388505bb0941cc2e328
+SHA256: c6e09dd33f33620f3cf9f1f71d50c5ce32b0ead0f8c516f3eff38f65f223df6b
+SHA512: ee98b23289080a5b5d65b0c385626b3854abc6cb2df96c4c22f78103daf2a8c553a399c3fb2cad1a82a2a5e92844392f2525487281e1d1c7d462642dfe605736
+Homepage: http://www.openprinting.org/
+Description: OpenPrinting CUPS Filters - Driverless printing
+ This package provides additional CUPS filters which are not provided
+ by the CUPS project itself. This includes filters for a PDF based
+ printing workflow.
+ .
+ This package contains only the filters needed for driverless printing of
+ PDF input files on IPP printers with known, common languages (PDF,
+ PostScript, PWG Raster, Apple Raster, PCL).
+
+Package: cups-ipp-utils
+Architecture: amd64
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: cups
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 994
+Depends: libcups2t64 (= 2.4.16-1ubuntu1.3), libavahi-client3 (>= 0.6.16), libavahi-common3 (>= 0.6.16), libc6 (>= 2.38), libpam0g (>= 0.99.7.1)
+Recommends: avahi-daemon
+Breaks: cups-client (<< 2.0.3-2~)
+Replaces: cups-client (<< 2.0.3-2~)
+Filename: pool/cups-ipp-utils_2.4.16-1ubuntu1.3_amd64.deb
+Size: 232028
+MD5sum: 39cf54767c8d845d99963669456e23d1
+SHA1: e946cd697fd717ebdab6fcbe533cdafb03905316
+SHA256: d0b65f5076bdc542e714f69659559c3bc5f6104fb061d7b162a9cd90355da7ce
+SHA512: ba4f5cd6236ce2b538d4fe2f71e4d4a54068a2379c3e97530aefbd1495b3cb4c2012ffd2c7cc1cb378ee629b7ea3703758985ff19db7b18f715dc9369ff87ce7
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - IPP developer/admin utilities
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpd and the like. It supports the Internet
+ Printing Protocol (IPP), and has its own filtering driver model for
+ handling various document types.
+ .
+ This package provides IPP utilities for developers and system administrators
+
+Package: cups-pk-helper
+Architecture: amd64
+Version: 0.2.6-2.1build1
+Priority: optional
+Section: gnome
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Group
+Installed-Size: 300
+Pre-Depends: adduser
+Depends: libc6 (>= 2.34), libcups2t64 (>= 1.6.0), libglib2.0-0t64 (>= 2.80.0), libpolkit-gobject-1-0 (>= 0.99)
+Filename: pool/cups-pk-helper_0.2.6-2.1build1_amd64.deb
+Size: 49076
+MD5sum: b9b73a1a196a876c8262a102b2befd7b
+SHA1: 64824ca2e3fe6d78973433cc1123636a88ca1933
+SHA256: 034acb4da654cc54a3dbe1c6c9ffeda3218303b259f833a0fc442056d6b0af24
+SHA512: 7d676210c5c8af16a6ca6fcf9f4c71731769c521bd65f598096b42f3578135f73f8aae571f1723278003035b691bbdec48c661cab3f876485069385b196affd7
+Homepage: https://www.freedesktop.org/wiki/Software/cups-pk-helper
+Description: PolicyKit helper to configure cups with fine-grained privileges
+ This package provides a PolicyKit helper to configure cups with
+ fine-grained privileges. For example, it's possible to let users
+ enable/disable printers without requiring a password, while still
+ requiring a password for editing printer settings.
+
+Package: cups-ppdc
+Architecture: amd64
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: utils
+Source: cups
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 469
+Depends: cups-common (>= 2.4.16-1ubuntu1.3), libc6 (>= 2.38), libcups2t64 (>= 2.3~b6), libgcc-s1 (>= 3.3.1), libstdc++6 (>= 5)
+Filename: pool/cups-ppdc_2.4.16-1ubuntu1.3_amd64.deb
+Size: 120510
+MD5sum: e99035ee897241dd0767e23ab7fce48a
+SHA1: aeeaeeec73e6389ee795e4464057107f824438b1
+SHA256: d64b410c16204a4c51dcf26ad326467356d10fb07d5f35e8067747e520eed3e9
+SHA512: 89f9de0bb7bf24c45718390b3f2a106153b407c87e77f09a19e319f40666b0ce4fb4b520fd18ea52fb143aee196768d7d7446af743779fca8c3eb76a7c1ab891
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - PPD manipulation utilities
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpd and the like. It supports the Internet
+ Printing Protocol (IPP), and has its own filtering driver model for
+ handling various document types.
+ .
+ This package provides utilities to generate and manipulate PPD files.
+
+Package: cups-server-common
+Architecture: all
+Version: 2.4.16-1ubuntu1.3
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: cups
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Printing Team
+Installed-Size: 2389
+Filename: pool/cups-server-common_2.4.16-1ubuntu1.3_all.deb
+Size: 415788
+MD5sum: 3ce068adcafacb300f19e48b6feb148e
+SHA1: 46cc7873409b79af80472dd6b94253475a6259c7
+SHA256: 197fa1ab57a888c5013a5e7b8e9a6617a88bc11291a83ac13931415e07130d11
+SHA512: e4a8e501845f86945217f110661b1fa2141c2b148ef68eaa718ffd53c21b7108cff4bf6e119eb3a488eb89b335a8527df26581fb0bddec7f0f6c91874eb9277c
+Homepage: https://github.com/OpenPrinting/cups/
+Description: Common UNIX Printing System(tm) - server common files
+ The Common UNIX Printing System (or CUPS(tm)) is a printing system and
+ general replacement for lpd and the like. It supports the Internet
+ Printing Protocol (IPP), and has its own filtering driver model for
+ handling various document types.
+ .
+ This package provides common files for CUPS server.
+
+Package: curl
+Architecture: amd64
+Version: 8.18.0-1ubuntu2.5
+Multi-Arch: foreign
+Priority: optional
+Section: web
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Curl Maintainers
+Installed-Size: 511
+Depends: libcurl4t64 (= 8.18.0-1ubuntu2.5), libc6 (>= 2.34), zlib1g (>= 1:1.1.4)
+Recommends: bash-completion
+Filename: pool/curl_8.18.0-1ubuntu2.5_amd64.deb
+Size: 272202
+MD5sum: dce6d3269d7e5dfbbe931d3d2630e84d
+SHA1: 6cf691869cf47b2ec3e980b1e0467a16543ae598
+SHA256: 646c41ecab7fa98ea99fb1957f73ce891d0d420e0aa138f8cc6f4b247ef5bde3
+SHA512: a7fdfbb2717509a048ffbbaa45bf0068429b059fcd93f252f74db2e45290ee6d47079ab6dbb96cfed3544938b3e765d1731789c093834b50c98116b7b610cf8d
+Homepage: https://curl.se/
+Description: command line tool for transferring data with URL syntax
+ curl is a command line tool for transferring data with URL syntax, supporting
+ DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3,
+ POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP.
+ .
+ curl supports SSL certificates, HTTP POST, HTTP PUT, FTP uploading, HTTP form
+ based upload, proxies, cookies, user+password authentication (Basic, Digest,
+ NTLM, Negotiate, kerberos...), file transfer resume, proxy tunneling and a
+ busload of other useful tricks.
+
+Package: dbus
+Architecture: amd64
+Version: 1.16.2-2ubuntu4
+Multi-Arch: foreign
+Priority: standard
+Section: admin
+Maintainer: Ubuntu Developers
+Original-Maintainer: Utopia Maintenance Team
+Installed-Size: 141
+Provides: dbus-system-bus (= 1.16.2-2ubuntu4), default-dbus-system-bus
+Depends: dbus-bin (= 1.16.2-2ubuntu4), dbus-daemon (= 1.16.2-2ubuntu4), dbus-system-bus-common (>= 1.16.2-2ubuntu4), base-files (>= 13.4~), libc6 (>= 2.34), libdbus-1-3 (= 1.16.2-2ubuntu4), libexpat1 (>= 2.1~beta3)
+Suggests: default-dbus-session-bus | dbus-session-bus
+Filename: pool/dbus_1.16.2-2ubuntu4_amd64.deb
+Size: 24152
+MD5sum: f6d81120b671057a3ee7d453c3bcbb40
+SHA1: 8ece0e85aa47a79d968298637afca6b89113101b
+SHA256: 3e19a3e85d696b164a1a0e0419b919ceb19cd9d89b6fdbb0d1c4caa0f6e5e526
+SHA512: 1e26ffa136b84d3236430639dee0d23e6bee8c6000b2d8bd6fc15075fefa24298c10502ed915fb67c04a677caf8608b81c77059541b917c1cc6533a21eb31b7a
+Homepage: https://dbus.freedesktop.org/
+Description: simple interprocess messaging system (system message bus)
+ D-Bus is a message bus, used for sending messages between applications.
+ Conceptually, it fits somewhere in between raw sockets and CORBA in
+ terms of complexity.
+ .
+ D-Bus supports broadcast messages, asynchronous messages (thus
+ decreasing latency), authentication, and more. It is designed to be
+ low-overhead; messages are sent using a binary protocol, not using
+ XML. D-Bus also supports a method call mapping for its messages, but
+ it is not required; this makes using the system quite simple.
+ .
+ It comes with several bindings, including GLib, Python, Qt and Java.
+ .
+ This package provides a fully-functional D-Bus system bus with activation
+ support, used for communication between system services, and depends on
+ most of the other components of the reference implementation of D-Bus.
+ .
+ To provide a complete D-Bus session bus, install one of the packages
+ that implement the dbus-session-bus virtual package, such as
+ dbus-user-session. The recommended implementation is indicated by
+ the default-dbus-session-bus virtual package.
+
+Package: dbus-bin
+Architecture: amd64
+Version: 1.16.2-2ubuntu4
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: dbus
+Maintainer: Ubuntu Developers
+Original-Maintainer: Utopia Maintenance Team
+Installed-Size: 193
+Depends: libc6 (>= 2.38), libdbus-1-3 (= 1.16.2-2ubuntu4)
+Breaks: dbus (<< 1.13.18-2~)
+Replaces: dbus (<< 1.13.18-2~)
+Filename: pool/dbus-bin_1.16.2-2ubuntu4_amd64.deb
+Size: 40052
+MD5sum: a5c1b4577c1f52850232149aded1430d
+SHA1: 55c3b0ee6500585d11710bc25bd2367cb5c45d7c
+SHA256: 9c191045a54eae56c583e4c29993ed75c521fbc18f312820387e0e8a514ab76a
+SHA512: 11c6501ac77e70f1f8347c094b7d5f8e6657bb4182838b9ff5d21c7dfda8e318afc22c485f272f750c2a7dad8af9a3c47bb4e639675266ee00330a57eab96d2f
+Homepage: https://dbus.freedesktop.org/
+Description: simple interprocess messaging system (command line utilities)
+ D-Bus is a message bus, used for sending messages between applications.
+ Conceptually, it fits somewhere in between raw sockets and CORBA in
+ terms of complexity.
+ .
+ This package contains the D-Bus command-line utilities such as dbus-send
+ and dbus-monitor.
+
+Package: dbus-daemon
+Architecture: amd64
+Version: 1.16.2-2ubuntu4
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: dbus
+Maintainer: Ubuntu Developers
+Original-Maintainer: Utopia Maintenance Team
+Installed-Size: 343
+Depends: dbus-bin (= 1.16.2-2ubuntu4), dbus-session-bus-common (>= 1.16.2-2ubuntu4), libapparmor1 (>= 2.8.94), libaudit1 (>= 1:2.2.1), libc6 (>= 2.34), libcap-ng0 (>= 0.7.9), libdbus-1-3 (= 1.16.2-2ubuntu4), libexpat1 (>= 2.1~beta3), libselinux1 (>= 3.1~), libsystemd0
+Breaks: dbus (<< 1.13.18-2~)
+Replaces: dbus (<< 1.13.18-2~)
+Filename: pool/dbus-daemon_1.16.2-2ubuntu4_amd64.deb
+Size: 118996
+MD5sum: 418221da9fa6ee61665f8eb10b5c9ed0
+SHA1: 120099c9a5d29c8a53d98ae90767c59275129feb
+SHA256: 5e8b9f5527234cfb15f95f8449595e4118aa6a378f71b9472ba718c4e253508b
+SHA512: 3e58aa8f967d0cd15a1723108bd28372fd53b1afa6cd28d3b8ae1148c1f9e1185ca8c3b6183e35dadbb36016777a8d17ec0fd7fdcdf4b2451797f145c2830b76
+Homepage: https://dbus.freedesktop.org/
+Description: simple interprocess messaging system (reference message bus)
+ D-Bus is a message bus, used for sending messages between applications.
+ Conceptually, it fits somewhere in between raw sockets and CORBA in
+ terms of complexity.
+ .
+ This package contains dbus-daemon, the reference implementation of a
+ D-Bus message bus, and dbus-run-session, a utility to start a temporary
+ session dbus-daemon in a constrained environment or for automated tests.
+ .
+ To provide a complete D-Bus session bus, install one of the packages
+ that implement the dbus-session-bus virtual package, such as
+ dbus-user-session. The recommended implementation is indicated by
+ the default-dbus-session-bus virtual package.
+
+Package: dbus-session-bus-common
+Architecture: all
+Version: 1.16.2-2ubuntu4
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: dbus
+Maintainer: Ubuntu Developers
+Original-Maintainer: Utopia Maintenance Team
+Installed-Size: 83
+Breaks: dbus (<< 1.13.18-2~)
+Replaces: dbus (<< 1.13.18-2~)
+Filename: pool/dbus-session-bus-common_1.16.2-2ubuntu4_all.deb
+Size: 54462
+MD5sum: 161b7272cebbcf9890f91e236b432c1f
+SHA1: a6188ffd8d860c63dbb8c2be73e0a924286c8b19
+SHA256: c4debf213b12e178096ca1eb8c6afd6de74b425da998a7788c42252c1f99ef3d
+SHA512: c9e3fc606776a0666cbdd925f6d0bebce9533e392dae15fc513f06c0d649b91a9ec2083f262d33cda564087c14911d8a000f0f2a5b44c5ee29495c014aa7c3dc
+Homepage: https://dbus.freedesktop.org/
+Description: simple interprocess messaging system (session bus configuration)
+ D-Bus is a message bus, used for sending messages between applications.
+ Conceptually, it fits somewhere in between raw sockets and CORBA in
+ terms of complexity.
+ .
+ This package contains the configuration files defining the behaviour of
+ the D-Bus session bus, used for applications and per-user services.
+ These are used by the reference implementation in the dbus package,
+ and by the reimplementation in the dbus-broker package.
+ .
+ To provide a complete D-Bus session bus, install one of the packages
+ that implement the dbus-session-bus virtual package, such as
+ dbus-user-session. The recommended implementation is indicated by
+ the default-dbus-session-bus virtual package.
+
+Package: dbus-system-bus-common
+Architecture: all
+Version: 1.16.2-2ubuntu4
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: dbus
+Maintainer: Ubuntu Developers
+Original-Maintainer: Utopia Maintenance Team
+Installed-Size: 94
+Depends: adduser (>= 3.130) | systemd-sysusers
+Breaks: dbus (<< 1.13.18-2~)
+Replaces: dbus (<< 1.13.18-2~)
+Filename: pool/dbus-system-bus-common_1.16.2-2ubuntu4_all.deb
+Size: 55898
+MD5sum: ad9a9d2a1349568e8d63a24b781b9de0
+SHA1: 9a83486e00acd3434fdf0fd9c1ca2a31e54e5f41
+SHA256: 96a330e99f4d130d3aa1842881488f507d11ec46d897f410fe7afad14ed8c3a4
+SHA512: 256b115c022d705283566b7ddf09e76cc9a77481b290b303d9be27691a322fcd61d0dc80145bf2d7a9881cd668f0339b10964c29d6beb9b8f1bdef5ba77d34eb
+Homepage: https://dbus.freedesktop.org/
+Description: simple interprocess messaging system (system bus configuration)
+ D-Bus is a message bus, used for sending messages between applications.
+ Conceptually, it fits somewhere in between raw sockets and CORBA in
+ terms of complexity.
+ .
+ This package contains the configuration files defining the behaviour of
+ the D-Bus system bus, used for system services such as networking and
+ storage management services. It is also responsible for creating the
+ 'messagebus' system user account used to run the system bus.
+ These are used by the reference implementation in the dbus package,
+ and by the reimplementation in the dbus-broker package.
+ .
+ To provide a complete D-Bus system bus, install one of the packages
+ that implement the dbus-system-bus virtual package, such as dbus.
+ The recommended implementation is indicated by the default-dbus-system-bus
+ virtual package.
+
+Package: dbus-user-session
+Architecture: amd64
+Version: 1.16.2-2ubuntu4
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: dbus
+Maintainer: Ubuntu Developers
+Original-Maintainer: Utopia Maintenance Team
+Installed-Size: 87
+Provides: dbus-session-bus, default-dbus-session-bus
+Depends: dbus-daemon (= 1.16.2-2ubuntu4) | dbus-broker, dbus-session-bus-common (>= 1.16.2-2ubuntu4), libpam-systemd, systemd
+Recommends: systemd-sysv
+Filename: pool/dbus-user-session_1.16.2-2ubuntu4_amd64.deb
+Size: 9682
+MD5sum: 34a13aeb3996378cecf1b385147cde78
+SHA1: ba008a8d7703e83deace5639146b586cb4c4b8e5
+SHA256: cf0b0c4d223f3465df0e057f1a0810d69643a4d3e64734d72ce5e5b488a9618c
+SHA512: 7fae2ad3773319288f560d18a5e942425a8a15c02e95ec46b3e1324f127a47340a64cd97d8491ed37e4366f2ad8fe1551638fefc120661a31be2b934e3edd78e
+Homepage: https://dbus.freedesktop.org/
+Description: simple interprocess messaging system (systemd --user integration)
+ D-Bus is a message bus, used for sending messages between applications.
+ Conceptually, it fits somewhere in between raw sockets and CORBA in
+ terms of complexity.
+ .
+ On systemd systems, this package opts in to the session model in which
+ a user's session starts the first time they log in, and does not end
+ until all their login sessions have ended. This model merges all
+ parallel non-graphical login sessions (text mode, ssh, cron, etc.), and up
+ to one graphical session, into a single "user-session" or "super-session"
+ within which all background D-Bus services are shared.
+ .
+ Multiple graphical sessions per user are not currently supported in this
+ mode; as a result, it is particularly suitable for gdm, which responds to
+ requests to open a parallel graphical session by switching to the existing
+ graphical session and unlocking it.
+ .
+ To retain dbus' traditional session semantics, in which login sessions
+ are artificially isolated from each other, remove this package and install
+ dbus-x11 instead.
+ .
+ See the dbus package description for more information about D-Bus in general.
+
+Package: dc
+Architecture: amd64
+Version: 1.07.1-4build1
+Multi-Arch: foreign
+Priority: standard
+Section: math
+Source: bc
+Maintainer: Ubuntu Developers
+Original-Maintainer: Ryan Kavanagh
+Installed-Size: 130
+Depends: libc6 (>= 2.38)
+Filename: pool/dc_1.07.1-4build1_amd64.deb
+Size: 49626
+MD5sum: 2c04f94bfb9fd5ff494c39d8f53d0c44
+SHA1: d839af6e4e62feb71e6b15c65fc0385396c79138
+SHA256: e5e22aa8607bcafb64f03f9fa8c6494f32e33b76f6de3d3f6db40231ce6c92b8
+SHA512: 197b3da61582db4748f0cff3199bb65094c4388f1d628a4eba089a088b0d63fc879033590aedf5db04b26acdd830ae7658264b8670d85aa0094742fda2fbeb88
+Homepage: https://www.gnu.org/software/bc/
+Description: GNU dc arbitrary precision reverse-polish calculator
+ GNU dc is a reverse-polish desk calculator which supports unlimited
+ precision arithmetic. It also allows you to define and call macros.
+ .
+ A reverse-polish calculator stores numbers on a stack. Entering a number
+ pushes it on the stack. Arithmetic operations pop arguments off the
+ stack and push the results.
+
+Package: dconf-cli
+Architecture: amd64
+Version: 0.49.0-4
+Multi-Arch: foreign
+Priority: optional
+Section: utils
+Source: dconf
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian GNOME Maintainers
+Installed-Size: 88
+Depends: libdconf1 (= 0.49.0-4), libc6 (>= 2.34), libglib2.0-0t64 (>= 2.76.0)
+Conflicts: dconf
+Filename: pool/dconf-cli_0.49.0-4_amd64.deb
+Size: 28548
+MD5sum: 21bee05e1b8d219d67cc661c58f6e7ed
+SHA1: 3aefb51506cd0c8f4a9f6efadb738efbc701fcc4
+SHA256: a79fb20ecbb95391aa5df2d2e8442200c150425a0800e89a0d806e196366e51f
+SHA512: 293cce0e546345a5607114901e51f93f5e95ca7a91bd608050747e117be72e6c42f3503b916a0b98fe69f04bc70b537d2b038ddf28e916a530bfdb04241f5f81
+Homepage: https://wiki.gnome.org/Projects/dconf
+Description: simple configuration storage system - utilities
+ DConf is a low-level key/value database designed for storing desktop
+ environment settings.
+ .
+ This package contains the command line tools. Note that DConf is not
+ connected with the older Debian package named dconf.
+
+Package: dconf-gsettings-backend
+Architecture: amd64
+Version: 0.49.0-4
+Multi-Arch: same
+Priority: optional
+Section: libs
+Source: dconf
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian GNOME Maintainers
+Installed-Size: 74
+Provides: gsettings-backend
+Depends: dconf-service (<< 0.49.0-4.1~), dconf-service (>= 0.49.0-4), libdconf1 (= 0.49.0-4), libc6 (>= 2.4), libglib2.0-0t64 (>= 2.80.0)
+Filename: pool/dconf-gsettings-backend_0.49.0-4_amd64.deb
+Size: 22172
+MD5sum: 313cba6e380f441833c81c0c0af3525d
+SHA1: 70e026f8b09248e87e30a0c4b330210b3bc0bac6
+SHA256: 4da7b8309d49079ebac028c1f3284df02463da451cbd5f90ea61e535534531ac
+SHA512: bfd4d5340ae63f3f4994b298b7c24dce4624ccfc1eff1c4daa65057a234f5f84eefd4cb19b5ba0dacb58ac013935d3f0f75d7bc075befb5450026b98e77bc79a
+Homepage: https://wiki.gnome.org/Projects/dconf
+Description: simple configuration storage system - GSettings back-end
+ DConf is a low-level key/value database designed for storing desktop
+ environment settings.
+ .
+ This package contains a back-end for GSettings. It is needed by
+ applications accessing settings through GSettings to set custom values
+ and listen for changes.
+
+Package: dconf-service
+Architecture: amd64
+Version: 0.49.0-4
+Multi-Arch: foreign
+Priority: optional
+Section: libs
+Source: dconf
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian GNOME Maintainers
+Installed-Size: 97
+Depends: default-dbus-session-bus | dbus-session-bus, libdconf1 (= 0.49.0-4), procps, libc6 (>= 2.34), libglib2.0-0t64 (>= 2.83.0)
+Recommends: dconf-gsettings-backend
+Filename: pool/dconf-service_0.49.0-4_amd64.deb
+Size: 27696
+MD5sum: dcd25cbe5be756e53d13fa1697dedd8b
+SHA1: 690a1e7d870906803deb8541ab16b9c723460e33
+SHA256: 7f247f6032e72f86b1877f0020de77a0f8a11de256cf8f1726c072cf09585d31
+SHA512: 98db874a96b3230a1b0534489d67476290663be8a4bab42c2d606dc30dca88de4c6313cae80a49dfac5633e95578ac4b57e0f72ecfb71a70429562e5adc7eab9
+Homepage: https://wiki.gnome.org/Projects/dconf
+Description: simple configuration storage system - D-Bus service
+ DConf is a low-level key/value database designed for storing desktop
+ environment settings.
+ .
+ This package contains the DConf service, which applications talk to
+ using D-Bus in order to obtain their settings. It is mostly used by the
+ GSettings backend.
+
+Package: desktop-file-utils
+Architecture: amd64
+Version: 0.28-1build1
+Multi-Arch: foreign
+Priority: optional
+Section: devel
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian freedesktop.org maintainers
+Installed-Size: 247
+Depends: libc6 (>= 2.34), libglib2.0-0t64 (>= 2.50.0)
+Filename: pool/desktop-file-utils_0.28-1build1_amd64.deb
+Size: 54312
+MD5sum: f03571edb1663f8293df03c811b13d77
+SHA1: df3c51919626c594e8b2e51ccd59a0183d4e1ca4
+SHA256: 4bc2c38ed9722d6ccdc7b27e77852f35363d06b8a8d786856aed4ffea98840b7
+SHA512: 89425102d33e3b841fe0aeb58ba0cfcbf5cc21487decf6f03280d75c592318ce87a34ddc559d282886e5b67e9ddbda452b93f4c56ee1dd7084049495b40d4f8e
+Homepage: https://www.freedesktop.org/wiki/Software/desktop-file-utils
+Description: Utilities for .desktop files
+ Some utilities to make dealing with .desktop files easier:
+ * update-desktop-database -- update the desktop-MIME mapping
+ * desktop-file-validate -- validate a desktop file
+ * desktop-file-install -- install a desktop file, munging en route.
+
+Package: dhcpcd-base
+Architecture: amd64
+Version: 1:10.3.0-7
+Priority: important
+Section: net
+Source: dhcpcd
+Maintainer: Ubuntu Developers
+Original-Maintainer: Martin-Éric Racine
+Installed-Size: 537
+Provides: dhcp-client
+Depends: systemd | systemd-standalone-sysusers | systemd-sysusers, libc6 (>= 2.42), libssl3t64 (>= 3.0.0), libudev1 (>= 183)
+Suggests: openresolv | resolvconf | systemd-resolved
+Breaks: dhcpcd5 (<< 1:10.3.0-7~)
+Replaces: dhcpcd5 (<< 1:10.3.0-7~)
+Filename: pool/dhcpcd-base_1%3a10.3.0-7_amd64.deb
+Size: 227896
+MD5sum: 66f423b2b07ed82919b0d64a9d60490a
+SHA1: c3f22d0f03b3964ed69b338dad1aa4a654f33f4d
+SHA256: 8b58af259355e50864c650dca5f07fc81cd1e3ad87fc5b813048a4653daaefd2
+SHA512: 593641690bd6adf4a43541acd5da46e3c8ea24c8816a62412b05bf9edc4d477d6b827f3db99ce6fecf8ba1132606232adf87c8730368b9ca5f5225e441e079a1
+Homepage: https://github.com/NetworkConfiguration/dhcpcd
+Description: DHCPv4 and DHCPv6 dual-stack client (binaries and exit hooks)
+ dhcpcd provides seamless IPv4 and IPv6 auto-configuration:
+ * DHCPv4 client
+ * DHCPv6 client with Prefix Delegation (PD) support
+ * IPv4LL support (ZeroConf)
+ * IPv6RS support (SLAAC)
+ * ARP address conflict resolution
+ * ARP ping profiles
+ * Wireless SSID profiles
+ .
+ This package provides the binaries, exit hooks and manual pages.
+ .
+ It offers a dual-stack substitute for ISC DHCP Client (dhclient) on systems
+ where interfaces are configured by ifupdown via
+ using the DHCP method.
+ .
+ The init.d script and systemd service required for systems without ifupdown
+ are packaged separately as dhcpcd.
+ .
+ Since Debian 12 (Bookworm), dhcpcd uses Predictable Network Interface Names
+ on Linux ports. See NEWS.Debian for more details.
+
+Package: dictionaries-common
+Architecture: all
+Version: 1.31.4
+Multi-Arch: foreign
+Priority: optional
+Section: text
+Maintainer: Ubuntu Developers
+Original-Maintainer: Agustin Martin Domingo
+Installed-Size: 717
+Provides: openoffice.org-updatedicts
+Depends: debconf (>= 0.5) | debconf-2.0, libtext-iconv-perl, emacsen-common
+Suggests: ispell | aspell | hunspell, wordlist
+Breaks: myspell-ca (<= 0.6-10), myspell-cs-cz (<= 20040229-5), myspell-de-de-oldspell (<= 1:2-27), myspell-eu-es (<= 0.4.20081029-4), myspell-fi (<= 0.7-17.3), myspell-gl-es (<= 2.2a-8), myspell-ku (<= 0.20.0-1.1), myspell-nl (<= 1:2.0-1), myspell-nr (<< 20070206-4ubuntu1), myspell-ns (<< 20070206-4ubuntu1), myspell-sl (<< 1.0-3ubuntu1), myspell-ss (<< 20070206-4ubuntu1), myspell-tn (<< 20070206-4ubuntu1), myspell-ts (<< 20070207-4ubuntu1), myspell-ve (<< 20070206-3ubuntu1), myspell-xh (<< 20070206-4ubuntu1), myspell-zu (<< 20070207-5ubuntu1), openoffice.org-thesaurus-it (<< 2.0.7.gh.deb1-1.1ubuntu3)
+Replaces: openoffice.org-updatedicts
+Filename: pool/dictionaries-common_1.31.4_all.deb
+Size: 176602
+MD5sum: 4018f98667f50e85d0067fbadb51e192
+SHA1: 4176959257495c38773625835e664e0e521991d7
+SHA256: 465aa924e33faecfacf7925f6fb7ab92ecb97505e6bf204db34b93ee5a3fa749
+SHA512: b0c957db0ff067f47e74882c2d4d4b4cb91d649588b1be1298e251b750b45173b13d65a24bea77ce9bebaf9a1a321f59f86dc69e60a4d721028aa5d94f8c88cd
+Homepage: https://salsa.debian.org/debian/dictionaries-common
+Description: spelling dictionaries - common utilities
+ This package provides utilities shared between all wordlists and spelling
+ dictionaries for Ispell, Aspell, or MySpell/Hunspell. It also includes
+ support infrastructure for software using them (such as JED and Mutt),
+ and some patched spell-checking Lisp files for better Emacs integration.
+ .
+ More information about the availability of these dictionaries and their
+ naming conventions is available in the README.Debian file.
+
+Package: distro-info
+Architecture: amd64
+Version: 1.15
+Priority: optional
+Section: devel
+Maintainer: Ubuntu Developers
+Original-Maintainer: Benjamin Drung
+Installed-Size: 71
+Depends: distro-info-data (>= 0.59~), libc6 (>= 2.34)
+Suggests: shunit2
+Filename: pool/distro-info_1.15_amd64.deb
+Size: 20232
+MD5sum: 928944600c3bcba3d35629025ea4dfc6
+SHA1: 05bca03634b121416518702068466e801583a1d4
+SHA256: 9d65499fef4fa9b558ea25a5cfa232d1b96c2c1b52a62919c403e8f7e78700e5
+SHA512: 504a9c1bfe7d6790b30840f82a8dfa712a02d24a203e870f1d8c177f6d730ccb03e7c4324d71b3c58139262014cb590ebd66c1e430c79bf5e2fc66267e76389b
+Description: provides information about the distributions' releases
+ Information about all releases of Debian and Ubuntu. The distro-info script
+ will give you the codename for e.g. the latest stable release of your
+ distribution. To get information about a specific distribution there are the
+ debian-distro-info and the ubuntu-distro-info scripts.
+
+Package: distro-info-data
+Architecture: all
+Version: 0.72-0ubuntu0.26.04.1
+Multi-Arch: foreign
+Priority: optional
+Section: devel
+Maintainer: Ubuntu Developers
+Original-Maintainer: Benjamin Drung
+Installed-Size: 20
+Breaks: distro-info (<< 1.0~)
+Filename: pool/distro-info-data_0.72-0ubuntu0.26.04.1_all.deb
+Size: 6118
+MD5sum: 402a8be56a7301bc80ac0daed84dc711
+SHA1: aa81f796cff78b58f4a10c4b032c08cff51f874b
+SHA256: 7dc20e15aa612cbc8cde8b9f07612e462232b57dd81bfdc134d2062f8d7bd90f
+SHA512: 60f07b9a340ae34f59e4dcca778d8a6136a03b84e69f1aca12d17972540091a829581175e52f259414382bdfe8f5b95324e4d659fbf26a7568e3e186eae844c0
+Homepage: https://salsa.debian.org/debian/distro-info-data
+Description: information about the distributions' releases (data files)
+ Information about all releases of Debian and Ubuntu. The distro-info script
+ will give you the codename for e.g. the latest stable release of your
+ distribution. To get information about a specific distribution there are the
+ debian-distro-info and the ubuntu-distro-info scripts.
+ .
+ This package contains the data files.
+
+Package: dmidecode
+Architecture: amd64
+Version: 3.6-2ubuntu1
+Multi-Arch: foreign
+Priority: important
+Section: utils
+Maintainer: Ubuntu Developers
+Original-Maintainer: Jörg Frings-Fürst
+Installed-Size: 227
+Depends: libc6 (>= 2.38)
+Filename: pool/dmidecode_3.6-2ubuntu1_amd64.deb
+Size: 72828
+MD5sum: c95e1b01ec8b5aaf9a8d0be2c014a267
+SHA1: 263ab29676ba73215bdfc3e018fe5c503c5c5f4d
+SHA256: 36ac8fce0b6a4f16faaa824faa67501487f0c91e7b8d24993b3c3e7b4d46073d
+SHA512: d83124959e194bc29d688204babcf5dbf0d4b744c247a05bd4126430649488adcac1efd39c3d712979277aeb9046cd08ec48d5cad94cc6d506a70f6bd4df1a8b
+Homepage: https://nongnu.org/dmidecode/
+Description: SMBIOS/DMI table decoder
+ Dmidecode reports information about the system's hardware as described in the
+ system BIOS according to the SMBIOS/DMI standard.
+ .
+ This information typically includes system manufacturer, model name, serial
+ number, BIOS version, asset tag as well as a lot of other details of varying
+ level of interest and reliability depending on the manufacturer. This will
+ often include usage status for the CPU sockets, expansion slots (e.g. AGP, PCI,
+ ISA) and memory module slots, and the list of I/O ports (e.g. serial, parallel,
+ USB).
+ .
+ Beware that DMI data have proven to be too unreliable to be blindly trusted.
+ Dmidecode does not scan the hardware, it only reports what the BIOS told it to.
+
+Package: dmsetup
+Architecture: amd64
+Version: 2:1.02.205-2ubuntu3
+Multi-Arch: foreign
+Priority: optional
+Section: admin
+Source: lvm2 (2.03.31-2ubuntu3)
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian LVM Team
+Installed-Size: 254
+Depends: libc6 (>= 2.38), libdevmapper1.02.1 (>= 2:1.02.197)
+Filename: pool/dmsetup_2%3a1.02.205-2ubuntu3_amd64.deb
+Size: 79372
+MD5sum: 57c7f833c744ce34467af40619e09aa9
+SHA1: 70ee5f4fe943a1f9e06ace7459b036472eaf9d2d
+SHA256: a90c4e24ec00bf166071860671f195b5240b56b9a583813af551a0b68f629a36
+SHA512: f21f8abe975b52f90875dfc9669d186bb9198122afd1c24a8d1925fb6a9f758282eb3cf6e6bd1f1f1e1d9cda216e490c4b607783bddc7a971606858af0f486bb
+Homepage: https://sourceware.org/lvm2/
+Description: Linux Kernel Device Mapper userspace library
+ The Linux Kernel Device Mapper is the LVM (Linux Logical Volume Management)
+ Team's implementation of a minimalistic kernel-space driver that handles
+ volume management, while keeping knowledge of the underlying device layout
+ in user-space. This makes it useful for not only LVM, but software raid,
+ and other drivers that create "virtual" block devices.
+ .
+ This package contains a utility for modifying device mappings.
+
+Package: dmz-cursor-theme
+Architecture: all
+Version: 0.4.5.3build1
+Priority: optional
+Section: gnome
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian GNOME Maintainers
+Installed-Size: 3567
+Filename: pool/dmz-cursor-theme_0.4.5.3build1_all.deb
+Size: 247860
+MD5sum: 927ddd2282843f8a89cf43e9848f0ba5
+SHA1: 472020eeb78eff45980489ebabe3baea785f65d7
+SHA256: 85a8b3b0ce547fdbe3dce6e8721ebd1e7a124343e670375a5aa8c50e41bb0f6d
+SHA512: 5fe8e636ce2e730bf686052d487bb4e967ffa4cf9f00a2d5e613df4037cfa80d9b7f4e140ee308dc7e05bb2724eda5535ed595c2dd5c843975a0258946289695
+Description: Style neutral, scalable cursor theme
+ This package contains the DMZ cursor themes, which are derived from
+ the Industrial theme developed for the Ximian GNOME desktop. Black and
+ white cursors are provided, in scalable formats.
+
+Package: dns-root-data
+Architecture: all
+Version: 2025080400build1
+Multi-Arch: foreign
+Priority: optional
+Section: misc
+Maintainer: Ubuntu Developers
+Original-Maintainer: dns-root-data packagers
+Installed-Size: 19
+Filename: pool/dns-root-data_2025080400build1_all.deb
+Size: 6022
+MD5sum: a8bd0fbf9da5eb97dfb2baee707a3b5b
+SHA1: 0d416bc655528bb7564b06c4f25e1edf3137f03c
+SHA256: f246a598331f362860f1360792cf497372a07d84dd0d3dabc2a9344d7d6d5f83
+SHA512: 0c2271f5ddcc018e12223985e057251b615e9fa81d012451f14017e4d82d107b6af41bada64057caf966a6a2e4d9415f59a7667751b6af8147439908cdc9702f
+Homepage: https://data.iana.org/root-anchors/
+Description: DNS root hints and DNSSEC trust anchor
+ This package contains various root zone related data as published
+ by IANA to be used by various DNS software as a common source
+ of DNS root zone data, namely:
+ .
+ * Root Hints (root.hints)
+ * Root Trust Anchors (root.key, root.ds)
+
+Package: dnsmasq-base
+Architecture: amd64
+Version: 2.92-1ubuntu0.4
+Multi-Arch: foreign
+Priority: optional
+Section: net
+Source: dnsmasq
+Maintainer: Ubuntu Developers
+Original-Maintainer: Simon Kelley
+Installed-Size: 920
+Provides: dnsmasq-base
+Depends: passwd, libc6 (>= 2.38), libdbus-1-3 (>= 1.10), libgmp10 (>= 2:6.3.0+dfsg), libhogweed6t64 (>= 2.4-3), libidn2-0 (>= 2.0.0), libnetfilter-conntrack3 (>= 1.0.1), libnettle8t64 (>= 2.4-3), libnftables1 (>= 1.0.2)
+Recommends: dns-root-data
+Conflicts: dnsmasq-base-lua
+Breaks: dnsmasq (<< 2.63-1~)
+Replaces: dnsmasq (<< 2.63-1~), dnsmasq-base
+Filename: pool/dnsmasq-base_2.92-1ubuntu0.4_amd64.deb
+Size: 438978
+MD5sum: 31d603d64d150351bfd47353ea2b7c81
+SHA1: a8c703a097b7c05c36ca52bb654fea02614e936d
+SHA256: fef2ce81dc80dd9099ab0539d169c7f0c2178946c9bb1cc2b9a263c1b00de5ea
+SHA512: 308098dbb9e5bf2f35973b2d562f967f96703112745627ba46eeb5d7bf77e7368120c5aa2b7741b14a5771f616eed910f5ef4f8343164597f62ba3f69e7dcc27
+Homepage: https://www.thekelleys.org.uk/dnsmasq/doc.html
+Description: Small caching DNS proxy and DHCP/TFTP server - executable
+ This package contains the dnsmasq executable and documentation, but
+ not the infrastructure required to run it as a system daemon. For
+ that, install the dnsmasq package.
+
+Package: docbook-xml
+Architecture: all
+Version: 4.5-13build1
+Multi-Arch: foreign
+Priority: optional
+Section: text
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian QA Group
+Installed-Size: 2127
+Provides: docbk-xml
+Depends: sgml-data, xml-core (>= 0.14), sgml-base (>= 1.28)
+Suggests: docbook, docbook-defguide, docbook-dsssl, docbook-xsl
+Filename: pool/docbook-xml_4.5-13build1_all.deb
+Size: 73994
+MD5sum: 325329c4a8e56ea37f1bd81118da818d
+SHA1: 798bc7e5582156bf389566bca1709658f1b11826
+SHA256: 7e8e0c6b5204aa8816683d29d7f7ca9280cbc866838a4f62adb497e9886a6ae5
+SHA512: 395beb81bedf093510cf89c6dd5d48aec8bca2f6229140b7af7be39f29477812c9da4c64298c0ff1fe3ae649016c46f170f9820bc04e590faa335be8b58b6fd6
+Homepage: https://docbook.org/schemas/4x.html
+Description: standard XML documentation system for software and systems
+ DocBook is an XML document type definition (DTD). That is, it
+ contains the "DocBook" document structure. This is used by authors
+ or editors writing documents in the DocBook XML format. DocBook was
+ designed for books, articles, or reference documentation about
+ technical matters or software. It has emerged as an open, standard
+ DTD in the software industry, and is the documentation system of
+ choice for many free software projects.
+ .
+ This package contains the XML DTD for DocBook, which describes the
+ formal structure for documents following this format. If you wish to
+ author DocBook documents using SGML rather than XML, use the
+ 'docbook' package. You will need other packages in order to edit
+ (psgml), validate (opensp, libxml2-utils) or format (docbook-xsl,
+ docbook-dsssl) DocBook documents.
+ .
+ This package ships with the latest DocBook 4.5 XML DTD, as well as a
+ selected set of legacy DTDs for use with older documents, including
+ 4.0, 4.1.2, 4.2, 4.3 and 4.4.
+
+Package: docker-buildx-plugin
+Architecture: amd64
+Version: 0.37.1-1~ubuntu.26.04~resolute
+Priority: optional
+Section: admin
+Maintainer: Docker
+Installed-Size: 71358
+Replaces: docker-ce-cli
+Enhances: docker-ce-cli
+Filename: pool/docker-buildx-plugin_0.37.1-1~ubuntu.26.04~resolute_amd64.deb
+Size: 17271368
+MD5sum: 947e77c86210a1c501a9ea52f940b4e8
+SHA1: f7c76f82cefb91d451dd84e40a9d4b6758c3993e
+SHA256: 7d74d16440db560d3dc45d5f7ac83fb2cefb964f4edfabf82dd17a804ac42331
+SHA512: c69c3aba72dbe5191a5484339fe65e17867aea8b3aeff5f2671fb32726310e9ad6a33ac2283fed23b53e76a3ba25c598cb40afb4394c99fc9e341eb4c6b3ee27
+Homepage: https://github.com/docker/buildx
+Description: Docker Buildx plugin extends build capabilities with BuildKit.
+
+Package: docker-ce
+Architecture: amd64
+Version: 5:29.8.1-1~ubuntu.26.04~resolute
+Priority: optional
+Section: admin
+Maintainer: Docker
+Installed-Size: 112484
+Pre-Depends: init-system-helpers (>= 1.54~)
+Depends: containerd.io (>= 2.1.5), docker-ce-cli, iptables, nftables, libc6 (>= 2.34), libsystemd0
+Recommends: apparmor, ca-certificates, docker-ce-rootless-extras, git, pigz, procps, xz-utils
+Suggests: cgroupfs-mount | cgroup-lite
+Conflicts: docker.io
+Replaces: docker-ce-cli (<< 5:28.0.0)
+Filename: pool/docker-ce_5%3a29.8.1-1~ubuntu.26.04~resolute_amd64.deb
+Size: 24339208
+MD5sum: dc4d392f5a18c8d54e7235790923661f
+SHA1: 40e7e3b10ae08b56bf7701a81ad8b6b6fd6756e0
+SHA256: 9a07ee2e75ebe60f7be95ea27a0d5b5358f8ed01ea93ef91c17ee1eed2eba9b8
+SHA512: 7a821b8a34f36fcc82370f640d43d63085967eaaacbd3727db30bede75831bdab4932f2342fecaf3069e3d4475a6fdd4fa32dd9fd19f41e002db15d6e730cafe
+Homepage: https://www.docker.com
+Description: Docker: the open-source application container engine
+ Docker is a product for you to build, ship and run any application as a
+ lightweight container
+ .
+ Docker containers are both hardware-agnostic and platform-agnostic. This means
+ they can run anywhere, from your laptop to the largest cloud compute instance
+ and everything in between - and they don't require you to use a particular
+ language, framework or packaging system. That makes them great building blocks
+ for deploying and scaling web apps, databases, and backend services without
+ depending on a particular stack or provider.
+
+Package: docker-ce-cli
+Architecture: amd64
+Version: 5:29.8.1-1~ubuntu.26.04~resolute
+Priority: optional
+Section: admin
+Source: docker-ce
+Maintainer: Docker
+Installed-Size: 46456
+Depends: libc6 (>= 2.34)
+Recommends: docker-buildx-plugin, docker-compose-plugin
+Suggests: docker-model-plugin
+Conflicts: docker-cli, docker.io
+Breaks: docker-ce (<< 5:0)
+Replaces: docker-ce (<< 5:0)
+Filename: pool/docker-ce-cli_5%3a29.8.1-1~ubuntu.26.04~resolute_amd64.deb
+Size: 17552060
+MD5sum: d36f6377d30dc92fa2ee9fbd645ca62b
+SHA1: ef46f34f2fc997fe027159b776123ef265931502
+SHA256: 3569f6f998c101c499884fc3d1f0d2696a37ae1db381cc1f5cfe4ca4cda143fa
+SHA512: 46c588530bce16b1cf90f10b4603c2000ac0a9333c8f4eb5e7d1040568281946bee4f4960d7bafbc55a70471de5e25951ecf5ccf306bd23a041953bdc05145f4
+Homepage: https://www.docker.com
+Description: Docker CLI: the open-source application container engine
+ Docker is a product for you to build, ship and run any application as a
+ lightweight container
+ .
+ Docker containers are both hardware-agnostic and platform-agnostic. This means
+ they can run anywhere, from your laptop to the largest cloud compute instance
+ and everything in between - and they don't require you to use a particular
+ language, framework or packaging system. That makes them great building blocks
+ for deploying and scaling web apps, databases, and backend services without
+ depending on a particular stack or provider.
+
+Package: docker-ce-rootless-extras
+Architecture: amd64
+Version: 5:29.8.1-1~ubuntu.26.04~resolute
+Priority: optional
+Section: admin
+Source: docker-ce
+Maintainer: Docker
+Installed-Size: 25441
+Depends: dbus-user-session, libc6 (>= 2.34)
+Conflicts: rootlesskit
+Breaks: rootlesskit
+Replaces: rootlesskit
+Enhances: docker-ce
+Filename: pool/docker-ce-rootless-extras_5%3a29.8.1-1~ubuntu.26.04~resolute_amd64.deb
+Size: 10182052
+MD5sum: 152c7a4ea598fc04750149daba6bedb9
+SHA1: d9dcd0eceeeeb1677e96ea2b6c072bc262c5b724
+SHA256: f97a8dcdb4b5e489e53be3283d58fcd136e918b5b6027ca7f9a5d436d24966ba
+SHA512: 36a53adfe3d1e6d4a80bdbe4b6e654bfffb1d65fbc664014b017cf59a94e68aa1b1b18842f9945768c5d798da661e06b4079a7e081e8cea03e7f7c8a6c73dbf3
+Homepage: https://docs.docker.com/go/rootless/
+Description: Rootless support for Docker.
+ Use dockerd-rootless.sh to run the daemon.
+ Use dockerd-rootless-setuptool.sh to setup systemd for dockerd-rootless.sh.
+
+Package: docker-compose-plugin
+Architecture: amd64
+Version: 5.5.1-1~ubuntu.26.04~resolute
+Priority: optional
+Section: admin
+Maintainer: Docker
+Installed-Size: 31590
+Recommends: docker-buildx-plugin (>= 0.17.0)
+Enhances: docker-ce-cli
+Filename: pool/docker-compose-plugin_5.5.1-1~ubuntu.26.04~resolute_amd64.deb
+Size: 8012592
+MD5sum: 8709cfdb01a691806f28764402b453bd
+SHA1: 78ea6359bb964ef0cc862333ae0be22a67d2b466
+SHA256: 49b640226e70a6193ddea8115bec3e1b99493c50a15ac3b7d46d2ec6abeb5464
+SHA512: eb63696d82f1adc14c10f61af0c4389e0b4f63a680a1a845a2a1a19b2587696d24323117039165bb9091b4938bbfce7e781f0fcbcca365a90d19f2a4e4493efd
+Homepage: https://github.com/docker/compose
+Description: Docker Compose (V2) plugin for the Docker CLI.
+ .
+ This plugin provides the 'docker compose' subcommand.
+ .
+ The binary can also be run standalone as a direct replacement for
+ Docker Compose V1 ('docker-compose').
+
+Package: dosfstools
+Architecture: amd64
+Version: 4.2-1.2build1
+Priority: optional
+Section: otherosfs
+Maintainer: Ubuntu Developers
+Original-Maintainer: Andreas Bombe
+Installed-Size: 244
+Depends: libc6 (>= 2.38)
+Filename: pool/dosfstools_4.2-1.2build1_amd64.deb
+Size: 87860
+MD5sum: 9274be861b0848dd8caad8b123d3ee14
+SHA1: 6778b399124ed915a0078a3edf5fbff978ca84eb
+SHA256: 6b1b2bba6458ca4444cae467db7faff6fd2f350373a95be23333d76dd019c58f
+SHA512: 5a363b2cd055b824c4c37cc0104ec1946c885924b5153176b3a23c5550dbf33f467eb9d92f77618dd4ff8ef40bab38bf828306b5bed00a3497b3bed18d03a34c
+Homepage: https://github.com/dosfstools/dosfstools
+Description: utilities for making and checking MS-DOS FAT filesystems
+ The dosfstools package includes the mkfs.fat and fsck.fat utilities, which
+ respectively make and check MS-DOS FAT filesystems.
+
+Package: dracut
+Architecture: all
+Version: 110-11ubuntu0.1
+Multi-Arch: foreign
+Priority: optional
+Section: utils
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Kernel Team
+Installed-Size: 45
+Provides: linux-initramfs-tool
+Depends: dracut-core (<< 110-11ubuntu0.1+b+~), dracut-core (>= 110-11ubuntu0.1), linux-base
+Suggests: dracut-network
+Conflicts: initramfs-tools, live-tools
+Filename: pool/dracut_110-11ubuntu0.1_all.deb
+Size: 8240
+MD5sum: 2eabf657a73c1537cc352cee635f6d98
+SHA1: c1a9f1bf974e4654aad6a57eb89b38ae567c1948
+SHA256: 5c889098b7cf533851be933feea66587dd637c2f5de8b1b9009f824d1fc732da
+SHA512: c2f995692392d7ac69eedd06e203dfa8b114d31d3d8c0f16546fba5f6c22140082f037eb3311399a67b1a8c19235ea8daabc16510ae54d320c359d50a5822321
+Homepage: https://github.com/dracut-ng/dracut-ng/wiki
+Description: Initramfs generator using udev
+ This package builds a bootable initramfs for Linux kernel packages. The
+ initramfs is loaded along with the kernel and is responsible for
+ mounting the root filesystem and starting the main init system.
+
+Package: dracut-core
+Architecture: amd64
+Version: 110-11ubuntu0.1
+Multi-Arch: foreign
+Priority: optional
+Section: utils
+Source: dracut
+Maintainer: Ubuntu Developers
+Original-Maintainer: Debian Kernel Team
+Installed-Size: 1279
+Provides: dracut-live
+Depends: 3cpio | cpio, dracut-install, e2fsprogs, kmod, systemd-sysv | initscripts | sysvinit-core, udev, libc6 (>= 2.38)
+Recommends: binutils, console-setup, systemd, zstd
+Suggests: cryptsetup, dmsetup, isomd5sum, kpartx, lvm2, mdadm, parted, squashfs-tools, systemd-cryptsetup
+Breaks: dracut-live (<< 109-10~), dracut-network (<< 057+157-2), dracut-squash, rust-coreutils (<< 0.5.0)
+Replaces: dracut-live (<< 109-10~), dracut-network (<< 057+157-2), dracut-squash
+Filename: pool/dracut-core_110-11ubuntu0.1_amd64.deb
+Size: 329650
+MD5sum: bfb603bba09b6e154e98c6b9dfa5b9ba
+SHA1: 2eec84622cc44b0e6c7e87f6d217cb8ac8c4a132
+SHA256: a8b9af489e0968620246dbbbbb6e211e49e2f4df0d28de98af22fb860ab7c0b0
+SHA512: fbb27891b6be88048f2125c1b7e9f01c5f8a4f389956198481e1b43a276c8f33f84bfb5477837f424085ce90d67598f65a87f7987f21bbe77c8db83799a38e38
+Homepage: https://github.com/dracut-ng/dracut-ng/wiki
+Description: dracut is an event driven initramfs infrastructure (core tools)
+ Unlike existing initramfs's, this is an attempt at having as little as
+ possible hard-coded into the initramfs as possible. The initramfs has
+ (basically) one purpose in life -- getting the rootfs mounted so that
+ it can transition to the real rootfs. This is all driven off of
+ device availability. Therefore, instead of scripts hard-coded to do
+ various things, it depends on udev to create device nodes and
+ to detect the rootfs.
+ Having the root on MD, LVM2, LUKS is supported as well as NFS, iSCSI,
+ NBD and FCOE with dracut-network.
+ .
+ These Dracut modules need suggested packages:
+ * crypt: cryptsetup or systemd-cryptsetup
+ * dm: dmsetup
+ * dmraid: kpartx
+ * dmsquash-live: isomd5sum (optionally)
+ * dmsquash-live-autooverlay: parted
+ * dracut-systemd: systemd-cryptsetup (when crypt and systemd are used)
+ * lvm: lvm2
+ * lvmmerge: lvm2
+ * lvmthinpool-monitor: lvm2
+ * mdraid: mdadm
+ * multipath: kpartx
+ * squash-squashfs: squashfs-tools
+ * systemd-cryptsetup: systemd-cryptsetup
+
+Package: dracut-install
+Architecture: amd64
+Version: 110-11ubuntu0.1
+Priority: optional
+Section: utils
+Source: dracut
+Maintainer: Ubuntu Developers