Créer sa propre distribution WSL

Depuis quelques temps, mon PC du boulot est passé sous windows 10, ce qui est selon moi assez bête pour les services informatique orienté systèmes, car nous travaillons à 90% sur des serveurs GNU/Linux, une distribution GNU/Linux aurait été plus adapté, sauf pour 2-3 logiciels qui ne sont compatible qu'avec Windows.
Sous Windows 7, j'avais donc des VMs Debian et des VMs CentOS (pour être au plus proche des serveurs) afin de faire mes tests sans risques.
Mais au passage de Windows 10, je me suis dis que l'utilisation de wsl pourrait être pas mal, sachant que je bosse principalement sur du bash, du perl et du python, ça ne devrait poser aucun soucis. Je garde quand même quelques VMs pour faire des tests plus poussés évidemment, comme les tests de provisionning ou de clustering, mais sur hyper-v maintenant car j'utilise docker4windows.

Premier problème sur lequel je me suis tombé, pas de distribution Archlinux (que j'aime énormément) et pas de distribution CentOs officiel. Nous allons donc voir ensemble comment les créer avec nos jolies mains.

Création du WSL avec Docker

Création du tarball

La méthode la plus simple que j'ai trouvé, est d'utiliser docker pour créer notre tarball d'installation.

Nous utiliserons cette méthode pour créer notre distribution CentOS.
Nous commençons donc par télécharger l'image CentOS :

PS C:\Users\xataz> docker image pull centos:7
7: Pulling from library/centos
d8d02d457314: Pull complete
Digest: sha256:307835c385f656ec2e2fec602cf093224173c51119bbebd602c53c3653a3d6eb
Status: Downloaded newer image for centos:7
docker.io/library/centos:7

Puis nous créons temporairement un conteneur :

PS C:\Users\xataz> docker container create centos:7
f0d7d9392789d35af607cd1e6f88a6e14dcdfe21120c4ada55f180d532433d8b

Il nous suffit maintenant de créer une archive de ce conteneur :

PS C:\Users\xataz> docker container export -o centos.tar.gz
f0d7d9392789d35af607cd1e6f88a6e14dcdfe21120c4ada55f180d532433d8b

Nous avons maintenant notre archive prête à l'emploi.

Création de la distribution WSL

Il ne nous reste plus qu'une seul étape, créer notre distribution

Pour ceci nous ouvrons powershell, et nous utiliserons l'option import de wsl qui s'utilise ainsi :

--import <Distribution> <EmplacementInstallation> <NomFichier> [Options]
Importe le fichier TAR spécifié en tant que nouvelle distribution.
Le nom de fichier peut être - pour l'entrée standard.

Avec la version 2 de wsl, nous pouvons en plus spécifier la version à utiliser (1 ou 2), avec un --version N.

Nous créons donc notre distribution :

PS C:\Users\xataz> wsl --import Centos D:\WslDistro\Centos C:\users\xataz\centos.tar.gz

Puis nous pouvons enfin rentrer dedans :

PS C:\Users\xataz> wsl --distribution Centos --user root
[root@DESKTOP-SHD40RK xataz]# cat /etc/centos-release
CentOS Linux release 7.6.1810 (Core)

Nous nous retrouvons donc notre distribution CentOS, fonctionnel.

Création du WSL avec le tarball

Récupération du tarball

Nous allons maintenant créer une distribution ArchLinux, mais cette fois-ci directement avec le tarball fourni par archlinux.

Pour ceci nous aurons par contre besoin d'un shell unix, ça tombe bien, nous avons créer notre distribution CentOS.

Nous commençons par télécharger le bootstrap de archlinux, j'utilise personnellement le miroir de polymorf.

$ curl http://archlinux.polymorf.fr/iso/2019.09.01/archlinux-bootstrap-2019.09.01-x86_64.tar.gz > archlinux.tar.gz

Le tarball de ArchLinux est part contre mal foutu (enfin pour WSL), car il y a un répertoire root.x86_64 dedans, il faudra donc le recréer :

$ tar xzvf archlinux.tar.gz
$ tar czvf archlinux-wsl.tar.gz -C root.x86_64 .

Création de la distribution WSL

Puis il ne nous reste plus qu'à importer le tarball :

PS C:\Users\xataz> wsl --import Archlinux D:\WslDistro\Archlinux archlinux-wsl.tar.gz
PS C:\Users\xataz> wsl -d Archlinux
[root@DESKTOP-SHD40RK xataz]# 

Conclusion

Comme vous l'avez compris, il suffit simplement d'avoir une archive du rootfs de notre distribution, et nous pouvons les créer comme nous voulons, en illimité.