Shell 脚本自动安装cobbler(改进+填坑)

栏目: 服务器 · 发布时间: 5年前

内容简介:在这一篇博客写完后,虽然那个shell脚本可以成功安装cobbler服务,但是2个脚本毕竟不方便,而且在写脚本的过程中,出现的好多问题都没有找到原因。但我没有放弃,在我的不断摸索中,终于找到了原因和解决办法,现在分享给大家,希望对大家能有所帮助!1.linux centos 7 系统2.系统可连接外网

前言:

在这一篇博客写完后,虽然那个 shell 脚本可以成功安装cobbler服务,但是2个脚本毕竟不方便,而且在写脚本的过程中,出现的好多问题都没有找到原因。但我没有放弃,在我的不断摸索中,终于找到了原因和解决办法,现在分享给大家,希望对大家能有所帮助!

脚本环境

1.linux centos 7 系统

2.系统可连接外网

3.网络模式:NAT模式

实验步骤

1.上传cobbler脚本到 Linux 系统/root目录下

chmod +x *.sh 添加执行权限

Shell 脚本自动安装cobbler(改进+填坑)

2.脚本cobbler.sh详解

#!/bin/bash

下载相关软件包

down_cobbler()

{

#关闭防火墙,安全性

systemctl stop firewalld

setenforce 0

echo -e "\033\t[34m 正在下载cobbler相关软件包 ... \033[0m" && sleep 1

rpm -ivh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm &&yum makecache && yum install cobbler cobbler-web dhcp tftp-server pykickstart httpd rsync xinetd tree -y

}

修改cobble,fttpr配置文件

setup_file()

{

echo -e "\033\t[34m 正在修改cobbler相关配置文件 ... \033[0m" && sleep 1

net=`ifconfig ens33 | grep "netmask" | awk '{print $2}' | cut -c 1-10`

ip=`ifconfig ens33 | grep "netmask" | awk '{print $2}'`

pass=`openssl passwd -1 -salt 'abc123' 'abc123' `

sed -i "101c default_password_crypted: \"$pass\"" /etc/cobbler/settings

sed -i "s/^server: 127.0.0.1/server: $ip/" /etc/cobbler/settings

sed -i "s/^next_server: 127.0.0.1/next_server: $ip/" /etc/cobbler/settings

sed -i "s/manage_dhcp: 0/manage_dhcp: 1/" /etc/cobbler/settings

sed -i "14s/yes/no/" /etc/xinetd.d/tftp

#修改dhcp模板

sed -i "21s/192.168.1/$net/g" /etc/cobbler/dhcp.template

sed -i "22s/192.168.1.5/$net.1/g" /etc/cobbler/dhcp.template

sed -i "23s/192.168.1.1/$net.2/g" /etc/cobbler/dhcp.template

sed -i "25s/192.168.1.100 192.168.1.254/$net.100 $net.200/" /etc/cobbler/dhcp.template

#启动服务

systemctl enable rsyncd

systemctl start rsyncd

systemctl start xinetd

}

cobbler 同步

cobbler_sync()

{

echo -e "\033\t[34m cobbler 正在同步 ... \033[0m" && sleep 1

systemctl start httpd && systemctl start cobblerd &&sleep 2 && cobbler sync && systemctl restart dhcpd

}

下载引导操作系统文件和导入系统镜像

loader_images()

{

echo -e "\033\t[34m 正在下载引导操作系统文件和导入系统镜像 ... \033[0m" && sleep 1

cobbler get-loaders && sleep 2 && mount /dev/sr0 /mnt &&cobbler import --path=/mnt/ --name=CentOS-7-x86_64 --arch=x86_64

}

检查所有服务状态

check_service()

{

echo -e "\033\t[34m 正在检查所有服务状态 ... \033[0m" && sleep 1

echo -e "\033\t[34m 正在检查所有服务状态 ... \033[0m" && sleep 1

http=`netstat -ntap | grep :80 | wc -l`

cob=`systemctl status cobblerd | grep "active (running)" | wc -l `

os=`cobbler distro list | wc -l `

syn=`cobbler sync |wc -l`

dhcp=`systemctl status dhcpd | grep "active (running)" | wc -l `

load=`cobbler get-loaders | grep "already exists" | wc -l`

tftp=`systemctl status xinetd | grep "active (running)" | wc -l`

if [ $http -ne 0 ] && [ $cob -eq 1 ] && [ $os -eq 1 ] && [ $syn -gt 1 ] && [ $dhcp -eq 1 ] && [ $load -gt 1 ] && [ $tftp -eq 1 ];then

echo -e "\033\t[34m 所有服务运行正常! \033[0m"

else echo -e "\033\t[31m error,check ! \033[0m"

exit 0

fi

}

函数汇总

main() { down_cobbler && setup_file && cobbler_sync &&loader_images &✓_service }
#执行函数 main

坑点及解决过程

1. cobbler相关包重复下载,如下图:

Shell 脚本自动安装cobbler(改进+填坑)

出错原因:由于我取得函数名字(yum)和其中命令(yum)相同 ,使得脚本运行函数yum后读取到yum命令时误以为是yum函数,于是再次执行函数yum内容,当读取到yum命令,再次执行函数yum...如此陷入了死循环!

Shell 脚本自动安装cobbler(改进+填坑)

解决方法:修改函数名,不要和任何命令相同即可解决!

Shell 脚本自动安装cobbler(改进+填坑)

2.命令" systemctl start httpd && systemctl start cobblerd && cobbler sync && systemctl restart dhcpd "脚本执行报错,但单独执行或分开到另一个脚本执行成功,报错信息如下图:

Shell 脚本自动安装cobbler(改进+填坑)

报错原因分析:在cobbler sync这一条命令执行失败,是因为前面命令没执行完成,就执行了cobbler sync命令。那为什么单独复制,粘贴这些命令执行就没问题,或者把这些命令分开到其他脚本中执行就能成功呢?

个人猜测:可能是脚本执行速度过快,是一条命令没执行完成,就执行了cobbler sync命令,自然会报错。但是,分开脚本执行或单独复制执行,这样操作,给了系统一个缓冲时间,成功运行这些命令!

技术大牛答案:带着疑问,我请教了技术大牛,给出了回答:进程不可并发执行!(就是进程不能同时执行太多命令,和我的猜测差不多。这是Linux 内核知识)

解决方法:1.分开脚本 (上一篇博客采用的!)2.添加sleep 命令,使系统停顿一会,命令是 :

systemctl start httpd && systemctl start cobblerd &&sleep 2 && cobbler sync && systemctl restart dhcpd

执行结果:完美解决问题

3.运行脚本cobbler.sh

Shell 脚本自动安装cobbler(改进+填坑) Shell 脚本自动安装cobbler(改进+填坑) Shell 脚本自动安装cobbler(改进+填坑) Shell 脚本自动安装cobbler(改进+填坑)

4.验证脚本

Shell 脚本自动安装cobbler(改进+填坑) Shell 脚本自动安装cobbler(改进+填坑) Shell 脚本自动安装cobbler(改进+填坑) Shell 脚本自动安装cobbler(改进+填坑)

总结:

1.这篇博客是在之前博客基础上再次改进了,这次找出了上次入坑的原因和解决方法,知识点部分可参考 https://blog.51cto.com/13760351/2397130

2.坑点2中,涉及到了Linux内核知识,这方面知识,我不懂,没写出来,以后学习内核知识,再详细补充到博客上面,如有大牛精通这个,请不吝赐教!

3.博客脚本仅供参考,如有需要可去我的资料下载原文件


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

PHP5与MySQL5 Web开发技术详解

PHP5与MySQL5 Web开发技术详解

杜江 / 电子工业出版社 / 2007-11 / 79.00元

《PHP5与MySQL5 Web开发技术详解》(含光盘)是目前中文版本第一个真正介绍PHP5及MYSQL5新增语法与功能的权威宝典!一起来看看 《PHP5与MySQL5 Web开发技术详解》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码