Modo consigliato per installare i pacchetti regolari (cli) .deb su Ubuntu Phone?


12

tl; dr: sto cercando un modo "canonico" o "raccomandato" per installare i pacchetti (cli) .deb su Ubuntu touch

Uso Ubuntu sul mio desktop e server da un anno e sono molto soddisfatto. Ora ho comprato il primo telefono Ubuntu, il BQ Aquaris e4.5 Ubuntu Edition. Tuttavia, ho scoperto che non posso installare normali .debpacchetti o installare cose usando apt-get. Come posso "root" il mio telefono in modo da poter installare .debpacchetti "normali" ?

L'ho provato da solo. So che la prima cosa è rendere scrivibile il tuo filesystem. Ho fatto i seguenti passi ma poi mi sono bloccato a causa di un errore dpkg.

# 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

E questo è il luogo in cui l'errore inizia a bloccarmi:

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

Quindi ci ho provato

sudo apt-get install -f

Ma si è bloccato su "Configurazione principale Bluetooth". Ho riavviato il telefono, ma non voleva più accenderlo. Ho provato l' Recoveropzione di avvio. Ha funzionato Ho provato di install -fnuovo, e questa volta ha funzionato. Ma dopo aver fatto upgradeho ancora avuto lo stesso errore.


Rendere scrivibile la partizione di sistema e usare apt non è supportato. Se hai davvero bisogno di usare alcune app della console per qualche motivo, è meglio creare un chroot all'interno della home directory e quindi installare ciò di cui hai bisogno all'interno di quel chroot.
Dobey

1
Posso confermare che l'utilizzo di apt-get upgrade provocherà un sistema guasto. Ci sono stato, l'ho fatto.
Merlijn Sebrechts,

1
@Galgalesh grazie per la modifica, non sembra molto meglio. Per ora la tua risposta
prenderà

1
Dallo a @dobey, per favore. La sua risposta è molto migliore :)
Merlijn Sebrechts,

1
Non esitate a fare clic anche su "Accetta questa risposta" accanto alla risposta. :)
dobey

Risposte:


17

Crea un chroot nella home directory:

mkdir -p vivid-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-preinstalled-touch-armhf.tar.gz

Quindi, usa chroot e installa qualsiasi strumento CLI che devi usare, all'interno di quel chroot:

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

Per eseguire determinate operazioni, potrebbe essere necessario associare mount di alcune directory. Dovrai prestare particolare attenzione quando lo fai, se desideri eliminare il chroot dal tuo telefono o eseguire altre azioni distruttive.

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

Questo non è un elenco esaustivo, ma puoi associare montare altre directory secondo necessità in modo simile. Non è necessario creare il chroot nella home directory se si dispone di un dispositivo di archiviazione esterno su cui crearlo, come una scheda SD. Tuttavia, non tutti i telefoni hanno slot per schede SD. Se si desidera creare il chroot su una scheda SD, è sufficiente sostituire la home directory nei comandi sopra, con il percorso di una directory sul supporto di archiviazione alternativo in cui si desidera creare il chroot.


Caspita, grazie mille per questa guida! Sono contento di non dover /più
sbagliare

Inoltre, sudo mount -o bind /run /home/phablet/vivid-chroot/runper accedere alla rete chroot askubuntu.com/questions/469209/…
sdbbs,

1
@sdbbs Non penso sia necessario. Non vincolo a montare nulla nel mio chroot e l'accesso alla rete funziona bene. Uso bzr e apt al suo interno.
Dobey,

Ho copiato /etc/resolv.conf in vivid-chroot / etc per far funzionare la risoluzione DNS.
popey,

4

Attenzione: questo è solo un trucco per sbarazzarsi del problema di collegamento tra dispositivi su apt-get upgrade con pacchetto powerd. questa non è una soluzione certificata "UBUNTU"

Prerequisito: aver effettuato l'installazione R / W di Ubuntu con:

phablet-config writable-image

Copia il file powerd * .deb scaricato dal telefono su un PC dal percorso:

/ Var / cache / apt / archivio /

Sul PC, decomprimere il file .deb, rimuovere il file /usr/share/powerd/device_configs/config-default.xml (dai miei test risulta non fondamentale):

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 

Tutto deve essere fatto come root per mantenere le autorizzazioni originali dei file e delle directory del pacchetto. Reimballare, copiare nuovamente sul telefono, quindi installare con:

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

Riceverai comunque l'errore:

"/usr/share/powerd/device_configs/config-default.xml": dispositivo o risorsa occupata

Ma alla fine il pacchetto viene aggiornato.

Ora se lo fai: sudo apt-get upgradel'errore è scomparso.

Il mio telefono BQ Aquaris sembra funzionare bene e stabile.


Grazie per la soluzione! Per ora non accetterò perché spero ancora di ottenere un modo più raccomandato (non devo essere supportato ) per farlo. BTW. che dire dei futuri aggiornamenti di powerd? richiede di hackerarlo su ogni aggiornamento?
jangorecki,

Finché qualcuno non risolverà questo problema dell'uso di hardlink in dpkg (una vecchia storia) su un'installazione cross-device, al momento non vedo una soluzione alternativa.
Ezio Somà,

1
Potrebbe essere possibile modificare alcuni punti di montaggio in rder per evitare questo collegamento incrociato tra dispositivi, ma è necessario un po 'di tempo per essere analizzato. Solo guardando al file fstab o all'output mont non sono riuscito a capire cosa
succedere

3

Come è già stato sottolineato, è necessario installare un chroot compatibile con ARM sul dispositivo e installare tutti i pacchetti richiesti in quel chroot. Tuttavia, farlo nella directory home spreca molto spazio prezioso. Invece, può essere fatto sulla tua scheda SD usando un computer che gira su un sistema operativo Linux appropriato (testato su Linux Mint 17 e Ubuntu Trusty). Dato che non ho trovato alcuna informazione in merito altrove, l'ho inserito qui come risposta a una vecchia domanda.

Le seguenti istruzioni presuppongono che si desideri installare un debian jessie chroot nella directory jessie.

Creazione e popolamento del file immagine su un computer desktop

Creazione di un file di immagine vuoto

Per creare un'immagine da 1 GB chiamata IMAGE.img nella directory di lavoro corrente, eseguire:

dd if=/dev/zero of=IMAGE.img bs=1G count=1

Si noti che la B in GB è esclusa. "if" sta per "file di input", "of" per "file di output" e "bs" per "dimensione del blocco".

Esistono comandi più efficienti là fuori, ma quelli funzionano solo su alcuni tipi di file system, per quanto ne so. Questo funziona anche su una scheda SD o un tempfs. Notare l'uso di / dev / zero e non / dev / random o / dev / urandom in quanto ciò richiederebbe molto più tempo e richiederebbe molto più tempo per trasferire l'immagine tra i dispositivi in ​​un secondo momento.

Creazione di un file system sull'immagine

Senza il file system, il telefono non sarebbe in grado di memorizzare alcun dato sull'immagine. Senza un file system, non è ancora possibile montare l'immagine su una directory, ma solo su un dispositivo a blocchi.

Questo comando bash genererà il successivo dispositivo a ciclo vuoto nella variabile LOOP:

$LOOP=$(sudo losetup -f)

Quindi, assegnare l'immagine a un dispositivo a blocchi:

sudo losetup $LOOP IMAGE.img

Quindi, crea il file system ext4 su di esso:

sudo mkfs -t ext4 $LOOP

Quindi, staccare l'immagine dal dispositivo loop:

sudo losetup -d $LOOP

Se ricevi errori di comando non trovato, installa semplicemente i programmi mancanti.

Montare il file di immagine sul computer per accedervi

Ora, crea una directory temporanea nella directory di lavoro:

mkdir jessie

e montare il file di immagine IMAGE.img su di esso:

sudo mount -o loop IMAGE.img $(pwd)/jessie

Il comando pwdassicurerà di assegnare a mount un percorso assoluto per la directory di lavoro corrente.

Popolamento dell'immagine con il nuovo sistema operativo con qemu-debootstrap

Il prossimo passo sarà usare qemu-debootstrap per scaricare i file necessari. Questo è facile se qemu-debootstrap è disponibile come nel caso di Ubuntu e dei sistemi operativi derivati. Se ricevi errori di comando non trovati durante l'esecuzione qemu-debootstrap --help, prova a installare il pacchetto appropriato, che può essere fatto su Ubuntu tramite:

sudo apt-get install qemu-user-static

Per scaricare tutti i file richiesti e preparare il nuovo sistema operativo, eseguire il comando seguente:

sudo qemu-debootstrap --arch=armhf jessie ./jessie http://http.debian.net/debian

Si noti che il primo jessierappresenta la versione del sistema operativo mentre il secondo jessieindica la directory in cui devono essere installati i file. Ora è possibile smontare l'immagine poiché il resto del lavoro deve essere eseguito sul telefono. Fallo tramite:

sudo umount $(pwd)/jessie

Se non è possibile installare qemu-debootstrap, consultare la sezione successiva.

Popolamento dell'immagine con il nuovo sistema operativo senza qemu-debootstrap

Salta questa sezione se hai qemu-debootstrap disponibile. Tuttavia, avrai comunque bisogno di un debootstrap nativo per la tua architettura. Se questo sembra essere armhf, basta usare la riga di comando sopra ma sostituire qemu-debootstrapcon debootstrap. In caso contrario, seguire questa sezione.

Per scaricare tutti i file richiesti per il nuovo sistema operativo, eseguire il comando seguente:

sudo debootstrap --arch=armhf --foreign jessie ./jessie \
    http://http.debian.net/debian

Ora puoi smontare l'immagine poiché il resto del lavoro deve essere fatto al telefono. Fallo tramite:

sudo umount $(pwd)/jessie

Trasferisci l'immagine sul telefono

Ora è meglio creare un archivio tar da questo che poi copiare sul telefono. Non importa se l'archivio è inserito nella scheda SD o nella memoria interna. Crea l'archivio sul desktop usando:

tar -cvzf jessie.tar.gz IMAGE.img

Ora, sul tuo telefono, attiva il supporto ssh per copiare l'immagine. Puoi anche farlo usando un cavo USB. Poiché il server ssh viene reimpostato ad ogni riavvio, avviare il servizio ssh sul telefono tramite: sudo service ssh start

Quindi, copia l'immagine tramite:

scp jessie.tar.gz phablet@ubuntu-phablet:$COPYDIR

dove la variabile COPYDIRcontiene la directory in cui deve essere memorizzata l'immagine. Questo comando presuppone che il tuo nome utente sul telefono sia phablet e il nome host del telefono sia ubuntu-phablet. Puoi scoprirlo sia emettendo echo $USER che echo $HOSTNAMEal telefono, rispettivamente.

Ora devi solo estrarre l'archivio dove vuoi che risieda l'immagine. Supponiamo che la directory in cui si desidera posizionare l'immagine sia memorizzata nella variabile IMAGEDIR. Estrai l'immagine lì tramite il comando bash:

( cd $IMAGEDIR; tar -xvzf $COPYDIR/jessie.tar.gz; )

Ora potresti rimuovere l'archivio:

rm $COPYDIR/jessie.tar.gz

Finalizzare e utilizzare l'immagine sul telefono

Se non hai acceso il server ssh sul telefono, fallo ora tramite:

sudo service ssh start

Successivamente, monta l'immagine su una directory di tua scelta (in questo caso "jessie"):

sudo mount -o loop $IMAGEDIR/IMAGE.img $(pwd)/jessie

Ora inserisci la tua chroot per la prima volta tramite:

ssh localhost "sudo chroot $(pwd)/jessie /bin/bash"

Se avevi qemu-debootstrap disponibile sul tuo computer, hai finito. Utilizzare i 2 comandi precedenti per connettersi al chroot. In caso contrario, è necessario eseguire il comando seguente una volta all'interno del chroot, al fine di configurare correttamente il sistema operativo:

/debootstrap/debootstrap --second-stage

Riepilogo di come accedere al chroot

Se hai seguito i passaggi precedenti, dovresti essere in grado di accedere al tuo chroot usando questo semplice script sul telefono:

#!/bin/bash
sudo service ssh start
ssh localhost "sudo chroot jessie /bin/bash"

Devi prima ssh nel tuo telefono dal telefono a causa delle restrizioni apparmor dell'app terminale. L'app del terminale è autorizzata a eseguire binari solo in determinate posizioni e né la tua home directory né la scheda SD sono tra quelle. Il servizio ssh, tuttavia, non ha tali restrizioni.


1

Rendi scrivibile il filesystem di root sul telefono

Per rimontare il filesystem di root come scrivibile, esegui il seguente comando sul tuo telefono (scarica l' app del terminale se non l'hai già fatto):

sudo mount -o remount,rw /

Si noti che dopo aver riavviato il telefono, /è di nuovo di sola lettura . Se vuoi che sia permanente, cambia /etc/fstab. Tuttavia, il tocco di Ubuntu sul BQ non è ancora sui principali repository del braccio di Ubuntu. Installare cose come treeolibreoffice non funzionerà ancora. Potrebbero essere nell'ultima versione di sviluppo.

Esecuzione dell'ultima versione di sviluppo di Ubuntu

(ha più chicche nel repository, come strumenti da riga di comando e simili)

Come eseguire l'ultima versione di sviluppo touch di Ubuntu sul telefono bq?

Riparare cose quando rompi tutto

Quando rompi completamente qualcosa, puoi semplicemente eseguire il reflash del tuo dispositivo .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.