静看光阴荏苒
不管不顾不问不说也不念

使用libguestfs自定义debian 12 cloud image

我之前记录了一下创建proxmox debian12 cloud-init模板的过程,但有一些问题没有得到很好的解决,比如hostname设置失效。后来我发现用virt-customize去自定义debian cloud image更方便,而且hostname设置失效的问题也不会出现了。

另外我之前在这篇文章中提到过virt-customize的一些简单用法,但实际上virt-customize只是libguestfs这一套工具包里面的其中一个工具而已。

实际上libguestfs除了virt-customize以外还包含了很多其他强大且实用的工具,它能做的事情非常多。这篇文章就简单介绍一下这个牛逼的libguestfs。。

[重要提示]

不要在proxmox的母鸡系统中安装libguestfs,因为libguestfs与proxmox不兼容:

https://forum.proxmox.com/threads/is-it-safe-to-install-libguestfs-tools-directly-on-pve.58780/

https://forum.proxmox.com/threads/did-i-just-brick-proxmox-8-by-installing-libguestfs-tools.135085/

就算哪天与proxmox兼容了也不要安装在母鸡系统内,因为安装libguestfs会携带安装一大堆依赖的软件包,起码有1G多,它会把你的系统搞的非常杂乱和臃肿,不利于后续的维护。

个人建议单独开一台小鸡,在小鸡内安装libguestfs,之后所有的工作都在小鸡内完成。

安装的话很简单,Debian只需:

apt -y update
apt -y install libguestfs-tools

然后就可以使用到libguestfs官网右边列出的那一系列工具了:https://libguestfs.org/,下面简单介绍一下常用的几个功能。

查看image内的任意文件:

virt-cat -a debian-12-generic-amd64.qcow2 /etc/motd

可以看到成功回显了:

编辑image内的任意文件:

virt-edit -a debian-12-generic-amd64.qcow2 /etc/motd

更新系统:

virt-customize -a debian-12-generic-amd64.qcow2 --update

设置时区:

virt-customize -a debian-12-generic-amd64.qcow2 --timezone 'Asia/Shanghai'

安装软件包:

virt-customize -a debian-12-generic-amd64.qcow2 --install qemu-guest-agent,wget,curl,git,net-tools

启动systemd服务:

virt-customize -a debian-12-generic-amd64.qcow2 --run-command "systemctl enable qemu-guest-agent"

修改ssh配置文件:

virt-customize -a debian-12-generic-amd64.qcow2 --run-command "sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config"
virt-customize -a debian-12-generic-amd64.qcow2 --run-command "sed -i 's/PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config"

这里就不一一列举所有的用法了,有需求的可以自己研究一下。

之前有人问我怎么修改debian官方image里面的源,我看了下其实有多种方法都可以实现。

第一种就还是利用cloud-init,自定义一个cloud-init的用户配置文件,然后在里面根据官方的这个示例配置来修改。

第二种就是利用libguestfs了,这里记录下详细的修改过程。

默认情况下,cloud-init是会接管软件源配置的,如果我们直接去编辑软件源配置文件的话没有用,机器开机后软件源配置文件的内容会被cloud-init覆盖掉。

搜了一下发现可以直接改cloud-init的base_config:https://cloudinit.readthedocs.io/en/latest/reference/base_config_reference.html

编辑cloud-init的base_config配置文件:

virt-edit -a debian-12-generic-amd64.qcow2 /etc/cloud/cloud.cfg

往下翻就可以看到软件源相关的配置了:

...
   package_mirrors:
     - arches: [default]
       failsafe:
         primary: https://deb.debian.org/debian
         security: https://deb.debian.org/debian-security
...

在这里找个合适的软件源镜像:https://www.debian.org/mirror/list,然后替换掉之前的配置即可:

...
   package_mirrors:
     - arches: [default]
       failsafe:
         primary: https://mirrors.xtom.com/debian
         security: https://mirrors.xtom.com/debian-security
...

这里有一个坑就是很多软件源镜像没有同步这个debian-security,你得找一个都同步了的。。因为debian-security是最近几个版本加进来的,以前debian没有这个。。

然后如果需要增加套件的话,可以直接编辑下面这个文件,cloud-init不会覆盖这个配置文件:

virt-edit -a debian-12-generic-amd64.qcow2 /etc/apt/sources.list.d/debian.sources

默认只有main:

Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian.list
Suites: bookworm bookworm-updates bookworm-backports
Components: main

Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian-security.list
Suites: bookworm-security
Components: main

根据这个文档:https://wiki.debian.org/SourcesList,你可以在里面加上contrib/non-free等套件:

Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian.list
Suites: bookworm bookworm-updates bookworm-backports
Components: main contrib non-free non-free-firmware

Types: deb deb-src
URIs: mirror+file:///etc/apt/mirrors/debian-security.list
Suites: bookworm-security
Components: main contrib non-free non-free-firmware

把修改好的image传到proxmox:

scp debian-12-generic-amd64.qcow2 root@1.2.3.4:/root/debian-12-generic-amd64-source.qcow2

然后创建一个vm:

qm create 50000 \
--name debian12-cloud-init-mod-source \
--cpu host \
--cores 2 \
--memory 2048 \
--net0 virtio,bridge=vmbr0,firewall=1 \
--net1 virtio,bridge=vnet0,firewall=1 \
--scsihw virtio-scsi-single \
--agent enabled=1,freeze-fs-on-backup=1,fstrim_cloned_disks=1

导入image并进行一系列设置,最后转换成系统模板:

qm set 50000 --scsi0 local-zfs:0,import-from=/root/debian-12-generic-amd64-source.qcow2,cache=writeback,iothread=1,discard=on
qm set 50000 --ide2 local-zfs:cloudinit
qm set 50000 --boot order=scsi0
qm set 50000 --serial0 socket --vga serial0
qm set 50000 --ciuser=root --cipassword="setyourpassword"
qm set 50000 --nameserver="8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844"
qm set 50000 --ipconfig1 ip=dhcp
qm template 50000

测试都是ok的:

赞(0)
未经允许不得转载:荒岛 » 使用libguestfs自定义debian 12 cloud image
分享到: 更多 (0)

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

分享创造快乐

广告合作资源投稿