Erkan IŞIK d161556c73 fix(P0): parola sızıntısı, parted birim hatası, hatalı LUKS cmdline, yutulan hatalar, hata temizliği
Veri kaybı / güvenlik / açılmayan sistem düzeyindeki 7 sorun giderildi.

## 1. Parola düz metin olarak argv'ye geçiyordu (jobs/users.rs)
`sh -c "echo 'user:pass' | chpasswd -c SHA512"` deseni kaldırıldı:
  - parola /proc/<pid>/cmdline üzerinden okunabiliyordu
  - ' veya $(...) içeren parola komutu bozuyordu
Doğru desen (`set_password_via_chpasswd`, stdin pipe) geri getirildi —
jobs/partition.rs::run_luks_format ile aynı. Yazılan veri yazımdan
sonra sıfırlanıyor. Dosyadaki yorum satırındaki güvenli sürüm de
silinerek tek uygulama bırakıldı.

## 2. parted "MB" birim tuzağı geri gelmişti (jobs/partition.rs:237)
EFI ve swap `{}MiB` geçerken kök bölüm `{}MB` idi. parted "MB"yi ondalık
(10^6) okur, bizim hesaplar ikilidir (2^20): 4609MB = 9001992.1875
sektör → hizasız başlangıç. AGENTS.md bunu KRİTİK not almıştı;
`7209d58` ile düzeltilmiş, sonra regresyona uğramıştı. `{}MiB` yapıldı
ve nedeni yorumla sabitlendi.

## 3. LUKS çekirdek parametresi geçersizdi (jobs/bootloader.rs)
`cryptdevice=UUID=<x>:cryptroot` geçerli bir söz dizimi değil, üstelik
kök bölümü `is_uefi` ile tahmin ediliyordu (UEFI'de 3, BIOS'ta 2) —
manuel modda bu numaralar assign_partition_numbers'tan geldiği için
ilgisiz bir bölümün UUID'si okunabiliyordu. `.unwrap_or_default()`
`UUID=:` üretebiliyordu.

Artık `cryptsetup status` ile mapper'ın arkasındaki GERÇEK aygıt
çalışma zamanında çözülüyor, blkid ile LUKS başlık UUID'si alınıyor,
ve dracut (`rd.luks.uuid=luks-…`) + mkinitcpio (`cryptdevice=…`)
biçimleri birlikte yazılıyor. UUID boş çıkarsa hata verilir; tahmin
yok.

Ayrıca `CRYPTROOT_NAME` sabiti tanımlandı: "cryptroot" 5 yerde
hardcoded'dı, artık tek kaynaktan geliyor.

## 4. Kritik hatalar yutuluyordu (jobs/finish.rs)
  - RunComarJob tamamen yorum satırıydı → `pisi configure-pending`
    hiç çalışmıyordu, paketlerin post-install betikleri koşmuyordu.
    Geri getirildi; "yapılandırılacak paket yok" durumu zararsız sayılıyor.
  - ldconfig ve update-environment hataları loglanıp yutuluyordu.
    update-environment PisiLinux init finalizasyonudur: yutulursa
    kurulum "başarılı" görünür ama sistem açılmaz. Artık fatal.
  - CleanupLiveJob'da 10 adet `let _ =`; depo tanımları sessizce
    başarısız olabiliyordu (kullanıcı paket kuramaz). Artık fatal.

## 5. Hata durumunda hiç temizlik yapılmıyordu (jobs/mod.rs)
run_all ilk hatada return ediyordu: hedef bölümler bağlı, LUKS
mapper'ları açık, swap aktif kalıyordu. Yeniden başlatma reddediliyor,
elle düzeltmesi dakikalar sürüyordu.

  - JobQueue::cleanup listesi eklendi; with_cleanup(...) ile verilen
    işler başarıda da hatada da çalışır.
  - Yeni EmergencyCleanupJob (jobs/cleanup.rs): tüm mount'lar → LVM
    lvchange -an → cryptsetup close (yalnızca hedef diskin
    mapper'ları) → swapoff.
  - Temizlik de hata verirse bu hatalar asıl hataya eklenip
    kullanıcıya "elle ne yapılacak" listesi olarak gösterilir.

## 6. UnmountBindJob /home, /var, /boot'u çözmüyordu (jobs/execution.rs)
Elle yazılmış sabit liste (proc, sys, dev, boot/efi) yalnızca otomatik
modda doğruydu; manuel düzende ek bölümler kurulum bitince bağlı
kalıyordu. Artık /proc/self/mountinfo okunuyor ve mount/ altındaki her
şey en derinden yüzeye çözülüyor — düzen bilinmeye gerek yok.
mountinfo'daki \0NNN oktal kaçışlarını çözen unescape_mount_field ve
mounted_paths_under eklendi.

## 7. Parolasız LUKS kombinasyonu (jobs/partition.rs)
encrypt_root=true + boş parola → kök düz ext4 formatlanıyor, sonra
MountPartitionsJob /dev/mapper/cryptroot'u mount etmeye çalışıp
kurulumu öldürüyordu. Job başında reddediliyor.

## 8. rescue.rs'te iki panik noktası
  - &entry.summary[..50]: len() bayt sayar, dilim bayt sınırı ister.
    pisi history çıktısı paket adlarından gelir ve Türkçe karakter
    içerir (ş/ğ 2 bayt) → sınırda PANİK. chars().take(50) ile değişti.
  - parse_pisi_history: '[' ve ']' bağımsız aranıyordu; ']' önce
    gelen girdide remainder[start+1..end] PANİK veriyordu. Kapanış
    parantez açılıştan sonra aranıyor.

Her ikisi için 5 test eklendi (rescue.rs'te test modu yoktu).

## Doğrulama
cargo check --all-targets : 0 hata, 0 uyarı
cargo test              : 28/28 geçti (23 + 5 yeni)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-09-25 22:28:11 +03:00
2026-09-15 22:16:48 +03:00
2026-09-15 22:16:48 +03:00
2026-05-22 23:35:27 +03:00
2026-06-01 00:32:03 +03:00
2026-06-17 10:15:20 +03:00

YALI (Yet Another Linux Installer) — Rust / egui

A rewritten Pisi GNU/Linux installation tool in Rust and egui. YALI installs the system from the live environment, installs packages, and performs basic configuration. It is a modern, fast, and maintainable rewrite of the original Python/Qt version.

Features

  • 10-step installation wizard: Welcome → Location → Keyboard → Network → Disk Partitioning → Users → Bootloader → Summary → Installation → Finish
  • Two modes: Graphical interface (default) and automatic installation with answer file (--auto-install answer.toml)
  • Demo mode: Skips system checks, simulates installation (--demo)
  • Disk partitioning: Automatic (GPT/MBR) or manual, LVM and LUKS encryption support
  • Network configuration: WiFi scanning (nmcli), proxy settings
  • Bootloader: GRUB device/password/timeout settings, kernel parameters
  • Rescue mode: Chroot, GRUB reinstallation, Pisi rollback
  • OEM mode: Predefined settings for manufacturer pre-installation
  • Internationalization: Turkish and English (with rust-i18n via TOML locale files)
  • Branding system: Runtime-loadable branding.toml for logo, slides, color settings
  • Theme: Dark/light theme, atomic color management, custom gradient buttons
  • Async job queue: All installation steps run in separate tokio runtime, UI updated via mpsc channel
  • System checks: 8 pre-checks including RAM, disk space, internet, UEFI, CPU, NVMe
  • Slideshow: Custom branded slides for 9 desktop environments
  • Demo session cleanup: Removes live environment artifacts, adds production repository

Usage

# Normal installation (requires root)
sudo cargo run --release

# Demo mode (no root required)
cargo run --release -- --demo

# Automatic installation (with answer file)
sudo cargo run --release -- --auto-install answer.toml

# Slideshow test (standalone window, no root required)
cargo run --bin slides_test [desktop] [lang]
# E.g.: cargo run --bin slides_test xfce en

Project Structure

├── src/
│   ├── main.rs              # Entry point, eframe App, GUI layout
│   ├── lib.rs               # Library root (reserved for future DLL structure)
│   ├── installer.rs         # InstallerStep trait, GlobalState, WelcomeStep
│   ├── funct.rs             # Shared UI helpers (form fields, language selector)
│   ├── branding.rs          # Branding.toml loader (logo, slides, theme, OEM)
│   ├── bin/
│   │   └── slides_test.rs   # Standalone slideshow test binary
│   ├── ui/
│   │   ├── theme.rs         # Colors, fonts, Visuals, section_heading, error/warning/success boxes
│   │   ├── buttons.rs       # Gradient buttons (primary, secondary, danger, etc.)
│   │   ├── combobox.rs      # ComboBox helpers (show_combo_box, selectable_value)
│   │   ├── combobox_stil.rs # ComboBox visual constants (weak_bg, border, text colors)
│   │   ├── slideshow.rs     # Auto-advancing slideshow
│   │   └── error_screen.rs  # Error screen (log viewer, copy, retry)
│   ├── steps/
│   │   ├── location.rs      # Location/timezone + date/time
│   │   ├── license.rs       # License agreement
│   │   ├── keyboard.rs      # Keyboard layout/variant selection
│   │   ├── network.rs       # Network configuration (WiFi, proxy)
│   │   ├── partition.rs     # Disk partitioning (automatic + manual + LVM)
│   │   ├── users.rs         # User account creation
│   │   ├── bootloader.rs    # GRUB configuration
│   │   ├── summary.rs       # Installation summary
│   │   ├── execution.rs     # Installation execution (progress bar, log)
│   │   ├── finish.rs        # Completion screen
│   │   ├── netinstall.rs    # Extra package group selection
│   │   └── rescue.rs        # Rescue mode (chroot, GRUB, Pisi takeback)
│   ├── jobs/mod.rs           # Async job queue and all installation jobs
│   └── autoinstall/
│       ├── mod.rs           # Answer file loading and state application
│       └── checker.rs       # System pre-checks
├── locales/
│   ├── tr.toml              # Turkish translations
│   └── en.toml              # English translations
├── slides/
│   ├── img/                 # Slide images (PNG)
│   ├── slides_tr.toml       # Turkish slide content
│   └── slides_en.toml       # English slide content
├── assets/
│   ├── icons/               # UI icons (YALI_icon_LIGHT.svg, language-icon.svg, etc.)
│   ├── flags/               # Country flags (~250 SVG)
│   └── pisi-logo-*.png      # Distribution logos (branding `[general]`)
├── branding.toml            # Default branding configuration
├── branding_en.toml         # English branding
├── branding_tr.toml         # Turkish branding
└── answer-example.toml      # Example answer file

Installation Workflow

  1. Welcome — Language selection, system checks, rescue mode
  2. Location / Time — Timezone selection (region/area dual ComboBox), GeoIP, NTP or manual date/time
  3. Keyboard — Layout/variant selection, search, live preview (setxkbmap)
  4. Network — WiFi scanning, connection, proxy
  5. Disk Partitioning — Automatic (guided) or manual, LVM, LUKS
  6. Users — Account creation, password strength indicator, root password, autologin
  7. Bootloader — GRUB device, timeout, password, kernel parameters
  8. Summary — Review all selections
  9. Installation — Slideshow + progress bar + live log
  10. Finish — Successful installation, reboot or return to live desktop

Dependencies

Dependency Version Purpose
eframe 0.27 (wgpu) egui framework, WebGPU backend
egui_extras 0.27 (image, file, svg) Image loading, file dialogs, SVG
image 0.24 PNG decoding
serde / toml 1.0 / 0.8 Branding and answer file serialization
zbus 4.0 D-Bus communication (COMAR)
tokio 1.0 (full) Async job queue
sysinfo 0.30 System information (RAM, disk, OS)
rust-i18n 3.1 Internationalization
chrono 0.4 Date/time operations

License

GNU General Public License v3.0

This project is developed by the Pisi GNU/Linux team.

S
Description
No description provided
Readme GPL-3.0 12 MiB
2026-08-22 15:33:09 +00:00
Languages
Rust 98.8%
Makefile 1.2%