Démarrer une debian ARM 64 sur un Raspberry Pi 4 depuis un disque dur externe
Objectif
Dans cet article je vais expliquer comment faire démarrer son Raspeberry Pi 4 directement depuis un disque dur externe USB. Et pour être totalement moderne, nous démarrerons une debian ARM64, au lieu de Raspberry Pi OS qui est devenu persona no grata.
Première étape, activer l’option boot on usb
Il faut commencer par se procurer une distribution dédiée au Raspberry, comme par exemple celle que vous pouvez construire vous même avec le projet pi-gen. On ne va pas utiliser cette distribution définitivement, mais uniquement pour mettre à jour et configurer le Raspberry Pi 4. Il faudra donc utiliser une carte SD, sur laquelle vous aurez installer cette distribution, et démarrer une première fois dessus.
La mise à jour du programme de démarrage du stocké dans la ROM du Raspberry
Pi est parfois nécessaire. En allumant le Raspberry sans carte SD, mais
connecté à un écran, vous devriez lire la version de l’Eeprom. Si la date
est inférieur au Sep 3 2020
, une mise à jour est nécessaire.
Pour mettre à jour la ROM, il vous faut, après avoir démarré avec la
distribution dédiée, installer le paquet rpi-eeprom
, puis lancer
rpi-eeprom-update -a
.
Après la mise à jour le deuxième rôle de cette distribution est de
configurer l’Eeprom pour autoriser le démarrage depuis un disque dur
externe. Le programme qui autorise cette configuration est
rpi-eeprom-config --edit
. Il faut changer la directive
BOOT_ORDER
. Plusieurs valeurs sont possibles. Le Raspberry Pi essaie de
démarrer depuis les différentes options données, de droite vers gauche par
priorité décroissante.
J’ai entré 0x41
comme valeur pour la directive BOOT_ORDER
. Cela signifie:
- Essaie de démarrer sur la carte SD (valeur
1
la plus à droite); - Si cela ne marche pas, essaie de démarrer sur le disque dur externe (valeur
4
).
Si j’avais configuré le BOOT_ORDER
à 0x242
, le Raspberry Pi aurait
essayé de démarrer, dans l’ordre:
- depuis la carte SD;
- depuis un disque dur externe
- depuis le réseau (valeur
2
).
Maintenant il ne nous reste plus qu’à installer une debian ARM64 sur un disque dur externe.
Installation de Debian ARM
Il existe un mini site web dédié aux images Raspberry PI construites par Debian. Les images de la distribution debian ARM64 les plus stables se trouvent ici.
La première chose à faire est de brancher un disque dur externe, de type USB3 de préférence, supportant l’uasp serait encore mieux. Ensuite on copie l’image sur le disque dur, exactement de la même manière que si c’était une carte SD.
Voici les instructions que je lance pour télécharger une image buster et la
copier sur un disque externe. Ces instructions sont valables pour les images
du 10 février 2021 (les plus récentes au moins de la rédaction de ce
billets) et pour un disque dur apparaissant en /dev/sdb
. Surtout
n’exécuter pas ces instructions sans les comprendre et sans changer la
valeur /dev/sdb
, au risque d’écraser toutes les données d’un disque dur
branché à l’ordinateur d’où vous les lancerez.
wget https://raspi.debian.net/verified/20210210_raspi_4_buster.img.xz wget https://raspi.debian.net/verified/20210210_raspi_4_buster.xz.sha256 sha256sum --check 20210210_raspi_4_buster.xz.sha256 xzcat 20210210_raspi_4_buster.img.xz | sudo dd of=/dev/sdb bs=64k oflag=dsync status=progress
Ensuite, il n’y a plus qu’à retirer la carte SD du Raspberry Pi1, brancher le disque dur et redémarrer votre framboise.
En guise de conclusion
Et voilà, votre Raspberry Pi 4 contient une debian ARM64 pur jus, et il démarre sur un disque dur externe, généralement plus fiable que les carte SD.
À partir de là, à vous de continuer. Vous avez maintenant à disposition tous les paquets debian, il y a de quoi vous occuper :-)
Notes de bas de page:
Ce n’est pas nécessaire si vous avez configurer le démarage sur disque dur externe avant le démarrage sur carte SD
Créer une touche <Multikey>
Le Besoin
Mon clavier sous x11 est configuré avec setxkbmap us intl
. Cela me permet:
- d’utiliser un layout qwerty, avec lequel je suis le plus à l’aise;
- de taper tous les lettres accentuées françaises, y compris en majuscule (Éh oui!) et le ß allemand.
Malheureusement il n’était pas possible d’entrer:
- le
œ
- le
·
ou•
pour l’écriture inclusive et faire enrager les reacs -
♥
pour envoyer de l’amour
La solution
Il faut activer la touche <Multi_key>
. Dans mon cas, étant donné que:
- J’utilise AwesomeVM et j’ai donc besoin de la touche windows,
- j’utilise la touche Alt Gr pour écrire
ß
,€
entre autres choses, - je ne crie jamais, et je n’ai donc presque jamais besoin de la touche capslock.
la solution consiste à utiliser la commande suivante: setxkbmap us intl
-option compose:caps
, qui convertit la touche capslock en touche compose
.
La liste des nouveaux caractères accessibles est disponible ainsi: cat /usr/share/X11/locale/en_US.UTF-8/Compose |grep ^\<Mul | less
1
Voici un tableau avec quelques exemples des caractères que l’on peut taper avec cette nouvelles touches:
1 | 2 | 3 | résultat |
---|---|---|---|
- | > | → | |
< | - | ← | |
: | ) | ☺ | |
: | ( | ☹ | |
. | - | · | |
. | = | • | |
N | o | № | |
? | ! | ‽ | |
< | 3 | ♥ | |
( | 123456789 - 20 | ) | ①②③④⑤⑥⑦⑧⑨ - ⑳ |
( | aAbBcC - zZ | ) | ⓐⒷⓑⒷⓒⒸ - ⓩⓏ |
- | - | . | – en dash |
- | - | - | — em dash |
# | q | ♩ | |
# | e | ♪ | |
# | E | ♫ | |
# | S | ♬ |
Notes de bas de page:
En gros. Certains caractères ne sont accessibles qu’avec des claviers étrangers (grecque, ou asiatique par exemple).
Vrac d’astuces
Git
L’opération de rebase avec git modifie l’historique d’une branche. Si pour une raison ou une autre on souhaite annuler l’opération, plutôt que de rejouer chaque commit de la branche depuis l’ancienne origine de la branche, il est possible d’utiliser la commande git-reflog
pour récupérer l’identifiant du commit
git reflog ; git reset --hard HEAD{@5}
Surveiller Mysql en mode débrouille
Voici une petite commande pour enregistrer tous les requêtes mysql qui durent plus de deux secondes, lorsque l’on n’a pas accès à des outils de monitoring plus évolué. En jouant sur l’intervalle de rafraîchissement de watch
on peut surveiller des commandes plus longues.
watch -t "echo 'select now(); SHOW FULL PROCESSLIST;' | mysql --raw >> ~/queries-log.out"
Notes: Cette commande récupère aussi les requêtes plus courtes, qui s’exécutent au moment où SHOW FULL PROCESSLIST
est appelé.
Ajouter une image dans un document pdf
Par exemple pour ajouter une signature dans un document pdf. Les paramètres passés à geometry
indique la taille et la position de l’image. La commande composite
est par le paquet imagemagick.
composite -density 300x300 signature.png -geometry 750x500+270+2950 document.pdf document-avec-image.pdf
Changer de version php tous les paquets php
Petit enchaînement de pipes pour mettre à jour tous les paquets php.
apt-get install `dpkg -l | grep php| awk '{print $2}' | sed 's/7\.3/7\.4/'`
Présentation de la programmation procédurale
Qu’est ce que la programmation procédurale
La programmation procédurale, aussi appelée génération procédurale, est la branche du développement logiciel dont l’objet est la création aléatoire d’un univers ou d’un objet virtuel. L’exemple typique, le plus connu, est celui du monde généré au début de chaque nouvelle partie Minecraft. Ce monde constitué d’îles, de plaines, de déserts, de collines, etc., bien que créé aléatoirement, possède une cohérence interne qui le rend réaliste, accessible: il n’y a pas de poissons dans les arbres, ni d’animaux de ferme dans les déserts chauds. Et ces derniers ne sont pas contigus à des zones froides.
La génération procédurale peut aussi créer des villes, des cartes, des donjons, des planètes, des plantes, des êtres vivants ou encore des objets construits par l’homme, comme des maisons, des voitures, ou des vaisseaux spatiaux. Pour juger un algorithme de programmation procédurale on se posera la question suivante: «est-ce que cet objet aurait être conçu par un humain?»
Présentation du project Diamond Map
Depuis quelques années je suis fasciné par ce domaine de l’informatique. J’ai donc réaliser un générateur de carte de hauteur, basé l’algorithme diamant carré. Cet algorithme impose un certain nombre de contrainte sur la taille de la carte. Elle doit être carré, et la taille d’un côté doit être une puissance de deux plus un.
Mon implémentation suit à la lettre l’algorithme. La seule partie originale de mon travail a été le choix des couleurs pour représenter les différentes altitudes (et profondeurs): le blanc pour la neige des sommets et le noir pour les abysses des océans. Entre les deux, des roches, de la forêt, des plaines, du sable de plage, l’écume des vagues, et l’azur de la mer.
Le résultat est assez joli. Même si parfois, hasard oblige, la carte ne contient que la mer, ou au contraire, que le vague sommet marronnasse d’une montagne.
Trucs et astuces pour commencer 2021
Lancer plusieurs instructions make en parallèle
Après un `aptitude install parallel` voici comment exécuter en même temps deux cibles.
parallele make ::: clear-cache build-css
Grep avec des chaînes binaires
Très utile pour les `dumps` de tables contenant du texte binaire, résultat la fonction encode
(cf https://mariadb.com/kb/en/encode/)
grep -a pattern sql-dump.sql > extract.txt
Composer
# because composer will never downgrade with `require` composer require --no-update composer update composer why package-name # error in json? composer validate
Docker compose get an ip
Pour récupérer l’adresse IP du container `app` appartenant à un `docker-compose`.
docker inspect \ --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \ `docker-compose ps -q app`
Bash
Lire le contenu d’un fichier csv, sans la ligne d’entêtes
cat toto.csv | tail -n +2
Awk
Utiliser awk
pour générer un faux email dans un fichier csv incomplet (spécial dédicace aux clients qui fournissent des fichiers csv incomplets)
awk -F ';' '{print $1,$2,$3,$4,$5,$6,$7,$8,$9,"fake-"$1"@null.io",$11,$12,$13}' OFS=\;
Mysql
Générer des prix aléatoires dans une colonne:
update oxarticles set oxprice= round(round(RAND() * 10, 2)*10,2) ;