Zašto sam napravio svoj Linux za audio

Posle više od 20 godina rada sa Linuxom, došao sam do tačke kada mi je bilo lakše da napravim sopstveni sistem nego da svaki put ponovo podešavam tuđi.

Linux koristim od 2003. godine.

Od tada je Linux moj primarni sistem.

Za to vreme prošao sam kroz toliko distribucija, desktop okruženja, kernela, drajvera i raznih Linux eksperimenata da odavno više ne mogu da se setim koliko sam ih instalirao, obrisao i ponovo instalirao.

Ali poslednjih pet godina stvar je postala mnogo ozbiljnija.

Počeo sam intenzivno da eksperimentišem sa Linuxom kao platformom za muzičku reprodukciju. Ne u smislu da instaliram nekoliko audio programa, promenim jedan sysctl parametar, dodam „realtime“ u naziv kernela i proglasim računar audiofilskim.

Zanimao me je ceo sistem.

Kako se ponaša kernel?

Šta rade kernel moduli?

Kako se ponaša USB audio uređaj?

Šta se događa između USB-a, ALSA-e, PipeWire-a i samog hardvera?

Da li neka promena zaista nešto poboljšava ili samo lepo izgleda u konfiguracionom fajlu?

I tu sam vremenom došao do jednog prilično jednostavnog zaključka.

Dosadilo mi je da svaki put počinjem od nule.

AV Linux je bio dobar početak

diya Linux nije nastao ni iz čega.

Pre njega sam koristio i prilagođavao AV Linux, odnosno njegov MX Linux respin, upravo zato što je već bio napravljen za audio i multimedijalni rad.

To je bio dobar početak.

Ali ni sa njim nisam bio potpuno zadovoljan.

Imao sam utisak da je sistem negde na pola puta.

Deo stvari je već bio dobro podešen, ali je od određene tačke ponovo počinjao moj posao. Kernel, audio podešavanja, određene sistemske stvari i ponašanje celog sistema ponovo sam morao da prilagođavam konkretnom računaru i načinu na koji koristim audio.

Drugim rečima, dobio sam dobru osnovu, ali sam i dalje posle instalacije morao da završavam posao.

Drugi problem bila je sama filozofija takve distribucije.

AV Linux je napravljen kao kompletno audio produkciono okruženje i zato dolazi sa velikim brojem programa za studio, snimanje, obradu i produkciju zvuka.

Meni veliki deo toga jednostavno nije bio potreban.

Ako računar prvenstveno služi za reprodukciju muzike, ne treba mi kompletan muzički studio instaliran na njemu.

Ne trebaju mi desetine programa koje nikada neću pokrenuti samo zato što bi možda nekome mogle da zatrebaju.

Treba mi sistem koji je podešen za ono što stvarno radim.

Tu je počeo da se menja moj pristup.

Zašto nisam napravio samo još jedan respin?

Mogao sam da uzmem MX Linux, dodam nekoliko paketa, promenim temu, ubacim audio programe i napravim još jedan respin.

Ali to zapravo nije bio problem koji sam pokušavao da rešim.

Nije mi trebalo još jedno pakovanje postojećeg sistema.

Trebao mi je konkretno podešen Linux sistem za konkretnu namenu.

Zato sam počeo da menjam stvari mnogo dublje.

Kernel.

Kernel module.

initrd.

USB audio.

ALSA.

PipeWire.

Realtime podešavanja.

IRQ prioritete.

Memorijsko ponašanje.

USB kontrolere.

Boot konfiguraciju.

Stabilnost Live sistema.

Kod USB audio uređaja posebno me zanimalo šta se stvarno događa između Linux kernela i uređaja, a ne samo šta piše u nekom konfiguracionom fajlu.

U testiranju sam radio i sa konfiguracijama koje uključuju uređaje kao što je Amanero Combo384.

Ne tvrdim da postoji jedna magična konfiguracija koja rešava audio za svakoga.

Upravo suprotno.

Svaka promena treba da ima razlog, a njen efekat treba proveriti na stvarnom sistemu.

To je postao osnovni princip projekta.

Nije svaki „tweak“ poboljšanje

Jedna od stvari koje su mi tokom godina postale posebno iritantne jeste audiofilska kultura podešavanja računara u kojoj se često podrazumeva da je svaka promena automatski poboljšanje.

Promeni ovo.

Dodaj ono.

Isključi nešto.

Podesi kernel na ovaj način.

Dodaj još jedan parametar.

Promeni buffer.

Promeni scheduling.

I na kraju dobiješ konfiguracioni fajl koji izgleda impresivno.

Ali šta se stvarno promenilo?

To je pitanje koje me mnogo više zanima.

Kod diya Linuxa pokušavam da se držim mnogo dosadnijeg principa:

stanje
  ↓
hipoteza
  ↓
test
  ↓
rezultat
  ↓
odluka

Ako promena ne donosi praktično koristan rezultat, nema razloga da ostane samo zato što zvuči „audiofilski“.

Nije to bilo nekoliko podešavanja

Kada kažem da sam podesio Linux za audio, to zvuči mnogo jednostavnije nego što jeste.

Nije se završilo na instalaciji audio servera i nekoliko parametara u jednom konfiguracionom fajlu.

Još od ranijih verzija imao sam praktično svoj spisak stvari koje proveravam i podešavam svaki put kada pravim novi sistem.

Tu su kernel i njegovi moduli, realtime podešavanja, rtirq, prioriteti za audio procese, rtkit, CPU latency, IRQ ponašanje, USB kontroleri, memorijsko ponašanje, filesystem mount opcije, scheduler, mrežni stack, CPU podešavanja i još čitav niz sitnijih sistemskih stvari.

U jednoj od ranijih verzija skripte, recimo, nalazili su se msr-tools, preload, irqbalance, ALSA biblioteke, rtkit, Intel microcode, realtime kernel, rtirq i tuned.

Podešavali su se i prioriteti za audio procese:

@audio  rtprio  99
@audio  nice   -20
@audio  memlock unlimited

Tu su bila i podešavanja CPU latency-ja, HPET-a, realtime schedulinga, GRUB-a, filesystema i sysctl parametara.

Jedan deo priče bio je i direktno vezan za USB i audio IRQ prioritizaciju.

To nije spisak koji treba slepo kopirati na bilo koji Linux računar. Naprotiv. Deo podešavanja se tokom godina menjao upravo zato što sam ih testirao na novijem kernelu i novijem sistemu.

A od tada se na ovaj spisak dodalo još mnogo toga.

Verovatno dvadesetak ili više pojedinačnih izmena.

Neke su ostale.

Neke su izbačene.

Neke su promenjene nekoliko puta.

Neke su vraćene nakon testiranja.

To je zapravo bio razvoj diya Linuxa.

Ne instalacija.

Ne „tweakovanje“.

Nego stalno testiranje, vraćanje, poređenje i peglanje.

Meseci peglanja systemd-a

Posebna priča bio je systemd.

Njega sam peglao danima, nedeljama i mesecima.

Ne zato što mislim da systemd treba po svaku cenu izbaciti iz Linuxa, već zato što nisam želeo da sistem tokom reprodukcije radi stvari koje mu nisu potrebne.

Cilj nije bio da se nasumično isključi pola sistema i onda napiše da je napravljen „audiofilski Linux“.

Cilj je bio da se razume šta sistem radi, šta mu je potrebno i šta može da ostane van puta.

To je mnogo dosadniji posao od instaliranja paketa.

Ali upravo tu se krije najveći deo razlike između gotovog respina i sistema koji je stvarno prilagođen konkretnoj nameni.

A onda sam počeo da peglam i XFCE

Ako već pravim sistem koji treba da koristim svakog dana, nije mi bilo dovoljno da kernel i audio stack budu sređeni.

Počeo sam da sređujem i XFCE.

Temu.

Ikonice.

Fontove.

Panel.

Menije.

Razmake.

Izgled prozora.

Sitnice koje većina ljudi verovatno neće ni primetiti.

Ali meni su važne.

Ako nešto vidiš, treba da izgleda kako treba.

Ako nešto ne vidiš, treba da radi kako treba.

A ako nešto nema razloga da bude tu, ne mora ni da bude tu.

I to je, zapravo, ista filozofija koja se provlači kroz ceo projekat.

Tako je nastao diya Linux

diya Linux nije pokušaj da napravim novi Linux od nule.

Osnovu čini MX Linux.

Na toj osnovi sam napravio sistem koji je namenjen jednoj konkretnoj stvari: muzičkoj reprodukciji.

Nije zamišljen kao univerzalna Linux distribucija.

Ne pokušava da bude distribucija za svakoga.

Ne pokušava da bude kompletan muzički studio.

Cilj je mnogo jednostavniji.

Računar treba da bude stabilna i predvidljiva platforma za reprodukciju muzike.

Zato se kod diya Linuxa ne bavim samo izborom audio servera.

Posmatra se ceo sistem i odnos između svih njegovih delova.

Minimalan, ali ne nedovršen

Trenutni diya Linux ISO ima oko 1,74 GB.

Po veličini praktično ulazi u kategoriju minimalnih Linux distribucija.

To je zanimljivo ako se uzme u obzir šta se sve nalazi iza tog broja.

Minimalnost ovde ne znači da je sistem ostavljen nedovršen.

Naprotiv.

Veliki deo posla koji bi korisnik inače morao da uradi posle instalacije već je urađen.

Nisam pokušavao da napravim najmanji mogući Linux.

Pokušavao sam da napravim najmanji sistem koji mi daje sve što mi stvarno treba, bez gomile softvera koji mi ne treba i bez potrebe da posle instalacije završavam posao koji je trebalo već da bude urađen.

Zato mi se čini da je najbolji opis diya Linuxa:

Minimalan je po onome što nosi sa sobom, a ne po tome koliko je podešen.

U tome je i razlika u odnosu na klasičan pristup audio distribucijama.

Ne dodajem sve što bi jednom audio korisniku možda moglo da zatreba.

Uklanjam ono što meni ne treba, a ostatak sistema podešavam mnogo preciznije.

Od sistema do distribucije

U početku ovo uopšte nije bio projekat distribucije.

Bio je to moj Linux sistem.

Menjao sam konfiguracije, testirao kernele, vraćao prethodne verzije i ponovo pokušavao.

Ali posle dovoljno godina nastane jedan problem.

Više ne znaš tačno šta si sve promenio.

A ako jednom napraviš sistem koji radi baš kako želiš, vrlo brzo postane jasno koliko je teško ponovo napraviti potpuno isto stanje.

Tu sam počeo da razmišljam o filesystem snapshotu i reproduktibilnom buildu.

Umesto da sistem postoji samo kao jedan direktorijum na jednom računaru, napravio sam konkretan snapshot root filesystema.

Taj snapshot predstavlja određeno stanje diya Linux sistema.

Od njega build proces može da napravi Live ISO.

Onda sam napravio i build sistem

Glavna skripta je:

build.sh

Ona proverava strukturu projekta, priprema SquashFS filesystem, ažurira Live linuxfs, priprema informacije o verziji i pravi bootabilni ISO.

Za kernel i initrd postoji:

update_kernel.sh

A za proveru napravljenog ISO-a u virtuelnoj mašini:

test_qemu.sh

Dakle, proces je postao:

root filesystem
       ↓
   build.sh
       ↓
   SquashFS
       ↓
    Live ISO
       ↓
     QEMU

Više ne zavisim od toga da se sećam šta sam radio pre šest meseci.

„Radi kod mene“ više nije dovoljno

Ako već pravim build sistem, onda bi trebalo da mogu da ga pokrenem iz potpuno čistog direktorijuma.

Zato veliki filesystem snapshot nisam stavio u Git.

Prevelik je.

Umesto toga, snapshot se čuva kao GitHub Release asset zajedno sa SHA256 kontrolnom sumom.

Napravio sam setup_root.sh.

Njegov posao je jednostavan:

git clone
     ↓
setup_root.sh
     ↓
preuzimanje snapshot-a
     ↓
SHA256 provera
     ↓
root-mx25/
     ↓
build.sh
     ↓
diya.iso

I onda sam uradio ono što mi je zapravo bilo najvažnije.

Napravio sam potpuno novi direktorijum na drugom mestu.

Bez postojećeg root-mx25.

Bez kopiranja mog radnog sistema.

Samo:

git clone https://github.com/mikorist/diya-linux.git diya-test
cd diya-test
./setup_root.sh

Snapshot se preuzeo sa GitHub Release-a.

SHA256 provera je prošla.

Filesystem je obnovljen.

Zatim sam napravio ISO.

I ISO radi.

To mi je mnogo važnije od toga da mogu da kažem da imam „svoj Linux“.

Jer sada više nije samo sistem koji radi kod mene.

Imam proces kojim mogu ponovo da ga napravim.

Šta je zapravo diya Linux?

diya Linux je MX Linux derivat koji razvijam kao specijalizovan sistem za audio reprodukciju.

Nije napravljen da zameni Debian.

Nije napravljen da zameni MX Linux.

Nije napravljen da bude konkurencija Ubuntu Studio-u.

I nije napravljen zato što mislim da svetu nedostaje još jedna Linux distribucija.

Napravljen je zato što sam posle više od dvadeset godina korišćenja Linuxa došao do tačke kada sam želeo tačno određeni sistem, sa tačno određenim ponašanjem, bez potrebe da svaki put ponovo prolazim kroz isti proces.

To je možda i najnormalniji razlog da čovek napravi sopstveni Linux.

Ne zato što misli da je napravio nešto revolucionarno.

Nego zato što mu je dosadilo da podešava tuđi.

Gde je projekat danas

Danas diya Linux ima gotov Live ISO koji može da se koristi bez ponavljanja celog build procesa.

GitHub projekat čuva build infrastrukturu, konfiguraciju, boot fajlove i dokumentaciju, dok se veliki filesystem snapshot čuva zasebno.

Cela ideja je da postoje tri jasno odvojene stvari:

ISO je namenjen korisniku.

GitHub je namenjen razvoju i buildu.

Filesystem snapshot čuva konkretno stanje sistema.

A build skripte povezuju sve to u ponovljiv proces.

To mi je trenutno mnogo zanimljivije od same činjenice da sam napravio još jednu Linux distribuciju.

Jer diya Linux nije nastao za vikend.

Nastao je iz više od dvadeset godina korišćenja Linuxa i poslednjih pet godina gotovo neprekidnog čačkanja po sistemu dok nisam došao do konfiguracije koju sam želeo.

I izgleda da je na kraju bilo jednostavnije napraviti svoj Linux nego još jednom instalirati Ubuntu Studio i krenuti ispočetka.

diya Linux.

Diyaudio linux

Linux koji sam napravio zato što mi je trebalo nešto što već nisam mogao da nađem.

GitHub: https://github.com/mikorist/diya-linux

Forum: https://www.diyaudio.rs/topic/10654-diyaudiors-linux-os/#comment-438135