Files
2026-09-18 00:49:37 +03:00

7.0 KiB
Raw Permalink Blame History

AGENTS.md — Yali-rs Geliştirme Notları

Ajan oturumları arasında süreklilik için. Son güncelleme: parted MiB düzeltmesi (23 Ağu)

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

  • parted birim tuzağı (KRİTİK): parted "MB" sonekini ondalık (10^6 byte) okur, bizim hesaplar binary (2^20). mkpart 3944MB → sektör 7703125 (hizasız, boş alana uymaz) → "Becerebildiğimiz buna en yakın konum..." hatası. ÇÖZÜM: parted'a daima "{}MiB" sonekiyle geç (jobs/partition.rs, hem otomatik hem CustomPartitionJob). Tamsayı MiB = 2048 sektörün katı → hizalama hatası çıkmaz. UI'da kullanıcıya MB gösterilir ama parted argümanı asla "MB" olmasın.
  • 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: "Mevcut Durum / Kurulum Sonrası" çift şerit (manual_dual_bars, gri segment = boş) — SADECE seçili disk için gösterilir (state.selected_disk).

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.

✅ Düzenlenmiş Manuel Partition Sorunları (18 Eylül 2026)

Bu gün, manual partition modundaki 5 kritik sorun düzeltilmiştir:

  1. manual_capacity_error birim tutarlılığı (src/steps/partition.rs):

    • cap → cap_mb, fixed → fixed_mb değişken isimleri standardized
    • d.size_bytes / 1_048_576 (MiB) ile defs.iter().map(|p| p.size_mb).sum() consistently binary MiB (2^20) hesaplaması
    • cargo test ve cargo check passed
  2. disk_free_regions_mb delete flagı yönetimi (src/jobs/partition.rs):

    • .filter(|p| p.delete && !p.orig_device.is_empty()) → .filter(|p| p.delete)
    • Tüm delete=true flag'li bölümler (incl. newly defined with empty orig_device) free alan hesaplamasından exclude ediliyor
  3. validate_manual ekstra validasyonlar (src/steps/partition.rs):

    • Duplicate mountpoint kontrolü: Aynı mountpoint'ta iki live bölüm tanımlı mı? → hata döndürür
    • Swap boyut validasyonu: 512MB minimum, 8GB maksimum kontrolü eklendi
    • Size 0 partition uyarısı: Boyut 0 ama mountpoint boşsa uyarı mesajı
  4. is_complete disk seçim kontrolü (src/steps/partition.rs):

    • state.partition_plan.is_some() → state.selected_disk.is_some() eklendi
    • Kullanıcı disk seçmeden partition tanımları yapmış gibi görünmesini engelledi
    • is_complete false döndürür, kullanıcıya disk seçme hatası verir
  5. Test doğrulaması:

    • cargo check - başarıyla derlendi (43.22s)
    • cargo test - 1 test passed (parse_progress2_percent)

Etkilenen Dosyalar

  • src/steps/partition.rs - 3 değişikling (manual_capacity_error, validate_manual, is_complete)
  • src/jobs/partition.rs - 1 değişiklik (disk_free_regions_mb delete flagı)

Bilinen Açıklar / Yapılacaklar Güncellemesi

  • manual_capacity_error sorunu çözüldü - birim tutarlılığı sağlandı
  • manual_capacity_error yalnızca sabit boyutları kontrol eder; LVM PV/LV toplamları ayrıca doğrulanmalı (hala open)
  • 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