1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

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

Dieses Thema im Forum "Anleitungen für Motorola Milestone" wurde erstellt von Fnordi, 09.05.2010.

  1. Fnordi, 09.05.2010 #1
    Fnordi

    Fnordi Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    7
    Registriert seit:
    09.05.2010
    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:

    Zuletzt bearbeitet: 11.05.2010
    frucht_gummi, punkrocker, sandimann und 3 andere haben sich bedankt.
  2. 7Voo, 09.05.2010 #2
    7Voo

    7Voo Gast

    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 von einem Moderator bearbeitet: 09.05.2010
  3. Fnordi, 09.05.2010 #3
    Fnordi

    Fnordi Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    7
    Registriert seit:
    09.05.2010
    Im Zweifelsfall immer Return drücken, Standard eben :D
     
  4. 7Voo, 09.05.2010 #4
    7Voo

    7Voo Gast

    Ok, hab einfach 'Select keymap from arch list' genommen.
    Es geht voran! :D
     
  5. N!CE, 09.05.2010 #5
    N!CE

    N!CE Android-Hilfe.de Mitglied

    Beiträge:
    109
    Erhaltene Danke:
    38
    Registriert seit:
    25.03.2010
    Phone:
    Motorola Milestone
    Wie wärs wenn du das ganze noch als Script machst ? :)
     
  6. Fnordi, 09.05.2010 #6
    Fnordi

    Fnordi Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    7
    Registriert seit:
    09.05.2010
    Könnte ich mal in Anfriff nehmen, aber heute wird das wohl nix mehr ;)
     
  7. 7Voo, 09.05.2010 #7
    7Voo

    7Voo Gast

    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 von einem Moderator bearbeitet: 09.05.2010
  8. Fnordi, 09.05.2010 #8
    Fnordi

    Fnordi Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    7
    Registriert seit:
    09.05.2010

    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: 09.05.2010
  9. 7Voo, 09.05.2010 #9
    7Voo

    7Voo Gast

    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
    
     
  10. Fnordi, 09.05.2010 #10
    Fnordi

    Fnordi Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    7
    Registriert seit:
    09.05.2010
    Sieht aus, als sei loop0 belegt.

    Kannst du das mit
    Code:
    busybox losetup -d /dev/loop0
    
    befreien?
     
  11. 7Voo, 09.05.2010 #11
    7Voo

    7Voo Gast

    'busybox losetup -d /dev/loop0' wurde erfolgreich ausgeführt, erzielte aber keine Wirkung:

    Code:
    ioctl LOOP_SET_FD failed: Device or resource busy
    
     
  12. Fnordi, 10.05.2010 #12
    Fnordi

    Fnordi Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    7
    Registriert seit:
    09.05.2010
    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
    
     
  13. slight, 10.05.2010 #13
    slight

    slight Neuer Benutzer

    Beiträge:
    1
    Erhaltene Danke:
    0
    Registriert seit:
    10.05.2010
    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?)
     
  14. Hdr32, 11.05.2010 #14
    Hdr32

    Hdr32 Junior Mitglied

    Beiträge:
    34
    Erhaltene Danke:
    0
    Registriert seit:
    07.05.2010
    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: 11.05.2010
  15. Fnordi, 11.05.2010 #15
    Fnordi

    Fnordi Threadstarter Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    7
    Registriert seit:
    09.05.2010
    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: 11.05.2010
    Hdr32 bedankt sich.
  16. Hdr32, 11.05.2010 #16
    Hdr32

    Hdr32 Junior Mitglied

    Beiträge:
    34
    Erhaltene Danke:
    0
    Registriert seit:
    07.05.2010
    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...
     
  17. MyStone, 11.05.2010 #17
    MyStone

    MyStone Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    16
    Registriert seit:
    10.04.2010
    Phone:
    Huawei Ascend P6
    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: 12.05.2010
  18. 7Voo, 12.05.2010 #18
    7Voo

    7Voo Gast

    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 von einem Moderator bearbeitet: 12.05.2010
  19. MyStone, 12.05.2010 #19
    MyStone

    MyStone Android-Hilfe.de Mitglied

    Beiträge:
    129
    Erhaltene Danke:
    16
    Registriert seit:
    10.04.2010
    Phone:
    Huawei Ascend P6
    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: 12.05.2010
  20. 7Voo, 13.05.2010 #20
    7Voo

    7Voo Gast

    klxde hilft nix.
    Hier mal nen Screen:

    [​IMG]
    (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 von einem Moderator bearbeitet: 13.05.2010

Diese Seite empfehlen