L'idée (et l'envie) d'installer Debian GNU/Linux sur mon ordinateur de poche Motorola Moto G 4G LTE rooté vient de Johndescs (
http://jonathan.michalon.eu/).
Pourquoi installer Debian GNU/Linux sur son ordinateur de poche ?
- Parce qu'on peut le faire \o/
- Parce que c'est plutôt fun
- Pour avoir un vrai GNU/Linux bien foutu (respect complet de Filesystem Hierarchy Standard (FHS), sysvinit, ...)
- Pour avoir des outils qui fonctionnent. Non parce que l'implémentation Busybox des outils standards, c'est pas toujours ça. Exemple : la commande whois qui contacte
http://whois-server.net/ - 193.46.236.105 dont le démon whois est dans les choux au lieu de contacter les serveurs whois kivontbien/kisontlegit (ceux de l'AFNIC pour un domaine fr. par exemple).
On va faire cette installation (et usage au quotidien) avec Debian-kit qui est un script qui mâche le travail. Notons qu'il ne s'agit pas d'un chroot : « Debian Kit utilise une approche différente : il monte (bind) [ndlr : et merge] les répertoires classiques de Debian directement sur la racine Android [ndlr : à partir d'une image disque ou d'une partition dédiée qui contient le système de fichiers Debian], ce qui permet aux deux systèmes de communiquer sans aucun souci vu qu'ils se partagent le même filesystem. ». On a donc accès à l'intégralité des montages Android depuis Debian. \o/ Notons tout de même que cette cohabitation provoque quelques blocages. Exemple : sur mon ordinateur de poche, je ne peux plus activer/désactiver le WiFi une fois Debian lancé.
Je vais compléter le tutoriel pointé par ce shaarli avec mes conseils et les problèmes que j'ai rencontrés. Ce shaarli est donc complémentaire, il ne se substitue pas au tutoriel qu'il faudra donc lire et suivre en grande partie.
Mon premier conseil sera de mettre votre ordinateur de poche en mode avion afin de ne pas être dérangé par un appel téléphonique pendant que vous taperez les commandes nécessaires à l'installation de Debian. Non, ce n'est pas du vécu mais j'ai pensé ensuite que j'ai eu de la chance car ça m'aurait bien troublé et gonflé vu le debug à faire (retaper/relancer les commandes plusieurs fois sur un clavier minuscule).
Le script d'installation a changé d'URL :
http://www.wdowiak.me/debian-kit/ et
http://www.wdowiak.me/debian-kit/debian-kit-1-6.shar pour le lien direct.
La première erreur que j'ai rencontrée est intervenue durant la phase « Unpack to /data/local/deb » : « Included busybox failed. ». Juste avant cela, un chmod ne fonctionne pas (on voit l'aide s'afficher). Le tar (compris dans le « .shar ») est néanmoins extrait mais d'autres erreurs arrivent en cascade par la suite lors de la vérification des sommes de contrôle des fichiers extraits.
En lisant le script « .shar », on voit qu'un chmod a lieu sur un Busybox local (extrait dans /data/local/deb/ par le script quoi) pour le rendre exécutable : « chmod 755 ${DEST}/armel/busybox ${DEST}/i386/busybox ». Sans droit d'exécution, l'appel à ce Busybox local échoue (« BUSYBOX=$( ${DEST}/i386/busybox ash -c "echo ${DEST}/i386/busybox" 2>&- || ${DEST}/armel/busybox ash -c "echo ${DEST}/armel/busybox" 2>&-) ») d'où l'erreur non-bloquante « Included busybox failed. » et la variable $BUSYBOX qui n'est pas remplie (elle reste vide). C'est donc les implémentations ash/sed/tar du Busybox global (que j'ai installé moi-même suite au rootage de mon ordinateur de poche) qui sont exécutées dans la suite du script (exemple : « ${BUSYBOX} sed -e '1,/^### TAR ARCHIVE STARTS ###/d' ${0} | ${BUSYBOX} tar -C ${DEST} -xvz ») ... sauf que je n'ai pas la commande md5sum dans mon Busybox global, ce qui explique l'erreur "en cascade" constatée. Cette erreur étant bloquante (« || exit 1 »), ça explique l'arrêt de l'installation à cette étape.
Le chmod échoue car l'implémentation que j'en ai ne supporte pas le passage de plusieurs fichiers en paramètre. Il faut donc réaliser ce chmod sur les deux fichiers en deux temps. Pour cela, on modifie le script sur notre desktop :
$ sed -i 's%chmod 755 ${DEST}/armel/busybox ${DEST}/i386/busybox%chmod 755 ${DEST}/armel/busybox ; chmod 755 ${DEST}/i386/busybox%' debian-kit-1-6.shar
Puis on met le script sur la carte SD de l'ordinateur de poche (ou autre méthode de transfert genre USB+MTP, ça marchera tout aussi bien).
Sur mon ordinateur de poche, le script se trouve sur la carte SD donc dans /storage/sdcard1. /storage/sdcard0 et /sdcard sont des liens symboliques vers /storage/emulated/legacy qui est juste une partie de la mémoire interne de mon ordinateur de poche et surtout pas la carte SD. Donc pour lancer l'installation, j'utilise la commande :
# sh /storage/sdcard1/debian-kit-1-6.shar
Cette fois-ci le chmod, l'extraction du tar et la vérification des sommes de contrôle se font sans problèmes. Mais le script (/data/local/deb/autorun cette fois-ci) m'indique qu'il va créer l'image disque de mon Debian dans /storage/emulated/legacy/debian.img ... Comme expliqué ci-dessus, cet emplacement se situe dans la mémoire interne de mon ordinateur de poche alors que je veux mettre l'image Debian sur ma carte SD ! Le script indique néanmoins que si je veux forcer un autre emplacement, je peux lancer le script /data/local/deb/mk-debian manuellement.
Faisons ça. Ctrl-c pour quitter le script actuel. La commande « sh /data/local/deb/mk-debian -h » permet d'avoir les options qui nous seront utiles (quel système on veut installer ? Quelle taille d'image ? Quel emplacement pour l'image ?). Au final, la commande qui correspond à mes désirs est la suivante :
# sh /data/local/deb/mk-debian -i /storage/sdcard1/debian-wheezy.img -d wheezy -s 1024
Attention ! Si vous utilisez Netfilter et un frontend pour le configurer comme Afwall+ par exemple, il faudra autoriser temporairement « (root) - Applications qui fonctionnent en tant que root » sinon debootstrap ne pourra pas se connecter à un miroir Debian et échouera. Si ça vous arrive : supprimez l'image disque (/storage/sdcard1/debian-wheezy.img dans mon cas) et recommencez l'appel à mk-debian.
L'erreur suivante est survenue lors de l'installation de andromize (« andromize va bricoler un peu l'installation Debian de base pour la rendre compatible avec Android en parallèle. Ça va aussi installer un démon qui change automatiquement les paramètres réseau de Debian en fonction de ce que vous faites sur Android (androresolvd). ») : « groupadd: failure while writing changes to /etc/group ».
Heureusement, on trouve de la documentation sur les interwebz :
https://unix.stackexchange.com/questions/145553/groupadd-failure-while-writing-changes-to-etc-group et
https://android.stackexchange.com/questions/54577/how-can-i-change-selinux-from-enforcing-to-permissive-on-samsung-galaxy-note-3 . En effet, mon ordinateur de poche a été fourni avec Android 4.4.3 donc KitKat donc SELinux.
On quitte le shell "Debian", on désactive temporairement SELinux (il sera réactivé au prochain reboot de l'ordinateur de poche mais ça ne sera pas bloquant), on retourne dans le shell "Debian" et on relance l'installation d'andromize :
# exit
# setenforce 0 ; deb
# apt-get install andromize
On peut ensuite continuer la préparation du minimum pour avoir un shell via SSH (plus pratique pour la saisie, sans avoir besoin d'une "application" tierce pour faire office de sshd comme SSHDroid) :
# apt-get install andromize openssh-server sudo
# adduser guigui
# usermod -aG sudo guigui
# exit
# deb u ; deb s
L'accès via SSH se fait de manière classique avec le compte que nous venons de créer puis sudo pour passer root.
On peut utiliser un autre miroir Debian que ftp.us.debian.org, plus local toussa. Ça se passe dans /etc/apt/sources.list.d/sources.list. Ne pas oublier le apt-get update habituel.
On installe quelques packages en plus (oui, sl, cowsay, funny-manpages et fortunes-fr c'est juste pour le fun et pour faire style ; most c'est pour avoir les pages de manuel en couleur ; lsb-release c'est pour la commande lsb_release -a pour montrer facilement que c'bien du Debian toussa) :
# apt-get install telnet netcat whois mtr-tiny tcpdump bwm-ng curl most htop sipcalc vim lsb-release sl cowsay funny-manpages fortunes-fr
Pour utiliser most : export PAGER=most dans vos .bashrc (/root/ et /home/<votrelogin>/). Pour que sl/cowsay/fortunes soient disponibles avec le compte root (pour ne pas être obligé de faire su <votelogin> sur votre ordinateur de poche pour juste une petite démo) : export PATH=$PATH:/usr/games/ dans /root/.bashrc
ÉDIT du 18/11/2014 à 20h50 : problème curieux avec fortune :
Depuis mon ordinateur de poche, en root :
fortune: /usr/share/games/fortunes: No fortune files in directory.
fortune:/usr/share/games/fortunes not a fortune file or directory
No fortunes found
Depuis mon desktop, en SSH sur mon ordinateur de poche, en root : ça fonctionne.
Depuis mon ordinateur de poche ou via SSH, en utilisateur normal : ça fonctionne.
Réponse : depuis l'ordinateur de poche, le shell (/bin/bash) est instancé par debian-kit (env affiche « SHELL=/tmp-mksh/tmp-mksh »). Ce dernier ne lit pas le fichier /etc/default/locale. $LANG est donc vide. Comme j'ai installé uniquement fortunes-fr, fortunes ne trouve aucune fortune dans /usr/share/games/fortunes car elles sont rangées dans /usr/share/games/fortunes/fr. Ça marche via SSH ou après avoir su <votrelogin> depuis votre ordinateur de poche car PAM est exécuté et il source /etc/default/locale. La solution est donc de sourcer /etc/default/locale dans /root/.bashrc . FIN DE L'ÉDIT.
On modifie /etc/hosts pour ajouter l'association entre le hostname défini plus haut et ::1 / 127.0.0.1
Et on a fini (pour l'instant) \o/
J'ai encore une erreur lors de chaque lancement du Debian : « Cannot access system properties via ANDROID_PROPERTY_WORKSPACE environment setting ». Je ne sais pas encore quelle en est l'origine mais elle n'est pas bloquante.
Rappel des commandes utiles :
deb tout seul pour démarrer Debian et obtenir un shell Debian.
deb s pour démarrer Debian et le serveur SSH (parce qu'il faut bien avouer que pour configurer Debian plus avant, ça va être plus sympa de le faire depuis votre PC).
deb S pour arrêter le serveur SSH (mais pas Debian). Notez la différence de casse du S.
deb u pour arrêter Debian complètement. Si problème (des process qu'il n'arrive pas à éteindre) faites deb k pour tout tuer et arrêter Debian.