Fun with the Windows Subsystem for Linux

A Build 2016, Microsoft ha introdotto al mondo il Sottosistema Windows per Linux (Beta) , che consente agli sviluppatori di eseguire binari della console in modalità utente di Ubuntu nativi attraverso la shell Bash in Windows 10. Se sei nel programma Windows Insider, hai avuto l’opportunità di provare questa funzione utilizzando le ultime build di Windows Anniversary Update Insider.

Gli sviluppatori Web sono abituati a fare scelte difficili su quali strumenti e librerie possono utilizzare in base al sistema operativo su cui stanno lavorando attivamente. Il WSL è stato progettato e costruito dal team del kernel di Windows e consegnato in collaborazione con Canonical, per aiutare gli sviluppatori di Windows 10 utilizzare il ricco ecosistema di sviluppatori Linux e strumenti a fianco dei grandi strumenti che stanno già utilizzando in Windows, senza dover avviare in un altro sistema operativo o VM. Questo è sicuramente un” dagli sviluppatori, per gli sviluppatori ” di Windows 10 caratteristica, specificamente progettato per rimuovere un po’ di attrito dal flusso di lavoro quotidiano degli sviluppatori.

In questo post, ho intenzione di mostrarvi alcune delle caratteristiche di WSL che personalmente trovo molto interessante, così come punto di alcune risorse per aiutarvi a saperne di più. Per prima cosa, mostrerò l’integrazione di comandi di base come ssh per lavorare con server e dispositivi Linux. In secondo luogo, dimostrerò la capacità di utilizzare lo scripting Bash per automatizzare le attività in modo molto naturale. In terzo luogo, mi divertirò un po ‘con i grandi compilatori della riga di comando, altri strumenti e la compatibilità *nix offerta, e giocare un po’ NetHack. Infine, ti mostrerò la possibilità di utilizzare Python esistente e altri script disponibili sul web.

Windows è il mio sistema operativo principale e l’ambiente di sviluppo, ed è stato da Windows 3.0 sul mio primo 286. Tuttavia, ho sempre avuto server Linux o dispositivi a calci intorno al mio posto. Da dispositivi IoT come il Raspberry Pi e dispositivi router/gateway dedicati ai server Minecraft, tendono a raccogliere sugli scaffali e gli angoli nel mio ufficio. Una cosa che ho sempre bisogno di fare è gestire e configurare questi computer Linux facilmente dalla mia workstation principale.

Gestione di server e dispositivi

Attualmente eseguo un server Ubuntu Minecraft senza testa da casa mia. Era il mio regalo di Natale a mio figlio di 10 anni l’anno scorso, ma si è rivelato essere il mio giocattolo tanto quanto il suo (ok, più il mio giocattolo). Usavo alcune app client per gestirlo dal mio PC Windows 10 principale, ma ora uso solo ssh della riga di comando da Bash su Windows 10. L’utilizzo di app come PuTTY e Tera Term va bene, naturalmente, così come l’utilizzo dei grandi strumenti forniti con Cygwin, ma volevo un’esperienza veramente nativa e naturale che scorresse bene. Cygwin mi è sempre sembrato un po ‘ come ordinare stir-fry in una pizzeria. Andava bene, ma l’esecuzione non sembrava giusta per l’ambiente.

Ho le coppie di chiavi pubbliche/private impostate usando ssh-keygen e ssh-copy-id dal WSL, quindi per ssh, digito semplicemente:

s ssh<username><server>

Ho creato un alias che lo rende più veloce. Questo è uno standard di Linux/Bash caratteristica:

$ alias mc=’ssh <utente><server>’

Ora, per arrivare a Minecraft server ho semplicemente digitare “mc” al prompt di Bash in Windows 10.

Questo stesso approccio funziona, ovviamente, con qualsiasi server web o database basati su Linux o anche Raspberry Pi e dispositivi IoT simili che potresti utilizzare come parte della tua soluzione.

Essere in grado di proteggere in modo pulito la shell da un prompt della console è solo una comodità e una preferenza. Tuttavia, una volta che ci si abitua a lavorare direttamente nella shell, in un ambiente completo che include graffette come apt, node, Ruby, Python e altri, si aprono tutti i tipi di possibilità per l’automazione.

Scripting remoto

Diciamo che hai un sacco di dispositivi o server Linux e vuoi eseguire un comando remoto su di essi. Supponendo che tu abbia già impostato le tue coppie di chiavi pubbliche/private, puoi semplicemente eseguire comandi ssh remoti da Bash.

Ad esempio, per vedere quando l’ultimo tempo di riavvio era su un server remoto, digitare questo:

$ ssh <utente><server> ‘ultimo x|grep reboot’

Che fissano conchiglie al server e viene eseguito l’ultimo comando x, e, per la ricerca delle righe che contengono la parola “reboot.” Quando lo eseguo contro il mio server Ubuntu Minecraft, ottengo questo risultato:

riavvia il sistema boot 4.4.0-28-generico Gio Jul 7 08: 14 ancora in esecuzione

Questo è un singolo server. Se si dispone di un elenco di server, è possibile automatizzare quella parte pure. Ho creato un file denominato server.txt nella mia home directory su WSL. Contiene un sacco di nomi di server/dispositivi Linux, uno per riga. Ho quindi letto quel file da uno script che ho creato nella mia home directory su WSL.

Dopo anni di lavoro con i dispositivi come il Raspberry Pi, io sono un nano tipo di ragazzo (mv ero un LSEdit persona), quindi questo è ciò che lo script si presenta come nella mia console preferita editor:

È possibile utilizzare vim o emacs o qualsiasi altro editor che funziona in Ubuntu sessione della console.

Il linguaggio utilizzato è Bash script (chiamato anche Bash shell script). Per eseguire lo script, digito semplicemente:

$. /foreachserver.sh ‘last-x / grep reboot’

E itererà su ogni server/dispositivo nel file ed eseguirà quel comando da remoto su ssh. Questo è un esempio molto semplice, ovviamente, ma è possibile estendere per reindirizzare in script locali o altri comandi utili. Il linguaggio di scripting Bash è abbastanza ricco da poter eseguire la maggior parte delle attività di amministrazione remota che lo utilizzano. È inoltre possibile estenderlo con altre applicazioni scaricate sul WSL o sui computer remoti.

Cosa succede se si desidera utilizzare i file e le risorse locali di Windows con il flusso di lavoro con altri computer Linux? Oppure, cosa succede se non si utilizza Linux a tutti? Bash è in grado di lavorare con file e risorse locali di Windows o è un ambiente completamente isolato?

Lavorare con i file di Windows

Il WSL ha accesso al file system del PC tramite/mnt/<lettera di unità> / directory (o punti di montaggio). Ad esempio, le directory radice C: e D: in Windows sarebbero disponibili rispettivamente tramite /mnt/c/ e /mnt/d/ nel WSL. Questo può essere utile quando si desidera incorporare i file di progetto di Windows, download o altri file in un flusso di lavoro basato su Linux/Bash.

Quelli mappa per l’SSD e meccanico di auto che ho sul PC:

Queste sono le logiche fissaggi, in modo che al momento non mostra quando si utilizzano i comandi, come il monte in the shell. Ma funzionano come ci si aspetterebbe loro di. Ad esempio, da Windows, ho inserito un file di testo denominato test.txt nella radice del mio disco C. Posso accedervi da WSL in questo modo:

Durante il Build Tour, volevamo assicurarci che le demo funzionassero tutte senza accesso a Internet (non si sa mai come sarà la rete del locale). Quindi, per assicurarmi che la demo Bash / WSL funzionasse per la porzione Git e per dimostrare l’accesso ai file di Windows sul PC locale, ho impostato un repository locale su C:gitNetHack sul PC Windows. Per clonarlo all’interno di WSL, ho eseguito quanto segue:

file git –clone file:///mnt/c/git/NetHack

Quella riga di comando ha detto a git di usare il file:// protocol e di clonare il repository situato in /mnt/c/git/NetHack. È possibile accedere a tutti i file di Windows in modo simile.

Attenzione: Come con qualsiasi console, è possibile modificare/eliminare i file nel file system di Windows da Bash se non stai attento. Ad esempio, puoi fare qualcosa di simile al seguente e finire per spazzare via un bel po ‘ dell’installazione di Windows, supponendo che l’account Windows in cui stai eseguendo abbia i diritti per farlo:

rm rm-rf /mnt/c/ <strong></strong>

Lo porto perché i comandi di Linux sono nuovi per molti di noi, mentre i comandi della console di Windows non lo sono.

La magia che fa accadere questa integrazione del file system si chiama DrvFs. Se vuoi saperne di più sul file system e su come funziona in WSL, il team di WSL ha messo insieme un ottimo post sul blog con tutti i dettagli.

Naturalmente, l’accesso al file system è solo una parte della storia. Molte attività di sviluppo comportano l’accesso a risorse remote tramite HTTP o altri protocolli di rete.

Effettuare richieste HTTP

È spesso utile effettuare una chiamata REST o altra chiamata HTTP (o FTP) da uno script o da una riga di comando piuttosto che da un programma compilato o da una pagina Web. Proprio come la maggior parte delle distribuzioni Linux, WSL include utility standard come curl e wget per effettuare chiamate HTTP e altre chiamate di rete. Ad esempio, ecco la chiamata REST a GitHub per ottenere le informazioni del mio profilo, usando curl:

È possibile combinare questo con lo scripting Bash per creare client di test rapidi per le API REST o utilità per eseguire il ping delle pagine Web sui server e riportare lo stato. È anche fantastico scaricare un file dal web; potresti semplicemente reindirizzare l’output su un file piuttosto che visualizzarlo sullo schermo:

curl curl-i https://api.github.com/users/Psychlist1972> pete.json

Sono anche un utente PowerShell, e hanno anche creato alcune estensioni interessanti da utilizzare Windows 10 MIDI in PowerShell e anche per risolvere alcuni corruzione dei file che stava accadendo agli utenti di alcuni hardware di registrazione del suono. Come sviluppatore e fan di. NET di lunga data, continuerò a utilizzare ed estendere PowerShell in quanto ha senso per i miei progetti. Ma PowerShell non è l’ambiente giusto per eseguire tutti quei Bash e Linux focalizzato utilità open source ed esempi sul web oggi. Voglio usare il modo più semplice e privo di attrito per eseguire qualsiasi attività e, a volte, ciò significa farlo in Bash.

Ho appena graffiato la superficie qui su Bash, Bash scripting e le attività che puoi eseguire dalla shell. Finora, ho parlato di lavori di utilità utili ma accessori allo sviluppo. Che dire dello sviluppo e della compilazione effettivi da WSL? L’ho dimostrato come parte del Build Tour.

Bash al Build Tour – NetHack

All’inizio di questa estate, gli altoparlanti di Microsoft hanno fatto il giro del mondo dimostrando alcune delle nuove funzionalità di sviluppo in Windows e Microsoft Cloud. Come parte di questo, abbiamo voluto dimostrare il WSL in modo divertente, ma anche in un modo che gli sviluppatori si riferiscono a.

Personalmente volevo mostrare l’uso di git e alcuni strumenti di sviluppo della console tradizionali. Quando ho scritto la demo di Bash, ho incluso le basi (”Hello World “in Python e Ruby), ma volevo mostrare qualcosa di un po’ più fuori dai sentieri battuti.

Ho ripensato al mio tempo al college, quando abbiamo rimbalzato avanti e indietro tra Unix (DEC Ultrix e SunOS) e VAX / VMS. A quel tempo, Unix era quasi esclusivamente un primo ambiente da riga di comando. Nella mia scuola, la maggior parte degli utenti X nella manciata di workstation grafiche ha appena aperto più sessioni di terminale in finestre diverse, ma con uno sfondo super-cool moon phase in background. La maggior parte degli studenti ha utilizzato i terminali VT-220 per le loro sessioni (la scuola non era lontana da Boston, quindi avevamo un sacco di attrezzature DEC).

A quel tempo, c’erano due grandi giochi che tutte le major di informatica stavano giocando: FANGS (lpMUD e il nuovissimo DikuMUD all’epoca, principalmente) e NetHack. NetHack e altri Roguelikes sono stati considerati alcuni dei giochi più influenti della storia, essendo i precursori dei molti dungeon crawl e giochi di ruolo che ci piacciono oggi.

NetHack ha una lunga storia e oggi contiene più di centomila righe di codice nix *vecchio di decenni, oltre a aggiunte moderne. Il gioco stesso utilizza maledizioni (o le sue sostituzioni) per l’interazione terminale, richiede lex e yacc (o flex e bison) e cc (o gcc), e una sfilza di altri strumenti di sviluppo per costruire.

È scritto in C e include una serie di utility di configurazione pesantemente script scritte per la shell Bourne. Ho pensato che sarebbe stato un test buono e divertente per esercitare le capacità di sviluppo di WSL e Bash su Windows 10. A causa dell’uso di curses (libncurses su Linux e WSL), aiuterebbe anche a dimostrare le capacità dell’emulazione del terminale integrata nella finestra della console di Windows 10.

Nel corso della giornata, la costruzione di NetHack dalla sorgente ha richiesto per sempre il nostro server Ultrix a fette temporali. Ora ci vuole un minuto sul mio PC ed è tutto fatto. Amo il progresso. Ci sono modi semplici e difficili per configurare e compilare NetHack su Linux o WSL. Per farti risparmiare un po ‘ di tempo, ti guiderò attraverso l’approccio facile.

Prerequisiti

Per prima cosa, aggiorna il tuo ambiente WSL per assicurarti di puntare all’ultimo catalogo di software e avere anche l’installazione di base aggiornata. È generalmente una buona idea farlo prima di installare nuovi pacchetti.

update sudo apt update
upgrade sudo apt upgrade

Quindi, installare gli strumenti di sviluppo essenziali. Il modo più semplice per farlo è usare il pacchetto build-essential. Questo include quasi tutti i programmi di console uno sviluppatore Linux avrebbe bisogno di costruire applicazioni in C / C++.

su sudo apt install build-essential

Ci vorranno alcuni minuti. Se vuoi essere più chirurgico, puoi installare separatamente gcc, gdb, make, flex, bison e gli altri strumenti richiesti nei documenti NetHack. Ma se sei uno sviluppatore, probabilmente vorrai gli altri strumenti ad un certo punto. Il pacchetto build-essential elimina le congetture dall’installazione del set di strumenti.

Quindi, installa git. Come puoi immaginare, è facile come:

su sudo apt install git

Proprio come con Linux, puoi aggiungere un git PPA per ottenere una versione più recente, ma questa funzionerà per quello che stiamo facendo qui.

E infine, vogliamo avere curses (ncurses, in realtà) installati per l’interazione dello schermo della console:

$ sudo apt install libncurses-dev

Una volta completati questi passaggi, sei pronto per costruire NetHack.

Costruire NetHack

Il repository ufficiale di NetHack è su GitHub. Per prima cosa, lo prenderemo e lo metteremo in una sottocartella dalla nostra home directory.

$ cd ~
$ git clone http://github.com/NetHack/NetHack

a Causa di NetHack supporta molti sistemi operativi diversi, avrai bisogno di fare alcune configurazioni di base, per indicare che si sta usando Linux da riga di comando, sostituendo con strumenti free e open source per Unix classici come il gcc per la cc.

Come avevo detto, ci sono un certo numero di modi per farlo. Qualcuno era abbastanza premuroso da incapsulare gran parte della configurazione in un file di suggerimenti. Fidati di me qui, l’utilizzo del file hints ti farà risparmiare ore di mal di testa nella configurazione rispetto ai passaggi descritti nel repository GitHub. Non è immediatamente ovvio come usare i suggerimenti se guardi i file README o altra documentazione, quindi ecco qui:

cd cd NetHack/sys/unix
/. / setup.sh suggerimenti/linux

Che imposterà il makefile per utilizzare gli strumenti, le librerie e i percorsi giusti per Linux. Gli script di installazione sono script di shell non banali che fanno molta configurazione; Sono felice di segnalare che funzionano perfettamente in WSL. Se siete curiosi di sapere shell scripting, essere sicuri di rompere loro aperto nel vostro editor preferito.

Quindi, la build finale:

cd cd ~/NetHack
make make all

Dopo la build, ti consigliamo di creare l’installazione. Si tratta in realtà solo di copiare l’eseguibile in una posizione nota:

make make install

Che ti lascerà con una cartella denominata ~/nh. Nethack si trova nella directory ~ /nh/install / games ed è semplicemente chiamato nethack. Per eseguirlo, vai a quella directory (o digita il percorso completo) e digita:

cd cd ~/nh/install/games
neth nethack

Una volta fatto ciò, lo schermo si schiarirà e ti verrà richiesto di iniziare a giocare a NetHack. Si noti che tutto fatto qui è proprio come sarebbe stato fatto su un’installazione di vaniglia Ubuntu Linux; non era necessario nulla di specifico per Windows.

Giocare a NetHack

Date le limitazioni di un gioco per console e la complessità di NetHack, potrebbe volerci un po ‘ per entrarci. Dire che è un po ‘ criptico all’inizio sarebbe un eufemismo, ma non ho mai incontrato uno sviluppatore che ha evitato una buona sfida.

I tasti di navigazione sono gli stessi di quelli usati in VI (M), quindi HJKL per Sinistra, Giù, Su e Destra rispettivamente. Per uscire, puoi trovare le scale al livello superiore e usarle, oppure premi Control-C per forzare l’uscita dal gioco.

In NetHack, tu sei il simbolo@. Ogni livello è composto da stanze, corridoi, porte e scale su e giù. Mostri, tesori e oggetti sono rappresentati come vari personaggi ASCII con cui acquisirai familiarità mentre giochi. Come è la norma con Roguelikes, non c’è risparmio e ottieni solo una vita. Se muori e giochi di nuovo, il dungeon viene generato casualmente e gli oggetti diventano strapazzati.

Il punto di NetHack è sopravvivere ai dungeon, raccogliere oro e oggetti e uccidere quanti più mostri possibile. Ci sono obiettivi ben oltre, ma dovrai giocare per un po ‘ (o leggere) per scoprirli. Regole vagamente seguire Dungeon & Draghi regole per armi,abilità, ecc.

Ecco una schermata di NetHack con tre stanze e due corridoi visibili. Le scale sono nella stanza in alto a sinistra, e sono attualmente nella stanza in alto a destra, insieme ad alcuni tesori e altri oggetti.

Se non hai il colore nella tua versione, crea un file chiamato~/.nethackrc e inserire quanto segue:

OPTIONS=color:true,dark_room:true,menucolors: true

A parte: Se la grafica dei personaggi ASCII non fa per te, ma ti piace il concetto, cerca “roguelike” nel Microsoft Store e goditi i giochi più visivi di questo genere popolare.

Certo, NetHack è un’antica base di codice, molto cara a quelli di noi di una certa età. Tuttavia, la costruzione di esso esercita un numero significativo di importanti strumenti di sviluppo e le caratteristiche dei sistemi operativi *nix, e anche l’emulazione terminale. È bello vedere che tutto questo, da gcc, gdb, make, bison e flex a git più moderno, funziona su WSL oggi.

Se vuoi vedere la demo di cui sopra come fatto al Build Tour, guarda questo keynote dal Build Tour Canada. La demo WSL inizia intorno alle 6: 20 in. (E sì, è il sottosistema di Windows per Linux, nonostante quello che ho detto in quel video.)

https://channel9.msdn.com/Events/Build/Build-Tour-2016-Toronto/Keynote

Spero che vi piaccia la vostra escursione nei sotterranei di NetHack!

C e C++ sono grandi, come lo sono tutti questi strumenti di sviluppo classici. Puoi anche fare molto con lo scripting Bash semplice. Ma molte attività di sviluppo coinvolgono linguaggi di scripting come Python.

Python

Puoi trovare esempi di script Python in tutto il Web, il che implica che Python è sia popolare che utile a molti sviluppatori. La maggior parte di questi esempi, ovviamente, presuppone che tu stia eseguendo Linux. In passato, questo significava eseguirli in un’installazione Linux su un’altra macchina, una VM o un’opzione di avvio, o apportare le modifiche necessarie necessarie per eseguirli utilizzando le distribuzioni Windows di Python.

Questi non sono problemi insormontabili, ma nella vita quotidiana di uno sviluppatore, piccoli pezzi di attrito come questo si sommano. Con WSL, hai sempre a disposizione un sottosistema e una shell compatibili con Python, senza dover uscire dalla tua zona.

Per installare l’ultima versione di sviluppo di Python e python package installer “pip” eseguire il seguente al prompt della shell Bash:

$ sudo apt install python-pip python-dev
$ sudo pip install –aggiornamento pip

Ora che Python è installato, ho voluto mostrare come si può afferrare una tipica di Linux, Python esempio da un sito e lavorare direttamente. Sono andato al sito di ricette Python Activestate e ho scelto l’esempio Python in alto. Ok, ho mentito. Il primo è per la stampa di nomi di numeri interi, e questo non sembrava super eccitante, quindi ho scelto il secondo: Tetris. Ho pensato che tutti voi vedete abbastanza Python pratico ogni giorno, quindi ho intenzione di andare per un altro gioco.

Ho aperto nano, copiato le 275 righe di codice Python direttamente dalla pagina del mio browser su Windows, incollate in nano nella mia finestra della console WSL, salvate come tetris.py e poi semplicemente eseguito:

python python tetris.py

Che ha immediatamente eliminato lo schermo e ha sollevato un’applicazione Tetris di base. Come nel caso di NetHack, si utilizzano gli stessi tasti di movimento VI-standard. (Indietro nei giorni prima che i tasti del mouse e WASD per il movimento, la mano destra era sulla tastiera tasti HJKL.)

Come ho detto, puoi ovviamente eseguire Python su Windows senza WSL. Tuttavia, per utilità e campioni rapidi, essere in grado di eseguire un esempio Python Linux senza modifiche semplicemente incollando in qualche codice da una fonte nota è un grande aumento della produttività per gli sviluppatori.

Questo è il punto, davvero. Non si tratta di sostituire altri strumenti nativi di Windows come Python, PowerShell, C# e altro ancora. Si tratta di rimuovere l’attrito quando hai solo bisogno di fare cose in modo rapido ed efficiente in un flusso di lavoro di sviluppo moderno.

Tra Bash, Python e tutti gli strumenti di sviluppo Linux da riga di comando nativi, WSL ha coperto le mie esigenze di flusso di lavoro Linux. Non è un server Linux o anche un client Linux completo. Invece, è esattamente ciò di cui ho bisogno per ridurre l’attrito quotidiano e rendere lo sviluppo su Windows ancora più produttivo e piacevole.

Ripristino dell’ambiente WSL

Sentiti libero di sperimentare. Se si danneggia l’installazione WSL, è abbastanza facile da reinstallare. Assicurati di conservare copie di qualsiasi cosa importante.

C:> lxrun.exe / uninstall / full
C: > lxrun.exe/install

Come stai usando Bash e WSL?

Speriamo che WSL, e Bash in particolare, su Windows 10 ti aiuti ad essere un po ‘più efficiente e rimuova un po’ di attrito dalle attività di sviluppo quotidiane.

Come stai usando il WSL su Windows 10? Come ti piacerebbe usarlo?

Il team sta facendo molto lavoro per garantire che WSL sia un ottimo strumento di console per gli sviluppatori. Se hai un feedback o incontri problemi, ti consigliamo di controllare la pagina dei problemi di GitHub e il sito di feedback e votazioni di UserVoice. Ci piacerebbe molto sentirti.

Ulteriori riferimenti e ulteriori letture

Linux shell scripting è un argomento enorme e ci sono un sacco di grandi tutorial sul web. Se non hai già familiarità con esso e vuoi saperne di più, la maggior parte qualsiasi tutorial Bash funzionerà per voi. Ecco uno per cominciare.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *