# 10 — Update ve Rollback Politikası
> Kısa özet: Sahaya onaysız update yasaktır: `unattended-upgrades` kapalıdır, her değişiklik LAB(2) → P1(5) → P2(20) → W1(50) → W2(100) → PROD dalgalarından ve merkezi onaydan geçer. Her dalganın geri alma planı yayından önce tanımlıdır.
- Dosya: `docs/10-UPDATE-AND-ROLLBACK-POLICY.md`
- İlgili kararlar: `24-DECISION-LOG.md#K-11` (otomatik update yasağı + dalgalar), `K-10` (`latest`/Watchtower yasakları), `K-09` (imaj bağı)
- Durum: [ ] Taslak
---
## 1. Amaç
700 cihazda "kendiliğinden değişen hiçbir şey olmasın" ilkesini teknik ve prosedürel kilitlerle garanti etmek: otomatik updater'ların kapatılması, onay zinciri, dalga planı ve rollback sözleşmesi.
## 2. Kapsam
- Kapsam içi: onaysız update yasağı, `unattended-upgrades` kapatma, dalga tanımı ve geçiş kriterleri, onay rolleri, rollback zinciri.
- Kapsam dışı: playbook yazım detayları (09), imaj üretim adımları (04), Docker tag disiplini detayı (12).
## 3. Kararlar
```text
KARAR: Golden image'da `unattended-upgrades` kapatılır (`/etc/apt/apt.conf.d/20auto-upgrades` değerleri `0` + `apt-daily*.timer` maskeleme); tüm güncellemeler LAB→PİLOT→WAVE→PROD onay zincirinden geçer (dalgalar: LAB(2)/P1(5)/P2(20)/W1(50)/W2(100)/PROD).
GEREKÇE: `unattended-upgrades` Ubuntu Server'da varsayılan kurulu ve etkindir, günde bir kez çalışır; kapatılmazsa 700 cihaz ilk açılışta güncellemeye kalkar ("onaysız update yasak" ilkesi delinir). Kaçan timer makine açılışında hemen tetiklenir (`Persistent=true` davranışı) — saha PC'leri sık kapanan makinelerdir.
ALTERNATİF: Otomatik security update'e izin verme — 700 cihazda eşzamanlı indirme + onaysız değişim riski nedeniyle elendi; security update'ler öncelik işaretli onaylı dalga ile çıkar.
RİSK: Kapatma adımı imajda atlanırsa filo kendiliğinden güncellenir; azaltma: `blueforce-install.sh` final-check + monitoring'de `Unattended-Upgrade` durumu metriği.
MALİYET: Ücretsiz.
LİSANS: Yok (işletim sistemi yapılandırması) — https://ubuntu.com/server/docs/how-to/software/automatic-updates/ + https://manpages.ubuntu.com/manpages/resolute/en/man8/unattended-upgrade.8.html (doğrulanma: 2026-09-15).
```
```text
KARAR: Onaysız update yasaktır: sahaya inen her değişiklik (OS paketi, Docker imajı, config, agent sürümü) değişiklik kaydı + merkezi admin onayı + dalga planı olmadan uygulanmaz; `latest` etiketi ve Watchtower gibi otomatik updater'lar yasaktır.
GEREKÇE: 700 ölçeğinde her "küçük varsayılan" (günlük otomatik update, hareketli etiket, otomatik imaj çekme) filo-çapı arızaya dönüşür; determinizm yalnızca sabit sürüm + onaylı yayılımla korunur.
ALTERNATİF: Güvenlik güncellemelerine otomatik izin — eşzamanlı indirme fırtınası + onaysız değişim riski nedeniyle elendi; acil güvenlik yaması "hızlandırılmış dalga" prosedürüyle (aynı zincir, kısaltılmış bekleme) çıkar.
RİSK: Onay kuyruğu kritik yamayı geciktirir; azaltma: security dalgasına öncelik SLA'sı (§9).
MALİYET: Ücretsiz.
LİSANS: Yok (politika) — Docker yasak dayanağı için 12-DOCKER ve K-10'a bakılır.
```
```text
KARAR: Rollback her yayının parçasıdır: dalgaya çıkmadan önce geri alma adımı (önceki paket sürümü / önceki imaj tag'i / önceki config) tanımlanır ve LAB'da geri dönüş testi yapılır; başarısız dalga bir sonrakine geçmez, etkilenmiş dalga geri alınır.
GEREKÇE: Geri alması test edilmemiş yayın, 700 cihazda tek yönlü kapıdır; LAB'da kanıtlanan rollback, PROD'da gece yarısı kurtarma prosedürüne dönüşür.
ALTERNATİF: "Gerekirse bakarız" yaklaşımı — arıza anında doğaçlama riski nedeniyle elendi.
RİSK: Geri alma adımı da bozuk çıkabilir; azaltma: son çare 17-RECOVERY yeniden-imaj prosedürü.
MALİYET: Ücretsiz.
LİSANS: Yok (operasyon standardı).
```
## 4. Neden Bu Karar?
Üç yasak tek ilkeden doğar: `unattended-upgrades` (işletim sistemi kendi kendine değişmesin), `latest` (hangi sürümün koştuğu her cihazda aynı bilinsin), Watchtower (hiçbir daemon izinsiz imaj çekmesin). Dalgalar (2 → 5 → 20 → 50 → 100 → ~523) hatanın blast-radius'unu geometrik olarak sınırlar: LAB'da yakalanan hata 2 cihazı etkiler, PROD'a sızan hata ancak 5 dalga kapısından geçmiş demektir.
## 5. Alternatifler
| Alternatif | Artı | Eksi | Sonuç |
|---|---|---|---|
| Otomatik security update | Hızlı yama | Eşzamanlı indirme + onaysız değişim | Elendi (hızlandırılmış dalga ile karşılanır) |
| Doğrudan tüm-filo yayın | Hızlı | Tek hatanın 700 katı | Elendi |
| Watchtower ile oto-imaj | Eforsuz güncellik | Politika ihlali + upstream arşivli | Elendi (K-10) |
| `latest` etiketi | Kolay | Determinizm kaybı | Elendi (K-10) |
## 6. Avantajlar
- Filo sürüm determinizmi: her cihazın ne koşturduğu envanterde bilinir.
- Hata erken dalgada yakalanır; PROD'a ulaşan değişiklik 5 kez kanıtlanmıştır.
- Acil yama da aynı zincirden geçer — hız, disiplinsizlikle değil kısaltılmış beklemeyle kazanılır.
## 7. Dezavantajlar
- Yayın döngüsü yavaştır (özellikle PROD'a tam yayılım günler sürebilir).
- Onay kuyruğu ve dalga beklemeleri operasyonel disiplin ister.
- Her yayın için rollback testi yazma maliyeti.
## 8. Riskler
| Risk | Olasılık | Etki | Azaltma |
|---|---|---|---|
| `unattended-upgrades` imajda açık unutulur | Orta | Yüksek | install.sh final-check + monitoring metriği (K-11) |
| Onay kuyruğu kritik yamayı geciktirir | Orta | Yüksek | Security dalgasına öncelik SLA'sı (§9) |
| Dalga atlama ("acil" bahanesiyle) | Orta | Yüksek | Semaphore onay kapısı + değişiklik kaydı zorunluluğu |
| Rollback adımı da bozuk | Düşük | Yüksek | LAB geri-dönüş testi + 17-RECOVERY son çare |
## 9. Uygulama Planı
1. Golden image: `20auto-upgrades` değerleri `0`, `apt-daily*.timer` maskeli, final-check'te doğrulamalı (04).
2. Değişiklik kaydı açılır: kapsam (paket/imaj/config), etkilenen sürümler, geri alma adımı, dalga takvimi.
3. Merkezi admin onaylar; yayın Semaphore pipeline ile dalga sırasına girer (09).
4. Her dalgada sağlık kapısı: monitoring (14) + `bf-status` örneklemesi temizse sonraki dalga açılır.
5. Başarısız dalga: yayılım durdurulur, etkilenmiş dalga rollback zinciriyle geri alınır, kök neden kayda işlenir.
```bash
# örnek: otomatik update kilit denetimi (saha cihazında)
cat /etc/apt/apt.conf.d/20auto-upgrades # iki değer de 0 olmalı
systemctl status apt-daily.timer apt-daily-upgrade.timer # maskeli/inactive
```
### Dalga tanımı ve geçiş kriterleri
| Dalga | Büyüklük | Geçiş kriteri (sonraki dalgaya) |
|---|---|---|
| LAB | 2 cihaz | Fonksiyonel test + rollback testi geçti |
| P1 (PİLOT-1) | 5 cihaz | 24–48 saat sorunsuz + metrikler temiz |
| P2 (PİLOT-2) | 20 cihaz | 48–72 saat sorunsuz + saha geri bildirimi |
| W1 (WAVE-1) | 50 cihaz | Sağlık kapısı + onay yenileme |
| W2 (WAVE-2) | 100 cihaz | Sağlık kapısı + onay yenileme |
| PROD | kalan ~523 cihaz | W2 temizliği + final onay |
### Security yaması öncelik SLA'sı
Kritik güvenlik bülteninde aynı zincir kısaltılmış beklemeyle koşar (LAB saatler içinde, P1 aynı gün); bekleme kısaltılır, kapılar kaldırılmaz — onay ve rollback testi security dalgasında da zorunludur.
## 10. Test Planı
| Test | Beklenen sonuç | Ortam |
|---|---|---|
| `20auto-upgrades` değerleri + timer durumu | `0` / maskeli, 24 saatte otomatik apt yok | LAB(2) imaj denetimi |
| Kuru yayın (tüm dalgalar `--check`) | Değişim öngörüsü kayıtla eşleşir | LAB(2) |
| LAB rollback testi | Önceki sürüme dönüş + servis ayakta | LAB(2) |
| P1 48 saat gözlem | Metrik anomalisi yok | P1(5) |
| Dalga-durdurma tatbikatı | Yayılım durur, P1 geri alınır | P1(5) |
## 11. Rollback
1. Etkilenmiş dalga, değişiklik kaydındaki geri alma adımıyla önceki sürüme döndürülür (paket downgrade / önceki imaj tag'i / önceki config).
2. Geri alma sonrası sağlık kapısı (monitoring + `bf-status`) doğrulanır, kayda işlenir.
3. Geri alma da başarısızsa: cihaz 17-RECOVERY prosedürüyle önceki golden image'a döndürülür (LEVEL 9 son çare).
4. Kök neden bulunmadan yayına devam edilmez; zincir başa (LAB) sarar.
## 12. Kontrol Listesi
- [ ] `unattended-upgrades` tüm sahada kapalı (monitoring metriğiyle sürekli denetim).
- [ ] `latest`/`Watchtower` hiçbir saha cihazında yok (12 ile birlikte denetim).
- [ ] Her yayının değişiklik kaydı + onayı + rollback adımı var.
- [ ] Dalga kapıları atlanmadan işletildi (Semaphore log'uyla kanıtlı).
- [ ] Security SLA'sı runbook'ta yazılı, sorumlusu belli.
## 13. Açık Sorular
- [ ] Dalga bekleme sürelerinin (24–72 saat) PİLOT verisine göre kalibrasyonu (sahibi: 10 yazarı, P2 sonrası).
- [ ] Paket/imaj aynası (yerel mirror) gerekip gerekmediği — 700 cihazın eşzamanlı indirme yükü (sahibi: 25-ROADMAP).
---
## Ek: Mermaid — update onay akışı
```mermaid
flowchart LR
F["Bulundu
(bülten / MEG sürümü)"] --> R["Kayıt
(etki + rollback planı)"]
R --> O{"Onay
(merkezi admin)"}
O -->|Red| F
O -->|Onay| LAB["LAB 2"]
LAB -->|Başarılı| P1["P1 5"]
P1 -->|Başarılı| P2["P2 20"]
P2 -->|Başarılı| W1["W1 50"]
W1 -->|Başarılı| W2["W2 100"]
W2 -->|Başarılı| PROD["PROD ~523"]
LAB -->|Başarısız| RB["Rollback +
kök neden"]
P1 -->|Başarısız| RB
P2 -->|Başarısız| RB
W1 -->|Başarısız| RB
W2 -->|Başarısız| RB
```