总结
最近尝试了下nokvm 的镜像制作,现把制作过程记录一下,留作日后查阅。因为nokvm提供的镜像版本要么老旧要么不全,所以我是通过ISO全新安装制作模版镜像,过程参考自nokvm官方教程和相关资源。
(其他安装系统的方法还有dd,可以参考https://yangwenqing.com/archives/757/,dd可以不需要vnc,直接一键安装完成)
预备工作
- nokvm的主控和被控节点
- 在被控母鸡上用之前的模板先创建个vps,后面就在这个vps安装纯净系统,并制作镜像
记录vps的网络配置信息:
- 网络接口设备名和序列号
- IP地址
- 网关
- 子网掩码
- DNS(一般8.8.8.8即可
安装纯净系统
在vps上安装所需版本的纯净系统,本次制作的是debian系统,其他系统操作流程类似。
下载系统安装文件
在 Debian 官网 Network Boot 页面 ( https://www.debian.org/distrib/netinst ) 找到最新系统引导文件地址,安装64位系统就选 AMD64 ,安装32位系统选 i386。然后在vps上执行以下命令:
cd / wget http://ftp.nl.debian.org/debian/dists/Debian9.12/main/installer-amd64/current/images/netboot/debian-installer/amd64/initrd.gz wget http://ftp.nl.debian.org/debian/dists/Debian9.12/main/installer-amd64/current/images/netboot/debian-installer/amd64/linux
修改系统引导配置
centos:
修改/boot/grub/menu.lst文件
vi /boot/grub/menu.lst
然后把下面内容加入到末尾
title Reinstall OS root (hd0,0) kernel /linux ro root=/dev/ram ramdisk_size=20000 initrd /initrd.gz
debian:
修改/boot/grub/grub.cfg
vi /boot/grub/grub.cfg
然后在末尾追加以下内容
menuentry 'Reinstall OS' --class debian --class gnu-linux --class gnu --class os { insmod gzio insmod part_msdos #insmod ext4 set root='(hd0,msdos1)' linux /linux initrd /initrd.gz }
建议使用根目录 / 来引导,但是有时候无法通过根目录 / 来引导启动,那就需要换成 /boot,用 /boot目录的话,启动配置的路径也需要对应的修改,下面只以根目录 / 引导为例。https://www.risirirui.com/14.html
有时在文件最末尾添加可能会不生效,此时可以加入在文件中间
安装系统
用vns连接vps,执行正常的安装操作即可,同时注意以下内容:
- 如果需要配置网络环境,则可以使用之前记录vps的网络信息进行配置。
只需要安装ssh server和 standard system utilities。
- 分区设置如无特殊要求,选他推荐的即可,只划分一个\分区
- 安装grub时,选择相应磁盘,不要选择第一个选项。
配置系统
刚装好系统后,可能root用户无法通过ssh方式登陆,ssh时会提示:Permission denied, please try again. 此时用VNC连接vps,然后修改ssh配置文件
vi /etc/ssh/sshd_config
在其中找到root的设置 PermitRootLogin,将其改为
PermitRootLogin yes
重启ssh服务,然后就可以ssh登陆了
service sshd restart
有时我们安装完后发现网卡和之前的不一样了(通过命令ip addr可以查看网络配置),比如之前是eth0和eth1,安装完系统后变成了ens33和ens34。此时需要修改网卡名称,将其改回成与先前网卡名称一致:
修改启动文件/etc/default/grub ,将GRUB_CMDLINE_LINUX修改成以下以下内容
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
因为我看到nokvm提供的模板中这一行的内容有些不一致,所以我决定按照nokvm模版中这部分内容进行配置(命令中其他部分是什么作用我没看,照着copy出来的)
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 systemd.show_status=true" #在文件结尾同时加上下面内容 GRUB_DISABLE_OS_PROBER=true
重新制作grub引导配置文件
grub-mkconfig -o /boot/grub/grub.cfg
⚠️注意同时记得修改网络配置文件,因为修改网卡名称,网络配置文件同时也需要修改下。
比如debian/ubuntu中,修改/etc/network/interface文件。其中配置按个人情况填写,切勿照抄。
auto eth0 iface eth0 inet static address xxx.5.23.120 netmask 255.255.255.128 gateway xxx.5.23.1 auto eth1 iface eth1 inet static address 10.0.156.103 netmask 255.0.0.0
重启
reboot
- 安装你所需要的软件,并进行相应的配置
制作镜像
参考自nokvm官方文档,依次进行以下操作:
安装在线密码修改服务
Centos6:
yum install qemu-guest-agent chkconfig --add qemu-ga
Centos7:
yum install qemu-guest-agent systemctl start qemu-guest-agent systemctl enable qemu-guest-agent
Debian/Ubuntu:
apt install qemu-guest-agent
编辑/etc/rc.local 文件之前添加以下内容
Centos 6/7:
sh /root/change.sh && rm -rf /root/change.sh
Debian/Ubuntu (需要在exit 0之前添加):
/etc/init.d/qemu-guest-agent start sh /root/change_other.sh && rm -rf /root/change_other.sh
如果没有/etc/rc.local文件,则创建文件,并写入以下内容。如果脚本报错,则将文件中的sh改成bash
#!/bin/sh -e # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # By default this script does nothing. /etc/init.d/qemu-guest-agent start sh /root/change_other.sh && rm -rf /root/change_other.sh exit 0
PS:1. 目前已知Ubuntu18及以上版本的系统,都是默认启用netplan来管理网络配置的,之前的配置/etc/network/interfaces的方法不生效,需要关闭netplan服务并启用之前的服务。
2. 另外Ubuntu18及以上版本的系统启动时,会先配置网络,再执行rc.local。如果还是按之前的配置rc.local的方法,会导致vps修改ip/重装/新装后,需要再重启一次才能正确配置网络。可以通过在rc.local中添加强制更新网络配置的命令来解决。
加上可执行权限
chmod +x /etc/rc.local
- 将vps关机
登陆母鸡,将vps的镜像copy出来当作模板使用
cp /home/nokvm/resource/ecs-vpsid/uuid_sys.qcow2 /home/nokvm/templates/模版名称.qcow2
- 记得将镜像发送给所有母鸡
参考文章:
1: https://www.risirirui.com/14.html
2: https://www.hostloc.com/thread-520732-1-1.html
3: https://www.jianshu.com/p/af2938da5c42
4: https://blog.csdn.net/shenwansan_gz/article/details/78614906?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
5: https://blog.51cto.com/13659253/2155915
6:https://garywu520.github.io/blog/2018/01/18/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3OpenStack-%E6%89%8B%E5%8A%A8%E5%88%B6%E4%BD%9Cqcow2%E9%95%9C%E5%83%8F/