Préparation Olinuxino A64 en serveur headless

J’ai acheté plusieurs A64-OLinuXino-2Ge8G-IND chez Olimex. Ils ont un processeur ARM 64 bits quad-core, avec 2Go de RAM (et 8Go de eMMC). C’est ce que j’ai trouvé de plus adapté à mes besoins d’auto-hébergement.

J’ai testé plusieurs images dessus, mesuré un peu les performances et listé quelques étapes pour qu’ils soient prêts à l’emploi pour mon usage.

Quelle image ou installeur utiliser ?

J’ai testé plusieurs possibilités pour faire tourner un Olinuxino A64 :

Installation d’une image

Copier l’image sur la carte micro-SD avec dd. Exemple :

sudo dd if=Armbian_5.87.1_Olinuxino-a64_Debian_stretch_next_5.1.4.img of=/dev/sdh

(attention à ne pas se tromper de nom de device : dans mon cas c’est /dev/sdh, mais ça dépend de votre ordinateur)

Insérer la carte SD dans l’appareil. Si vous avez le câble de debug USB https://www.olimex.com/Products/Components/Cables/USB-Serial-Cable/USB-Serial-Cable-F/, c’est le moment de le brancher (dans l’ordre vert-rouge-bleu, le bleu étant du côté de l’alimentation électrique) et de se connecter (avec putty ou autre) pour voir la console. Sinon, il faut le brancher sur le réseau, et trouver son adresse IP (via son bail DHCP, par exemple). Je n’ai pas essayé la sortie HDMI.

Se connecter avec root/olimex (image ubuntu) ou root/1234 (images armbian)

Créer un autre compte, appartenant au groupe sudo (NB : sur Armbian, c’est proposé automatiquement à la première connexion)

Agrandir la partition sur la carte SD pour utiliser tout l’espace disponible (NB : sur Armbian, c’est fait automatiquement au premier démarrage)

Changer la timezone et la locale :

sudo timedatectl set-timezone Europe/Paris
sudo locale-gen "fr_FR.UTF-8"

Performances

CPU

Les performances sont proches d’un Raspberry Pi 3, souvent légèrement meilleures.

Je n’ai pas fait tous les tests Phoronix, mais ceux que j’ai lancés indiquent des performances très légèrement meilleures sur les images armbian que sur l’image ubuntu :

    C-Ray 1.1
    Total Time - 4K, 16 Rays Per Pixel
    Seconds < Lower Is Better
    olinuxino-a64-2gb-ubuntu1604-from-olimex-kernel-3.10.104 .......... 2435 |=
    olinuxino-a64-2gb-debian-stretch-armbian-from-olimex-kernel-5.0.8 . 2424 |=


    FLAC Audio Encoding 1.3.2
    WAV To FLAC
    Seconds < Lower Is Better
    olinuxino-a64-2gb-ubuntu1604-from-olimex-kernel-3.10.104 .......... 353 |=
    olinuxino-a64-2gb-debian-stretch-armbian-from-olimex-kernel-5.0.8 . 353 |=


    OpenSSL 1.1.1
    RSA 4096-bit Performance
    Signs Per Second > Higher Is Better
    olinuxino-a64-2gb-ubuntu1604-from-olimex-kernel-3.10.104 .......... 60.27 |=
    olinuxino-a64-2gb-debian-stretch-armbian-from-olimex-kernel-5.0.8 . 58.20 |=

Chiffrement

Résultat de sudo cryptsetup benchmark sur l’image ubuntu :

# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       172463 iterations per second
PBKDF2-sha256     109226 iterations per second
PBKDF2-sha512      97814 iterations per second
PBKDF2-ripemd160  156038 iterations per second
PBKDF2-whirlpool   28006 iterations per second
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b    45,9 MiB/s    53,9 MiB/s
 serpent-cbc   128b           N/A           N/A
 twofish-cbc   128b           N/A           N/A
     aes-cbc   256b    47,4 MiB/s    51,4 MiB/s
 serpent-cbc   256b           N/A           N/A
 twofish-cbc   256b           N/A           N/A
     aes-xts   256b   272,5 MiB/s   275,3 MiB/s
 serpent-xts   256b           N/A           N/A
 twofish-xts   256b           N/A           N/A
     aes-xts   512b   240,9 MiB/s   241,0 MiB/s
 serpent-xts   512b           N/A           N/A
 twofish-xts   512b           N/A           N/A

Sur l’image Armbian fournie par Olimex :

# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       249660 iterations per second for 256-bit key
PBKDF2-sha256     463151 iterations per second for 256-bit key
PBKDF2-sha512     188864 iterations per second for 256-bit key
PBKDF2-ripemd160  143404 iterations per second for 256-bit key
PBKDF2-whirlpool   65667 iterations per second for 256-bit key
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b    36.1 MiB/s    38.6 MiB/s
 serpent-cbc   128b    23.5 MiB/s    25.6 MiB/s
 twofish-cbc   128b    35.0 MiB/s    38.1 MiB/s
     aes-cbc   256b    28.8 MiB/s    29.7 MiB/s
 serpent-cbc   256b    24.0 MiB/s    25.6 MiB/s
 twofish-cbc   256b    35.6 MiB/s    38.1 MiB/s
     aes-xts   256b    40.0 MiB/s    40.6 MiB/s
 serpent-xts   256b    25.8 MiB/s    27.2 MiB/s
 twofish-xts   256b    40.3 MiB/s    42.0 MiB/s
     aes-xts   512b    31.2 MiB/s    30.8 MiB/s
 serpent-xts   512b    26.3 MiB/s    27.2 MiB/s
 twofish-xts   512b    41.1 MiB/s    42.0 MiB/s

Et sur l’image Armbian fournie par Armbian :

# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1       240058 iterations per second for 256-bit key
PBKDF2-sha256     443560 iterations per second for 256-bit key
PBKDF2-sha512     181289 iterations per second for 256-bit key
PBKDF2-ripemd160  136818 iterations per second for 256-bit key
PBKDF2-whirlpool   61943 iterations per second for 256-bit key
#  Algorithm | Key |  Encryption |  Decryption
     aes-cbc   128b   293.3 MiB/s   346.7 MiB/s
 serpent-cbc   128b    23.7 MiB/s    25.6 MiB/s
 twofish-cbc   128b    35.1 MiB/s    38.8 MiB/s
     aes-cbc   256b   254.2 MiB/s   318.3 MiB/s
 serpent-cbc   256b    23.8 MiB/s    25.6 MiB/s
 twofish-cbc   256b    35.7 MiB/s    38.8 MiB/s
     aes-xts   256b   313.5 MiB/s   315.4 MiB/s
 serpent-xts   256b    25.1 MiB/s    26.2 MiB/s
 twofish-xts   256b    38.7 MiB/s    39.8 MiB/s
     aes-xts   512b   291.2 MiB/s   291.3 MiB/s
 serpent-xts   512b    25.4 MiB/s    26.2 MiB/s
 twofish-xts   512b    39.2 MiB/s    39.7 MiB/s

=> dans tous les cas, il faut utiliser aes-xts. Ca tombe bien, c’est l’algorithme par défaut, et le plus sécurisé actuellement.

cat /proc/crypto confirme qu’il y a de l’accélération matérielle sur l’image ubuntu et sur Armbian (mais pas sur la version fournie par Olimex : je leur l’ai signalé, j’espère qu’ils l’ajouteront). Ce n’est pas encore commité sur le kernel upstream, mais on peut espérer que ça le soit bientôt. Cf https://linux-sunxi.org/Mainlining_Effort et https://groups.google.com/forum/#!topic/linux-sunxi/JLpU9PqHzvc.

I/O disque

Tests de performance d’I/O disque en écriture avec dd if=/dev/zero of=test.img bs=64M count=1 oflag=dsync (tous les filesystems sont en ext4) :

microSD classe 10 dans port USB8 Mo/s
microSD classe 10 dans port microSD9 Mo/s
microSD rapide dans port USB10 Mo/s
microSD rapide dans port microSD19 Mo/s
Mémoire flash interne31 Mo/s

Démarrage sur la mémoire interne

Vu les performances de la mémoire interne, ça vaut le coup d’y mettre l’OS. Mais il vaut mieux mettre les données vivantes ailleurs (on peut remplacer une carte SD si elle lâche à cause d’un trop grand nombre d’écritures, mais c’est plus compliqué de remplacer la mémoire interne…)

L’outil armbian-config permet de transférer l’OS courant sur la mémoire interne (eMMC). Ca fonctionne parfaitement bien.

Problème : si on met une carte SD dans le lecteur (pour y stocker des données), il arrive que l’appareil essaie de démarrer dessus, n’y arrive pas et reste bloqué.

Solution donnée par le support de Olimex : il faut effacer à la main l’éventuelle partition de boot de la carte, pour qu’il n’essaie pas de démarrer dessus :

sudo dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=16 count=1

Changement d’adresse MAC

Par défaut, l’image armbian utilise l’adresse MAC 02:ba:7b:d5:c6:6f (en dur). Mais si on a plusieurs de ces appareils sur le même réseau, ça fait un conflit d’adresse MAC. Pour l’éviter, il faut modifier le fichier /boot/armbianEnv.txt pour que u-boot y trouve l’adresse que l’on souhaite :

ethaddr=xx:xx:xx:xx:xx:xx

Problème : par défaut, c’est verrouillé, on ne peut pas changer l’adresse MAC (message d’erreur dans la log de u-boot). J’ai donc demandé à Olimex s’ils pouvaient compiler u-boot avec l’option CONFIG_OVERWRITE_ETHADDR_ONCE, pour que ça fonctionne. Cf https://github.com/linux-sunxi/u-boot-sunxi. C’est a priori ce qu’ils ont fait, et c’est effectif dans la version Armbian_5.87.1_Olinuxino-a64_Debian_stretch_next_5.1.4 (pas dans la version précédente Armbian_5.79.1_Olinuxino-a64_Debian_stretch_next_5.0.8). Par contre, ils ont également activé une autre option qui change l’adresse MAC à chaque reboot : il devient donc vraiment nécessaire de la figer dans /boot/armbianEnv.txt.

Alternative : configurer l’adresse MAC dans l’OS, en éditant par exemple /etc/network/interfaces comme suit :

source /etc/network/interfaces.d/*
# Network is managed by Network manager
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
  hwaddress ether xx:xx:xx:xx:xx:xx

Consommation électrique

Sans activité, l’appareil consomme environ 1.1W, et le CPU est autour de 45°C (d’après armbian). Rappelons que l’appareil est fanless.

En pleine activité (4 coeurs du CPU à fond), il monte à 4W environ, et la température du CPU à 75°C.

Conclusions

AvantagesInconvénients
Image Ubuntu fournie par OlimexStable et éprouvée
Support complet du matériel
Officiellement supporté par Olimex
OS et kernel anciens (3.10)
Kernel avec des blobs propriétaires, et difficile à mettre à jour en cas de faille de sécurité
Image Armbian fournie par OlimexKernel très récent (5.2)
Support de Olimex
Encore jeune (voir les échanges avec le support sur les problèmes des versions précédentes dans https://olimex.wordpress.com/2019/03/08/a64-olinuxinogot-mainline-linux-kernel-5-0-images/)
Pas de chiffrement matériel
Il faut figer l’adresse MAC dans /boot/armbianEnv.txt pour qu’elle ne change pas à chaque reboot
Image Armbian fournie par ArmbianKernel récent (4.19)
Support communautaire de Armbian
Chiffrement matériel
Encore jeune (la version Armbian_5.69_Lime-a64_Debian_stretch_next_4.19.13 n’était pas stable, par exemple)
Il faut changer l’adresse MAC dans l’OS si on branche plusieurs appareils avec cette image
Installeur Debian BusterKernel récent (4.19)
Permet d’avoir un système plus léger et personnalisé (chiffrement, partitions, LVM etc)
Mises à jour de sécurité parfaitement gérées
Ne fonctionne pas encore
Debian Buster n’est pas encore finalisé, donc l’OS peut avoir quelques instabilités

Il n’y a pas de solution idéale pour l’instant. Pour mon usage, je laisse tomber l’image Ubuntu (trop ancienne). Tant que l’installeur Debian ne fonctionne pas, il reste les 2 images armbian, entre lesquelles il n’est pas facile de trancher pour l’instant (elles évoluent rapidement).

Au final, j’ai décidé… de ne pas encore décider ! J’ai plutôt opté pour m’appuyer sur Ansible pour savoir tout réinstaller facilement à l’identique, et d’utiliser les images Armbian.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *