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`.
71 lines
2.7 KiB
YAML
71 lines
2.7 KiB
YAML
# 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: []
|