Blueforce-Linux/provisioning/offline-repo/repo-manifest.yaml
emirhanmamak-blueforce 57fbccd4d0 feat(offline-repo): ship the reviewed package set so installs never download
The field installer needs no network at all, which means the packages have to
travel with the repository. This adds the resolved pool and pins every package
to the exact version the pool carries.

Package pool
- 1312 .deb files (884 MB), resolved on Ubuntu 26.04 in a container so the
  closure matches the release the fleet runs: a .deb built against another glibc
  cannot be installed on the devices.
- Tracked through Git LFS (*.deb), so history stays navigable while the working
  tree keeps the real files the installer reads from disk.
- Two RustDesk dependencies (libxdo3, libva-x11-2) were missing: the vendor .deb
  is installed with dpkg, so nothing else pulls them in and `dpkg -i rustdesk`
  would have left the package unconfigured on a device.
- Every file validated in the same release: 1312/1312 readable, 0 corrupt, 0
  foreign architecture, and the pool satisfies all 24 pins (PLAN READY).

Pins
- All 24 UNPINNED sentinels replaced with the versions read from the packages
  themselves (dpkg-deb), with requirements.tsv updated in the same change so the
  contract has no drift.

build-index.sh: stop destroying the shipped record
- The repository record next to this script is the reviewed contract template
  (state: UNBUILT, packages: []) that documents the schema. Its default record
  destination pointed at that same file, so any default-path run overwrote the
  template with BUILT rows -- which happened twice, once from a hand run and
  once while this change was being developed.
- The record now defaults to <output>/repo-manifest.yaml, and pointing it at the
  template is refused before any work starts. The template header documents this.

Tests
- The unpinned-pin and missing-pin cases read the sentinel out of the real
  manifests, so they became no-ops the moment the contract was filled instead of
  failing. They now set up the condition explicitly, and the fixture manifests
  carry the synthetic versions their pool is built from.
- check-provisioning-static required packages/.gitkeep; the pool is what keeps
  that directory in git now, so it asserts a populated pool directory instead.
2026-09-16 19:03:45 +03:00

72 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 dosya provisioning/offline-repo/ şablonudur: şemayı belgeler ve derleme
# yapılmadan önceki durumu (state: UNBUILT, packages: []) gösterir. build-index.sh
# derleme kaydını buraya YAZMAZ -- varsayılan hedef <output>/repo-manifest.yaml
# (yani built/repo-manifest.yaml) ve bu şablona yazmak reddedilir. Elle
# düzenlemeyin.
#
# 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: []