Android + Linux chroot

[../v4/images/70x40/android--linux-chroot_1279.png]
Android is op Linux gebaseerd. Toch kun je er niet alles mee wat je met Linux wel kan. Gelukkig is er een manier om Linux op te starten op je telefoon, zonder Android aan te passen of te verwijderen
Android is op Linux gebaseerd. Toch kun je er niet alles mee wat je met Linux wel kan. Gelukkig is er een manier om Linux op te starten op je telefoon, zonder Android aan te passen of te verwijderen.
Eerder had ik ook al een tutorial gemaakt over hoe je backtrack op Android kon krijgen. Dit maakte ook gebruik van chroot. Het verschil met deze tutorial is dat je geen image van internet download maar het hele systeem zelf opbouwt.

Benodigdheden


  • Een Android telefoon (getest met 2.1 en 4.0)
  • Een geroot Android apparaat
  • Busybox wordt aangeraden omdat stock Android vaak niet met een aantal van de gebruikte tools komt
  • Toegang tot een GNU/Linux PC of virtuele machine (ik heb alleen Debian-based getest) waar je roottoegang op hebt
  • Enige ervaring met de Linux terminal
  • Ruimte op je SD-kaartje. Dit is afhankelijk van de distro die je gebruikt en hoeveel extra ruimte je wilt toewijzen

Het ophalen van de benodigde bestanden


Eerst gaan we een map op Linux aanmaken om de tijdelijke Android bestanden in te stoppen. Daarna kijken we hoe groot deze is geworden en maken we met die info een bestand met een bestandssysteem erin, dat we kunnen mounten. Dit plaatsen we op de SD-kaart van je Android-apparaat en daarna maken we een script om snel in Linux te komen.
Open de terminal en geef de volgende commando's:
mkdir ~/android_chroot
cd ~/android_chroot

Vervolgens hebben we een aantal packages nodig om de omgeving te maken. Dit zijn:
  • debootstrap om een extra omgeving te maken
  • qemu-user-static om de ARM versie van de programma's uit te kunnen voeren
Deze kun je op Debian-based systemen zo installeren:
sudo apt-get install debootstrap qemu-user-static

Vervolgens maken we automatisch een volledig systeem door debootstrap uit te voeren. Dit kan met het volgende commando:
sudo debootstrap --foreign --arch=armel squeeze .
Dit kan even duren aangezien hij een behoorlijke hoeveelheid aan pakketten moet downloaden.
Hierna moeten we zorgen dat we in de ARM-omgeving kunnen komen met onze x64 of x86 processor. Hiervoor gebruiken we qemu. Kopieer het programma naar de /usr/bin map met het volgende commando:
sudo cp /usr/bin/qemu-arm-static usr/bin/

Nu schakelen we over op het bestandssysteem dat we zojuist hebben aangemaakt. Dit doen we met chroot, een tool die ook vaak wordt gebruikt bij het repareren van kapotte Linux systemen. Wat het doet is zeggen "vanaf nu is deze map de hoofdmap (/)". chroot gebruik je zo:
sudo chroot . /bin/bash

Nu moeten we alleen de environment variable voor $PATH nog even bijwerken aan ons nieuwe systeem. Dit kan met het volgende commando:
/debootstrap/debootstrap --second-stage
Het programma debootstrap is achtergelaten enkele stappen terug toen je het systeem aanmaakte. Het installeert de pakketten die de eerste fase heeft klaargezet.
Nu alle benodigde software is geïnstalleerd moeten we alleen nog even de sources.list (dit is waar Debian zijn pakketten vandaanhaalt, in jouw distro kan een ander systeem worden gebruikt. Kijk naar de handleiding van je distro of de distro waar die op gebaseerd is voor meer informatie)
We doen dit door een bestand /etc/apt/sources.list aan te maken met het volgende commando:
echo "deb http://ftp.nl.debian.org/debian stable main contrib non-free" >  /etc/apt/sources.list
Hiermee worden de pakketten gezocht bij de Nederlandse FTP-mirror van debian.org.
Nu het hele bestandssysteem is opgezet moeten we alleen nog een gebruiker aanmaken op het systeem en het rootwachtwoord instellen.
Doe dit zo:
useradd -u 2000 -g users -d /home/digitalplace -m -s /bin/bash digitalplace
passwd digitalplace
passwd

Dit maakt een gebruiker genaamd digitalplace aan, die zijn gegevens opslaat in /home/digitalplace. Hiervoor wordt vervolgens een wachtwoord gemaakt. Daarna wordt er een wachtwoord gemaakt voor root.

Nu heeft Android nog een extra beveiliginsmaatregel: voor verschillende soorten netwerktoegang zijn verschillende groepen aangemaakt. Deze moeten wij natuurlijk ook toevoegen, anders kunnen wij niet op internet of andere netwerken. Dit kan zo:
groupadd -g 3001 aid_net_bt_admin
groupadd -g 3002 aid_net_bt
groupadd -g 3003 aid_inet
groupadd -g 3004 aid_inet_raw
groupadd -g 3005 aid_inet_admin

gpasswd -a digitalplace aid_net_bt_admin
gpasswd -a digitalplace aid_net_bt
gpasswd -a digitalplace aid_inet
gpasswd -a digitalplace aid_inet_raw
gpasswd -a digitalplace aid_inet_admin
Het eerste deel maakt de groepen aan, het tweede deel voegt de groepen toe.

Nu is het systeem klaar. Als je wilt kun je nog enkele pakketten toevoegen. De standaardinstallatie is namelijk erg gelimiteerd. Ik heb extra paketten toegevoegd met dit commando's:
apt-get update
apt-get install less nano ssh build-essential
Hiermee wordt de tool "less", de tekstbewerker "nano", zowel de SSHD-server als de SSH client en de suite voor het compilen van software geïnstalleerd.

Uiteindelijk maken we een plek waar we de SD-kaart mounten (zodat we die kunnen bereiken vanuit de chroot). Vervolgens verlaten we de tijdelijke chroot en verwijderen we qemu weer. Dit doen we zo:
mkdir /mnt/sdcard
exit
sudo rm usr/bin/qemu-arm-static

Het maken van het mountbare bestand


Nu we alle benodigde bestanden binnen hebben, moeten we nog een manier vinden om het bestandsysteem in een bestand op je SD-kaart krijgen, zonder dat je tegen de limitaties van FAT32 (zoals het niet kunnen uitvoeren van executables) aanlopen. Hiervoor maken we een bestand ter grootte van je chroot, plus wat vrije ruimte om het uit te kunnen breiden, en maken we hierin een bestandssysteem. Ik raad aan ext2, aangezien ext4 meer wegschrijft naar de SD-kaart en daarmee de levensduur verkort.

Eerst zoeken we uit hoe groot je chroot is. Dit kan met du:
du -h .
Er scrollt wat tekst voorbij en helemaal onderaan zie je de totale grootte van je chroot. Bij mij is dat 431 MB, dus ik maak een bestand van 600 MB om nog 129 MB aan extra opslagruimte vrij te hebben voor updates en extra programma's. We gaan daarna weer een map omhoog met cd ...

Het maken van het bestand is behoorlijk simpel: hiervoor gebruiken we dd:
dd if=/dev/zero of=./chroot.img seek=$(echo 600*1024*1024| bc) bs=1 count=1
De 1024*1024 is 1 MB, de 600 is het aantal MB's. bc is een terminal-rekenmachine.

We maken hier nu een bestandssysteem op. Dit doen we met mkfs.ext2:
sudo mkfs.ext2 ./chroot.img
Er wordt gewaarschuwd dat het om een bestand en geen fysieke schijf gaat. Kies om door te gaan om het bestandssysteem te maken.

Nu moeten we alle bestanden nog naar dit nieuwe blok kopiëren. Eerst moeten we het mounten:
sudo mkdir /mnt/chroot
sudo mount -o loop ./chroot.img /mnt/chroot
De -o loop is omdat het een bestand is, geen schijf. Zo kun je ook ISO's en sommige archieven mounten op Linux.

Nu kopieer je alles in ~/android_chroot naar /mnt/chroot/:
sudo cp -a android_chroot/* /mnt/chroot

Daarna kun je het bestand umounten(sudo umount /mnt/chroot; sudo rmdir /mnt/chroot) en kopiëren naar de SD-kaart van je telefoon.

Op je telefoon


Ik ga er hier van uit dat je chroot.img in de /mnt/sdcard/ map hebt gezet. Maak ook een map aan genaamd /mnt/sdcard/linux waar de chroot op wordt gemount.
Zet op je SD-kaart de het volgende bestanden:
chroot.sh
#De chroot mounten
busybox mount -o loop /mnt/sdcard/chroot.img /mnt/sdcard/linux
# dev mounten
busybox mount -o bind /dev /mnt/sdcard/linux/dev
# dev/pts mounten
busybox mount -o bind /dev/pts /mnt/sdcard/linux/dev/pts
# proc mounten
busybox mount -o bind /proc /mnt/sdcard/linux/proc
# sys mounten
busybox mount -o bind /sys /mnt/sdcard/linux/sys
# sdkaart mounten
busybox mount -o bind /mnt/sdcard/ /mnt/sdcard/linux/mnt/sdcard
# PATH omgevingsvariable instellen
export PATH=/home/$USER/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:$PATH
# Nu de chroot starten
# Eerst de gebruiker melden
echo Je gaat nu over naar de chroot!
# Als de chroot is afgesloten gaat het script pas verder
busybox chroot /mnt/sdcard/linux /bin/bash

# Alle processen die achtergelaten zijn killen
busybox fuser -m -k /mnt/sdcard/linux
# Umounten
busybox umount /mnt/sdcard/linux/mnt/sdcard
busybox umount /mnt/sdcard/linux/sys
busybox umount /mnt/sdcard/linux/proc
busybox umount /mnt/sdcard/linux/dev/pts
busybox umount /mnt/sdcard/linux/dev
busybox umount /mnt/sdcard/linux

# Aangeven dat je nu naar Android gaat
echo Je wordt nu teruggezet naar Android!

Open op je telefoon nu een terminal. Gebruik hiervoor Een Android terminal emulator of gebruik adb uit de Android SDK om via je computer de commando's in te geven. ADB is wel wat meer werk op in te stellen maar typt makkelijker.
Voer het chroot script uit door in de terminal in te typen:
su -c 'sh /mnt/sdcard/chroot.sh'
Je hebt superuser toegang nodig om te kunnen chrooten. Je kunt de chroot verlaten door exit te typen. Wil je niet dat alles geumount wordt, pas dan het script aan (haal de fuser en umount regels weg).

Bron


Deze tutorial is grotendeels gebaseerd op de volgende pagina: http://bogeskov.dk/DebianAndroid.html. Omdat deze nogal beknopt was, en niet veel uitleg gaf heb ik een aangepaste versie gemaakt. Ook gebruikte die pagina een aparte partitie in plaats van een loop device, wat meer stappen vereist aangezien je moet partitioneren.

Reacties (3)

 
Wow. Geen idee dat dit kon; thnx!
 
Ik wil niet bashen, maar ik ben toch blij dat mijn gejailbreakte iPhone me volledige root toegang geeft met alle Linux features. :)
 
Citaat van: "Hoithebest"
Ik wil niet bashen, maar ik ben toch blij dat mijn gejailbreakte iPhone me volledige root toegang geeft met alle Linux features. :)

De features zitten ook wel in Android, net als in Mac OSX (en dus iOS). Het gaat er hier om dat je alle packages van iedere Linux distro kunt installeren die ARM-ondersteuning hebben.

Als je een VNC-viewer/server installeert betekent dit dat je volledige suites zoals LibreOffice en Firefox kan draaien. Het is niet de beste manier qua performance maar sommige dingen kan een app echt niet helpen.
Denk aan Mono, er zijn distro's beschikbaar met ARM-Mono beschikbaar, waardoor je tools die je oorspronkelijk alleen op je PC kon draaien ook op je mobiel kan draaien.
[Reactie plaatsen]

Details

Avatar gertmenkel
Door: gertmenkel
Categorie: Besturingssystemen
15/7/2013 12:55
974x bekeken

Opties

Ik vind dit: Leuk  Niet leuk
Leuk
2
Niet leuk
0
Naar boven