WSL export/import és állapotok, alapértelmezett felhasználó beállításával

A korábbi WSL-es Docker cikk folytatásaként most a frissen telepített gépek elmentésével folytatom, így bármikor vissza lehet állni egy korábbi verzióra. Beállítom az alapértelmezett felhasználót is, amit az exportáláskor elfelejt a gép, illetve végig mutatom azt is, milyen állapotai lehetnek a WSl gépeknek. Ha mentést nem is szeretnél a gépeidről, de ugyanabból a disztribúcióból többet is szeretnél telepíteni különböző célokra, akkor is érdemes tovább olvasni. A videón pedig gyakorlatban is követheted a beállításokat.

Export / import

Mivel tanulságos látni, hogy a gépek állapotaival mi történik a parancsok futtatása közben, a superuser.com-ról vett alábbi batch utasítást beillesztve egy parancssorba, követhető minden.

for /l %g in () do @( cls & wsl --list --verbose & timeout /t 2 )

Emellett egy másik parancssorban lehet dolgozni a gépekkel. Windowsban a Windows billentyű és a nyíl billentyűk lenyomásával lehet szépen egymás mellé tenni az ablakokat, így nem kell találomra beállítani a méreteket és kényelmesen lehet dolgozni. Elsőként egy mappát érdemes létrehozni az exportált fájloknak. Bárhova lehet menteni, de jobban szeretjük, ha rend van, ugye? Én a felhasználóm könyvtárából futtatam a parancsokat, de bármi mást is lehet választani.

mkdir wsl\backups

Már lehet is exportálni, viszont fontos tudni, hogy ezzel az exportálandó gép le fog állni, mivel az export ideje alattt nem változhat a fájlrendszere. Ne exportálj tehát, amikor ez probléma. A sátusza ekkor "Converting"-ként jelenik meg jelezve, hogy a fájlrendszerét tartalmazó disket (vagy mappát WSL 1-ben) konvertálja egy "tar" fájlra.

wsl --export Ubuntu-20.04 wsl\backups\docker.tar

Az "--export" után két dolgot kell megadni. Az exportálandó gép nevét, majd a fájl útvonalát, amibe menteni kell az exportot. Mivel én a Dockert telepítettem korábban az exportálandó gépbe, így Docker néven fogom mentettem. A név persze tetszőleges lehet. Ha pedig több változat is van, akkor vagy dátummal, vagy valami olyan egyértelmű jelöléssek célszerű menteni, amiből be lehet azonosítani a gép tartalmát. Ha van hibaüzenet, ha nincs, jó gyakorlat megnézni, hogy sikeres volt-e a mentés egy egyszerű dir paranccsal:

dir wsl\backups

Bár az Microsoft Store-ból telepített gép automatikusan kapott egy mappát, amit meg is mutattam, az importált gépeknél erről nekünk kell gondoskodni. Ezért egy külön "machines" mappát is létrehozok, amibe a gépeim fájlrendszerét menthetem, azon belül pedig a "docker" mappába mentem a gépet. Bár én szándékosan mindenhol a "docker" nevet használom, nem kell, hogy az exportált fájl neve és a mappa neve egyezzen. Sőt, mivel akárhányszor importálható, nem is egyezhetne mindig.

mkdir wsl\machines\docker

Így minden készenáll az importra

wsl --import Docker wsl\machines\docker wsl\backups\docker.tar --version 2

Az "--import" után szintén gépnevet kell megadni elsőként, de ez már az immportálás utáni név. Másodikként a mappát kell megadni, ahova a fájlrendszerét tartalmazó lemezzfájlt menti majd, végül pedig azt, hogy milyen fájlból importálja a gépet. A "--verson" egy opcionális paraméter. A WSL 2-es gépekhez a 2-est kell megadni, így egy virtuális gépet kapok, amiben olyan szolgáltatásokat is futtathatok, amiket az 1-esben nem tudnék. Ha nem indítottad el a cikk elején írt folyamatosan figyelő utasítást, most itt az id megnézni, hogy létrejött-e már a Docker nevű gép.

wsl --list --verbose

Mivel ezt már csak akkor tudtad futtatni, amikor a gép importja befejeződött, itt már nem látszik, de importálás közben a gép státusza "Installing" volt. Amit befejezte, "stopped" lesz, tehát magától nem fog elindulni. Nem is kell külön elindítani, mivel minden parancs futtatásakor automatikusan is elindul majd. Nem fog persze folyamatosan futni, ha nem indítasz el benne olyan szolgáltatásokat, amik meggátolnák a leállítást.

Alapértelmezett felhasználó konfigurációs fájllal

Az Ubuntu-20.04 nevű gép volt tehát, amit a Microsoft Áruházból telepítettem és akkor bekérte tőlem a felhasználónevet és a jelszót, amit beállított alpaértelmezett felhasználónak. Ha tehát futtatom a "wsl" parancsot, és ez az alapértelmezett disztribúcióm is, mint ahogy első ismerkedéskor valószínűleg az, akkor a telepítéskor konfigurált felhasználóval fog belépni. A "--distribution", vagy röviden csak "-d" paramétert viszont érdemes használni a biztonság kedvéért, hogy biztosan a megfelelő géppel próbálkozz. Az "--exec" paraméternek a futtatandó parancsot kell átadni, és valójában az "--exec" kiírása nem is kötelező, így viszont jobban látszik, mi célt szolgál az utána levő rész. A "whoami" parancs kiírja a felhasználót, aminek nevében az futtatva lett. Ezt Windows 10-bn is ki lehet próbálni közvetlenül, az itt megadott whomi viszont a WSL Linuxban fog futni.

wsl --distribution Ubuntu-20.04 --exec whoami

Mivel én korábban felhazsnálónévnek egyszerűen csak azt adtam meg, hogy "user", így nekem ezt írja ki. De ha nem azt kapod, hogy "root", akkor valószínűleg minden rendben. Ha mégis root-ként futtatnál egy parancsot, amire hamarosan szükség is lesz, akkor azt a "--user" paraméterrel lehet megoldani. Ehhez tehát nem kell semmilyen autentikáció. Valójában a telepítéskor megadott felhasználói jelszó olyan esetekben kellenek, mint a "sudo" parancs futtatása, vagy például egy SSH hozzáférés, ami valószínűleg nem lesz egy WSL gépnél, hacsak nem direkt az SSH tesztelése céljából. Ide tehát olyan nagyon titkos dolgokat ne tegyél, de tesztelésre tényleg tökéletes.

wsl --distribution Ubuntu-20.04 --user root --exec whoami

Erre már a "root"-nak kellett megjelennie. Na de most ugyanezt nézzük meg a Docker géppel.

wsl --distribution Docker --exec whoami

Sajnos itt is a "root" jelenik meg, hacsak az exportált gépben nemv olt már fixen beállítva a felhasználónév előre, ahogy ezt hamarosan meg is mutatom a Docker gépen még akkor is, ha egyébként már így is futtathatnék a "--user" paraméter megadásával nem root felhasználóval is bármit. A cél az, hogy ne kelljen megadni minden alkalommal. Ehhez a WSL gépen belül a "/etc" mappában kell létrehozni egy "wsl.conf" nevű fájlt. Ehhez root jogosultság kell, a "nano" programmal pedig módosítom a fájlt. Természetesen bármilyen kedvenc fájlszerkesztővel lehet ezt nano helyett futtatni.

wsl --distribution Docker --user root --exec nano /etc/wsl.conf

Ilyenkor már az az érzése az embernek, hogy Linuxon van, de de ne feledjük, hogy ez továbbra is a Windows parancssor, tehát a fájl beillesztése a jobb egérgombbal történik. Normál esetben lehetne CTRL+V -vel is, de azt viszont a Linux VM miatt nem lehet most használni.

[user]
default=user

A fenti két sort kell csak beilleszteni a fájlba, majd pedig nano esetén a CTRL+O -val (O mint Olga, nem nulla :) ) elmenteni a fájlt és CTRL+X -szel kilépni. Ezzel már a gépből is megtörténik a kilépés, de még marad a RUNNING státusz kb. 15 másodpercig. A beállítások érvénybelépéséhez a gépet újra kell indítani, tehát elég kivárni a 15 másodpercet, vagy az alábbi paranccsal leállítani a gépet, ha valamiért mégsem állna le magától:

wsl --shutdown Docker

A gép siekres újraindítása után, ha a Docker gép státusza már "STOPPED", lehet futtani ismét a felhasználónév tesztet:

wsl --distribution Docker --exec whoami

Most már itt sem a root kell legyen, hanem például esetemben a "user".

Alapértelmezett felhasználó beállítása alternatív módon

A wsl.conf beállítása mindig működő megoldás, viszont van egy másik is arra az esetre, ha nem tetszene valamiért. Ez viszont csak az áruházból telepített gépre alkalmazható. A telepítéskor disztribúciótól függő, de nálam az Ubuntu-20.04 géppel lett egy "ubuntu2004.exe" program is. Itt pedig módosítható a felhasználónév az alábbi paranccsal:

ubuntu2004.exe config --default-user root

Eredetileg ennek "user" volt az alapértelmezett felhasználója és most mégis "root"-ként fut majd a következő "whoami"

wsl --distribution Ubuntu-20.04 --exec whoami

Ezzel a megoldással nem jön létre wsl.conf fájl sem, amiről meg is lehet bizonyosodni a következő utasítással:

wsl --distribution Ubuntu-20.04 --user root --exec cat /etc/wsl.conf

Ha létezne a fájl, kiírná annak tartalmát, így viszont hibaüzenetet kapunk.

Takarítás

Nemc sak azt érdemes tudni, hogyan lehet létrehozni egy gépet, de azt sem árt tudni, hoygan töröljük. És akkor már ki is takarítunk magunk után. Mivel jól elrontottam az Ubuntu gép felhasználóját, azt rögtön vissza is állítom.

ubuntu2004.exe config --default-user user

Az importált gépet, azaz nálam a Docker nevű gépet az alábbi paranccsal lehet törölni a gép nevére hivatkozva:

wsl --unregister Docker

Majd pedig akkor már törlhető a fájlrendszernek létrehozott mappa is.

rmdir wsl\machines\docker

De ha valamiért agresszívabban, mindent le szeretnél törölni, akkor még a /s paraméter is szükséges az rmdir számára, ami az almappákat és fájlokat is egyből törölhetővé teszi.

rmdir /s wsl

Befejezés

Most már tényleg bátran lehet gépeket létrehozni és módosítani, hiszen bármikor bármelyik állapotra vissza lehet térni. Feltéve persze, hogy arról az állapotról készült mentés. Az előző cikk folytatásaként ezt mindenképpen fontosnak tartottam még megosztani, de ha van még olyan,a mit szeretnél tudni a WSL-ről, ne habozz felvenni velem a kapcsolatot. Most már a YouTube-on is elküldheted az észrevételeid kommentben, vagy itt a cikk alatt, vagy a kapcsolat űrlapon keresztül is várom az ilyen jellegű megkereséseket.

Én munka mellett igyekszem minél több hasznos videóval jelentkezni és elkerülni a korábbi hosszú szüneteket a saját tervekkel is. Te is befolyásolhatod viszont az I.T. sziget tartalmait ahogy a jelenlegi tervek is a kérések alapján alakultak ki. A te szavad is számít. Írd meg ötleteid, kéréseid és betervezem a válaszokat újabb videókban és cikkekben, vagy igyekszem tanácsot adni, hol találsz segítséget.

Ha hasznos volt a cikk, dobj egy "tetszik"-et, csak mert attól jó kedvem lesz és jókedvűen sokkal több új tartalom készül :)

Kategóriák: 
Megosztás/Mentés