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

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

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-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 $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 开发版本?

当你破坏一切时修复它

当你彻底打破事物时,你可以只需刷新你的设备

相关内容