我已经创建了一个 LXC 虚拟化物理服务器,其中 Centos 6.8 为主机操作系统。
现在,当我使用 Centos 的默认模板创建客户虚拟机时,它会创建以 Centos 6.8 为客户操作系统的虚拟机。
我想创建一个以 Centos 7.2 版本为客户操作系统的虚拟机。这可能吗?
我已经完成以下步骤来创建虚拟机并启动。
- 创建了 centos 模板的副本,并在模板中硬编码了 7.2 版本。(据我了解,它会检查 /etc/os-release 中的 CPE ID)
- 创建了一个指向这个新模板的客户虚拟机。(已下载 Centos 7.2 版本并将其放置在 LXC 缓存中)
- 客户虚拟机已创建。我将配置文件中的网络链接更改为桥接网络。
- 我启动了客户虚拟机,但我只能看到 systemd 进程启动了(使用
pstree
命令),没有为虚拟机分配 IP 地址,而且我无法登录到客户虚拟机。
在这个环境中,我需要一台装有 Centos 7.2 的 VM。请指导如何实现这一点。
答案1
我调整了 CentOS 的 lxc 模板以支持 CentOS 7。
我创建的 lxc 模板的副本位于https://github.com/nirmalraj17/lxc/blob/master/templates/lxc-centos.in
这样做是因为有些步骤与 OS 版本 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“
为了避免这种情况,请停止容器并创建一个执行必要操作的 shell 脚本。
[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 中,因此可以直接从系统访问此命令。
现在为了启动服务器并执行这个 shell 脚本,我已经创建了一个 shell 脚本。
[root@centos ~]# vi startup_centos7.sh
#!/bin/bash
lxc-start -n centos7
lxc-attach -n centos7 device_initiation.sh
exit
一旦执行脚本,CentOS 7 将启动,您将能够顺利登录。
完成上述步骤后,我在新的 LXC 容器上安装了可运行的 CentOS 7.3 版本。