Рекомендований спосіб встановлення звичайних (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мене все-таки була така ж помилка.


Зробити системний розділ для запису та використовувати apt не підтримується. Якщо вам дійсно потрібно з якихось причин використовувати деякі консольні програми, найкраще створити chroot всередині домашнього каталогу, а потім встановити все, що вам потрібно в цьому chroot.
добі

1
Я можу підтвердити, що використання оновлення apt-get призведе до порушення роботи системи. Був там зробив те.
Мерлійн Себрехтс

1
@Galgalesh дякую за редагування, не виглядає набагато краще. Що ж до теперішньої вашої відповіді збирається захопити щедрість :)
jangorecki

1
Дайте його @dobey, будь ласка. Його відповідь набагато краща :)
Мерлійн Себрехт

1
Будь ласка, не соромтеся також натиснути "Прийняти цю відповідь" поруч із відповіддю. :)
dobey

Відповіді:


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 яскравий-попередньо встановлений-touch-armhf.tar.gz

Потім скористайтеся chroot та встановіть усі необхідні інструменти CLI у межах цього chroot:

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

Для виконання певних речей може знадобитися прив’язати монтувати деякі каталоги. Виконуючи це, вам потрібно буде бути особливо обережними, якщо ви хочете видалити chroot з телефону або виконати інші руйнівні дії.

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

Це не вичерпний список, але ви можете прив’язати монтувати інші каталоги, як потрібно, аналогічним чином. Не потрібно створювати 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 і apt весь час всередині нього.
добі

Я скопіював /etc/resolv.conf в vivid-chroot / тощо, щоб отримати дозвіл dns.
папі

4

Попередження: це лише хак, щоб позбутися проблеми перехресних пристроїв під час оновлення apt-get з пакетом powerd. це не сертифіковане рішення "UBUNTU"

Необхідна умова: зробивши R / W установку ubuntu за допомогою:

phablet-config writable-image

Скопіюйте завантажений файл powerd * .deb з телефону на ПК із шляху:

/ var / cache / apt / архіви /

На ПК розпакуйте файл .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 

Все має бути виконано як root, щоб зберегти оригінальні дозволи файлів пакунків та файлів. Перепакуйте, скопіюйте назад на телефон, а потім встановіть за допомогою:

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 або вихідний файл, я не зміг зрозуміти, на що шанси
Ezio Somà

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 та похідних ОС. Якщо під час виконання команди ви не знайшли помилок 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. Вам все одно знадобиться рідна програма для дебоотстрати для вашої архітектури. Якщо це стане armhf, просто використовуйте вищевказаний командний рядок, але замініть qemu-debootstrapйого debootstrap. Якщо ні, дотримуйтесь цього розділу.

Щоб завантажити всі необхідні файли для нової ОС, запустіть таку команду:

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

Тепер ви можете відключити зображення, оскільки решту робіт потрібно виконати по телефону. Зробіть це через:

sudo umount $(pwd)/jessie

Перенесіть зображення на телефон

Тепер найкраще створити з цього архіву дьоготь, який ви потім скопіюєте на телефон. Не має значення, чи архів поставлений на 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, у вас все готово. Використовуйте вищевказані команди для підключення до chroot. Якщо ні, то все-таки потрібно виконати таку команду, як тільки ви знаходитесь у своєму chroot, щоб правильно встановити ОС:

/debootstrap/debootstrap --second-stage

Короткий огляд способу доступу до chroot

Якщо ви дотримуєтесь вищезазначених кроків, ви можете мати доступ до chroot за допомогою цього простого сценарію на телефоні:

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

Спершу вам належить ввімкнути свій власний телефон у свій телефон через обмеження програми для терміналу. Додаток терміналу дозволено виконувати лише бінарні файли в певних місцях, і жодна ваша домашня директорія та SD-карта не є такими. Служба ssh, однак, не має таких обмежень.


1

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

Щоб перезавантажити кореневу файлову систему як доступну для запису, виконайте наступну команду на своєму телефоні (завантажте додаток терміналу, якщо ви ще цього не зробили):

sudo mount -o remount,rw /

Зауважте, що після перезавантаження телефону /знову лише для читання . Якщо ви хочете, щоб це було постійним, змініть /etc/fstab. Однак сенсор Ubuntu на BQ поки що не є на головному репо-рупі Ubuntu. Установка речі , як treeі libreofficeне буде ще працювати. Вони можуть бути в останній версії розробки.

Запуск останньої версії розробки Ubuntu

(має більше смаку в репо, як інструменти командного рядка тощо)

Як запустити останню версію сенсорної розробки Ubuntu на bq телефоні?

Виправлення речей, коли ви все порушите

Коли ви зламаєте річ повністю, ви можете просто переробити пристрій .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.