在這一篇博客寫完後,雖然那個shell腳本能夠成功安裝cobbler服務,可是2個腳本畢竟不方便,並且在寫腳本的過程當中,出現的好多問題都沒有找到緣由。但我沒有放棄,在個人不斷摸索中,終於找到了緣由和解決辦法,如今分享給你們,但願對你們能有所幫助!linux
1.linux centos 7 系統
2.系統可鏈接外網
3.網絡模式:橋接模式
4.腳本百度連接:https://pan.baidu.com/s/1ma53SpaIVVEVdFxmX3Ww1Q
提取碼:7ovk ios
chmod +x *.sh 添加執行權限web
#!/bin/bashshell
下載相關軟件包centos
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-13.noarch.rpm &&yum makecache && yum install cobbler cobbler-web dhcp tftp-server pykickstart httpd rsync xinetd tree -y
}安全
修改cobble,fttpr配置文件bash
setup_file()
{
echo -e "\033\t[34m 正在修改cobbler相關配置文件 ... \033[0m" && sleep 1
net=`ifconfig ens33 | grep "netmask" | awk '{print $2}' | awk -F "." '{print $1"."$2"."$3}'`
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
}
磁盤自定義分區和安裝基礎軟件包(可選)
disk_subarea()
{
cd /var/lib/cobbler/kickstarts/
cp sample_end.ks redhat7.ks
sed -i "s/autopart/#autopart/" redhat7.ks
#磁盤分區,可自定義修改
sed -i '44ipart /boot --fstype="xfs" --size=1024'redhat7.ks
sed -i '45ipart swap --fstype="swap" --size=4096' redhat7.ks
sed -i '46ipart / --fstype="xfs" --grow --size=1' redhat7.ks
#安裝基礎軟件包(可自定義)
sed -i '57ilrzsz' redhat7.ks
sed -i '58inet-tools.x86_64' redhat7.ks
cobbler profile edit --name=CentOS-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/redhat7.ks
cobbler sync
sleep 2
}
檢查全部服務狀態
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
disk_subarea &&check_service
}#執行函數
main
出錯緣由:因爲我取得函數名字(yum)和其中命令(yum)相同 ,使得腳本運行函數yum後讀取到yum命令時誤覺得是yum函數,因而再次執行函數yum內容,當讀取到yum命令,再次執行函數yum...如此陷入了死循環!
解決方法:修改函數名,不要和任何命令相同便可解決!
報錯緣由分析:在cobbler sync這一條命令執行失敗,是由於前面命令沒執行完成,就執行了cobbler sync命令。那爲何單獨複製,粘貼這些命令執行就沒問題,或者把這些命令分開到其餘腳本中執行就能成功呢?
我的猜想:多是腳本執行速度過快,是一條命令沒執行完成,就執行了cobbler sync命令,天然會報錯。可是,分開腳本執行或單獨複製執行,這樣操做,給了系統一個緩衝時間,成功運行這些命令!
技術大牛答案:帶着疑問,我請教了技術大牛,給出了回答:進程不可併發執行!(就是進程不能同時執行太多命令,和個人猜想差很少。這是Linux 內核知識)
解決方法:1.分開腳本 (上一篇博客採用的!)2.添加sleep 命令,使系統停頓一會,命令是 :
systemctl start httpd && systemctl start cobblerd &&sleep 2 && cobbler sync && systemctl restart dhcpd
1.這篇博客是在以前博客基礎上再次改進了,此次找出了上次入坑的緣由和解決方法,知識點部分可參考 http://www.javashuo.com/article/p-rqhooinp-ve.html
2.坑點2中,涉及到了Linux內核知識,這方面知識,我不懂,沒寫出來,之後學習內核知識,再詳細補充到博客上面,若有大牛精通這個,請不吝賜教!
3.博客腳本僅供參考,若有須要可去個人資料下載原文件
https://down.51cto.com/data/24626434.以前是拿虛擬機驗證腳本,最近有幸給公司新買服務器裝系統,就拍了幾張圖放上去,證實此腳本是沒問題的,實用性強!5.真實服務器比虛擬機操做要更簡單,方便。只要服務器鏈接局域網,開機自動進入系統安裝界面,都不用進入bios設置開機啓動!