当前位置: 首页 > article >正文

openstack ironic ipa 以及用户镜像制作

ironic ipa 以及用户镜像制作

Openstack中的centos和ubuntu操作系统的镜像可以直接从社区直接下载下来使用,但是总是感觉有问题,cloud-init初始化程序是通用的,启动速度很慢,查了一下相关信息,发现是cloud-init进程会去访问外网一个地址,感觉使用起来用户体验很差。手工制作镜像是最符合实际使用需求的,想定制什么样的镜像都可以,但是有些费时费力。这里我尝试使用自动化镜像生成工具disk-image-builder(DIB)生成镜像,这个工具可以很方便的生成fedora和ubuntu系列的linux操作系统,对于windows不支持。

DIB是一个OpenStack工具,可以从https://git.openstack.org/cgit/openstack/diskimage-builder/tree/或 https://pypi.python.org/pypi/diskimage-builder/0.1.38 下载 。

DIB使用chroot的环境来构建镜像。目标是建立一个拥有Nova所需的所有组件的镜像,如trove所需的数据库镜像,ironic所需的支持硬件裸机的镜像。

Ironic Python Agent:简称 IPA,是一个运行在 RAMDisk 之上的 Python 服务,暴露 RESTful API 接收 Ironic Inspector 和 Ironic Conductor 的远程访问,完成裸机的自省与操作。

这里设计到两个镜像,一个是引导ramfs(ipa)镜像,一个是用户的系统镜像

基于一台CentOS 8 服务器 上面操作如下,diskimage-builder==3.6.0 对应生成的是centos8 的用户镜像 ,2.25.0 对应生成centos7的用户镜像。用户的镜像完全可以自己制作,不用走diskimage-builder。

#cd /opt/
#yum -y install python3 python3-devel qemu-img sudo git kpartx libguestfs-tools-c gcc gcc-c++ make #提供virt-sysprep
#pip3 install diskimage-builder==3.6.0 ironic-python-agent-builder==5.0.0

#export DIB_DEV_USER_USERNAME=devuser #初始用户名devuser
#export DIB_DEV_USER_PASSWORD=password #初始密码password
#export DIB_DEV_USER_PWDLESS_SUDO=YES #允许sudo
#export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack" #cloud-init 的datasource是ConfigDrive, OpenStack
#export AUTHORIZE_SSH=true
#export DIB_PYTHON_VERSION=3
#export DIB_PYTHON=python3
构建IPA引导镜像(这里好像只能用8了,7好像不支持了),用于引导进入initramfs,后面再下载镜像写入磁盘
#ironic-python-agent-builder -o centos8-ipa-x86 --release 8 centos -e "devuser dynamic-login dhcp-all-interfaces"
构建裸机的用户系统镜像
#centos 7 (社区的好像制作不了7了)
#disk-image-create centos7 -o CentOS7.qcow2 dhcp-all-interfaces grub2 install-static cloud-init-datasources
#centos 8 +
#disk-image-create centos -o CentOS8.qcow2 dhcp-all-interfaces grub2 install-static cloud-init-datasources


问题排查
  1. 上面原来我是build centos7 的时候发现,无法构建,总是报错:/tmp/dib_build.IGfPWgcM/hooks/bin/extract-image: line 15: $4: unbound variable,原因是cloud.centos.org 官网改版了。所以最后我直接build centos8 的ipa了
#更改/usr/local/lib/python3.6/site-packages/diskimage_builder/elements/centos/root.d/10-centos-cloud-image

#将DIB_CLOUD_IMAGES和BASE_IMAGE_FILE为如下

DIB_CLOUD_IMAGES=${DIB_CLOUD_IMAGES:-https://cloud.centos.org/centos/7/images}


BASE_IMAGE_FILE=${BASE_IMAGE_FILE:-$(head -1 < <(curl -s https://cloud.centos.org/centos/7/images/ | grep -o "CentOS-.*${DIB_FLAVOR}-.*.qcow2" | awk -F'>' '{print $1}'|grep -v qcow2c|tr -d '"'| sort -r))}
  1. yum源问题
 改用aliyun,中途遇到那里yum/dnf install失败就改成aliyun就行
 
  1. 提示 NetworkManager-initscripts-updown 找不到,把这个包改成ifup命令对应的包就行
{
  "family": {
    "redhat": {
      "dhcp-client": "dhclient",
      "ifupdown": "NetworkManager-initscripts-updown",
      "ndisc6": ""
    },
    "gentoo": {
      "dhcp-client": "net-misc/dhcpcd",
      "ndisc6": "net-misc/ndisc6"
    },
    "suse": {
      "dhcp-client": "dhcp-client"
    },
    "debian": {
      "ifupdown": "ifupdown",
      "ndisc6": "ndisc6"
    }
  },
  "default": {
    "dhcp-client": "isc-dhcp-client",
    "ifupdown": "",
    "ndisc6": ""
  }
}
  1. python3.6 好像不支持了,所以我在 60-ironic-python-agent-ramdisk-install 里面把python3.6 源码升级到3.9.5 了

最终成功了,这真的是够费劲的,遇到各种问题,各种改脚本兼容。。。。。。。


http://www.kler.cn/a/561701.html

相关文章:

  • 企业如何通过云计算提高数据的可访问性
  • Siddon算法中对参数值α的解释
  • java给钉钉邮箱发送邮件
  • RK3399 Android7双WiFi功能实现
  • 灵犀互娱游戏测试开发一面面经
  • 音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介
  • GGUF 文件格式全解析
  • Spring Boot 中的日志管理
  • ROS ur10机械臂添加140夹爪全流程记录
  • 20-R 绘图 - 饼图
  • 高中数学基础-统计和概率
  • 在 Mac mini M2 上本地部署 DeepSeek-R1:14B:使用 Ollama 和 Chatbox 的完整指南
  • DeepSeek 提示词:基础结构
  • MQTT实现智能家居------2、写MQTT程序的思路
  • 为什么MySQL选择使用B+树作为索引结构
  • 将 iOS 项目打包并运行到真实的 iPhone 设备
  • 第9章 机器学习与统计模型
  • ubuntu22.04的docker容器中安装ssh服务
  • MFC文件和注册表的操作
  • JAVA进阶自学思维导图