Geek Help Me ! Tutoriels, Dossiers, News...

  Accueil Tutoriels Systèmes Autres [MOBILE] Tuto : CHr00t Ubuntu/Debian sur smartphone ou tablette ANDROID
Bookmark and Share
[MOBILE] Tuto : CHr00t Ubuntu/Debian sur smartphone ou tablette ANDROID
Note des utilisateurs: / 34
MauvaisTrès bien 
Écrit par Zephyr   
Jeudi, 21 Juillet 2011 00:00

  Créer sa propre image CHroot Ubuntu/Debian pour Smartphone ou Tablette ANDROID

  Tout d'abord, sachez que ce tutoriel et les scripts ci dessous sont une adaptation perso de plusieurs autres, dont celui-ci http://www.saurik.com/id/10  et celui-la http://forum.xda-developers.com/showthread.php?t=1172504
 
Ce guide vous permettra de créer simplement une image de la taille de votre choix à mettre sur votre carte SD, depuis laquelle on installera et on lancera une distro basée sur Debian (Ubuntu pour l'exemple) adaptée à votre précieux !
 
 Prés Requis :
 -un PC sous Debian, Ubuntu ou autre distro basée sur Debian GNU/Linux (même une machine virtuelle fera l'affaire..)
 -un smartphone ou une tablette ANDROID Rooté avec Busybox installée
 

CHROOT



 I- Création de votre image sous Linux
 
 En premier lieux, on va installer sous Linux l'outil Debootstrap qui va nous permettre de précharger la distro de notre choix sur notre future image.


	sudo apt-get install debootstrap

	 

 Ensuite, on créé l'image elle même :

	sudo dd if=/dev/zero of=ubuntu.img bs=1M count=2560

	

 choisissez le nom de votre image (ici ubuntu.img) et sa taille en modifiant l'argument 'count=xxx' par la valeur de votre choix (cette image fera 2,5 Go).

 Puis on formatte l'image créé. Je recommande plutot un systeme de fichier en ext2, même si on peut choisir autre chose.

	sudo mke2fs -F ubuntu.img

	

 ou pour du ext4 :

	sudo mkfs.ext4 -F ubuntu.img

	

 On monte son image pour y installer le debootstrap :

	sudo mkdir /mnt/ubuntu/

	sudo mount -o loop ubuntu.img /mnt/ubuntu/

	

 Pour connaitre les distros installables par debootstrap, faites :

	ls /usr/share/debootstrap/scripts/ 

	

 
 On installe son debootstrap, ici pour une Ubuntu Natty

	sudo debootstrap --verbose --arch armel --foreign natty /mnt/ubuntu/ http://ports.ubuntu.com/ubuntu-ports/

	

 ici pour une Debian Squeeze :

	sudo debootstrap --verbose --arch armel --foreign squeeze /votre/point/de/montage/ http://ftp.fr.debian.org/debian/

	

  On demonte tout une fois l'image préparée :

	sudo umount /mnt/ubuntu/

	sudo rm -r /mnt/ubuntu/

	

 Maintenant votre image est prete à booter !
 On la transfère dans un nouveau dossier sur la carte SD qu'on appellera ici 'ubuntu'.
 
 
 II- Installation du CHRoot sous ANDROID
 
 On commence par installer les outils necessaires depuis l'Android Market :
-on aura besoin d'un terminal, perso j'utilise Connectbot en mode local
-un client VNC (qui prendra en charge la partie export graphique)
-astuce : pour avoir un clavier complet, j'utilise Hacker's Keyboard (il y a des alternatives..) ou Wifi Keyboard
-en bonus, un bon editeur de texte pour editer vos scripts jota ; et un verificateur de hash car les downloads sur SD peuvent parfois etre hasardeux !

 La partie sympa commence  ; D
 Pour ceux qui ont le SDK Android installé, faites ceci depuis le PC sous un shell via adb.
 Pour le commun des mortels, depuis votre Smartphone/Tablette Android, ouvrez un terminal et tapez ceci pour passer root et connaitre les points de montage de votre Android :

	su

	mount

	

  Dans ce qui s'affiche : repérez et notez le point de montage de votre partition '/system' :
  exemples :
[HTC Incredible]
/dev/block/mtdblock3 on /system type yaffs2 etc..

[HTC Desire HD]
/dev/block/mmcblk0p25 on /system type ext4 etc..

[Samsung SGS II]
/dev/block/mmcblk0p9 on /system type ext4 etc..

  On va ensuite créer deux scripts sur le PC (fichier texte ou fichier vierge) pour lancer le chroot sur notre image.
Le script 'install.sh' n'est pas obligatoire mais offre un confort certain.. Il copie le script de lancement 'ubuntu' dans les binaires d'Android ;
ce qui permettra ensuite de lancer le CHRoot en entrant simplement "ubuntu" dans un terminal (apres etre passé 'root') 

Le script 'install.sh' entraine la seule opération qui va écrire dans les partitions systemes Android !
***d'ailleurs je ne saurais etre tenu responsable des manipulations que vous effectuez***
Sachant que j'ai testé cette méthode sur un HD2, un Desire HD, un Galaxy S2, et une tablette Asus Transformer !!


## ATTENTION :  SCRIPT à ADAPTER selon votre telephone à la 3e ligne  /dev/block/XXXXXXX

-script "install.sh" (ici pour un Desire HD)  à mettre dans /sdcard/ubuntu/
#!/system/bin/sh
busybox mount -o remount,rw /dev/block/mmcblk0p25 /system
busybox cp -f /mnt/sdcard/ubuntu/ubuntu /system/bin/ubuntu
busybox chmod 755 /system/bin/ubuntu
busybox chown 0.2000 /system/bin/ubuntu
busybox mount -o ro,remount /system
echo " "
echo " Tapez 'ubuntu' pour lancer le"
echo " CHr00t Android > GNU/Linux !"
echo " "



## SCRIPT à ADAPTER selon votre telephone et le syteme de fichier choisi pour l'image (ext2 ou ext4). Permet de monter vos supports memoires externes dans votre linux sous /mnt/'support'
  Le code comprend MMC, SDCARD, et External_SD) ; vous pouvez supprimer les peripheriques que votre telephone ne possede pas.

-script "ubuntu" (sans extension) dans /sdcard/ubuntu/
#!/system/bin/sh
echo "Demarrage .."
export mnt=/sdcard/deb/mountpoint
export img=/sdcard/deb/deb.img
export bin=/system/bin
export PATH=$bin:/usr/bin:/usr/local/bin:/usr/sbin:/bin:$PATH
export TERM=linux
export HOME=/root
if ! test -d /mnt/sdcard/deb/mountpoint
then
mkdir /mnt/sdcard/deb/mountpoint
fi
echo " "
echo " ... [Ok] "
echo " "
echo "Tente de monter l'image Linux .."
busybox mknod /dev/block/loop254 b 7 254
busybox losetup /dev/block/loop254 $img
busybox mount -t ext4 /dev/block/loop254 $mnt
busybox mount -t devpts devpts $mnt/dev/pts
busybox mount -t proc proc $mnt/proc
busybox mount -t sysfs sysfs $mnt/sys
echo " "
echo " ... [Ok] "
echo " "

echo " Tente de monter sdcard/emmc/external_sd dans '/mnt/' .. "
if ! test -d $mnt/mnt/sdcard
then
mkdir $mnt/mnt/sdcard
fi
busybox mount --bind /mnt/sdcard/ $mnt/mnt/sdcard

if ! test -d $mnt/mnt/emmc
then
mkdir $mnt/mnt/emmc
fi
busybox mount --bind /mnt/emmc/ $mnt/mnt/emmc

if ! test -d $mnt/mnt/external_sd
then
mkdir $mnt/mnt/external_sd
fi
busybox mount --bind /mnt/sdcard/external_sd $mnt/mnt/external_sd

echo " "
echo " ... [Ok] "
echo " "
busybox chroot $mnt /bin/bash
echo " "
echo "Fermeture du CHr00t.."
echo " "

busybox umount -l $mnt/mnt/sdcard
busybox umount -l $mnt/mnt/emmc

busybox umount -l $mnt/mnt/external_sd

busybox umount -l $mnt/dev/pts
busybox umount -l $mnt/proc
busybox umount -l $mnt/sys
busybox umount -l $mnt
busybox losetup -d /dev/block/loop254
busybox mount -o remount,ro /system

echo "Rebootez Android"



Vous avez donc 'ubuntu.img', 'install.sh', et 'ubuntu' dans le dossier 'ubuntu' de la carte SD.

 Dans un terminal Android, tapez :

	su

	sh /sdcard/ubuntu/install.sh

	ubuntu

	

  Ensuite lorsque vous voyez une invite de commande :

	no-name@localhost:/#

	

 il suffit de taper :

	/debootstrap/debootstrap --second-stage

	

 Laisser le systeme s'installer !
 
  on ajoute les depots pour ARM dans ses sources (ici pour Ubuntu Natty) :

	echo 'deb http://ports.ubuntu.com/ natty main restricted universe multiverse' >> /etc/apt/sources.list

	

ou pour Debian (ici Squeeze) :

	echo "deb http://ftp.debian.org/debian/ squeeze main contrib non-free" > /etc/apt/sources.list

	

  puis

	apt-get autoclean

	apt-get update

	exit 

	

 Petit reboot du smartphone,
  on retourne dans un terminal, on tape

	su

	ubuntu

	


 Congratulations !
 Vous avez maintenant installé une distribution linux entierement fonctionnelle par vous même !
 


 
 III- Réglages et customisation !



 creer un simple utilisateur (qui aura les droits admin avec sudo):

	adduser nomdelutilisateur

	

 puis installer Nano un editeur de texte :

	sudo apt-get install nano

	

 et donnez les droits admin à son utilisateur avec sudo :

	sudo EDITOR=/usr/bin/nano visudo

	

 et ajouter sous la ligne 'root ALL=(ALL) ALL'
nomdelutilisateur ALL=(ALL) ALL

Enregistrez (Ctrl+x > Y > Enter) et tapez

	/etc/init.d/sudo restart

	

enfin, pour empecher "root" de se loguer, entrez :
echo > /etc/securetty

  mettre à l'heure locale :

	dpkg-reconfigure tzdata

	

  mettre en francais (choisir fr_FR@UTF8) :

	apt-get install locales

	dpkg-reconfigure locales

	


Pour avoir la visibilité sur le filesystem d'android dans le chroot :

	ln -s /proc/mounts rootfs/etc/mtab

	


  bloquer le cache du blkid

	ln -s /dev/null /etc/blkid.tab

	


  remplir son fichier hosts si c'est pas deja fait

	nano /etc/hosts

	

127.0.0.1     localhost
#ou ceci pour de l'IP V6
::1            localhost ip6-localhost ip6-loopback
fe00::0                ip6-localnet
ff00::0                ip6-mcastprefix
ff02::1                ip6-allnodes
ff02::2                ip6-allrouters


 Puis on renseigne l'interface de bouclage (comme on dit chez nous ;)

	nano /etc/network/interfaces

	

auto lo
iface lo inet loopback
# exemple d'une interface reseau standard
# normalement celle d'android remonte sans ajout manuel
# auto eth0
# iface eth0 inet static
#     address 192.168.0.42
#     network 192.168.0.0
#     netmask 255.255.255.0
#     gateway 192.168.0.1


 on rentre ses server DNS préférés (ici ceux de google mais on peut mettre l'IP de son routeur)

	nano /etc/resolv.conf

	

nameserver 8.8.8.8



 Je vous recommande chaudement d'installer et de configurer un serveur SSH crypté en RSA (screenshot du bas, un prochain tuto?)
-pour deporter le shell sur un ordinateur de bureau muni d'un clavier
-echanger des fichiers (via FTPS ou SCP) encrypté auth+data
-deporter n'importe quelle application graphique qui tournera sur votre "Ubuntu mobile" via le forwarding X11   ; ]

	apt-get install openssh-server

	


CHROOT

 certain voudrons installer une interface graphique sous X. Perso je tourne sous XFCE4 qui marche sans probleme sur des configs Android récente :

	apt-get install xfce4 xfce4-goodies

	

  ou sinon la combinaison openbox et LXDE est rapide et fonctionnelle :

	apt-get install openbox lxde

	

 ou tentez l'installation d'un environnement graphique minimal

	apt-get install kde-minimal

	


	apt-get install gnome-core

	

  ou carrément les suites complètes :

	apt-get install kubuntu-desktop

	


	apt-get install ubuntu-desktop

	


	apt-get install xubuntu-desktop

	

*edit: Unity ne fonctionne pas encore..


 Enfin, pour un affichage graphique sur l'ecran du smartphone (ou depuis le PC), vous pouvez installer un serveur VNC :

	apt-get install tightvncserver

	

 à démarrer en faisant :

	vncserver :1 -geometry 800x480

	

 En remplaçant 800x480 par la resolution de votre écran.
 Appuyez sur la touche 'Home' pour revenir à l'acceuil d'Android et lancer votre client VNC sur l'adresse 127.0.0.1 port 5901 avec le pass créé pendant l'installation.
pour changer de mot de passe d'accès vnc :

	vncpasswd

	

et pour eteindre le serveur :

	vncserver -kill :1

	



CHROOT


 
je conseille la création d'alias pour vos commandes fréquentes et le lancement de vos services !
  voici comment créer un alias qui démarre le service de logging, demarre le pare-feu ufw, le demon SSH et Fail2ban en tapant juste 'startsvc' :

	alias startsvc='service rsyslog start; ufw enable; service ssh start; fail2ban-server start'

	


  alors soit on les ajoute dans le '.bashrc' du /home de l'utilisateur voulu,
soit on créé un fichier dédié et on ajoute un lien vers ce fichier dans le '.bashrc' ou dans /etc/bash.bashrc pour que tous les utilisateurs aient les mêmes !

  on créé donc un fichier dedié mettons /etc/.bash_aliases

	touch /etc/.bash_aliases

	

  puis

	nano /etc/.bash_aliases

	

  et on ajoute autant d'alias qu'on souhaite :
alias ls='ls --color=auto'
alias l='ls --color=auto -lh'
alias ll='ls --color=auto -lha'
alias lt='ls --color=auto -lhtr'
alias cd.='cd ..'
alias cd..='cd ../..'
alias grep='grep -i'
alias cp="cp -iv"
alias rm="rm -i"
alias mv="mv -iv"
alias sadup='apt-get update; apt-get -V dist-upgrade'
alias sap='apt-get -V install'
alias sar='apt-get -V --purge autoremove'
alias sas='apt-cache search'
alias sash='apt-cache -i show'
alias sasp='apt-cache -i showpkg'
alias stvncp='vncserver :1 -geometry 800x480'
alias stvnc='vncserver :1 -geometry 1600x800'
alias spvnc='vncserver -kill :1 ; killall menu-cached'
alias stssh='service ssh start'
alias spssh='service ssh stop'
alias ressh='service ssh restart'
alias cls='clear;ls'
alias psg="ps -aux ¦ grep bash"
alias hcl='history -c; clear'
alias x="exit"
alias dus='df -h'
alias suppr='rm -rf'


 Ensuite on ajoute ceci à la fin de bash.bashrc (ou .bashrc)
if [ -f /etc/.bash_aliases ]; then
. /etc/.bash_aliases
fi

  puis pour faire descendre la config sur l'utilisateur en cours

	source /etc/profile

	


Pour rendre son shell agréable en plus d'être fonctionnel (http://www.papygeek.com/linux/bash-parametrage-du-shell/)
on peut jouer sur la variable PS1 (nano /etc/bash.bashrc)
exemple :

PS1="\[\033[1;30m\][\[\033[1;34m\]\u\[\033[1;30m\]@\[\033[0;35m\]\h\[\033[1;30m\]] \[\033[0;37m\]\w \[\033[1;30m\]\$\[\033[0m\] "





V- TROUBLESHOOTING


-Pour les personnes ayant des erreurs lors du montage (des 'invalid argument' ou autre),
il est fort possible que votre busybox soit trop ancienne ( version < à 1.17.2  à verifier en tapant un 'busybox' dans un shell')

si vous ne souhaitez pas ou n'arrivez pas à reinstaller une version plus recente via l'application du market..

voici comment faire (ref: la backtrack5 pour android qui m'a montré la soluce) :

téléchargez la dernière busybox stable ici et copiez la dans le dossier 'ubuntu' sur la carte SD (le binaire fait environ 1mega).
la version qui semble multiformat est la busybox-armv4tl

créer un script 'bb.sh' à placer dans '/sdcard/ubuntu'

#!/system/bin/sh
busybox mount -o remount,rw /data
busybox mkdir /data/local/bb
busybox cp -f /mnt/sdcard/ubuntu/busybox-armv4tl /data/local/bb/busybox
busybox mount -o ro,remount /data
echo " "
echo " Tmp-Busybox installee dans /data/local/bb/busybox !"
echo " "

il suffira de lancer une fois le script 'bb.sh' pour installer la derniere Busybox dans un endroit executable (la sd est en noexec..)!

Puis il faudra modifier le srcipt 'ubuntu' :
1- rajouter au niveau des lignes 'export' :

export bboxpath=/data/local/bb/busybox

2- et remplacer les occurences de commande busybox (en début de ligne uniquement)
ex :

busybox mount .., 
busybox cp ..

par :
$bboxpath mount .., 
$bboxpath cp ..

etc




-Si votre bureau ne s'affiche pas sous le client VNC (ecran gris)
il suffit d'ajouter une ligne dans le fichier /home/nomdutilisateur/.vnc/xstartup
Pour lancer LXDE :
startlxde &

Pour KDE :
startkde &

Pour GNOME :
exec gnome-session &

Pour Xfce :
startxfce4 &





UPSTART JOBS sous UBUNTU
pour les problemes avec les 'Upstart Jobs' en chroot :
start: Unable to connect to Upstart: Failed to connect to socket /com/ubuntu/upstart: Connection refused

la solution a été trouvée ici (http://aaronshang.blogspot.com/2010/10/unable-to-connect-to-upstart.html),
il faut taper :

	dpkg-divert --local --rename --add /sbin/initctl

	ln -s /bin/true /sbin/initctl

	




Enjoy !

Mise à jour le Dimanche, 05 Février 2012 16:45
 
web design - referencement