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

174 lines
6.6 KiB
Markdown
Raw Permalink 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 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:**
```bash
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:
```text
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ı:
```text
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ı
```text
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
```bash
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
```bash
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.