[How-To] Debian (chroot) mit LXDE auf dem Milestone

F

Fnordi

Neues Mitglied
10
Ich beschreibe hier eine Methode, um Debian in einer chroot-Umgebung auf den Milestone zu installieren.
Das hat den Vorteil, dass man Zugriff auf eine vollwertige Shell und auf nahezu alle Programme hat, die einem Debian bietet (z.B. nmap, samba, ssh, wireshark etc.)
Ebenso kann man eine grafische Oberfläche installieren, auf die man per VNC zugreifen kann.
Man findet zwar einige Anleitungen im Netz, allerdings nicht direkt für das Milestone, darum habe ich mich dazu entschieden, hier eine kleine Howto für den Stein zusammenzufassen.


Es gibt grundsätzlich 2 Möglichkeiten:

1. Mit debootstrap eine chroot-Umgebug erstellen, diese auf das Smartphone kopieren und alle weiteren Schritte von dort ausführen.
2. Mit build-arm-chroot eine chroot-Umgebung erstellen, die second-stage und die Paketinstallation durchführen bevor man das Image auf das Milestone kopiert.

Die 2. Möglichkeit bietet den Vorteil, dass man die Rechnenleistung des Milestone während der second-stage von debootstrap nicht an die grenzen treibt. Mit Android 2.0.1 hat sich debootstrap durch die hohe Last auf meinem Milestone mehrmals aufgehängt. Mit 2.1 habe ich es erst einmal getestet, dabei lief es ohne Probleme durch.
Trotzdem werde ich hier nur die 2. Methode beschreiben, da es für die 1. mehrere Anleitungen im Netz gibt und sich die 2. für mich als die zuverlässigere herausgestellt hat :)




Voraussetzungen:

- Android 2.0.1 / 2.1
- root
- busybox (im Anhang)
- ConnectBot oder ein anderer Terminal Emulator
- Dateimanager z.B. Root Explorer (gibts im Market zu kaufen) oder man macht alles im Terminal
- android VNC client
- Ubuntu GNU/Linux (eine VM geht genau so gut)
- ext2.ko (im Anhang)
- Scripts (im Anhang)




Chroot-Umgebung erstellen mit Ubuntu:




Zunächst werden debootstrap und qemu-arm-static benötigt. Qemu um die second-stage von debootstrap unter Ubuntu ausführen zu können.

Code:
$ sudo apt-get install qemu-arm-static debootstrap


Eine Imagedatei mit einem ext2 Dateisystem und ca. 3,3GB Größe erstellen, das sollte für einige Programme reichen:

Code:
$ sudo dd if=/dev/zero of=debian.img bs=1024 count=3500000
$ sudo mkfs.ext2 -F debian.img
$ sudo tune2fs -c0 debian.img


Ein Verzeichnis erstellen und das erstellte Image mounten:

Code:
$ mkdir debian
$ sudo mount -o loop debian.img debian/


Mit build-arm-chroot das Basissystem installieren und anschließend den Mountpoint für die SD-Karte erstellen:

Code:
$ sudo build-arm-chroot --verbose --arch=armel --foreign lenny debian http://ftp.de.debian.org/debian
$ sudo mkdir debian/sdcard


Jetzt kann man per chroot in das neu installierte System wechseln:

Code:
$ sudo mount -t proc none debian/proc/
$ sudo mount -t sysfs sysfs debian/sys/
$ sudo mount -t devpts devpts debian/dev/pts
$ sudo chroot debian/ /bin/bash
# export HOME=/root
# export LC_ALL=C


Um Pakete installieren zu können braucht APT noch eine Quelle:

Code:
# echo 'deb http://ftp.de.debian.org/debian lenny main contrib non-free' > /etc/apt/sources.list
# apt-get update

Nun kann man alle Pakete installieren, die man benötigt.


Die grafische Oberfläche (hier LXDE) und einen VNC-Server installieren:

Code:
# apt-get install lxde tightvncserver

Wenn alle gewünschten Programme installiert sind, kann man die chroot-Umgebung aufräumen und verlassen:

Code:
# apt-get clean
# killall /usr/bin/qemu-arm-static
# exit
$ sudo umount debian/proc
$ sudo umount debian/dev/pts
$ sudo umount debian/sys
$ sudo umount debian/



Das Milestone vorbereiten um das Debian-System nutzen zu können:




Zuerst auf der SD-Karte einen Ordner namens "debian" erstellen und die zuvor erzeugte Datei debian.img hineinkopieren.

Die debian.zip aus dem Anhang herunterladen, die Dateien nach /sdcard/debian/ entpacken.

Jetzt die Dateien auf dem Milestone in die richtigen Ordner kopieren und die Berechtigung setzen:

Code:
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock6 /system
# cp /sdcard/debian/busybox /system/bin/
# chmod 755 /system/bin/busybox
# cp /sdcard/debian/ext2.ko /system/lib/modules/
# chmod 644 /system/lib/modules/ext2.ko
# cp /sdcard/debian/startdeb /system/bin/
# chmod 755 /system/bin/startdeb
# cp /sdcard/debian/stopdeb /system/bin/    
# chmod 755 /system/bin/stopdeb

Achtung: Das stopdeb Script funktioniert nur, wenn alle Prozesse in der chroot-Umgebung beendet sind.


Folgende Ordner müssen noch als Mountpunkt ertellt werden:

Code:
# mkdir /data/local/debian
# mkdir /data/local/debian/mnt

In die chroot-Umgebung wechseln:

Code:
$ su 
# startdeb

Den Nameserver ändern:

Code:
# echo 'nameserver 4.2.2.2' > /etc/resolv.conf

Den Hostnamen anpassen:

Code:
# echo "localhost" > /etc/hostname
# echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts


LXDE und den VNC-Server fertig einrichten:

Code:
# export HOME=/root
# export USER=root
# vncserver -geometry 854x480

Hier das Passwort setzen, welches später verwendet wird, um sich am VNC-Server anzumelden.


Die Datei /root/.vnc/xstartup editieren, z.B. mit nano:

Code:
# nano -w /root/.vnc/xstartup

folgende Zeile auskommentieren:

Code:
#/etc/X11/Xsession

folgende Zeile hinzufügen:

Code:
lxsession


Nun ein Startscript für LXDE erstellen:

Code:
# nano -w /usr/sbin/lxde

Inhalt:

Code:
#!bin/bash
export USER=root
vncserver -geometry 854x480

Script ausführbar machen:

Code:
# chmod +x /usr/sbin/lxde

LXDE muss jedes mal manuell gestartet werden.
So vermeidet man, dass jedes mal wenn man z.B. unter LXDE eine Konsole öffnet, ein neuer VNC-Server (mit LXDE) gestartet wird.


Zusätzlich kann man ein Script erstellen, welches LXDE wieder beendet (tötet):


Code:
# nano -w /usr/sbin/klxde

Inhalt:

Code:
#!/bin/bash
killall Xtightvnc && killall lxsession


Script ausführbar machen und LXDE starten:

Code:
# chmod +x /usr/sbin/klxde
# lxde


Nun mit dem VNC Client eine Verbindung zu localhost Port 5901 herstellen mit dem zuvor gesetzten Passwort.
Wenn alles geklappt hat, sollte man nun die LXDE Oberfläche sehen.



Jetzt kann nach jedem Neustart des Steins mit "startdeb" die Debian chroot-Umgebung gemountet und "gestartet" werden.
Mit "lxde" kann dann der VNCServer inkl LXDE gestartet werden.





Für Anregungen und Verbesserungsvorschläge bin ich immer offen.

Viel Spaß beim Ausprobieren! :cool:
 

Anhänge

  • debian.zip
    1,2 MB · Aufrufe: 1.757
Zuletzt bearbeitet:
  • Danke
Reaktionen: frucht_gummi, punkrocker, sandimann und 3 andere
Hatte Debian eben schon fast zum laufen bekommen.
Hat aber ewig gedauert, da die Anleitung unvollständig und für das G1 waren.

Deswegen bin ich grad dabei alles nochmal neu nach deiner Anleitung zu machen.
Die 2. Methode ist viel besser als die erste! :D

Habs gleich soweit und bin sicher das es klappen wird!
Vielen Dank, das du dir die Zeit genommen hast! :)
Der Thread sollte angepinnt werden. <3

Edit: Jetzt bin ich wieder bei der Package configuration von lxde, eben auf Windows wurde es Fehlerhaft angezeigt, deswegen diese ganze komischen Zeichen.
Bin jetzt aber auf Linux und kann da jetzt was auswählen:

  • Select keymap from arch list
  • Don't touch keymap
  • Keep kernel keymap
  • Select keymap from full list

Was soll ich auswählen ? :confused:
 
Zuletzt bearbeitet von einem Moderator:
Im Zweifelsfall immer Return drücken, Standard eben :D
 
Ok, hab einfach 'Select keymap from arch list' genommen.
Es geht voran! :D
 
Wie wärs wenn du das ganze noch als Script machst ? :)
 
Könnte ich mal in Anfriff nehmen, aber heute wird das wohl nix mehr ;)
 
Scheint irgendwas falsch zu sein in deinem startdeb script.
Bekomme immer das hier:

Code:
# startdeb
insmod: init_module '/system/lib/modules/ext2.ko' failed (File exists)
ioctl LOOP_SET_FD failed: Device or resource busy
mount: mounting /sdcard on /data/local/debian/mnt/sdcard failed: No such file or directory
mount: mounting none on /data/local/debian/mnt/proc failed: No such file or directory
mount: mounting sysfs on /data/local/debian/mnt/sys failed: No such file or directory
mount: mounting devpts on /data/local/debian/mnt/dev/pts failed: No such file or directory
chroot: cannot execute /bin/bash: No such file or directory

>.>

Edit: Muss man busybox nicht erst installieren und den Pfad exportieren ?
 
Zuletzt bearbeitet von einem Moderator:
ioctl LOOP_SET_FD failed: Device or resource busy

Ich glaube da stimmt was nich mit deinem loop-Device, du hattest das vorhin selbst angelegt für eine andere Anleitung, richtig?

Was gibt denn folgendes aus:

Code:
busybox losetup -f
?
 
Zuletzt bearbeitet:
Code:
loop0 existiert nicht mal mehr in /dev/.

Aber trotzdem kriegt startdeb es nicht hin eine zu erstellen.

Edit:

Code:
# busybox losetup -f
/dev/loop1
 
Sieht aus, als sei loop0 belegt.

Kannst du das mit
Code:
busybox losetup -d /dev/loop0
befreien?
 
'busybox losetup -d /dev/loop0' wurde erfolgreich ausgeführt, erzielte aber keine Wirkung:

Code:
ioctl LOOP_SET_FD failed: Device or resource busy
 
Dann versuch mal folgendes:

anstatt
Code:
mount -o loop -t ext2 /sdcard/debian/debian.img /data/local/debian/mnt

das hier:
Code:
LOOP=`busybox losetup -f`
busybox losetup $LOOP /sdcard/debian/debian.img
mount -t ext2 $LOOP /data/local/debian/mnt

und zum unmounten dann:
Code:
umount /data/local/debian/mnt
busybox losetup -d $LOOP
 
Hallo, sorry ich kann nicht Deutsch sprechen. Also ich bin mit Google Translate ...

Vielen Dank dafür! Ich dachte, es war nicht auf der Milestone möglich.

Ist das Netzwerk Arbeit für andere? Ich habe eine IP und einen Weg, kann aber nicht ping etwas?

-----------------
(English: Hi, sorry I can't speak German. So I'm using Google Translate...

Thank you for this! I thought it wasn't possible on the Milestone.

Does the network work for anyone else? I have an IP, and a route, but can't ping anything?)
 
also... ich habe mittlerweile ein ganz anderes problem...

beim eingeben von lxde bekomme ich folgende meldung:

Code:
xauth: (argv):1: bad display name "localhost:[hier nummer des versuchs einsetzen... also 1, 2, 3 usw] in "add" command

New 'X' desktop is localhost:[hier auch nummer des versuchs einsetzen... also auch 1, 2, 3 usw]

Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost[nummer des versuchs].log

wobei ich über androidVNC nach lxde komme... sicher habe ich irgendwo was vergessen...

EDIT: zu anfang kam ich noch über androidVNC nach lxde, aber nach nem reboot ist auch das nicht mehr möglich... :(

EDIT2: komisch... manchmal gehts über androidVNC manchmal nicht... aber das lxde script macht nicht was es soll... leider... wäre für eine erklärung/lösung dankbar...
 
Zuletzt bearbeitet:
Hallo,

Das mit dem Fehler beim Starten von LXDE ist recht schnell gelöst:

In der chroot folgende Befehle ausführen:

Code:
echo "localhost" > /etc/hostname
echo "127.0.0.1 localhost.localdomain localhost" > /etc/hosts
Danach sollte der Fehler nicht mehr kommen.

Wie meinst du androidVNC funktioniert nicht immer, kannst gar nicht verbinden oder kommt kein/ein nicht vollständiges Bild?
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Hdr32
super... die fehlermeldung ist weg...

und das mit androidVNC ist wharscheinlich nur was einmaliges gewesen... also nun schein das recht reibungslos zu funktionieren... auch wenn es ewig dauert bis ich in lxde ein programm geladen habe... man denkt immer er hätte den befehl nicht angenommen... aber dann hat ers doch... naja... aber so ist das halt...

vllt als tip für dein tutorial: du könntest ja noch den downloadlink für androidVNC (also hier: android-vnc-viewer - Project Hosting on Google Code) und anweisungen zum verbinden geben anstatt nur zu sagen, dass man sich dann mit dem server verbinden soll... ich meine... vllt kennt nicht jeder androidVNC (was ich am komfortabelsten für leute ohne ahnung finde... man muss halt nur die .apk datei installieren und hat ein nettes interface...) oder weiß wie das funktionert mit dem verbinden... aber das ist nur eine idee...
 
Danke fürs Tut, das debia.img wurde hoffentlich richtig erstellt ;) Nur frage ich mich: Kann ich, wenn dich die debian.img wieder auf den Rechner ziehen, sie mit chroot wieder bearbeiten und neue tools installieren und wieder draufschieben? Oder kann ich die tools direkt aufm Milestone installieren? Weil ich dachte das a) sich die img wieder zurücksetzt und b) ich keine internetverbindung habe oder?

also mit:
Code:
$ sudo mount -o loop debian.img debian/
$ sudo mount -t proc none debian/proc/
$ sudo mount -t sysfs sysfs debian/sys/
$ sudo mount -t devpts devpts debian/dev/pts
$ sudo chroot debian/ /bin/bash

Brauch ich dann noch:
Code:
# export HOME=/root
# export LC_ALL=C
Oder geht das auch ohne?

Sind die 3Gb vllt. etwas zu groß? Reicht nicht auch nur 1Gb? Sonst müsst ich mir eine größere SD holen :p

//edit: geil geil geil! Hat alles auf anhierb geklappt :)

Ne andere Sache: Der Umgang mit nano... Wenn der Fehler anzeigen sollte, z.B. das man in einer anderen Zeile schreibt einfach ignorieren und zusätzlich, dass man die datei speichert und beendet mit D-Pad Mitte + x
 
Zuletzt bearbeitet:
So bin wieder einigermaßen gesund und wollt nur mal berichten, das Debian nach neuem sbf flash läuft!

Wobei ich irgendwie nen kleinen fehler mit lxde habe.
Also wenn ich lxde mit dem Befehl starte dann kommt immer nen Fehler, dass der XScreen xy schon belegt ist. Also er erstellt jedesmal nen neuen.
Muss dann immer dementsprechend nen neuen Port nehmen.
Hab die ab und zu gelöscht aber bringt nix, bin jetzt wieder beim 3ten und muss halt den port 5903 benutzen.

Davon abgesehen läuft es sehr stabil, aber die Steuerung ist ein bischen gewöhnungsbedürftig und ich weiss jetzt nicht wirklich damit was anzufangen weil da so gut wie nix drauf ist. ^^
Obwohl da fällt mir grad ein ich kann ja als chroot mit apt-get neue Applikationen hinzufügen. :D

Nochmal danke für das Tutorial Fnordi. ;)

@MyStone: Nano funktioniert übrigens am besten mit dem Terminal Emulator.
Hatte es erst mit connectbot probiert aber der kann damit nicht ganz umgehen.
Am Pc im Linux Terminal konnt ich die Dateien nicht mal abspeichern.

Edit: Kann ich die .img eigentlich noch im nachhinein schrumpfen ?
3,3 GB sind mir auch nen bisschen zu viel.. er brauch immer recht lang die SD Karte einzulesen beim booten.
 
Zuletzt bearbeitet von einem Moderator:
Hmm... Also ich habe mit ConnectBot halt nur manchmal anzeige probleme, die ich einfach ignoriere. Der macht trotzdem was getippt wurde (sieht halt nur nicht so aus :p). Ich hol mir aber trotzdem noch den Terminal Emulator. Im nachhinein Schrumpfen... hmmm... kA habs mir grad erst zurecht gemacht mit 1Gb. Hab noch 480Mb frei...

//edit: Wie kann ich den My Documents Link auf dem LxDE Desktop bearbeiten? Der sagt mir immer es konnte nicht gefunden werden...
//edit2: führ doch mal klxde aus... dann sollte der eigentlich wieder bei 1 anfangen
 
Zuletzt bearbeitet:
klxde hilft nix.
Hier mal nen Screen:

nRq3.png

(die erste Fehlermeldung ist ok, weil ichs schon vorher gestartet hatte)

Hab auch nochmal die lxde und klxde in /usr/xbin/ geprüft, sind beide richtig wie nach dem Tutorial.
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

B
Antworten
6
Aufrufe
7.551
martin_austria
M
sk92le
Antworten
1
Aufrufe
2.931
sk92le
sk92le
-FuFu-
  • -FuFu-
Antworten
0
Aufrufe
2.583
-FuFu-
-FuFu-
Zurück
Oben Unten