OpenStack:镜像修改

1. 准备工作

1.1 安装必要工具

1
yum install -y libguestfs-tools

1.2 设置后端模式

1
export LIBGUESTFS_BACKEND=direct

2. 挂载镜像并修改

2.1 启动guestfish交互环境

1
guestfish --rw -a centos8.1_x86_basic.raw

2.2 查看文件系统

1
2
run
list-filesystems

输出示例

1
2
3
/dev/sda1: ext4
/dev/cl/root: xfs
/dev/cl/swap: swap

2.3 挂载文件系统

1
mount /dev/cl/root /

3. 配置网络自启动

3.1 修改rc.local文件

1
vi /etc/rc.local

添加内容

1
2
3
#!/bin/bash
nmcli c up ens3
dhclient ens3

3.2 创建启动脚本

1
2
touch /etc/profile.d/dhclientandconnect.sh
vi /etc/profile.d/dhclientandconnect.sh

脚本内容

1
2
3
4
5
#!/bin/bash
# 设置网卡自动连接
nmcli c modify ens3 connection.autoconnect yes
# 启动DHCP客户端
dhclient ens3

3.3 设置脚本权限

1
2
chmod 755 /etc/profile.d/dhclientandconnect.sh
chmod +x /etc/rc.local

4. 其他常见配置

4.1 修改网络配置

1
vi /etc/sysconfig/network-scripts/ifcfg-ens3

关键参数

1
2
3
ONBOOT=yes
BOOTPROTO=dhcp
NM_CONTROLLED=yes

4.2 配置控制台输出

1
vi /etc/default/grub

修改GRUB配置

1
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"

4.3 更新GRUB配置

1
chroot / grub2-mkconfig -o /boot/grub2/grub.cfg

5. 完成修改

5.1 退出并保存

1
exit

6. 验证修改

6.1 创建测试虚拟机

1
openstack server create --image centos8.1_x86_basic --flavor m1.small test-vm

6.2 检查网络配置

1
openstack console log show test-vm | grep -i "network\|dhclient"

7. 自动化脚本示例

7.1 批量修改脚本

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
IMAGE=$1

guestfish --rw -a $IMAGE <<EOF
run
mount /dev/cl/root /
write /etc/sysconfig/network-scripts/ifcfg-ens3 "DEVICE=ens3\nTYPE=Ethernet\nONBOOT=yes\nBOOTPROTO=dhcp\nNM_CONTROLLED=yes\n"
write /etc/rc.local "#!/bin/bash\nnmcli c up ens3\ndhclient ens3\n"
chmod +x /etc/rc.local
exit
EOF

8. 注意事项

  1. 镜像格式:确保镜像格式为raw或qcow2
  2. 文件系统:不同镜像可能有不同的分区布局
  3. 网络接口名:根据实际情况修改ens3为正确的接口名
  4. 权限问题:使用root权限执行操作
  5. 备份镜像:修改前建议备份原始镜像

9. 参考文档