https://cloud-images.ubuntu.com/bionic/current/
(dib-env) [root@bogon dib-env]# DIB_RELEASE=bionic disk-image-create vm ubuntu baremetal dhcp-all-interfaces devuser -o ubuntu cloud-init-datasources cloud-init disable-selinux -a x86_64
2020-07-14 06:51:42.812 | Could not open /root/.cache/image-create/bionic-server-cloudimg-x86_64.squashfs, because No such file or directory 2020-07-14 06:51:43.533 | INFO diskimage_builder.block_device.blockdevice [-] State already cleaned - no way to do anything here (dib-env) [root@bogon dib-env]#
export ELEMENTS_PATH=./builder/ironic-python-agent-builder/dib/ export DIB_DEV_USER_USERNAME=devuser export DIB_DEV_USER_PASSWORD=cloud_123. export DIB_DEV_USER_PWDLESS_SUDO=YES export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive, OpenStack,Ec2" #disk-image-create vm centos7 baremetal dhcp-all-interfaces devuser -o centos7 cloud-init-datasources cloud-init disable-selinux -a x86_64
DIB_RELEASE=bionic disk-image-create vm ubuntu baremetal dhcp-all-interfaces devuser -o ubuntu cloud-init-datasources cloud-init disable-selinux -a amd64
(dib-env) root@zj-x86:/data# find ./ -name ironic-python-agent-builder ./dib-env/bin/ironic-python-agent-builder ./dib-env/share/ironic-python-agent-builder (dib-env) root@zj-x86:/data# ls ./dib-env/bin/ironic-python-agent-builder ./dib-env/bin/ironic-python-agent-builder (dib-env) root@zj-x86:/data# ls ./dib-env/share/ironic-python-agent-builder/dib/ ironic-python-agent-ramdisk (dib-env) root@zj-x86:/data#
(dib-env) root@zj-x86:/data# ls ./dib-env/share/ironic-python-agent-builder/dib/ironic-python-agent-ramdisk/ cleanup.d environment.d package-installs.yaml README.rst static element-deps extra-data.d pkg-map source-repository-ironic-python-agent svc-map element-provides install.d post-install.d source-repository-requirements test-elements (dib-env) root@zj-x86:/data#
2020-07-14 08:09:17.395 | + source /tmp/in_target.d/post-install.d/../environment.d/99-dib-init-system 2020-07-14 08:09:17.395 | ++ '[' -z systemd ']' 2020-07-14 08:09:17.396 | ++ case $DIB_INIT_SYSTEM in 2020-07-14 08:09:17.396 | dib-run-parts Running /tmp/in_target.d/post-install.d/00-package-installs 2020-07-14 08:09:17.451 | Nothing to install 2020-07-14 08:09:17.458 | dib-run-parts 00-package-installs completed 2020-07-14 08:09:17.458 | dib-run-parts Running /tmp/in_target.d/post-install.d/10-enable-init-scripts 2020-07-14 08:09:17.464 | dib-run-parts 10-enable-init-scripts completed 2020-07-14 08:09:17.464 | dib-run-parts Running /tmp/in_target.d/post-install.d/15-disable-selinux 2020-07-14 08:09:17.482 | Unmount /tmp/dib_build.XEGeNBqK/mnt/var/cache/apt/archives 2020-07-14 08:09:17.494 | Unmount /tmp/dib_build.XEGeNBqK/mnt/tmp/in_target.d 2020-07-14 08:09:17.504 | Unmount /tmp/dib_build.XEGeNBqK/mnt/sys 2020-07-14 08:09:17.511 | Unmount /tmp/dib_build.XEGeNBqK/mnt/proc 2020-07-14 08:09:17.520 | Unmount /tmp/dib_build.XEGeNBqK/mnt/dev/pts 2020-07-14 08:09:17.530 | Unmount /tmp/dib_build.XEGeNBqK/mnt/dev 2020-07-14 08:09:17.784 | INFO diskimage_builder.block_device.blockdevice [-] State already cleaned - no way to do anything here
原理是这条命令有问题:
DIB_RELEASE=bionic disk-image-create vm ubuntu baremetal dhcp-all-interfaces devuser -o ubuntu cloud-init-datasources cloud-init disable-selinux -a amd64
打开日志
env DIB_RELEASE=bionic DIB_DEBUG_TRACE=1 disk-image-create vm ubuntu baremetal dhcp-all-interfaces devuser -o ubuntu cloud-init-datasources cloud-init disable-selinux block-device-mbr -a amd64
发现
+ config=/etc/selinux/config 2020-07-14 08:26:29.185 | + '[' -e /etc/selinux/config ']' 2020-07-14 08:26:29.192 | ++ diskimage_builder/lib/img-functions:run_in_target:60 : check_break after-error run_in_target bash
不能去disable-selinux
env DIB_RELEASE=bionic DIB_DEBUG_TRACE=1 disk-image-create vm ubuntu baremetal dhcp-all-interfaces devuser -o ubuntu cloud-init-datasources cloud-init -a amd64
The actual setup What diskimage-builder actually does is take elements and run them. Each elements consists of a set of phases where the element takes actions. All you are really doing is defining the elements and they will insert themselves where needed. It also uses environment variables for tunables, or for other various small tweaks. This is how I build the images at http://distfiles.gentoo.org/experimental/amd64/openstack/ export GENTOO_PORTAGE_CLEANUP=True export DIB_INSTALLTYPE_pip_and_virtualenv=package export DIB_INSTALLTYPE_simple_init=repo export GENTOO_PYTHON_TARGETS="python3_6" export GENTOO_PYTHON_ACTIVE_VERSION="python3.6" export ELEMENTS="gentoo simple-init growroot vm openssh-server block-device-mbr" export COMMAND="disk-image-create -a amd64 -t qcow2 --image-size 3" export DATE="$(date -u +%Y%m%d)" GENTOO_PROFILE=default/linux/amd64/17.0/no-multilib/hardened ${COMMAND} -o "gentoo-openstack-amd64-hardened-nomultilib-${DATE}" ${ELEMENTS} GENTOO_PROFILE=default/linux/amd64/17.0/no-multilib ${COMMAND} -o "gentoo-openstack-amd64-default-nomultilib-${DATE}" ${ELEMENTS} GENTOO_PROFILE=default/linux/amd64/17.0/hardened ${COMMAND} -o "gentoo-openstack-amd64-hardened-${DATE}" ${ELEMENTS} GENTOO_PROFILE=default/linux/amd64/17.0/systemd ${COMMAND} -o "gentoo-openstack-amd64-systemd-${DATE}" ${ELEMENTS} ${COMMAND} -o "gentoo-openstack-amd64-default-${DATE}" ${ELEMENTS} For musl I've had to do some custom work as I have to build the stage4s locally, but it's largely the same (with the additional need to define a musl overlay. cd ~/diskimage-builder cp ~/10-gentoo-image.musl diskimage_builder/elements/gentoo/root.d/10-gentoo-image pip install -U . cd ~/ export GENTOO_PORTAGE_CLEANUP=False export DIB_INSTALLTYPE_pip_and_virtualenv=package export DIB_INSTALLTYPE_simple_init=repo export GENTOO_PYTHON_TARGETS="python3_6" export GENTOO_PYTHON_ACTIVE_VERSION="python3.6" DATE="$(date +%Y%m%d)" export GENTOO_OVERLAYS="musl" export GENTOO_PROFILE=default/linux/amd64/17.0/musl/hardened disk-image-create -a amd64 -t qcow2 --image-size 3 -o gentoo-openstack-amd64-hardened-musl-"${DATE}" gentoo simple-init growroot vm cd ~/diskimage-builder git checkout diskimage_builder/elements/gentoo/root.d/10-gentoo-image pip install -U . cd ~/