Méthode recommandée pour installer des packages .deb réguliers (cli) sur Ubuntu Phone?

12

tl; dr: Je cherche une manière "canonique" ou "recommandée" d'installer les paquets (cli) .deb sur Ubuntu touch

J'utilise Ubuntu sur mon bureau et mon serveur depuis un an et je suis très satisfait. Maintenant, j'ai acheté le premier téléphone Ubuntu, le BQ Aquaris e4.5 Ubuntu Edition. Cependant, j'ai découvert que je ne peux pas installer de .debpackages normaux ou installer des choses en utilisant apt-get. Comment "rooter" mon téléphone pour pouvoir installer des .debpackages "normaux" ?

Je l'ai essayé moi-même. Je sais que la première chose à faire est de rendre votre système de fichiers accessible en écriture. J'ai fait les étapes suivantes mais je suis resté bloqué à cause d'une erreur 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

Et c'est l'endroit où l'erreur commence à me bloquer:

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

J'ai donc essayé

sudo apt-get install -f

Mais il est resté bloqué sur "Bluetooth main config". J'ai redémarré le téléphone, mais il ne voulait plus s'allumer. J'ai essayé l' Recoveroption de démarrage. Ça a marché. J'ai essayé à install -fnouveau, et cette fois, cela a fonctionné. Mais après avoir fait, upgradej'ai toujours eu la même erreur.

jangorecki
la source
Rendre la partition système accessible en écriture et utiliser apt n'est pas pris en charge. Si vous avez vraiment besoin d'utiliser certaines applications de console pour une raison quelconque, il est préférable de créer un chroot à l'intérieur du répertoire personnel, puis d'installer ce dont vous avez besoin à l'intérieur de ce chroot.
dobey
1
Je peux confirmer que l'utilisation de la mise à niveau apt-get entraînera un système défectueux. J'y suis allé, j'ai fait ça.
Merlijn Sebrechts
1
@Galgalesh merci pour la modification, ça n'a pas l'air beaucoup mieux. Pour l'instant, votre réponse va gagner une prime :)
jangorecki
1
Donnez-le à @dobey, s'il vous plaît. Sa réponse est bien meilleure :)
Merlijn Sebrechts
1
N'hésitez pas à cliquer également sur "Accepter cette réponse" à côté de la réponse. :)
dobey

Réponses:

17

Créez un chroot dans le répertoire personnel:

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

Ensuite, utilisez le chroot et installez tous les outils CLI que vous devez utiliser, dans ce chroot:

cd ~ / vivid-chroot
sudo chroot.
mise à jour apt-get
apt-get install git

Afin d'effectuer certaines choses, il peut être nécessaire de lier le montage de certains répertoires. Vous devrez faire très attention lorsque vous le faites, si vous souhaitez supprimer le chroot de votre téléphone ou effectuer d'autres actions destructrices.

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

Cette liste n'est pas exhaustive, mais vous pouvez lier le montage d'autres répertoires selon les besoins de la même manière. Vous n'avez pas besoin de créer le chroot dans votre répertoire personnel si vous avez un périphérique de stockage externe pour le créer, comme une carte SD. Cependant, tous les téléphones n'ont pas de fente pour carte SD. Si vous souhaitez créer le chroot sur une carte SD, remplacez simplement le répertoire personnel dans les commandes ci-dessus, par le chemin d'accès à un répertoire sur votre autre support de stockage où vous souhaitez créer le chroot.

dobey
la source
Wow, merci beaucoup pour ce guide! Je suis content de ne plus avoir à jouer avec /quand je veux jouer avec mon téléphone ....
Merlijn Sebrechts
Aussi, sudo mount -o bind /run /home/phablet/vivid-chroot/runpour obtenir un réseau à l'intérieur de chroot askubuntu.com/questions/469209/…
sdbbs
1
@sdbbs Je ne pense pas que ce soit nécessaire. Je ne lie rien de montage dans mon chroot, et l'accès au réseau fonctionne bien. J'utilise bzr et apt tout le temps.
dobey
J'ai copié /etc/resolv.conf dans vivid-chroot / etc pour faire fonctionner la résolution DNS.
popey
4

Avertissement: ce n'est qu'un hack pour se débarrasser du problème de liaison inter-appareils lors de la mise à niveau d'apt-get avec le package powerd. ce n'est pas une solution certifiée "UBUNTU"

Prérequis: avoir fait de R / W l'installation d'ubuntu avec:

phablet-config writable-image

Copiez le fichier powerd * .deb téléchargé du téléphone vers un PC à partir du chemin:

/ var / cache / apt / archives /

Sur le PC, décompressez le fichier .deb, supprimez le fichier /usr/share/powerd/device_configs/config-default.xml (de mes tests il ne résulte pas fondamental):

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 

Tout doit être fait en tant que root pour conserver les autorisations d'origine des fichiers et des répertoires du package. Remballez, copiez sur le téléphone, puis installez avec:

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

Vous obtiendrez toujours l'erreur:

"/usr/share/powerd/device_configs/config-default.xml": périphérique ou ressource occupé

Mais à la fin, le package est mis à jour.

Maintenant, si vous le faites: sudo apt-get upgradel'erreur a disparu.

Mon téléphone BQ Aquaris semble bien fonctionner et stable.

Ezio Somà
la source
Merci pour la solution! N'acceptera pas pour le moment car j'espère toujours obtenir un moyen plus recommandé (ne doit pas être pris en charge ) de le faire. BTW. Qu'en est-il des futures mises à jour de powerd? faut-il le pirater à chaque mise à jour?
jangorecki
Jusqu'à ce que quelqu'un résolve ce problème d'utilisation de liens durs dans dpkg (une vieille histoire) sur une installation multi-appareils, pour le moment je ne vois pas de solution alternative.
Ezio Somà
1
Il se peut qu'il soit possible de modifier certains points de montage dans rder pour éviter cette liaison matérielle croisée, mais nécessite un certain temps pour être analysé. Ce n'est qu'en regardant le fichier fstab ou la sortie mont que je n'ai pas réussi à comprendre quoi au hasard
Ezio Somà
3

Comme cela a déjà été souligné, vous devez installer un chroot compatible ARM sur votre appareil et installer tous les packages requis dans ce chroot. Cependant, le faire dans votre répertoire personnel gaspille beaucoup d'espace précieux. Au lieu de cela, cela peut être fait sur votre carte SD en utilisant un ordinateur fonctionnant sur un système d'exploitation Linux approprié (testé sur Linux Mint 17 et Ubuntu Trusty). Comme je n'ai trouvé aucune information à ce sujet ailleurs, je l'ai mise ici en réponse à une vieille question.

Les instructions suivantes supposent que vous souhaitez installer un chroot Debian Jessie dans le répertoire Jessie.

Création et remplissage du fichier image sur un ordinateur de bureau

Création d'un fichier image vide

Pour créer une image de 1 Go appelée IMAGE.img dans le répertoire de travail actuel, procédez comme suit:

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

Notez que le B en GB est omis. "si" signifie "fichier d'entrée", "de" pour "fichier de sortie" et "bs" pour "taille de bloc".

Il existe des commandes plus efficaces, mais celles-ci ne fonctionnent que sur certains types de systèmes de fichiers, à ma connaissance. Celui-ci fonctionne également sur une carte SD ou un tempfs. Veuillez noter l'utilisation de / dev / zero et non / dev / random ou / dev / urandom car cela prendrait beaucoup plus de temps et rendrait le transfert de l'image entre les périphériques plus tard.

Création d'un système de fichiers sur l'image

Sans le système de fichiers, le téléphone ne pourrait pas stocker de données sur l'image. Sans système de fichiers, vous ne pouvez pas encore monter l'image dans un répertoire, uniquement sur un périphérique bloc.

Cette commande bash affichera le prochain périphérique de boucle vide dans la variable LOOP:

$LOOP=$(sudo losetup -f)

Ensuite, affectez l'image à un périphérique de bloc:

sudo losetup $LOOP IMAGE.img

Ensuite, créez le système de fichiers ext4 dessus:

sudo mkfs -t ext4 $LOOP

Ensuite, détachez l'image du périphérique de boucle:

sudo losetup -d $LOOP

Si vous obtenez des erreurs de commande introuvable, installez simplement les programmes manquants.

Montez le fichier image sur l'ordinateur pour y accéder

Maintenant, créez un répertoire temporaire dans le répertoire de travail:

mkdir jessie

et montez-y le fichier image IMAGE.img:

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

La commande pwds'assurera que vous donnez à mount un chemin absolu vers votre répertoire de travail actuel.

Remplir l'image avec le nouveau système d'exploitation avec qemu-debootstrap

La prochaine étape sera d'utiliser qemu-debootstrap pour télécharger les fichiers nécessaires. C'est facile si qemu-debootstrap est disponible comme c'est le cas sur Ubuntu et les OS dérivés. Si vous obtenez des erreurs de commande introuvable lors de l'exécution qemu-debootstrap --help, essayez d'installer le package approprié, ce qui peut être fait sur Ubuntu via:

sudo apt-get install qemu-user-static

Pour télécharger tous les fichiers requis et préparer le nouveau système d'exploitation, exécutez la commande suivante:

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

Veuillez noter que le premier jessiereprésente la version du système d'exploitation tandis que le second jessiereprésente le répertoire dans lequel les fichiers doivent être installés.Vous pouvez maintenant démonter l'image car le reste du travail doit être effectué sur le téléphone. Faites-le via:

sudo umount $(pwd)/jessie

Si vous ne pouvez pas installer qemu-debootstrap, consultez la section suivante.

Remplir l'image avec le nouveau système d'exploitation sans qemu-debootstrap

Veuillez ignorer cette section si vous disposez de qemu-debootstrap. Cependant, vous aurez toujours besoin d'un debootstrap natif pour votre architecture. Si cela se trouve être armhf, utilisez simplement la ligne de commande ci-dessus mais remplacez qemu-debootstrappar debootstrap. Sinon, suivez cette section.

Pour télécharger tous les fichiers requis pour le nouveau système d'exploitation, exécutez la commande suivante:

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

Vous pouvez maintenant démonter l'image car le reste du travail doit être effectué sur le téléphone. Faites-le via:

sudo umount $(pwd)/jessie

Transférer l'image sur le téléphone

Créez maintenant une archive tar à partir de laquelle vous copiez ensuite sur votre téléphone. Peu importe que l'archive soit placée sur la carte SD ou sur le stockage interne. Créez l'archive sur le bureau en utilisant:

tar -cvzf jessie.tar.gz IMAGE.img

Maintenant, sur votre téléphone, activez la prise en charge ssh pour copier l'image. Vous pouvez également le faire en utilisant un câble USB à la place. Puisque le serveur ssh est réinitialisé à chaque redémarrage, démarrez le service ssh sur le téléphone via: sudo service ssh start

Ensuite, copiez l'image via:

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

où la variable COPYDIRcontient le répertoire où l'image doit être stockée. Cette commande suppose que votre nom d'utilisateur sur le téléphone est phablet et que le nom d'hôte du téléphone est ubuntu-phablet. Vous pouvez le découvrir à la fois par émission echo $USER et echo $HOSTNAMEpar téléphone, respectivement.

Il ne vous reste plus qu'à extraire l'archive où vous voulez que l'image réside. Supposons que le répertoire où vous souhaitez que l'image soit située est stocké dans la variable IMAGEDIR. Extrayez-y l'image via la commande bash:

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

Vous pouvez maintenant supprimer l'archive:

rm $COPYDIR/jessie.tar.gz

Finaliser et utiliser l'image sur le téléphone

Si vous n'avez pas allumé le serveur ssh sur le téléphone, faites-le maintenant via:

sudo service ssh start

Ensuite, montez votre image dans un répertoire de votre choix (dans ce cas "jessie"):

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

Maintenant, entrez votre chroot pour la première fois via:

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

Si vous disposiez de qemu-debootstrap sur votre ordinateur, vous avez terminé. Utilisez les 2 commandes ci-dessus pour vous connecter à votre chroot. Sinon, vous devez toujours exécuter la commande suivante une fois que vous êtes dans votre chroot, afin de configurer correctement le système d'exploitation:

/debootstrap/debootstrap --second-stage

Résumé de l'accès au chroot

Si vous avez suivi les étapes ci-dessus, vous devriez pouvoir accéder à votre chroot en utilisant ce simple script sur le téléphone:

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

Vous devez d'abord ssh dans votre propre téléphone à partir du téléphone en raison des restrictions d'apparmeur de l'application du terminal. L'application de terminal n'est autorisée à exécuter des fichiers binaires qu'à certains endroits et ni votre répertoire personnel ni la carte SD ne font partie de ceux-ci. Le service ssh, cependant, n'a pas de telles restrictions.

RaZziel
la source
1

Rendre le système de fichiers racine sur le téléphone accessible en écriture

Pour remonter le système de fichiers racine en écriture, exécutez la commande suivante sur votre téléphone (téléchargez l' application de terminal si vous ne l'avez pas déjà fait):

sudo mount -o remount,rw /

Veuillez noter qu'après le redémarrage de votre téléphone, il /est à nouveau en lecture seule . Si vous voulez que cela soit permanent, changez /etc/fstab. Cependant, Ubuntu touch sur le BQ n'est pas encore sur le référentiel de bras Ubuntu principal. Installer des choses comme treeou libreofficene fonctionnera pas encore. Ils pourraient être dans la dernière version devel.

Exécution de la dernière version de développement d'Ubuntu

(a plus de goodies dans le repo, comme les outils de ligne de commande et autres)

Comment exécuter la dernière version de développement Ubuntu touch sur un téléphone bq?

Réparer des trucs quand on casse tout

Lorsque vous cassez complètement la chose, vous pouvez simplement reflasher votre appareil .

Merlijn Sebrechts
la source
-1

hQEMA + cF4k / TpR07AQf / EFB + 1TSpQLjHHAIMmMnNrM03G / e8DIkX7OMOuy5Z4tI 8DEt5HGp7aloB5gSRyUkVnXanGoXdrVwuTG43H / 7EN6hZe2LZ0HN8rs6vB / FO9nX + KkEJ2bCm4K6w + 4tcEfkJbl53LQkYd9u1WbpC / X4yGcVu8bkEbBonCDAnvaEaaE / axbbm7b5Bj577KpXDrVME645SxboVHPW5Hrko / 7CPnPXrsriCYqgBTcr6cRa6y8G bcIusrhUzCSYIzfnYkh3aG95I8sHPXjgJTR + XEx24Fo + rt5n6E8npVDmegQIZoNK tWnrYjqyWoAHQfI1jsFEDdUqucksHRZcuPImiOfpF9JfAbT2p5oTvG7P2qzpQJms 1pd4K71RKRXsuEaqKiXcP4si8SjwFNLy / rJ1MKTiVJ4m47gBDvbrUVPTtHE8SeF / 1WD + Wp5PzUia3dgrz4 / lzpIVb6pTpvbs3L3qJd3KlsI = = ARPH

Павел Буянов
la source