Blueforce-Linux/provisioning/offline-repo/repo-manifest.yaml
emirhanmamak-blueforce 1387186b03 feat(bfos): Python operator console, Turkish UI, committable offline packages
Switches the operator path from bash-only to a Python console, keeps the bash
menu as a fallback, and makes the offline package set travel with the repository
so the person installing a device never downloads anything.

bfos/ (stdlib only, no textual/rich: those would need a download, which defeats
the offline goal):
- simple mode offers three choices (Kur / Durum / Çıkış); the detailed mode with
  all 21 fleet operations and the local installer is reachable from the menu or
  with --full, so a first-time operator is not buried in options
- gate parity with the bash console: scope read from the playbook file and
  refused on mismatch, production needs a typed token plus a separate approval,
  release-gated runs need their wave name typed, destructive runs need a second
  approval, "all" walks wave by wave and stops at the first failure
- Turkish throughout; audit log at /var/log/blueforce-console.log (600, falls
  back to the user state dir) with a single redaction choke point
- bfos/ui_gui.py adds an optional tkinter window over the same operations layer;
  headless and missing-tkinter cases explain themselves in Turkish

admin/bf-bootstrap.sh: links the Python console as `bf` (primary) and keeps
`bf-menu` (fallback), reports both, and recommends `sudo bf`.

Offline packages are committable now (this was the blocking contradiction):
- .gitignore ignored `Packages`, `Packages.gz` and `packages.lock.tsv` everywhere,
  so a built bundle could never be committed and the installer would always have
  been told to download. provisioning/offline-repo/built/ is now allowed through
  while scratch output stays untracked
- provisioning/offline-repo/{add-packages.sh,build-index.sh,repo-manifest.yaml}
  plus a Turkish step-by-step README for the repository owner
- the over-broad `*token*` ignore rule is narrowed to `*[-_.]token*` so ordinary
  filenames are not silently excluded while token files still are

Tests: run-all.sh now runs the Python suites too (previously it collected only
*.sh, so 212 Python assertions were silently skipped) and executes from the repo
root. 11/11 pass, exit 0.

Two test expectations were corrected rather than the code: a read-only
wave-scoped report legitimately asks for no gate token (the bash console never
did either), so that assertion now checks the command carries operation_wave and
operation_confirmed, and a new test asserts release-gated runs still require
their token. The bootstrap completion contract moved from `sudo bf-menu` to
`sudo bf`.
2026-09-16 16:15:27 +03:00

71 lines
2.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Blueforce Field OS - offline APT deposu künyesi (repository record)
#
# Bu dosyayı provisioning/offline-repo/build-index.sh üretir ve her derlemede
# günceller. Elle düzenlemeyin: bir sonraki derleme dosyanın tamamını yeniden
# yazar (yalnız generated_at alanı serbest bırakılır, içerik değişmediyse dosya
# korunur).
#
# Amaç: deponun hangi Ubuntu sürümü, hangi mimari ve hangi paketlerle
# üretildiğini kanıtlamak. Kurucu (scripts/install/blueforce-install.sh
# --offline) bu dosyayı OKUMAZ; denetim, yeniden üretim ve teslim kaydı için
# insan okur. Kurucunun doğruladığı dosyalar: Packages, Packages.gz,
# packages.lock.tsv, SHA256SUMS ve pool/ içindeki .deb dosyaları.
#
# Aşağıdaki değerler "henüz derlenmedi" durumunu gösterir: packages/ altına
# paket eklenip ./build-index.sh çalıştırıldığında gerçek değerler yazılır.
#
# Alan listesi (şema):
# schema_version bu dosyanın sürümü
# repository.* deponun künyesi ve dizin/indeks bilgileri
# repository.state UNBUILT (henüz indissiz) ya da BUILT
# repository.package_count / total_bytes / total_size paket sayısı ve boyut
# repository.index_sha256 indeks dosyalarının SHA256 değerleri
# repository.manifests okunan pin manifestleri
# repository.pinned_packages manifestlerdeki pin sayısı
# packages[] her paket: ad, sürüm, mimari, sha256, boyut, dosya adı,
# pinned_in (hangi manifestte pinli; boş liste = yalnızca
# bağımlılık olarak eklenmiş)
schema_version: 1
description: "Offline APT deposunun künyesi"
repository:
name: 'blueforce-offline-apt'
format: 'apt-deb'
state: 'UNBUILT'
ubuntu_release: 'unknown'
architecture: 'amd64'
generated_at: 'UNBUILT'
generated_by: 'provisioning/offline-repo/build-index.sh'
package_count: 0
total_bytes: 0
total_size: '0 B'
pool: 'pool/'
bundle_dir: 'provisioning/offline-repo/built'
install_path: '/opt/blueforce/offline-repo'
consumer: 'scripts/install/blueforce-install.sh --offline'
index_files:
- 'Packages'
- 'Packages.gz'
- 'packages.lock.tsv'
- 'SHA256SUMS'
index_sha256:
Packages: 'UNBUILT'
Packages.gz: 'UNBUILT'
packages.lock.tsv: 'UNBUILT'
manifests:
- 'base-packages.txt'
- 'docker.txt'
- 'remote-access.txt'
pinned_packages: 0
# Derleme sonrası doldurulacak biçim (bu blok yalnızca örnektir, veri değildir):
# packages:
# - package: 'curl'
# version: '8.9.1-1ubuntu1'
# architecture: 'amd64'
# sha256: '<64 haneli sha256>'
# size_bytes: 123456
# source: 'curl_8.9.1-1ubuntu1_amd64.deb'
# pinned_in: ['base-packages.txt']
packages: []