Korištenje WSL-a za neočigledne zadatke

  • WSL 2 nudi gotovo kompletno Linux okruženje unutar Windowsa, s dobrim performansama, visokom kompatibilnošću i relativno ograničenim utjecajem na host sistem.
  • Glavne glavobolje za WSL obično dolaze iz mreže (DNS, VPN, korporativni firewall) i virtualizacije, ali gotovo svi oni imaju poznata rješenja.
  • WSL je idealan za razvoj i testiranje projekata dizajniranih za Linux (Docker, serveri, baze podataka) uz zadržavanje klasičnog Windows radnog toka.
  • Kada WSL više nije potreban, moguće je deinstalirati distribucije i opcionalne funkcije kako bi Windows ostao praktično onakav kakav je bio prije.

Korištenje WSL-a za neočigledne zadatke

WSL, Docker, Linux i virtuelne mašine... Čini se kao složen svijet za one koji rade na Windows razvojnim projektima. Mnogi programeri čuju divne stvari o Windows podsistemu za Linux , ali kada sjednu za svoje računare, nisu načisto koje će stvarne probleme riješiti, koje rizike nosi ili kako sve poslije srediti.

U ovom članku ćemo detaljnije pogledati šta je WSL, njegove upotrebe koje prevazilaze očigledne i, što je najvažnije, kako ga koristiti na način koji minimizira prekide u instalaciji Windowsa . Također ćemo istražiti kada biste mogli promijeniti stvari i koristiti Linux kao primarni operativni sistem, ostavljajući Windows u virtuelnoj mašini.

Šta je tačno WSL i zašto toliko ljudi priča o tome?

WSL je skraćenica za Windows Subsystem for Linux, Windows podsistem za pokretanje Linux distribucija integriranih unutar Windowsa 10 i 11. Microsoftova ideja je jednostavna: pružiti vam "pravo" Linux okruženje bez prisiljavanja na korištenje dual boota ili postavljanje klasične virtualne mašine s VirtualBoxom ili VMwareom.

U praksi, sa WSL-om možete imati Linux distribuciju poput Ubuntua, Debiana ili Kalija koja radi pored Windowsa, dijeliti datoteke između oba okruženja i pokretati tipične Linux alate (bash, ssh, apt, Python, Node, Docker, itd.) bez napuštanja vaše uobičajene radne površine. Sve ovo uz visok stepen integracije sa host sistemom.

Od svog lansiranja, WSL je izazvao vrlo polarizirana mišljenja. Neki programeri ga smatraju apsolutnim uspjehom i uvjerljivim razlogom da ostanu na Windowsu. Drugi, posebno iz purističkije Linux zajednice, vide ga kao strategiju "usvoji-proširi-ugasi" za održavanje Microsoftove hegemonije na desktop računarima . Osim kontroverzi, stvarnost je da je WSL promijenio način na koji mnogi programeri rade.

Trenutno preporučena verzija je WSL 2 , koja više nije samo sloj kompatibilnosti, već koristi laganu virtuelnu mašinu sa pravim Linux kernelom. Microsoft insistira da "to nije tradicionalna VM" jer je kreira, konfiguriše i optimizuje za vas, ali ispod nje je virtuelizacija sa tehnologijama poput Hyper-V.

WSL

WSL 1 vs WSL 2 i zahtjevi koje trebate imati na umu

Danas je važno razumjeti razliku između WSL 1 i WSL 2, posebno u pogledu performansi, kompatibilnosti i hardverskih zahtjeva . WSL 1 je prevodio sistemske pozive Linuxa na Windows; dobro je radio za mnoge stvari, ali mu je nedostajala kompatibilnost s naprednijim alatima.

Sa WSL 2, Microsoft je promijenio svoj pristup: pokreće kompletno Linux jezgro unutar visoko optimizovane virtuelne mašine . Ovo značajno poboljšava kompatibilnost (Docker, tipični Linux datotečni sistemi, itd.), a većina softvera koji radi na "pravom" Linux sistemu takođe radi unutar WSL 2.

Nedostatak je što WSL 2 ima više zavisnosti. Zahtijeva podršku za virtualizaciju CPU-a i SLAT (prevođenje adresa drugog nivoa) , koji je prisutan u relativno modernim procesorima (Intel Nehalem i noviji, AMD Opteron i nasljednici). Stariji CPU-i, kao što su neki Core 2 Duo procesori, jednostavno neće moći koristiti WSL 2 čak i ako omogućite sve funkcije.

Nadalje, da biste koristili WSL 2, potrebna vam je dovoljno novija verzija Windowsa: Windows 10 1903 (build 18362) ili noviji, ili Windows 11. Na starijim sistemima morat ćete se držati WSL 1, sa svim njegovim ograničenjima. To znači da ste, na neki način, i dalje podložni zahtjevima i životnim ciklusima Windowsa : ako vaš računar postane nepodržan, neće biti podržan ni WSL.

Brzo podešavanje WSL-a i prve odluke

U trenutnim verzijama Windowsa, Microsoft je znatno pojednostavio proces. Iz PowerShell konzole s administratorskim privilegijama, jednostavno pokrenite naredbu `wsl --install` da biste instalirali WSL i zadanu Ubuntu distribuciju . Sistem sam preuzima potrebne komponente i distribuciju iz Microsoft Store-a.

Tokom prvog pokretanja distribucije, bit ćete zamoljeni da kreirate korisničko ime i lozinku za Linux sistem . Ovaj korisnik je vaš glavni račun unutar distribucije, potpuno odvojen od vašeg Windows računa, što pomaže u održavanju određenog stepena izolacije.

Ako želite ići korak dalje, možete izlistati sve dostupne distribucije pomoću `wsl --list --online` i odabrati, na primjer, Debian, Kali, openSUSE ili druge Ubuntu varijante. Instalacija se vrši pomoću `wsl --install -d NAZIV_DISTRIBUCIJE` , a svaka distribucija se nalazi u svojoj izoliranoj "kutiji".

Podrazumevano, na novim sistemima, sama naredba wsl --install konfiguriše WSL 2 kao osnovnu verziju , ali to možete osigurati pomoću wsl --set-default-version 2. Ako već imate distribucije kreirane pomoću WSL 1, možete ih migrirati pojedinačno pomoću wsl --set-version DISTRIBUTION_NAME 2 , po cijenu malog vremena konverzije.

WSL

Kako WSL utiče na vaš Windows sistem i gdje pohranjuje stvari

Jedna od vaših glavnih briga vjerovatno je koliko WSL "zatrpava" vaš Windows sistem i gdje završava sve što instalirate na Linux. U suštini, svaka WSL distribucija se pohranjuje u mapu korisničkih podataka unutar %LocalAppData%\Packages , a ako više volite upravljati datotekama izvan klasičnog Explorera, možete koristiti alternativne upravitelje datoteka . Ne rasipa datoteke po cijelom disku kao što bi to učinila tradicionalna Linux instalacija.

Unutar te mape nalazi se direktorij LocalState s virtualnim diskom (VHDX) koji sadrži cijeli Linux datotečni sistem: /, /home, /var, itd. To znači da se web server, Docker, baze podataka, kod projekta - sve nalazi unutar tog kontejnera. Sve dok ne dirate ništa izvan njega, utjecaj na tipične Windows putanje je minimalan.

Međutim, WSL zahtijeva omogućavanje određenih sistemskih funkcija: "Windows podsistem za Linux" i, za WSL 2, "platforma virtuelne mašine". To se može uraditi putem PowerShella (Enable-WindowsOptionalFeature) ili iz grafičkog korisničkog interfejsa "Uključivanje ili isključivanje funkcija Windowsa". Linux kernel za WSL je također instaliran u %SystemRoot%\System32\lxss\tools.

Ove komponente postaju dio Windowsa nakon aktivacije, tako da ako ikada poželite vratiti sistem u prvobitno stanje, kao da nikada niste koristili WSL , morat ćete deinstalirati distribucije, onemogućiti opcionalne funkcije i, ako je potrebno, ukloniti kernel paket. To nije jednostavan proces "samo izbrišite mapu i gotovi ste", ali nije ni posebno kompliciran.

Također imajte na umu da WSL kreira virtualni mrežni interfejs, konfigurira pravila zaštitnog zida (firewall) i, u slučaju WSL 2, oslanja se na servise poput ICS-a (dijeljenje internetske veze) i HNS-a za upravljanje internim NAT-om, DNS-om i DHCP-om . Sve je ovo transparentno u svakodnevnim operacijama, ali objašnjava zašto određeni VPN-ovi ili korporativni zaštitni zidovi ponekad dolaze u sukob s WSL-om.

Korištenje WSL-a za web razvoj i manje očigledne zadatke

Osim tipičnog "Želim imati bash na Windowsu", WSL je odličan kada trebate replicirati produkcijska Linux okruženja bez napuštanja Windows radne površine . Na primjer, slučaj koji ste spomenuli: FOSS projekat koji koristi Docker, Flask, ArangoDB i druge backend servise.

Umjesto da se mučite s nejasnim verzijama Windowsa ili izvornim Docker Desktopom na Windowsu (što je historijski predstavljalo popriličnu gnjavažu), možete instalirati cijeli stek direktno unutar vaše WSL distribucije. Docker radi prirodno na WSL 2 kernelu , Linux servisi funkcioniraju kao što bi funkcionirali na pravom serveru, a možete nastaviti koristiti VS Code ili druge grafičke alate iz Windowsa.

Postoje i manje očigledne prednosti. Možete pokretati administrativne skripte, alate komandne linije specifične za Linux, dobre verzije Node-a i NVM-a, upravitelje paketa poput apt-a i općenito cijeli ekosistem uslužnih programa na koje su programeri servera navikli.

Zahvaljujući integraciji sistema datoteka, WSL montira vaše Windows diskove pod /mnt (na primjer, /mnt/c za disk C:). Ovo vam omogućava da uređujete kod pomoću Windows editora i pokrećete ga unutar Linuxa bez dupliranja projekata.

Još jedna zanimljiva karakteristika je interoperabilnost u drugom smjeru: iz Linux ljuske možete pozivati ​​Windows izvršne datoteke poput notepad.exe, powershell.exe ili bilo koje .exe datoteke na sistemu . Ako vaša PATH varijabla uključuje Win32 putanje poput /mnt/c/Windows/System32, potrebno je samo upisati ime izvršne datoteke da biste je pokrenuli, osim ako vaša ljuska nije slučajno prepisala PATH.

WSL

Windows Terminal: savršen partner za WSL

Da bi vam iskustvo korištenja WSL-a bilo praktičnije, Microsoft preporučuje korištenje Windows Terminala . To je moderna aplikacija koja vam omogućava otvaranje kartica za različite ljuske: PowerShell, CMD i, što je vrlo važno, svaku od vaših WSL distribucija.

Pomoću Windows Terminala možete kreirati Ubuntu, Debian ili Kali sesije iz jednog programa, zajedno s karticama i panelima, konfigurirati prečice na tastaturi i prilagoditi fontove, boje i profile bez potrebe za održavanjem više odvojenih cmd.exe prozora. Nadalje, eliminira potrebu za zastarjelim alatima poput PuTTY-a za SSH veze, omogućavajući vam da se povežete s udaljenim serverima direktno iz WSL distribucije.

Tipičan tijek rada za mnoge Windows developere danas je: kodiranje u VS Code-u, glavni terminal u Windows Terminalu i backend i alati unutar WSL-a . Ova kombinacija nudi iskustvo vrlo slično radu na macOS-u ili direktno na desktop Linux distribuciji.

Mreža, DNS, VPN i ostale glavobolje u WSL-u

WSL 2 obično uzrokuje najviše problema na mreži: pri korištenju lagane virtuelne mašine, ona zavisi od virtuelnog adaptera, pravila zaštitnog zida i malog internog NAT-a koji se ponekad sukobljavaju sa korporativnim konfiguracijama, VPN-ovima, antivirusom sa zaštitnim zidovima ili strogim sigurnosnim politikama.

Uobičajen problem je što WSL nema pristup internetu na korporativnim računarima . U mnogim domenama Active Directoryja, pravila zaštitnog zida (firewall) definirana od strane organizacije blokiraju lokalna pravila. Budući da je izuzetak koji HNS kreira kako bi dozvolio DNS promet sa WSL vNIC-a lokalni, on se poništava. Ako su `AllowLocalFirewallRules` ili `AllowInboundRules` postavljeni na `False` u odgovarajućem profilu (korištenjem `Get-NetFirewallProfile`), WSL neće moći razriješiti imena.

Rješenje uključuje administratora koji definira odgovarajuće korporativno pravilo. Alternativno, WSL DNS tuneliranje može se omogućiti korištenjem eksperimentalne opcije dnsTunneling u .wslconfig datoteci. Ova funkcija usmjerava DNS upite iz internog Linux sistema na Windows resolver putem sloja virtualizacije, eliminirajući potrebu za tradicionalnim mrežnim paketima koji bi mogli biti u sukobu sa zaštitnim zidom (firewall-om).

Neki VPN-ovi također uzrokuju probleme. Poznati su slučajevi s Cisco AnyConnectom, OpenVPN klijentima i rješenjima poput ZScalera, McAfee Safe Connecta ili Bitdefendera koji manipuliraju rutama, NRPT-om ili proxyjima na način koji prekida NAT ili ometa WSL promet. Ponekad je rješenje omogućiti `networkMode=mirrored`, drugi put onemogućiti `dnsTunneling` ili čak podesiti postavke autoProxyja tako da je mirroring HTTP_PROXY/HTTPS_PROXY unutar Linuxa prilagođen vašoj specifičnoj situaciji.

U klasičnom NAT modu postoje ograničenja kao što je mogućnost definiranja samo tri DNS servera u `/etc/resolv.conf` , što dnsTunneling također pomaže riješiti: Linux koristi sve DNS servere koje je konfigurirao Windows. Nadalje, DNS sufiksi se obrađuju različito ovisno o tome jeste li u čistom NAT-u, NAT-u s DNS tuneliranjem ili mirror modu. U potonjem, svi Windows DNS sufiksi se odražavaju u pretrazi `resolv.conf` i automatski se ažuriraju kada se promijene na hostu.

Kompatibilnost Dockera i kontejnera unutar WSL-a

Jedan od glavnih razloga za usvajanje WSL 2 je drastično poboljšanje Docker iskustva. Zvanični plan Microsofta i Dockera je da Docker Desktop koristi WSL 2 kao svoj backend , umjesto direktnog Hyper-V-a ili njegovog starijeg engine-a.

Međutim, nije sve savršeno. Problemi su otkriveni, na primjer, pri korištenju zrcalnog mrežnog načina rada (networkingMode=mirrored) i pokretanju kontejnera s objavljenim portovima . U tim slučajevima, Docker Desktop možda neće uspjeti kreirati ove kontejnere ako koristite zadani mrežni imenski prostor. Privremeno rješenje je pokretanje kontejnera s `--network host` ili dodavanje problematičnih portova u `ignoredPorts` u `.wslconfig`.

Također postoje problemi s kontejnerima koji pokreću Network Manager ili druge složene mrežne usluge . To može spriječiti ispravan rad WSL-ove mrežne konfiguracije, posebno za povratne veze s hostom. Microsoft preporučuje onemogućavanje ovih vrsta demona kada nisu strogo potrebni.

Ako vaše korporativno okruženje također uključuje HTTP/S proxyje i omogućite autoProxy u WSL-u, varijable kao što su HTTP_PROXY, HTTPS_PROXY, NO_PROXY i WSL_PAC_URL bit će popunjene . Imajte na umu da korisnički definirane varijable imaju prednost nad automatski generiranima. Linux izvorno ne podržava PAC-ove, tako da ćete možda morati prilagoditi skripte ili onemogućiti ovu funkciju.

Uobičajene greške unutar Linux distribucije i kako ih riješiti

Jednom kada se uđe u distribuciju, mogu se pojaviti i tipični Linux problemi, neki pogoršani specifičnostima WSL-a. Klasičan primjer je da se Windows naredbe poput powershell.exe ili notepad.exe neće pronaći kada se pozovu iz bash-a, prikazujući poruku "naredba nije pronađena".

U većini slučajeva, to je zato što pokretačka skripta (kao što je /etc/profile u Debianu) redefinira PATH bez uzimanja u obzir vrijednosti koju je proslijedio WSL , gubeći putanje poput /mnt/c/Windows i sličnih lokacija. Ispravan pristup je ili proširiti PATH ili ukloniti problematične linije, umjesto da ih prepišete. Također je preporučljivo provjeriti da /etc/wsl.conf ne sadrži appendWindowsPath=false.

Još jedan problem koji se ponavlja su greške pri nadogradnji naredbe apt-get povezane s udev-om i sistemskim servisima koji nisu podržani unutar WSL-a, jer to nije kompletan sistem s tradicionalnim init-om. Uobičajeno rješenje je instaliranje skripte policy-rc.d u /usr/sbin koja vraća izlaz 101 kako bi se spriječilo pokretanje servisa, dodavanje dozvola za izvršavanje i korištenje dpkg-divert za preusmjeravanje /sbin/initctl na /bin/true.

SSH također ima svoje specifičnosti. Ako prilikom pokušaja povezivanja na udaljeni server naiđete na upozorenja poput "NEZAŠTIĆENA DATOTEKA PRIVATNOG KLJUČA!" i dozvole 0777, najvjerovatnije je to zato što pohranjujete ključeve u direktorij montiran iz Windowsa s previše slabim dozvolama. Da bi WSL ispravno upravljao POSIX dozvolama na Windows datotekama, preporučuje se dodavanje odjeljka u /etc/wsl.conf s opcijama kao što su metadata,uid=1000,gid=1000,umask=0022.

Suprotno tome, ako postavite OpenSSH server unutar vaše WSL distribucije i prilikom povezivanja iz Windowsa vidite poruku "Veza zatvorena od strane 127.0.0.1 port 22", provjerite logove pokretanjem sshd-a u debug modu i provjerite da li postoje host ključevi u /etc/ssh i da li su izbrisani . Ako nedostaju, mogu se regenerirati ili, jednostavnije rečeno, možete očistiti i ponovo instalirati openssh-server paket.

Korištenje WSL-a u starijim verzijama Windowsa i legacy varijanti

Na vrlo starim Windows 10 sistemima (Creators Update, Anniversary Update), podrška za WSL je znatno ograničenija. Ovi sistemi su koristili bash.exe, lxrun i manje zrelu implementaciju. Komande i putanje su bile drugačije. Linux komande su se prenosile sa bash -c, distribucije su se pohranjivale u %LocalAppData%\lxss, a interoperabilnost sa Windowsom je bila rudimentarnija.

Ako dolazite iz tog doba i još uvijek imate "staru verziju" WSL-a, Microsoft preporučuje migraciju podataka na modernu distribuciju iz Trgovine i deinstalaciju stare. To možete učiniti pomoću `wsl --unregister Legacy` ili ručnim brisanjem mape `%LocalAppData%\lxss` (budite oprezni, ovo će izbrisati sve vaše stare Linux datoteke).

Na tim sistemima, funkcije poput WSL 2, službene podrške za grafičke Linux aplikacije, integracije s Docker Desktopom i pojednostavljene naredbe `wsl --install` nisu dostupne. Ako vaš hardver to dozvoljava, najbolja opcija je nadogradnja na noviju verziju. Ili možete direktno nadograditi na Windows 11 kako biste iskoristili prednosti trenutne verzije podsistema.

U svakom slučaju, ako vam je primarni cilj minimiziranje utjecaja na Windows ili ako vaš računar zaostaje u pogledu zahtjeva, postoji sve održivija alternativa: korištenje Linuxa kao glavnog operativnog sistema i prebacivanje Windowsa na virtualnu mašinu (na primjer, s VirtualBoxom, VMwareom ili GNOME Boxom). Na ovaj način izbjegavate oslanjanje na stalno rastuće zahtjeve Windowsa 11 i održavate svoj hardver u radu duže.

Planiranje zadataka u Linuxu pomoću Crontaba
Vezani članak:
Planiranje zadataka u Linuxu pomoću Crontaba

Dodaj kao preferirani izvor na Googleu