Blueforce-Linux/scripts/install/README.md
emirhanmamak-blueforce da460519e8 feat(install): internet-free install flow, auto-discovered local packages
The operator no longer answers an "offline?" question and no longer needs
network access: the installer finds the package set that ships with the
checkout, so the only input left is the dealer number.

Installer
- Auto-discover the local APT repository (BF_OFFLINE_REPO, then
  provisioning/offline-repo/built, then /opt/blueforce/offline-repo) and
  enter offline mode on its own; --offline stays for compatibility.
- Fail closed with an explicit Turkish message when nothing is found: the
  searched locations, what to do, and a named exit reason -- no state touched.
- Distinguish "repository absent" (operator error, actionable) from
  "repository present but invalid" (OFFLINE BLOCKED, verification gate).
- Network is informational only in precheck/network modules; no probe runs in
  offline mode and archive.ubuntu.com is no longer mandatory.

ISO builder
- Look for built/ first, which is what build-index.sh produces, and accept
  build/ as a warned legacy path. The two disagreed, so a medium could be
  built without the package set and fail only at install time.

Docs
- docs/27, scripts/install/README, provisioning/offline-repo/README and
  provisioning/firstboot/README describe the discovered flow, the two failure
  modes, and that the installer downloads nothing.

Tests
- check-admin-static exercised the "console missing from the clone" branch by
  deleting a tracked file; git clone restored it from history, so the branch
  never ran and the warning was effectively untested. Build the stripped
  source as a real commit instead; verified by mutation.
2026-09-16 16:53:24 +03:00

6.6 KiB
Raw Permalink Blame History

Blueforce kurulumu (scripts/install/)

Bu klasör cihazı kuran betiği içerir. Kurulumu yapan kişinin bilmesi gereken her şey bu sayfada.


1. Kurulum yapan kişi ne yapar?

Tek komut:

sudo ./scripts/install/blueforce-install.sh --dealer-id 12345678
  • --dealer-id tek zorunlu bilgidir: 8 haneli bayi numarası.
  • Betik numaradan ana makine adını (bf-12345678) ve cihaz kimliğini (BF-12345678) kendisi üretir.
  • Kurulum sırasında başka hiçbir soru sorulmaz. Onay istemeyen (fabrika/otomatik) senaryoda sonuna --yes ekleyin.
  • Kurulum bittiğinde cihaz yerinde kurulmuş olur ve PROVISIONED_OFFLINE durumuna geçer. Cihazın READY sayılması için merkeze kayıt (enrollment) gerekir; bu ayrı bir adımdır, kuruluma dahil değildir.

Paket aramaz, paket indirmez, apt kaynağı eklemez, anahtar getirmez. Bunların hepsi zaten hazırdır.


2. Paketler nereden gelir?

Paketler git deposunun içinde taşınır:

provisioning/offline-repo/built/     hazır paket seti (pool/, Packages, SHA256SUMS, packages.lock.tsv)

Bunları repo sorumlusu hazırlar ve commit eder; kurulumu yapan kişi sadece depoyu çeker. Paket setinin nasıl üretildiği, hangi paketlerin neden gerektiği ve sorun giderme adımları:

provisioning/offline-repo/README.md

Kurucu paket setini kendi kendine bulur. Arama sırası:

Sıra Yer Ne zaman kullanılır
1 BF_OFFLINE_REPO ortam değişkeni Repo sorumlusu farklı bir dizin verdiyse (nadir)
2 provisioning/offline-repo/built Normal durum: kurucu betiğin bulunduğu repo
3 /opt/blueforce/offline-repo Paket seti cihaza ISO/medya ile kopyalanmışsa

Bulunan depo kurulumdan önce baştan sona doğrulanır: dosya listesi, checksum (SHA256SUMS) ve pinlenen her paketin depoda gerçekten durması. Doğrulama geçmezse kurulum hiç başlamaz.


3. İnternet gerekmez — neden?

  • Sahada internet yok veya güvenilmez; kurulumun ihtiyaç duyduğu her paket yanında taşınır ve cihazdaki tek kaynak yerel depodur.
  • Kurulum çalışırken Apt kaynakları yalnızca bu yerel depoyu gösterir. Dış adreslere, DNS çözümlemesine veya indirmeye ihtiyaç duyulmaz.
  • Bu yüzden internet erişimi kontrolü kurulumu durdurmaz: 01-precheck modülü interneti sadece bilgi olarak yazar. 05-network modülü de bağlantı yokken geçer (yerel ağ, internet ve merkez bağlantısı ayrı ayrı raporlanır; hiçbiri kurulum için şart değildir).
  • Merkez bağlantısı (WireGuard, izleme, kayıt) kurulumdan sonra, enrollment aşamasında doğrulanır.

Yalnızca geliştirme/test makinesi için --online vardır: paketleri internetten çeker. Üretimde kullanmayın — sahada kurulum yerel depodan yapılır.


4. Bir şey ters giderse

"Yerel paket deposu yok" hatası

HATA: Yerel paket deposu yok. Repo sorumlusuna başvurun: provisioning/offline-repo/README.md

Anlamı: cihazda kullanılacak paket seti yok. Kurulum başlamadı, sistemde hiçbir değişiklik yapılmadı. Yapılacaklar:

  1. Depoyu tam olarak çekin (git pull) veya repo sorumlusunun verdiği kopyayı /opt/blueforce/offline-repo altına koyun.
  2. Komutu yeniden çalıştırın. Aynı numarayla devam edebilirsiniz.

Ekranda aranan yerlerin listesi yazar; o listeyi repo sorumlusuna iletmek yeterlidir.

OFFLINE BLOCKED mesajları

Depo bulundu ama eksik ya da bozuk demektir (checksum tutmuyor, pinlenen paket depoda yok, kilit/indeks dosyası boş...). Kurulum yine başlamaz ve sistem değişmez. Mesajın altındaki "Ne yapmalı" satırı depoyu nasıl düzelteceğinizi söyler; ayrıntılı tablo provisioning/offline-repo/README.md içindedir. Sahada çözülmez — depoyu düzeltip yeniden getirmek gerekir.

Kurulum kesildi, devam etmek istiyorum

sudo ./scripts/install/blueforce-install.sh --dealer-id 12345678 --resume

--resume daha önce tamamlanmış adımları atlar. Bütün adımlar tekrar çalıştırılabilir (idempotent); bir adımı iki kez çalıştırmak zarar vermez.

Kurulum yapıldı mı, kontrol etmek istiyorum

sudo ./scripts/install/blueforce-install.sh --dealer-id 12345678 --check

--check hiçbir şeyi değiştirmez (log, durum dosyası, dizin oluşturmaz); yalnızca rapor verir. Denetim de aynı paket sözleşmesini doğruladığı için depo yine gerekir.

Kayıtlar nerede?

Ne Yer
Kurulum günlüğü /var/log/blueforce-install.log
Adım adım durum /var/lib/blueforce/install-state
Cihaz durumu /var/lib/blueforce/state.json

5. Seçenekler (normalde gerekmez)

Seçenek Ne yapar
--dealer-id NUMARA Zorunlu. 8 haneli bayi numarası.
--yes, -y Onay sormadan başla.
--check Salt okunur denetim.
--from NN NN numaralı adımdan başla (örn. --from 06).
--only AD Yalnız tek adımı çalıştır (örn. --only 05-network).
--resume Daha önce tamamlanan adımları atla.
--help, -h Yardım metni.
--offline Yerel depoyu kullanmayı zorlar. Artık gerekmez; varsayılan davranış zaten budur (eski komutlar bozulmasın diye duruyor).
--online Yalnız geliştirme/test: paketleri internetten çeker. Üretimde kullanılmaz.

Kurulum sonucu: 0 başarılı · 1 kurulum durdu (depo ya da adım hatası) · 2 komut/parametre hatası.


6. Kurulum adımları (modül haritası)

Her adım tekrar çalıştırılabilir ve --check destekler.

01-precheck · 02-system · 03-user · 04-hostname · 05-network · 06-wireguard · 07-ssh · 08-rdp · 09-rustdesk · 10-docker · 11-meg · 12-monitoring · 13-firewall · 14-update-policy · 15-logrotate · 16-gui · 17-healthcheck · 18-final-check

Uzak erişim için her cihaza özel değerler gerekir: WG_ADDRESS, WG_ENDPOINT, WG_PEER_PUBKEY, RUSTDESK_SERVER ve yerel RUSTDESK_DEB. Yer tutucu değerler kabul edilmez; WireGuard erişimi BF_WG_HANDSHAKE_MAX_AGE saniyeden (öntanımlı 180) daha yeni bir eş el sıkışması ister (REQUIRE_WIREGUARD=false ile kapatılabilir).

Docker'ın dışa açtığı portlar öntanımlı olarak kapalıdır. Yalnız incelenmiş tcp PORT / udp PORT satırları /etc/blueforce/docker-published-port-allowlist.conf dosyasına eklenir; blueforce-docker-firewall.service bu politikayı Docker her başladığında yeniden uygular.

Not: AnyDesk bilinçli olarak yoktur. Uzak erişim SSH-over-WireGuard, xRDP ve RustDesk ile sağlanır; AnyDesk elle yapılan cihaz başına bir istisnadır.