Stamp
SD kartları boyutu ne olursa olsun FAT32 biçimlendirip içine zip yükleyen Linux, macOS ve Windows uygulaması
Genel bakış
Stamp bir SD kartı ya da USB belleği tek adımda hazırlıyor: kartı FAT32 olarak biçimlendiriyor ve seçtiğiniz zip dosyasının içeriğini karta kopyalıyor. GParted’ın varsayılan penceresi ya da Windows’un Biçimlendir aracı gibi hazır araçların çoğu 32 GB’tan büyük kartlarda FAT32’yi reddediyor ya da sınırlıyor; Stamp ise her boyutta FAT32’yi zorluyor.
Üç native uygulama var:
- Linux: Önce GNOME üzerindeki Ubuntu için yapılmış, komut satırı modu da olan bir GTK4 ve libadwaita uygulaması; Ubuntu ve Debian, Fedora ve Arch Linux için paketleri var
- macOS: macOS 14 ve sonrası için bir SwiftUI uygulaması
- Windows: Windows 10 ve 11 için bir WPF uygulaması
Stamp, MIT lisansıyla açık kaynak. Her GitHub sürümünde bir .deb, bir .rpm, imzalı ve notarize edilmiş bir macOS .dmg dosyası ve .NET kurulumu gerektirmeyen, kendi içinde çalışan bir Windows .exe dosyası yayınlanıyor. Arch kullanıcıları stamp-sd paketini repodaki PKGBUILD ile derliyor.
Önce güvenlik
Biçimlendirme geri alınamaz ve bu tür araçların en sık hatası yanlış diski silmek. Bu yüzden güvenlik en baştan bir gereksinimdi:
- Çalışan sistemin bulunduğu disk hiçbir zaman listelenmiyor ve hiçbir şekilde seçilemiyor.
- Biçimlendirme tek bir kısa özet penceresinde onaylanıyor. Çıkarılabilir olarak işaretlenmemiş bir sürücüde bu pencereye ayrıca açık bir risk onay kutusu ekleniyor.
- Her cihaz ve zip seçimi, çalışan her komut ve sonucu bir log dosyasına yazılıyor.
- macOS ve Windows’ta zip, kart silinmeden önce kontrol edilip açılıyor; böylece bozuk bir zip yüzünden kart boşuna silinmiyor.
- Windows’ta disk biçimlendirmeden hemen önce yeniden taranıyor; onayladığınızdan beri boyutu, modeli ya da seri numarası değiştiyse işlem reddediliyor.
Nasıl çalışıyor
- Linux: Cihazları listeleme ve bağlama
lsblkve udisks2 üzerinden yapılıyor. udisks2’nin yapamadığı tek adım, yanimkfs.vfat -F 32ile FAT32’yi zorlamak,pkexecile çalışan küçük bir yetkili yardımcı programda yapılıyor. Bu yardımcı, girdisini kendisi doğruluyor ve yalnızca dört komut çalıştırıyor. - Linux’ta çıkarılabilir sürücülerde şifre yok: Bir PolicyKit kuralı, yardımcının aktif oturumda çıkarılabilir sürücüleri şifre sormadan biçimlendirmesine izin veriyor. Yardımcı bunun dışındaki her şeyi reddediyor; çıkarılamayan sürücüler için ayrı ve şifre korumalı bir kopyası var.
- macOS: Her şey
diskutilüzerinden yapılıyor, bu yüzden yetkili bir yardımcıya gerek yok. Dosyalar genişletilmiş öznitelikler olmadan kopyalanıyor ve macOS’un FAT bölümlerine eklediği gizli dosyalar kart çıkarılmadan önce siliniyor. - Windows: Windows’un kendi araçları 32 GB üstünde FAT32’yi reddettiği için Stamp FAT32 yapılarını kendisi yazıyor: boot sektörü, FSInfo, iki FAT tablosu ve kök dizin.
diskpartyalnızca bölüm tablosunu oluşturuyor. Biçimlendirici sade bir C# kodu; disk imajları biçimlendirilipfsck.fatve mtools ile kontrol edilerek test ediliyor. Diske doğrudan erişim yönetici yetkisi gerektirdiği için uygulama açılışta bir kez UAC onayı istiyor. - Arayüzden bağımsız çekirdek: Her platformda biçimlendirme, güvenlik ve kopyalama mantığı arayüz kodu içermeyen ayrı bir kütüphane; bu sayede ekran olmadan birim testleriyle test edilebiliyor.
Teknolojiler
- Linux: Python, PyGObject ile GTK4 ve libadwaita, udisks2, PolicyKit,
parted,mkfs.vfat,rsync; nfpm ile üretilen.debve.rpmpaketleri ve bir Arch PKGBUILD’i - macOS: Swift paketi olarak Swift ve SwiftUI,
diskutil, Developer ID imzalama ve notarization - Windows: C#, .NET 8, WPF,
diskpart
Kalite
- Linux uygulaması için 87 pytest testi, macOS uygulaması için 42 XCTest testi, Windows biçimlendiricisi ve mantığı için 29 xUnit testi
- İstendiğinde çalıştırılan bir GitHub Actions iş akışı üç uygulamayı da test ediyor ve tüm paketleri derliyor. Bağımlılıkları kontrol etmek için Linux paketlerini Ubuntu 22.04 ve 24.04, Debian 12 ve Fedora container’larına kuruyor, Arch paketini bir Arch container’ında derliyor ve gerçek Windows biçimlendirme yolunu 40 GB’lık sanal bir diskte çalıştırıyor.
