volted.net

A blog about openSUSE and free thoughts

Astuce : connexion VNC over SSH

December 14, 2018 — sogal

Aujourd'hui juste une petite astuce, ou un rappel pour certains, sur la façon de sécuriser une connexion VNC grâce à l'usage d'un tunnel SSH.

Dans ce post, je suppose que vous avez déjà une connexion SSH fonctionnelle entre votre poste et la machine cible (celle qui exécute le serveur VNC). Cela peut être réalisé très simplement via la commande suivante :

ssh -f -L 5901:localhost:5901 machine.domain.tld sleep 10 ; vncviewer-tigervnc 127.0.0.1:5901

Si on décompose la commande, cela donne :

  • -f : on demande à SSH d'exécuter la commande qu'on va lui passer en arrière-plan, ce qui évite une coupure du flux et nous permet d'exécuter le client VNC par la suite ;
  • -L 5901:localhost:5901 : on va rediriger les connexions s'effectuant sur la machin client et sur le port 5901 vers le port 5901 de la machine distante ;
  • machine.domain.tld : la machine distante, qui exécute le serveur VNC ;
  • sleep 10 : la commande à faire exécuter sur la machine distante, cela nous permet de conserver la connexion ouverte car l'option -f requiert forcément une commande à passer en arrière-plan. Et comme on va lancer notre client VNC dans la foulée, il y aura toujours un flux de données et la connexion sera maintenue. En revanche, si le client VNC est fermée, la connexion se fermera au bout de 10 secondes ;
  • vncviewer-tigervnc 127.0.0.1:5901 : on connecte le client VNC sur le port local 5901, connexion que SSH va rediriger vers le port 5901 distant, comme indiqué ci-dessus.

Si l'on ne veut pas que le serveur VNC tourne en permanence sur la machine distante, on pourrait même imaginer ajouter une pré-commande du type :

ssh machine.domain.tld vncserver :1

Puis une post-commande pour terminer le serveur VNC une fois qu'on a fini :

ssh machine.domain.tld vncserver -kill :1

Tags: tips

Partition utilisateur dans un volume btrfs

December 12, 2018 — sogal

btrfs est un système de fichier moderne, donné pour être le remplaçant du veillissant, mais toujours très fiable et très utilisé, ext4. Il est le choix de base de la proposition de partitionnement par défaut lors de l'installation d'openSUSE pour la partition racine. La partition /home, si l'utilisateur fait le choix d'en créer une séparée, est en xfs.

On a entendu beaucoup de chose sur l'usage (ou le mésusage selon les cas) de btrfs avec notamment des problèmes dûs aux scripts de maintenance (présents dans /usr/share/btrfsmaintenance/ et lancés par leur timers systemd respectifs). Il faut reconnaître que les opérations de scrub et de balance des blocs ralentissent, parfois, considérablement le système durant un instant. Et plus on attend pour le faire (ex. d'un système n'étant pas utilisé souvent et, à chaque utilisation, recevant une grande quantité de données sur le disque), plus il y a de travail à faire et cela peut durer jusqu'à 5 minutes, durant lequel la machine est très ralentie, voire peut apparaître bloquée. Je ne vais pas revenir là-dessus, ce sujet a été abordé maintes fois à grand coup de trolls, de mauvaise foi et d'arguments non factuels à plusieurs endroits.

Dans ce billet, je voudrais juste partager un retour d'expérience, positif, sur l'usage de btrfs non seulement sur la partition racine, mais également dans ma partition /home. En effet, j'ai décidé il y a plusieurs semaines de convertir ma partition xfs (proposition de base de l'installeur openSUSE) en btrfs afin de profiter des snapshots.

Pour ce faire, j'ai commencé par passer en runlevel 3 :

init 3

J'ai fait une sauvegarde de mon /home actuel sur un disque externe :

rsync -arv --progress /home/ /run/media/user/DISK_BACKUP/

Ceci fait, j'ai démonté mon /home :

umount /home

Puis formater la partition en btrfs. Notez ici que si ça avait un système de fichier de type ext2/3/4 ou reiserfs, j'aurai pu tout simplement le convertir en btrfs, sans perte de données, via la commande btrfs-convert -p -l home /dev/partition_home. Pour formater la partition donc :

mkfs.btrfs -L home /dev/partition_home

Ceci fait, ne pas omettre de modifier le /etc/fstab pour refléter le changement de système de fichier. J'ai ensuite créé un sous-volume btrfs au nom de mon utilisateur :

btrfs subvolume create /home/user

Dans lequel j'ai activé les snapshots, but de toute l'opération :

snapper -c home create-config /home/user

Ceci va me créer une configuration pour snapper, l'utilitaire en charge de gérer la création et la suppression des snapshots, dans /etc/snapper/configs/home que j'ai adapté à mes besoins comme suit :

# nom du sous-volume dont il faut prendre un instantané
SUBVOLUME="/home/user"

# type du système de fichier
FSTYPE="btrfs"

# btrfs qgroup for space aware cleanup algorithms
QGROUP=""

# part du système de fichier que les instantanés peuvent utiliser
SPACE_LIMIT="0.5"

# utilisateurs et groupes autorisés à faire usage de cette configuration
ALLOW_USERS="user"
ALLOW_GROUPS=""

# synchroniser les droits des utilisateurs et les groupes définis ci-dessus
# avec le répertoire .snapshots
SYNC_ACL="yes"

# démarrer la comparaison des snapshots -pre et -post en arrière-plan après
# la création du snapshot -post
BACKGROUND_COMPARISON="yes"

# exécuter le nettoyage quotidien, basé sur l'algorithme du nombre d'instantané
NUMBER_CLEANUP="yes"

# limite pour le nettoyage quotidien, basé sur l'algorithme du nombre d'instantané
NUMBER_MIN_AGE="1800"
NUMBER_LIMIT="50"
NUMBER_LIMIT_IMPORTANT="10"

# créer des instantanés horaires (oui, c'est bien le but de ma manœuvre)
TIMELINE_CREATE="yes"

# nettoyer les instantanés horaires après un certain temps
TIMELINE_CLEANUP="yes"

# limites pour le nettoyage de la timeline (les instantanés horaires)
# âge minimum de l'instantané
TIMELINE_MIN_AGE="1800"
# nombre d'instantanés horaires à conserver au maximum
TIMELINE_LIMIT_HOURLY="24"
# nombre d'instantanés journaliers à conserver au maximum
TIMELINE_LIMIT_DAILY="14"
# nombre d'instantanés hebdomadaire à conserver au maximum
TIMELINE_LIMIT_WEEKLY="4"
# nombre d'instantanés mensuels à conserver au maximum
TIMELINE_LIMIT_MONTHLY="3"
# nombre d'instantanés annuels à conserver au maximum
TIMELINE_LIMIT_YEARLY="0"

# lancement du nettoyage des paires d'instantané -pre et -post vide
EMPTY_PRE_POST_CLEANUP="yes"

# âge minimum des instantanés nettoyés par l'algorithme pre-post
EMPTY_PRE_POST_MIN_AGE="1800"

Ainsi je vais pouvoir disposer d'instantanés me permettant de remonter dans le temps si jamais je fais une fausse manip' et efface des fichiers par erreur ou autre bêtise. Et les instantanés de la partition système me permettent, depuis le menu de démarrage de GRUB de sélectionner de démarrer sur un instantané en lecture seule afin de pouvoir réparer mon système en cas de soucis.

J'utilise ce setup avec deux partitions en btrfs, une pour le système, une pour mes données, chaque d'elle disposant de leur fréquence de création d'instantanés, depuis plusieurs mois sur une machine que j'utilise au quotidien. Et je dois dire que j'en suis très content ! Je n'ai pas eu de soucis de ralentissements agaçants, les instantanés sont bien créés puis supprimés conformément à la configuration, bref, impeccable !

Tags: opensuse

Afficher le virtualenv Python dans son prompt ZSH

December 08, 2018 — sogal

Voici une petite astuce bien pratique lorsqu'on utilise des virtualenv Python. C'est quand même assez pratique, quand on a plusieurs terminaux ouverts, de savoir si oui ou non on se trouve dans un virtualenv et si oui, lequel. Ça peut éviter des bêtises aussi.

Pour ce faire, j'ai ajouter les éléments suivants à mon $HOME/.zshrc:

function virtualenv_info () {
    [ $VIRTUAL_ENV ] && echo "($(basename $VIRTUAL_ENV)) "
}

export VIRTUAL_ENV_DISABLE_PROMPT=0

Puis dans mon prompt, j'ai ajouté $(virtualenv_info) comme suit:

LPROMPT='$(virtualenv_info)$(pwd_icon) %F{yellow}%2c%f %F{magenta}❱%f '

Ce qui donne, dans mon prompt complet:

ZSH virtualenv

Tags: terminal, tips

Un peu de changement

December 02, 2018 — sogal

Cela faisait déjà plusieurs mois que je voulais changer le site pour du statique dans lequel je puisse écrire en Markdown avec un déploiement automatique. C'est chose faire, enfin !, grâce à Bashblog. Il s'agît d'un script tout simple en Bash.

J'ai importé la plupart des vieux articles, mais pas tous, trop pénible ou certains étaient obsolètes.

Avec ce flux de travail simplifié, j'espère pouvoir retrouver la motivation d'écrire. @+

openSUSE Leap 15.0 est sortie !

December 02, 2018 — sogal

Aujourd'hui vendredi 25 mai, c'est la sortie d'openSUSE Leap 15.0 !

Au menu de cette release :

  • un nouveau rôle de serveur transactionnel permettant des mises à jours atomiques ;
  • GNOME 3.26 ;
  • Utilisation de Wayland par défaut (mais Xorg reste disponible) ;
  • Un nouveau partitionnement Btrfs utilisant la libstorage-ng ;
  • firewalld remplace SuSEFirewall ;
  • bien d'autres nouveautés (voir les release notes )

Et pendant que vous lirez ces lignes, je serai à Prague, en train de visiter et d'assister la conférence openSUSE 2018 et de fêter cette sortie !

Have a lot of fun !

Tags: opensuse

Renommer ses fichiers en masse dans Nautilus (Fichiers)

December 02, 2018 — sogal

Lorsqu'on a besoin de renommer des fichiers en masse, on peut se tourner vers des applications dédiées comme l'excellent PyRenamer. Mais il existe également le très bon script nautilus-renamer pour cela. Il date un peu (2012) et l'installation telle que décrite dans le fichier INSTALL ne le place pas au bon endroit et ne fournit pas une francisation correcte.

Je vous propose donc ma version directement traduite dans le code : Script nautilus-renammer (alias Renommer) (clic-droit => Enregistrer la cible du lien sous...)

Il suffit de le placer dans le dossier masqué (Ctrl + H pour les afficher) $HOME/.local/share/nautilus/scripts et de le rendre exécutable. Lorsque vous ferez un clic-droit sur un ou plusieurs fichiers ou dossiers, il sera disponible dans le sous-menu Scripts :

nautilus_r

Une fois lancé, vous avez la possibilité de renommer vos fichiers de différente façon:

  • selon un motif de votre choix ;
  • en substituant tout ou partie du nom d'origine ;
  • en changeant la casse du nom ;
  • ou enfin, et c'est excellent, en mixant le tout !

Dans mon exemple, je veux renommer mes 3 fichiers de test en incluant avant l'extension la chaîne de caractères _numero- suivie d'une numérotation à 5 chiffres puis en mettant le tout en majuscules :

L'ensemble des motifs utilisables est disponible en cliquant sur le "?", j'ai traduit les info-bulles pour plus de clarté :

nautilus_r

Les modifications peuvent également s'appliquer sur les extensions ou de façon récursive en cochant la case appropriée en bas.

Et le top : si après validation vous vous rendez compte que vous avez fait une bêtise, il vous suffit de sélectionner les mêmes fichiers puis de réouvrir le script Renommer et de cliquer sur Annuler. En effet, après une action le script crée, dans le dossier, un fichier masqué .rlog qui lui sert à revenir en arrière :

nautilus_r

En bref voilà un script bien utile pour renommer sans stress ses fichiers à la volée, directement dans son navigateur de fichiers !

Trad: gnome

Un prompt zsh au poil

December 02, 2018 — sogal

Comme beaucoup d'entre nous, j'utilise beaucoup le terminal et je suis toujours intéressé par de nouvelle astuces à ce sujet. J'ai récemment testé puis adopté powerline Néanmoins je trouve ce dernier un peu lourd. Il dispose de plein de fonctionnalités (des segments) et est visuellement très chouette mais ralenti un peu l'utilisation et le lancement du shell (et donc l'ouverture de nouveaux émulateurs de terminal).

J'ai donc décidé de voir si je ne pouvais pas obtenir facilement la même chose simplement en configurant zsh comme il faut via mon .zshrc. J'ai donc fait mumuse, lu de la doc et searcher le fucking web et voici ce que ça donne :

Mode normal : zsh-01

Dans un dépôt Git : zsh-02

Si la commande précédente a renvoyé un code d'erreur : zsh-03

Lorsqu'une chanson est en cours de lecture (via mpd) : zsh-04

Et voici la partie correspondante de mon .zshrc :

#---------- DEFINITION DES FONCTIONS ----------

# Récupérer la charge système :
function load () {
    read one five fifteen rest </proc/loadavg
    load="$one $five $fifteen"
    print $load
}
# Récupérer la branche git si c'est un dépôt :
function izitgit () {
    if [[ -d .git ]] ; then
        gitb="[$(git rev-parse --abbrev-ref HEAD)]"
        if [[ $?  -ne 0 ]] || [[ -z "$gitb" ]] ; then
            return
        fi
    else
        gitb=""
    fi
    print $gitb
}

# Récupérer la chanson en cours :
function mpd () {
    if [[ $(mpc current) == "" ]] ; then
        song=""
    else
        song="[$(mpc current)]"
    print $song
    fi
}

#---------- CONSTRUCTION DU PROMPT ----------

# ...principal
PROMPT="[%F{magenta}%n%f (%F{green}%m%f): %F{yellow}%~ %f]%F{magenta}> %f"
# ...à droite
RPROMPT='[%F{red}$(load)%f][%B%F{cyan}%*%f%b]$(izitgit)%F{yellow}$(mpd)%f%(?..%B%K{red}[-%?-]%b%k)'
# Indispensable pour assurer l'extension des résultats des commandes :
setopt prompt_subst
autoload -U promptinit

promptinit

J'espère que ça pourra être utile à ceux qui veulent bidouiller leur prompt. Si vous avez des pistes d'améliorations ou des astuces pour votre bash ou votre zsh à partager, n'hésitez pas ! Postez !

Have fun and enjoy !

tags: terminal, tips

Tester Gimp 2.9.5 avec Flatpak

December 02, 2018 — sogal

Flatpak (anciennement xdg-app), tout comme AppImage, est une solution visant à simplifier et uniformiser l'installation d'applications sur différentes distributions GNU/Linux. Le but est de fournir un espace cloisonné (sandbox) dans lequel s'exécute l'application, c'est une forme de virtualisation mais d'application uniquement et non d'un système complet. Cela permet donc aux utilisateurs curieux de tester les dernières versions de leurs logiciels favoris sans avoir à les compiler, ni à se soucier des dépendances.

Installation de Flatpak :

Voyons comment installer ça :

zypper install flatpak

Configuration :

Nous ajoutons ensuite les dépôts depuis lesquels nous allons par la suite installer le runtime (un environnement d'exécution virtualisé) :

wget https://sdk.gnome.org/keys/gnome-sdk.gpg
flatpak remote-add --gpg-import=gnome-sdk.gpg gnome https://sdk.gnome.org/repo/
flatpak remote-add --gpg-import=gnome-sdk.gpg gnome-apps https://sdk.gnome.org/repo-apps/

Puis installation de la plateforme, ici celle de Gnome 3.20 puisque c'est une application GTK que je souhaite installer. J'en profite pour traduire (et résumer) 2 passages de la F.A.Q. qui rassureront ceux qui n'utilisent ni Gnome comme environnement de travail, ni Fedora comme OS :

Flatpak est-il lié à Gnome ?

Non. Bien que Flatpak ait été développé par des gens impliqués depuis longtemps dans la communauté Gnome, il n'est lié à aucun environnement de bureau. En réalité, il a été conçu avec pour objectif clair de permettre la construction d'applications utilisant n'importe quel base de bibliothèques ou langage de programmation souhaités par l'auteur.

Flatpak est-il lié à Fedora ?

Non. Les développeurs ont une expérience de Fedora [...] mais Flatpak a été développé de manière à faire abstraction de la distribution et à se déployer sur n'importe quel système GNU/Linux disponible. Nous avons pris contact et discuté avec des représentants d'autres distributions très tôt dans le projet.

Installer une application :

Assez de blabla, on installe Gimp !

flatpak install gnome org.gnome.Platform 3.20

Passons maintenant à ce qui nous intéresse vraiment : l'installation des applications ! Dans cet exemple, nous allons installer Gimp dans sa version de développement " Nightly" et donc ajouter le dépôt "Nightly graphics" et sa clé :

wget http://209.132.179.2/keys/nightly.gpg
flatpak remote-add --gpg-import=nightly.gpg nightly-graphics http://209.132.179.2/repo/

Pour voir ce que contient ce dépôt :

flatpak remote-ls nightly-graphics --app

net.scribus.ScribusDevel
org.darktable.DarktableDevel
org.gimp.GimpDevel
org.gimp.GimpDevelGtk3
org.inkscape.InkscapeDevel
org.mypaint.MypaintDevel
org.telegram.TelegramDesktopDevel

Il contient quelques applications qui intéresseront les graphistes !

Installons donc Gimp :

flatpak install nightly-graphics org.gimp.GimpDevel master

Et enfin, nous pouvons en profiter :

flatpak run org.gimp.GimpDevel

gimp-night

Pour les utilisateurs de Gnome (et possiblement d'autres DE mais je n'ai pas testé), l'application est même ajoutée au menu des applis. Je peux donc avoir simultanément ma version stable de Gimp et celle de développement sans avoir recours à une VM ni un chroot "classique" !

Tags: gnome, tips