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.
174 lines
6.6 KiB
Markdown
174 lines
6.6 KiB
Markdown
# 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.
|