Wie bereits erwähnt, müssen Sie eine ARM-fähige Chroot auf Ihrem Gerät installieren und alle erforderlichen Pakete in dieser Chroot installieren. Dies in Ihrem Home-Verzeichnis zu tun, verschwendet jedoch viel wertvollen Speicherplatz. Stattdessen kann es auf Ihrer SD-Karte mit einem Computer unter einem geeigneten Linux-Betriebssystem (getestet unter Linux Mint 17 und Ubuntu Trusty) ausgeführt werden. Da ich sonst nirgendwo Informationen dazu gefunden habe, habe ich sie hier als Antwort auf eine alte Frage abgelegt.
Die folgenden Anweisungen setzen voraus, dass Sie ein Debian-Jessie-Chroot im Verzeichnis Jessie installieren möchten.
Erstellen und Auffüllen der Image-Datei auf einem Desktop-Computer
Erstellen einer leeren Bilddatei
So erstellen Sie ein 1-GB-Image mit dem Namen IMAGE.img im aktuellen Arbeitsverzeichnis:
dd if=/dev/zero of=IMAGE.img bs=1G count=1
Beachten Sie, dass das B in GB weggelassen wird. "if" steht für "input file", "of" für "output file" und "bs" für "block size".
Es gibt effizientere Befehle, die meines Wissens jedoch nur auf bestimmten Arten von Dateisystemen funktionieren. Dieser funktioniert auch auf einer SD-Karte oder einem tempfs. Beachten Sie bitte die Verwendung von / dev / zero und nicht / dev / random oder / dev / urandom, da dies viel länger dauern würde und die spätere Übertragung des Images zwischen Geräten viel länger dauern würde.
Erstellen eines Dateisystems für das Image
Ohne das Dateisystem kann das Telefon keine Daten auf dem Bild speichern. Ohne ein Dateisystem können Sie das Image noch nicht in einem Verzeichnis bereitstellen, sondern nur auf einem Blockgerät.
Dieser Bash-Befehl gibt das nächste leere Loop-Gerät in die Variable aus LOOP
:
$LOOP=$(sudo losetup -f)
Weisen Sie als Nächstes das Image einem Blockgerät zu:
sudo losetup $LOOP IMAGE.img
Als nächstes erstellen Sie das ext4-Dateisystem:
sudo mkfs -t ext4 $LOOP
Trennen Sie als Nächstes das Bild vom Loop-Gerät:
sudo losetup -d $LOOP
Wenn der Befehl nicht gefunden wird, installieren Sie einfach die fehlenden Programme.
Hängen Sie die Image-Datei auf dem Computer ein, um darauf zuzugreifen
Erstellen Sie nun ein temporäres Verzeichnis im Arbeitsverzeichnis:
mkdir jessie
und hängen Sie die Image-Datei IMAGE.img an:
sudo mount -o loop IMAGE.img $(pwd)/jessie
Der Befehl stellt pwd
sicher, dass Sie mount einen absoluten Pfad zu Ihrem aktuellen Arbeitsverzeichnis geben.
Füllen Sie das Image mit dem neuen Betriebssystem mit qemu-debootstrap
Der nächste Schritt ist die Verwendung von qemu-debootstrap, um die erforderlichen Dateien herunterzuladen. Dies ist einfach, wenn qemu-debootstrap verfügbar ist, wie dies unter Ubuntu und abgeleiteten Betriebssystemen der Fall ist. Wenn Sie beim Ausführen des Befehls keine Fehler finden
qemu-debootstrap --help
, versuchen Sie, das entsprechende Paket zu installieren. Dies kann unter Ubuntu folgendermaßen geschehen:
sudo apt-get install qemu-user-static
Führen Sie den folgenden Befehl aus, um alle erforderlichen Dateien herunterzuladen und das neue Betriebssystem vorzubereiten:
sudo qemu-debootstrap --arch=armhf jessie ./jessie http://http.debian.net/debian
Bitte beachten Sie, dass das erste jessie
für die Betriebssystemversion steht, während das zweite jessie
für das Verzeichnis steht, in dem die Dateien installiert werden sollen. Jetzt können Sie das Image aushängen, da der Rest der Arbeit auf dem Telefon erledigt werden muss. Tun Sie dies über:
sudo umount $(pwd)/jessie
Wenn Sie qemu-debootstrap nicht installieren können, lesen Sie den nächsten Abschnitt.
Füllen Sie das Image mit dem neuen Betriebssystem ohne qemu-debootstrap
Bitte überspringen Sie diesen Abschnitt, wenn Sie QEMU-Debootstrap zur Verfügung haben. Sie benötigen jedoch weiterhin einen nativen Debootstrap für Ihre Architektur. Wenn dies armhf ist, benutze einfach die obige Befehlszeile, aber ersetze sie qemu-debootstrap
durch
debootstrap
. Wenn nicht, folgen Sie diesem Abschnitt.
Führen Sie den folgenden Befehl aus, um alle erforderlichen Dateien für das neue Betriebssystem herunterzuladen:
sudo debootstrap --arch=armhf --foreign jessie ./jessie \
http://http.debian.net/debian
Jetzt können Sie das Image aushängen, da der Rest der Arbeit am Telefon erledigt werden muss. Tun Sie dies über:
sudo umount $(pwd)/jessie
Übertragen Sie das Bild auf das Telefon
Erstellen Sie nun am besten ein Tar-Archiv, das Sie dann auf Ihr Telefon kopieren. Es spielt keine Rolle, ob das Archiv auf der SD-Karte oder im internen Speicher abgelegt ist. Erstellen Sie das Archiv auf dem Desktop mit:
tar -cvzf jessie.tar.gz IMAGE.img
Schalten Sie jetzt auf Ihrem Telefon die SSH-Unterstützung ein, um das Bild zu kopieren. Sie können das auch mit einem USB-Kabel machen. Da der SSH-Server bei jedem Neustart zurückgesetzt wird, starten Sie den SSH-Dienst auf dem Telefon über:
sudo service ssh start
Als nächstes kopieren Sie das Bild über:
scp jessie.tar.gz phablet@ubuntu-phablet:$COPYDIR
Dabei COPYDIR
enthält die Variable das Verzeichnis, in dem das Bild gespeichert werden soll. Dieser Befehl setzt voraus, dass Ihr Benutzername auf dem Telefon Phablet und der Hostname des Telefons Ubuntu-Phablet ist. Sie können dies sowohl durch Ausgabe echo $USER
als auch echo $HOSTNAME
telefonisch herausfinden .
Jetzt müssen Sie das Archiv nur noch an der Stelle extrahieren, an der sich das Bild befinden soll. Angenommen, das Verzeichnis, in dem sich das Bild befinden soll, ist in der Variablen gespeichert IMAGEDIR
. Extrahieren Sie dort das Bild mit dem Befehl bash:
( cd $IMAGEDIR; tar -xvzf $COPYDIR/jessie.tar.gz; )
Sie können das Archiv jetzt entfernen:
rm $COPYDIR/jessie.tar.gz
Finalisieren und Verwenden des Bildes auf dem Telefon
Wenn Sie den SSH-Server auf dem Telefon nicht eingeschaltet haben, tun Sie dies jetzt über:
sudo service ssh start
Als nächstes mounten Sie Ihr Image in ein Verzeichnis Ihrer Wahl (in diesem Fall "jessie"):
sudo mount -o loop $IMAGEDIR/IMAGE.img $(pwd)/jessie
Geben Sie jetzt Ihre Chroot zum ersten Mal ein über:
ssh localhost "sudo chroot $(pwd)/jessie /bin/bash"
Wenn Sie qemu-debootstrap auf Ihrem Computer zur Verfügung hatten, sind Sie fertig. Verwenden Sie die obigen 2 Befehle, um eine Verbindung zu Ihrer Chroot herzustellen. Wenn nicht, müssen Sie den folgenden Befehl ausführen, sobald Sie sich in Ihrer Chroot befinden, um das Betriebssystem ordnungsgemäß einzurichten:
/debootstrap/debootstrap --second-stage
Zusammenfassung, wie auf die Chroot zugegriffen wird
Wenn Sie die obigen Schritte ausgeführt haben, sollten Sie in der Lage sein, mithilfe dieses einfachen Skripts auf dem Telefon auf Ihre Chroot zuzugreifen:
#!/bin/bash
sudo service ssh start
ssh localhost "sudo chroot jessie /bin/bash"
Sie müssen aufgrund von Apparmor-Einschränkungen der Terminal-App zuerst vom Telefon auf Ihr eigenes Telefon ssh. Die Terminal-App darf Binärdateien nur an bestimmten Orten ausführen und weder Ihr Home-Verzeichnis noch die SD-Karte gehören dazu. Der SSH-Dienst unterliegt jedoch keinen solchen Einschränkungen.