วิธีที่แนะนำในการติดตั้งแพคเกจ. deb (ปกติ) บนโทรศัพท์ Ubuntu หรือไม่


12

tl; dr: ฉันกำลังมองหาวิธี "canonical" หรือ "แนะนำ" เพื่อติดตั้ง (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 main config" ฉันรีสตาร์ทโทรศัพท์ แต่ไม่ต้องการเปิดอีกต่อไป ฉันลองRecoverตัวเลือกการบูต ที่ได้ผล ฉันลองinstall -fอีกครั้งและครั้งนี้ก็ใช้งานได้ แต่หลังจากทำupgradeฉันยังคงมีข้อผิดพลาดเดียวกัน


การทำให้พาร์ติชันระบบสามารถเขียนได้และไม่รองรับ apt หากคุณจำเป็นต้องใช้แอปคอนโซลด้วยเหตุผลบางอย่างคุณควรสร้าง chroot ภายในไดเรกทอรีหลักแล้วติดตั้งสิ่งที่คุณต้องการภายใน chroot นั้น
dobey

1
ฉันสามารถยืนยันได้ว่าการใช้การอัปเกรด apt-get จะส่งผลให้ระบบเสียหาย เคยทำมาแล้ว
Merlijn Sebrechts

1
@Galesalesh ขอบคุณสำหรับการแก้ไขไม่ได้ดูดีขึ้นมาก สำหรับตอนนี้คำตอบของคุณเป็นไปคว้ารางวัล :)
jangorecki

1
มอบให้แก่ @dobey ได้โปรด คำตอบของเขาเป็นจำนวนมากได้ดี :)
Merlijn Sebrechts

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 vivid-preinstalled-touch-armhf.tar.gz

จากนั้นใช้ chroot และติดตั้งเครื่องมือ CLI ที่คุณต้องการใช้ภายใน chroot นั้น:

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

ในการดำเนินการบางอย่างอาจจำเป็นต้องเชื่อมโยงบางไดเร็กทอรี คุณจะต้องระมัดระวังเป็นพิเศษเมื่อทำเช่นนี้หากคุณต้องการลบ chroot ออกจากโทรศัพท์ของคุณหรือดำเนินการทำลายล้างอื่น ๆ

sudo mount - ผูก / proc / home / phablet / vivid-chroot / proc
sudo mount - ผูก / dev / home / phablet / vivid-chroot / dev
sudo mount - ผูก / sys / home / phablet / vivid-chroot / sys

นี่ไม่ใช่รายการครบถ้วนสมบูรณ์ แต่คุณสามารถผูกติดไดเรกทอรีอื่น ๆ ตามที่ต้องการในลักษณะเดียวกัน คุณไม่จำเป็นต้องสร้าง chroot ในโฮมไดเร็กตอรี่ของคุณหากคุณมีอุปกรณ์เก็บข้อมูลภายนอกที่จะสร้างมันขึ้นมาเช่นการ์ด SD อย่างไรก็ตามโทรศัพท์บางรุ่นอาจไม่มีช่องเสียบการ์ด SD หากคุณต้องการสร้าง chroot บนการ์ด SD เพียงแค่แทนที่โฮมไดเรกทอรีในคำสั่งด้านบนด้วยพา ธ ไปยังไดเรกทอรีบนสื่อเก็บข้อมูลสำรองของคุณที่คุณต้องการสร้าง chroot


ว้าวขอบคุณมากสำหรับคำแนะนำนี้! ฉันดีใจที่ฉันไม่ต้องยุ่งกับ/อีกต่อไปเมื่อฉันต้องการที่จะเล่นซอกับโทรศัพท์ของฉัน ....
Merlijn Sebrechts

นอกจากนี้sudo mount -o bind /run /home/phablet/vivid-chroot/runเพื่อให้เครือข่ายภายใน chroot askubuntu.com/questions/469209/ …
sdbbs

1
@sbbs ฉันไม่คิดว่าจำเป็น ฉันไม่ผูกติดอะไรใน chroot ของฉันและการเข้าถึงเครือข่ายทำงานได้ดี ฉันใช้ bzr และฉลาดตลอดเวลาที่อยู่ในนั้น
dobey

ฉันคัดลอก /etc/resolv.conf ลงใน vivid-chroot / etc เพื่อให้ dns resolution ทำงานได้
popey

4

คำเตือน:นี่เป็นเพียงการแฮ็คเพื่อกำจัดปัญหาการเชื่อมโยงข้ามอุปกรณ์ในการอัพเกรด apt-get ด้วยแพ็คเกจ powerd นี่ไม่ใช่โซลูชันที่ได้รับการรับรอง "UBUNTU"

วิชาบังคับก่อน: ทำ R / W ติดตั้งอูบุนตูด้วย:

phablet-config writable-image

คัดลอกไฟล์ powerd * .deb ที่ดาวน์โหลดมาจากโทรศัพท์ไปยังพีซีจากเส้นทาง:

/ var / แคช / อพาร์ท / ที่เก็บ /

บนพีซีให้คลายไฟล์. 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 

ทุกสิ่งจะต้องทำในฐานะรูทเพื่อให้สิทธิ์ดั้งเดิมของไฟล์แพ็กเกจและ dirs บรรจุใหม่คัดลอกกลับบนโทรศัพท์แล้วติดตั้งด้วย:

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 ของฉันดูเหมือนว่าทำงานได้ดีและมีเสถียรภาพ


ขอบคุณสำหรับการแก้ปัญหา! จะไม่ยอมรับตอนนี้เพราะฉันยังหวังว่าจะได้รับคำแนะนำเพิ่มเติม(ไม่ต้องได้รับการสนับสนุน ) วิธีทำเช่นนั้น BTW สิ่งที่เกี่ยวกับการปรับปรุงในอนาคตของpowerd? จำเป็นต้องแฮ็คมันในทุก ๆ การอัพเดทไหม?
jangorecki

จนถึงบางคนจะแก้ไขปัญหานี้ในการใช้ฮาร์ดลิงก์ใน dpkg (เรื่องเก่า) ในการติดตั้งอุปกรณ์ไขว้ในขณะนี้ฉันไม่เห็นทางเลือกอื่น
Ezio Somà

1
อาจเป็นไปได้ว่าควรเปลี่ยนจุดเชื่อมต่อบางจุดเป็น rder เพื่อหลีกเลี่ยงการเชื่อมโยงข้ามอุปกรณ์นี้ แต่ต้องใช้เวลาในการวิเคราะห์ โดยเฉพาะการค้นหาไฟล์ fstab หรือเอาต์พุต mont ฉันไม่สามารถคิดได้ว่าจะเกิดอะไรขึ้น
Ezio Somà

3

ดังที่ได้กล่าวแล้วคุณต้องติดตั้ง chroot ที่สามารถใช้งาน ARM ได้บนอุปกรณ์ของคุณและติดตั้งแพ็คเกจที่จำเป็นทั้งหมดใน chroot นั้น อย่างไรก็ตามการทำเช่นนั้นในโฮมไดเร็กตอรี่ของคุณเป็นการสิ้นเปลืองพื้นที่มีค่ามากมาย แต่สามารถทำได้บนการ์ด SD ของคุณโดยใช้คอมพิวเตอร์ที่ใช้ระบบปฏิบัติการ Linux ที่เหมาะสม (ทดสอบกับ Linux Mint 17 และ Ubuntu Trusty) เนื่องจากฉันไม่พบข้อมูลใด ๆ เกี่ยวกับเรื่องนี้ในที่อื่นฉันจึงใส่คำตอบไว้ในคำถามเก่า

คำแนะนำต่อไปนี้จะถือว่าคุณต้องการติดตั้ง debian jessie chroot ในไดเรกทอรี jessie

การสร้างและเติมไฟล์ภาพในคอมพิวเตอร์เดสก์ท็อป

การสร้างไฟล์ภาพเปล่า

ในการสร้างภาพ 1GB ชื่อ IMAGE.img ในไดเรกทอรีการทำงานปัจจุบันให้ทำ:

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

โปรดทราบว่า B ใน GB ถูกปล่อยออกมา "ถ้า" หมายถึง "ไฟล์อินพุต", "ของ" สำหรับ "ไฟล์เอาต์พุต" และ "bs" สำหรับ "ขนาดบล็อก"

มีคำสั่งที่มีประสิทธิภาพมากกว่า แต่คำสั่งเหล่านั้นใช้ได้กับระบบไฟล์บางประเภทเท่าที่ฉันรู้ อันนี้ยังทำงานบนการ์ด SD หรือ tempfs โปรดทราบการใช้ / dev / ศูนย์และไม่ / dev / สุ่มหรือ / 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 และ OS ที่ได้รับ หากคุณได้รับคำสั่งไม่พบข้อผิดพลาดขณะดำเนินการ 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 แรกลงในโทรศัพท์ของคุณเองจากโทรศัพท์เนื่องจากข้อ จำกัด apparmor ของแอป terminal แอพพลิเคชั่นเทอร์มินัลอนุญาตให้เรียกใช้ไบนารีในบางตำแหน่งเท่านั้นและไม่มีไดเรกทอรีหลักหรือการ์ด SD ของคุณ อย่างไรก็ตามบริการ ssh ไม่มีข้อ จำกัด ดังกล่าว


1

ทำให้ระบบไฟล์รูทบนโทรศัพท์เขียนได้

หากต้องการติดตั้งระบบไฟล์รูทเป็นแบบเขียนได้ให้ดำเนินการคำสั่งต่อไปนี้บนโทรศัพท์ของคุณ (ดาวน์โหลดแอพเทอร์มินัลหากคุณยังไม่ได้ทำ):

sudo mount -o remount,rw /

โปรดทราบว่าหลังจากรีบูตเครื่องโทรศัพท์ของคุณ/เป็นอ่านอย่างเดียวอีกครั้ง ถ้าคุณอยากให้เรื่องนี้เป็นแบบถาวร, /etc/fstabการเปลี่ยนแปลง อย่างไรก็ตาม Ubuntu สัมผัสกับ BQ ยังไม่ได้อยู่บน repo arm Ubuntu หลัก การติดตั้งสิ่งต่าง ๆ เช่นtreeหรือlibreofficeไม่สามารถใช้งานได้ พวกเขาอาจอยู่ในเวอร์ชันพัฒนาล่าสุด

ใช้งาน Ubuntu รุ่นล่าสุด

(มีสินค้าใน repo มากขึ้นเช่นเครื่องมือ commandline และอื่น ๆ )

วิธีการเปิดใช้งานการพัฒนา Ubuntu รุ่นล่าสุดบนโทรศัพท์ bq?

แก้ไขสิ่งต่าง ๆ เมื่อคุณทำลายทุกสิ่ง

เมื่อคุณทำลายสิ่งที่สมบูรณ์คุณสามารถเพียงแค่ reflash อุปกรณ์ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.