¿Forma recomendada de instalar paquetes regulares (cli) .deb en Ubuntu Phone?

12

tl; dr: estoy buscando una forma "canónica" o "recomendada" de instalar paquetes (cli) .deb en Ubuntu touch

He estado usando Ubuntu en mi escritorio y servidor durante un año y estoy muy satisfecho. Ahora compré el primer teléfono Ubuntu, el BQ Aquaris e4.5 Ubuntu Edition. Sin embargo, descubrí que no puedo instalar .debpaquetes normales o instalar cosas usando apt-get. ¿Cómo puedo "rootear" mi teléfono para poder instalar .debpaquetes "normales" ?

Lo intenté yo mismo. Sé que lo primero es hacer que su sistema de archivos sea editable. Hice los siguientes pasos, pero luego me quedé atascado debido a un error 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

Y este es el lugar donde el error comienza a bloquearme:

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

Así que lo intenté

sudo apt-get install -f

Pero se atascó en la "configuración principal de Bluetooth". Reinicié el teléfono, pero ya no quería encenderlo. Probé la Recoveropción de arranque. Eso funciono. Lo intenté de install -fnuevo, y esta vez funcionó. Pero después de hacerlo upgrade, todavía tuve el mismo error.

jangorecki
fuente
No se admite la escritura de la partición del sistema y el uso de apt. Si realmente necesita usar algunas aplicaciones de consola por algún motivo, es mejor crear un chroot dentro del directorio de inicio y luego instalar lo que necesita dentro de ese chroot.
dobey
1
Puedo confirmar que usar apt-get upgrade resultará en un sistema roto. He estado allí, hecho eso.
Merlijn Sebrechts
1
@Galgalesh gracias por la edición, no se ve mucho mejor. Por ahora, su respuesta va a obtener una recompensa :)
Jangorecki
1
Dáselo a @dobey, por favor. Su respuesta es mucho mejor :)
Merlijn Sebrechts
1
Por favor, siéntase libre de hacer clic en "Aceptar esta respuesta" junto a la respuesta. :)
dobey

Respuestas:

17

Cree un chroot dentro del directorio de inicio:

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

Luego, use el chroot e instale cualquier herramienta CLI que necesite usar, dentro de ese chroot:

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

Para realizar ciertas cosas, puede que sea necesario vincular el montaje de algunos directorios. Deberá tener especial cuidado al hacerlo, si desea eliminar el chroot de su teléfono o realizar otras acciones destructivas.

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

Esta no es una lista exhaustiva, pero puede enlazar montar otros directorios según sea necesario de manera similar. No necesita crear el chroot en su directorio de inicio si tiene un dispositivo de almacenamiento externo para crearlo, como una tarjeta SD. Sin embargo, no todos los teléfonos tienen ranuras para tarjetas SD. Si desea crear el chroot en una tarjeta SD, simplemente reemplace el directorio de inicio en los comandos anteriores, con la ruta a un directorio en su medio de almacenamiento alternativo donde desea crear el chroot.

dobey
fuente
Wow, muchas gracias por esta guía! Me alegro de no tener que meterme /más cuando quiero jugar con mi teléfono ...
Merlijn Sebrechts
Además, sudo mount -o bind /run /home/phablet/vivid-chroot/runpara obtener la red dentro de chroot askubuntu.com/questions/469209/…
sdbbs
1
@sdbbs No creo que sea necesario. No ato montar nada en mi chroot, y el acceso a la red funciona bien. Yo uso bzr y apt todo el tiempo dentro de él.
dobey
Copié /etc/resolv.conf en vivid-chroot / etc para que la resolución dns funcione.
papa
4

Advertencia: esto es solo un truco para deshacerse del problema de enlace entre dispositivos en la actualización de apt-get con el paquete powerd. esta no es una solución certificada "UBUNTU"

Requisito previo: haber realizado R / W la instalación de ubuntu con:

phablet-config writable-image

Copie el archivo powerd * .deb descargado del teléfono a una PC desde la ruta:

/ var / cache / apt / archives /

En la PC, desempaquete el archivo .deb, elimine el archivo /usr/share/powerd/device_configs/config-default.xml (de mis pruebas no resulta fundamental):

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 

Todo debe hacerse como root para mantener los permisos originales de los archivos y directorios del paquete. Vuelva a embalar, vuelva a copiar en el teléfono, luego instálelo con:

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

Aún recibirá el error:

"/usr/share/powerd/device_configs/config-default.xml": dispositivo o recurso ocupado

Pero al final el paquete se actualiza.

Ahora si lo haces: sudo apt-get upgradeel error desapareció.

Mi teléfono BQ Aquaris parece funcionar bien y estable.

Ezio Somà
fuente
Gracias por la solucion! No lo aceptaré por ahora, ya que todavía espero obtener una forma más recomendada (no es necesario que sea compatible ) para hacerlo. Por cierto. ¿Qué pasa con las futuras actualizaciones de powerd? ¿Requiere hackearlo en cada actualización?
Jangorecki
Hasta que alguien resuelva este problema de usar enlaces duros en dpkg (una historia antigua) en una instalación de dispositivos cruzados, en este momento no veo una solución alternativa.
Ezio Somà
1
Es posible que sea posible cambiar algunos puntos de montaje en rder para evitar este enlace cruzado de dispositivo cruzado, pero necesita un poco de tiempo para ser analizado. Solo al mirar el archivo fstab o la salida de mont no pude averiguar qué azar
Ezio Somà
3

Como ya se ha señalado, debe instalar un chroot con capacidad ARM en su dispositivo e instalar todos los paquetes necesarios en ese chroot. Sin embargo, hacerlo en su directorio personal desperdicia mucho espacio valioso. En cambio, se puede hacer en su tarjeta SD usando una computadora que se ejecuta en un sistema operativo Linux apropiado (probado en Linux Mint 17 y Ubuntu Trusty). Como no encontré ninguna información sobre esto en ningún otro lugar, la puse aquí como respuesta a una vieja pregunta.

Las siguientes instrucciones suponen que desea instalar un debian jessie chroot en el directorio jessie.

Crear y completar el archivo de imagen en una computadora de escritorio

Crear un archivo de imagen vacío

Para crear una imagen de 1GB llamada IMAGE.img en el directorio de trabajo actual, haga lo siguiente:

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

Tenga en cuenta que la B en GB se omite. "if" significa "archivo de entrada", "de" para "archivo de salida" y "bs" para "tamaño de bloque".

Existen comandos más eficientes, pero que yo sepa, solo funcionan en ciertos tipos de sistemas de archivos. Este también funciona en una tarjeta SD o tempfs. Tenga en cuenta el uso de / dev / zero y no / dev / random o / dev / urandom, ya que eso tomaría mucho más tiempo y demoraría mucho más la transferencia de la imagen entre dispositivos más adelante.

Crear un sistema de archivos en la imagen

Sin el sistema de archivos, el teléfono no podría almacenar ningún dato en la imagen. Sin un sistema de archivos, aún no puede montar la imagen en un directorio, solo en un dispositivo de bloque.

Este comando bash generará el siguiente dispositivo de bucle vacío en la variable LOOP:

$LOOP=$(sudo losetup -f)

A continuación, asigne la imagen a un dispositivo de bloque:

sudo losetup $LOOP IMAGE.img

A continuación, cree el sistema de archivos ext4 en él:

sudo mkfs -t ext4 $LOOP

A continuación, separe la imagen del dispositivo de bucle:

sudo losetup -d $LOOP

Si obtiene errores de comando no encontrado, simplemente instale los programas que faltan.

Monte el archivo de imagen en la computadora para acceder a él

Ahora, cree un directorio temporal en el directorio de trabajo:

mkdir jessie

y monte el archivo de imagen IMAGE.img en él:

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

El comando pwdse asegurará de darle a mount una ruta absoluta a su directorio de trabajo actual.

Rellenar la imagen con el nuevo sistema operativo con qemu-debootstrap

El siguiente paso será usar qemu-debootstrap para descargar los archivos necesarios. Esto es fácil si qemu-debootstrap está disponible, como es el caso en Ubuntu y sistemas operativos derivados. Si obtiene errores de comando no encontrado al ejecutar qemu-debootstrap --help, intente instalar el paquete apropiado, que se puede hacer en Ubuntu a través de:

sudo apt-get install qemu-user-static

Para descargar todos los archivos necesarios y preparar el nuevo sistema operativo, ejecute el siguiente comando:

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

Tenga en cuenta que el primero jessierepresenta la versión del sistema operativo, mientras que el segundo jessierepresenta el directorio donde se instalarán los archivos. Ahora puede desmontar la imagen ya que el resto del trabajo debe realizarse en el teléfono. Hazlo a través de:

sudo umount $(pwd)/jessie

Si no puede instalar qemu-debootstrap, consulte la siguiente sección.

Rellenar la imagen con el nuevo sistema operativo sin qemu-debootstrap

Omita esta sección si tiene qemu-debootstrap disponible. Sin embargo, aún necesitará una cinta antirrebote nativa para su arquitectura. Si esto resulta ser armhf, solo use la línea de comando anterior pero reemplace qemu-debootstrappor debootstrap. Si no, sigue esta sección.

Para descargar todos los archivos necesarios para el nuevo sistema operativo, ejecute el siguiente comando:

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

Ahora puede desmontar la imagen ya que el resto del trabajo debe realizarse en el teléfono. Hazlo a través de:

sudo umount $(pwd)/jessie

Transfiere la imagen al teléfono

Ahora mejor cree un archivo tar a partir de esto que luego copie en su teléfono. No importa si el archivo se coloca en la tarjeta SD o en el almacenamiento interno. Cree el archivo en el escritorio usando:

tar -cvzf jessie.tar.gz IMAGE.img

Ahora, en su teléfono, active el soporte ssh para copiar la imagen. También puede hacerlo usando un cable USB. Dado que el servidor ssh se reinicia en cada reinicio, inicie el servicio ssh en el teléfono a través de: sudo service ssh start

A continuación, copie la imagen a través de:

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

donde la variable COPYDIRcontiene el directorio donde se almacenará la imagen. Este comando asume que su nombre de usuario en el teléfono es phablet y el nombre de host del teléfono es ubuntu-phablet. Puede averiguarlo emitiendo echo $USER y echo $HOSTNAMEpor teléfono, respectivamente.

Ahora solo tiene que extraer el archivo donde quiera que resida la imagen. Suponga que el directorio donde desea que se ubique la imagen está almacenado en la variable IMAGEDIR. Extraiga la imagen allí mediante el comando bash:

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

Ahora puede eliminar el archivo:

rm $COPYDIR/jessie.tar.gz

Finalizando y usando la imagen en el teléfono

Si no activó el servidor ssh en el teléfono, hágalo ahora a través de:

sudo service ssh start

A continuación, monte su imagen en un directorio de su elección (en este caso "jessie"):

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

Ahora, ingrese su chroot por primera vez a través de:

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

Si tenía qemu-debootstrap disponible en su computadora, ya está. Use los 2 comandos anteriores para conectarse a su chroot. Si no, aún debe ejecutar el siguiente comando una vez que esté dentro de su chroot, para configurar correctamente el sistema operativo:

/debootstrap/debootstrap --second-stage

Resumen de cómo acceder al chroot

Si seguiste los pasos anteriores, deberías poder acceder a tu chroot usando este simple script en el teléfono:

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

Primero debe ingresar a su propio teléfono desde el teléfono debido a las restricciones de aparición de la aplicación de terminal. La aplicación de terminal solo puede ejecutar archivos binarios en ciertas ubicaciones y ni su directorio de inicio ni la tarjeta SD están entre ellos. El servicio ssh, sin embargo, no tiene tales restricciones.

Razziel
fuente
1

Hacer que el sistema de archivos raíz del teléfono se pueda escribir

Para volver a montar el sistema de archivos raíz como grabable, ejecute el siguiente comando en su teléfono (descargue la aplicación de terminal si aún no lo ha hecho):

sudo mount -o remount,rw /

Tenga en cuenta que después de reiniciar su teléfono, /vuelve a ser de solo lectura . Si quieres que esto sea permanente, cambia /etc/fstab. Sin embargo, Ubuntu touch en el BQ aún no está en el repositorio principal del brazo de Ubuntu. Instalar cosas como treeo libreofficeno funcionará todavía. Pueden estar en la última versión de desarrollo.

Ejecutando la última versión de desarrollo de Ubuntu

(tiene más beneficios en el repositorio, como herramientas de línea de comandos y tal)

¿Cómo ejecutar la última versión de desarrollo táctil de Ubuntu en el teléfono bq?

Arreglando cosas cuando rompes todo

Cuando rompes las cosas por completo, puedes volver a actualizar tu dispositivo .

Merlijn Sebrechts
fuente