Debian sur Mele A2000G

Table des matières

Le Mele A2000G est un appareil multimédia capable de lire des vidéos sur une TV par exemple ; on appelle ça un « HTPC » (Home Theater Personal Computer). Mais en réalité, c’est un « vrai » petit ordinateur assez sympathique dont les caractéristiques techniques sont les suivantes :

  • Processeur Allwinner A10 bi-cœur A8 à 1 GHz (architecture ARMv7)
  • 1 Go de RAM
  • 8 Go de mémoire « flash » interne
  • Processeur graphique Mali-400
  • Ports USB, ethernet, VGA, HDMI
  • Port SATA pour enficher directement un disque dur

Il est, de base, équipé d’Android. C’est en fait un hybride entre une tablette (processeur, système d’exploitation) et un ordinateur conventionnel (connectique). Il est parfait pour servir de petit ordinateur secondaire, de serveur, etc. Attention : un modèle plus récent de ce HTPC existe, équipé d’un processeur Allwinner A31 (quadri-cœurs A7), pour lequel le support de Linux avec des pilotes libres n’est pas encore au point. Il faut bien faire attention lors de l’achat ; si vous lisez A8, A10 ou MALI400, ça fonctionnera ; si vous lisez A7, A31 ou PowerVR, c’est le plus récent qui n’est pas encore supporté. J’ai acheté cet appareil pour y faire fonctionner le serveur domotique Calaos, mais j’espère pouvoir aussi lui donner d’autres tâches… C’est pourquoi j’y installe la distribution Debian GNU/Linux…

Démarrage sur carte SD

La première étape est de démarrer Debian sur une carte SD, afin d’avoir un système fonctionnel.

Préparation

Pour cela, j’utilise une image toute prête, téléchargée sur la page https://romanrm.net/dl/a10/debian/ (je prends la version la plus récente).

Note : par défaut, cette image ne permet aucun affichage à l’écran, l’accès se fait en SSH, avec l’utilisateur « root » et le mot de passe « password ». Pour connaître l’adresse IP de la machine, il faut consulter les baux du serveur DHCP (chez moi, une Freebox)…

Le fichier téléchargé est ensuite décompressé :

$ bunzip2 a10-debian-server-2gb.2013-09-20.img.bz2

Cette image est ensuite à écrire sur une carte SD (de 2 Go minimum). Tout d’abord, j’identifie le périphérique qui correspond à cette carte sur mon PC en exécutant la commande dmesg immédiatement après l’avoir insérée.

$ dmesg
[...]
[33654.347627] mmc0: new high speed SDHC card at address 1234
[33654.347935] mmcblk0: mmc0:1234 SA04G 3.63 GiB

Je constate alors que le périphérique correspondant à cette carte est, chez moi, /dev/mmcblk0. Après avoir démonté (dans mon gestionnaire de fichiers) les éventuelles partitions qui se seraient montées seules, j’utilise alors la commande dd pour écrire l’image sur ce périphérique :

$ sudo dd if=a10-debian-server-2gb.2013-09-20.img of=/dev/mmcblk0

Note : À cette étape, on peut insérer la carte SD dans le Mele et le démarrer : le système démarre mais n’est pas adapté à ce système, il n’y a notamment que 500 Mo de RAM accessibles.

Je mets alors en place un chargeur de démarrage donnant accès à l’intégralité de la mémoire vive. Celui-ci est téléchargé à l’adresse http://dl.linux-sunxi.org/users/amery/sunxi-3.0/latest/, où je choisis  le fichier a10_mid_1gb_hwpack.tar.xz ; je le télécharge, je le décompresse et je l’écris sur la carte SD :

$ wget http://dl.linux-sunxi.org/users/amery/sunxi-3.0/latest/a10_mid_1gb_hwpack.tar.xz
$ tar Jxf a10_mid_1gb_hwpack.tar.xz
$ sudo dd if=bootloader/sunxi-spl.bin of=/dev/mmcblk0 bs=1024 seek=8
$ sudo dd if=bootloader/u-boot.bin of=/dev/mmcblk0 bs=1024 seek=32

Lorsque je démarre cette image sur le Mele, j’ai accès à l’intégralité de la RAM de l’ordinateur (1 Go). Il reste encore à améliorer le système…

Agrandissement de la partition

Sur une carte SD de plus de 2 Go, il est possible d’agrandir la partition racine. Pour plus de confort, je fais cela sur mon ordinateur personnel et non sur le Mele, avec lequel cela reviendrait à travailler sur un disque en cours d’utilisation.

$ sudo parted /dev/mmcblk0
(parted) print free
Modèle: SD SA04G (sd/mmc)
Disque /dev/mmcblk0 : 3905MB
Taille des secteurs (logiques/physiques): 512B/512B
Table de partitions : msdos

Numéro  Début   Fin     Taille  Type     Système de fichiers  Fanions
        32,3kB  1049kB  1016kB           Espace libre
 1      1049kB  65,1MB  64,0MB  primary  fat16                lba
        65,1MB  67,1MB  2048kB           Espace libre
 2      67,1MB  1767MB  1700MB  primary  ext4
        1767MB  3905MB  2138MB           Espace libre

(je vois là qu’il y a plus de 2 Go de libres à la fin de la carte SD)

(parted) resizepart 2 3905MB
(parted) print free
Modèle: SD SA04G (sd/mmc)
Disque /dev/mmcblk0 : 3905MB
Taille des secteurs (logiques/physiques): 512B/512B
Table de partitions : msdos

Numéro  Début   Fin     Taille  Type     Système de fichiers  Fanions
        32,3kB  1049kB  1016kB           Espace libre
 1      1049kB  65,1MB  64,0MB  primary  fat16                lba
        65,1MB  67,1MB  2048kB           Espace libre
 2      67,1MB  3905MB  3838MB  primary  ext4

(je vois maintenant que toute la place est prise par la deuxième partition)

(parted) quit
Information: Ne pas oublier de mettre à jour /etc/fstab si nécessaire.
$ sudo e2fsck -f /dev/mmcblk0p2
$ sudo resize2fs /dev/mmcblk0p2

Et voilà, la partition est agrandie, je peux remettre la carte SD dans le Mele pour démarrer dessus… et je vois alors, sur le système en fonctionnement, un espace total de 3,6 Go sur la partition racine.

Adaptation de la configuration

Sur cette image se trouve un noyau Linux qui ne donne aucun retour vidéo (ni HDMI, ni VGA). Pour avoir un retour vidéo, il faut changer le noyau. Différents noyaux sont disponibles sur la page suivante : https://romanrm.net/a10/kernel. Chacun choisira le noyau qu’il préfère :

  • sur le noyau « Server », l’affichage est complètement désactivé et la RAM est intégralement disponible : à utiliser notamment pour un serveur, sans affichage ou avec affichage déporté (c’est le noyau par défaut) ;
  • sur le noyau « Desktop », l’affichage est activé mais l’accélération vidéo est désactivée et on accède à 100 Mo de RAM en moins : à utiliser pour un système de bureau sans lecture de vidéo, interface Calaos, etc ;
  • sur le noyau « Video », l’affichage et l’accélération vidéo sont activés et on a 200 Mo de RAM en moins : à utiliser sur un système multimédia (lecteur vidéo, etc).

J’utilise pour ma part le noyau « Desktop » car j’envisage d’installer un écran tactile pour Calaos. Lorque l’on choisit un noyau, il faut télécharger les fichiers linux-image-XXX.deb et uImage-XXX. Cela est à faire de préférence directement sur le Mele. Une fois ces fichiers téléchargés, il faut installer le fichier .deb et placer le fichier uImage-XXX sous le nom uImage dans le répertoire /boot ; il reste enfin à redémarrer. Dans mon cas, cela donne :

# wget https://romanrm.net/dl/a10/kernels/desktop-3.4/3.4.67-r0-d-rm2%2b/linux-image-3.4.67-r0-d-rm2%2b_3.4.67-r0-d-rm2%2b-10.00.Custom_armhf.deb
# wget https://romanrm.net/dl/a10/kernels/desktop-3.4/3.4.67-r0-d-rm2%2b/uImage-3.4.67-r0-d-rm2%2b
# dpkg -i linux-image-3.4.67-r0-d-rm2+_3.4.67-r0-d-rm2+-10.00.Custom_armhf.deb
# rm linux-image-3.4.67-r0-d-rm2+_3.4.67-r0-d-rm2+-10.00.Custom_armhf.deb
# mv uImage-3.4.67-r0-d-rm2+ /boot/uImage
# reboot

Et voilà, le noyau permettant un affichage est installé ! Il reste encore à mettre en place le bon « script.bin ». Ce fichier contient les paramètres spécifiques au matériel en question ; pour obtenir un fichier correct, le plus efficace est de récupérer celui qui est utilisé sur le système Android d’origine :

# mount /dev/nanda /mnt
# cp /mnt/script.bin /boot
# umount /mnt
# reboot

Notons que, étant donné que j’utilise une carte SD d’entrée de gamme, le système est particulièrement lent.

Personnalisation

Le système est maintenant installé sur la carte SD, il suffit de le personnaliser. Je pense notamment à :

  • modifier le fichier /etc/apt/sources.list pour utiliser des sources proches (par exemple « ftp.fr.debian.org » en France) ;
  • mettre le système à jour (apt-get update && apt-get upgrade) ;
  • configurer le fuseau horaire (dpkg-reconfigure tzdata) ;
  • modifier le fichier /etc/hostname afin de donner un nom spécifique à cette machine ;
  • modifier le fichier /etc/network/interfaces afin de mettre une adresse IP fixe à ce système ;
  • utiliser la commande passwd pour changer le mot de passe du système.

Ces modifications peuvent bien sûr être effectuées plus tard…

Installation sur la mémoire interne… ou pas

Démarrer sur une carte SD c’est bien, n’avoir besoin d’aucun espace de stockage complémentaire c’est mieux !

Malheureusement, j’ai échoué dans cette entreprise. J’ai essayé de travailler autour du script « Pimp my Mele » de Guillaume, j’ai demandé de l’aide sur le canal IRC #linux-sunxi… mais rien à faire, mon Mele ne veut pas démarrer. La prochaine étape serait d’ouvrir le Mele pour brancher un terminal sur le port série du Mele, qui n’est pas câblé. Je n’ai pas envie, pour le moment, de démonter cette machine.

Démarrage sur la carte SD, fichiers sur la mémoire interne

Récupérer nand-part pour partitionner la mémoire interne

Les outils spécifiques au Mele sont déjà compilés par Guillaume pour son script « Pimp my Mele », je suis fainéant et j’utilise ce qu’il a fait…

# cd /opt
# wget http://guillaumeplayground.net/share/pimpmymele-0.1.tgz -O- | tar zx

Formater la mémoire interne

# /opt/pimpmymele-0.1/sunxi-tools/nand-part /dev/nand 32768 'bootloader 32768' 'root 14974976'
[...]
write new partition tables? (Y/N)
y
[...]
# reboot

Note : À partir de là, le système Android d’origine n’est plus utilisable…

Préparer l’espace de stockage

Maintenant qu’un système fonctionnel est en place et que la mémoire interne est repartitionnée, je mets en place un volume physique LVM dans celle-ci afin de définir des points de montage flexibles (comme sur n’importe quel serveur).

LVM doit d’abord être installé :

# apt-get install lvm2

Puis la ligne suivante est ajoutée dans /etc/lvm/lvm.conf afin de permettre la création d’un volume physique sur la mémoire interne (NAND).

types = [ "nand", 8 ]

Ensuite, un volume physique LVM est créé sur la partition contenant la majorité de la mémoire interne, ainsi qu’un groupe de volumes…

# pvcreate /dev/nandb
# vgcreate system /dev/nandb

Il est alors possible de créer des volumes logiques… Je m’en donne à cœur joie !

Création des espaces de stockage en mémoire interne

Je crée des volumes logiques LVM comme j’en crée sur chaque serveur… mais aux dimensions de la machine : plutôt que 10 Go par partition, je reste sur quelques centaines de méga-octets…

# lvcreate -nusr -L512M system
# mkfs.ext4 /dev/system/usr
# mount /dev/system/usr /mnt
# cp -a /usr/* /mnt/
# umount /mnt
# mv /usr /usr2
# mkdir /usr
# mount /dev/system/usr /usr
# lvcreate -nvar -L1G system
# mkfs.ext4 /dev/system/var
# mount /dev/system/var /mnt
# cp -a /var/* /mnt/
# umount /mnt
# mv /var /var2
# mkdir /var
# mount /dev/system/var /var

Les lignes suivantes sont alors ajoutées au fichier /etc/fstab :

/dev/system/usr /usr            ext4    defaults                0       0
/dev/system/var /var            ext4    defaults                0       0

… et le système est redémarré afin de valider le bon fonctionnement de ce partitionnement :

# reboot

Enfin, une fois le système correctement redémarré, on peut supprimer les répertoires qui avaient été sauvegardés :

# rm -fr /usr2 /var2

Notons toutefois qu’en réalité j’ai fait cette opération en plusieurs fois, avec un redémarrage entre chaque déplacement : je n’ai pas fait /usr et /var en un bloc.

Retour en arrière

Si vous voulez revenir en arrière et réinstaller Android, vous pouvez trouver des instructions ici : http://www.cnx-software.com/2012/06/18/mele-a1000a2000-android-4-0-image-released/.

Mais moi, je ne retourne pas en arrière : je peux maintenant installer les logiciels que je veux, à commencer par le serveur domotique Calaos !

J’intègre également cette machine à ma supervision globale (Zabbix, tout ça…) : rien de plus simple, vu qu’il s’agit maintenant d’une Debian comme une autre !

Bibliographie

Voici quelques liens d’où je tire ces informations :

comments powered by Disqus