Empfohlene Methode, um reguläre (cli) .deb-Pakete auf Ubuntu Phone zu installieren?

12

tl; dr: Ich suche nach einer "kanonischen" oder "empfohlenen" Möglichkeit, (cli) .deb-Pakete auf Ubuntu touch zu installieren

Ich benutze Ubuntu seit einem Jahr auf meinem Desktop und Server und bin sehr zufrieden. Jetzt habe ich das erste Ubuntu-Handy gekauft, das BQ Aquaris e4.5 Ubuntu Edition. Ich habe jedoch festgestellt, dass ich keine normalen .debPakete installieren oder Dinge mit installieren kann apt-get. Wie kann ich mein Telefon "rooten", damit ich "normale" .debPakete installieren kann ?

Ich habe es selbst versucht. Ich weiß, dass das Erste ist, Ihr Dateisystem beschreibbar zu machen. Ich habe die folgenden Schritte ausgeführt, bin dann aber aufgrund eines dpkg-Fehlers hängen geblieben.

# Desktop:
sudo add-apt-repository ppa:phablet-team/tools
sudo apt-get update
sudo apt-get install phablet-tools

# Phone:
Security & Privacy: Lock phone: Lock when idle: Never
About this phone: Developer Mode: Developer Mode ON

# connect phone to PC via USB

# Desktop:
adb devices
# no device detected so I've manually added file
touch /home/username/.android/adb_usb.ini
# with content: 0x2a47
sudo adb kill-server
sudo adb start-server
adb devices # now my phone is on the list

# Phone:
sudo test -w filename && echo "Writable" || echo "Not Writable"
# verified it is writable
sudo add-apt-repository ppa:phablet-team/ppa
sudo apt-get update && sudo apt-get upgrade

Und hier beginnt der Fehler, mich zu blockieren:

dpkg: error processing archive /var/cache/apt/archives/powerd_0.16+15.04.20150430-0ubuntu1_armhf.deb (--unpack):
unable to make backup link of `./usr/share/powerd/device_configs/config-default.xml' before installing new version: Invalid cross-device link

Also habe ich es versucht

sudo apt-get install -f

Aber es blieb bei "Bluetooth-Hauptkonfiguration" hängen. Ich habe das Telefon neu gestartet, aber es wollte sich nicht mehr einschalten. Ich habe die RecoverBoot-Option ausprobiert . Das hat funktioniert. Ich habe es noch install -feinmal versucht , und diesmal hat es funktioniert. Aber danach hatte upgradeich immer noch den gleichen Fehler.

jangorecki
quelle
Es wird nicht unterstützt, die Systempartition beschreibbar zu machen und apt zu verwenden. Wenn Sie aus irgendeinem Grund wirklich einige Konsolen-Apps benötigen, erstellen Sie am besten eine Chroot-Datei im Ausgangsverzeichnis und installieren Sie die benötigten Dateien in dieser Chroot-Datei.
Dienstag,
1
Ich kann bestätigen, dass die Verwendung von apt-get upgrade zu einem Systemausfall führt. Kenne ich schon.
Merlijn Sebrechts
1
@Galgalesh danke für die Bearbeitung, sieht nicht viel besser aus. Wie für den
Moment wird
1
Gib es bitte an @dobey. Seine Antwort ist viel besser :)
Merlijn Sebrechts
1
Bitte klicken Sie auch auf "Diese Antwort akzeptieren" neben der Antwort. :)
Dobey

Antworten:

17

Erstellen Sie eine Chroot im Home-Verzeichnis:

mkdir -p lebhafte Chroot
cd vivid-chroot
wget http://cdimage.ubuntu.com/ubuntu-touch/vivid/daily-preinstalled/current/vivid-preinstalled-touch-armhf.tar.gz
sudo tar -zxvf vivid-vorinstalliert-touch-armhf.tar.gz

Verwenden Sie dann die Chroot und installieren Sie alle erforderlichen CLI-Tools in dieser Chroot:

cd ~ / vivid-chroot
Sudo Chroot.
apt-get update
apt-get install git

Um bestimmte Dinge auszuführen, kann es erforderlich sein, einige Verzeichnisse zu binden. Sie müssen dabei besonders vorsichtig sein, wenn Sie die Chroot von Ihrem Telefon löschen oder andere zerstörerische Aktionen ausführen möchten.

sudo mount --bind / proc / home / phablet / vivid-chroot / proc
sudo mount --bind / dev / home / phablet / vivid-chroot / dev
sudo mount --bind / sys / home / phablet / vivid-chroot / sys

Dies ist keine vollständige Liste, aber Sie können andere Verzeichnisse nach Bedarf auf ähnliche Weise binden. Sie müssen die Chroot nicht in Ihrem Home-Verzeichnis erstellen, wenn Sie ein externes Speichergerät zum Erstellen haben, z. B. eine SD-Karte. Allerdings verfügen nicht alle Telefone über SD-Kartensteckplätze. Wenn Sie die Chroot auf einer SD-Karte erstellen möchten, ersetzen Sie einfach das Ausgangsverzeichnis in den obigen Befehlen durch den Pfad zu einem Verzeichnis auf Ihrem alternativen Speichermedium, in dem Sie die Chroot erstellen möchten.

dobey
quelle
Wow, vielen Dank für diese Anleitung! Ich bin froh, dass ich mich nicht /mehr damit
herumschlagen muss,
Außerdem, sudo mount -o bind /run /home/phablet/vivid-chroot/runum das Netzwerk in chroot zu bekommen askubuntu.com/questions/469209/…
sdbbs
1
@sdbbs Ich denke nicht, dass das notwendig ist. Ich binde nichts in meine Chroot, und der Netzwerkzugriff funktioniert einwandfrei. Ich benutze bzr und apt die ganze Zeit darin.
Dienstag,
Ich habe /etc/resolv.conf in vivid-chroot / etc kopiert, damit die DNS-Auflösung funktioniert.
Popey
4

Warnung: Dies ist nur ein Hack , um das Problem der geräteübergreifenden Verbindung bei einem Apt-Get-Upgrade mit dem PowerD-Paket zu beseitigen. Dies ist keine "UBUNTU" -zertifizierte Lösung

Voraussetzung: R / W zur Ubuntu-Installation gemacht mit:

phablet-config writable-image

Kopieren Sie die heruntergeladene powerd * .deb-Datei vom Telefon auf einen PC unter folgendem Pfad:

/ var / cache / apt / archives /

Entpacke auf dem PC die .deb-Datei und entferne die Datei /usr/share/powerd/device_configs/config-default.xml (aus meinen Tests ergibt sich, dass dies nicht grundlegend ist):

su - root
mkdir tmp
dpkg-deb -R powerd_0.16+15.04.20150507-0ubuntu1_armhf.deb tmp
rm tmp/usr/share/powerd/device_configs/config-default.xml
mv powerd_0.16+15.04.20150507-0ubuntu1_armhf.deb old.deb
dpkg-deb -b tmp powerd_0.16+15.04.20150507-0ubuntu1_armhf.deb 

Alles muss als root ausgeführt werden, um die ursprünglichen Berechtigungen der Paketdateien und Verzeichnisse beizubehalten. Neu packen, auf das Telefon zurückkopieren und installieren mit:

sudo dpkg -i powerd_0.16+15.04.20150507-0ubuntu1_armhf.deb

Sie erhalten weiterhin den Fehler:

"/usr/share/powerd/device_configs/config-default.xml": Gerät oder Ressource belegt

Aber am Ende wird das Paket aktualisiert.

Wenn Sie dies tun, ist sudo apt-get upgradeder Fehler verschwunden.

Mein Telefon BQ Aquaris scheint gut und stabil zu funktionieren.

Ezio Somà
quelle
Danke für die Lösung! Ich werde es vorerst nicht akzeptieren, da ich immer noch hoffe, einen empfohlenen (nicht unterstützten ) Weg zu finden, um dies zu tun. Übrigens. Was ist mit zukünftigen Updates von powerd? Muss es bei jedem Update gehackt werden?
Jangorecki
Bis jemand das Problem der Verwendung von Hardlinks in dpkg (eine alte Geschichte) bei einer geräteübergreifenden Installation löst, sehe ich derzeit keine alternative Lösung.
Ezio Somà,
1
Möglicherweise sollte es möglich sein, einige Einhängepunkte zu ändern, um diesen geräteübergreifenden Hardlink zu vermeiden, aber einige Zeit zu benötigen, um analysiert zu werden. Nur durch die Suche nach fstab-Datei oder mont-Ausgabe konnte ich nicht herausfinden, was der Zufall
bringt
3

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 pwdsicher, 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 jessiefür die Betriebssystemversion steht, während das zweite jessiefü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-debootstrapdurch 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 COPYDIRenthä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 $HOSTNAMEtelefonisch 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.

RaZziel
quelle
1

Machen Sie das Root-Dateisystem auf dem Telefon beschreibbar

Führen Sie den folgenden Befehl auf Ihrem Telefon aus, um das Root-Dateisystem als beschreibbar wieder bereitzustellen (laden Sie die Terminal-App herunter, falls Sie dies noch nicht getan haben):

sudo mount -o remount,rw /

Bitte beachten Sie, dass das Telefon nach dem Neustart /wieder schreibgeschützt ist . Wenn dies dauerhaft sein soll, ändern Sie es /etc/fstab. Ubuntu Touch auf dem BQ ist jedoch noch nicht auf dem Haupt-Ubuntu Arm Repo. Das Installieren von Dingen wie treeoder libreofficewird noch nicht funktionieren. Sie sind möglicherweise in der neuesten Entwicklerversion.

Ausführen der neuesten Entwicklerversion von Ubuntu

(hat mehr Goodies im Repo, wie Kommandozeilen-Tools und so)

Wie starte ich die neueste Ubuntu Touch-Entwicklungsversion auf einem bq phone?

Repariere Sachen, wenn du alles kaputt machst

Wenn Sie eine Sache komplett zerbrechen, können Sie Ihr Gerät einfach neu flashen .

Merlijn Sebrechts
quelle