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

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

内容简介:在这一篇博客写完后,虽然那个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.博客脚本仅供参考,如有需要可去我的资料下载原文件


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

查看所有标签

猜你喜欢:

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

Programming Python

Programming Python

Mark Lutz / O'Reilly Media / 2006-8-30 / USD 59.99

Already the industry standard for Python users, "Programming Python" from O'Reilly just got even better. This third edition has been updated to reflect current best practices and the abundance of chan......一起来看看 《Programming Python》 这本书的介绍吧!

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

URL 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具