Zalecany sposób instalacji regularnych pakietów (cli) .deb na Ubuntu Phone?

12

tl; dr: Szukam „kanonicznego” lub „zalecanego” sposobu instalowania pakietów (cli) .deb na Ubuntu touch

Używam Ubuntu na moim pulpicie i serwerze od roku i jestem bardzo zadowolony. Teraz kupiłem pierwszy telefon Ubuntu, BQ Aquaris e4.5 Ubuntu Edition. Jednak dowiedziałem się, że nie mogę instalować normalnych .debpakietów ani instalować rzeczy za pomocą apt-get. Jak mogę „zrootować” mój telefon, aby móc zainstalować „normalne” .debpakiety?

Sam tego spróbowałem. Wiem, że pierwszą rzeczą jest, aby twój system plików był zapisywalny. Zrobiłem następujące kroki, ale utknąłem z powodu błędu 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

I to jest miejsce, w którym błąd zaczyna mnie blokować:

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

Więc próbowałem

sudo apt-get install -f

Ale utknął w „głównej konfiguracji Bluetooth”. Uruchomiłem ponownie telefon, ale nie chciał się już włączać. Próbowałem Recoveropcji rozruchu. To się udało. Spróbowałem install -fponownie i tym razem zadziałało. Ale po zrobieniu upgradenadal miałem ten sam błąd.

jangorecki
źródło
Umożliwianie zapisywania partycji systemowej i używanie apt nie jest obsługiwane. Jeśli z jakiegoś powodu naprawdę potrzebujesz korzystać z niektórych aplikacji konsolowych, najlepiej jest utworzyć chroota w katalogu domowym, a następnie zainstalować w nim to, czego potrzebujesz.
dobey,
1
Mogę potwierdzić, że użycie aktualizacji apt-get spowoduje uszkodzenie systemu. Byłem tam, zrobiłem to.
Merlijn Sebrechts
1
@Galgalesh dzięki za edycję, nie wygląda dużo lepiej. Jak na razie twoja odpowiedź
zdobędzie
1
Daj to @dobey, proszę. Jego odpowiedź jest o wiele lepsza :)
Merlijn Sebrechts
1
Prosimy również kliknąć „Akceptuj tę odpowiedź” obok odpowiedzi. :)
dobey,

Odpowiedzi:

17

Utwórz chroot w katalogu domowym:

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

Następnie użyj chroot i zainstaluj dowolne narzędzia CLI, których potrzebujesz, w tym chroot:

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

Aby wykonać pewne czynności, może być konieczne powiązanie zamontowania niektórych katalogów. Musisz wtedy zachować szczególną ostrożność, jeśli chcesz usunąć chroota z telefonu lub wykonać inne destrukcyjne działania.

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

To nie jest wyczerpująca lista, ale możesz powiązać montowanie innych katalogów w razie potrzeby w podobny sposób. Nie musisz tworzyć chroot w swoim katalogu domowym, jeśli masz zewnętrzne urządzenie do przechowywania danych, na przykład kartę SD. Jednak nie wszystkie telefony mają gniazda kart SD. Jeśli chcesz utworzyć chroot na karcie SD, po prostu zastąp katalog główny w powyższych poleceniach ścieżką do katalogu na alternatywnym nośniku pamięci, w którym chcesz utworzyć chroot.

dobey
źródło
Wow, wielkie dzięki za ten przewodnik! Cieszę się, że nie muszę się /już
bawić,
Ponadto, sudo mount -o bind /run /home/phablet/vivid-chroot/runaby uzyskać sieć wewnątrz chroot askubuntu.com/questions/469209/...
sdbbs
1
@sdbbs Nie sądzę, że to konieczne. Nie wiążę montować niczego w moim chroot, a dostęp do sieci działa dobrze. Używam bzr i apt przez cały czas w nim.
dobey
Skopiowałem /etc/resolv.conf do vivid-chroot / etc, aby uruchomić rozdzielczość dns.
popey,
4

Ostrzeżenie: to tylko hack, aby pozbyć się problemu z łączeniem różnych urządzeń podczas aktualizacji apt-get za pomocą pakietu powerd. nie jest to rozwiązanie certyfikowane „UBUNTU”

Warunek: dokonanie R / W instalacji ubuntu z:

phablet-config writable-image

Skopiuj pobrany plik powerd * .deb z telefonu na komputer ze ścieżki:

/ var / cache / apt / archives /

Na komputerze rozpakuj plik .deb, usuń plik /usr/share/powerd/device_configs/config-default.xml (z moich testów nie wynika to zasadniczo):

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 

Wszystko musi być zrobione jako root, aby zachować oryginalne uprawnienia plików pakietów i katalogów. Przepakuj, skopiuj z powrotem na telefon, a następnie zainstaluj za pomocą:

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

Nadal pojawi się błąd:

„/usr/share/powerd/device_configs/config-default.xml”: Urządzenie lub zasób zajęty

Ale na koniec pakiet jest aktualizowany.

Teraz jeśli to zrobisz: sudo apt-get upgradebłąd zniknął.

Mój telefon BQ Aquaris wydaje się działać dobrze i stabilnie.

Ezio Somà
źródło
Dzięki za rozwiązanie! Na razie nie zaakceptuję, ponieważ nadal mam nadzieję uzyskać bardziej zalecany (nie musi być obsługiwany ) sposób. BTW. co z przyszłymi aktualizacjami powerd? czy wymaga hakowania przy każdej aktualizacji?
jangorecki
Dopóki ktoś nie rozwiąże problemu korzystania z dowiązań twardych w dpkg (stara historia) na instalacji na różnych urządzeniach, w tej chwili nie widzę alternatywnego rozwiązania.
Ezio Somà
1
Być może powinna istnieć możliwość zmiany niektórych punktów montowania w rderu, aby uniknąć tego twardego linku między urządzeniami, ale potrzeba trochę czasu na analizę. Tylko patrząc na plik fstab lub wyjście mont nie byłem w stanie dowiedzieć się, co się stało
Ezio Somà
3

Jak już wspomniano, musisz zainstalować chroota z obsługą ARM na swoim urządzeniu i zainstalować wszystkie wymagane pakiety w tym chroocie. Jednak robienie tego w katalogu domowym marnuje wiele cennego miejsca. Zamiast tego można to zrobić na karcie SD za pomocą komputera z odpowiednim systemem operacyjnym Linux (testowany na Linux Mint 17 i Ubuntu Trusty). Ponieważ nigdzie indziej nie znalazłem żadnych informacji na ten temat, umieściłem je tutaj jako odpowiedź na stare pytanie.

Poniższe instrukcje zakładają, że chcesz zainstalować debian jessie chroot w katalogu jessie.

Tworzenie i wypełnianie pliku obrazu na komputerze stacjonarnym

Tworzenie pustego pliku obrazu

Aby utworzyć obraz 1 GB o nazwie IMAGE.img w bieżącym katalogu roboczym:

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

Zauważ, że B w GB jest pominięte. „if” oznacza „plik wejściowy”, „z” oznacza „plik wyjściowy”, a „bs” oznacza „rozmiar bloku”.

Istnieją wydajniejsze polecenia, ale o ile wiem, działają one tylko na niektórych typach systemów plików. Ten działa również na karcie SD lub tempfs. Pamiętaj o użyciu opcji / dev / zero, a nie / dev / random lub / dev / urandom, ponieważ zajęłoby to znacznie więcej czasu i spowodowałoby znacznie dłuższe przesyłanie obrazu między urządzeniami później.

Tworzenie systemu plików na obrazie

Bez systemu plików telefon nie byłby w stanie przechowywać żadnych danych na obrazie. Bez systemu plików nie można jeszcze zamontować obrazu w katalogu, tylko na urządzeniu blokowym.

To polecenie bash wyświetli następne puste urządzenie pętli do zmiennej LOOP:

$LOOP=$(sudo losetup -f)

Następnie przypisz obraz do urządzenia blokowego:

sudo losetup $LOOP IMAGE.img

Następnie utwórz w nim system plików ext4:

sudo mkfs -t ext4 $LOOP

Następnie odłącz obraz od urządzenia pętli:

sudo losetup -d $LOOP

Jeśli pojawi się błąd nie znalezienia polecenia, po prostu zainstaluj brakujące programy.

Zamontuj plik obrazu na komputerze, aby uzyskać do niego dostęp

Teraz utwórz katalog tymczasowy w katalogu roboczym:

mkdir jessie

i zamontuj na nim plik obrazu IMAGE.img:

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

Polecenie pwdupewni się, że podasz mount bezwzględną ścieżkę do bieżącego katalogu roboczego.

Wypełnianie obrazu nowym systemem operacyjnym za pomocą qemu-debootstrap

Następnym krokiem będzie użycie qemu-debootstrap do pobrania niezbędnych plików. Jest to łatwe, jeśli qemu-debootstrap jest dostępny, podobnie jak w Ubuntu i pochodnych systemach operacyjnych. Jeśli podczas wykonywania pojawi się błąd nie znalezienia polecenia qemu-debootstrap --help, spróbuj zainstalować odpowiedni pakiet, co można zrobić na Ubuntu poprzez:

sudo apt-get install qemu-user-static

Aby pobrać wszystkie wymagane pliki i przygotować nowy system operacyjny, uruchom następujące polecenie:

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

Należy pamiętać, że pierwszy jessieoznacza wersję systemu operacyjnego, a drugi jessieoznacza katalog, w którym pliki mają zostać zainstalowane. Teraz możesz odmontować obraz, ponieważ resztę pracy trzeba wykonać na telefonie. Zrób to poprzez:

sudo umount $(pwd)/jessie

Jeśli nie możesz zainstalować qemu-debootstrap, zobacz następną sekcję.

Wypełnianie obrazu nowym systemem operacyjnym bez qemu-debootstrap

Pomiń tę sekcję, jeśli masz dostępny qemu-debootstrap. Jednak nadal będziesz potrzebować natywnego paska debootstrap dla swojej architektury. Jeśli tak się dzieje, to po prostu użyj powyższej linii poleceń, ale zastąp qemu-debootstrapdebootstrap. Jeśli nie, postępuj zgodnie z tą sekcją.

Aby pobrać wszystkie wymagane pliki dla nowego systemu operacyjnego, uruchom następujące polecenie:

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

Teraz możesz odmontować obraz, ponieważ resztę pracy trzeba wykonać na telefonie. Zrób to poprzez:

sudo umount $(pwd)/jessie

Prześlij zdjęcie do telefonu

Teraz najlepiej stwórz archiwum tar z tego, które następnie skopiujesz na swój telefon. Nie ma znaczenia, czy archiwum jest umieszczone na karcie SD, czy w pamięci wewnętrznej. Utwórz archiwum na pulpicie, używając:

tar -cvzf jessie.tar.gz IMAGE.img

Teraz w telefonie włącz obsługę ssh, aby skopiować obraz. Możesz to również zrobić za pomocą kabla USB. Ponieważ serwer ssh jest resetowany przy każdym ponownym uruchomieniu, uruchom usługę ssh na telefonie za pomocą: sudo service ssh start

Następnie skopiuj obraz przez:

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

gdzie zmienna COPYDIRzawiera katalog, w którym obraz powinien być przechowywany. To polecenie zakłada, że ​​twoja nazwa użytkownika w telefonie to phablet, a nazwa hosta telefonu to ubuntu-phablet. Możesz dowiedzieć się , odpowiednio, wydając echo $USER i echo $HOSTNAMEprzez telefon.

Teraz musisz rozpakować archiwum tylko tam, gdzie chcesz, aby obraz się znajdował. Załóżmy, że katalog, w którym ma się znajdować obraz, jest przechowywany w zmiennej IMAGEDIR. Wyodrębnij tam obraz za pomocą polecenia bash:

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

Możesz teraz usunąć archiwum:

rm $COPYDIR/jessie.tar.gz

Finalizowanie i korzystanie z obrazu w telefonie

Jeśli nie włączyłeś serwera ssh w telefonie, zrób to teraz poprzez:

sudo service ssh start

Następnie zamontuj obraz w wybranym katalogu (w tym przypadku „jessie”):

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

Teraz wprowadź swój chroot po raz pierwszy za pomocą:

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

Jeśli masz na swoim komputerze dostępny qemu-debootstrap, wszystko jest gotowe. Użyj powyższych 2 poleceń, aby połączyć się z chroot. Jeśli nie, nadal musisz wykonać następujące polecenie, gdy jesteś w chroot, aby poprawnie skonfigurować system operacyjny:

/debootstrap/debootstrap --second-stage

Podsumowanie dostępu do chroot

Jeśli wykonałeś powyższe kroki, powinieneś być w stanie uzyskać dostęp do chroot za pomocą tego prostego skryptu na telefonie:

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

Musisz najpierw ssh do własnego telefonu z telefonu ze względu na ograniczenia apparmor aplikacji terminalowej. Aplikacja terminalowa może uruchamiać pliki binarne tylko w niektórych lokalizacjach i nie ma w nich ani katalogu domowego, ani karty SD. Usługa ssh nie ma jednak takich ograniczeń.

RaZziel
źródło
1

Ustaw system plików root na telefonie do zapisu

Aby ponownie zamontować główny system plików jako zapisywalny, wykonaj następujące polecenie na swoim telefonie (pobierz aplikację terminalową, jeśli jeszcze tego nie zrobiłeś):

sudo mount -o remount,rw /

Należy pamiętać, że po ponownym uruchomieniu telefonu, /jest on ponownie tylko do odczytu . Jeśli chcesz, aby to było trwałe, zmień /etc/fstab. Jednak Ubuntu touch na BQ nie jest jeszcze w głównym repozytorium ramienia Ubuntu. Instalowanie rzeczy takich jak treelub libreofficejeszcze nie będzie działać. Mogą być w najnowszej wersji programistycznej.

Uruchamianie najnowszej wersji Ubuntu

(ma więcej zalet w repozytorium, takich jak narzędzia wiersza poleceń itp.)

Jak uruchomić najnowszą wersję rozwojową systemu Ubuntu Touch na telefonie BQ?

Naprawianie rzeczy, gdy wszystko psujesz

Gdy coś całkowicie zepsujesz , możesz po prostu przepłukać urządzenie .

Merlijn Sebrechts
źródło