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.

Sommaire

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

Edité le 27/02/2021 : apparemment, certaines séries d’Olinuxino A64 ont eu ce problème d’adresse MAC identique (et je suis tombé dessus). Mais ça a été corrigé depuis, sur les séries récentes.

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 :

# 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.

9 réflexions sur « Préparation Olinuxino A64 en serveur headless »

    1. Je n’ai pas fait de véritable benchmark, mais voici au moins quelques éléments préliminaires (je n’ai pas encore eu l’occasion des les vérifier « en production »).
      Le processeur A64 est un quad-core alors que le A20 est un dual-core. Si le cas d’usage sait exploiter ces multiples coeurs, on a donc 2 fois plus de capacité.

      Mais, même en mono-thread, le processeur est plus rapide.
      En lançant https://github.com/odan/benchmark-php (en pur PHP, sans MySQL), cela prend 6.9s sur A20, et 4.5s sur A64.
      L’encodage FLAC de la suite Phoronix (qui est mono-thread) prend 535s sur A20 (alors qu’il prend 353s sur A64).
      Ce n’est pas forcément généralisable à tous les cas d’usage mais, sur ces 2 tests (pourtant très différents), le A64 apporte un gain de performance du même ordre : un temps de traitement 35% plus court.

      A vérifier en usage réel (je n’y suis pas encore)

  1. Bonjour,
    Je voulais vous remercier. Grâce à vous j’ai trouvé une image armbian fonctionnelle pour mon olinuxino-A64-2Ge8G-IND (les dernières images proposées par le site d’armbian ne prennent pas en charge l’usb, et je n’arrivais pas à configurer la prise en charge vidéo sur l’image ubuntu d’olimex).
    Ce n’est pas exactement l’objet de votre article, mais sachez que qu’il a été très utile.
    Pour la fixation de l’adresse mac, est-ce vraiment important de le faire (puisque du coup j’aurai sans doute ce problème)?
    Encore merci,
    cordialement,

  2. Bonjour,
    Merci pour l’info. Ces images ne sont visiblement pas encore prêtes. Connaissez-vous une image qui aurait déjà une véritable accélération graphique ?
    Les dernières images du site armbian ne supportent pas l’usb, j’ai lutté en vain pour trouver une config pour les images armbian proposées par olimex, et l’image olimex (ubuntu), même si vous dites qu’elle comprend déjà un support complet du matériel, n’arrive pas à lire de simples vidéos sans lag.
    Pardon si ce n’est pas le lieu, n’hésitez pas à supprimer mon commentaire, ou à me rediriger si cela a été traité ailleurs.

    1. Ces dernières images ne sont pas parfaites, mais elles ne sont pas si loin d’être prêtes.
      Je ne les utilise qu’en mode serveur headless, je n’ai jamais branché d’écran dessus donc n’ai jamais testé l’accélération graphique.
      Mais elles mériteraient que vous les testiez, car elles utilisent un kernel récent.

      Pour info, Olimex a sorti à un moment des pré-versions de kodi tournant sur A64 (avec accélération graphique) : https://olimex.wordpress.com/2019/12/04/kodi-pre-build-images-are-now-on-on-our-ftp-a20-hdmi-audio-patches-will-be-ready-soon/ , mais elles ne bootaient hélas pas sur notre version de l’appareil (voir mon commentaire sur leur article de blog), et les liens vers les images ne fonctionnent plus…

      1. Bonjour,
        J’avais déjà testé les images libreelec-kodi, mais elles ne correspondent pas exactement à l’utilisation que je recherche. En revanche, elles tournent maintenant, et sont absolument parfaites pour la lecture vidéo et la gestion matérielle en général. C’est d’ailleurs assez impressionnant de fluidité.
        L’image qui tourne sur le olinuxino-A64-2Ge8G-IND est celle là:
        LibreELEC-A64.arm-9.2-devel-20191209113145-dd8e12d-a64-olinuxino
        téléchargeable sur ftp://staging.olimex.com/Allwinner_Images/a64-olinuxino/linux/3.LibreELEC_KODI_images/
        Je vais regarder android (même si ça m’étonnerait que j’aime ça), et puis une image
        un peu planquée, a64olinuxino_ubuntu_16.04.3_20180523_rel5 qui est indiquée sur la page de vente du produit mais bizarrement…
        Merci pour vos conseils,

Répondre à mossroy Annuler la réponse

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