10 Oct 2017, 00:00

Élements de démarrage sous OSX

Préférences système -> Utilisateurs -> Ouverture

/Library/LaunchAgents et ~/Library/LaunchAgents

/Library/StartupItems

/Library/LaunchDaemons

/var/db/launchd.db/

Pour consulter : launchctl list |more

14 Sep 2017, 00:00

Carte SD non reconnue si branchement à chaud

J’ai sur ma tour un lecteur de carte SD USB qui, depuis Stretch, ne monte plus automatiquement les cartes SD à la volée. Celles-ci sont bien lisibles lorsqu’elles sont déjà insérées lors du boot, mais l’ejection du media est définitive.

La solution, trouvée ici est d’ajouter le paramètre suivant à la ligne GRUB_CMDLINE_LINUX_DEFAULT= du fichier /etc/default/grub :
GRUB_CMDLINE_LINUX_DEFAULT="block.events_dfl_poll_msecs=2000"

Il faut ensuite lancer sudo update-grub pour actualiser le fichier de conf.

Si on veut appliquer le changement sans rebooter, on peut aussi entrer le paramètre 2000 au fichier /sys/module/block/parameters/events_dfl_poll_msecs

31 Aug 2017, 00:00

Identifier si une session est ouverte sous Wayland ou X11

Il suffit de taper la comande suivante : loginctl show-session $XDG_SESSION_ID -p Type

13 Mar 2017, 00:00

Installer Windows 8.1 x64 sur un disque externe USB3

Le tuto suivant a pour but d’installer Windows 8.1 sur un disque externe. En effet, bien que ce soit impossible via une install traditionnelle (par DVD ou clé USB), il est possible de déployer une install Windows sur un disque externe via l’utilitaire DISM, et le disque acceptera alors de booter.

Il est probable, mais non testé, que ce tuto fonctionne avec Windows 10, et il est adaptable pour Windows 7 (avec l’utilitaire Imagex.exe au lieu de DISM).

Prérequis :

  • Un DVD d’install de Windows 8.1 x64 (ou une image montée)
  • Un disque externe USB3 (ce devrait fonctionner en USB2, mais nous perdons beaucoup, beaucuop de performances). TOUTES LES DONNÉES PRÉSENTES SERONT EFFACÉES
  • Un système Windows 8.1 x64 en cours de fonctionnement

Etapes (penser à adapter les lettres des commandes si nécessaire) :

  • Commencer par monter le DVD d’install de Windows 8.1 x64. Dans mon exemple, il sera monté sur le lecteur G:
  • Lancer une invite de commande en tant qu’administrateur
  • Dans mon cas, j’ai un DVD qui contient à la fois l’édition Core et Pro. Il faut commencer par identifier les index de ces éditions via la commande
    dism /get-wiminfo /wimfile=G:\sources\install.wim
    Souhaitant installer la version Pro, j’utiliserai l’index 1.
  • On lance ensuite la commande diskpart pour partitionner le disque externe.
  • Avec
    list disk
    on identifie le bon disque. Dans mon cas, c’est le disque 1. D’où :
    select disk 1
    puis
    clean
    qui va supprimer toute la table de partition.
  • On crée une partition de boot en FAT32, ayant l’avantage d’être accessible aussi pour les Mac :
    create partition primary size=350
    puis
    format fs=fat32 quick
  • On la rend bootable via
    active
    puis on lui donne une lettre via
    assign letter=B
  • On crée la partition contenant le système Windows lui-même :
    create partition primary
    puis
    format fs=ntfs quick
    puis
    assign letter=Z
  • On quitte Diskpart via exit.
  • On va ensuite déployer l’image Windows sur la aprtition assignée en Z via
    dism /Apply-Image /ImageFile:G:\sources\install.wim /Index:1 /ApplyDir:Z:\
    Adapter l’index repéré précedemment. Cela devrait mettre quelques minutes, puis apparaîtra le message “L’opération a réussi”.
  • On copie les fichiers de démarrage via
    bcdboot Z:\Windows /s B: /f all
    Le paramètre /f sert à spécifier le type de démarrage. Avec ALL, on install aussi bien un boot BIOS qu’un boot UEFI.

Il n’y a plus qu’à démarrer sur le disque externe ! (en espérant que le BIOS/UEFI de votre pc soit suffisamment clair et souple pour permettre le démarrage sur n’importe quel disque, y compris externe, ce qui n’est pas toujours gagné…)

Sources : Article sur Slice42 et article sur Bleeptobleep

06 Dec 2016, 00:00

Mise en veille de l'écran récalcitrante

Il arrive, sous Linux, particulièrement après une install neuve ou bien une upgrade du système, que l’écran se mette en veille au bout d’un certain temps d’inactivité, quand bien même l’économiseur d’écran et l’extinction d’écran sont désactivés. Ceci est dû à la fonction DPMS de l’écran, qui se gère de manière distincte des 2 réglages précédents.

Pour la gérer, on utilise le programme xset. Pour sonder les paramètres actuellent en usage, on utilise xset q. Il est assez probable que les lignes suivantes apparaissent :

DPMS (Energy Star):
  Standby: 600    Suspend: 600    Off: 600
  DPMS is Enabled
  Monitor is On

Si on souhaite simplement désactiver dpms, il suffit de lancer xset -dpms, et les soucis de mise en veille intempestive de l’écran devraient disparaître ! Il est bien sûr possible de gérer les paramètres plus finement avec la commande xset.

06 Dec 2016, 00:00

Trouver des fichers en direct download grâce à google

Il suffit de faire une recherche google de ce type :

"nom a chercher" -inurl:(htm|html|php) intitle:"index of" +"last modified" +"parent directory"

Si on trouve une adresse intéressante, il suffit ensuite de lancer

wget -c -r --no-parent http://adresse-interessante.com/folder/

pour récupérer l’ensemble des fichiers (avec un peu de tri à faire)

18 Sep 2016, 00:00

Recherche et suppression de doublons avec fdupes

Suite à un usage parallèle et complètement désorganisé de 2 disques (appelés ici arbo1 et arbo2), ces derniers contiennent en gros les mêmes données, mais la version la plus récente d’un document peut se trouver dans arbo1 ou dans arbo2.

Je souhaite donc, pour simplifier le travail de fusion de ces 2 dossiers (et mise en place d’une sauvegarde correcte ;) )à supprimer tous les fichiers de l’arborescence 2 qui sont déjà existants et identiques dans l’arborescence 1.

La première étrape va consister à s’assurer qu’il n’y ait aucun doublon dans l’arbo1 elle-même, puis dans l’arbo2 elle-même. Nous utiisons pour ça fdupes, inclus dans les dépôts Debian, qui liste les fichiers dupliqués via vérification md5.

D’abord, nous les listons :

fdupes -r ./arbo1

Selon la quantité de doublons nous pouvons choisir la version à conserver à la main, via le paramètre -d, ou bien supprimer le prompt et ne garder que la “première” occurence, en ajoutant l’option -N. Par exemple, pour ne pas s’embeter :

fdupes -rdN ./arbo1

Nous faisons la même opération dans l’arborescence 2

fdupes -rdN ./arbo2

Ainsi, nous sommes sûrs que s’il reste des fichiers dupliqués, il y aura au moins une occurence du fichier dans chacune des arborescences, les doublons locaux étant supprimés. Nous allons donc pouvoir utiliser fdupes sur les 2 arborescences en même temps, et supprimer automatiquement celles situées dans arbo2. J’ai préféré utiliser grep avec le chemin souhaité pour isoler les fichiers à supprimer, plutôt que d’utiliser le paramètre -f qui considérait comme “première occurence” un coup un fichier de arbo1, un coup un ficher de arbo2.

D’abord on liste uniquement les fichiers situés dans arbo2 (mais qui existent à l’identique dans arbo1 ) :

fdupes -r ./ | grep './arbo2'

Les guillemets simple autour de arbo2 permettent de gérer si le dossier comporte un espace.

Enfin, nous pouvons les piper avec la commande rm, via l’intermédiaire de read qui permet de prendre en compte les noms de fichier/dossier contenant des espaces :

fdupes -r ./ | grep './arbo2' | while read f; do rm "$f"; done

Ainsi, tous les fichiers subsistants dans “arbo2” sont des fichiers uniques, n’existant pas dans arbo1, ou bien pas à la même version, et qu’il faudra donc trier manuellement (en tout cas dans le cas ci-présent d’absence totale d’organisation).
Pour simplifier ce tri, on peut également supprimer tous les répertoires vides de arbo2 via cette commande :

find './arbo2/' -type d -empty -print -delete

18 Sep 2016, 00:00

Utilisation de ddrescue pour dumper un disque en train de lâcher.

GNU ddrescue est un utilitaire conçu pour dumper intelligemment des disques ou partitions (ou autres périphériques de bloc), en sautant de zone, repartant de la fin du disque lorsqu’il rencontre une erreur ou des zones lentes, et y revenant plus tard, lorsque les secteurs encore lisibles ont été récupérés. Ce paragraphe de la page de man explique en détail l’algorithme utilisé (trimming, scraping etc).

Je dois beaucoup de ma compréhension du logiciel à ce très bon thread sur linuxfr

On commence par installer le soft, et l’interface graphique qui permet de surveiller l’avancement, avec des jolis petits carrés de couleur.

sudo aptitude install gddrescue ddrescueview

On réfléchit à si on souhaite dumper le disque complet, ou bien une partition. Dans cet exemple, une partition. Le support qui recevra le dump doit bien sûr être plus gros que le support source.

Première passe :

sudo ddrescue -n -f -b 512 /dev/sdi1 ./file.img mapfile

L’option -n dit à ddrescue de ne pas scraper les secteurs qu’il n’arrive pas à lire. Si j’ai bien compris, ça permet en gros de ne pas s’acharner maintenant sur ce qui n’est pas lisible.
L’option -f est inutile ici, car on écrit dans un fichier. Elle est cependant nécessaire si l’output est un block device (disque ou partition), c’est un garde-fou pour éviter d’écraser une partition par erreur.
L’option -b sert à spécifier la taille physique de secteurs du dique. C’est souvent 512, et c’esla valeur par défaut, mais il faut vérifier sur le disque en question (fdisk -l).
Le journal de la récupération est écrit dans le fichier mapfile précisé (on peut mettre le nom qu’on souhaite).

Si on veut cibler la récupération de données, par exemple si on a peu de données sur un gros disque, et qu’on suspecte qu’elles soient au début du disque, on peut spécifier une position de départ avec -i et une taille à couvrir par la recherche avec l’option -s. Par exemple :

sudo ddrescue -n -f -b512 -i0 -s30GiB /dev/sdi1 ./file.img mapfile

pour forcer le départ du début du disque et ne tester que les 30 premiers gibioctets.

On peut surveiller l’avancement grace à ddrescueview, si on ouvre mapfile.

Une fois que c’est fini, on lance la 2ème passe :

sudo ddrescue -d -r -1 -f /dev/sdi1 ./file.img mapfile

L’option -d dit à ddrescue d’utiliser des accès directs au disque, en shuntant le cache du noyau, permettant dans certains cas une meilleure lecture. L’option -r -1 dit à ddrescue d’essyer indéfiniment la lecture sur les secteurs qu’il n’arrive pas à lire, avant de passer au suivant. On peut aussi passer un entier positif en argument, pour un nombre de fois (par exemple -r3).
Lors de cette phase, les secteurs seront “scrapés”, permettant soit leur récupération, soit leur classement en secteurs defectueux.

Durant la récupération de donées qui sert de support à cet article, j’ai été conronté à un autre problème : bien que toujours branché et detecté par l’OS (sdi), le disque s’est complètement arrêté de répondre. J’avais donc récupéré environ 100 Go de la partition, dont quelques secteurs en état “non-trimmed”, mais les 400 Go restant ont été classés d’office “failed”, chouette surprise au réveil.
Après avoir débranché le disque, l’avoir laissé reposer quelques minutes, je l’ai branché et il est redevenu lisible. Dans le but de limiter les accès, j’ai voulu conserver les 100 Go de données récupérées, tout en forçant ddrescue à repasser sur les zones marquées “failed”. Le paramètre -M sert dans ce cas, en marquant les blocs “failed” comme “non-trimmed”, et ils seront donc relus lors du processus. Ça donne :

sudo ddrescue -M -n -f /dev/sdi1 ./file.img mapfile

On peut aussi utiliser le paramètre -A, qui marque tous les blocs qui n’ont pas été lus avec succès comme “non-tried”. Ceci aurait cependant fait relire les secteurs sur lesquels il avait déjà buté avant que le disque arrête de répondre et qui avaient été marqués “non-trimmed” à raison.

Enfin, j’ai eu le cas d’un disque qui avait très peu de secteurs défectueux, mais dont la lecture était extrêmement lente, entre 6 et 10ko/s, probablement à cause de défaillances électroniques. Suite à la lecture de ce post, j’ai pu réduire le timeout et le error-handling timout du disque grâce aux commandes suivantes, en root :

echo 1 > /sys/block/<deviceName>/device/timeout
echo 1 > /sys/block/<deviceName>/device/eh_timeout

Ce qui m’a fait passer à une moyenne de 30ko/s, avec seulement 10 jours de récupération de données :D

14 Sep 2016, 00:00

Packages utiles après install Jessie
# environnement de bureau 
lightdm mate-desktop-environment simple-scan system-config-printer caja-open-terminal network-manager-gnome pulseaudio pavucontrol paprefs ffmpegthumbnailer

# utils
sysvinit-core  # pour se passer (en bonne partie) de systemd
hplip firmware-realtek firmware-ralink firmware-brcm80211 firmware-linux anacron firmware-iwlwifi firmware-samsung python-gpgme gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly ntfs pepperflashplugin-nonfree ttf-mscorefonts-installer unrar libmp3lame0 lame build-essential linux-headers-amd64

# softs
libreoffice libreoffice-l10n-fr chromium chromium-l10n pepperflashplugin-nonfree wine vlc asunder clementine gparted

17 Jul 2016, 00:00

Généralités réseau sous Linux

Depuis stretch, la commande ifconfig n’est plus installée par défaut. Pour la remettre :

sudo aptitude install net-tools

ping

sudo apt install iputils-ping
pour avoir la commande ping4.

On peut spécifier l’interface de départ d’une requête ICMP via l’option -I , par exemple

ping -I 10.88.2.1 10.88.0.64

dig

Permet de vérifier la résolution des noms de domaine.
Pour l’installer : sudo apt install dnsutils.

On peut demander une résolution simplement avec :
dig example.org

Par défaut, dig renvoie le champ A s’il existe, et le champ SOA (Start Of Authority) si le domaine demandé n’existe pas.
On peut demander un champ précis en le spécifiant :
dig MX example.org

On peut spécifier un serveur DNS à interroger avec :
dig @1.2.3.4 example.org
On peut demander une résolution inverse :
dig -x 1.2.3.4

On peut aussi demander une résolution inverse avec l’adresse IP inversée, et le suffixe in-addr.arpa, mais il faut alors spécifier le champ PTR :
dig PTR 4.3.2.1.in-addr.arpa

Test des ports ouverts

Avec netcat :
sudo apt install netcat ## dummy package for netcat-openbsd
puis
nc -z -v example.org 80
ou
nc -z -v -u example.org
pour de l’UDP (ne semble pas indiquer de message d’erreur en cas d’échec ; met environ 3s à conclure à un test réussi ; on peut passer l’option -w 1 pour n’attendre qu’une seconde)

Nom des interfaces réseau

Depuis Stretch, udev possède un mécanisme de noms prédictifs d’interfaces réseau, qui devient activé par défaut, et qui nous donne des noms de type enp6s0. Ceci peut se désactiver via un paramètre à donner à grub dans le fichier /etc/default/grub :

GRUB_CMDLINE_LINUX_DEFAULT="net.ifnames=0 biosdevname=0"

Source (qui explique plusieurs mécanismes réseau)

Une fois ce mécanisme supprimé, nous pouvons choisir le nom “standard” (eth0) que udev donnera aux interfaces réseau via le fichier /etc/udev/rules.d/70-persistent-net.rules

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="11:22:33:44:55:66", NAME="eth-motherboard"

Il suffit de modifier l’adresse mac et le nom souhaité pour qu’ils soient opérationnels au prochain boot.
(il peut éventuellement être nécessaire de update-initramfs -k all -u ?)

Interaction de Network-Manager avec /etc/network/interfaces

Depuis quelques versions, Network-Manager gère les connexions qui ont été fixées dans /etc/network/interfaces. Ceci peut s’avérer perturbant si on a besoin d’une connexion complètement fixe en parallèle de NM (par exemple pour du wifi en réseau secondaire). Ce comportement peut se désactiver. Pour ceci, il faut que le fichier /etc/NetworkManager/NetworkManager.conf contienne ceci :

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

Reconfiguration d’une interface réseau

Il m’est arrivé qu’une interface refuse de se reconfigurer selon les paramètres du fichier /etc/network/interfaces. La commande service networking restart renvoyait, de mémoire, “Interface non configurée”. Pareil avec ifup, ifdown.
Finalement, le problème a été résolu grâce à la commande

ip addr flush dev enp4s0

enp4s0 étant évidemment l’interface posant problème.

Création d’une interface virtuelle (dummy)

Cas simple

echo dummy >> /etc/modules Au chargement du module, un périphérique dummy0 est automatiquement créé, avec une adresse MAC aléatoire.

Si on veut nommer soi-même le périphérique

Comme l’adresse MAC change à chaque boot, on ne peut pas utiliser la méthode via Udev.
On peut donc créer un script qui va créer l’interface, et la renommer, et même changer l’adresse MAC

#!/bin/sh

ip link add dummy0 type dummy
ip link set name my-dummy dev dummy0
ip link set my-dummy address 02:01:02:03:04:08

Ce script peut être appelé manuellement, au boot, ou via le paramètre “pre-up” dans le fichier /etc/network/interfaces

Bridge via le fichier /etc/network/interfaces

Il faut déjà installer le paquet bridge-utils :
sudo apt install bridge-utils

Exemple pour une interface TAP (OpenVPN) :

auto my-bridge
iface my-bridge inet dhcp
    bridge_ports eth0 tap0
    pre-up openvpn --mktun --dev tap0
    bridge_hw 01:02:03:04:0:06 # non obligatoire
    post-down openvpn --rmtun --dev tap0
    allow-hotplug eth0

Exemple de pont entre une carte physique et une carte virtuelle

auto my-bridge
iface my-bridge inet static
    bridge_ports eth0 dummy0
    address 10.0.0.1
    netmask 255.255.255.0
    network 10.0.0.0
    broadcast 10.0.0.255
pre-up ip link add dummy0 type dummy
post-down ip link delete dummy0

Les interfaces réseau utilisées n’ont pas besoin d’être mentionnées ailleurs dans le fichier.
La mention “auto” sert à démarrer automatiquement la connexion. Si elle n’est pas mentionnée, il faudra ifup my-dev

Configuration sysctl

Pour que le système accepte de transférer les paquets d’un réseau vers un autre (si le poste est conecté à 2 réseaux), il faut activer le forxard IPv4. On peut le faire à la volée avec sudo sysctl -w net.ipv4.ip_forward=1, et le rendre persistent avec la commande (en root) echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.d/10-network.conf.

Pour désactiver l’IPv6, echo net.ipv6.conf.all.disable_ipv6=1 >> /etc/sysctl.d/10-network.conf.