Назад | Перейти на главную страницу

Установка гостевой ОС LXC

Я создал виртуализированный физический сервер LXC с Centos 6.8 в качестве хост-ОС.
Теперь, когда я создаю гостевую виртуальную машину с использованием шаблона Centos по умолчанию, она создает виртуальные машины с Centos 6.8 в качестве гостевой ОС.
Я хотел создать виртуальную машину с версией Centos 7.2 в качестве гостевой ОС. Это возможно?

Я выполнил следующие шаги для создания виртуальной машины и запуска.

  1. Создал копию шаблона centos и жестко закодировал версию 7.2 внутри шаблона. (Насколько я понимаю, он проверяет / etc / os-release для CPE ID)
  2. Создана гостевая виртуальная машина, указывающая на этот новый созданный шаблон. (Версия Centos 7.2 была загружена и помещена в кеш LXC)
  3. Гостевая виртуальная машина создана. Я изменил сетевую ссылку в файле конфигурации на мостовую сеть.
  4. Я запустил гостевую виртуальную машину, но вижу, что запущен только процесс systemd (используя pstree command), виртуальной машине не назначен IP-адрес, и я не могу войти в гостевую виртуальную машину.

В этой среде мне нужна была виртуальная машина с Centos 7.2. Пожалуйста, расскажите, как этого добиться.

Я настроил шаблон lxc CentOS для поддержки CentOS 7.

Копия созданного мной шаблона lxc находится по адресу https://github.com/nirmalraj17/lxc/blob/master/templates/lxc-centos.in

Это было сделано, потому что были некоторые шаги, которые были связаны с версией ОС 7, которая не упоминалась в текущем шаблоне lxc-centos, и была упомянута в шаблоне lxc-oracle. Я вынул соответствующие разделы из lxc-oracle, добавил их в текущий шаблон lxc-centos и создал новый шаблон с именем lxc-centos-7.

Затем создайте контейнер lxc, используя команду

lxc-create -n centos7 -t /usr/local/share/lxc/templates/lxc-centos-7  -- -R 7

Это загрузит необходимые файлы, необходимые для выпуска версии 7.

После этого, если вы попытаетесь запустить контейнер LXC, вы получите "[!!!!!!] Не удалось выделить объект диспетчера, зависание." когда пытаешься завести.

Теперь создайте каталог systemd под / cgroup

Смонтируйте с помощью приведенной ниже команды.

 mount -t cgroup -o none,name=systemd cgroup /cgroup/systemd

Теперь, если вы запустите контейнер LXC и попытаетесь войти в систему, вы получите сообщение об ошибке "сервер отказался выделить pty"

Чтобы этого избежать, остановите контейнер и создайте сценарий оболочки, который выполнит необходимые действия.

[root@centos ~]# vi /usr/local/var/lib/{container_name}/rooftfs/usr/local/bin/device_initiation.sh
    #!/bin/bash
    mknod -m 600 /dev/console c 5 1 2>/dev/null
    mknod -m 666 /dev/null c 1 3 2>/dev/null
    mount -n -t tmpfs none /dev 2>/dev/null
    mknod -m 622 /dev/console c 5 1 2>/dev/null
    mknod -m 666 /dev/null c 1 3 2>/dev/null
    mknod -m 666 /dev/zero c 1 5 2>/dev/null
    mknod -m 666 /dev/ptmx c 5 2 2>/dev/null
    mknod -m 666 /dev/tty c 5 0 2>/dev/null
    mknod -m 444 /dev/random c 1 8 2>/dev/null
    mknod -m 444 /dev/urandom c 1 9 2>/dev/null
    chown root:tty /dev/{console,ptmx,tty} 2>/dev/null
    ln -s /proc/self/fd /dev/fd 2>/dev/null
    ln -s /proc/self/fd/0 /dev/stdin 2>/dev/null
    ln -s /proc/self/fd/1 /dev/stdout 2>/dev/null
    ln -s /proc/self/fd/2 /dev/stderr 2>/dev/null
    ln -s /proc/kcore /dev/core 2>/dev/null
    mkdir /dev/pts 2>/dev/null
    mkdir /dev/shm 2>/dev/null
    mount -t devpts -o gid=4,mode=620 none /dev/pts 2>/dev/null
    mount -t tmpfs none /dev/shm 2>/dev/null

Поскольку мы помещаем этот файл в usr / local / bin, эта команда будет доступна из системы напрямую.

Теперь, чтобы запустить сервер и выполнить этот сценарий оболочки, я создал сценарий оболочки.

[root@centos ~]# vi startup_centos7.sh
#!/bin/bash
lxc-start -n centos7
lxc-attach -n centos7 device_initiation.sh
exit

Как только вы выполните сценарий, CentOS 7 запустится, и вы сможете без проблем войти в систему.

После выполнения вышеуказанных шагов я установил рабочую версию CentOS 7.3 на новый контейнер LXC.