1 puan yazan GN⁺ 2024-01-01 | 1 yorum | WhatsApp'ta paylaş
  • SteamOS 3 “Holo”, Steam Deck için Arch tabanlı bir dağıtım olsa da oturma odası PC’sindeki suspend’den dönüş sorununu düzeltmek için bir kernel commit’ini geri almak ve rootfs imajını doğrudan fork etmek gerekti
  • Güncelleme yapısı, yeni salt okunur rootfs’i pasif bölüme kurup yeniden başlatan A/B modeli; /etc ise değişiklikleri korumak için overlayfs kullanıyor
  • Valve kernel yamaları, pacman kaynak aynasındaki linux-neptune-61-6.1.52.valve9-1.src.tar.gz gibi kaynak tarball’larından bare Git deposunu klonlayıp, kendi tag’leri ve PKGBUILD ile paket derleme akışına dayanıyor
  • rootfs’i yeniden paketleme; SteamOS RAUC bundle’ından rootfs.img.caibx’i çıkarıp imaja dönüştürmeyi, Btrfs UUID değişikliği, paket değişimi, buildid değişikliği, güncelleme URL’leri ve RAUC sertifikasının değiştirilmesini ve ardından tekrar RAUC bundle olarak paketlemeyi içeriyor
  • Kendi web sunucunuz live.json sunar ve steamos-atomupd içindeki QueryUrl, ImagesUrl, MetaUrl değerleri değiştirilirse mevcut SteamOS kurulumu da özel imajla güncellenebilir

SteamOS’i oturma odası PC’sine göre fork etme nedeni

  • SteamOS 3 “Holo”, Valve Software’in taşınabilir PC oyun cihazı Steam Deck için Arch tabanlı bir Linux dağıtımıdır
  • Güncelleme yöntemi, yeni salt okunur rootfs’i pasif bölüme indirip o bölümle yeniden başlatan A/B atomik güncelleme yapısıdır
  • Kullanıcılar steamos-devmode çalıştırarak rootfs kilidini kaldırıp pacman veritabanını normalleştirdiğinde sistemi sıradan bir Linux dağıtımı gibi kullanabilir
  • Amaç, steamos-devmode ile kolayca etrafından dolaşmak yerine rootfs imajının kendisini değiştirebilen düzgün bir fork oluşturmaktı
  • Oturma odası PC’sinde SteamOS neredeyse çalışıyordu, ancak yalnızca suspend’den dönüş başarısız oluyordu
    • Aynı bilgisayarda mainline veya stable kernel kullanan diğer dağıtımlarda suspend’den dönüş çalışıyordu
    • Valve kernel kaynakları bulunup git bisect yapıldığında, Steam Deck donanımında suspend’den dönüşü düzeltiyor gibi görünen bir commit’in bu PC’de soruna yol açtığı görüldü
    • Söz konusu commit’i geri almak ve kernel’i doğrudan derlemek gerekmesi, tüm çalışmanın doğrudan nedeniydi
  • Arch vb. doğrudan kullanmak da bir seçenekti; ancak oyun çalıştırmaya yönelik bir Linux dağıtımını elden geçirmek gerekiyorsa Valve’ın test ettiği paket kümesine yaslanmak tercih edildi

SteamOS’in bölüm ve güncelleme yapısı

  • SteamOS sistemi 8 bölüm kullanır
    • EFI system partition içinde stage 1 bootloader ve A/B bölüm seti seçim metaverisi bulunur
    • Her A/B setinde stage 2 bootloader olan GRUB, root filesystem ve /var bölümü bulunur
    • Diskin kalan alanını tek bir home bölümü doldurur
  • Önyükleme sırasında birkaç pseudo-filesystem daha bağlanır
    • /var/log, /root, /nix gibi yaklaşık 12 dizin, verileri kalıcı kılmak için /home/.steamos/offload üzerinden bind mount edilir
  • /etc overlayfs ile işlenir
    • Değişiklikler /var/lib/overlays/etc/upper altında saklanır
    • machine-id, NetworkManager bağlantıları gibi normalde /etc içinde kalması gereken öğeler korunur
    • Dokunulmamış yapılandırma dosyaları güncellenebilir
    • Bu yöntem, paket yöneticisi mantığı olmadan da A/B bölüm yapısında yapılandırma dosyalarını korumayı ve güncellemeyi birlikte ele alır
  • Sistem güncellemesi, Steam istemcisi veya terminal kullanıcısının steamos-update çalıştırmasıyla başlar
    • Bu komut Python programı steamos-atomupd-client’ı çalıştırır
    • İstemci mevcut OS bilgilerini ve kullanıcının güncelleme kanalı ayarlarını /etc/steamos-atomupd/client.conf içindeki URL’ye göndererek yeni güncelleme olup olmadığını kontrol eder
  • Yeni güncelleme varsa sunucu RAUC bundle yoluyla yanıt verir
    • İstemci bundle’ı indirir ve rauc install çalıştırır
    • RAUC bundle imzasını doğrular ve rootfs.img.caibx dosyasını arar
    • casync extract ile yeni imaj parçalarını indirip pasif rootfs bölümüne yazar
    • post-install betiği, aktif /vardan pasif /vara verileri seçici olarak eşitler ve EFI system partition’daki stage 1 bootloader ayarını değiştirerek yeni bölüm setinden önyükleme yapılmasını sağlar

Valve kernel kaynaklarından paket oluşturma

  • Valve, SteamOS’te yoğun şekilde değiştirilmiş bir Linux kernel kullanır ve kaynaklar indirilebilir durumdadır
  • Mevcut SteamOS imajının kaynakları Valve’ın pacman aynasındaki sources/holo-3.5 ve sources/jupiter-3.5 altında bulunabilir
  • Yazı anında stable imaj kernel’i 6.1.52-valve9-1-neptune-61 idi ve ilgili kaynak tarball’ı 2.9GiB boyutundaydı
  • Tarball’ın büyük olmasının nedeni, tüm Linux Git tree’sini içermesidir
    • Tarball içinde PKGBUILD, config, config-neptune, archlinux-linux-neptune/ vb. bulunur
    • archlinux-linux-neptune/, doğrudan üzerinde çalışılabilecek normal bir working tree değil, bir bare repository’dir
  • PKGBUILD, kaynak olarak git+ssh://git@gitlab.steamos.cloud/jupiter/linux-integration.git#tag=$_tag biçimindeki özel GitLab deposunu işaret eder
    • Doğrudan clone etmek veya commit bağlantısı vermek mümkün değildir
    • makepkg kaynaklarından her tag’in tüm commit geçmişini içeren snapshot alınabilir
    • Bu yapı sayesinde oturma odası PC’sinde suspend’i bozan commit için bisect yapılabildi
  • Çalışma biçimi, bare repository’yi normal working tree olarak clone edip kendi branch ve tag’lerini tutma akışıdır
    • Örnek, 6.1.52-valve9 tag’inden my-branch oluşturma biçimidir
    • Özel değişiklikler ayrı bir Git host’una yüklenir ve PKGBUILD’in source değeri bu depo ve özel tag ile değiştirilir
    • Örnek depo olarak linux vardır
  • makepkg ile kernel paketi oluşturulabilir
    • makepkg MAKEFLAGS=-j$(nproc) veya /etc/makepkg.conf güncellemesi, küçük bir VM söz konusu değilse kullanışlıdır
    • İncelenen kapsamda SteamOS’e özel paketler de ilk source olarak Git deposu kullanan benzer bir yapıdaydı
  • Sonraki adımları kolaylaştırmak için özel bir pacman repo’su yapılandırılır
    • Paketler bir dizine konur, repo-add $REPO_NAME.db.tar.zst [PACKAGES...] çalıştırılır ve ardından web host’una yüklenir
    • Bu repo daha sonra steamos-devmode çalıştırıldığında da aracın düzgün çalışmasına yardımcı olur

Root filesystem’i alma ve mount etme

  • Release engineering betikleri bulunamadığı için mevcut root filesystem’i ihtiyaca göre yeniden paketleme yöntemi seçildi
  • Açıklama ve yorum içermeyen betikler fauxlo içinde bulunuyor
  • SteamOS rootfs imajını almanın genel yolu Steam Deck satın almak veya Steam Deck kurtarma imajını indirmektir; ancak ikisi de Steam End User License Agreement onayı gerektirir
  • Güncel sürüm, güncelleme sisteminin fallback URL’si gibi görünen snapshot JSON’dan kontrol edilebilir
    • Yazı anında stable sürüm 20231122.1 idi
    • preview kanalı için ayrı bir snapshot JSON da vardır
  • rootfs indirme işlemi steamos-atomupd-client ile aynı sırayı izler
    • RAUC bundle olan .raucb dosyası indirilir
    • SquashFS dosya sistemi olan bundle’dan rootfs.img.caibx çıkarılır
    • casync extract ile .castr store’dan parçalar alınarak rootfs.img oluşturulur
    • .castr store URL’si, RAUC bundle URL’sindeki .raucb uzantısının .castr ile değiştirilmiş halidir
    • Bu davranış steamos-atomupd içine hard-coded’dır
    • Otomasyon betiği fetch-current.sh içindedir
  • Yanındaki .img.zip ve .img.zst dosyaları rootfs değil, ayrı önyüklenebilir kurtarma imajlarıdır
    • Kurtarma imajından rootfs bölümü çıkarılarak sonraki adımda kullanılabilir
    • Ancak RAUC ve casync ile alınan imajla bit-for-bit aynı değildi ve güncelleme bundle’ını yeniden oluştururken zaten bu araçlar gerekiyordu
  • rootfs’i değiştirmeden önce filesystem UUID’si değiştirilmelidir
    • Mevcut SteamOS imajından özel imaja güncellerken UUID değiştirilmezse iki farklı filesystem aynı UUID’ye sahip olur
    • Bu durum sorunlara yol açabilir
    • Örnek: btrfstune -fu rootfs.img
  • Valve, zstd sıkıştırması kullanan Btrfs imajı kullanır
    • Değişiklik sırasında sıkıştırmayı korumak için mount -o compress=zstd rootfs.img rootfs ile mount edilir
    • SteamOS, Btrfs’in readonly subvolume özelliğini kullandığından btrfs property set -ts rootfs ro false ile kaldırılır
  • Linux kernel gibi paket değişiklikleri /dev ve /proc gerektiren betikleri tetikleyebilir
    • devtmpfs ve proc, rootfs altına mount edilir
    • Önyüklenmiş sistemde mount edilecek dizinlere yazma yapılmaması için /tmp, /run, /var, /home üzerine tmpfs mount edilir
    • chroot içinde ad çözümlemenin çalışması için host’un /etc/resolv.conf dosyası bind mount edilir

Paketleri değiştirme ve imaj metaverisini düzenleme

  • Özel repository, /etc/pacman.conf içindeki ilk repo girdisi olarak eklenir
    • Böylece Valve repo’larında daha yeni sürüm paket olsa bile özel paket öncelikli olur
    • Daha sonra steamos-devmode çalıştırıldığında da özel paket yeniden kurulabilir
  • Örnek repo stanza’sı [fauxlo], Server = https://fauxlo.ili.fyi/pacman/$arch ve SigLevel = Never kullanır
    • SigLevel = Never, paket imzası olmasa da izin verir
    • GPG imzalı paketler kurmak için pacman keyring’in doldurulması gerekir
    • /etc/pacman.d/gnupg içindeki boş keyring’e dokunmak yerine tmpfs üzerindeki yeni keyring’i doldurma yöntemi kullanılır
  • Paket kurulumu pacman --sysroot rootfs --noconfirm -Sy linux-neptune-61 biçiminde yapılır
    • Gerçek betikte -yden kaçınılır ve yalnızca özel repo veritabanı pacman arkasında eşitlenir
    • Böylece diğer repository durumları, orijinal imajın derlendiği ana sabitlenebilir
    • Bu, imaj diff’inde görünen değişiklikleri azaltmak için yapılan bir tercihtir
  • steamos-atomupd, mevcut imaj sürümünü ve build ID’yi /lib/steamos-atomupd/manifest.json içinden okur; yoksa /etc/os-release kullanır
    • Sunucunun sunduğu güncellemenin build ID’si mevcut imajla aynıysa güncelleme reddedilir
    • Hangi imajın çalıştığını belirlemek için de kullanışlıdır
  • build ID mutlaka YYYYMMDD.N biçiminde olmalıdır
    • Biçim uymazsa steamos-atomupd Python traceback ile sonlanır
    • Elle artırmaktan kaçınmak için N yerine HHMMSS veya Unix timestamp koymak mümkündür
    • manifest.json içindeki buildid ve os-release içindeki BUILD_ID birlikte değiştirilir
    • Bu iş için Bash betiği parçası repack.sh içindedir
  • RAUC, güven ayarı için X.509 sertifikaları kullanır
    • Güvenilecek sertifika /etc/rauc/keyring.pem içindedir
    • Basit bir self-signed certificate yeterlidir
    • Yeni sertifika rootfs/etc/rauc/keyring.pem içine kurulur
  • rootfs/etc/steamos-atomupd/client.conf içindeki URL’ler de özel sunucuya çevrilir
    • QueryUrl
    • ImagesUrl
    • MetaUrl
  • 5GiB Btrfs imaj alanını aşmadığı sürece başka değişiklikler de mümkündür
    • Örneğin ağda SteamOS cihazını hostname.local ile bulmak istenirse rootfs/usr/lib/systemd/resolved.conf.d/00-disable-mdns.conf kaldırılabilir
    • /etc overlay ayarıyla da override edilebilir, ancak zahmetli bulunmuştur
  • İmaj olmadan kolayca yapılabilecek değişiklikleri rootfs’e koymamak temel ilkedir
    • Firefox rootfs’e kurulabilir
    • Ancak her Firefox güvenlik güncellemesinde imajı yeniden repack etmek gerekir

rootfs’i unmount etme ve RAUC bundle oluşturma

  • Düzenleme bitince filesystem tekrar read-only olarak işaretlenir
    • btrfs property set -ts rootfs ro true
  • Kullanılmayan bloklar fstrim -v rootfs ile discard edilir
  • Unmount için umount --recursive rootfs kullanışlıdır
    • Önceden mount edilen pseudo-filesystem’leri de birlikte işleyebilir
  • RAUC bundle oluşturmadan önce casync store ve blob index oluşturulur
    • Örnek: casync make --store=rootfs.img.castr bundle/rootfs.img.caibx rootfs.img
  • RAUC bundle için üç dosya gerekir
    • manifest.raucm
    • rootfs.img.caibx
    • filesystem UUID’sini içeren UUID
  • manifest.raucm içinde update bilgisi ve rootfs imaj bilgisi bulunur
    • compatible=steamos-amd64
    • version=$version
    • sha256
    • size
    • filename=rootfs.img.caibx
  • UUID dosyası blkid -s UUID -o value rootfs.img >bundle/UUID ile oluşturulur
  • Üç dosya hazırlandıktan sonra rauc bundle çalıştırılır
    • --signing-keyring, --cert, --key ile sertifika ve anahtar belirtilir
    • Çıktı rootfs.img.raucb olur
  • rootfs.img.raucb ve rootfs.img.caibx, client.conf içindeki ImagesUrl’in işaret ettiği web sunucusuna yüklenir
    • İki dosya aynı dizinde olmalıdır

Özel güncelleme sunucusu ve uygulama

  • QueryUrl ve MetaUrl için kullanılan web sunucusu JSON dosyası sunmalıdır
  • Basit bir yapılandırmada tek bir live.json yeterlidir
    • .minor.candidates[0].image nesnesi, imaj içindeki /lib/steamos-atomupd/manifest.json ile aynı olmalıdır
    • update_path, güncelleme istemcisinin bundle’ı indirmek için ImagesUrl sonuna ekleyeceği yoldur
  • Örnek Caddy ayarı, steamos-atomupd’ın QueryUrl ve MetaUrl olarak gönderdiği istekleri live.json’a rewrite eder
    • /updates, /live.json olarak rewrite edilir
    • /meta/*/*/*/*.json ve /meta/*/*/*/*/*.json, /live.json olarak rewrite edilir
    • file_server browse kullanılır
  • Gerçek SteamOS’in QueryUrl ve MetaUrl değerlerinde daha fazla mantık var gibi görünse de yalnızca bu yapılandırmayla bile steamos-atomupd yeni güncellemeyi bulabilir
  • Zaten duyurulmuş imaj mevcutta çalışıyorsa güncellemeden kaçınan bir mantık vardır
  • Mevcut SteamOS kurulumunu özel imaja güncellemek için /etc/rauc/keyring.pem ve /etc/steamos-atomupd/client.conf dosyalarını değiştirmek yeterlidir
    • steamos-readonly disable gerekmez
    • Değişiklikler /etc overlay’ine girer
    • steamos-update çalıştırıldıktan sonra /var/lib/overlays/etc/upper içindeki bu değişiklikleri temizlemeyi değerlendirin
  • Valve kurtarma imajlarından biri değiştirilip rootfs özel imajla değiştirilirse değiştirilmiş SteamOS kurulumu da yapılabilir gibi görünmektedir; ancak bu yöntem test edilmemiştir

1 yorum

 
GN⁺ 2024-01-01
Hacker News yorumları
  • Sahip olduğum cihazların yazılımını/işletim sistemini derinlemesine özelleştiren bu tür yazıları seviyorum. Steam Deck’te Tivoization konusunda endişelenmek zorunda olmamak da güzel.
    Yazıdaki en ilginç kısım bence /nix bölümüydü. Steam Deck’in nixpkgs desteklediğini bilmiyordum; biraz daha bakınca bunun varsayılan kurulum olmasa da tüm işletim sistemini fork etmeden cihaza kurulabildiğini gördüm

    • Nix zaten başlangıçta herhangi bir *nix işletim sistemine “tüm işletim sistemini fork etmeden” kurulabiliyordu.
      Nix deposu yazılabilir herhangi bir konumda olabilir; $PATH değişkenini sembolik bağlantı dizinine işaret edecek şekilde değiştirmek yeterli
    • Steam Deck’te nixpkgs içinden tam olarak ne kullanıldığını bilen var mı? Ben de nixpkgs’i çok kullanıyorum, o yüzden merak ettim ama ne yazık ki Steam Deck’im yok
  • Gerçekten çok özenli ve ilgi çekici bir yazı. Ben şahsen asla bu kadar ileri gitmezdim.
    Linux’la uğraşmışlığım sadece Raspberry Pi kullandığım dönemle sınırlı, onda da belki %1 kadar; bu yüzden yazarı etkileyici buldum

    • Ben de yazarla benzer bir durumdaydım. Oldukça uzun bir süre boyunca çok tuhaf bir sebeple kendi Red Hat çekirdeğimi derlemem gerekti; GPU’yu bir Windows VM’e passthrough yapmak için RMRR kontrolünü baypas etmem gerekiyordu.
      https://github.com/kiler129/relax-intel-rmrr ile benzer ama o depo bana ait değil.
      Asıl neden yalnızca üreticinin ROM güncellemesiyle çözülebilecek bir şeydi, fakat kullandığım eski DL360 için HPE desteği sona ermişti.
      Yamanın kendisi tek satırlık bir değişiklik ama çekirdek güncellemesi uğraştırıcı. SRPM almak gerekiyor; Git deposu olmadığı için SRPM’i açıp yamayı uyguladıktan sonra yeniden derleyip kurmak gerekiyor
    • TV istiyorsan, yakında gerçekten seçenek kalmayabilir
  • Zaten SteamOS bileşenlerini temel alıp PC ve kontrolcü kullanımına göre uyarlanmış dağıtımlar var. ChimeraOS, Steam Deck için ek araç olan EmuDeck’i bile içeriyor ve benim ortamımda oldukça sorunsuz çalışıyor

  • unRaid NAS sunucumda Steam Headless’ı harika bir Docker imajıyla çalıştırmak için bir GPU sipariş ettim; Windows dizüstünde ise Moonlight benzeri bir istemciyle bağlanmayı planlıyorum.
    Eğer iyi çalışırsa, çoğu zaman boşta duran NAS varken ayrıca oyun için masaüstü donanımı almaktan çok daha iyi olur. Yalnız kullanılmadığında Nvidia kartın güç ayarlarını boşta kalacak şekilde tutmak gerekiyor. Muhtemelen nvidia-persistenced çağrısıyla yapılabilir diye umuyorum.
    1: https://github.com/Steam-Headless/docker-steam-headless

    • Ben de neredeyse aynı şeyi GOW ile yapmaya çalışmak için epey zaman harcadım. Düşündüğümden çok daha zordu ve X sunucusu ayarlarını tutturmak için HDMI dummy plug bile gerekti.
      1: https://github.com/games-on-whales/gow
    • Başka bir alternatif olarak, GPU passthrough destekli bir KVM ayağa kaldırıp cloud-init ile Sunshine ve oyunları başlatabilir ya da doğrudan monitörü kullanabilirsin.
      https://kubevirt.io/user-guide/virtual_machines/host-devices...
      Deklaratif, cloud-native oyun çalıştırma!
      kubectl apply -f crysis.yaml
    • Güzel görünüyor. Şu anda Sunshine + Moonlight kullanıyorum ama yakında Steam Headless performansını test etmeyi planlıyorum
    • Oldukça ilginç. Bu şekilde yerel ağ üzerinden yayın yaparken giriş gecikmesi veya görüntü kalitesi sınırları hissediliyor mu?
    • Güzelmiş. Civilization gibi sıra tabanlı hotseat oyunları sunucuda açık bırakıp tarayıcıdan uzaktan bağlanarak arkadaşlarla her yerden, her zaman uzun turlu oyunlar oynatacak bir kurgu hayal edip duruyordum
  • Bugün RAUC’u (https://rauc.io/) öğrendim. Valve’ın A/B güncelleme yöntemini nasıl uyguladığını merak ediyordum

  • Netscape’in meteor shower favicon’unu biraz özlemiyor musunuz?

  • İlginç bir yazı. A/B yükseltmeler biraz fazla gibi görünüyor. Bir sorun olursa live distro başlatabilir ya da ayrı bir bölüme eski sürümün kurtarma sistemini kurabilirsin.
    Son birkaç yıldır NixOS kullandıktan sonra Arch’a geri döndüm; ondan önce de uzun süre Arch kullanmıştım ve bence yazarın endişeleri boşa çıkmış gibi.
    Arch kesinlikle çok ciddi ve olgun bir dağıtım; Valve’dan daha da güvenilir.
    Arch’a geçme nedenim paket kalitesiydi. Ana depo gerçekten çok hızlı güncelleniyor ve AUR’da faydalı çok sayıda paket var

    • Sen ve ben live distro başlatabiliriz ama bilgisayar kullanıcılarının ezici çoğunluğu bunu yapamaz. Valve açıkça ortalama kullanıcı için üretmeye odaklanıyor ve Linux dağıtımları ne kadar iyi olursa olsun bunu hâlâ pek iyi yapamıyor.
      Başarısız bir yükseltmeden sonra sistemin otomatik toparlanması, günümüzün düşük bakım gerektiren işletim sistemlerinde neredeyse zorunlu
    • Steam Deck kullanıcılarının bozuk bir yükseltmeyi düzeltmek için live distro önyüklemesi yapmasını beklememelisin. Bunun pürüzsüz olması ve arka planda kendi kendine hallolması gerekiyor
    • Yapılabilir tabii ama artık bunu gereksiz kılacak teknoloji var ve diskler de o kadar pahalı değil; dolayısıyla yapmamak için pek neden yok
    • Steam Deck özünde video oyunları için bir Chromebook’a epey yakın, bu yüzden ChromeOS’un kolay kolay bozulmayan bölümleme yaklaşımı mantıklı bir fikir gibi görünüyor
    • Arch paket kalitesi yüzünden NixOS’tan geçtiğini söylemişsin; buna örnek verebilir misin?
      Ben genel olarak NixOS paketlerinin kalitesini yüksek buluyorum
  • Son zamanlarda oyun amaçlı el konsolu Legion Go edindim ve Linux’u daha fazla kurcalamaya başladım. Eskiden bu bana sonsuz bir yama/kurcalama zaman kaybı gibi görünüyordu; gerçekten kullanmak istediğim şeylerle uyumluluğu da sınırlı olduğu için uzak duruyordum
    Değişmez dosya sistemi yaklaşımını ve geleneksel Linux’un her türlü rastgele yazılıma root yetkisini kolayca vermesini okuyunca merakım uyandı
    Şu anda NixOS kullanıyorum; evet, kesinlikle bir kurcalama zaman kaybına dönüşebilir ama keşif için çok iyi. Çeşitli bileşenleri kolayca deneyebiliyorsunuz ve devam ettirmemeye karar verirseniz ~/.config kirliliği dışında tamamen kaldırabiliyorsunuz. Kurulumdan önce yama uygulamak da çok küçük bir iş, bu yüzden oyun el konsolları gibi alışılmadık donanımlarda Linux’u çalıştırmayı sağlayan çekirdek yamalarını da kolayca eklemek mümkün
    Jovian adlı bir NixOS topluluğu, Valve’ın rastgele SteamOS tarball’larını GitHub’daki etiketlenmiş commit’ler olarak yeniden oluşturuyor; böylece bir Valve çalışanı gibi kaynak kodu inceleyebiliyorsunuz. Nix yapılandırmasına sadece birkaç satır ekleyerek NixOS üzerinde kendi SteamOS kopyanızı kurabilmenizi sağlamışlar
    Belli ki bunlar Linux uzmanları ve kaynağa bakınca, güç düğmesinin konumunu sabit kodlamak yerine algılamak gibi basit ayarlamalar dışında Valve paketlerini değiştirmeden aldıklarını görebiliyorsunuz
    Saf bir SteamOS deneyimi istiyor ama Valve güncelleme sisteminin aynasını kendiniz barındırmak istemiyor ya da 3 GB’lık tarball indirmeden Valve kaynaklarını incelemek istiyorsanız, Jovian denemeye değer
    Kurulum rehberi: https://jovian-experiments.github.io/Jovian-NixOS/getting-st...
    Valve kaynak aynası: https://github.com/orgs/Jovian-Experiments/repositories?type...

    • Ben de Steam Deck’te Jovian-NixOS’u sorunsuz kullanıyorum, kesinlikle tavsiye ederim
  • bazzite.gg de bunu çok iyi yapıyor. AMD donanımında 120Hz VRR kutudan çıktığı gibi çalıştı ve HDR desteğini de alfa olarak test edebiliyorsunuz

    • Bazzite’ı ilk kez duyuyorum
      “Bazzite, Steam Deck için alternatif işletim sistemi olarak kullanılabilen bir OCI imajı ve masaüstü bilgisayarlar, salon tipi ev sineması PC’leri ve çeşitli taşınabilir PC’ler için kutudan çıktığı anda oyuna hazır, SteamOS benzeri bir ortamdır”
      https://github.com/ublue-os/bazzite/
      İlgilenmiyor olsanız bile README’ye bakmaya değer. İçindekilerin listesi inanılmaz uzun ve özellikle oyuncular ya da yayıncılar için oldukça havalı ve faydalı görünen birçok şey var
    • Bazzite ve genel olarak değişmez Linux çok ilginç
      Bunu tek bir HN yorumunda kısa ve kusursuz biçimde açıklayacak kadar derine inmediğim doğru, ama özü şu: root üzerinde salt okunur, doğrulanmış bir Linux dağıtımı bulunuyor ve paketler bunun üzerine katman olarak ekleniyor. Sunucu tarafındaki container dünyasından çok ilham alan bir yapı
      Amaç, geleneksel Linux’tan daha güvenli, daha güvenilir, yeniden üretilebilir ve özelleştirmesi daha kolay bir sistem sunmak. İstediğiniz paketleri container manifest’ine yazıyorsunuz; bir yükseltme çıktığında yükseltmeyi çalıştırıyor, ardından paketleri bunun üzerine tekrar kuruyorsunuz
    • Daha da ilgili olan tarafı, Bazzite’ı nispeten kolay şekilde fork edip eksik paketleri veya ihtiyaç duyduğunuz ayarları kendi özel imajınıza ekleyebilmeniz ve altyapı işlerinin büyük kısmını GitHub Actions’a bırakabilmeniz
      https://universal-blue.org/guide/fork-your-own/
      Ve değişmez bir OS olduğu için bir şeyler ters giderse önceki imaja geri de dönebiliyorsunuz
    • Steam’in yıl sonu özetine göre 2023, ilk kez yalnızca Linux’ta oyun oynadığım yıl oldu; buna bu yıl çıkan bazı oyunlar da dahildi
      Çoğunu Steam Deck’te ya da GPU passthrough uygulanmış sanal makinede Bazzite çalıştırarak oynadım ve gerçekten çok iyi yapılmış
    • Bazzite’ın daha ünlü olmamasına şaşırıyorum. Hayalini kurduğum şey tam olarak buymuş ama yakın zamana kadar varlığından bile haberim yoktu
  • Salon PC’si ha, artık HTPC ya da “medya merkezi” gibi ifadeler pek kullanılmıyor mu?