linux centos openstack shell一键安装脚本

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: openstack 是创建虚拟机的架构平台
#!/bin/bash
selinux=`cat /etc/selinux/config | grep "SELINUX=" | awk -F"=" 'NR==2{print $2}'`
if [ $selinux != "disabled" ]
then
echo "正在为您关闭selinux 并重新启动系统,重启后重新执行本脚本"
sed -i "s/SELINUX\=.*/SELINUX\=disabled/g" /etc/selinux/config
reboot
else
echo "selinux 已经关闭,可以执行脚本"
fi
yum install centos-release-openstack-stein -y 
yum install python-openstackclient openstack-selinux -y
yum clean all
yum list
 nodeipx=                                       # 允许node网段同步时间,ip前两位,例如:xxx.xxx
etc=$(ip a | grep -w "BROADCAST" | awk -F ":" 'NR==1{print $2}')
                                                        # 过滤网卡名
                                                        # BROADCAST [ˈbrɔdˌkæst]  广播,是外网卡
ip=$(ip a | grep -w $etc | awk -F" " 'NR==2{print $2}' )
                                                        # 用外网卡名字找改行信息,打印第二行第二列
echo " 
$ip  linux-node1.openstack  
" >> /etc/hosts 
sed -i  "s/\/24//g" /etc/hosts          # 将尾巴  /24  替换为空格
                                                        # -g  特殊字符转义,  \  特殊字符转译符号,将符号 /  转译 不被识别
                                                # 关闭 iptables
systemctl start firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
yum install -y chrony 
echo "
allow $nodeipx/16
" >> /etc/chrony.conf           #  允许网段同步时间
systemctl enable chronyd.service 
systemctl start chronyd.service
timedatectl set-timezone Asia/Shanghai  
timedatectl status
                                                # 设置同步时间和时区
#Base
yum install -y http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
yum install -y centos-release-openstack-liberty
yum install -y python-openstackclient
##MySQL
yum install -y mariadb mariadb-server MySQL-python
##RabbitMQ
yum install -y rabbitmq-server
##Keystone
yum install -y openstack-keystone httpd mod_wsgi memcached python-memcached
##Glance
yum install -y openstack-glance python-glance python-glanceclient
##Nova
yum install -y openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient
##Neutron linux-node1.example.com
yum install -y openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge python-neutronclient ebtables ipset
##Dashboard
yum install -y openstack-dashboard
##Cinder
yum install -y openstack-cinder python-cinderclient
cp /usr/share/mysql/my-medium.cnf /etc/my.cnf   
 systemctl enable mariadb.service 
 ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service'
mysql_install_db --datadir="/var/lib/mysql" --user="mysql" 
                                                # 初始化数据库
systemctl start mariadb.service
#################################################################
mysql -e "set password = password('eisccn');"
                                                # mysql 初始没有密码, 直接mysql 进入数据库。-e 是脚本模式,然后设置面登密码为eisccn
##  ====创建数据库开始====
mysql -uroot -peisccn -e "
drop database if exists keystone;
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
drop database if exists glance;
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'glance';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance';
drop database if exists nova;
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'nova';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova';
drop database if exists neutron;
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';
drop database if exists cinder;
CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'cinder';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinder';
flush privileges;
show databases;
"
#####################   创建数据库结束   ######################
systemctl enable rabbitmq-server.service
ln -s '/usr/lib/systemd/system/rabbitmq-server.service' '/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service'
 systemctl start rabbitmq-server.service
 rabbitmqctl add_user openstack openstack   
rabbitmqctl set_permissions openstack ".*" ".*" ".*"  
rabbitmq-plugins list  
rabbitmq-plugins enable rabbitmq_management             #启动插件
 systemctl restart rabbitmq-server.service
yum install -y lsof
lsof -i:15672
################
#获取主机IP地址
eth=$(ip a| grep "BROADCAST" | awk -F ":" 'NR==1{print $2}' | sed "s/ //g") ; echo "网卡名为:"$eth ;
                                                                                # 命令 ip a 查看网卡 过滤;BROADCAST  [ˈbrɔːdkɑːst] >广播;字段的行
                                                                                # awk -F ":" 以冒号为分隔符 ; 选择第一行,第二列,sed删空格
                                                                                # 符号  ; 分号表示第一条命令结束,第二条开始
ethCatalog=$(find / -name "*$eth" | grep "/etc/" | sed "s/ //g" ) ;  echo "网卡路径为: "  $ethCatalog
                                                                                # find 查找网卡名称的路径,grep 过滤/etc 目录下网卡名称。sed删除空格
ip=$(cat $ethCatalog | grep IPADDR | awk -F "=" 'NR==1{print $2}' | sed "s/ //g") ; echo "IP地址为: " $ip
                                                                                # 查看网卡文件,过滤IPADDR的行,awk -F"=" 分隔符是等于符号,打印第一行第二列
################
echo "
guest 登陆:http://$ip:15672
初始登陆密码:guest/guest
登陆后,点击: 导航栏的 Admin --- openstack --- 展开 Update this user 
写入密码 eisccn  确认密码eisccn  再输入管理权限用户组  administrator ; 点击 Update User 更新账户信息
之后退出使用 openstack 账户登录,账户/密码:openstack/eisccn
完成后,请确认继续搭建环境:
"
read -p "您是否已经登陆配置修改新账户;接下来安装 openstack组件!!!!!!!!
                                y|继续          任意键退出
" openstack
echo $openstack
case "$openstack" in 
y|Y) echo "您确认了继续操作";;
*)echo "您否定了继续操作,退出脚本;  case 的其他所有情况 * 号  不加双引号"
exit;;
esac
######################    获取行号,并插入内容  ################################
# 查一行,插一行,不然行号会变;  \n 换行
Random=`openssl rand -hex 10` ; echo " Random [ˈrændəm] 随机,生成10位随机数: $Random"
file="cat /etc/keystone/keystone.conf " ; echo $file
NRDEFAULT=`cat -n $file | grep "\[DEFAULT\]" | awk -F" " 'NR==1{print $1}'` ; echo $NRDEFAULT
                                                                        # 查找标签:[DEFAULT] 所在行,将print $1  改为 print $0 为打印第一行中的所有列信息
sed -i "$NRDEFAULT a\admin_token = $Random \nverbose = true" $file
                                                                        # $NRDEFAULT 是指定第一行   a\ 的下面插入字符串, \n 是换行符号
NRdatabase=`cat -n $file | grep "\[database\]" | awk -F" " 'NR==1{print $1}'` ; echo $NRdatabase
echo "写入IP地址 $ip"
sed -i "$NRdatabase a\connection = mysql://keystone:keystone@127.0.0.1/keystone" $file
                                                                        # 设置数据库连接 写到database下
NRmemcache=`cat -n $file | grep "\[memcache\]" | awk -F" " 'NR==1{print $1}'` ; echo $NRmemcache
sed -i "$NRmemcache a\servers = $ip:11211" $file
NRrevoke=`cat -n $file | grep "\[revoke\]" | awk -F" " 'NR==1{print $1}'` ; echo $NRrevoke
sed -i "$NRrevoke  a\driver = sql" $file
NRtoken=`cat -n $file | grep "\[token\]" | awk -F" " 'NR==2{print $1}'` ; echo $NRtoken
sed -i "$NRtoken a\provider = uuid \ndriver = memcache" $file
cat $file|grep -v "^#"|grep -v "^$"
#########################################################################
su -s /bin/sh -c "keystone-manage db_sync" keystone
                                                                        # 创建数据库,使用同步
ll /var/log/keystone/keystone.log                       # 之所以上面 su 切换是因为这个日志文件属主
# 数据库检查表,生产环境密码不要用keystone,查看时间并改成复杂点的密码:set password = password('eisccn');
mysql -h $ip -u keystone -pkeystone -e "
select now();
"
systemctl enable memcached
ln -s '/usr/lib/systemd/system/memcached.service' '/etc/systemd/system/multi-user.target.wants/memcached.service'
systemctl start memcached
sed -i "s/#ServerName.*/ServerName $ip\:80/g" /etc/httpd/conf/httpd.conf
#######################################
# 修改文件: wsgi-keystone.conf
conf=`find / -name "wsgi-keystone.conf"` ; echo $conf
sed -i "1 a\Listen 35357" $conf
echo "
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
<IfVersion >= 2.4>
ErrorLogFormat "%{cu}t %M"
</IfVersion>
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>
</VirtualHost>
" >> $conf
#######################################
systemctl enable httpd
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'
systemctl start httpd
yum install -y net-tools
netstat -lntup|grep httpd                               # 查看启用的端口,grep过滤httpd的进程
TOKEN=`cat /etc/keystone/keystone.conf | grep "^admin_token =" | awk -F" " '{print $3}' | sed "s/ //g"` ; echo $TOKEN
export OS_TOKEN=$TOKEN
export OS_URL=http://$ip:35357/v3
export OS_IDENTITY_API_VERSION=3
openstack project create --domain default --description "Admin Project" admin
openstack user create --domain default --password-prompt admin
openstack role create admin
openstack role add --project admin --user admin admin
openstack project create --domain default --description "Demo Project" demo
openstack user create --domain default --password=demo demo
openstack role create user
openstack role add --project demo --user demo user
openstack project create --domain default --description "Service Project" service
openstack user list
openstack project list
openstack service create --name keystone --description "OpenStack Identity" identity
openstack endpoint create --region RegionOne identity public http://$ip:5000/v2.0
openstack endpoint create --region RegionOne identity internal http://$ip:5000/v2.0
openstack endpoint create --region RegionOne identity admin http://$ip:35357/v2.0
openstack endpoint list
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
安全 Linux Shell
Linux上执行内存中的脚本和程序
【9月更文挑战第3天】在 Linux 系统中,可以通过多种方式执行内存中的脚本和程序:一是使用 `eval` 命令直接执行内存中的脚本内容;二是利用管道将脚本内容传递给 `bash` 解释器执行;三是将编译好的程序复制到 `/dev/shm` 并执行。这些方法虽便捷,但也需谨慎操作以避免安全风险。
154 6
|
2天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
27天前
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
152 4
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
17天前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
24 1
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
164 2
|
24天前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
17 0
|
2月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
3月前
|
安全 Linux 开发工具
探索Linux操作系统:从命令行到脚本编程
【8月更文挑战第31天】在这篇文章中,我们将一起潜入Linux操作系统的海洋,从最基础的命令行操作开始,逐步深入到编写实用的脚本。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供新的视角和实用技能。我们将通过实际代码示例,展示如何在日常工作中利用Linux的强大功能来简化任务和提高效率。准备好了吗?让我们一起开启这段旅程,探索Linux的奥秘吧!
|
2月前
|
Linux
centos linux内核下载
centos linux内核下载
|
3月前
|
Linux
探索Linux操作系统:命令行与脚本编程基础
【8月更文挑战第31天】在这篇文章中,我们将一起踏上一段旅程,深入探索Linux操作系统的奥秘。通过学习命令行的使用和编写简单的脚本,你将能够更高效地与你的计算机进行交流。无论你是新手还是有经验的用户,本文都将为你打开一扇通往Linux世界的大门。准备好了吗?让我们开始吧!