31 janvier 2020

Restorer le boot de Windows après installation de CentOS

Il semble que dans certaines configurations RedHat et Centos n’aiment pas cohabiter sur la même machine avec Windows… En effet si sur une machine qui boote déjà sous Windows on installe en plus (Dual Boot) RH/Centos 7 ou 8 on risque de ne pas avoir l’option  booter sous Windows.

Heureusement il est facile de rattraper cela à la main.
Voici comment.

Depuis une session root exécuter ces 5 étapes:

1) Avec fdisk trouver la partition de boot

# fdisk -l
Device     Boot     Start        End   Sectors   Size Id Type
/dev/sda1  *         2048    1026047   1024000   500M  7 HPFS/NTFS/exFAT
/dev/sda2         1026048  501093039 500066992 238.5G  7 HPFS/NTFS/exFAT
/dev/sda3       501094400  503191551   2097152     1G 83 Linux
/dev/sda4       503191552 1000214527 497022976   237G  5 Extended
/dev/sda5       503193600 1000214527 497020928   237G 8e Linux LVM


Repérer la partition qui a une étoile (*) dans sa colonne Boot. Il s’agit de la partition UEFI qui servait à booter  Windows, mais que RH/Centos a ignoré. (Il parait que Fedora n'a pas ce problème).

Ici c’est la partition sda1 (partition 1 du disque sda).

2) Avec blkid trouver l’identifiant de cette partition de boot

# blkid /dev/sda1
/dev/sda1: UUID="B4FC7F32FC7EEE4C" TYPE="ntfs" PARTUUID="646e83a4-01"

Noter la valeur de UUID (sans les quotes).

Ici c'est B4FC7F32FC7EEE4C

3) Modifier la configuration de grub2

# vim /etc/grub.d/grub40_custom

Ne surtout pas toucher aux 5 lignes déjà en place, et ajouter le menuentry comme indiqué ci-dessous.
Dans ce qui suit:
- hd0 c’est sda
- msdos1 c’est la partition 1
- Remplacer    par le UUID affiché par blkid.

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 10" {
  insmod part_msdos
  insmod ntfs
  set root='(hd0,msdos1)'
  search --no-floppy --fs-uuid --set=root
  chainloader +1
}



4) Re-construite la configuration de grub :

# grub2-mkconfig -o /boot/grub2/grub.cfg


5) Rebooter

 # reboot

Vous devriez avoir une option de menu « Windows 10 » et vous devriez pouvoir booter sur Windows.

16 janvier 2019

Débuter avec Windows Subsytem for Linux (WSL)

Débuter avec Windows Subsytem for Linux  (WSL)


Il faut bien comprendre que le but de Microsoft en proposant WSL est de faire bénéficier Windows des possibilités de Linux et non l’inverse. Il n’est pas question pour Microsoft d’aider les développeurs d’applications Linux mais seulement d’aider les développeurs d’applications Windows.

Au début WSL s’appelait  “Bash for Windows”. Tout est dit.

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 du kernel Linux, 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 de WSL se fasse.

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

Maintenant que l'on a le simulateur de kernel en place on peut installer des distributions linux adaptées à ce contexte. La plus aboutie de ces distributions est Ubuntu puisque Microsoft et Canonical ont travailler main dans la main pour concevoir WSL.

En prenant l’application nommée 'Ubuntu' vous aurez la version la plus récente. Il existe cependant des applications Ubuntu XX.Y pour des versions spécifiques 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. Cette 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
  - Supprimer le fichier /etc/resolv.conf (le lien en fait)
  - Le re-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-get 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 ou TERM=screen

4) Fichiers Linux

- Le nom du répertoire où se trouvent les fichiers Linux est désigné par la clé de registre :
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ées par Microsoft WSL fonctionnent pas trop mal. Par exemple, on peut faire fonctionner, tant bien que mal, des application graphiques comme Firefox, ou même Xfce avec, coté Windows, un serveur X comme VcXsrv. Le principaux problèmes viennent de D-Bus et des drivers vidéo et audio.






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/