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

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 У меня все еще была та же ошибка.

4 ответа

Решение

Создайте 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.

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

Как уже указывалось, вы должны установить на своем устройстве 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 и производными ОС. Если вы получаете команду не найдены ошибки при выполнении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 таких ограничений нет.

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

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

sudo mount -o remount,rw /

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

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

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

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

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

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

Другие вопросы по тегам