![如何在文件中安装 Ubuntu?](https://linux22.com/image/1206456/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E5%AE%89%E8%A3%85%20Ubuntu%EF%BC%9F.png)
基于 Linux 的系统中,所有内容都是文件。每次安装 Ubuntu 时,我都会选择一个根分区。现在,我想创建一个根文件系统,但在一个文件中,例如~/ubuntu.img
。我有另一个 Linux 发行版(基于 Ubuntu)作为主操作系统。有没有办法安装 (s)ubiquity 并选择~/ubuntu.img
作为根文件系统?据我所知,安装程序将根文件系统挂载在/target
并使用chroot
。也许我可以在那里挂载我的根文件系统并手动安装?
我想这样做是因为:
- 我不想安装超过 1 个操作系统和双重启动。
- 当我想编译某些项目时,我的主操作系统不支持某些软件包或存在一些依赖问题。
如果我能通过这种方式安装 Ubuntu,我将使用它chroot
来安装根文件系统映像内的软件包。
答案1
由于某种原因,我无法使用parted
、cfdisk
或等工具直接读取fdisk
映像。我不得不将映像刷入 16GB(或更大)的 USB 驱动器,然后使用dd
、或 GNOME 磁盘实用程序复制根分区。
因此,我将根分区复制到~/ubuntu.img
并设置 chroot 环境:
cd # go to the directory where the root filesystem image is located
mkdir ubuntu
sudo mount -o loop ubuntu.img ubuntu
sudo mount -t proc /proc ./ubuntu/proc
sudo mount -t sysfs /sys ./ubuntu/sys
sudo mount -o bind /dev ./ubuntu/dev
sudo chroot ./ubuntu
我甚至可以从 chroot 环境访问 USB 设备。
您可能已经注意到互联网连接仅部分可用 - 如果指定 IP 地址,您可以 ping 任何服务器,但无法解析域名。此命令应该可以修复它:
echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
这种方法的缺点是,如果您需要访问 USB 设备,则必须始终准备 chroot 环境。但是,可以通过编写 shell 脚本来简化这一过程。
离开 chroot 环境后进行清理(并且那里没有运行任何进程):
sudo umount ./ubuntu/{proc,sys,dev}
sudo umount ./ubuntu
我认为有一种方法可以在基础系统上手动安装 Ubuntu。有类似的工具debootstrap
,但我没有尝试过。欢迎发表另一个答案 :)
答案2
您的建议本质上是虚拟机背后的想法。为什么不直接使用 VirtualBox 并将 Ubuntu 安装为 VirtualBox VM?