Рекомендуемый способ установки обычных (cli) .deb пакетов на Ubuntu Phone?

12

tl; dr: я ищу "канонический" или "рекомендуемый" способ установки (cli) .deb пакетов на Ubuntu touch

Я использую Ubuntu на своем рабочем столе и сервере в течение года, и я очень доволен. Теперь я купил первый телефон Ubuntu, BQ Aquaris e4.5 Ubuntu Edition. Тем не менее, я обнаружил, что не могу установить нормальные .debпакеты или установить вещи с помощью apt-get. Как я могу «рутировать» свой телефон, чтобы я мог устанавливать «нормальные» .debпакеты?

Я попробовал это сам. Я знаю, во-первых, сделать вашу файловую систему доступной для записи. Я сделал следующие шаги, но затем я застрял из-за ошибки 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

И это место, где ошибка начинает блокировать меня:

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

Так я попробовал

sudo apt-get install -f

Но он застрял на "основной конфигурации Bluetooth". Я перезапустил телефон, но он больше не хотел включаться. Я попробовал Recoverвариант загрузки. Это сработало. Я попробовал еще install -fраз, и на этот раз это сработало. Но после этого у upgradeменя все еще была та же ошибка.

jangorecki
источник
Создание системного раздела с возможностью записи и использование apt не поддерживается. Если по какой-то причине вам действительно нужно использовать некоторые консольные приложения, лучше создать chroot внутри домашнего каталога, а затем установить то, что вам нужно, внутри этого chroot.
Добей
1
Я могу подтвердить, что использование обновления apt-get приведет к поломке системы. Был там, сделал это.
Мерлин Себрехтс
1
@Galgalesh спасибо за редактирование, выглядит не намного лучше. На данный момент ваш ответ собирается получить награду :)
jangorecki
1
Дайте это @dobey, пожалуйста. Его ответ намного лучше :)
Мерлин Себрехт
1
Пожалуйста, не стесняйтесь также нажать «Принять этот ответ» рядом с ответом. :)
добей

Ответы:

17

Создайте chroot внутри домашнего каталога:

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

Затем используйте chroot и установите все инструменты CLI, которые вам нужны, внутри этого chroot:

cd ~ / vivid-chroot
sudo chroot.
apt-get update
apt-get установить git

Для выполнения определенных действий может потребоваться привязать монтирование некоторых каталогов. При этом вам нужно будет проявить особую осторожность, если вы хотите удалить chroot из вашего телефона или выполнить другие разрушительные действия.

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

Это не исчерпывающий список, но вы можете подключить другие каталоги при необходимости аналогичным образом. Вам не нужно создавать chroot в вашем домашнем каталоге, если у вас есть внешнее устройство хранения, например SD-карта. Однако не все телефоны имеют слоты для SD-карт. Если вы хотите создать chroot на SD-карте, просто замените домашний каталог в приведенных выше командах на путь к каталогу на вашем альтернативном носителе, на котором вы хотите создать chroot.

Добей
источник
Вау, большое спасибо за это руководство! Я рад, что мне больше не нужно связываться /, когда я хочу возиться со своим телефоном ....
Мерлин Себрехтс
Кроме того, sudo mount -o bind /run /home/phablet/vivid-chroot/runчтобы получить сеть внутри chroot askubuntu.com/questions/469209/…
sdbbs
1
@sdbbs Я не думаю, что это необходимо. Я ничего не привязываю в моем chroot, и сетевой доступ работает нормально. Я использую bzr и все время в нем.
Добей
Я скопировал /etc/resolv.conf в vivid-chroot / etc, чтобы получить разрешение dns.
Попи
4

Предупреждение: это всего лишь способ избавиться от проблемы связи между устройствами при обновлении apt-get с помощью пакета powerd. это не сертифицированное решение "UBUNTU"

Предварительное условие: сделав R / W установку Ubuntu с:

phablet-config writable-image

Скопируйте загруженный файл powerd * .deb с телефона на ПК по пути:

/ Вар / кэш / кв / архив /

На ПК распакуйте файл .deb, удалите файл /usr/share/powerd/device_configs/config-default.xml (из моих тестов результаты не найдены):

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 

Все должно быть сделано с правами суперпользователя, чтобы сохранить исходные права доступа к файлам пакета и директориям. Перепакуйте, скопируйте обратно на телефон, затем установите с помощью:

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

Вы все равно получите ошибку:

"/usr/share/powerd/device_configs/config-default.xml": устройство или ресурс занят

Но в конце пакет обновляется.

Теперь, если вы делаете: sudo apt-get upgradeошибка исчезла.

Мой телефон BQ Aquaris, кажется, работает хорошо и стабильно.

Эцио Сома
источник
Спасибо за решение! Сейчас не приму, так как я все еще надеюсь получить более рекомендуемый (не нужно поддерживать ) способ сделать это. КСТАТИ. как насчет будущих обновлений powerd? нужно ли взламывать его при каждом обновлении?
jangorecki
До тех пор, пока кто-нибудь не решит эту проблему, используя жесткие ссылки в dpkg (старая история) при установке между устройствами, на данный момент я не вижу альтернативного решения.
Эцио Сома
1
Может быть, это позволит изменить некоторые точки монтирования в rder, чтобы избежать этой жесткой связи между устройствами, но потребуется некоторое время для анализа. Только просмотрев файл fstab или вывод mont, я не смог понять, что делать
Эцио Сома
3

Как уже указывалось, вы должны установить на своем устройстве chroot с поддержкой ARM и установить все необходимые пакеты в этом chroot. Тем не менее, выполнение этого в вашем домашнем каталоге тратит много ценного пространства. Вместо этого это можно сделать на SD-карте с помощью компьютера, работающего на соответствующей ОС Linux (протестировано на Linux Mint 17 и Ubuntu Trusty). Поскольку я не нашел никакой информации об этом нигде, я разместил ее здесь как ответ на старый вопрос.

Следующие инструкции предполагают, что вы хотите установить debian jessie chroot в каталог jessie.

Создание и заполнение файла изображения на настольном компьютере

Создание пустого файла изображения

Чтобы создать изображение размером 1 ГБ с именем IMAGE.img в текущем рабочем каталоге, выполните:

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

Обратите внимание, что B в ГБ опущено. «if» означает «входной файл», «of» для «выходной файл» и «bs» для «размер блока».

Существуют более эффективные команды, но, насколько я знаю, они работают только на определенных типах файловых систем. Этот также работает на SD-карте или tempfs. Обратите внимание на использование / dev / zero, а не / dev / random или / dev / urandom, так как это займет намного больше времени, а потом потребуется больше времени для передачи изображения между устройствами в дальнейшем.

Создание файловой системы на изображении

Без файловой системы телефон не сможет хранить какие-либо данные на изображении. Без файловой системы вы еще не можете смонтировать образ в каталог, только на блочное устройство.

Эта команда bash выведет следующее переменное устройство с пустым циклом в переменную LOOP:

$LOOP=$(sudo losetup -f)

Затем назначьте изображение на блочное устройство:

sudo losetup $LOOP IMAGE.img

Затем создайте на нем файловую систему ext4:

sudo mkfs -t ext4 $LOOP

Далее отсоедините изображение от петлевого устройства:

sudo losetup -d $LOOP

Если вы получаете команду не найденные ошибки, просто установите отсутствующие программы.

Смонтируйте файл образа на компьютер, чтобы получить к нему доступ

Теперь создайте временный каталог в рабочем каталоге:

mkdir jessie

и смонтируйте файл образа IMAGE.img к нему:

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

Команда pwdубедится, что вы дадите абсолютный путь к вашему текущему рабочему каталогу.

Заполнение образа новой операционной системой с помощью qemu-debootstrap

Следующим шагом будет использование qemu-debootstrap для загрузки необходимых файлов. Это легко, если доступен qemu-debootstrap, как в случае с Ubuntu и производными ОС. Если при выполнении вы получите команду not found error qemu-debootstrap --help, попробуйте установить соответствующий пакет, что можно сделать в Ubuntu через:

sudo apt-get install qemu-user-static

Чтобы загрузить все необходимые файлы и подготовить новую ОС, выполните следующую команду:

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

Обратите внимание, что первая jessieобозначает версию ОС, а вторая jessieобозначает каталог, в который должны быть установлены файлы. Теперь вы можете размонтировать образ, так как остальная часть работы должна выполняться на телефоне. Сделайте это через:

sudo umount $(pwd)/jessie

Если вы не можете установить qemu-debootstrap, смотрите следующий раздел.

Заполнение образа новой операционной системой без qemu-debootstrap

Пожалуйста, пропустите этот раздел, если у вас есть qemu-debootstrap. Тем не менее, вам все равно понадобится собственный debootstrap для вашей архитектуры. Если это происходит с помощью armhf, просто используйте приведенную выше командную строку, но замените qemu-debootstrapна debootstrap. Если нет, следуйте этому разделу.

Чтобы загрузить все необходимые файлы для новой ОС, выполните следующую команду:

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

Теперь вы можете размонтировать изображение, так как остальная часть работы должна быть выполнена на телефоне. Сделайте это через:

sudo umount $(pwd)/jessie

Передача изображения на телефон

Теперь лучше всего создать архив tar из этого файла, который затем скопировать на телефон. Не имеет значения, помещен ли архив на SD-карту или во внутреннее хранилище. Создайте архив на рабочем столе, используя:

tar -cvzf jessie.tar.gz IMAGE.img

Теперь на вашем телефоне включите поддержку ssh, чтобы скопировать изображение поверх. Вы также можете сделать это с помощью USB-кабеля. Поскольку сервер ssh сбрасывается при каждой перезагрузке, запустите службу ssh на телефоне с помощью: sudo service ssh start

Затем скопируйте изображение через:

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

где переменная COPYDIRсодержит каталог, в котором должно храниться изображение. Эта команда предполагает, что ваше имя пользователя на телефоне - phablet, а имя хоста телефона - ubuntu-phablet. Вы можете узнать как по выдаче, так echo $USER и echo $HOSTNAMEпо телефону соответственно.

Теперь вам нужно извлечь архив только там, где вы хотите, чтобы изображение находилось. Предположим, что каталог, в котором вы хотите разместить изображение, хранится в переменной IMAGEDIR. Извлеките изображение с помощью команды bash:

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

Теперь вы можете удалить архив:

rm $COPYDIR/jessie.tar.gz

Завершение и использование изображения на телефоне

Если вы не включили ssh сервер на телефоне, сделайте это сейчас через:

sudo service ssh start

Затем смонтируйте ваш образ в каталог по вашему выбору (в данном случае «jessie»):

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

Теперь введите ваш chroot в первый раз через:

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

Если на вашем компьютере был доступен qemu-debootstrap, все готово. Используйте вышеуказанные 2 команды для подключения к вашему chroot. Если нет, вам все равно придется выполнить следующую команду, когда вы находитесь в chroot, чтобы правильно настроить ОС:

/debootstrap/debootstrap --second-stage

Краткое описание того, как получить доступ к chroot

Если вы выполнили вышеуказанные шаги, вы сможете получить доступ к вашему chroot, используя этот простой скрипт на телефоне:

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

Вы должны сначала подключиться к своему телефону с помощью ssh из-за ограничений приложения терминала. Терминальному приложению разрешено выполнять двоичные файлы только в определенных местах, и среди них нет ни вашего домашнего каталога, ни SD-карты. Однако у службы ssh таких ограничений нет.

RaZziel
источник
1

Сделать корневую файловую систему на телефоне доступной для записи

Чтобы перемонтировать корневую файловую систему как доступную для записи, выполните на телефоне следующую команду (загрузите приложение терминала, если вы этого еще не сделали):

sudo mount -o remount,rw /

Обратите внимание, что после перезагрузки телефон /снова доступен только для чтения . Если вы хотите, чтобы это было постоянным, измените /etc/fstab. Тем не менее, прикосновение Ubuntu к BQ еще не включено в основной репозиторий Ubuntu. Установка таких вещей, как treeили libreofficeне будет работать. Они могут быть в последней версии devel.

Запуск последней версии Ubuntu devel

(в репозитории есть больше плюсов, таких как инструменты командной строки и тому подобное)

Как запустить последнюю версию Ubuntu Touch для разработчиков на телефоне bq?

Исправление вещей, когда вы все сломаете

Когда вы полностью сломаете устройство , вы можете просто перепрошить свое устройство .

Мерлин Себрехтс
источник