
WSL, Docker, Linux ja virtuaalikoneet… Maailma tuntuu monimutkaiselta Windows-kehitysprojektien parissa työskenteleville. Monet kehittäjät kuulevat ihmeellisiä asioita… Windows-alijärjestelmä LinuxilleMutta kun he istuvat tietokoneen ääreen, heille ei ole selvää, minkä todellisen ongelman se ratkaisee, mitä riskejä se sisältää tai miten kaikki siivotaan jälkikäteen.
Tässä artikkelissa tarkastelemme lähemmin, mitä WSL on, mihin sitä käytetään ilmeisimpien asioiden lisäksi ja ennen kaikkea, Kuinka käyttää sitä tavalla, joka "sotkee" Windows-asennuksesi mahdollisimman vähänKatsomme myös, milloin voisit olla kiinnostunut kääntämään suunnitelmasi pääjärjestelmäksi ja käyttämään Linuxia ja jättämään Windowsin virtuaalikoneeseen.
Mikä WSL tarkalleen ottaen on ja miksi niin monet ihmiset puhuvat siitä?
WSL tarkoittaa Windows-alijärjestelmä Linuxille, Windows-alijärjestelmä Linux-jakelujen suorittamiseen integroitu Windows 10:een ja 11:een. Microsoftin idea on yksinkertainen: antaa sinulle "oikea" Linux-ympäristö pakottamatta sinua käyttämään kaksoiskäynnistystä tai perustamaan klassista virtuaalikonetta VirtualBoxilla tai VMwarella.
Käytännössä WSL:n avulla voit käyttää Ubuntun, Debianin tai Kalin kaltaista jakelua Windowsin rinnalla, jakaa tiedostoja molempien järjestelmien välillä ja käynnistää tyypillisiä Linux-työkaluja (bash, ssh, apt, Python, Node, Docker…) poistumatta tavalliselta työpöydältäsi. Kaikki tämä melko korkealla integraatioasteella isäntäjärjestelmään.
Lanseerauksestaan lähtien WSL on herättänyt hyvin ristiriitaisia mielipiteitä. Jotkut kehittäjät pitävät sitä ehdottomana menestyksenä ja vakuuttavana syynä jatkaa Windowsin käyttöä. Toiset, erityisesti puhtaamman Linux-yhteisön jäsenet, näkevät sen keinona, jonka avulla... ”Adopt-Extend-Extinue” ylläpitääkseen Microsoftin työpöytävaltaaKiistojen lisäksi todellisuudessa WSL on muuttanut monien kehittäjien työskentelytapaa.
Nykyinen suositeltu versio on WSL 2Se ei ole enää vain yhteensopivuuskerros; se käyttää kevyttä virtuaalikonetta, jossa on oikea Linux-ydin. Microsoft väittää, että "se ei ole perinteinen virtuaalikone", koska se luo, konfiguroi ja optimoi sen puolestasi, mutta sen alla on virtualisointia, jossa käytetään teknologioita, kuten Hyper-V.
WSL 1 vs. WSL 2 ja vaatimukset, jotka sinun tulee pitää mielessä
Nykyään on tärkeää ymmärtää WSL 1:n ja WSL 2:n välinen ero. Erityisesti mitä tulee seuraaviin kysymyksiin: suorituskyky-, yhteensopivuus- ja laitteistovaatimuksetWSL 1 suoritti Linux-järjestelmäkutsujen muuntamisen Windowsiin; se toimi hyvin monissa asioissa, mutta ei ollut yhteensopiva edistyneempien työkalujen kanssa.
WSL 2:n myötä Microsoft muuttaa lähestymistapaansa: Se suorittaa täydellisen Linux-ytimen erittäin optimoidun virtuaalikoneen sisälläTämä parantaa huomattavasti yhteensopivuutta (Docker, tyypilliset Linux-tiedostojärjestelmät jne.) ja useimmat ohjelmistot, jotka toimivat "oikeassa" Linuxissa, toimivat myös WSL 2:n sisällä.
Haittapuolena on, että WSL 2:lla on enemmän riippuvuuksia. Vaatii suorittimen virtualisointituen ja SLAT:n (toisen tason osoitteenmuunnos)Tämä ominaisuus on suhteellisen moderneissa prosessoreissa (Intel Nehalem ja uudemmat, AMD Opteron ja seuraajat). Vanhemmat suorittimet, kuten jotkin Core 2 Duo -prosessorit, eivät yksinkertaisesti pysty käyttämään WSL 2:ta, vaikka kaikki ominaisuudet olisivat käytössä.
Lisäksi WSL 2:n käyttämiseen tarvitset riittävän uudemman Windows-version: Windows 10 1903 (koontiversio 18362) tai uudempi tai Windows 11Vanhemmissa järjestelmissä on pitäydyttävä WSL 1:ssä rajoituksineen. Tämä tarkoittaa, että tavallaan Raahaat edelleen Windowsin vaatimuksia ja elinkaarejaJos koneesi ei enää ole tuettu, WSL:ääkin tuetaan.
Nopea WSL-asennus ja ensimmäiset päätökset
Nykyisissä Windows-versioissa Microsoft on yksinkertaistanut prosessia huomattavasti. Suorita PowerShell-konsolissa järjestelmänvalvojan oikeuksilla Komento wsl –install asentaa WSL:n ja oletusarvoisen Ubuntu-järjestelmän.Järjestelmä itse lataa tarvittavat komponentit ja distron Microsoft Storesta.
Distron ensimmäisen käynnistyksen aikana sinua pyydetään luomaan käyttäjätunnus ja salasana Linux-järjestelmää vartenKyseinen käyttäjä on päätilisi distrossa, täysin riippumaton Windows-tilistäsi, mikä auttaa ylläpitämään tiettyä eristäytymisastetta.
Jos haluat mennä hieman pidemmälle, voit listata kaikki saatavilla olevat jakelut seuraavasti: wsl - lista - verkossa ja valitse esimerkiksi Debian, Kali, openSUSE tai muita Ubuntu-versioita. Asennus tehdään wsl –install -d JAKELUN_NIMI ja jokainen distro asuu omassa eristetyssä "laatikossaan".
Oletusarvoisesti uusissa järjestelmissä itse wsl –install-komento Määritä WSL 2 perusversioksiMutta voit varmistaa tämän käyttämällä `wsl --set-default-version 2` -komentoa. Jos sinulla on jo WSL 1:llä luotuja jakeluita, voit siirtää ne yksitellen käyttämällä wsl –set-version JAKELUN_NIMI 2lyhyen muuntoajan kustannuksella.
Miten WSL vaikuttaa Windows-järjestelmääsi ja mihin se tallentaa asioita
Yksi tärkeimmistä huolenaiheistasi on luultavasti se, kuinka paljon WSL "sotkee" Windows-järjestelmääsi ja minne kaikki Linuxiin asentamasi päätyy. Olennaista on, että Jokainen WSL-jakelu tallennetaan käyttäjätietojen kansioon hakemistossa %LocalAppData%\Packages.Ja jos haluat hallita tiedostoja perinteisen Resurssienhallinnan ulkopuolella, voit käyttää vaihtoehtoiset tiedostonhallintaohjelmatSe ei vapauta tiedostoja kaikkialle levylle kuten klassinen Linux-asennus tekisi.
Kyseisen kansion sisällä on LocalState-hakemisto, jossa on virtuaalilevy (VHDX), joka sisältää koko Linuxin tiedostojärjestelmä: /, /home, /var jne.Toisin sanoen web-palvelin, Docker, tietokannat, projektikoodi – kaikki sijaitsee kyseisen säilön sisällä. Niin kauan kuin et koske mihinkään sen ulkopuolella, vaikutus tyypillisiin Windows-polkuihin on minimaalinen.
WSL vaatii kuitenkin tiettyjen järjestelmäominaisuuksien aktivoimisen: ”Windows-alijärjestelmä Linuxille” ja WSL 2:lle ”virtuaalikonealusta”Tämä voidaan tehdä PowerShellin (Enable-WindowsOptionalFeature) kautta tai "Ota Windowsin ominaisuudet käyttöön tai poista ne käytöstä" -käyttöliittymästä. Se asentaa myös Linux-ydin WSL:lle %SystemRoot%\System32\lxss\tools-hakemistossa.
Näistä komponenteista tulee osa Windowsia aktivoinnin jälkeen, joten jos haluat milloin tahansa Jätä järjestelmä ikään kuin et olisi koskaan koskenut WSL:äänSinun on poistettava jakelut, poistettava valinnaiset ominaisuudet käytöstä ja tarvittaessa poistettava kernel-paketti. Se ei ole yksinkertainen "poista vain kansio ja olet valmis" -prosessi, mutta se ei ole myöskään erityisen monimutkainen.
Muista myös, että WSL luo virtuaalisen verkkoyhteyden, säätää palomuurisääntöjä ja WSL 2:n tapauksessa luottaa palveluihin, kuten ICS (Internet-yhteyden jakaminen) ja HNS sisäisen NAT:n, DNS:n ja DHCP:n hallintaanKaikki tämä on läpinäkyvää päivittäisessä toiminnassa, mutta se selittää, miksi tietyt yritysten VPN-verkot tai palomuurit joskus törmäävät WSL:ään.
WSL:n käyttö web-kehitykseen ja vähemmän ilmeisiin tehtäviin
Tyypillisen "Haluan bashin Windowsissa" -kommentin lisäksi WSL loistaa tarvittaessa. Luo uudelleen Linux-tuotantoympäristöjä poistumatta Windows-työpöydältäsiEsimerkiksi mainitsemasi tapaus: FOSS-projekti, joka käyttää Dockeria, Flaskia, ArangoDB:tä ja muita taustapalveluita.
Sen sijaan, että kamppailisit outojen Windows-versioiden tai Docker Desktopin kanssa natiivissa Windowsissa (mikä on historiallisesti ollut melko tuskallista), voit asentaa koko pinon suoraan WSL-jakeluusi. Docker toimii luonnollisesti WSL 2 -ytimessäLinux-palvelut toimivat kuin oikealla palvelimella, ja jatkat VS Coden tai muiden Windowsin graafisten työkalujen käyttöä.
On myös vähemmän ilmeisiä etuja. Voit juosta hallintaskriptit, Linux-kohtaiset komentorivityökalut, hyvät Node- ja NVM-versiot, paketinhallintaohjelmat, kuten aptja yleisesti ottaen koko apuohjelmien ekosysteemi, johon palvelinkehittäjät ovat tottuneet.
Tiedostojärjestelmäintegraation ansiosta WSL asentaa Windows-levysi /mnt-hakemistoon (esimerkiksi /mnt/c C:-asemalle). Tämä mahdollistaa Muokkaa koodia Windows-editorilla ja suorita se Linuxissa kopioimatta projekteja.
Toinen mielenkiintoinen asia on yhteentoimivuus toisella puolella: Linux-komennosta voi soittaa Windows-suoritettavat tiedostot, kuten notepad.exe, powershell.exe tai mikä tahansa system .exeJos PATH-muuttujassasi on Win32-polkuja, kuten /mnt/c/Windows/System32, suoritettavan tiedoston nimen kirjoittaminen käynnistää sen, ellei komentotulkkisi ole vahingossa korvannut PATH-muuttujaa.
Windows-pääte: täydellinen kumppani WSL:lle
Jotta WSL-kokemuksesi olisi mukavampi, Microsoft suosittelee käyttämään Windows-pääte (espanjaksi Windows-pääte)Se on moderni sovellus, jonka avulla voit avata välilehtiä eri komentotulkeista: PowerShell, CMD ja, mikä tärkeintä, jokainen WSL-jakeluistasi.
Windows Terminal -sovelluksella voit luoda Ubuntu-, Debian- tai Kali-istuntoja yhdestä ohjelmasta, jossa on välilehtiä ja paneeleita, määrittää pikanäppäimiä ja mukauta fontteja, värejä ja profiileja ilman, että sinun tarvitsee ylläpitää tuhatta erillistä cmd.exe-ikkunaa. Lisäksi se poistaa vanhentuneiden työkalujen, kuten PuTTY:n, käytön SSH-yhteyksissä, koska voit muodostaa yhteyden etäpalvelimiin suoraan WSL-jakelusta.
Tyypillinen työnkulku monille Windows-kehittäjille nykyään on: Koodi VS Codessa, pääterminaali Windows Terminalissa ja taustajärjestelmä ja työkalut WSL:ssäTämä yhdistelmä tarjoaa kokemuksen, joka on hyvin lähellä työskentelyä macOS:ssä tai suoraan Linux-jakelussa.
Verkko, DNS, VPN ja muut WSL:n ongelmat
WSL 2 aiheuttaa yleensä eniten ongelmia verkossa: kevyttä virtuaalikoneen käyttöä varten se on riippuvainen virtuaalisovitin, palomuurisäännöt ja pieni sisäinen NAT jotka joskus ovat ristiriidassa yrityksen asetusten, VPN-verkkojen, palomuurien kanssa toteutettujen virustorjuntaohjelmien tai tiukkojen suojauskäytäntöjen kanssa.
Yleinen ongelma on, että WSL:llä ei ole internetyhteyttä yrityksen tietokoneillaMonissa Active Directory -verkkotunnuksissa organisaation määrittämät palomuurisäännöt estävät paikalliset säännöt. Koska HNS:n luoma poikkeus, joka sallii DNS-liikenteen WSL-vNIC:stä, on paikallinen, se ohitetaan. Jos `AllowLocalFirewallRules`- tai `AllowInboundRules`-asetuksena on `False` vastaavassa profiilissa (käytetään `Get-NetFirewallProfile`-metodia), WSL ei selvitä nimiä.
Ratkaisu piilee siinä, että ylläpitäjä määrittelee asianmukaisen yrityssäännön. Tai vaihtoehtoisesti, Ota WSL DNS -tunnelointi käyttöön kokeellisella dnsTunneling-asetuksella .wslconfig-tiedostossa. Tämän ominaisuuden ansiosta sisäiset Linuxin DNS-kyselyt menevät suoraan Windowsin resolveriin virtualisointikerroksen kautta ilman klassisia verkkopaketteja, jotka voisivat olla ristiriidassa palomuurin kanssa.
Jotkin VPN:t aiheuttavat myös ongelmia. On tunnettuja tapauksia, joissa Cisco AnyConnect, OpenVPN-asiakasohjelmat, ratkaisut, kuten ZScaler, McAfee Safe Connect tai Bitdefender jotka manipuloivat reittejä, NRPT:tä tai välityspalvelimia tavalla, joka rikkoo NAT:n tai häiritsee WSL-liikennettä. Joskus ratkaisu on ottaa käyttöön networkingMode=mirrored, toisinaan poistaa dnsTunnelling käytöstä tai jopa säätää autoProxy-asetuksia niin, että HTTP_PROXY/HTTPS_PROXY-peilaus Linuxissa sopii omaan tilanteeseesi.
Klassisessa NAT-tilassa on rajoituksia, kuten Voit määrittää vain kolme DNS-palvelinta tiedostossa /etc/resolv.confMyös tämä on ongelma, jota dnsTunnelling auttaa ratkaisemaan: Linux käyttää kaikkia Windowsin määrittämiä DNS-palvelimia. Lisäksi DNS-päätteitä käsitellään eri tavalla riippuen siitä, käytätkö puhdasta NAT:ia, NAT:ia DNS-tunneloinnin kanssa vai peilattua tilaa. Peilatussa tilassa kaikki Windowsin DNS-päätteet näkyvät resolv.conf-haussa ja päivittyvät automaattisesti, kun ne muuttuvat isännässä.
Docker- ja konttiyhteensopivuus WSL:n sisällä
Yksi tärkeimmistä syistä WSL 2:n käyttöönotolle on ollut Docker-kokemuksen merkittävä parantaminen. Microsoftin ja Dockerin virallinen ajatus on, että Docker Desktop käyttää WSL 2:ta taustajärjestelmänä, suoran Hyper-V:n tai sen vanhan moottorin sijaan.
Silti kaikki ei ole täydellistä. Ongelmia on havaittu esimerkiksi silloin, kun Käytät peilattua verkkotilaa (networkingMode=mirrored) ja suoritat säilöjä julkaistuilla porteilla.Näissä tapauksissa Docker Desktop ei välttämättä luo näitä säilöjä, jos käytät oletusarvoista verkon nimiavaruutta. Tilapäinen kiertotie on käynnistää säilöt valitsimella `--network host` tai lisätä ongelmalliset portit `ignoredPorts`-kohtaan `.wslconfig`-tiedostossa.
Myös konttien kuljettamiseen on liittynyt vaaratilanteita Verkon hallinnoija tai muut aktiiviset monimutkaiset verkkopalvelut Ne voivat estää WSL:n verkkomäärityksiä toimimasta oikein, erityisesti paluuyhteyksissä isäntäkoneeseen. Microsoft suosittelee tällaisten daemonien poistamista käytöstä, kun ne eivät ole ehdottoman välttämättömiä.
Jos yritysympäristöösi lisätään lisäksi HTTP/S-välityspalvelin ja otat automaattisen välityspalvelimen käyttöön WSL:ssä, muuttujat, kuten HTTP_PROXY, HTTPS_PROXY, NO_PROXY ja WSL_PAC_URLHuomaa, että käyttäjän määrittämät muuttujat ovat etusijalla automaattisesti luotuihin muuttujiin nähden. Linux ei tue PAC:ia natiivisti, joten saatat joutua mukauttamaan skriptejä tai poistamaan ominaisuuden käytöstä.
Yleisiä virheitä Linux-jakelussa ja niiden ratkaiseminen
Distron sisällä voi ilmetä myös tyypillisiä Linux-ongelmia, joita WSL:n erityispiirteet pahentavat. Klassinen esimerkki on, että Windows-komentoja, kuten powershell.exe tai notepad.exe, ei löydy kutsumalla niitä bashista viestillä "komentoa ei löytynyt".
Useimmissa tapauksissa tämä johtuu käynnistysskriptistä (kuten /etc/profile Debianissa) määrittele PATH uudelleen ottamatta huomioon WSL:n välittämää arvoaTämä voi aiheuttaa polkujen, kuten /mnt/c/Windows ja vastaavien sijaintien, menetyksen. Oikea lähestymistapa on olla korvaamatta polkua, vaan laajentaa sitä tai yksinkertaisesti poistaa ongelmalliset rivit. On myös suositeltavaa tarkistaa, että `appendWindowsPath=false` tiedostossa `/etc/wsl.conf`.
Toinen toistuva ongelma on apt-get-päivitysvirheet, jotka liittyvät udeviin ja järjestelmäpalveluihin Näitä ei tueta WSL:ssä, koska se ei ole täydellinen järjestelmä perinteisellä init-toiminnolla. Tavallinen ratkaisu on asentaa policy-rc.d-skripti hakemistoon /usr/sbin, joka palauttaa exit 101:n estääkseen palveluiden käynnistymisen, lisätä suoritusoikeudet ja käyttää dpkg-divert-komentoa /sbin/initctl-tiedoston uudelleenohjaamiseen hakemistoon /bin/true.
SSH:lla on myös omat erityispiirteensä. Jos etäpalvelimelle yhteyden muodostamisen yhteydessä ilmenee varoituksia, kuten ”SUOJAAMATON YKSITYISAVAINTIEDOSTO!” ja käyttöoikeudet 0777, on todennäköisintä, että Tallennat avaimia Windowsista liitettyyn hakemistoon liian löyhillä käyttöoikeuksilla. Jotta WSL voi hallita POSIX-käyttöoikeuksia Windows-tiedostoissa oikein, on suositeltavaa lisätä /etc/wsl.conf-tiedostoon osio, jossa on asetuksia, kuten metadata,uid=1000,gid=1000,umask=0022.
Jos taas olet määrittänyt OpenSSH-palvelimen WSL-jakeluusi ja näet Windowsista muodostaessasi yhteyden "Yhteys katkaistu 127.0.0.1 portin 22 toimesta", tarkista lokit käynnistämällä sshd debug-tilassa ja varmista, että Tiedostossa /etc/ssh on isäntäavaimia, joita ei ole poistettu.Jos ne puuttuvat, ne voidaan luoda uudelleen tai yksinkertaisemmin sanottuna openssh-server-paketti voidaan tyhjentää ja asentaa uudelleen.
WSL:n käyttö vanhemmissa Windows-versioissa ja vanhassa versiossa
Joukkueissa, joissa on Hyvin vanhat Windows 10 -versiot (Creators Update, Anniversary Update) WSL-tuki on huomattavasti rajoitetumpi. Siinä käytettiin bash.exe- ja lxrun-tiedostoja sekä vähemmän kypsää toteutusta. Komennot ja polut ovat erilaisia. Linux-komennot välitettiin komennolla bash -c, jakelut tallennettiin tiedostoon %LocalAppData%\lxss, ja yhteentoimivuus Windowsin kanssa oli alkeellisempaa.
Jos olet lähtöisin tuosta vaiheesta ja sinulla on edelleen WSL:n "vanha versio", Microsoft suosittelee Siirrä tietosi Storesta moderniin jakeluun ja poista vanhan asennus. Voit tehdä tämän komennolla wsl –unregister Legacy tai poistamalla manuaalisesti %LocalAppData%\lxss-kansion (ole varovainen, se poistaa kaiken vanhan Linux-sisällön).
Näissä järjestelmissä ominaisuuksia, kuten WSL 2, virallinen tuki Linux-graafisille sovelluksille, integrointi Docker Desktopin kanssa ja wsl-asennuksen yksinkertaistaminen Niitä ei ole saatavilla. Jos laitteistosi sallii sen, on parasta päivittää uudempaan versioon. Tai siirry suoraan Windows 11:een hyödyntääksesi alijärjestelmän nykyistä versiota.
Joka tapauksessa, jos haluat ennen kaikkea minimoida Windowsiin kohdistuvan vaikutuksen tai tietokoneesi vaatimusten suhteen jää jälkeen, on olemassa yhä vakaampi vaihtoehto: Käytä Linuxia pääjärjestelmänä ja siirrä Windows virtuaalikoneeseen (Esimerkiksi VirtualBoxin, VMwaren tai GNOME-laatikoiden kanssa). Tällä tavoin vältät Windows 11:n kasvavien vaatimusten aiheuttaman riippuvuuden. Ja pidät laitteistosi toimintakunnossa pidempään.


