8.1 KiB
8.1 KiB
05 — Tek-Tık Kurucu (One-Click Installer)
Kısa özet: Sahada tek komutla cihazı READY yapan
blueforce-install.sh: bayi no doğrulaması, 18 modül, idempotent yeniden-koşu ve final-check kapısı. Teknisyenin çalıştırdığı tek şeydir.
- Dosya:
docs/05-ONE-CLICK-INSTALLER.md - İlgili kararlar:
24-DECISION-LOG.md#K-09(tek kurucu),K-11(update kapalı),K-12(kimlik formatı),K-03(bf-gui),K-10(Docker disiplini) - Durum: [ ] Taslak
1. Amaç
Saha teknisyeninin uzmanlık gerektirmeden cihazı standarda getirmesi: tek komut, tek girdi (bayi no), net sonuç (READY / hata + log yolu). Yarım kalan veya hatalı kurulumun güvenli tekrarı.
2. Kapsam
- Kapsam içi: komut arayüzü, bayi-no doğrulama, 18 modül listesi ve sırası, idempotency kuralları, log/bundle çıktısı, çıkış kodları.
- Kapsam dışı: modül iç kodları (repo
scripts/install/), imaj üretim yöntemi (04), filo-side yapılandırma (09).
3. Kararlar
KARAR: Saha kurulumu tek giriş noktasıdır: `sudo ./blueforce-install.sh --dealer-id <8hane>`; bayi no `^[0-9]{8}$` ile doğrulanır, uymayan girdi kurucuyu başlatmaz.
GEREKÇE: Tek komut teknisyen hatasını en aza indirir; format kapısı yanlış kimliğin 9 sisteme yayılmasını baştan engeller (K-12).
ALTERNATİF: Çok scriptli kurulum (ağ.sh, gui.sh, …) — sıra hatası ve atlanan adım riski nedeniyle elendi.
RİSK: Tek dosya büyüdükçe bakımı zorlaşır; azaltma: 18 bağımsız modül + ana orkestratör ayrımı.
MALİYET: Ücretsiz.
LİSANS: Yok (şirket içi script).
KARAR: Kurucu 18 modülden oluşur (`01-precheck` … `18-final-check`); her modül idempotenttir — yeniden koşu güvenli ve kaldığı yerden tamamlayıcıdır.
GEREKÇE: Saha elektriği/kesintisi yarım kurulum üretir; idempotency olmadan her kesinti temiz-kurulum demektir. Final-check kapısı (modül 18) exit 0 vermeden cihaz READY sayılmaz.
ALTERNATİF: Tek seferlik (non-idempotent) script — kesinti durumunda belirsiz ara durum nedeniyle elendi.
RİSK: Modülün idempotent yazılmaması (çift kayıt, çift key); azaltma: §10'daki çift-koşu testi her modül için zorunlu.
MALİYET: Ücretsiz.
LİSANS: Yok.
4. Neden Bu Karar?
700 cihaz × teknisyen başına değişen beceri = kurulumun "tek komut + tek soru" olması şarttır. 18 modül, her kararın (update-kapalı, Docker-disiplini, GUI-anahtarı, kimlik, servisler) ayrı denetlenebilir adımdır; modül numarası log satırında görünür, arıza hangi adımda kaldıysa oradan devam edilir.
5. Alternatifler
| Alternatif | Artı | Eksi | Sonuç |
|---|---|---|---|
| Çok scriptli kurulum | Küçük dosyalar | Sıra/atlama hatası | Elendi |
| Non-idempotent tek script | Daha basit kod | Kesintide temiz-kurulum zorunluluğu | Elendi |
| İnteraktif sihirbaz (çok sorulu) | Esnek | Teknisyen hatası, otomasyona kapalı | Elendi |
6. Avantajlar
- Tek komut = eğitim maliyeti minimum, runbook tek sayfa.
- Idempotency = kesinti korkusu yok, "bir daha koş" her sorunun ilk cevabı.
- Final-check = READY iddiası ölçülebilir, dalga kapılarına bağlanır.
7. Dezavantajlar
- 18 modülün her biri için idempotency testi yazma maliyeti.
- Tek giriş noktası, modül-atlama (debug) ihtiyacında
--from/--onlybayraklarını zorunlu kılar.
8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
| Modül idempotent değil (çift kayıt) | Orta | Orta | Çift-koşu testi (§10) + code review kuralı |
| Teknisyen yanlış no girer | Orta | Orta | Format kapısı + onay ekranı (BF-xxxx, onaylıyor musunuz?) |
| Kurucu yarıda kesilir, cihaz ara durumda sahaya alınır | Düşük | Yüksek | Final-check exit 0 olmadan READY yok; bf-status bunu gösterir |
9. Uygulama Planı
- Komut arayüzü:
sudo ./blueforce-install.sh --dealer-id 12010193 [--from 07] [--only 18-final-check] [--check]
# --check: değişiklik yapmadan denetim (final-check + modül durumları)
# --from: belirtilen modülden devam et | --only: tek modül koş
- Bayi-no doğrulama:
^[0-9]{8}$; uymazsa exit 2 + kullanım mesajı. Geçerse onay ekranı (BF-12010193+ hostnamebf-12010193gösterilir). - 18 modül (sıra sözleşmedir, yeri
scripts/install/):
| # | Modül | İşlev (dayandığı karar) |
|---|---|---|
| 01 | 01-precheck |
OS sürümü (26.04.1+), disk/RAM minimumu, root yetkisi, internet kontrolü |
| 02 | 02-dealer-id |
No doğrulama + hostname bf-<no> atama (K-12) |
| 03 | 03-base-packages |
Temel paketler + unattended-upgrades kapatma (K-11) |
| 04 | 04-gnome |
GNOME kurulumu (K-02) |
| 05 | 05-xrdp |
xRDP + sesman + bf-gui-on/off yazımı (K-03) |
| 06 | 06-ssh-hardening |
blueforce kullanıcısı, key-auth, root/password kapalı (K-13) |
| 07 | 07-wireguard |
Spoke config, peer bf-<no>, keepalive 25, wg-quick@wg0 enable (K-05) |
| 08 | 08-docker |
Docker CE + unless-stopped + log rotasyonu + localhost-bind (K-10) |
| 09 | 09-meg |
MEG konteyneri (sabit tag, latest yok) (K-10) |
| 10 | 10-rustdesk |
RustDesk istemci + VDS adresi + BF-<no> etiketi (K-04) |
| 11 | 11-meshcentral |
MeshCentral agent + BF-<no> adı (K-04) |
| 12 | 12-monitoring |
Node Exporter + textfile + Uptime Push (K-07) |
| 13 | 13-firewall |
UFW profili (SSH/RDP yalnızca WG) (K-05) |
| 14 | 14-inventory |
bf-hardware-inventory.sh koşusu, JSON+MD üretimi (02) |
| 15 | 15-logging |
journald + Docker rotasyon + bf-status/bf-diagnostics (K-14) |
| 16 | 16-boot |
multi-user default + BIOS notu + servis enable denetimi (K-03) |
| 17 | 17-ansible-bootstrap |
Bootstrap SSH key + ilk pull/Ansible kaydı (K-06/K-13) |
| 18 | 18-final-check |
Tüm kapılar: kimlik, servisler, update-kapalı, Docker politikası, READY damgası |
- Idempotency kuralları (her modül için zorunlu):
- Varlık kontrolü önce (
id blueforce,dpkg -l,systemctl is-enabled): varsa atla, yoksa kur. - Dosya yazımları atomik (tmp + rename) ve tekrarlanabilir (aynı girdi → aynı çıktı).
- Anahtar/secret üretimi bir kez (
/var/lib/blueforce/.modül-donedamgası);--forceolmadan yeniden üretilmez. - Her modül
/var/log/blueforce-install.logdosyasınaMODÜL-NO + OK/SKIP/FAILsatırı yazar.
- Varlık kontrolü önce (
- Çıkış kodları:
0READY,1modül hatası (no logda),2argüman/format hatası.
10. Test Planı
| Test | Beklenen sonuç | Ortam |
|---|---|---|
| Geçersiz no (7/9 hane, harf, boş) | exit 2, kurulum başlamaz | LAB(2) |
| Her modülün çift-koşusu | İkinci koşu exit 0, durum değişmez (diff boş) | LAB(2) |
| Elektrik-kesintisi simülasyonu (modül 09 ortasında kill) | --from 09 ile tamamlanır, final exit 0 |
LAB(2) |
18-final-check tüm kapıları |
Eksik adımda FAIL + modül nosu, READY yok | LAB(2) |
--check kuru koşusu |
Değişiklik yapmaz, rapor üretir | P1(5) |
11. Rollback
- Modül hatası: logdaki modül nosundan
--from <no>ile devam edilir. - Yanlış no: doğru no ile tam yeniden koşu (idempotent, kimlik modülü üzerine yazar).
- Düzelmeyen cihaz: 17-RECOVERY LEVEL 9 (temiz imaj + kurucu).
12. Kontrol Listesi
- 18 modül dosyası
scripts/install/altında numaralı ve çalışır durumda. - Her modülde varlık-kontrolü + damga + log satırı var.
- Format regex'i 02 ile aynı (
^[0-9]{8}$). 18-final-checkK-10/K-11 kapılarını denetliyor (unless-stopped, latest yok, update kapalı).--check/--from/--onlybayrakları çalışıyor.
13. Açık Sorular
- Kurucu USB'de mi, merkezden
curlile mi alınacak (saha interneti varsayımı) (sahibi: Faz 3, 04 yazarı ile ortak). - MEG sabit tag'inin kim tarafından, hangi onay ile güncelleneceği (sahibi: 10-UPDATE / 12-DOCKER yazarları).
Ek: Kurucu Akış
flowchart TB
CMD["sudo ./blueforce-install.sh<br/>--dealer-id <8hane>"] --> FMT{"^[0-9]8$ ?"}
FMT -->|Hayır| EXIT2["exit 2<br/>kullanım mesajı"]
FMT -->|Evet| M01["01-precheck … 17-bootstrap<br/>(idempotent modüller)"]
M01 --> M18["18-final-check"]
M18 -->|Tümü OK| READY["READY damgası<br/>bf-status yeşil"]
M18 -->|FAIL| LOG["modül nosu + log yolu<br/>--from ile devam"]