08 Nov 2023, 00:00

Changer le numéro des partitions

MBR

En cas de suppression puis création de partition en milieu de disque, il peut arriver que les partitions ne soient plus numérotées dans l’ordre de leur positionnement sur le disque.

Bien que non gênante en fonctionnement, cette situation diminue la lisibilité du disque et augmente les risques de confusion lors de manipulations de partitions.

Pour remédier à ceci, on peut renuméroter les partitions dans leur ordre logique.

Pour les partitions MBR, il faut le faire à la main : on dumpe la table de partition, on la modifie, puis on la réécrit sur le disque.

dev=/dev/sdX

sudo sfdisk --dump ${dev} > sdX.bkp

nano sdX.bkp
# changer le chiffre

sudo sfdisk -f {dev} < sdX.bkp
# débrancher/rebrancher disque (ou reboot) pour forcer la relecture de la table de partition

Source

GPT

Pour les partitions GPT, voir cet article

30 Jul 2023, 00:00

Live-USB Bookworm

Même procédure que pour buster avec quelques variations :

sudo aptitude install live-build live-tools
mkdir bookworm_live && cd bookworm_live
mkdir auto && cp /usr/share/doc/live-build/examples/auto/* ./auto/

config

Fichier auto/config

#!/bin/sh

set -e

lb config noauto \
	--architectures 'amd64' \
	--archive-areas 'main contrib non-free non-free-firmware' \
	--bootappend-live 'boot=live config locales=fr_FR.UTF-8 keyboard-layouts=fr' \
	--binary-images 'iso-hybrid' \
	--distribution 'bookworm' \
	--linux-flavours 'amd64' \
	--source 'false' \
	--backports 'true' \
	"${@}"

Liste de paquets

Fichier config/package-lists/live.list.chroot

live-boot
live-config
live-config-systemd
systemd-sysv

#FIRMWARE
firmware-linux firmware-atheros firmware-b43-installer firmware-bnx2x firmware-brcm80211 firmware-iwlwifi firmware-libertas firmware-myricom firmware-netxen firmware-qlogic firmware-realtek broadcom-sta-dkms

#UTILS
nmap rcconf gparted hfsprogs ntfs-3g hfsplus hfsutils dosfstools lightdm bash-completion chntpw dcfldd bootlogd less mesa-utils numlockx ethtool grub2 ssh gdisk testdisk iftop nethogs pm-utils dmraid aptitude apt-file smartmontools debootstrap pciutils usbutils cifs-utils e2fsprogs mtools screen lvm2 net-tools mdadm lsscsi haveged rng-tools cryptsetup efibootmgr efivar ncdu wireless-tools dnsutils git iperf iperf3 lshw pmount grub-efi-ia32-bin grub-pc-bin grub-efi-amd64-bin curl dislocker

# TEAMVIEWER
libqt5webkit5 qml-module-qtquick2 qml-module-qtquick-controls qml-module-qtquick-dialogs

# DESKTOP
hplip system-config-printer xsane simple-scan mate-desktop-environment caja-open-terminal mesa-utils firefox-esr-l10n-fr chromium-l10n pulseaudio pavucontrol pavumeter mate-media-common mate-media mate-settings-daemon-dev mate-settings-daemon-common mate-settings-daemon chromium engrampa unrar pluma bluez blueman pulseaudio-module-bluetooth gddrescue ddrescueview vlc rdesktop conky network-manager-gnome webcamoid cheese webp-pixbuf-loader


Noyau, backports et pinning

Voir notes pour Bullseye

09 Jul 2023, 00:00

WordPress, reverse proxy et https

Si on héberge un WordPress derrière un reverse proxy (dans mon cas jwilder-nginx+letsencrypt) qui gère le https et les certificats, WordPress verra le trafic en non-chiffré.
Il faut donc l’informer que le trafic est chiffré de manière externe, et qu’il doit modifier les URLs en https://.
Si je comprends bien, ceci se fait via la détection d’une en-tête définie par le reverse proxy.

Pour ceci, on ajoute dans le wp-config.php (dans le volume) :

//Load Balancer NGINX Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
    $_SERVER['HTTPS']='on';

24 May 2023, 00:00

Police fixe pour l'horloge de Mate

Par défaut, la police de l’horloge MATE est une police à espacement variable, ce qui cause un très léger mouvement de l’ensemble des icônes de la zone de notification. Pour la passer en police chasse fixe pour empêcher ceci, créer/éditer le fichier ~/.config/gtk-3.0/gtk.css et y coller ce bloc :

#clock-applet-button {
  font-family: monospace-regular;
}

Puis pkill mate-panel devrait recharger le panneau avec la modification.

Source

18 Mar 2023, 00:00

Convertir une table de partition MBR en table GPT

Il faut évidemment backuper tout le nécessaire avant la moindre manipulation.

Sous Linux

Source
sudo gdisk /dev/sdX
r f

Sous Windows

Se fait avec l’utilitaire MBR2GPT.EXE.
Ne fonctionne que pour un disque système !

Cet utilitaire va également créer/rendre bootable une partition ESP, et créer les fichiers de démarrage Windows pour protocole EFI.
Il est disponible à partir de Windows 10 1703. Il est prévu pour être utilisé en WinPE/WinRE, mais peut être utilisé directement sur l’OS en cours de fonctionnement avec le flag /AllowFullOS. un certain nombre de fonctionnalités risquent cependant de ne pas fonctionner. Il est donc préférable de redémarrer en WinRE (Paramètres -> Mises à jour et Sécurité -> Récupération -> Démarrage avancé -> Redémarrer) puis Invite de commande.
(possible depuis USB install ?)

Tout d’abord identifier le numéro du disque à convertir avec diskpart, list disk. Dans notre exemple, c’est le disque 9.
mbr2gpt.exe /validate /disk:9 pour vérifier que c’est faisable (voir les pré-requis sur le lien ci-dessus).
mbr2gpt.exe /convert /disk:9 pour effectivement lancer la conversion (+ création de la partition ESP, formatage en FAT32, ajout des fichiers de démarrage pour le protocole EFI etc…)

Il sera nécessaire de paramétrer le boot en EFI car ceci va de paire (sous Windows) avec une table de partition GPT.

22 Feb 2023, 00:00

Notes sur KeepassXC

Aperçu

Keepass est le client original. En v1 il était disponible uniquement sous Windows. Depuis la V2, il est multiplateforme.
Il est codé en dotnet (et donc mono sous Linux).

KeepassX était un client alternatif à Keepass nativement compatible Linux. Il n’est plus beaucoup développé. Je ne me penche pas dessus.

KeepassXC est un fork communautaire de KeepassX, nativement multiplateforme, codé en C++, et encore mis à jour régulièrement.

Keepass2 et KeepassXC partagent le même format de base de données, le format .kdbx.
Il me semble que Keepass v1 utilisait le format .kdb.

On peut ouvrir un fichier .kdbx alternativement avec Keepass2 et KeepassXC, les modifications sont vues mutuellement.

Par défaut, Keepass2 intègre une icône à la zone de notification.
KeepassXC ne le fait pas, mais on peut activer l’option dans les paramètres. Si on coche “Réduire au lieu de quitter l’appli” et “Afficher une icône dans la zone de notification”, on a le comportement le + souple : la fenêtre est réduite lors de la réduction et disparaît lors de la fermeture ; l’appli étant en permanence en fonctionnement dans la zone de notification.

Pour l’instant je me penche principalement sur KeepassXC. Son dépôt git est ici :
https://github.com/keepassxreboot
et son site officiel ici :
https://keepassxc.org/

On peut l’installer via les dépôts Debian avec la commande
sudo apt install keepassxc

L’intégration de KeepassXC à Firefox nécessite un module. En essayant de l’installer depuis le magasin de modules de Mozilla, je n’ai pas réussi à faire dialoguer les 2. Mais Debian package l’extension, et l’association avec KeepassXC a fonctionné directement (après avoir supprimé l’extension installée manuellement).
sudo apt install webext-keepassxc-browser

Il faut également activer, dans les paramètres de KeepassXC, l’intégration (générique) aux navigateurs, ainsi que l’intégration à chaque navigateur que l’on souhaite utiliser.
L’activation du navigateur Firefox va créer un fichier (qui contient le chemin du proxy KeepassXC) dans ~/.mozilla/native-messaging-hosts/ ; il faut donc la réactiver si on fait des tests à base de dossiers FF tout neuf.

Il me semble que chaque connection entre 1 profil et KeepassXC utilise une “base de données” (qui n’est pas la base de données KDBX, mais simplement le nom du lien entre les 2). On peut le voir dans les paramètre de Keepassxc-browser -> Base de données connectée. Je ne sais pas comment consulter les différents liens dans KeepassXC lui-même.

Une fois l’ensemble paramétré, on voit apparaître le logo de KeepassXC à côté des champs username. Si on clique dessus, cela remplit automatiquement les champs, ou propose de choisir l’identifiant en cas d’IDs multiple enregistrés pour une même URL.

Sync

Le fichier KDBX est synchronisable entre différents postes via des outils externes ; en mon cas Nextcloud.
Après test, il s’avère qu’il est tout à fait possible d’avoir le fichier KDBX déverrouillé sur 2 postes en parallèle. Dès que les modifications sont appliquées par le poste qui n’a pas créé ces modifs, KeepassXC s’actualise tout seul et affiche les modifications, sans besoin de fermer/ouvrir la base ou de redémarrer le logiciel.
La modification sera également accessible sous Firefox sans besoin de le relancer, mais en actualisant toutefois la page.

Import

On peut importer (entre autres) une base de password au format CSV. Ceci permet d’importer les passwords de Firefox.
Un bon guide est ici :
https://blog.bilak.info/2021/04/02/moving-passwords-from-firefox-lockwise-to-keepassxc/

On commence par exporter les mots de passe de Firefox dans un fichier CSV.
Si on utilise une version =< 2.7.0 de KeepassXC (jusqu’à Bullseye pour la version des dépôts Debian), il faut modifier les timestamps via le script présent sur le lien ci-dessus.

Ensuite, dans KeepassXC, “Base de données -> Importer -> Fichier CSV”. On choisit le CSV créé précédemment. Il faut alors créer une nouvelle base de données qui contiendra l’import. On pourra fusionner cette nouvelle base avec une base pré-existante ultérieurement.

Pour l’import, il faut cocher l’option spécifiant que la 1ère ligne contient les noms des champs.
Ensuite, établir cette correspondance :

  • Group -> Not Present
  • Title -> url
  • Username -> username
  • Password -> password
  • URL -> url
  • Notes -> httpRealm (pas obligatoire, mais permet de conserver des informations supplémentaires)
  • TOTP -> Not Persent
  • Icon -> Not Present
  • Last Modified -> timePasswordChanged
  • Created -> timeCreated

Fusion de 2 bases

Ouvrir la base destination.
“Base de données -> Fusionner à partir d’une base de données”. Taper le pass de la base source.
Les dossiers sont respectés lors de l’import.

10 Feb 2023, 00:00

Notes sur vi

Entrer en mode édition/insertion : touche i
Sortir du mode édition : touche Esc

Quitter (lorsqu’on n’est pas en mode édition) : :q
Quitter (sans enregistrer les changements) : :q!
Enregistrer : :w

Ctrl-S freeze l’affichage. Pour le récupérer, Ctrl-Q

03 Nov 2022, 00:00

xrandr, résolution virtuelle et upscaling

xrandr
donne la configuration actuelle et les différentes configurations possibles

panning : permet d’aumgmenter la taille “logique” de l’affichage (les coordonnées disponibles pour demander un affichage)

mode : l’affichage réel de l’écran physique ; peut être inférieur au panning (auquel cas l’affichage défile lorsqu’on bouge le curseur vers un bord)

scale : l’échelle entre le panning et le mode ; permet par exemple de faire rentrer un “grand” panning dans un “petit” mode Elle s’obtient en divisant la valeur du panning par la valeur du mode.

Par exemple, avec un écran physique 1366x768, si je veux un écran virtuel de 1920x1080 :

xrandr --output LVDS-1 --panning 1920x1080 --mode 1366x768
et je pourrais “défiler” dans l’écran virtuel en déplaçant la souris.

Si je veux que cette résolution virtuelle soit affichée intégralement dans l’écran :

1920/1366 = 1.40556369
1080/768 = 1.40625

ce qui donne la commande
xrandr --output LVDS-1 --panning 1920x1080 --mode 1366x768 --scale 1.40556369x1.40625

26 Sep 2022, 00:00

Live-USB Bullseye

Même procédure que pour buster avec quelques variations :

sudo aptitude install live-build live-tools
mkdir bullseye_live && cd bullseye_live
mkdir auto && cp /usr/share/doc/live-build/examples/auto/* ./auto/

config

Fichier auto/config

#!/bin/sh

set -e

lb config noauto \
	--architectures 'amd64' \
	--archive-areas 'main contrib non-free' \
	--bootappend-live 'boot=live config locales=fr_FR.UTF-8 keyboard-layouts=fr' \
	--binary-images 'iso-hybrid' \
	--distribution 'bullseye' \
	--linux-flavours 'amd64' \
	--source 'false' \
	--backports 'true' \
	"${@}"

Liste de paquets

Fichier config/package-lists/live.list.chroot

live-boot
live-config
live-config-systemd

#FIRMWARE
firmware-linux firmware-atheros firmware-b43-installer firmware-bnx2x firmware-brcm80211 firmware-intelwimax firmware-iwlwifi firmware-libertas firmware-myricom firmware-netxen firmware-qlogic firmware-realtek broadcom-sta-dkms

#UTILS
nmap rcconf gparted hfsprogs ntfs-3g hfsplus hfsutils dosfstools lightdm bash-completion chntpw dcfldd bootlogd less mesa-utils numlockx ethtool grub2 ssh gdisk testdisk python-tk iftop nethogs pm-utils dmraid aptitude apt-file smartmontools debootstrap pciutils usbutils cifs-utils e2fsprogs mtools screen lvm2 net-tools mdadm lsscsi haveged rng-tools cryptsetup efibootmgr efivar ncdu wireless-tools dnsutils git iperf iperf3 lshw pmount grub-efi-ia32-bin grub-pc-bin grub-efi-amd64-bin curl dislocker

# TEAMVIEWER
libqt5webkit5 qml-module-qtquick2 qml-module-qtquick-controls qml-module-qtquick-dialogs

# DESKTOP
hplip system-config-printer xsane simple-scan mate-desktop-environment caja-open-terminal mesa-utils firefox-esr-l10n-fr chromium-l10n pulseaudio pavucontrol pavumeter mate-media-common mate-media mate-settings-daemon-dev mate-settings-daemon-common mate-settings-daemon chromium engrampa unrar pluma bluez blueman pulseaudio-module-bluetooth gddrescue ddrescueview vlc rdesktop conky network-manager-gnome webcamoid cheese webp-pixbuf-loader

Noyau, backports et pinning

On va utiliser le pinning pour demander d’installer certains paquets depuis les backports notamment les noyaux et headers.
La version de wpasupplicant fournie dans Bullseye a parfois quelques problèmes pour se connecter à un réseau. On choisit d’installer la version de bullseye-backports.
De même, si on installe le noyau de bullseye-backports, le module broadcom-sta-dkms doit venir des backports pour compiler sans erreur.

Pour ceci, on crée le fichier config/archives/backports.pref.chroot et on y met le contenu suivant :

Package: linux-image-amd64
Pin: release a=bullseye-backports
Pin-Priority: 600

Package: linux-headers-amd64
Pin: release a=bullseye-backports
Pin-Priority: 600

Package: wpasupplicant
Pin: release a=bullseye-backports
Pin-Priority: 600

Package: broadcom-sta-dkms
Pin: release a=bullseye-backports
Pin-Priority: 600

On peut bien sûr choisir d’autres paquets à installer depuis les backports, avec les mécaniques classiques de pinning.

20 Aug 2022, 00:00

Notes sur shell (sh)

Cet article se concentre sur les fonctionnalités des shells POSIX (notamment sh).

Debug

On peut mettre au début du script (ou en argument du shebang) ces directives :
set -x : toutes les commandes exécutées sont inscrites sur le terminal (standard error) avant leur exécution (avec un + en tête de ligne)
set -v : chaque ligne lue est inscrite sur le terminal (standard error)

Il me semble que ce sont des commandes “built-in” de bash ; toutefois cela semble fonctionner même si le shebang du script est /bin/sh.

Code de retour

Chaque commande/fonction exécutée renvoie un code de retour (exit code, ou encore code de retour), qui indique l’état de réussite de la commande.
C’est un entier de 0 à 255.

Généralement, 0 signifie un succès de l’opération, et tous les autres nombres un échec.

On peut définir le code de retour d’un script ou d’une fonction avec les commandes return et exit.

return & exit

return et exit servent tous 2 à interrompre l’exécution, et renvoient la valeur passée en argument (ou 0 à défaut d’argument ; et modulo 256 pour exit).
La différence entre les 2 est que return va interrompre la fonction mais rester dans le script, alors que exit va interrompre l’ensemble du script.

Récupérer la sortie d’une commande

Permet de stocker dans une variable la sortie d’une commande (standard output, et non le code de retour ; donc ce qui est affiché dans le terminal en cas d’exécution interactive). C’est la “substitution de commande”, que l’on fait avec la syntaxe
var=$(command)

On voit aussi
var=`command`
mais la première syntaxe est recommandée (notamment pour de l’imbrication de substitution, voir cette page ).

Si on récupère la sortie d’une fonction, cela contiendra la succession de toutes les sorties des commandes de la fonction.

Le retour $? d’une substitution correspond au retour de la commande/fonction, et non au retour de l’affectation de la variable.

Quelques symboles spéciaux

https://stackoverflow.com/questions/5163144/what-are-the-special-dollar-sign-shell-variables

$# : le nombre d’arguments
$1 : premier argument ; $2 : le 2e argument, etc…
$? : code renvoyé par la dernière commande executée ; renvoie 0 si aucune commande précédemment executée dans ce contexte (au sein d’un script, ou d’une session bash)
$@ : liste sous forme de vecteur de tous les paramètres : {$1, $2, $3 …}
$$ : PID du shell actuel
$IFS : séparateur de champ (actuel, car peut être changé)
$0 : nom de la commande ou du script shell

[ et test

En shell, [ est une commande ; c’est un alias de la commande test.
Celle-ci renverra vraie si la chaîne fournie est non-nulle, ou bien si l’affirmation qui suit est vraie.

[[ est une spécificité bash, et ne fonctionne pas en sh.

Arithmétique

bash possède des fonctions d’arithmétique avancées, mais ce n’est pas le cas de sh.
En shell POSIX, on peut utiliser la command expr. Par exemple :

a=1
a=$(expr $a + 1)
echo $a

qui donne 2.
Il faut bien penser à mettre les espaces autour du symbole +

Pour voir la liste des opérateurs : man expr
ou cette page.

Fonction

Déclaration :

myfunction () {
  echo $1
  echo $2
  return 0
}

À défaut de code de retour explicitement spécifié, la fonction retournera le retour de sa dernière commande exécutée.
Les paramètres de position ($1, $2 etc) sont ceux de l’appel de la fonction.

Utilisation :
myfunction 1 2 3

EN bash, on peut spécifier le mot clé “function” avant le nom de la fonction, mais ceci n’est pas reconnu en POSIX shell.

Portée

Il semble que les variables définies dans une fonction restent accessibles même après la sortie de la fonction (les variables sont par défaut globales).

Par exemple :

myfunction () {
  echo $a
  b=2
}

a=1
myfunction
echo $b

affichera “1 2”.

À l’inverse,

myfunction () {
  echo $a
  local b=2
}

a=1
myfunction
echo $b

affichera uniquement 1, la variable b étant définie localement.

if

Sous la forme
if [ blabla ]; then echo YES; fi
la condition if sera validée si test blabla renvoie 0. Par exemple blabla est une chaîne non-nulle ; ou encore blabla est une opération logique qui est vraie (par exemple 1 -eq 1, ou "abc" = "abc").

Sous la forme
if command ; then echo YES; fi
la condition sera validée si la commande/fonction “command” renvoie 0.
La commande “command” sera exécutée, et sa sortie affichée si applicable.