Nokvm debian镜像制作

总结

最近尝试了下nokvm 的镜像制作,现把制作过程记录一下,留作日后查阅。因为nokvm提供的镜像版本要么老旧要么不全,所以我是通过ISO全新安装制作模版镜像,过程参考自nokvm官方教程和相关资源。

(其他安装系统的方法还有dd,可以参考https://yangwenqing.com/archives/757/,dd可以不需要vnc,直接一键安装完成)

预备工作

  • nokvm的主控和被控节点

  • 在被控母鸡上用之前的模板先创建个vps,后面就在这个vps安装纯净系统,并制作镜像

  • 记录vps的网络配置信息:

    • 网络接口设备名和序列号
    • IP地址
    • 网关
    • 子网掩码
    • DNS(一般8.8.8.8即可

安装纯净系统

在vps上安装所需版本的纯净系统,本次制作的是debian系统,其他系统操作流程类似。

  1. 下载系统安装文件

    在 Debian 官网 Network Boot 页面 ( https://www.debian.org/distrib/netinst ) 找到最新系统引导文件地址,安装64位系统就选 AMD64 ,安装32位系统选 i386。然后在vps上执行以下命令:

    1
    2
    3
    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
  2. 修改系统引导配置

    • centos:

      修改/boot/grub/menu.lst文件

      1
      vi /boot/grub/menu.lst

      然后把下面内容加入到末尾

      1
      2
      3
      4
      title Reinstall OS
      root (hd0,0)
      kernel /linux ro root=/dev/ram ramdisk_size=20000
      initrd /initrd.gz
    • debian:

      修改/boot/grub/grub.cfg

      1
      vi /boot/grub/grub.cfg

      然后在末尾追加以下内容

      1
      2
      3
      4
      5
      6
      7
      8
      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

    有时在文件最末尾添加可能会不生效,此时可以加入在文件中间

  3. 安装系统

    用vns连接vps,执行正常的安装操作即可,同时注意以下内容:

    • 如果需要配置网络环境,则可以使用之前记录vps的网络信息进行配置。

    • 只需要安装ssh server和 standard system utilities。

    • 分区设置如无特殊要求,选他推荐的即可,只划分一个

    • 安装grub时,选择相应磁盘,不要选择第一个选项。

  4. 配置系统

    • 刚装好系统后,可能root用户无法通过ssh方式登陆,ssh时会提示:Permission denied, please try again. 此时用VNC连接vps,然后修改ssh配置文件

      1
      vi /etc/ssh/sshd_config

      在其中找到root的设置 PermitRootLogin,将其改为

      1
      PermitRootLogin yes

      重启ssh服务,然后就可以ssh登陆了

      1
      service sshd restart
    • 有时我们安装完后发现网卡和之前的不一样了(通过命令ip addr可以查看网络配置),比如之前是eth0和eth1,安装完系统后变成了ens33和ens34。此时需要修改网卡名称,将其改回成与先前网卡名称一致:

      1. 修改启动文件/etc/default/grub ,将GRUB_CMDLINE_LINUX修改成以下以下内容

        1
        GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

        因为我看到nokvm提供的模板中这一行的内容有些不一致,所以我决定按照nokvm模版中这部分内容进行配置(命令中其他部分是什么作用我没看,照着copy出来的)

        1
        2
        3
        4
        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
      2. 重新制作grub引导配置文件

        1
        grub-mkconfig -o /boot/grub/grub.cfg
      3. ⚠️注意同时记得修改网络配置文件,因为修改网卡名称,网络配置文件同时也需要修改下。

        比如debian/ubuntu中,修改/etc/network/interface文件。其中配置按个人情况填写,切勿照抄。

        1
        2
        3
        4
        5
        6
        7
        8
        9
        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
      4. 重启

        1
        reboot
    • 安装你所需要的软件,并进行相应的配置

  5. 制作镜像

    参考自nokvm官方文档,依次进行以下操作:

    • 安装在线密码修改服务

      • Centos6:

        1
        2
        yum install qemu-guest-agent
        chkconfig --add qemu-ga
      • Centos7:

        1
        2
        3
        yum install qemu-guest-agent
        systemctl start qemu-guest-agent
        systemctl enable qemu-guest-agent
      • Debian/Ubuntu:

        1
        apt install qemu-guest-agent
    • 编辑/etc/rc.local 文件之前添加以下内容

      • Centos 6/7:

        1
        sh /root/change.sh && rm -rf /root/change.sh
      • Debian/Ubuntu (需要在exit 0之前添加):

        1
        2
        /etc/init.d/qemu-guest-agent start
        sh /root/change_other.sh && rm -rf /root/change_other.sh

        如果没有/etc/rc.local文件,则创建文件,并写入以下内容。如果脚本报错,则将文件中的sh改成bash

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        #!/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中添加强制更新网络配置的命令来解决。

    • 加上可执行权限

      1
      chmod +x /etc/rc.local
    • 将vps关机

    • 登陆母鸡,将vps的镜像copy出来当作模板使用

      1
      cp /home/nokvm/resource/ecs-vpsid/uuid_sys.qcow2 /home/nokvm/templates/模版名称.qcow2
  6. 记得将镜像发送给所有母鸡

参考文章:

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/

7: https://yangwenqing.com/archives/757/