16 janvier 2019

Débuter avec Windows Subsytem for Linux (WSL)

Débuter avec Windows Subsytem for Linux  (WSL)


WSL n'est pas cygwin puisque pour qu'une application Linux fonctionne avec cygwin elle doit être re-compilée. Avec WSL c'est exactement l’application Linux, au bit prés, qui s’exécute sous Windows 10.

WSL est un simulateur, pas un émulateur. Son impact cpu, mémoire et disque est bien plus faible qu'une machine virtuelle. Les deux systèmes partagent le même espace disque et les deux systèmes voient les fichiers de l'autres. Ceci permet à Windows d’exécuter les applications Linux, et a Linux de lire et écrire les fichiers Windows. Les réciproques ne sont pas vraies.
Voir les avertissements plus bas.

1) Activer WSL

Ouvrir une ligne de commande PowerShell en tant qu’administrateur (Run as administrator) et taper la commande :
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

Ou bien, exécuter OptionalFeatures.exe et sélectionner "Windows Subsystem for Linux":



Dans tous le cas il faut rebooter pour que l’installation se fasse.

2) Installer l’application ‘Ubuntu’ depuis Microsoft Store.

En prenant l’application 'Ubuntu' vous aurez la version la plus récente. Il existe cependant des applications Ubuntu pour des versions spécifique de Ubuntu: 18.04 LTS et 16.04 LTS 

A la première exécution vous devez créer un utilisateur Linux. Il est sans lien avec l'utilisateur Windows.

Important: L'installation n'est valable que pour l'utilisateur courant. L’installation n'est pas partagée.

3) Configurer

- Le fichier /etc/resolv.conf est un lien vers un fichier généré à chaque exécution de WLS. Si son contenu est vide ou ne vous convient pas il faut
  - Le supprimer
  - Le créer en tant que fichier normal avec vos infos
nameserver 8.8.8.8

- Mettre à jour la distribution
  $ sudo apt-get update
  $ sudo apt-get upgrade

$ uname -a

Linux PCDEV09 4.4.0-17763-Microsoft #253-Microsoft Mon Dec 31 17:49:00 PST 2018 x86_64 x86_64 x86_64 GNU/Linux

Un   top ou  ps faux vous montrera que l’environnement n'est pas réel.

- Pour pouvoir compiler du code C/C++ il faut installer la suite gcc:

$ sudo apt install build-essential

$ gcc --version
gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0

- L’émulation de terminal peut poser des problèmes. Par défaut TERM=xterm-256color. En cas de problèmes essayer d’autres émulations comme TERM=vt100 TERM=screen

4) Fichiers Linux

- Le nom du répertoire où se trouvent les fichiers Linux est désigné par la clé de la registry :
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{xxxx-xxxx-xxxx-xx}\BasePath

Pour les versions de Windows 10 depuis 2018 ce chemin ressemble à: C:\Users\YourUserName\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

Notez (à nouveau) que tout est dans le profils de l'utilisateur, ce n'est pas une installation partagée.

- En faisant shift + bouton droit sur un répertoire vous aurez l’option « Open Linux shell here »

- Depuis la ligne de commande Windows, grâce à wsl.exe, on peut exécuter des commandes Linux


5) AVERTISSEMENT

* Il ne faut pas éditer les fichiers Linux depuis une application Windows (comme notepad++).
Par contre l’inverse est possible : On peut manipuler les fichiers Windows depuis les applications Linux. Les disques Windows sont d’ailleurs automatiquement montés sur  /mnt/c  /mnt/d

* L’environnement fournit par Microsoft WSL (malgré son nom) N'EST PAS LINUX. Il n'y a pas de noyau Linux, mais seulement une simulation (pas une émulation) des appels systèmes Il est impératif d'effectuer des tests sur de véritables distrib Linux car il y a une foule de petites différences, de limitations et d’incompatibilités.
- Environ 30% des appels systèmes implémentés échouent.
- Plus de 150 appels systèmes ne sont pas implémentés.

Voir le détails des tests faits par Microsoft en avril 2017.

* La liste des problèmes montre bien que ce c'est un environnement de développement fragile et en aucun cas un environnement de production.

* D'un autre coté, des choses non supportés par Microsoft WSL fonctionnent. Par exemple on peut faire fonctionner Xfce avec un serveur X comme VcXsrv.


Plus d'info:
https://blogs.msdn.microsoft.com/wsl/ (n’est plus actif mais très intéressant)
https://blogs.msdn.microsoft.com/commandline/ (actif)
https://github.com/Microsoft/WSL (ce n'est pas le code)



26 août 2018

Perl 6 n’est pas le successeur de Perl 5.

Perl 6 n’est pas le successeur de Perl 5. Qu’on se le dire !

Habituellement quand on incrémente le numéro de version c’est qu’il y a d’importantes nouveautés  mais la compatibilité ascendante est préservée. C’est le cas pour tous les langages honnêtes que je connais  C, C++, Java, JavaScript, Python, Pascal, PHP, Fortran, Cobol etc…

Mais le code source Perl 5 ne s’exécute pas sous Perl 6. Un seul exemple :
if(a==0){ ... }
 ne marche pas en Perl 6 à cause de l’absence d’espace entre if et la parenthèse ouvrante.

Quelques autres exemples :
  • En Perl 6 on écrit %liste<key> = 0; mais en  Perl 5 on écrit $liste{key} = 0; Notez bien les deux différences.
  • En Perl 6 l’opérateur de correspondance est ~~ en Perl 5 c’est =~
  • En Perl 6 l’operateur de concaténation est le tilde (~) en Perl 5 c’est le point (.)
  • L’operateur << devient +<
  • for devient loop, eval devient try.
  • ect ect ect La liste des differences est très longue.
En fait il y a autant de ressemblances entre C++ et Java qu’entre Perl 5 et Perl 6 : On reconnait des points communs de syntaxe, on distingue certains concepts communs mais ce n’est pas la même chose.

Alors pourquoi pas un autre nom que Perl 6 ?

Je pense que les langages étant tellement nombreux actuellement, qu’un nouveau nom passerait totalement inaperçu. Il est très difficile de se faire une place entre le C# de Microsoft, le Go de Google, le Swift d’Apple sans oublier les vénérables PHP, Python, Java, C/C++. En gardant le nom Perl ils espèrent garder l’attention de la communauté Perl 5 et essayer de la convertir à Perl 6. Pour le moment ça ne marche pas. (à mon avis ça ne marchera jamais), il y a même des tensions entre les deux communautés. Il y a même des tensions à l’intérieur de Perl 6 entre Parrot (une des machine virtuelle supportant Perl 6) et Rakudo (le compilateur Perl 6 le plus connu).

Le plus stupide dans cette dénomination c'est que Perl 5 ne peut pas passer à la version suivante car il y aurait confusion entre le Perl 6/dromadaire et le Perl 6/papillon.
Perl 6/papillon, va rester à la version 6 pour toujours ?

J’ai commencé à apprendre tout en utilisant de manière professionnelle Perl 5, et exclusivement Perl 5. Eh bien je pense que connaitre Perl 5 n’est pas un avantage décisif dans l’apprentissage de Perl 6. J’ai beaucoup perdu de temps en cherchant des ponts entre les deux soi-disant versions de Perl. En fait j’aurais gagné beaucoup de temps si j’étais parti dans l’optique d’apprendre un nouveau langage (un de plus !)

Note : Les performances ne sont pas (encore) au rendez-vous. On nous répète que le langage est jeune mais que ça va venir, qu'il y a des optimisation possibles. Mais on nous répète cela depuis 2015...

Packages

Si vous trouvez que votre distribution n'est pas assez réactive aux mises à jour de Rakudo (ou que Rakudo fait trop souvent des mises à jour ...), vous pouvez ajouter le repository raduko-pkg et bénéficier des mises à jour au fil de l'eau.


A suivre le blog de Jonathan Worthington, l’architecte de Rakudo (le compilateur Perl 6) et de MoarVM (la machine virtuelle de Perl 6)

Parodies




Software Collections - SCLs

Depuis 2013 Fedora propose le service en ligne COPR (Cool Other Package Repositories). Ce service permet  de gérer son propre dépôt, non pas chez soi, mais sur les serveurs de Fedora. Les packages de votre repo sont donc accessibles à tout le monde.

Sur la base de COPR est né SCLs (Software Collections) qui héberge des collections de packages pour Red Hat Enterprise Linux et son écosystème : Fedora, CentOS, et Scientific Linux.
Le principal but de ces collections est de proposer des versions récentes de certains logiciels incontournables (Apache, Git, Perl, Php, PostgreSQL...) plusieurs années avant qu’elles n’entrent officiellement dans les dépôts de ces distributions Linux.

Exemple : En Juillet 2018 la version la plus récente de Apache est 2.4.34
dans centos-sclo-rh on a 2.4.27 (Juillet 2017)
dans le dépôt de base de Centos 7.5 on a Apache 2.4.6 (Juillet 2013)

Pour installer le repository SCL :

# yum install centos-release-scl
Quels sont les repositories installés :

# yum repolist | grep scl
repo id                 repo name             status
centos-sclo-rh/x86_64   CentOS-7 - SCLo rh    7,984
centos-sclo-sclo/x86_64 CentOS-7 - SCLo sclo    767

On peut consulter la liste des packages proposés par SCL ici : https://www.softwarecollections.org/en/scls/
ou faire une requête avec yum
# yum --disablerepo='*' --enablerepo='centos-sclo*' list available

Exemple Installation de Apache 2.4.x
# yum install httpd24
# systemctl start  httpd24-httpd
# systemctl status httpd24-httpd
# systemctl enable httpd24-http

scl-utils

Quand on installe des packages venant de SCLs le package scl-utils est aussi automatiquement installé, ce qui installe la commande ‘scl’. Cette commande permet de gérer en parallèle la version installée depuis SCLs et la version officielle. En effet, pour éviter les conflits les logiciels installés puis SCLs s’installent dans /opt/rh/*.  La commande scl permet de passer d’un version à l’autre.

Si vous avez installé python37 depuis SCLs
# python –V
Python 2.7.5 
# scl enable python36 bash
# python -V 
Python 3.6.3
 on obtient une session bash avec python 3.6.3 actif
# exit
on est revenu a la session bash d'origine
# python –V
Python 2.7.5

Plus d'info: https://access.redhat.com/documentation/en-us/red_hat_software_collections/

11 avril 2018

Watch GIT


Voici un truc pour apprendre comment fonctionne GIT en interne.
git

Ouvrez une première console et exécutez la commande :

cd ~
watch -n 1 --color  tree -F -C -a repo
- tree affiche le contenu du repertoire repo (qui n'existe pas encore)
- watch execute tree toute les secondes.


Dans une deuxième console tapez les commandes:

cd ~
mkdir repo
cd repo
git init 
rm –rf .git/hooks
etc…

Vous avez pigez le truc! 
- Dans la première console vous visualisez l’activité du répertoire repo et de ses sous répertoires.
- Dans la deuxième console vous tapez des commandes git et observez dans la première console ce qui se passe dans repo/.git

On peut utiliser watch pour aussi visualiser en continue le résultat de git log et ainsi voir les branches se créer, fusionner, le déplacement de HEAD etc…

Watch est un formidable outil pédagogique pour analyser et comprendre le fonctionnement de GIT.

Démo avec l’arborescence de .git :



Démo avec l'historique de git :


Pour ce dernier exemple la commande watch est :

watch -n 1 --color git log --graph --pretty=format:\'%Cred%h%Creset -%C\(bold yellow\)%d%C\(white\) %s\' --abbrev-commit --all

Les escapes avec le \ sont nécessaires à cause de watch.