Cách khuyến nghị để cài đặt các gói .deb thông thường (cli) trên Ubuntu Phone?


12

tl; dr: Tôi đang tìm kiếm một cách "chuẩn" hoặc "khuyến nghị" để cài đặt các gói .deb trên Ubuntu touch

Tôi đã sử dụng Ubuntu trên Máy tính để bàn và Máy chủ được một năm và tôi rất hài lòng. Bây giờ tôi đã mua chiếc điện thoại Ubuntu đầu tiên, BQ Aquaris e4.5 Ubuntu Edition. Tuy nhiên, tôi phát hiện ra rằng tôi không thể cài đặt .debcác gói thông thường hoặc cài đặt mọi thứ bằng cách sử dụng apt-get. Làm cách nào tôi có thể "root" điện thoại để có thể cài đặt .debcác gói "bình thường" ?

Tôi đã thử nó bản thân mình. Tôi biết điều đầu tiên là làm cho hệ thống tập tin của bạn có thể ghi được. Tôi đã làm các bước sau nhưng sau đó tôi bị kẹt vì lỗi 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

Và đây là nơi lỗi bắt đầu chặn tôi:

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

Vì vậy, tôi đã cố gắng

sudo apt-get install -f

Nhưng nó đã bị kẹt trên "cấu hình chính Bluetooth". Tôi khởi động lại điện thoại, nhưng nó không muốn bật nữa. Tôi đã thử Recovertùy chọn khởi động. Điều đó đã làm việc. Tôi đã thử install -flại, và lần này nó đã hoạt động. Nhưng sau khi làm upgradetôi vẫn gặp lỗi tương tự.


Làm cho phân vùng hệ thống có thể ghi và sử dụng apt không được hỗ trợ. Nếu bạn thực sự cần sử dụng một số ứng dụng bảng điều khiển vì một số lý do, tốt nhất là tạo một chroot trong thư mục chính, sau đó cài đặt những gì bạn cần bên trong chroot đó.
dobey

1
Tôi có thể xác nhận rằng sử dụng nâng cấp apt-get sẽ dẫn đến một hệ thống bị hỏng. Đã từng trải qua rồi.
Merlijn Sebrechts

1
@Gachealesh cảm ơn vì đã chỉnh sửa, trông không đẹp hơn nhiều. Vì bây giờ câu trả lời của bạn sẽ lấy một tiền thưởng :)
jangorecki

1
Đưa nó cho @dobey, làm ơn. Câu trả lời của anh ấy tốt hơn rất nhiều :)
Merlijn Sebrechts

1
Xin vui lòng cũng nhấp vào "Chấp nhận câu trả lời này" bên cạnh câu trả lời. :)
dobey

Câu trả lời:


17

Tạo một chroot trong thư mục chính:

mkdir -p sống động-chroot
cd sinh động-chroot
wget http://cdimage.ubfox.com/ubfox-touch/vivid/daily-preinstalled/civerse/vivid-preinstalled-touch-armhf.tar.gz
sudo tar -zxvf sinh động-cài đặt sẵn-touch-armhf.tar.gz

Sau đó, sử dụng chroot và cài đặt bất kỳ công cụ CLI nào bạn cần sử dụng, trong chroot đó:

cd ~ / sinh động-chroot
sudo chroot.
cập nhật apt-get
apt-get cài đặt git

Để thực hiện một số điều nhất định, có thể phải liên kết gắn kết một số thư mục. Bạn sẽ cần phải cẩn thận hơn khi làm như vậy, nếu bạn muốn xóa chroot khỏi điện thoại của mình hoặc thực hiện các hành động phá hoại khác.

sudo mount --bind / Proc / home / phablet / sôi động-chroot / Proc
sudo mount --bind / dev / home / phablet / sôi động-chroot / dev
sudo mount --bind / sys / home / phablet / sôi động-chroot / sys

Đây không phải là một danh sách đầy đủ, nhưng bạn có thể liên kết các thư mục khác khi cần theo cách tương tự. Bạn không cần phải tạo chroot trong thư mục chính nếu bạn có thiết bị lưu trữ ngoài để tạo nó, chẳng hạn như thẻ SD. Tuy nhiên, không phải tất cả các điện thoại đều có khe cắm thẻ SD. Nếu bạn muốn tạo chroot trên thẻ SD, chỉ cần thay thế thư mục chính trong các lệnh ở trên, với đường dẫn đến một thư mục trên phương tiện lưu trữ thay thế của bạn, nơi bạn muốn tạo chroot.


Wow, cảm ơn rất nhiều vì hướng dẫn này! Tôi rất vui vì tôi không phải làm phiền /nữa khi tôi muốn nghịch điện thoại của mình ....
Merlijn Sebrechts

Ngoài ra, sudo mount -o bind /run /home/phablet/vivid-chroot/runđể có được mạng bên trong chroot Askubfox.com/questions/469209/iêu
sdbbs

1
@sdbbs Tôi không nghĩ là cần thiết. Tôi không ràng buộc gắn kết bất cứ điều gì trong chroot của tôi và truy cập mạng hoạt động tốt. Tôi sử dụng bzr và apt mọi lúc trong đó.
dobey

Tôi đã sao chép /etc/resolv.conf vào sinh động-chroot / etc để làm cho độ phân giải dns hoạt động.
popey

4

Cảnh báo: đây chỉ là một bản hack để thoát khỏi sự cố liên kết thiết bị chéo trên nâng cấp apt-get với gói powerd. đây không phải là giải pháp được chứng nhận "UBUNTU"

Điều kiện tiên quyết: đã thực hiện cài đặt R / W trên Ubuntu với:

phablet-config writable-image

Sao chép tệp powerd * .deb đã tải xuống từ điện thoại sang PC từ đường dẫn:

/ var / cache / apt / lưu trữ /

Trên PC, giải nén tệp .deb, xóa tệp /usr/share/powerd/device_configs/config-default.xml (khỏi các thử nghiệm của tôi, kết quả không phải là cơ bản):

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 

Mọi thứ phải được thực hiện với quyền root để giữ quyền ban đầu của tệp gói và thư mục. Đóng gói lại, sao chép lại trên điện thoại, sau đó cài đặt với:

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

Bạn vẫn sẽ nhận được lỗi:

"/usr/share/powerd/device_configs/config-default.xml": Thiết bị hoặc tài nguyên bận

Nhưng cuối cùng gói được cập nhật.

Bây giờ nếu bạn làm: sudo apt-get upgradelỗi biến mất.

Điện thoại BQ Aquaris của tôi dường như hoạt động tốt và ổn định.


Cảm ơn giải pháp! Bây giờ tôi sẽ không chấp nhận vì tôi vẫn hy vọng nhận được một cách được đề xuất hơn (không cần phải được hỗ trợ ) để làm như vậy. BTW. những gì về bản cập nhật trong tương lai powerd? Có yêu cầu hack nó trên mỗi bản cập nhật không?
jangorecki

Cho đến khi ai đó sẽ giải quyết vấn đề này bằng cách sử dụng các liên kết cứng trong dpkg (một câu chuyện cũ) khi cài đặt thiết bị chéo, tại thời điểm này tôi không thấy giải pháp thay thế.
Ezio Somà

1
Có thể là có thể thay đổi một số điểm gắn kết trong rder để tránh liên kết cứng thiết bị chéo này, nhưng cần một thời gian để được phân tích. Chỉ bằng cách tìm kiếm tập tin fstab hoặc đầu ra mont, tôi không thể tìm ra cơ hội nào
Ezio Somà

3

Như đã được chỉ ra, bạn phải cài đặt một chroot có khả năng ARM trên thiết bị của bạn và cài đặt tất cả các gói cần thiết trong chroot đó. Tuy nhiên, làm như vậy trong thư mục nhà của bạn lãng phí rất nhiều không gian có giá trị. Thay vào đó, nó có thể được thực hiện trên thẻ SD của bạn bằng máy tính chạy trên HĐH Linux thích hợp (được thử nghiệm trên Linux Mint 17 và Ubuntu Trusty). Vì tôi không tìm thấy bất kỳ thông tin nào về vấn đề này ở bất cứ nơi nào khác, tôi đặt nó ở đây như một câu trả lời cho một câu hỏi cũ.

Các hướng dẫn sau đây giả sử bạn muốn cài đặt một debian jessie chroot trong thư mục jessie.

Tạo và điền tệp hình ảnh trên máy tính để bàn

Tạo một tệp hình ảnh trống

Để tạo hình ảnh 1GB có tên IMAGE.img trong thư mục làm việc hiện tại, hãy làm:

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

Lưu ý rằng B tính bằng GB bị bỏ lại. "Nếu" là viết tắt của "tệp đầu vào", "của" cho "tệp đầu ra" và "bs" cho "kích thước khối".

Có nhiều lệnh hiệu quả hơn, nhưng chúng chỉ hoạt động trên một số loại hệ thống tệp nhất định, theo như tôi biết. Cái này cũng hoạt động trên thẻ SD hoặc tempfs. Vui lòng lưu ý việc sử dụng / dev / zero và không / dev / ngẫu nhiên hoặc / dev / urandom vì sẽ mất nhiều thời gian hơn và khiến việc chuyển hình ảnh giữa các thiết bị sau này mất nhiều thời gian hơn.

Tạo một hệ thống tập tin trên hình ảnh

Không có hệ thống tập tin, điện thoại sẽ không thể lưu trữ bất kỳ dữ liệu nào trên hình ảnh. Nếu không có hệ thống tập tin, bạn chưa thể gắn hình ảnh vào một thư mục, chỉ vào một thiết bị khối.

Lệnh bash này sẽ xuất thiết bị vòng lặp trống tiếp theo vào biến LOOP:

$LOOP=$(sudo losetup -f)

Tiếp theo, gán hình ảnh cho một thiết bị khối:

sudo losetup $LOOP IMAGE.img

Tiếp theo, tạo hệ thống tệp ext4 trên nó:

sudo mkfs -t ext4 $LOOP

Tiếp theo, tách hình ảnh khỏi thiết bị lặp:

sudo losetup -d $LOOP

Nếu bạn nhận được lệnh không tìm thấy lỗi, chỉ cần cài đặt các chương trình bị thiếu.

Gắn tệp hình ảnh trên máy tính để truy cập nó

Bây giờ, tạo một thư mục tạm thời trong thư mục làm việc:

mkdir jessie

và gắn tệp hình ảnh IMAGE.img vào nó:

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

Lệnh pwdsẽ đảm bảo bạn cung cấp cho mount một đường dẫn tuyệt đối đến thư mục làm việc hiện tại của bạn.

Tạo hình ảnh với hệ điều hành mới với qemu-debootstrap

Bước tiếp theo sẽ là sử dụng qemu-debootstrap để tải xuống các tệp cần thiết. Điều này thật dễ dàng nếu qemu-debootstrap có sẵn như trường hợp trên Ubuntu và các hệ điều hành dẫn xuất. Nếu bạn nhận được lệnh không tìm thấy lỗi khi thực thi qemu-debootstrap --help, hãy thử cài đặt gói thích hợp, có thể được thực hiện trên Ubuntu thông qua:

sudo apt-get install qemu-user-static

Để tải xuống tất cả các tệp cần thiết và sẵn sàng HĐH mới, hãy chạy lệnh sau:

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

Xin lưu ý rằng jessiephiên bản đầu tiên là phiên bản hệ điều hành trong khi phiên bản thứ hai jessielà thư mục chứa các tệp sẽ được cài đặt. Bây giờ bạn có thể ngắt kết nối hình ảnh vì phần còn lại của công việc phải được thực hiện trên điện thoại. Làm như vậy thông qua:

sudo umount $(pwd)/jessie

Nếu bạn không thể cài đặt qemu-debootstrap, hãy xem phần tiếp theo.

Tạo hình ảnh với hệ điều hành mới mà không cần qemu-debootstrap

Vui lòng bỏ qua phần này nếu bạn có sẵn qemu-debootstrap. Bạn vẫn sẽ cần một debootstrap riêng cho kiến ​​trúc của bạn, mặc dù. Nếu điều này xảy ra là armhf, chỉ cần sử dụng dòng lệnh trên nhưng thay thế qemu-debootstrapbằng debootstrap. Nếu không, hãy làm theo phần này.

Để tải xuống tất cả các tệp cần thiết cho HĐH mới, hãy chạy lệnh sau:

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

Bây giờ bạn có thể ngắt kết nối hình ảnh vì phần còn lại của công việc phải được thực hiện trên điện thoại. Làm như vậy thông qua:

sudo umount $(pwd)/jessie

Chuyển hình ảnh sang điện thoại

Bây giờ tốt nhất hãy tạo một kho lưu trữ tar từ cái này mà sau đó bạn sao chép vào điện thoại của mình. Việc lưu trữ được đặt trên thẻ SD hay bộ nhớ trong không thành vấn đề. Tạo kho lưu trữ trên máy tính để bàn bằng cách sử dụng:

tar -cvzf jessie.tar.gz IMAGE.img

Bây giờ, trên điện thoại của bạn, bật hỗ trợ ssh để sao chép hình ảnh qua. Bạn cũng có thể làm điều đó bằng cách sử dụng cáp USB thay thế. Vì máy chủ ssh được đặt lại trên mỗi lần khởi động lại, hãy khởi động dịch vụ ssh trên điện thoại qua: sudo service ssh start

Tiếp theo, sao chép hình ảnh qua:

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

trong đó biến COPYDIRchứa thư mục lưu trữ hình ảnh. Lệnh này giả sử rằng tên người dùng của bạn trên điện thoại là phablet và tên máy chủ của điện thoại là ubfox-phablet. Bạn có thể tìm hiểu cả bằng cách phát hành echo $USERecho $HOSTNAMEtrên điện thoại, tương ứng.

Bây giờ bạn chỉ phải trích xuất kho lưu trữ bất cứ nơi nào bạn muốn hình ảnh cư trú. Giả sử thư mục mà bạn muốn hình ảnh được định vị được lưu trữ trong biến IMAGEDIR. Trích xuất hình ảnh ở đó thông qua lệnh bash:

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

Bây giờ bạn có thể xóa kho lưu trữ:

rm $COPYDIR/jessie.tar.gz

Hoàn thiện và sử dụng hình ảnh trên điện thoại

Nếu bạn không bật máy chủ ssh trên điện thoại, hãy thực hiện ngay bây giờ qua:

sudo service ssh start

Tiếp theo, gắn hình ảnh của bạn vào một thư mục bạn chọn (trong trường hợp này là "jessie"):

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

Bây giờ, hãy nhập chroot của bạn lần đầu tiên qua:

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

Nếu bạn đã có qemu-debootstrap trên máy tính của mình, bạn đã hoàn tất. Sử dụng 2 lệnh trên để kết nối với chroot của bạn. Nếu không, bạn vẫn phải thực thi lệnh sau khi bạn ở trong chroot của mình, để thiết lập đúng hệ điều hành:

/debootstrap/debootstrap --second-stage

Tóm tắt về cách truy cập chroot

Nếu bạn đã làm theo các bước trên, bạn sẽ có thể truy cập chroot của mình bằng cách sử dụng tập lệnh đơn giản này trên điện thoại:

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

Trước tiên, bạn phải ssh vào điện thoại của mình từ điện thoại do hạn chế của ứng dụng thiết bị đầu cuối. Ứng dụng đầu cuối chỉ được phép thực thi nhị phân ở một số vị trí nhất định và cả thư mục nhà của bạn cũng như thẻ SD không nằm trong số đó. Dịch vụ ssh, tuy nhiên, không có những hạn chế như vậy.


1

Tạo hệ thống tập tin gốc trên điện thoại có thể ghi

Để kết nối lại hệ thống tập tin gốc dưới dạng có thể ghi, hãy thực hiện lệnh sau trên điện thoại của bạn (tải xuống ứng dụng đầu cuối nếu bạn chưa có):

sudo mount -o remount,rw /

Xin lưu ý rằng sau khi khởi động lại điện thoại, /chỉ đọc lại . Nếu bạn muốn điều này là vĩnh viễn, thay đổi /etc/fstab. Tuy nhiên, Ubuntu touch trên BQ vẫn chưa có trên nhánh chính của Ubuntu. Cài đặt những thứ như treehoặc libreofficesẽ không hoạt động. Họ có thể ở phiên bản mới nhất.

Chạy phiên bản mới nhất của Ubuntu

(có nhiều tính năng tốt hơn trong repo, như các công cụ dòng lệnh và như vậy)

Làm cách nào để chạy bản phát hành phát triển Ubuntu touch mới nhất trên điện thoại bq?

Sửa chữa mọi thứ khi bạn phá vỡ mọi thứ

Khi bạn phá vỡ hoàn toàn, bạn chỉ có thể phản xạ lại thiết bị của bạn .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.