tl;dr:我正在寻找一种在 Ubuntu touch 上安装(cli).deb 包的“规范”或“推荐”方法
我已经在桌面和服务器上使用 Ubuntu 一年了,我非常满意。现在我购买了第一部 Ubuntu 手机,BQ Aquaris e4.5 Ubuntu 版。但是,我发现我无法安装普通.deb
软件包或使用 安装程序apt-get
。我如何“root”我的手机以便安装“普通”.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
我仍然遇到同样的错误。
答案1
在主目录中创建一个 chroot:
mkdir -p 生动-chroot cd 生动的chroot wget http://cdimage.ubuntu.com/ubuntu-touch/vivid/daily-preinstalled/current/vivid-preinstalled-touch-armhf.tar.gz sudo tar -zxvf 生动-预安装-触摸-armhf.tar.gz
然后,使用 chroot 并在该 chroot 中安装您需要使用的任何 CLI 工具:
cd〜/生动的chroot 使用 chroot 命令。 apt-get 更新 apt-get 安装 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
这不是一份详尽的清单,但您可以根据需要以类似的方式绑定挂载其他目录。如果您有外部存储设备(例如 SD 卡)来创建 chroot,则无需在主目录中创建 chroot。但是,并非所有手机都有 SD 卡插槽。如果您希望在 SD 卡上创建 chroot,只需将上述命令中的主目录替换为您希望创建 chroot 的备用存储介质上的目录路径即可。
答案2
警告:这只是一个黑客使用 powerd 包解决 apt-get 升级时跨设备链接问题。这不是“UBUNTU”认证的解决方案
先决条件:已使用以下命令完成 Ubuntu 安装:
phablet-config writable-image
将下载的 powerd*.deb 文件从手机复制到 PC,路径如下:
/var/缓存/apt/档案/
在 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 身份完成所有操作,以保留软件包文件和目录的原始权限。重新打包,复制回手机,然后使用以下命令进行安装:
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 似乎运行良好且稳定。
答案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 和派生操作系统就是这种情况。如果在执行时收到命令未找到错误
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"
由于终端应用程序的 apparmor 限制,您必须先从手机 ssh 进入自己的手机。终端应用程序仅允许执行某些位置的二进制文件,而您的主目录和 SD 卡都不在其中。但是 ssh 服务没有这样的限制。
答案4
使手机上的根文件系统可写
要将根文件系统重新挂载为可写,请在手机上执行以下命令(下载终端应用程序如果你还没有):
sudo mount -o remount,rw /
请注意重启手机后,/
再次变为只读。如果您希望永久保留,请更改/etc/fstab
。但是,BQ 上的 Ubuntu touch 尚未出现在主要的 Ubuntu arm repo 中。安装tree
或之类的东西libreoffice
还不起作用。它们可能在最新的开发版本中。
运行 Ubuntu 的最新开发版本
(repo 中有更多好东西,比如命令行工具等)
如何在 bq 手机上运行最新的 Ubuntu touch 开发版本?
当你破坏一切时修复它
当你彻底打破事物时,你可以只需刷新你的设备。