有没有办法在自定义目录或分区中安装自己的自由容器?我认为容器安装的主要大小(卷)属于这样的目录:
/home/phablet/.cache/libertine-container/my-container/rootfs
当然,了解自己容器的其他文件位置列表也会很有帮助,例如:
~/.local/share/libertine/ContainersConfig.json
~/.cache/libertine-container/my-container
~/.cache/my-container
~/.local/share/libertine-container/user-data/my-container
~/.local/share/libertine-container/user-data/my-container/.cach/libertine-container/my-container
我现在看到的唯一方法是使用mount --bind..
,但这样做我们有几个问题此处/etc/fstab
编辑或使用/etc/rc.local
或者设备启动时自动挂载的 upstart 脚本。
所以,第二个问题是:如果我 不时手动使用mount --bind..
绑定 ,那么/home/phablet/.cache/libertine-container/my-container/rootfs
我会在自由范围的正确工作方面遇到麻烦吗(就像那里描述的一样)?
答案1
在我们操作之前,我们应该有一个带分区的 SD 卡ext2/3/4
。在 Ubuntu Touch 中,它可以表示为/dev/mmcblk1p2
(在我的情况下)。如果我们想要永久安装,我们不能使用/etc/fstab/
,但我们可以使用/lib/init/fstab
,因为我指出答案在 Ubuntu Touch 中永久安装 SD 既不方便也不稳定。有时,由于 ext2 分区上的文件系统错误,我在启动 Ubuntu Touch 时遇到问题。也许,关闭设备无法正确执行卸载。因此,我决定安装 SD 卡并时不时地在其上使用 Libertine 容器。
首先,我sd-container
在内部磁盘空间中创建了一个新的容器,名字和往常一样:/home/phablet/.cache/libertine-container/sd-container
。然后,我使用以下命令在 SD 上挂载了 ext2 分区:
sudo mount /dev/mmcblk1p2 /home/phablet/mnt/sd -t ext2 -o defaults,noatime,nodiratime,errors=remount-ro
然后我创建了目录/home/phablet/mnt/sd/sd-container/
并将 sd-container 的 rootfs 复制到 SD 上的 ext2 分区:
cd /home/phablet/.cache/libertine-container/sd-container
rsync -aAXvH ./ /home/phablet/mnt/sd/sd-container/
经过这些准备后,我编写了脚本来在 SD 上挂载 ext2 分区并绑定 rootfs(sdgo.sh
):
#!/bin/sh
sudo mount /dev/mmcblk1p2 /home/phablet/mnt/sd -t ext2 -o defaults,noatime,nodiratime,errors=remount-ro
sudo mount --bind /home/phablet/mnt/sd/sd-container/rootfs /home/phablet/.cache/libertine-container/sd-container/rootfs
restart unity8-dash
并停止播放此脚本(sdstop.sh
):
#!/bin/sh
sudo umount /home/phablet/.cache/libertine-container/sd-container/rootfs
sudo umount /dev/mmcblk1p2
restart unity8-dash
最后,在我运行sdgo.sh
unity8-dash 后,我可以在桌面应用程序范围下看到新的 SD 容器范围及其应用程序。我可以像往常一样运行或安装新应用程序。但此容器的根文件系统位于 SD 卡上!当我想停止时,我运行sdstop.sh
,SD 容器范围消失。而小的原始文件rootfs
(被此绑定隐藏)仍保留在内部磁盘空间中,没有变化。
结论:我在 SD 卡上拥有 Libertine 容器的 rootfs,并且可以在需要时打开/关闭它及其范围。