Informatique

P2V Windows, double boot avec Mint

Il y a quelques semaines je suis passé sous Linux Mint pour ma machine principale et j’en suis vraiment très content.

Il y a encore deux choses pour lesquelles je dois conserver un Windows quelque part, c’est l’accès à iTunes pour récupérer mes photos et gérer ma bibliothèque musicale (c’est juste impossible ou presque de le faire sous Linux, à cause d’Apple hein), et aussi pour la plupart des jeux.

Pour ce dernier point je me débrouillais avec Wine et PlayOnLinux, mais les performances sont quand même moins bonnes et tous les jeux ne sont pas compatibles. Guildwars 2 et Path of Exile fonctionnent globalement correctement, mais dès que je veux pousser un truc un peu plus récent ou gourmand, ça devient rapidement galère.

Pour régler le problème d’iTunes j’avais monté une machine virtuelle Win 10 qui me donnait entière satisfaction. Pour les jeux, j’avais fait une croix dessus, mais j’ai pas réussi à tenir plus de quelques semaines.

C’est pourquoi je me suis dit que j’allais finalement me faire un double boot. Mais comme j’avais déjà fait le travail avec la VM, et que j’aime la difficulté, je me suis dit que j’allais utiliser ma VM et la transformer en physique.


Préparation

Il va y avoir des conversions de fichiers. Vérifiez que vous disposez d’assez d’espace disque pour entreposer tout ça. Vous pourrez les effacer par la suite.

Déterminez où vous voulez installer votre Windows 10. Soit sur un disque interne séparé, soit une partition sur votre disque principal. Pour ma part, après avoir testé avec un disque dur USB externe (ça marche ! Mais c’est lent. Mais ça marche !)  j’ai pris la deuxième solution.

Enfin, je fonctionne en UEFI, le Mint comme le Windows.

VM -> Raw

La première étape est de transformer le disque virtuel en Raw.

Ouvrez une ligne de commande et tapez :

$ VBoxManage clonehd <disqueWin10>.vdi <disqueWin10>.raw --format RAW

Application l’image Raw sur le disque

J’utilise la commande dd. Toujours dans la ligne de commande :

$ dd if=<disqueWin10>.raw of=<Disque destination> bs=8M

<Disque destination> est normalement sous la forme /dev/sdX avec X = b, c, d en fonction du nombre de disques déjà présent. A vous de voir pour trouver le bon disque (par exemple avec fdisk -l).

Ne vous trompez pas, cette commande supprime l’intégralité du disque de destination !

Ça peut prendre un certain temps, allez vous faire un café, ou un thé c’est le moment.

Lorsque vous récupérez la main, vous avez un disque avec toutes les partitions identiques à ce que vous aviez en virtuel.

Vous pouvez tester que le disque démarre bien en redémarrant votre machine et en changeant l’ordre de boot. Choisissez le disque Win10. Si ça boote, vous êtes bien 🙂

Profitez-en pour installer toutes les mises à jour que Windows ne manquera pas de télécharger. Normalement il fait tout, tout seul, mais sinon installez les drivers manquants manuellement, à commencer par le réseau et la carte graphique.

Modifier Grub2

J’ai pas mal galéré pour ça mais j’ai finalement trouvé la solution pour démarrer directement depuis Grub2 plutôt que depuis le bios/UEFI.

Ouvrez le fichier /etc/grub.d/40_custom puis ajoutez les lignes suivantes :

menuentry "Windows (UEFI)" {
search --set=root --file /EFI/Microsoft/Boot/bootmgfw.efi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

Enfin updatez grub :

$ sudo update-grub

Redémarrez, testez, tout ça, normalement ça fonctionne !

Taille de partition

Normalement, la partition de votre Windows 10 a la même taille que ce qu’elle avait dans la VM. Pour l’étendre, utilisez GParted et redimensionnez comme vous le souhaitez.

[Linux Mint] Accéder aux partages réseau Windows/Samba

Je suis passé il y quelques semaines sous Linux Mint sur ma machine principale, oui celle-là même où je joue normalement. Comme toute migration, il y a encore des petites choses à polir, des machins qu’on faisait facilement avant, et qui ne sont pas à la même place maintenant.


J’ai un NAS Synology sur lequel je mets mes photos de vacances et auquel j’avais l’habitude d’accéder via un simple partage de fichiers. Autant c’est parfaitement transparent sous Windows, autant sous Linux il faut soit monter en dur les partages distants via sshfs dans le fstab, soit utiliser l’interface graphique et l’explorateur de fichier (Nemo par défaut sous Mint) pour y accéder.

Avec Nemo, la syntaxe smb://<user>@<machine>/<répertoire> fonctionne bien mais a tout de même deux inconvénients:

  1. Au redémarrage, il faut remonter les partages
  2. La plupart des applications ne sont pas capables d’accéder directement au partage. Par exemple, glisser-déposer une pièce jointe dans un mail Thunderbird depuis l’explorateur de fichier ne fonctionne pas.

Pour le 1. j’utilise l’application Gigolo qui permet de monter tout ce qu’on veut au démarrage. C’est très simple d’utilisation.

Pour le point 2. le backend Gnome Virtual File System (GVFS pour les intimes) qui se charge en arrière-plan de monter à la volée les partages distants dispose d’un fallback pas virtuel du tout dans le système de fichier global.

Pour accéder à ses partage il suffit d’aller dans /run/user/1000/gvfs/

Ok, les noms sont un peu chiants, mais on s’y retrouve, et toutes les applications peuvent y accéder sans problèmes.
Pour aller encore plus vite, je me suis fait un petit lien sur le bureau avec la commande :

$ ln -s /run/user/1000/gvfs Athena

Et maintenant tout roule !

iPhone en mode modem et route par défaut

Depuis quelques mois déjà, j’ai un abonnement téléphonique free avec un montant de data illimité. Je m’en sers régulièrement pour travailler hors de chez moi, regarder des vidéos Youtube et autres utilisations classiques nomades. Le confort de l’illimité est particulièrement appréciable et la 4G fonctionne excellemment bien dans les différents endroits que je fréquente. A tel point que cette connexion est meilleure que ma connexion ADSL classique, avec un débit en téléchargement de 2 à 3Mo/s en moyenne pour la 4G contre un maigre 600Ko/s pour l’ADSL.

J’ai donc décidé de me servir du téléphone comme modem quasi permanent. Le problème c’est que lorsque je me sers du téléphone pour accéder au net, je dois déconnecter l’interface réseau classique, ce qui me prive de l’accès à mon NAS notamment.

La solution c’est, lorsque le téléphone est branché, de supprimer la route par défaut de ma connexion classique. L’interface LAN reste alors disponible, et l’interface Internet bénéficie de la rapidité de la 4G.

Malheureusement, changer les routes manuellement est plutôt fastidieux alors j’ai décidé de me faire un petit script pour gérer ça à la volée.

Mon ordinateur principal est sous Linux Mint 18 (je parlerai de ma migration dans un autre article en été probablement).

M’inspirant de l’article suivant (https://lehollandaisvolant.net/?d=2017/06/10/23/37/39-linux-changer-de-sortie-audio-en-un-clic), j’ai composé le script suivant :

#!/bin/sh

CHOIX=$(zenity --list \
--column="Id" --column="Route" \
--hide-column=1 \
--hide-header \
1 "Passer par l'iPhone" \
2 "iPhone débranché");

if [ $CHOIX -eq 1 ]; then

gksudo route delete default gw 192.168.1.254;

elif [ $CHOIX -eq 2 ]; then

gksudo route add default gw 192.168.1.254;

fi

A coller dans un fichier quelconque, qu’on rendra exécutable (chmod +x <nomdufichier>). Ensuite j’ai créé un lanceur d’application, puis j’ai déplacé le lanceur dans la barre des tâches et hop, terminé.

Maintenant quand je le souhaite, je clique sur l’icône du programme, je choisis mon action, je mets mon mot de passe, et il me change la route.

J’ai bien conscience qu’il est sans doute possible d’automatiser encore plus cette action, que ça fait un peu verrue, mais ça m’amusait et le résultat me convient, alors si ça peut servir à quelqu’un, c’est toujours ça.

Passerelle SSHFS/Samba

Attention, article velu pour barbu linuxien. Si tu comprends pas, alors ce n’est probablement pas pour toi :). Cet article est plus une référence pour moi-même, mais si ça peut en aider d’autres, c’est tout bon.


J’ai actuellement un serveur de stockage hébergé chez OVH sur lequel j’effectue régulièrement des sauvegardes et qui me sers un peu à tout. Une sorte de box à tout faire informatique. Je partage quelques fichiers à l’aide nextcloud, je downloade un peu tavu, j’ai divers sites dont ce blog et pour accéder aux fichiers j’ai plusieurs possibilités (FTP, WebDav etc). Ma préférée est d’utiliser FUSE pour monter en local le partage de fichier distant SFTP.
Or, si cela fonctionne bien avec un client Linux via SSHFS, c’est bien plus difficile sous Windows.
J’ai essayé Dokan/Win-SSHFS, sans vraiment être convaincu, d’autant plus que le code n’est plus maintenu, et quelques autres solutions dont aucune ne m’a donné satisfaction.
Je me suis donc lancé dans la création d’une passerelle Linux/Windows de partage de fichier.

J’ai commencé à l’aide d’un RaspberyPi sous Raspbian branché en permanence chez moi. La solution fonctionne très bien, d’autant plus qu’elle me sert aussi de routeur, de serveur VPN et parfois de point d’accès Wifi.
Je peux aussi, au besoin, la débrancher et l’emmener avec moi n’importe où.
C’est pratique.
Mais je cherchais surtout une solution purement logicielle.
Je souhaitais une VM la plus petite possible, utilisant le minimum de RAM, pour qu’elle soit portable et rapide. La quête du Graal un peu.
Et là, paf, après plusieurs jours de recherche et de test je tombe sur mon Graal justement.
TinyCore que ça s’appelle.
Une distribution Linux de 11Mo, ultra-modulaire, qui se charge intégralement en RAM et qui met moins de 5 secondes à se charger.
Elle contient le strict minimum pour un système linux de base mais on peut ensuite y ajouter des tas d’extensions.
C’est idéal pour qui a un besoin extrêmement précis, une seule fonction et qui veut se concentrer dessus.

Pour mon propre besoin, voici les étapes qui m’ont permis de construire cette passerelle.

  1. Machine virtuelle
    1. Téléchargement et installation de VirtualBox dans sa dernière version
    2. Création d’une machine virtuelle avec la config suivante
      1. Disque dur 100Mo (juste pour conserver les extensions et les fichiers de config)
      2. RAM 64Mo
      3. Pas d’USB, Pas de carte son
      4. Réseau en Pont
  2. TinyCore
    1. Télécharger le fichier ISO de CorePlus sur le site officiel. C’est un plus gros fichier mais il contient l’installeur complet.
    2. Booter la VM sur l’ISO
    3. Suivre la procédure d’installation
    4. Enlever l’ISO et rebooter
  3. Configuration de TinyCore
    1. Modifier le fichier extlinux (qui est lu au boot) pour y ajouter quelques options
      1. vi /mnt/sda1/tce/boot/extlinux/extlinux.conf
      2. home=sda1 opt=sda1 kmap=azerty/fr-latin9 quiet host=sshfstc
    2. Rebooter (Par défaut aucun fichier n’est sauvegardé. Home et Opt définissent deux répertoires persistants au reboot.)
    3. Ajouter les extensions Openssh, SSHFS et Samba
      tce => S => openssh => Q => Install
      tce => S => sshfs => Q => Install
      tce => S => samba=> Q => Install
  4. Configuration de Samba (SHARE est à remplacer par un nom de partage quelconque)
    1. Créer le répertoire à partager
      1. mkdir /opt/SHARE
    2. Modifier le fichier de conf
      1. vi /usr/local/etc/samba/smb.conf
      2. Remplacer tout par :
        1. [SHARE]
        2. writable=yes
        3. browsable=yes
        4. path=/opt/SHARE
    3. Ajouter un utilisateur
      1. sudo smbpasswd -a tc
      2. <motdepasse>
    4. Lancer Samba au démarrage
      1. vi /opt/bootsync.sh
      2. /usr/local/etc/init.d/samba start
  5. Configuration de ssh/sshfs
    1. Créer les clés publique et privée dans le répertoire root
      1. cd root; sudo ssh-keygen; sudo cat .ssh/id_rsa.pub | ssh user@hostname « cat – >> .ssh/authorized_keys »
      2. Se connecter une première fois sur le serveur distant, ça ne doit plus demander de mot de passe
        1. ssh user@hostname
    2. Ajouter le montage du système de fichier distant
      1. vi /opt/bootlocal.sh
      2. sleep 20 #Je mets 20 secondes de sécurité avant de tenter le montage distant. On doit probablement pouvoir le réduire ou mettre un test qui checke que c’est bien monté et qui tente de le monter sinon.
      3. sshfs user@hostname:/<répertoire distant> /opt/SHARE -o allow_other,reconnect,_netdev,uid=1001,gid=50
  6. Finalisation
    1. On sauvegarde les paramètres. TinyCore ne sauvegarde que les répertoires home, opt et les fichiers et répertoires listés dans /opt/.filetool.lst
      1. vi /opt/.filetool.lst
      2. /root/.ssh
      3. /usr/local/etc/ssh
      4. /usr/local/etc/samba
    2. filetool.sh -b
    3. Reboot
    4. Depuis un client Windows le partage est accessible via \\sshfstc\SHARE avec l’utilisateur tc et le mot de passe <motdepasse> défini plus haut.

Exiftool

Accessoirement, dans la vie de tous les jours, je suis informaticien. Et mon travail m’oblige à une veille technique et me fait parfois découvrir des astuces, des programmes, des trucs et des machins que j’oublie souvent de conserver quelque part.

Je répare aujourd’hui cette erreur en inaugurant cette nouvelle rubrique, à la manière de Korben ou Sebsauvage.


Un mien collaborateur photographe passionné et compétent avait un besoin très spécifique pour effectuer des backups de ses photos. Plutôt que de copier dans le cloud 3.5To de photos stockées, il voulait faire une sélection de ses photos par leur note, le nombre d’étoile qu’il avait attribué, pour éviter de sauvegarder des photos de piètre qualité.

Les photos dont la note (ou rating) était supérieure à 2 devaient être copiées dans un répertoire spécifique avant d’être synchronisées.

J’ai trouvé un outil ultra-puissant (et le mot est faible) pour effectuer ce genre d’opération : exiftool
Cet outil en ligne de commande, gratuit, et multi-OS, est capable de lire et d’écrire les tags (ou metadonnées) d’un grand nombre de format de fichier, comme JPG, RAW, et bien d’autres, non limités à la photo comme le MP3 et bien d’autres.
Il existe des interfaces pour éviter la ligne de commandes, mais ceux que j’ai testé ne m’ont pas convaincu.

En attendant, pour résoudre son problème, j’ai utilisé la commande suivante (sous Windows) :

exiftool -o . -Filename=<destination>/%d/%f.%e -if "$rating ge <rating>" -r <source>

exiftool => programme à lancer
<destination> => répertoire de destination
<rating> => le rating minimum
<source> => point d’entrée du répertoire de base

Il est aussi possible de renommer en masse les fichiers en fonction des paramètres EXIF, comme par exemple la date, la résolution, ou n’importe quel autre paramètre.

Il est aussi possible de changer les paramètres EXIF de toutes les photos d’un répertoire (de manière récursive au besoin), pour par exemple, modifier la date ou géolocaliser les photos.

Clairement ce n’est pas un outil pour les utilisateurs lambda, mais les powerusers y trouveront sans problème leur compte.

Exiftool