forked from pisilinux-rs/yali-rs
7.0 KiB
7.0 KiB
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
CustomPartitionalanları (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 YaliOperationDestroyDevicekarşılığı → kurulumdaparted 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_deviceeşleşmesinde kullanıcı tanımı kazanır). - Tablo
TableRow::Part | TableRow::FreeSpaceenum'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.)
- 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,
- 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:
- FAZ A:
delete=trueolanlarparted rm N— N,orig_device'tan; büyükten küçüğe sil (kernel slot kayması). - 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. - FAZ C: yalnızca istenenler mkfs (LUKS akışı korundu).
- İşlemi olmayan disklere ve
delete=truesatı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(çiftx/1024/1024hassasiyet kaybı yapardı). - Disk seçiminde
size_gb * 1024yerinesize_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.ttfegui 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_erroryalnı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:
-
manual_capacity_errorbirim tutarlılığı (src/steps/partition.rs):cap→cap_mb,fixed→fixed_mbdeğişken isimleri standardizedd.size_bytes / 1_048_576(MiB) iledefs.iter().map(|p| p.size_mb).sum()consistently binary MiB (2^20) hesaplamasıcargo testvecargo checkpassed
-
disk_free_regions_mbdelete flagı yönetimi (src/jobs/partition.rs):.filter(|p| p.delete && !p.orig_device.is_empty())→.filter(|p| p.delete)- Tüm
delete=trueflag'li bölümler (incl. newly defined with empty orig_device) free alan hesaplamasından exclude ediliyor
-
validate_manualekstra 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ı
-
is_completedisk 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_completefalse döndürür, kullanıcıya disk seçme hatası verir
-
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_errorsorunu çözüldü - birim tutarlılığı sağlandımanual_capacity_erroryalnı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