一、環境說明
你需要準備一臺KVM機器,用於製作初始的centos7鏡像。建議最終將ISO鏡像轉爲QCOW2。
二、配置好網絡
ISO鏡像的centos7系統剛裝好,網絡可能不通,所以要檢查網絡。
ping 外網檢測
# ping www.baidu.com
如果未能ping通,請依次檢測ip,route
# vi /etc/sysconfig/network-script/ifcfg-eth0
可以先將dhcp動態分配IP改爲靜態IP
#cgls
#BOOTPROTO=dhcp
BOOTPROTO=static
IPADDR=172.16.5.133
GATEWAY=172.16.1.1
NETMASK=255.255.0.0
ONBOOT=yes
重啓網卡使其生效
# service network restart
檢查路由
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.16.1.1 0.0.0.0 UG 100 0 0 eth0
169.254.169.254 172.16.88.100 255.255.255.255 UGH 100 0 0 eth0
172.16.0.0 0.0.0.0 255.255.0.0 U 100 0 0 eth0
如果你缺失第一個路由,是肯定無法ping通外網的這裏寫代碼片
添加dns
# vim /etc/resolv.conf
nameserver 114.114.114.114
nameserver 8.8.8.8
添加路由
# route add default gw 172.16.1.1
試一下ping百度
# ping www.baidu.com
成功之後我們可以開始下一步操作。
三、安裝相應的包
安裝ACPI服務
這個服務是控制重啓和關閉實例
# yum -y install acpid
# systemctl enable acpid
配置獲取元數據
一個實例必須與元數據服務進行交互任務後再啓動。 例如:必須得到實例 ssh公鑰並運行腳本的用戶數據。 爲了確保實例執行這些任務,推薦安裝一個cloud-init包。
使用cloud-init獲取公鑰,cloud-init包將從元數據服務器和一個帳戶的關鍵的地方自動獲取公鑰 。
安裝cloud-init。
# yum -y install cloud-init
cloud-init通過編輯/etc/cloud/cloud.cfg,對鏡像進行定製。我們現在暫時不修改這個文件,將其他配置弄完再進行定製。
安裝cloud-utils-growpart允許分區調整
# yum -y install cloud-utils-growpart
實例需要訪問元數據服務, 必須禁用默認zeroconf路線。
# echo "NOZEROCONF=yes" >> /etc/sysconfig/network
配置控制檯
如果希望在儀表盤界面查看nova控制檯的日誌,需要做以下配置:
# vi /etc/default/grub
修改GRUB_CMDLINE_LINUX爲以下內容
GRUB_CMDLINE_LINUX="crashkernel=auto console=tty0 console=ttyS0,115200n8"
保存更改
# grub2-mkconfig -o /boot/grub2/grub.cfg
出現以下內容,配置結束。
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-229.14.1.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.14.1.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-229.4.2.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.4.2.el7.x86_64.img
Found linux image: /boot/vmlinuz-3.10.0-229.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-229.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-605f01abef434fb98dd1309e774b72ba
Found initrd image: /boot/initramfs-0-rescue-605f01abef434fb98dd1309e774b72ba.img
done
三、進行定製
修改配置項,修改之前說兩句。
閱讀cloud-init官方文檔,讀幾遍,確保你知道你在配置些什麼,以及這些配置項是如何生效的,模塊頻率是怎樣。
Users and Groups模塊的模塊頻率是每個實例執行一次,也就是說你製作的鏡像起了雲主機之後,再修改這個模塊配置重啓機器是不再生效了。
與Users and Groups模塊的模塊頻率相似的還有Write_files、Set Passwords模塊。
Bootcmd模塊的模塊頻率是每個實例可以執行多次,也就是說,起了雲主機之後,再修改這個模塊配置重啓機器之後也會生效。
與Bootcmd模塊的模塊頻率相似的還有Runcmd。
vi /etc/cloud/cloud.cfg
將locale_configfile: /etc/sysconfig/i18n之前的配置替換爲以下內容。
groups:
- centos
users:
- name: demo
expiredate: 2016-09-01
groups: centos
homedir: /home/bh
lock_passwd: false
passwd: $6$dfdfsdsf$y9obLvZMtAb.uWTIU1OTrZqZImHvCCs01ntDFwO0DnfFxXtgaLq2YoMK6yJ0KjfI260DH0Pv7T6Sj9TXVuUag0
- name: root
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYbA+xgxzm3pySQfW6oh7yr4xYD6n6T/upHuWAdVp/sU2ukeoDU/U6qPBpJuMVRzfaT6pyJEgK7gknaKu/GZxMfnA/9Dt5JJln6PmstWZoWclmxvS7MPCqeL0+ESFvMx64UZFIePbClb5kh1UFggQ5WwDvAIC+1HysI3qGOIZ/RoYUrOHNdgQJzV8xcpWLeDKF2MBNQt/Pyzl+WLxoTN6cd4XlrA9E729t8OwrK5mvTe9CUpWKYELGV6bfqNLGNcUT5LYx9tqyanB4KA1eBC5/9MhBjGeO+EcsQv6zooVJTIAE65XmCEib4WukQcUTr8Td7+6+wMY9463us2OrVVw7
bootcmd:
- echo 123321 >> /root/bootcmd.log
write_files:
- encoding: b64
content: CiMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4...
owner: root:root
path: /etc/sysconfig/cjm
permissions: '0644'
- content: |
# My new /etc/sysconfig/samba file
SMDBOPTIONS="-D"
path: /etc/sysconfig/cgls
runcmd:
- [ sh, -c, sh /root/bootcmd.sh ]
- [ sh, -c, echo "=========hello world'=========" >> /root/runcmd.log ]
ssh_pwauth: yes
chpasswd:
list: |
root:cjm123
expire: False
preserve_hostname: flase
fqdn: qwehost.local
hostname: qwehost
manage_etc_hosts: true
複製過去的時候注意格式問題。
注意格式問題:
1.確定空行一致性,統一以空2格作爲區分。
2.冒號後空一格
3.寫多行需要按照yuml語法編寫
如果格式出了問題,你配置的cloud-init將全部失效。
解釋配置:
1.配置了用戶組
groups:
- centos
2.配置用戶,創建了demo用戶,設置了過期時間,所屬用戶組,用戶目錄,以及是否開啓密碼登錄,併爲其設置了密碼。
爲root用戶,設置了ssh免密碼登錄,附上了公鑰。
密碼是通過加密的產生的,生成命令爲:
# python -c 'import crypt; print crypt.crypt("cgls", "$6$dfdfsdsf")'
在需要免密碼登錄的機器上執行下面命令,產生密鑰對。
# ssh-keygen -t rsa
將公鑰內容複製到配置中。
cat /root/.ssh/id_rsa.pub
users:
- name: demo
expiredate: 2016-09-01
groups: centos
homedir: /home/bh
lock_passwd: false
passwd: $6$dfdfsdsf$y9obLvZMtAb.uWTIU1OTrZqZImHvCCs01ntDFwO0DnfFxXtgaLq2YoMK6yJ0KjfI260DH0Pv7T6Sj9TXVuUag0
- name: root
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYbA+xgxzm3pySQfW6oh7yr4xYD6n6T/upHuWAdVp/sU2ukeoDU/U6qPBpJuMVRzfaT6pyJEgK7gknaKu/GZxMfnA/9Dt5JJln6PmstWZoWclmxvS7MPCqeL0+ESFvMx64UZFIePbClb5kh1UFggQ5WwDvAIC+1HysI3qGOIZ/RoYUrOHNdgQJzV8xcpWLeDKF2MBNQt/Pyzl+WLxoTN6cd4XlrA9E729t8OwrK5mvTe9CUpWKYELGV6bfqNLGNcUT5LYx9tqyanB4KA1eBC5/9MhBjGeO+EcsQv6zooVJTIAE65XmCEib4WukQcUTr8Td7+6+wMY9463us2OrVVw7
3.Bootcmd只用於在引導過程之後不能做的時候再使用
bootcmd:
- echo 123321 >> /root/bootcmd.log
4.寫文件,第一個是加密之後的內容,第二個是正常內容。
write_files:
- encoding: b64
content: CiMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4...
owner: root:root
path: /etc/sysconfig/cjm
permissions: '0644'
- content: |
# My new /etc/sysconfig/samba file
SMDBOPTIONS="-D"
path: /etc/sysconfig/cgls
5.與bootcmd類似,可在引導之後使用
runcmd:
- [ sh, -c, sh /root/bootcmd.sh ]
- [ sh, -c, echo "=========hello world'=========" >> /root/runcmd.log ]
6.設置root用戶密碼
ssh_pwauth: yes
chpasswd:
list: |
root:cjm123
expire: False
最後就是修改靜態IP爲dhcp動態獲取了
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
#cgls
BOOTPROTO=dhcp
#BOOTPROTO=static
#IPADDR=172.16.5.133
#GATEWAY=172.16.1.1
#NETMASK=255.255.0.0
ONBOOT=yes
關機
# poweroff
四、開啓雲主機
上傳鏡像到openstack上
# openstack image create "centos7_init" --file centos7.0-3.qcow2 --disk-format qcow2 --container-format bare --public
控制檯界面中自己開啓雲主機,可以看到自己定製的centos7有沒有成功了。