openstack镜像制作

introduction

整理 openstack 镜像制作过程

直接修改官方镜像

常用 linux 官方提供 cloud 镜像,可以直接基于其镜像修改,以 ubuntu16.04 为例

下载 ubuntu16.04 cloud image

1
axel -n 2 https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-disk1.img

使用 guestfish,安装环境

1
sudo apt install libguestfs-tools -y

启动镜像

1
export LIBGUESTFS_BACKEND=direct
guestfish –rw -a ./xenial-server-cloudimg-amd64-disk1.img #实际上启动了一 qemu 虚拟机

进入了 guestfish

1
><fs> run
><fs> list-filesystems
><fs> mount /dev/sda1 /
><fs> vi /etc/cloud/cloud.cfg

接下来修改 cloudinit 来达到新建用户的目的,/etc/cloud/cloud.cfg

1
users:
 - default
..

ssh_pwauth: true
manage_etc_hosts: true
..
cloud_init_modules:
..
 - ssh
 - bootcmd

bootcmd:
 - addgroup test
 - usermod -d /home/test -m -g test -l test ubuntu
 - echo "test\ntest" | passwd test

最后退出,转换格式为 raw 并上传

1
><fs> exit
qemu-img convert -O raw xenial-server-cloudimg-amd64-disk1.img xenial-server-cloudimg-amd64-disk1.raw
openstack image create –disk-format raw –container-format bare –public –file ./xenial-server-cloudimg-amd64-disk1.raw xenial-server-cloudimg-amd64-disk1.raw

手动创建 image

TODO

使用工具制作 image

TODO

使用 snapshot 制作 image

创建一个云主机

1
# nova list
+————————————–|—————-|———|————|————-|—————————————–+
| ID | Name | Status | Task State | Power State | Networks |
+————————————–|—————-|———|————|————-|—————————————–+
| 550db3bb-bd47-4b5b-8a1d-ed465d147618 | centos-tempate | ACTIVE | - | Running | demo-net=10.0.0.24 |
+————————————–|—————-|———|————|————-|—————————————–+

安装需要的软件

到云主机安装需要的软件配置等

清理系统

清理系统不需要文件和空洞

1
# rm -f ~/.ssh/id_rsa
# rm -f /home/centos/.ssh/id_rsa
# sudo rm -rf /var/lib/cloud/*
# dd if=/dev/zero of=zerofile # 花费的时间较长,建议创建虚拟机的时候磁盘不要太大
dd: writing to ‘zerofile’: No space left on device
30952873+0 records in
30952872+0 records out
15847870464 bytes (16 GB) copied, 548.355 s, 28.9 MB/s
# rm zerofile

关机

关机后保证云主机状态是 shutdown

创建 share image

从云主机的卷创建 image

1
# openstack volume set –state available e0d90bde-6f16-4ef5-ad96-40163c1deabe
# openstack image create new-centos-image –volume e0d90bde-6f16-4ef5-ad96-40163c1deabe
# openstack volume set –state in-use e0d90bde-6f16-4ef5-ad96-40163c1deabe

下载 share image 并转换

1
# openstack image save –file new-centos-image.raw a029c88b-3c4b-4ccf-a927-4b6da7c389a6
# openstack image delete a029c88b-3c4b-4ccf-a927-4b6da7c389a6

删除 tmp 资源

删除云主机、tmp volume、tmp image

1
# openstack volume server centos-tempate
# openstack image delete a029c88b-3c4b-4ccf-a927-4b6da7c389a6

上传 images

1
# openstack image create \
–disk-format raw \
–container-format bare \
–property skip_atmosphere=yes \
–file new-centos-image.raw \
–public new-centos-image

制作 windows image

创建磁盘

1
qemu-img create -f qcow2 win7.qcow2 20G

启动并安装系统

1
/usr/libexec/qemu-kvm -m 1024 -cdrom win7.iso -drive file=win7.qcow2,if=virtio,boot=on -fda virtio-win_amd64.vfd -boot d -nographic -vnc :3

使用 vnc 连接进入安装系统界面,安装 virtio 磁盘驱动并安装系统

1
vncviewer 127.0.01:5903

安装完成后关机

配置系统

1
/usr/libexec/qemu-kvm -m 1024 -cdrom virtio-win.iso -drive file=win7.qcow2,if=virtio,boot=on -fda virtio-win_amd64.vfd -net nic,model=virtio -net user -boot c -nographic -vnc :3

使用 vnc 连接进入安装系统

  • 设备管理器安装 virtio 网络驱动
  • 系统高级设置打开远程连接
  • 下载 cloudbase-init 并安装(密码设置插件、磁盘自动分区等功能)

配置完成后关机

转换格式

1
qemu-img convert -f qcow2 -O raw win7.qcow2 win7.raw

image tools

直接操作 image,例如本地挂载

TODO

convert format

1
# qemu-img convert -f raw -O qcow2 image.img image.qcow2

FAQ

TODO

reference