Как установить Ubuntu в файл?

Все в Linux-системах - это файл. Каждый раз, когда я устанавливаю Ubuntu, я выбираю корневой раздел. Теперь я хочу создать корневую файловую систему, но в файле, например ~/ubuntu.img. В качестве основной операционной системы у меня есть другой дистрибутив Linux (основанный на Ubuntu). Есть ли способ установить (s)ubiquity и выбрать ~/ubuntu.img в качестве корневой файловой системы? Насколько я знаю, программа установки монтирует корневую файловую систему в /target и использует chroot. Может быть, я смогу смонтировать там свою корневую файловую систему и установить её вручную?

Я хочу это сделать, потому что:

  1. Я не хочу устанавливать более 1 ОС и двойную загрузку.
  2. Моя основная ОС не поддерживает некоторые пакеты или имеет некоторые проблемы с зависимостями, когда я хочу скомпилировать некоторые проекты.

Если я смогу установить Ubuntu таким образом, я использую chroot для установки пакетов внутри образа корневой файловой системы.

0
задан 15 March 2021 в 10:25

2 ответа

Что вы предлагаете, по сути, идея виртуальной машины. Почему не просто использовать VirtualBox и установить Ubuntu в качестве VirtualBox VM?

0
ответ дан 18 March 2021 в 23:25

Мне удалось смонтировать образ из этого ответа . Вы можете использовать эту ссылку для загрузки.

По каким-то причинам я не смог непосредственно прочитать образ с помощью таких инструментов, как parted, cfdisk или fdisk. Мне пришлось прошить образ на 16 Гб (или более) USB диск, а затем скопировать корневой раздел, используя dd, или утилиту GNOME Disk.

Итак, я скопировал корневой раздел на ~/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

Я даже могу получить доступ к USB-устройствам из chroot-окружения.

Вероятно, вы заметили, что Интернет-соединение работает только частично - вы можете пинговать любой сервер, если укажете IP-адрес, но домены не могут быть разрешены. Эта команда должна исправить это:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf

Недостатком этого метода является то, что вы всегда должны подготовить chroot окружение, если вам нужен доступ к USB устройствам. Но это можно упростить, написав скрипт оболочки.

Для очистки после выхода из chroot-окружения (и никаких процессов там не запущено):

sudo umount ./ubuntu/{proc,sys,dev}
sudo umount ./ubuntu

Думаю, есть способ вручную установить Ubuntu поверх базовой системы. Есть такие инструменты, как debootstrap, но я этого не пробовал. Не стесняйтесь, напишите другой ответ с :)

0
ответ дан 18 March 2021 в 23:25

Другие вопросы по тегам:

Похожие вопросы: