Oturma Odası PC’si İçin SteamOS’i Forklama Süreci
(iliana.fyi)- 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;
/etcise 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.gzgibi 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,buildiddeğ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.jsonsunar vesteamos-atomupdiçindekiQueryUrl,ImagesUrl,MetaUrldeğ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-devmodeile 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 bisectyapı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
/varbölümü bulunur - Diskin kalan alanını tek bir
homebölümü doldurur
- Önyükleme sırasında birkaç pseudo-filesystem daha bağlanır
/var/log,/root,/nixgibi yaklaşık 12 dizin, verileri kalıcı kılmak için/home/.steamos/offloadüzerinden bind mount edilir
/etcoverlayfs ile işlenir- Değişiklikler
/var/lib/overlays/etc/upperaltında saklanır machine-id, NetworkManager bağlantıları gibi normalde/etciç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
- Değişiklikler
- 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.confiçindeki URL’ye göndererek yeni güncelleme olup olmadığını kontrol eder
- Bu komut Python programı
- 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.caibxdosyasını arar casync extractile 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
- İstemci bundle’ı indirir ve
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.5vesources/jupiter-3.5altında bulunabilir - Yazı anında stable imaj kernel’i
6.1.52-valve9-1-neptune-61idi 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
- Tarball içinde
- PKGBUILD, kaynak olarak
git+ssh://git@gitlab.steamos.cloud/jupiter/linux-integration.git#tag=$_tagbiçimindeki özel GitLab deposunu işaret eder- Doğrudan clone etmek veya commit bağlantısı vermek mümkün değildir
makepkgkaynakları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-valve9tag’indenmy-brancholuş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
- Örnek,
makepkgile kernel paketi oluşturulabilirmakepkg MAKEFLAGS=-j$(nproc)veya/etc/makepkg.confgü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
- Paketler bir dizine konur,
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.1idi - preview kanalı için ayrı bir snapshot JSON da vardır
- Yazı anında stable sürüm
- rootfs indirme işlemi
steamos-atomupd-clientile aynı sırayı izler- RAUC bundle olan
.raucbdosyası indirilir - SquashFS dosya sistemi olan bundle’dan
rootfs.img.caibxçıkarılır casync extractile.castrstore’dan parçalar alınarakrootfs.imgoluşturulur.castrstore URL’si, RAUC bundle URL’sindeki.raucbuzantısının.castrile değiştirilmiş halidir- Bu davranış
steamos-atomupdiçine hard-coded’dır - Otomasyon betiği fetch-current.sh içindedir
- RAUC bundle olan
- Yanındaki
.img.zipve.img.zstdosyaları 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 rootfsile mount edilir - SteamOS, Btrfs’in
readonlysubvolume özelliğini kullandığındanbtrfs property set -ts rootfs ro falseile kaldırılır
- Değişiklik sırasında sıkıştırmayı korumak için
- Linux kernel gibi paket değişiklikleri
/devve/procgerektiren betikleri tetikleyebilirdevtmpfsveproc, 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.confdosyası bind mount edilir
Paketleri değiştirme ve imaj metaverisini düzenleme
- Özel repository,
/etc/pacman.confiç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/$archveSigLevel = NeverkullanırSigLevel = Never, paket imzası olmasa da izin verir- GPG imzalı paketler kurmak için pacman keyring’in doldurulması gerekir
/etc/pacman.d/gnupgiç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-61biç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
- Gerçek betikte
steamos-atomupd, mevcut imaj sürümünü ve build ID’yi/lib/steamos-atomupd/manifest.jsoniçinden okur; yoksa/etc/os-releasekullanı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.Nbiçiminde olmalıdır- Biçim uymazsa
steamos-atomupdPython traceback ile sonlanır - Elle artırmaktan kaçınmak için
NyerineHHMMSSveya Unix timestamp koymak mümkündür manifest.jsoniçindekibuildidveos-releaseiçindekiBUILD_IDbirlikte değiştirilir- Bu iş için Bash betiği parçası repack.sh içindedir
- Biçim uymazsa
- RAUC, güven ayarı için X.509 sertifikaları kullanır
- Güvenilecek sertifika
/etc/rauc/keyring.pemiçindedir - Basit bir self-signed certificate yeterlidir
- Yeni sertifika
rootfs/etc/rauc/keyring.pemiçine kurulur
- Güvenilecek sertifika
rootfs/etc/steamos-atomupd/client.confiçindeki URL’ler de özel sunucuya çevrilirQueryUrlImagesUrlMetaUrl
- 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.localile bulmak istenirserootfs/usr/lib/systemd/resolved.conf.d/00-disable-mdns.confkaldırılabilir /etcoverlay ayarıyla da override edilebilir, ancak zahmetli bulunmuştur
- Örneğin ağda SteamOS cihazını
- İ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 rootfsile discard edilir - Unmount için
umount --recursive rootfskullanış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
- Örnek:
- RAUC bundle için üç dosya gerekir
manifest.raucmrootfs.img.caibx- filesystem UUID’sini içeren
UUID
manifest.raucmiçinde update bilgisi ve rootfs imaj bilgisi bulunurcompatible=steamos-amd64version=$versionsha256sizefilename=rootfs.img.caibx
UUIDdosyasıblkid -s UUID -o value rootfs.img >bundle/UUIDile oluşturulur- Üç dosya hazırlandıktan sonra
rauc bundleçalıştırılır--signing-keyring,--cert,--keyile sertifika ve anahtar belirtilir- Çıktı
rootfs.img.raucbolur
rootfs.img.raucbverootfs.img.caibx,client.confiçindekiImagesUrl’in işaret ettiği web sunucusuna yüklenir- İki dosya aynı dizinde olmalıdır
Özel güncelleme sunucusu ve uygulama
QueryUrlveMetaUrliçin kullanılan web sunucusu JSON dosyası sunmalıdır- Basit bir yapılandırmada tek bir
live.jsonyeterlidir.minor.candidates[0].imagenesnesi, imaj içindeki/lib/steamos-atomupd/manifest.jsonile aynı olmalıdırupdate_path, güncelleme istemcisinin bundle’ı indirmek içinImagesUrlsonuna ekleyeceği yoldur
- Örnek Caddy ayarı,
steamos-atomupd’ınQueryUrlveMetaUrlolarak gönderdiği isteklerilive.json’a rewrite eder/updates,/live.jsonolarak rewrite edilir/meta/*/*/*/*.jsonve/meta/*/*/*/*/*.json,/live.jsonolarak rewrite edilirfile_server browsekullanılır
- Gerçek SteamOS’in
QueryUrlveMetaUrldeğerlerinde daha fazla mantık var gibi görünse de yalnızca bu yapılandırmayla bilesteamos-atomupdyeni 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.pemve/etc/steamos-atomupd/client.confdosyalarını değiştirmek yeterlidirsteamos-readonly disablegerekmez- Değişiklikler
/etcoverlay’ine girer steamos-updateçalıştırıldıktan sonra/var/lib/overlays/etc/upperiç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
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
/nixbö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ümNix deposu yazılabilir herhangi bir konumda olabilir;
$PATHdeğişkenini sembolik bağlantı dizinine işaret edecek şekilde değiştirmek yeterliGerç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
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
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
1: https://github.com/games-on-whales/gow
https://kubevirt.io/user-guide/virtual_machines/host-devices...
Deklaratif, cloud-native oyun çalıştırma!
kubectl apply -f crysis.yamlBugü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
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
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
~/.configkirliliğ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ünJovian 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...
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, 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
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
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
Ç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ış
Salon PC’si ha, artık HTPC ya da “medya merkezi” gibi ifadeler pek kullanılmıyor mu?