Cobbler实现自动化升级系统到6

1.cobbler安装

 使用脚本安装。install_cobbler.sh

#!/bin/bash
#######################
### install cobbler ###
#######################
[ $# -ne 1 ] && echo "Usage:`basename $0` <private ip for cobbler server>" && echo "eg:`basename $0` 192.168.1.1" && exit 1
cobbler_ip=$1
# check if network ping ok
if ping -c2 www.shdkx.com >/dev/null 2>&1;then
        echo "Network is OK,now continue ..."
else
        echo "Error: Network unreachable,now exit !"
        exit 1
fi
is_private_ip()
{
        local ip=$1
        local int=0
        echo $ip | egrep -q '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' || return 2
        PRIVATE_RANGES="167772160:184549375 2886729728:2887778303 3232235520:3232301055"
        STEP=(shdkx shdkx 16777216 65536 256 1)
        for i in {1..4};do
                field=`echo $ip | cut -d'.' -f$i`
                int=$(($field*${STEP[$i]}+$int))
        done
        for RANGE in $PRIVATE_RANGES;do
                RANGE_MIN=${RANGE%:*}
                RANGE_MAX=${RANGE#*:}
                [ $int -ge $RANGE_MIN -a $int -le $RANGE_MAX ] && return 0
        done
        return 1
}
###################### check if private ip
echo "ip=${cobbler_ip}"
if is_private_ip $cobbler_ip;then
        echo "Available private ip,now continue ..."
else
        echo "Error: Not a valid private ip,now exit !"
        exit 1
fi
##################### check os type ,then install
distributor=`lsb_release -i | awk '{print$3}'`
release=`lsb_release -r | awk '{print substr($2,1,1)}'`
architecture=`arch`
[ x"$architecture" != x"x86_64" ] && architecture="i386"
ostype="$distributor$release"
check_epel5()
{
    if yum repolist | grep epel >/dev/null;then
        echo "epel already exist"
    else
        echo "install epel ..."
        #rpm -Uvh "http://mirrors.yun-idc.com/epel/5Server/${architecture}/epel-release-5-4.noarch.rpm"
        rpm -ivh http://centos.yum.sandai.net/.help/epel-release-5-4.noarch.rpm
        mv /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo_backup
        wget http://centos.yum.sandai.net/.help/epel5.repo -O /etc/yum.repos.d/epel.repo
    fi
}
check_epel6()
{
    if yum repolist | grep epel >/dev/null;then
        echo "epel already exist"
    else
        echo "install epel ..."
        #rpm -Uvh "http://mirrors.yun-idc.com/epel/5Server/${architecture}/epel-release-6-8.noarch.rpm"
        rpm -ivh http://centos.yum.sandai.net/.help/epel-release-6-8.noarch.rpm
        mv /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo_backup
        wget http://centos.yum.sandai.net/.help/epel6.repo -O /etc/yum.repos.d/epel.repo
    fi
}
case $ostype in
RedHatEnterpriseServer5)
    echo "ostype=$ostype"
    check_epel5
    rpm -Uvh "http://centos.yum.sandai.net/centos/5.9/os/${architecture}/CentOS/python-simplejson-2.0.9-8.el5.${architecture}.rpm"
    wget -O /tmp/Django-1.1.4-1.el5.noarch.rpm "http://thunder:[email protected]/mahongzhan/soft/Django-1.1.4-1.el5.noarch.rpm"
    rpm -Uvh /tmp/Django-1.1.4-1.el5.noarch.rpm
    #rpm -Uvh "http://centos.yum.sandai.net/epel/5Client/x86_64/Django-1.1.4-1.el5.noarch.rpm"
    apt-get install httpd mod_ssl dhcp createrepo yum-utils pykickstart OpenIPMI ipmitool cman mkisofs -y || exit 1
    yum install PyYAML python-netaddr python-cheetah mod_wsgi tftp-server python-ctypes cobbler cobbler-web -y
    ;;
CentOS5)
    echo "ostype=$ostype"
    check_epel5
    rpm -Uvh "http://centos.yum.sandai.net/centos/5.9/os/${architecture}/CentOS/python-simplejson-2.0.9-8.el5.${architecture}.rpm"
    wget -O /tmp/Django-1.1.4-1.el5.noarch.rpm "http://shdkx:[email protected]/shdkx/soft/Django-1.1.4-1.el5.noarch.rpm"
    rpm -Uvh /tmp/Django-1.1.4-1.el5.noarch.rpm
    yum install PyYAML python-netaddr python-cheetah mod_wsgi mod_ssl dhcp tftp-server httpd createrepo yum-utils pykickstart OpenIPMI ipmitool cman mkisofs python-ctypes cobbler cobbler-web -y
    ;;
CentOS6)
    echo "ostype=$ostype"
    check_epel6
    yum install PyYAML python-netaddr python-cheetah mod_wsgi mod_ssl dhcp tftp-server httpd createrepo yum-utils pykickstart ipmitool cman mkisofs Django14 python-ctypes cobbler cobbler-web -y
    ;;
*)
    echo "Error: Unkown OS type,now exit !"
    exit 1
esac
##################### configure network
cobbler_ip_sub=${cobbler_ip%.*}
eth_num=`/sbin/ifconfig | grep -w eth[0-9] | wc -l`
if [ $eth_num -gt 0 ]; then
        nic=eth
        lan=${nic}0
        wan=${nic}1
else
        nic=em
        lan=${nic}1
        wan=${nic}2
fi
[ -z $lan -a -z $wan ] && echo "Error: no nic interface,now exit !" && exit 1
netmask=`/sbin/ifconfig $lan | awk '/inet addr/{print$4}' | cut -d: -f2`
echo "netmask=${netmask}"
echo "DEVICE=${lan}:cobbler
BOOTPROTO=static
IPADDR=${cobbler_ip}
NETMASK=${netmask}
ONBOOT=yes">/etc/sysconfig/network-scripts/ifcfg-${lan}:cobbler
/sbin/ifup ${lan}:cobbler || exit 1
grep "${cobbler_ip_sub}.0" /etc/sysconfig/iptables ||
{
    sed -i "/-A INPUT -j RH-Firewall-1-INPUT/ i -A INPUT -s ${cobbler_ip_sub}.0/${netmask} -j ACCEPT" /etc/sysconfig/iptables
}
iptables -nvL | grep "${cobbler_ip_sub}.0" >/dev/null ||
{
    iptables -I INPUT -s ${cobbler_ip_sub}.0/${netmask} -j ACCEPT
}
grep "tftpd" /etc/hosts.allow ||
{
    chattr -i /etc/hosts.allow && echo "in.tftpd:192.168.1.0/255.255.255.0" >> /etc/hosts.allow && chattr +i /etc/hosts.allow
}
echo "${lan}:cobbler configure successfully !"
#################### configure utils
# configure httpd
sed -i 's/Listen 80/Listen 3196/' /etc/httpd/conf/httpd.conf
sed -i 's/#LoadModule wsgi_module/LoadModule wsgi_module/' /etc/httpd/conf.d/wsgi.conf
# Cobbler relies on fencing agents, provided by the 'cman' package for some distributions or 'fence-agents' for others.
# These scripts are installed in the /usr/sbin directories.
# Cobbler will automatically find any files in that directory named fence_* and allow them to be used for power management.
ln -s /sbin/fence_* /usr/sbin/
#disable selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#setenforce 0
#ennable tftp
sed -i '/disable/c\\tdisable\t\t\t= no' /etc/xinetd.d/tftp
#enable rsync
sed -i -e 's/\=\ yes/\=\ no/g' /etc/xinetd.d/rsync
###################### configure cobbler
#what users can log into the WebUI and Read-Write XMLRPC?
#use /etc/cobbler/users.digest (for basic setups)
sed -i 's/authn_denyall/authn_configfile/g' /etc/cobbler/modules.conf
#this is the address of the cobbler server
sed -i "s/server: 127.0.0.1/server: ${cobbler_ip}/g" /etc/cobbler/settings
# Preventing boot loops: This will set the machines not to PXE-boot on successive boots once they complete one install.
sed -i 's/pxe_just_once: 0/pxe_just_once: 1/g' /etc/cobbler/settings
#if using cobbler with manage_dhcp, put the IP address of the cobbler server here so that PXE booting guests can find it
sed -i "s/next_server: 127.0.0.1/next_server: ${cobbler_ip}/g" /etc/cobbler/settings
#set to 1 to enable Cobbler's RSYNC management features.
sed -i 's/manage_rsync: 0/manage_rsync: 1/g' /etc/cobbler/settings
#set to 1 to enable Cobbler's DHCP management features.
sed -i 's/manage_dhcp: 0/manage_dhcp: 1/g' /etc/cobbler/settings
sed -i 's/http_port: 80/http_port: 3196/' /etc/cobbler/settings
#configure dhcp.conf
sed -i "s/192.168.1/${cobbler_ip_sub}/g" /etc/cobbler/dhcp.template
#disable uefi boot
sed -i -e 's=filename "ia64/elilo.efi"=#filename "ia64/elilo.efi"=' -e 's=filename "grub/grub-x86.efi"=#filename "grub/grub-x86.efi"=' -e 's=filename "grub/grub-x86_64.efi"=#filename "grub/grub-x86_64.efi"=' /etc/cobbler/dhcp.template
#configure user=root,password=<what you entered>
htdigest /etc/cobbler/users.digest "Cobbler" root
/etc/init.d/xinetd restart
/etc/init.d/httpd restart
/etc/init.d/cobblerd restart
sleep 1
cobbler get-loaders
cobbler check
cobbler sync
############################## COMMAND SAMPLE #############################
#mkdir -p /data/iso/CentOS-5.8-x86_64
#mount -o loop /data/iso/CentOS-5.8-x86_64-bin-DVD-1of2.iso /data/iso/CentOS-5.8-x86_64
#echo '/data/iso/CentOS-5.8-x86_64' >> /usr/local/monitor-base/log/disk.deny
#cobbler import --path=/data/iso/CentOS-5.8-x86_64 --name=CentOS-5.8-x86_64 --kickstart=/data/iso/5u8_cobbler.ks
#cobbler import --path=/data/iso/CentOS-6.4-x86_64 --name=CentOS-6.4-x86_64 --kickstart=/data/iso/6u4_cobbler.ks
# iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
######## 常规情况下这样就可以了
######### 若要设置两个接口的IP需要分两次操作
# Note: **You can only edit one interface at a time!**
# If you specify multiple --interface options, only the last one will be used.
#cobbler system add \
#--name=hj_test \
#--hostname=hj_test  \
#--profile=CentOS-5.8-x86_64 \
#--interface=eth0 --mac-address=e4:1f:13:62:c4:6c --ip-address=10.1.1.125 --netmask=255.255.255.0 --static=1 \
#--power-type=ipmilan --power-user=shdkx --power-pass=PASSW0RD --power-address=10.1.2.125 \
#--kopts=nousb --clobber
#cobbler system edit \
#--name=hj_test \
#--interface=eth1 --mac-address=e4:1f:13:62:C4:6e \
#--ip-address=192.168.1.54 --netmask=255.255.255.0 --gateway=192.168.1.254 --static=1
################ IBM的ipmi over lan:
#F1进入BIOS
#System Settings->Devices and I/O Ports->Console Redirection Settings->Serial Port Sharing 将此项设置为Enable即可
#legacy only的引导顺序必须位于pxe之前,否则会进入efi引导,导致安装不成功。若手动选,也不能选pxe,需要选legacy only
############### DELL的ipmi over lan:
#CTRL+E进入DRAC卡手动开启ipmi over lan
#或者远程登入DRAC执行命令 racadm config -g cfgIpmiLan -o cfgIpmiLanEnable 1
############### 通用ipmi over lan开启方法:
#ipmitool lan set 1 access on
# racadm config -g cfgIpmiLan -o cfgIpmiLanEnable 1
# racadm getconfig -g cfgIpmiLan
#for((i=1;i<=1000;++i));do sh pxe.sh;sleep 1;done
#cobbler system report | egrep '^Name  |Netboot Enabled'
#cat /var/log/messages | grep dhcpd | grep 'DHCPDISCOVER from'  | awk '{print$8}' | sort |uniq | wc -l
# for i in 32 33 41 42 43 51 53 55;do echo -n "10.1.1.1$i ";ping -c2 -W1 10.1.1.1$i|awk '/pack/{print$6,$7}';done
# last thing
# /etc/init.d/httpd stop;/etc/init.d/dhcpd stop;/etc/init.d/cobblerd stop
# /etc/init.d/iptables start


2.挂载镜像和导入kickstart

mkdir -p /data/iso && cd /data/iso
wget http://centos.yum.sandai.net/centos/6.4/isos/x86_64/CentOS-6.4-x86_64-bin-DVD1.iso
mkdir CentOS-6.4-x86_64
mount -o loop CentOS-6.4-x86_64-bin-DVD1.iso CentOS-6.4-x86_64
echo "/data/iso/CentOS-6.4-x86_64" >> /usr/local/monitor-base/log/disk.deny
cobbler import --path=/data/iso/CentOS-6.4-x86_64 --name=CentOS-6.4-x86_64 --kickstart=/data/iso/6u4_cobbler.ks

3.给cobbler添加主机 使用add_host.sh添加机器

[root@hj iso]# cat add_host.sh
while read hostname profile eth0_mac eth0_ip ilo_user ilo_pass ilo_ip eth1_mac eth1_ip eth1_mask gw
do
  cobbler system add --name=$hostname --hostname=$hostname --profile=$profile --kopts="nousb noapic acpi=off" --interface=eth0 --mac-address=$eth0_mac --ip-address=$eth0_ip --netmask=255.255.255.0 --static=1 --power-type=ipmilan --power-user=$ilo_user --power-pass=$ilo_pass --power-address=$ilo_ip
  cobbler system edit --name=$hostname --interface=eth1 --mac-address=$eth1_mac --ip-address=$eth1_ip --netmask=$eth1_mask --gateway=$gw --static=1
done<add_host.list

add_host.list格式:

#hostname profile eth0_mac eth0_ip ilo_user ilo_pass ilo_ip eth1_mac eth1_ip eth1_mask gw

附属:利用pssh收集主机的设备信息:cobbler_host_list.sh

#!/bin/bash
host=$(hostname)
eth0_ip=`ifconfig |grep eth0 -A1 |grep "inet addr:" |awk '{print $2}' |awk -F: '{print $2}'`
if [ -z $eth0_ip ];then
    eth0_ip=`ifconfig |grep em1 -A1 |grep "inet addr:" |awk '{print $2}' |awk -F: '{print $2}'`
fi
eth0_mac=`ifconfig |grep eth0 |awk '{print $NF}'`
if [ -z $eth0_mac ];then
    eth1_mac=`ifconfig |grep em1 |awk '{print $NF}'`
fi
eth1_ip=`ifconfig |grep eth1 -A1 |grep "inet addr:" |awk '{print $2}' |awk -F: '{print $2}'`
if [ -z $eth1_ip ];then
    eth1_ip=`ifconfig |grep em2 -A1 |grep "inet addr:" |awk '{print $2}' |awk -F: '{print $2}'`
fi
eth1_mac=`ifconfig |grep eth1 |awk '{print $NF}'`
if [ -z $eth1_mac ];then
    eth1_mac=`ifconfig |grep em2 |awk '{print $NF}'`
fi
eth1_mask=`ifconfig |grep eth1 -A1 |grep "inet addr:" |awk '{print $4}' |awk -F: '{print $2}'`
if [ -z $eth1_mask ];then
    eth1_mask=`ifconfig |grep em2 -A1 |grep "inet addr:" |awk '{print $4}' |awk -F: '{print $2}'`
fi
gw=`route -n|awk '/UG/ {print $2}'`
profile="CentOS-6.2-x86_64"
ilo_user="root"
ilo_pass="XXXX"
ilo_ip=`echo "$eth0_ip" | awk -F. '{ip=2} END { print $1"."$2"."ip"."$4}'`
echo -e "$host $profile $eth0_mac $eth0_ip $ilo_user $ilo_pass $ilo_ip $eth1_mac $eth1_ip $eth1_mask $gw"


4.ks文件:6u4_cobbler.ks  系统基础化设置和程序部署都在ks文件的post段。

# Kickstart file automatically generated by anaconda.
install
key --skip
lang en_US.UTF-8
keyboard us
rootpw  --iscrypted $6$8YBEugaR2vIqSbej$A0R7d4cO0f.jvvZpU9jZ/cWIkIBSXl5YRGiHrurtejEr6
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="noapic acpi=off"
#bootloader --location=mbr --driveorder=sda,sdb,sdc
clearpart --all --initlabel --drives=sda
#clearpart --all --initlabel
text
skipx
url --url=$tree
$SNIPPET('network_config')
reboot
part / --fstype=ext4 --asprimary --size=70000 --ondisk=sda
part swap --size=20000 --ondisk=sda
part /usr/local --fstype=ext4 --size=1 --grow --ondisk=sda
#hp disk array
#part / --fstype ext4 --size=70000  --ondisk=cciss/c0d0
#part swap --size=20000 --ondisk=cciss/c0d0
#part /usr/local --fstype ext4 --size=100000 --ondisk=cciss/c0d0
#part /data --fstype ext4 --size=1 --grow --ondisk=cciss/c0d0
%pre
$SNIPPET('pre_install_network_config')
%end
#repo --name="Red Hat Enterprise Linux"  --baseurl=cdrom:sr0 --cost=100
#repo --name="High Availability"  --baseurl=file:///mnt/source/HighAvailability/ --cost=1000
%packages
@additional-devel
@base
@chinese-support
@client-mgmt-tools
@core
@debugging
@desktop-platform-devel
@development
@directory-client
@emacs
@fonts
@general-desktop
@graphical-admin-tools
@graphics
@hardware-monitoring
@input-methods
@internet-browser
@java-platform
@legacy-unix
@legacy-x
@network-file-system-client
@performance
@perl-runtime
@print-client
@remote-desktop-clients
@security-tools
@server-platform
@server-platform-devel
@server-policy
@system-management
@system-admin-tools
@system-management-messaging-server
@tex
@technical-writing
libXinerama-devel
xorg-x11-proto-devel
startup-notification-devel
libgnomeui-devel
libbonobo-devel
libXau-devel
libgcrypt-devel
popt-devel
libdrm-devel
libXrandr-devel
libxslt-devel
libglade2-devel
gnutls-devel
mtools
pax
python-dmidecode
oddjob
sgpio
genisoimage
wodim
desktop-file-utils
jpackage-utils
certmonger
pam_krb5
krb5-workstation
netpbm-progs
tcp_wrappers
libXmu
perl-DBD-SQLite
hmaccalc
wget
%end
#%post --nochroot
%post --log=/tmp/anaconda-post.log --erroronfail
#ifconfig em1:tmp 10.1.1.1/24
mkdir /usr/local/src
cd /usr/local/src
wget http://192.168.1.2:3195/6u4x64.tar.gz
wget http://192.168.1.2:3195/puppet3.tar.gz
wget http://192.168.1.2:3195/chunk_server.tar.gz
wget http://192.168.1.2:3195/user.sh
wget http://192.168.1.2:3195/install_soft.sh
chmod a+x install_soft.sh
chmod a+x user.sh
echo "sh /usr/local/src/install_soft.sh" >> /etc/rc.d/rc.local
$SNIPPET('kickstart_done')
%end

5.打开web页面即可安装

本文出自 “网络空间” 博客,谢绝转载!

你可能感兴趣的:(Cobbler;,自动化;)