docs: ajan notları — çoklu disk/granular bölümleme mimarisi ve yapılacaklar

This commit is contained in:
Erkan IŞIK
2026-08-22 21:37:36 +03:00
parent 5c148472c4
commit 0a02f576d4
+67
View File
@@ -0,0 +1,67 @@
# AGENTS.md — Yali-rs Geliştirme Notları
> Ajan oturumları arasında süreklilik için. Son güncelleme: commit `5c14847`
## Proje
- PisiLinux kurulum aracı (eski Python Yali'nin Rust/egui yeniden yazımı).
- Ana dallar: `main`. Push: `git push origin main`.
- Referans kod: `/media/yedekleme/github/erkanisik/yali` (eski Python Yali —
storage mimarisi: `yali/storage/{operations,partitioning,devicetree}.py`).
## Mimari Kararlar (2026-08 dönemi)
### Çoklu Disk Manuel Bölümleme
- `CustomPartition` alanları (`src/installer.rs`):
- `disk`: bölümün ait olduğu disk ("/dev/sda") — gruplama bununla.
- `orig_device`: lsblk'tan gelen fiziksel cihaz adı; **boş = kullanıcı tanımı yeni bölüm**.
Silme/işaret mantığı buna dayanır.
- `delete: bool`: eski Yali `OperationDestroyDevice` karşılığı → kurulumda `parted rm`.
- UI (`src/steps/partition.rs`):
- Manuel moda girişte TÜM diskler otomatik taranıp listelenir (disk kartına tıklamak
artık sadece "yeni bölüm hedef diski" seçer; tanımları sıfırlamaz — merge eder,
`orig_device` eşleşmesinde kullanıcı tanımı kazanır).
- Tablo `TableRow::Part | TableRow::FreeSpace` enum'u ile kurulur; HER disk grubu
kendi sütun başlıklarını çizer (`draw_partition_table_header`).
- Silinmek işaretli bölümler ayrı satır çizmez; İLK silinenin konumunda TEK
"Boş Alan" satırında birleşir (GParted tarzı).
`Boş Alan = disk (korunan fiziksel + yeni tanımlar)`; 0 ise satır gizlenir.
- "Kalan alan" SEMBOLİKTİR (size_mb=0): kaydetme anında sayıya çevrilmez!
Tabloda/özetde kapasite olarak gösterilir; gerçek boyut kurulum anında boşluktan alınır.
(Somutlaştırma taşmaya yol açtığı için kaldırıldı — swap sonradan büyütülünce kök patlıyordu.)
- Slot ataması (`installer::assign_partition_numbers`): parted'ın gerçek davranışını
simüle eder — fiziksel (silinmeyen) bölümler numarasını korur, silinenlerin slotu
boşalır, yeni tanımlar en küçük boş slotu alır. UI ile job tutarlılığı buradan gelir.
### Granular Kurulum Job'ı (`jobs/partition.rs::CustomPartitionJob`)
Eski wipe&rebuild (mktable + hepsini baştan yarat) KALDIRILDI. Yeni fazlar:
1. FAZ A: `delete=true` olanlar `parted rm N` — N, `orig_device`'tan;
**büyükten küçüğe** sil (kernel slot kayması).
2. FAZ B: yeni tanımlar `disk_free_regions_mb()` ile sysfs'ten hesaplanan boş
bölgelere first-fit yerleşir ("kalan" = en büyük bölge). Sabit boyutlular ÖNCE,
sembolikler SONRA (`creates.sort_by_key(size==0)`) işlenir.
3. FAZ C: yalnızca istenenler mkfs (LUKS akışı korundu).
- İşlemi olmayan disklere ve `delete=true` satırlara mount/fstab/summary dokunmaz.
### Diğer Düzeltmeler
- MB dönüşümleri tek bölme: `x / 1_048_576` (çift `x/1024/1024` hassasiyet kaybı yapardı).
- Disk seçiminde `size_gb * 1024` yerine `size_bytes / 1_048_576`.
- Mountpoint değişince boyut alanı SADECE boş/"0"/"remaining" ise varsayılanlanır
(kullanıcının elle girdiği değer ezilmez).
- Simge fontu: `assets/remixicon.ttf` egui fallback fontu (`ui/theme.rs setup_fonts`).
Kutucuk görürsen karakter fontta yok demektir — fontTools ile cmap kontrol et:
kullanılanlar: EB7B check, EA6B arrow, EC28 trash, EA13 add, EFE0 pencil, EECD lock,
ECA1 error, EDFB hard-drive-line, ECB5/B7 eye, F4C6 close.
- Alt bar: her disk için "Mevcut Durum / Kurulum Sonrası" çift şerit
(`manual_dual_bars`, gri segment = boş).
## Bilinen Açıklar / Yapılacaklar
- [ ] VM testinde rapor edilen hatalar düzeltilecek (kullanıcı listeleyecek)
- [ ] `manual_capacity_error` yalnızca sabit boyutları kontrol eder; LVM PV/LV toplamları ayrıca doğrulanmalı
- [ ] Silinmek işaretli bölüm bir VG'nin PV'siyse SetupLvmJob tarafında kontrol yok
- [ ] Otomatik mod (erase disk) hâlâ tek disk; çoklu otomatik plan yok
- [ ] Debug amaçlı kalan `eprintln!` satırları temizlenebilir
## Test / Derleme
- `cargo check` + `cargo test` (22 birim testi; partition modülü ağırlıklı).
- VM'de denemek: ISO'yu boot edip manuel bölümlemede sdb üzerindeki senaryolar:
sil→boş-alan birleşimi, geri al, kalan alan, farklı diske bölüm ekleme.