WSL izmantošana neacīmredzamiem uzdevumiem

  • WSL 2 piedāvā gandrīz pilnīgu Linux vidi operētājsistēmā Windows ar labu veiktspēju, augstu saderību un relatīvi ierobežotu ietekmi uz resursdatora sistēmu.
  • Galvenās WSL problēmas parasti rada tīkls (DNS, VPN, korporatīvais ugunsmūris) un virtualizācija, taču gandrīz visām no tām ir zināmi risinājumi.
  • WSL ir ideāli piemērots Linux (Docker, serveri, datubāzes) paredzētu projektu izstrādei un testēšanai, vienlaikus saglabājot klasisko Windows darbplūsmu.
  • Kad WSL vairs nav nepieciešams, ir iespējams atinstalēt distros un papildu funkcijas, lai Windows praktiski paliktu tādā pašā stāvoklī, kā tas bija iepriekš.

WSL izmantošana neacīmredzamiem uzdevumiem

WSL, Docker, Linux un virtuālās mašīnas… Tiem, kas strādā pie Windows izstrādes projektiem, tā šķiet sarežģīta pasaule. Daudzi izstrādātāji dzird brīnišķīgas lietas par… Windows apakšsistēma operētājsistēmai LinuxBet, kad viņi apsēžas pie datora, viņiem nav skaidrs, kādu īsto problēmu tas atrisinās, kādus riskus tas rada vai kā visu pēc tam sakopt.

Šajā rakstā mēs tuvāk aplūkosim, kas ir WSL, kam tas paredzēts, ne tikai acīmredzamajam, bet arī galvenokārt, Kā to izmantot tā, lai pēc iespējas mazāk "apgrūtinātu" jūsu Windows instalācijuMēs arī redzēsim, kad jūs varētu interesēt mainīt situāciju un izmantot Linux kā galveno sistēmu, atstājot Windows virtuālajā mašīnā.

Kas īsti ir WSL un kāpēc tik daudzi cilvēki par to runā?

WSL apzīmē Windows apakšsistēma Linux, Windows apakšsistēma Linux distribūciju darbībai integrēts operētājsistēmās Windows 10 un 11. Microsoft ideja ir vienkārša: sniegt jums "īstu" Linux vidi, nepiespiežot jūs izmantot divkāršu sāknēšanu vai iestatīt klasisku virtuālo mašīnu ar VirtualBox vai VMware.

Praksē, izmantojot WSL, līdzās Windows var darboties tāds distro kā Ubuntu, Debian vai Kali, koplietot failus starp abām sistēmām un palaist tipiskus Linux rīkus (bash, ssh, apt, Python, Node, Docker…) neizejot no ierastā darbvirsmas. Tas viss ar diezgan augstu integrācijas pakāpi ar resursdatora sistēmu.

Kopš WSL palaišanas ir radušies ļoti polarizēti viedokļi. Daži izstrādātāji to uzskata par absolūtu panākumu un pārliecinošu iemeslu turpināt lietot Windows. Citi, īpaši no tīrākās Linux kopienas, to uzskata par manevru, ko veicis... “adopt-extend-extinch”, lai saglabātu Microsoft darbvirsmas hegemonijuPapildus strīdiem, realitāte ir tāda, ka WSL ir mainījis daudzu izstrādātāju darba veidu.

Pašreiz ieteicamā versija ir WSL 2Tas vairs nav tikai saderības slānis; tas izmanto vieglu virtuālo mašīnu ar īstu Linux kodolu. Microsoft uzstāj, ka "tā nav tradicionāla virtuālā mašīna", jo tā to izveido, konfigurē un optimizē jūsu vietā, bet zem tās atrodas virtualizācija ar tādām tehnoloģijām kā Hyper-V.

WSL

WSL 1 pret WSL 2 un prasības, kas jāpatur prātā

Mūsdienās ir svarīgi saprast atšķirību starp WSL 1 un WSL 2. Īpaši attiecībā uz jautājumiem par veiktspējas, saderības un aparatūras prasībasWSL 1 veica Linux sistēmas izsaukumu tulkošanu uz Windows; tas labi darbojās daudzās lietās, bet nebija saderīgs ar sarežģītākiem rīkiem.

Ar WSL 2 Microsoft maina savu pieeju: Tas darbina pilnu Linux kodolu ļoti optimizētā virtuālajā mašīnāTas ievērojami uzlabo saderību (Docker, tipiskas Linux failu sistēmas utt.), un lielākā daļa programmatūras, kas darbojas uz "īstas" Linux, darbojas arī WSL 2 ietvaros.

Mīnuss ir tas, ka WSL 2 ir vairāk atkarību. Nepieciešams centrālā procesora virtualizācijas atbalsts un SLAT (otrā līmeņa adrešu tulkošana)Šī funkcija ir pieejama relatīvi modernos procesoros (Intel Nehalem un vēlākos, AMD Opteron un pēctečos). Vecāki centrālie procesori, piemēram, daži Core 2 Duo procesori, vienkārši nevarēs izmantot WSL 2, pat ja iespējosiet visas funkcijas.

Turklāt, lai izmantotu WSL 2, ir nepieciešama pietiekami jauna Windows versija: Windows 10 1903 (būvējums 18362) vai jaunāka versija vai Windows 11Vecākās sistēmās ir jāizmanto WSL 1 ar tā ierobežojumiem. Tas nozīmē, ka savā ziņā Jūs joprojām velkat līdzi Windows prasībām un dzīves cikliemJa jūsu ierīce vairs netiek atbalstīta, tiks atbalstīts arī WSL.

Ātra WSL iestatīšana un pirmie lēmumi

Pašreizējās Windows versijās Microsoft ir ievērojami vienkāršojis procesu. PowerShell konsolē ar administratora privilēģijām vienkārši palaidiet Komanda wsl –install instalēs WSL un noklusējuma Ubuntu sistēmu.Pati sistēma lejupielādē nepieciešamos komponentus un distro no Microsoft veikala.

Pirmās distribūcijas palaišanas laikā jums tiks lūgts izveidot lietotājvārds un parole Linux sistēmaiŠis lietotājs ir jūsu galvenais konts distro, pilnīgi neatkarīgs no jūsu Windows konta, kas palīdz uzturēt noteiktu izolācijas līmeni.

Ja vēlaties iet nedaudz tālāk, varat uzskaitīt visus pieejamos izplatījumus ar wsl – saraksts – tiešsaistē un izvēlieties, piemēram, Debian, Kali, openSUSE vai citus Ubuntu variantus. Instalēšana tiek veikta ar wsl –install -d IZPLATĪTĀJA_NOSAUKUMS un katrs distro dzīvo savā izolētā “kastē”.

Pēc noklusējuma jaunās sistēmās pati wsl –install komanda Konfigurējiet WSL 2 kā bāzes versijuBet to var nodrošināt ar `wsl --set-default-version 2`. Ja jums jau ir izveidoti distribūcijas, izmantojot WSL 1, varat tās migrēt atsevišķi, izmantojot wsl –set-version DISTRIBUTION_NAME 2, uz īsa konversijas laika rēķina.

WSL

Kā WSL ietekmē jūsu Windows sistēmu un kur tā glabā lietas

Viena no jūsu galvenajām bažām, iespējams, ir tā, cik lielā mērā WSL "apgrūtina" jūsu Windows sistēmu un kur nonāk viss, ko instalējat Linux. Būtiskākais ir tas, ka Katrs WSL izplatījums tiek glabāts lietotāja datu mapē, kas atrodas %LocalAppData%\Packages.Un, ja vēlaties pārvaldīt failus ārpus klasiskā Explorer, varat izmantot alternatīvi failu pārvaldniekiTas neizlaiž failus visā diskā, kā to darītu klasiska Linux instalācija.

Šajā mapē ir LocalState direktorijs ar virtuālo disku (VHDX), kurā atrodas visa Linux failu sistēma: /, /home, /var utt.Citiem vārdiem sakot, tīmekļa serveris, Docker, datubāzes, projekta kods — viss atrodas šajā konteinerā. Kamēr vien jūs nepieskaraties nekam ārpus tā, ietekme uz tipiskajiem Windows ceļiem ir minimāla.

Tomēr WSL prasa aktivizēt noteiktas sistēmas funkcijas: “Windows apakšsistēma operētājsistēmai Linux” un WSL 2 — “virtuālo mašīnu platforma”To var izdarīt, izmantojot PowerShell (Enable-WindowsOptionalFeature) vai grafisko lietotāja saskarni "Ieslēgt vai izslēgt Windows funkcijas". Tā arī instalē Linux kodols WSL mapē %SystemRoot%\System32\lxss\tools.

Šie komponenti kļūst par Windows daļu pēc aktivizēšanas, tāpēc, ja kādā brīdī vēlaties Atstājiet sistēmu tā, it kā jūs nekad nebūtu pieskāries WSLJums būs jāatinstalē distributīvie materiāli, jāatspējo papildu funkcijas un, ja nepieciešams, jānoņem kodola pakotne. Tas nav vienkāršs process "vienkārši izdzēsiet mapi un viss būs gatavs", taču tas nav arī īpaši sarežģīts.

Tāpat paturiet prātā, ka WSL izveido virtuālu tīkla saskarni, pielāgo ugunsmūra noteikumus un, WSL 2 gadījumā, paļaujas uz tādiem pakalpojumiem kā ICS (interneta savienojuma koplietošana) un HNS iekšējā NAT, DNS un DHCP pārvaldībaiTas viss ir caurspīdīgs ikdienas darbībās, taču tas izskaidro, kāpēc daži korporatīvie VPN vai ugunsmūri dažreiz konfliktē ar WSL.

WSL izmantošana tīmekļa izstrādei un mazāk acīmredzamiem uzdevumiem

Papildus tipiskajam "Es vēlos bash operētājsistēmā Windows", WSL spīd, kad tas ir nepieciešams Atjaunojiet Linux ražošanas vides, neizejot no Windows darbvirsmasPiemēram, jūsu pieminētais gadījums: FOSS projekts, kas izmanto Docker, Flask, ArangoDB un citus aizmugures pakalpojumus.

Tā vietā, lai cīnītos ar dīvainām Windows versijām vai Docker Desktop operētājsistēmā Windows (kas vēsturiski ir bijis diezgan sāpīgi), varat instalēt visu steku tieši savā WSL distro. Docker darbojas dabiski uz WSL 2 kodolaLinux pakalpojumi darbojas kā reālā serverī, un jūs turpināt izmantot VS Code vai citus Windows grafiskos rīkus.

Ir arī mazāk acīmredzamas priekšrocības. Jūs varat skriet administrēšanas skripti, Linux specifiski komandrindas rīki, labas Node un NVM versijas, pakotņu pārvaldnieki, piemēram, aptun kopumā visa utilītu ekosistēma, pie kuras serveru izstrādātāji ir pieraduši.

Pateicoties failu sistēmas integrācijai, WSL pievieno jūsu Windows diskus mapē /mnt (piemēram, /mnt/c C diskam). Tas ļauj jums Rediģējiet kodu ar savu Windows redaktoru un palaidiet to Linux vidē, nedublējot projektus..

Vēl viena interesanta lieta ir sadarbspēja otrā pusē: no Linux apvalka var izsaukt Windows izpildfaili, piemēram, notepad.exe, powershell.exe vai jebkurš sistēmas .exe failsJa jūsu PATH mainīgais ietver Win32 ceļus, piemēram, /mnt/c/Windows/System32, vienkārši ierakstot izpildāmā faila nosaukumu, tas tiks palaists, ja vien jūsu čaula nejauši nav pārrakstījusi PATH.

WSL

Windows terminālis: ideāls WSL partneris

Lai jūsu WSL pieredze būtu ērtāka, Microsoft iesaka izmantot Windows terminālis (spāņu valodā Windows terminālis)Tā ir moderna lietojumprogramma, kas ļauj atvērt cilnes no dažādiem čaulām: PowerShell, CMD un, kas ir ļoti svarīgi, no katra jūsu WSL izplatījuma.

Izmantojot Windows termināli, varat izveidot Ubuntu, Debian vai Kali sesijas no vienas programmas, izmantojot cilnes un paneļus, konfigurēt īsinājumtaustiņus un pielāgot fontus, krāsas un profilus bez nepieciešamības uzturēt tūkstoš atsevišķu cmd.exe logu. Turklāt tas novērš atkarību no novecojušiem rīkiem, piemēram, PuTTY, SSH savienojumiem, jo ​​varat izveidot savienojumu ar attāliem serveriem tieši no WSL distro.

Tipiska darbplūsma daudziem izstrādātājiem operētājsistēmā Windows mūsdienās ir šāda: Kods VS Code, galvenais terminālis Windows terminālī un aizmugursistēma un rīki WSL ietvarosŠī kombinācija piedāvā pieredzi, kas ir ļoti līdzīga darbam ar macOS vai tieši darbvirsmas Linux distro.

Tīkls, DNS, VPN un citas galvassāpes WSL

Visvairāk problēmu WSL 2 parasti rada tīklā: lietojot vieglu virtuālo mašīnu (VM), tā ir atkarīga no virtuālais adapteris, ugunsmūra noteikumi un neliels iekšējais NAT kas dažkārt ir pretrunā ar korporatīvajām konfigurācijām, VPN, pretvīrusu programmām ar ugunsmūriem vai stingrām drošības politikām.

Bieži sastopama problēma ir tā, ka WSL nav piekļuves internetam uzņēmuma datorosDaudzos Active Directory domēnos organizācijas definētie ugunsmūra noteikumi bloķē lokālos noteikumus. Tā kā HNS izveidotais izņēmums, lai atļautu DNS datplūsmu no WSL vNIC, ir lokāls, tas tiek ignorēts. Ja atbilstošajā profilā (izmantojot `Get-NetFirewallProfile`) `AllowLocalFirewallRules` vai `AllowInboundRules` ir iestatīti uz `False`, WSL neatrisinās nosaukumus.

Risinājums ir administratora noteiktā atbilstošā uzņēmuma noteikumā. Vai arī, alternatīvi, Iespējojiet WSL DNS tunelēšanu, izmantojot eksperimentālo dnsTunneling opciju .wslconfig failā. Šī funkcija ļauj iekšējiem Linux DNS vaicājumiem nonākt tieši Windows risinātājā, izmantojot virtualizācijas slāni, bez nepieciešamības pēc klasiskajām tīkla paketēm, kas varētu konfliktēt ar ugunsmūri.

Daži VPN arī rada problēmas. Ir zināmi gadījumi ar Cisco AnyConnect, OpenVPN klienti, tādi risinājumi kā ZScaler, McAfee Safe Connect vai Bitdefender kas manipulē ar maršrutiem, NRPT vai starpniekserveriem tā, ka tas pārtrauc NAT vai traucē WSL datplūsmu. Dažreiz risinājums ir iespējot networkingMode=mirrored, citreiz atspējot dnsTunneling vai pat pielāgot autoProxy konfigurāciju, lai HTTP_PROXY/HTTPS_PROXY spoguļošana Linux vidē atbilstu jūsu situācijai.

Klasiskajā NAT režīmā pastāv ierobežojumi, piemēram, Failā /etc/resolv.conf var definēt tikai trīs DNS serverus.Arī dnsTunneling palīdz atrisināt šo problēmu: Linux izmanto visus Windows konfigurētos DNS serverus. Turklāt DNS sufiksi tiek apstrādāti atšķirīgi atkarībā no tā, vai izmantojat tīru NAT, NAT ar DNS tunelēšanu vai spoguļrežīmu. Spoguļrežīmā visi Windows DNS sufiksi tiek atspoguļoti resolv.conf meklēšanā un tiek automātiski atjaunināti, kad tie mainās resursdatorā.

Docker un konteineru saderība WSL ietvaros

Viens no galvenajiem WSL 2 ieviešanas iemesliem ir bijis ievērojama Docker pieredzes uzlabošana. Microsoft un Docker oficiālā ideja ir šāda Docker Desktop izmanto WSL 2 kā aizmugures sistēmu, tiešā Hyper-V vai tā vecā dzinēja vietā.

Tomēr ne viss ir perfekti. Problēmas ir konstatētas, piemēram, kad Jūs izmantojat spoguļotu tīkla režīmu (networkingMode=mirrored) un darbināt konteinerus ar publicētiem portiem.Šādos gadījumos Docker Desktop var neizdoties izveidot šos konteinerus, ja izmantojat noklusējuma tīkla nosaukumtelpu. Pagaidu risinājums ir palaist konteinerus ar `--network host` vai pievienot problemātiskās ostas `ignoredPorts` failā `.wslconfig`.

Ir arī incidenti ar konteineriem, kas pārvadā Tīkla pārvaldnieks vai citi aktīvi sarežģīti tīkla pakalpojumi Tie var traucēt WSL tīkla konfigurācijas pareizu darbību, īpaši atgriešanas savienojumiem ar resursdatoru. Microsoft iesaka atspējot šāda veida dēmonus, ja tie nav absolūti nepieciešami.

Ja jūsu korporatīvajā vidē papildus tiek pievienots HTTP/S starpniekserveris un WSL iespējojat automātisko starpniekserveri, tādi mainīgie kā HTTP_PROXY, HTTPS_PROXY, NO_PROXY un WSL_PAC_URLŅemiet vērā, ka lietotāja definētajiem mainīgajiem ir priekšroka pār automātiski ģenerētajiem. Linux sākotnēji neatbalsta PAC, tāpēc, iespējams, būs jāpielāgo skripti vai jāatspējo šī funkcija.

Bieži sastopamas kļūdas Linux distro un to novēršanas veidi

Kad esat nonācis distro iekšienē, var parādīties arī tipiskas Linux problēmas, kuras dažas saasina WSL īpatnības. Klasisks piemērs ir šāds: Windows komandas, piemēram, powershell.exe vai notepad.exe, netiek atrastas. izsaucot tos no bash ar ziņojumu "komanda nav atrasta".

Vairumā gadījumu tas ir saistīts ar startēšanas skriptu (piemēram, /etc/profile Debian sistēmā). no jauna definēt PATH, neņemot vērā WSL nodoto vērtībuTas var izraisīt tādu ceļu kā /mnt/c/Windows un līdzīgu atrašanās vietu zudumu. Pareizā pieeja ir nepārrakstīt PATH, bet gan to paplašināt vai vienkārši noņemt problemātiskās rindas. Ieteicams arī pārbaudīt, vai `appendWindowsPath=false` ir failā `/etc/wsl.conf`.

Vēl viena atkārtota problēma ir apt-get jaunināšanas kļūdas, kas saistītas ar udev un sistēmas pakalpojumiem Šie netiek atbalstīti WSL ietvaros, jo tā nav pilnīga sistēma ar tradicionālo init. Parastais risinājums ir instalēt policy-rc.d skriptu /usr/sbin, kas atgriež izejas vērtību 101, lai novērstu pakalpojumu startēšanu, pievienot izpildes atļaujas un izmantot dpkg-divert, lai novirzītu /sbin/initctl uz /bin/true.

Arī SSH ir savas īpatnības. Ja, mēģinot izveidot savienojumu ar attālo serveri, rodas brīdinājumi, piemēram, “UNPROTECTED PRIVATE ATSLĒGAS FAILS!” un atļaujas 0777, visticamāk, ka Jūs saglabājat atslēgas direktorijā, kas piestiprināta no Windows. ar pārāk vaļīgām atļaujām. Lai WSL varētu pareizi pārvaldīt POSIX atļaujas Windows failos, ieteicams pievienot sadaļu failā /etc/wsl.conf ar tādām opcijām kā metadata,uid=1000,gid=1000,umask=0022.

Un otrādi, ja savā WSL distribūcijā iestatāt OpenSSH serveri un, izveidojot savienojumu no Windows, redzat ziņojumu “Savienojums pārtraukts ar 127.0.0.1 portu 22”, pārbaudiet žurnālus, startējot sshd atkļūdošanas režīmā, un pārliecinieties, vai Failā /etc/ssh ir resursdatora atslēgas, kas nav izdzēstas.Ja to trūkst, tos var ģenerēt atkārtoti vai, vienkāršāk sakot, var iztīrīt un atkārtoti instalēt openssh-server pakotni.

WSL izmantošana vecākās Windows versijās un mantotā variantā

Komandās ar Ļoti vecas Windows 10 versijas (Creators Update, Anniversary Update) WSL atbalsts ir ievērojami ierobežotāks. Tajā tika izmantota bash.exe, lxrun un mazāk nobriedusi ieviešana. Komandas un ceļi atšķiras. Linux komandas tika nodotas ar bash -c, distributīvie faili tika glabāti %LocalAppData%\lxss, un sadarbspēja ar Windows bija vienkāršāka.

Ja jūs nākat no šī posma un joprojām izmantojat WSL "mantoto versiju", Microsoft iesaka Migrējiet savus datus no veikala uz modernu distro versiju un atinstalējiet veco. To var izdarīt, izmantojot komandu wsl –unregister Legacy vai manuāli izdzēšot mapi %LocalAppData%\lxss (esiet uzmanīgi, tas izdzēš visu veco Linux saturu).

Šajās sistēmās tādas funkcijas kā WSL 2, oficiāls atbalsts Linux grafiskajām lietojumprogrammām, integrācija ar Docker Desktop un wsl instalēšanas vienkāršošana Tie nav pieejami. Ja jūsu aparatūra to atļauj, vislabāk ir jaunināt uz jaunāko versiju. Vai arī dodieties tieši uz Windows 11, lai izmantotu apakšsistēmas pašreizējo versiju.

Jebkurā gadījumā, ja galvenokārt vēlaties samazināt ietekmi uz Windows vai jūsu dators atpaliek prasību ziņā, pastāv arvien stabilāka alternatīva: Izmantojiet Linux kā galveno sistēmu un pārvietojiet Windows uz virtuālo mašīnu (Piemēram, ar VirtualBox, VMware vai GNOME Boxes). Tādā veidā jūs izvairāties no atkarības no pieaugošajām Windows 11 prasībām. Un jūsu aparatūra darbojas ilgāk.

Plānojiet uzdevumus Linux sistēmā, izmantojot Crontab
saistīto rakstu:
Plānojiet uzdevumus Linux sistēmā, izmantojot Crontab