Archlinux ARM sur Cubieboard2

La distribution ArchlinuxARM est une distribution pour ARM dérivé de l’excellent Archilinux, elle même dérivée de je ne sais plus quoi. Elle a été conçu pour s’adapter avec une relativement bonne précision au matériel utilisé. (dans le cas d’ARM un noyau/firmware par carte et 3 versions des paquets pour ARMv5, ARMv6h (h pour hardfloat) et ARMv7h (hardfloat). Ce qui en fait, à ma connaissance, la seule distribution aussi bien adaptée. Pour une installation rapide pour un ordinateur de bureau, la démarche est un peu plus fastidieuse, à moins d’y apporter ces propres scripts, où d’utiliser, des distributions facilitant l’installation, comme Antergos sur plate-forme x86.

Entre le début de la rédaction de cet article (le 17 juin) et aujourd’hui, j’ai beaucoup progressé sur la compréhension du fonctionnement de la NAND. J’ai donc :

  • Réussi à créer une NAND qui fonctionne à partir d’Archlinux ARM, en bidouillant avec plusieurs images.
  • Découvert qu’Archlinux est réellement une distribution géniale, d’autant plus en version ARM, je publierais probablement prochainement une image SD pour l’installer automatiquement sur la NAND, avec le noyau 3.4.90, très stable et 3 Go de libre sur la NAND :). (je vais essayer de tenter un noyau 3.16 prochainement)

Sections

  1. Introduction
  2. Quelques spécificités d’Archlinux
  3. Avantages aujourd’hui
  4. Installation sur Cubieboard2
  5. Archlinux sur architecture x86, Antergos
  6. iBus sur Archlinux
  7. Quelques spécificités d’Archlinux

    • Son système de mise à jour n’est pas basé sur une grosse version tous les n mois, mais plutôt sur une mise à jour partielle et régulière, principalement à chaque sortie de nouvelle version d’un logiciel, où lorsque des patchs de sécurités y ont été ajoutés. Cela permet de la maintenir et de la faire avancer progressivement. En quelques mois d’utilisation tout c’est toujours bien passé. Les changements réguliers liées à ces mises à jour pourraient effrayer au premier regard, au vu des problèmes soulevés par d’autres distribution lors de mise à jour, mais dans la pratique, cela semble mieux fonctionner au contraire. A voir sur le long terme…
    • Le gestionnaire de paquet est pacman, voir ici pour l’équivalence des commandes par rapport à apt-get, emerge, yum ou zypper.
    • Un dépôt appelé AUR (Archlinux User Repository) permet à des utilisateurs tiers de proposé des applications pas encore validées par la communauté. On les installe à l’aide de yaourt.

    Avantages aujourd’hui

    En raison de son système de mise à jour, Archlinux utilise des logiciels très récents. Parmi ceux-ci, on peut citer, en octobre 2014 :

    • systemd (le système qui réunit init/ibus/udev, etc..), une petite merveille, qui permet de réduire les temps de boot, d’unifier différentes parties du système de démarrage, de remplacer un énorme paquet de scripts shell par quelques binaires, réduisant ainsi les forks de process (réduisant d’autant plus accès disques, allocations mémoires et autre appels systèmes relativement lourds), ainsi que les risques de sécurités liés (une présentation à l’annuel conférence de sécurité du CCC annonce, que cela bloque partiellement la NSA).
    • Wayland, qui dé-ralentit le bureau en permettant des accès plus direct à l’API d’affichage, une meilleure centralisation, des pingpong entre les applis et le serveur en moins, une meilleur synchronisation avec l’affiche, bref que du bonheur. Si une grande partie des applications et boîtes à outil graphiques on fait le pas, ça n’est pas encore le cas de toutes.
    • Mesa 3D 10.3 avec le support de LLVMpipe, qui le rend très efficace dans l’accélération 3D purement logicielle (bien pratique sur ARM, si on veut de la stabilité opensource, puisque le seul auteur du pilote libre Mali (Lima Driver), qui ne voulait déjà pas l’intégrer à l’arborescence de Mesa, semble avoir abandonner le projet depuis 2 ans).
    • Dernières versions de applications serveur : Noyau 3.16 (3.4.90 pour arm/cubieboard2), OpenSSH 6.6 (annonce de 6.7 aujourd’hui), Nginx 1.6.2, nodejs 0.10.32, ruby 2.1.3, php 5.6.2, mysql (disponible seulement en versions percona-5.6.21 et mariadb-10.0.15, plus le mysql d’Oracl plus maintenu).
    • Dernières versions des bureaux : Gnome 3.14, Cinnamon 2.2.16 (que j’aime bien, GTK3 et empreinte mémoire similaire à XFCE), XFCE 4.10 (ubuntu à une avance sur ce point avec ses patchs, notamment sur la syncro verticale), KDE 4.14…
    • Dernières versions des applications liées à la productivité : Blender (2.72, mais pas encore sur ARM), ffmpeg 2.4.2 (avec support vp9/h.265), gimp 2.8.14, Cairo 1.14 (arrivé au moment où je met à jour l’article, en octobre 2014), ibus 1.5.9, firefox 33, chromium 38, VirtualBox 4.3.18, qemu 2.1.2.

    Pour aller plus loin : comparatif avec les autres distributions dur le wiki officiel

    Installation sur Cubieboard2

    J’ai quasiment tout préparé pour pouvoir faciliter l’installation d’une NAND toute belle sous Arch Linux top-moumoute avec, une fois la base du système bootable installé sur la NAND, une partition système, tenez vous bien, de 3,8 Gio, avec 616 Mio utilisés et 3 Gio de libre.

    /dev/nandb      3.8G  616M  3.0G  18% /mnt/nandb

    Vous pouvez choisir entre la procédure automatique :

    Je suis en train de faire un petit script en shell qui va s’occuper de tout ça pour la Cubieboard2 (installation sur NAND).

    Ce qu’il faut savoir : le premier Méga octet (512 octets * 2048 secteurs) que ce soit sur la carte SD et la NAND, contient la table des partitions et le boot initial.

    Pour le dumper :

    dd if=/dev/xxx of=dump_bootblock.bin bs=512 count=2048

    Pour le remettre :

    dd of=/dev/xxx if=dump_bootblock.bin

    Remplacer /dev/xxx par /dev/sdX (X=lettre de l’unité) pour la carte SD et par /dev/nand pour la NAND.

    Archlinux sur architecture x86, Antergos

    Enfin, j’ai particulièrement apprécié, pour les architectures x86, la distribution Antergos, basée sur Archlinux, mais n’utilisant malheureusement pas les dépôts officiels, il peut y avoir quelques jours de décalage dans les versions de paquet et le support est un peu moins bon que chez les gens d’Archlinux, avant tout passionnés. Il ne vaut mieux pas embêter les utilisateur d’Archlinux avec les problèmes d’Antergos, qui pourrait ne pas être présent dans Archlinux. Cela risquerait de les froisser. Elle est prête à l’emploi, avec les extensions invité Virtualbox pour tester en live dans de très bonnes conditions, et un joli design et tout se fait relativement facilement et automatiquement, contrairement au Archlinux de base qui oblige à apprendre d’avantage les bases du système. Le seul point noir que je lui ai trouvé (par rapport à des distribution comme Ubuntu) : ibus (servant à la saisie des langues complexes) n’est pas démarré par défaut, il est conseillé de bidouiller les scripts d’initialisation du compte.

    iBus sur Archlinux

    D’après la doc officielle d’Archlinux, il est conseillé de bidouiller des scripts d’initialisation du compte, en ajoutant dans le fichier ~/.xprofile :

    export GTK_IM_MODULE=ibus
    export XMODIFIERS=@im=ibus
    export QT_IM_MODULE=ibus
    ibus-daemon -drx
    

    Ubuntu (et probablement Debian/etc/X11/xinit/xinput.d/ibus :

    # start IBus
    # vim: set sts=4 expandtab:
    
    # start IBus daemon
    #/usr/bin/ibus-daemon --daemonize --xim
    XIM=ibus
    XIM_PROGRAM=/usr/bin/ibus-daemon
    XIM_ARGS="--xim"
    
    # set variables for the plain XIM
    XMODIFIERS=@im=ibus
    
    GTK_IM_MODULE=xim
    # use immodule only when available for both GTK 2.0 and 3.0
    IM_CONFIG_MARKER2=0
    for IM_CONFIG_MARKER in /usr/lib/*/gtk-2.0/*/immodules/im-ibus.so \
                            /usr/lib/gtk-2.0/*/immodules/im-ibus.so ; do
        if [ -e $IM_CONFIG_MARKER ]; then
            IM_CONFIG_MARKER2=1
            break
        fi
    done
    
    IM_CONFIG_MARKER3=0
    for IM_CONFIG_MARKER in /usr/lib/*/gtk-3.0/*/immodules/im-ibus.so \
                            /usr/lib/gtk-3.0/*/immodules/im-ibus.so ; do
        if [ -e $IM_CONFIG_MARKER ]; then
            IM_CONFIG_MARKER3=1
            break
        fi
    done
    if [ $IM_CONFIG_MARKER2 = 1 ] && [ $IM_CONFIG_MARKER3 = 1 ] ; then
        GTK_IM_MODULE=ibus
    fi
    
    QT_IM_MODULE=xim
    # use immodule when available for Qt4 (Qt3 has been long dead)
    for IM_CONFIG_MARKER in /usr/lib/*/qt4/plugins/inputmethods/libqtim-ibus.so\
                            /usr/lib/qt4/plugins/inputmethods/libqtim-ibus.so ; do
        if [ -e $IM_CONFIG_MARKER ]; then
            QT_IM_MODULE=ibus
            break
        fi
    done
    
    CLUTTER_IM_MODULE=xim
    # use immodule when available for clutter
    for IM_CONFIG_MARKER in /usr/lib/*/clutter-imcontext/immodules/im-ibus.so \
                            /usr/lib/clutter-imcontext/immodules/im-ibus.so; do
        if [ -e $IM_CONFIG_MARKER ]; then
            CLUTTER_IM_MODULE=ibus
            break
        fi
    done
    
    DEPENDS="ibus, ibus-gtk|ibus-qt4|ibus-clutter"