在Ubuntu Phone上安装Regular(cli).deb软件包的推荐方法?


12

tl; dr:我正在寻找一种“规范”或“推荐”的方式来在Ubuntu touch上安装(cli).deb软件包。

我已经在台式机和服务器上使用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

但是它卡在了“蓝牙主要配置”上。我重新启动了手机,但它不想再打开了。我尝试了Recover启动选项。那行得通。我install -f再次尝试,这一次成功了。但是这样做之后,upgrade我仍然遇到相同的错误。


不支持使系统分区可写并使用apt。如果出于某种原因确实需要使用某些控制台应用程序,则最好在主目录中创建一个chroot,然后在该chroot中安装所需的内容。
2015年

1
我可以确认使用apt-get upgrade会导致系统损坏。去过也做过。
Merlijn Sebrechts 2015年

1
@Galgalesh感谢您的编辑,看起来还不错。至于现在,您的答案将是一笔赏金:)
jangorecki 2015年

1
请把它交给@dobey。他的回答好多了:)
Merlijn Sebrechts

1
请随时单击答案旁边的“接受此答案”。:)
dobey

Answers:


17

在主目录中创建一个chroot:

mkdir -p生动chroot
光盘生动chroot
wget http://cdimage.ubuntu.com/ubuntu-touch/vivid/daily-preinstalled/current/vivid-preinstalled-touch-armhf.tar.gz
须藤焦油-zxvf生动的预安装的触摸armhf.tar.gz

然后,使用chroot并在该chroot中安装需要使用的任何CLI工具:

cd〜/ vivid-chroot
须藤chroot。
apt-get更新
apt-get安装git

为了执行某些操作,可能需要绑定安装某些目录。如果要从手机中删除chroot或执行其他破坏性操作,则需要格外小心。

须藤安装--bind / proc / home / phablet / vivid-chroot / proc
须藤挂载--bind / dev / home / phablet / vivid-chroot / dev
须藤挂载--bind / sys / home / phablet / vivid-chroot / sys

这不是一个详尽的列表,但是您可以按照需要以类似的方式绑定其他目录。如果您有外部存储设备(例如SD卡)在其上创建,则无需在主目录中创建chroot。但是,并非所有电话都有SD卡插槽。如果要在SD卡上创建chroot,只需将上面命令中的主目录替换为备用存储介质上您要在其中创建chroot的目录的路径即可。


哇,非常感谢本指南!我很高兴,我没有乱用/了,当我想拨弄我的手机....
Merlijn Sebrechts

另外,sudo mount -o bind /run /home/phablet/vivid-chroot/run要在chroot中获得网络,请问问题
sdbbs,2016年

1
@sdbbs我认为没有必要。我没有在chroot中绑定安装任何内容,并且网络访问正常。我一直在使用bzr和apt。

我将/etc/resolv.conf复制到vidia-chroot / etc中,以使dns解析正常工作。
popey

4

警告:这只是摆脱带有Powerd软件包的apt-get升级中跨设备链接问题的黑客。这不是“ UBUNTU”认证的解决方案

先决条件:通过以下方式使ubuntu安装成为R / W:

phablet-config writable-image

从路径将下载的powerd * .deb文件从手机复制到PC:

/ var / cache / apt / archives /

在PC上,解压缩.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用户身份进行,以保留软件包文件和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似乎运作良好且稳定。


感谢您的解决方案!现在不会接受,因为我仍然希望获得更多推荐的方式(不必获得支持)。顺便说一句。那将来的更新powerd呢?是否需要在每次更新时对其进行破解?
jangorecki 2015年

直到有人能解决在跨设备安装中在dpkg中使用硬链接的问题(一个古老的故事),目前我还没有其他解决方案。
EzioSomà2015年

1
可能应该在rder中更改一些安装点,以避免此跨设备硬链接,但需要一些时间进行分析。仅通过查看fstab文件或mont输出,我无法弄清楚是什么机会
EzioSomà2015年

3

正如已经指出的那样,您必须在设备上安装支持ARM的chroot,并在该chroot中安装所有必需的软件包。但是,在主目录中这样做会浪费大量宝贵的空间。而是可以使用在适当的Linux操作系统上运行的计算机(在Linux Mint 17和Ubuntu Trusty上进行测试)在SD卡上完成此操作。由于我在其他任何地方都找不到关于此的任何信息,因此将其作为对一个旧问题的解答。

以下说明假定您要在目录jessie中安装debian jessie chroot。

在台式计算机上创建和填充图像文件

创建一个空的图像文件

要在当前工作目录中创建一个名为IMAGE.img的1GB映像,请执行以下操作:

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

请注意,GB中的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将确保您为mount提供到当前工作目录的绝对路径。

使用带有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-debootstrapdebootstrap。如果不是,请遵循本节。

要下载新操作系统的所有必需文件,请运行以下命令:

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 $USERecho $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服务没有这样的限制。


1

使手机上的根文件系统可写

要将根文件系统重新安装为可写,请在电话上执行以下命令(如果尚未下载终端应用程序,请执行以下命令):

sudo mount -o remount,rw /

请注意,重启手机后,/再次为只读。如果要永久保留,请更改/etc/fstab。但是,Ubuntu在BQ上的接触还不是主要的Ubuntu臂仓库上的。安装类似的东西treelibreoffice将无法使用。它们可能是最新的开发版本。

运行最新版本的Ubuntu

(回购中有更多好东西,例如命令行工具等)

如何在bq手机上运行最新的Ubuntu touch开发版本?

破坏一切时修复问题

当您彻底破坏东西时,只需刷新设备即可

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.