![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
root阶段 创建或修改初始根文件系统内容。 这是添加替代分销支持的地方,还是建立在现有图像上的自定义。 只有一个元素可以一次使用它,除非特别注意不要盲目覆盖,而是适应其他元素提取的上下文。 10-cache-ubuntu-tarball 检查cache文件夹(一个用于存放临时文件的文件夹)是否已经挂载,如果没有挂载,创建cache文件夹和挂载点,并且将其挂载到镜像build的目录下 10-cache-ubuntu-tarball 下载镜像 50-build-with-http-cache 这个脚本属于dpkg,它的作用就是如果配置了代理,就将Acquire::http::Proxy “$http_proxy”;写入配置文件中 60-block-apt-translations 配置apt不获取 translations files 90-base-dib-run-parts 这个脚本的作用是将dib-run-parts放到镜像的bin目录下 99-block-daemons 这个脚本的作用是防止很多进程和服务自动启动 99-shared_apt_cache 这个脚本的作用就是创建了一个apt_cache_dir目录用于cacheapt的包,然后把这个目录挂载到了镜像下的目录 99-trim-dpkg 这个脚本配为dpkg配置了force-unsafe-io和无语言,主要是dpkg的配置. extra-data阶段 extra-data阶段的工作是将一些数据拷贝到镜像中备用 01-copy-apt-keys 这个脚本属于dpkg element 它的作用是拷贝apt-keys到 tmp/apt_keys目录下 10-create-pkg-map-dir 这个脚本属于pkg-map element 它的作用是把每个元素中的pkg-map文件拷贝到 /user/share/pkg-map/$元素目录下 20-manifest-dir 这个脚本属于manifests element 它的作用是创建了一个用于存放manifest文件的文件夹 50-store-build-settings* 这个脚本属于base element 它作用是把环境变量写到了钩子文件夹下的文件中 99-enable-install-types 这个脚本属于install-types element 它的作用是让安装的软件可以有不同的类型,例如git,pip等 在脚本中,建立了正确的安装类型的软链接 如果没有指定安装的类型,就用默认的方式安装 99-squash-package-install 在elements/package-installs/bin下的package-installs-squash中说这个脚本的作用是把所有的安装包的文件汇总到一个文件中 pre-install阶段 00-disable-apt-recommends 这个脚本对apt进行了配置 00-remove-apt-xapian-index 这个脚本卸载了 apt-xapian-index 按照脚本中的说法,原因是这个包有问题,在更新的时候会导致出错 00-remove-grub 这个脚本暂时卸载了grub 因为在chroot的时候,没有块设备的存在,所以grub的安装钩子会报错. 所以暂时移除grub,来避免冲突 01-dib-python 这个脚本建立了dib-python的软连接到系统中的python 01-install-bin 将diskimage-builder的bin目录下的内容拷贝到了镜像内 01-set-ubuntu-mirror 这个脚本配置了ubuntu的apt源 02-add-apt-keys 这个脚本将之前配置的apt的key用apt-key add xxx命令配置 02-package-installs 这个脚本从/tmp/in_target.d/pre-install.d和package-installs.json获取了安装的信息,来判断现在这个阶段是否要进行安装. 03-baseline-tools 这个脚本安装了一些python的基本包 04-dib-init-system 这个脚本将dib-init-system这个脚本拷贝到了镜像系统的/usr/bin目录下 dib-init-system脚本用于判断系统的init的类型: 99-apt-get-update 这个脚本中apt-get进行更新 99-package-uninstalls 这个脚本和之前的package-install是同一个套路,只不过反过来了. install 阶段 install阶段应该是最主要的一个解决,在这里会对镜像进行具体的软件的安装,按照需求安装一些包. 00-baseline-environment 这里的install-packages -m 的-m是mapper.这里通过mapper的方式来对系统和包进行了解耦. install-packages -m 通过iscsi_package和现在对应的操作系统,就能找到具体要安装的包的名字 00-up-to-date 调用的方法是相同的,这里也是一层解耦的封装 01-package-installs 99-package-uninstalls 这个元素会在extra-data install post-install和pre-install根据配置文件对包进行安装和删除. 05-set-cloud-init-sources DIB_CLOUD_INIT_DATASOURCES的值是Ec2,这里把这个参数写到了cloud-init的配置文件中 10-cloud-init 配置了manage_etc_host这个选项 20-install-init-scripts 把希望开机启动的脚本拷贝到了对应的位置让他们发挥作用 50-store-build-settings 保存了创建dib的参数 80-disable-rfc3041 禁止ipv6 99-autoremove apt-get -y autoremove post-install阶段 post-install阶段做一下安装的收尾工作,同样,它也是在chroot下运行的 00-package-installs和95-package-uninstalls在之前已经说明过作用了 10-enable-init-scripts 如果初始化是openrc的方式,需要执行一下rc-update 97-dkms dkms 是指 Dynamic Kernel Module Support. Fedora和Ubuntu支持DKMS run_d_in_target finalise 50-bootloader 这个脚本的作用是安装bootloader 目前的bootloader主要有两种,extlinux和grub2 这个脚本的作用是一个通用的bootloader安装的程序, 在dib支持的所用linux发行版都可以用这个脚本来安装bootloader 50-remove-bogus-udev-links 这是为了解决opensuse的一个bug 99-clean-up-cache 清除缓存 99-write-dpkg-manifest 把安装的包写到了manifest文件中 https://www.youtube.com/watch?v=Nq6idDU2Mn4 export DISTRO_NAME=centos export DIB_RELEASE=6.5 export ELEMENTS_PATH=/root/yjfwk/.octavia_dev/lib/python2.7/site-packages/diskimage_builder/elements export DISTRO_NAME=centos7 export DIB_RELEASE=GenericCloud-1503 export DIB_CLOUD_INIT_DATASOURCES="OpenStack,ConfigDrive,Ec2" export DIB_CLOUD_IMAGES=CentOS-7-x86_64-GenericCloud-1503.qcow2 disk-image-create vm debian -p qemu-guest-agent >>debian1.txt 2>&1 disk-image-create ubuntu vm -0 rain5 -t raw >> rain5.txt 2>&1 wget http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-OracleCloud.raw.tar.gz file test.raw fdisk -l test.raw kpartx -a test.raw losetup -a dd if=/dev/mapper/loop0p1 of=test.xfs.raw bs=1M mkdir /tmp/mnt mount test.raw /tmp/mnt chroot /tmp/mnt /bin/bash echo nameserver 114.114.114.114 > /etc/resolv.conf rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm yum install https://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm yum install puppet yum install ntpdate lsof vi /etc/selinux/config disabled openstack windows image creation newbie http://cloud.centos.org/centos/7/images/