制作CentOS7.3的OpenStack镜像
来源:互联网 发布:淘宝客如何建站 编辑:程序博客网 时间:2024/05/16 10:26
OS : CentOS Linux release 7.3.1611 (Core)
KVM version: qemu-kvm-1.5.3
镜像运行环境: OpenStack Mitaka:
本文不去介绍,如何下载iso文件,也不介绍如何安装虚拟机,不过这里给大家一个提示吧,安装的kvm虚拟机,分区最好是 /boot采用 基本分区其他的分区采用lvm的类型
阐述: 本文修改云主机密码的方式为 metadata 注入方式;其原理是在 云主机内部编写一个 重置密码的脚本,达到重置密码的效果;
该脚本会去查找 “http://169.254.169.254/openstack/latest/meta_data.json” 这个地址的值,只要changePasswd 的值为True,才会去修改密码;
了解到前台传值,changePasswd=True的状态至少会保留1分钟,而我的脚本却是一直循环着(达到立马修改密码的效果),所以,这个密码至少会被修改20次,虽然密码一直是那个值,但是在系统里确实是已经被修改了好多次,为了排除这种问题,所以下面脚本重置密码的情况是,当changePasswd=False并且 当changePasswd=True的状态时,才会去修改密码;(你没有看错,就是这样),具体请看下面的脚本
初始密码的设置: 在openstack 控制节点 执行:
nova meta 云主机id 或者 主机名称 set changePasswd=True admin_pass=密码
实例:
nova meta 17d96745-63a7-4401-87de-f34ca418a5e6 set changePasswd=True admin_pass=Admin@
下面开始操作
一、配置网卡的配置,保留主要的就ok,把那些些uuid的配置项都删除,比如下边的内容都应该保留下来
001_修改网卡的配置文件,修改为精简型的网卡配置文件
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
TYPE=Ethernet
ONBOOT=yes
这里写eth1 是为了云主机对应两个网卡做的,如果能确保以后只用一个网卡的,可以不用写eth1;
但是现在的趋势都是设置的两个网络,一个作为内网,一个作为外网
vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=dhcp
TYPE=Ethernet
ONBOOT=yes
002_重新启动网络配置
systemctl restart network.service
二、安装一些自己需要的工具
000_添加自己的内部源,没有的同学,跳过此步骤即可;
001_这里我只安装 cloud-init 、acpid 和 jq
acpid服务作用:重新引导或关闭实例
jq 服务作用:处理json数据
cloud-init服务作用: 配置使用metadata(我把官网的简绍截一下图)
chkconfig acpid on
chkconfig cloud-init on
echo "NOZEROCONF=yes" >> /etc/sysconfig/network
002_修改内核参数,并更新内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
003_修改cloud.cfg配置文件 这里,就直接把需要修改的地方用 红色字体标注出来啦,当然也会把 替换的命令贴出来
sed -i 's/ssh_pwauth: 0/ssh_pwauth: 1/g' /etc/cloud/cloud.cfg
sed -i 's/name: centos/name: root/g' /etc/cloud/cloud.cfg
下面编辑 cloud.cfg 部分仅供参考
vim /etc/cloud/cloud.cfg
users:
- default
disable_root: 0
ssh_pwauth: 1
locale_configfile: /etc/sysconfig/i18n
mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2']
resize_rootfs_tmp: /dev
ssh_deletekeys: 0
ssh_genkeytypes: ~
syslog_fix_perms: ~
cloud_init_modules:
- migrator
- bootcmd
- write-files
- growpart
- resizefs
- set_hostname
- update_hostname
- update_etc_hosts
- rsyslog
- users-groups
- ssh
cloud_config_modules:
- mounts
- locale
- set-passwords
- yum-add-repo
- package-update-upgrade-install
- timezone
- puppet
- chef
- salt-minion
- mcollective
- disable-ec2-metadata
- runcmd
cloud_final_modules:
- rightscale_userdata
- scripts-per-once
- scripts-per-boot
- scripts-per-instance
- scripts-user
- ssh-authkey-fingerprints
- keys-to-console
- phone-home
- final-message
system_info:
default_user:
name: root
lock_passwd: true
gecos: Cloud User
groups: [wheel, adm, systemd-journal]
sudo: ["ALL=(ALL) NOPASSWD:ALL"]
shell: /bin/bash
distro: rhel
paths:
cloud_dir: /var/lib/cloud
templates_dir: /etc/cloud/templates
ssh_svcname: sshd
# vim:syntax=yaml
004_添加修改、重置密码的脚本(这些操作均由下面的脚本一键执行添加)
将下面的内容复制到一个文件,并赋予执行的权限即可 自动添加写好的服务脚本,并且自己添加为开机启动,还会把 /sbin 对应的文件加密
vim meta_centos73.sh
cat > /etc/init.d/meta_data_service << END
#!/usr/bin/bash
#
# meta_data_service Start up meta_data_service the server daemon
#
# chkconfig: 2345 98 98
# description: meta_data_service sspaas-cloud daemon
#
BASE_DIR=/sbin
ARGV="\$@"
start()
{
echo "START meta_data SERVERS"
\$BASE_DIR/meta_data > /dev/null 2>&1 &
}
stop()
{
#meta_data.pid
echo "STOP meta_data SERVERS"
meta_datapid=\`ps -ef|grep meta_data|grep -v grep|awk '{ print\$2 }'\`
for i in \$meta_datapid
do
kill -9 \$meta_datapid
done
}
case \$ARGV in
start)
start
ERROR=\$?
;;
stop)
stop
ERROR=\$?
;;
restart)
stop
start
ERROR=\$?
;;
*)
echo "meta_data [start|restart|stop]"
esac
exit \$ERROR
END
cat > /etc/init.d/meta_network_service << END
#!/usr/bin/bash
#
# meta_network_service Start up meta_network_service the server daemon
#
# chkconfig: 2345 99 99
# description: meta_network_service sspaas-cloud daemon
#
BASE_DIR=/sbin
ARGV="\$@"
start()
{
echo "START meta_data SERVERS"
\$BASE_DIR/meta_network > /dev/null 2>&1 &
}
stop()
{
#meta_data.pid
echo "STOP meta_data SERVERS"
meta_networkpid=\`ps -ef|grep meta_network|grep -v grep|awk '{ print\$2 }'\`
for i in \$meta_networkpid
do
kill -9 \$meta_networkpid
done
}
case \$ARGV in
start)
start
ERROR=\$?
;;
stop)
stop
ERROR=\$?
;;
restart)
stop
start
ERROR=\$?
;;
*)
echo "meta_network [start|restart|stop]"
esac
exit \$ERROR
END
cat > /sbin/meta_data << END
#!/usr/bin/bash
m=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta'\`
status=\`echo \$m | jq '.changePasswd' | sed 's/"//g'\`
password=\`echo \$m | jq '.admin_pass' | sed 's/"//g'\`
if [ \$status == True ];then
echo root:\$password | chpasswd
fi
while true
do
m1=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta' | jq '.changePasswd' | sed 's/"//g'\`
sleep 3
m2=\`curl http://169.254.169.254/openstack/latest/meta_data.json | jq '.meta'\`
changepw=\`echo \$m2 | jq '.changePasswd' | sed 's/"//g'\`
pass=\`echo \$m2 | jq '.admin_pass' | sed 's/"//g'\`
if [ \$m1 == False ] && [ \$changepw == True ];then
echo root:\$pass | chpasswd
else
echo "noting to do" >/dev/null
fi
done
END
cat > /sbin/meta_network << END
#!/usr/bin/bash
while true
do
temp=\`ifconfig eth0 | grep broadcast | awk '{ print \$2 }' | awk -F "." 'BEGIN{ OFS="." }{ print \$1,\$2,\$3 }'\`
ip0=\`ip a | grep eth0: | wc -l\`
ip1=\`ip a | grep eth1: | wc -l\`
route0=\`route -n | grep "^0.0.0.0" | grep \$temp.254 |wc -l\`
if [ \$ip0 -eq 1 ] && [ \$ip1 -eq 1 ] && [ \$route0 -eq 1 ];then
route del default gw \$temp.254
elif [ \$ip0 -eq 1 ] && [ \$ip1 -eq 0 ] && [ \$route0 -eq 0 ];then
route add default gw \$temp.254
fi
sleep 3
done
END
chmod +x /sbin/meta_data
chmod +x /sbin/meta_network
chmod +x /etc/init.d/meta_data_service
chmod +x /etc/init.d/meta_network_service
#
gzexe /sbin/meta_data
rm -f /sbin/meta_data~
gzexe /sbin/meta_network
rm -f /sbin/meta_network~
#
chkconfig --add meta_data_service
chkconfig --add meta_network_service
下面 005 的操作仅仅用作删除上面meta_centos73.sh 的执行结果
005_删除上面脚本添加的内容,可以执行下面的操作
chkconfig --del meta_network_service
rm -f /sbin/meta_data
rm -f /sbin/meta_network
rm -f /etc/init.d/meta_data_service
rm -f /etc/init.d/meta_network_service
006_删除之前添加的不必要的信息
rm -f meta_centos73.sh
007_关机即可
poweroff
到这里 openstack 的centos7.3镜像就做完成啦
下面的操作,主要是吧 大的镜像进行压缩,并进行上传,下面的操作均在做镜像的服务器(宿主机)上操作
三、技能扩展:
001_显示kvm中所有虚拟机
virsh list --all
002_执行清理任务,如,之前的历史命令,mac地址,ip地址等
virt-sysprep -d CentOS7
003_在kvm中删除虚拟机,仅仅删除xml文件,不会删除镜像文件
virsh undefine CentOS7
004_将镜像压缩
qemu-img convert -c -O qcow2 压缩之前的路径+名字 压缩之后的路径+名字
参考博文:https://docs.openstack.org/image-guide/centos-image.html
参考博文:http://www.cnblogs.com/CLTANG/p/4332612.html
阅读全文
0 0
- 制作CentOS7.3的OpenStack镜像
- 制作OpenSUSE12.3的OpenStack镜像
- OpenStack镜像的制作
- openstack使用2——制作centos7镜像
- 手动制作openstack、libvirt上的centos7镜像(存储使用qcow2)
- openstack 镜像制作
- Openstack镜像制作
- Openstack镜像制作
- openstack 镜像制作
- openstack镜像制作
- openstack镜像制作
- Openstack镜像制作
- openstack的windows镜像制作过程
- 制作openstack使用的Ubuntu镜像
- OpenStack镜像制作要考虑的
- 制作CentOS6.9的OpenStack镜像
- 制作OpenSUSE13.2的openstack镜像
- openstack 制作ubuntu镜像
- java虚拟机研究
- Java.lang.OutOfMemoryError: PermGen space解决办法
- IT基础32
- 一次有趣的现象
- openlayers基础系列教程(一)
- 制作CentOS7.3的OpenStack镜像
- IT基础32
- 05-树9 Huffman Codes (30分)
- IT基础33
- 使用Sqoop从MySQL导入数据到Hive和HBase
- tuple用例
- IT基础35
- IT基础34
- [python]记录Windows下安装matplot的经历