#!/bin/sh # this script is used to setup the hypervisor for KVM installations. # In order for this to work, you have to do the following: # # 1. In your install template, make sure you add the following # to your packages list : # bridge-utils # dnsmasq # iscsi-initiator-utils # kvm # libvirt.x86_64 # gpxe-kvm # # 2. In order to get those packaes, you'll need to add the # xCAT-dep repo. For our test we added the line: # repo --name=xcat-dep --baseurl=http://#TABLE:noderes:$NODE:nfsserver#/install/xcat/xcat-dep/rh5/#TABLE:nodetype:$NODE:arch# # This line can be added after the url --url line # # Once you have that, then the following scripts just set up kvm # When the machine boots the first time you'll know it works if you can # run the command: # virsh list # You'll then see output like: # Id Name State #---------------------------------- # configure network interfaces for bridging # here we assume you are using eth0. Change it if it goes # somewhere else. HWETH0=`grep HWADDR /etc/sysconfig/network-scripts/ifcfg-eth0` HWETH1=`grep HWADDR /etc/sysconfig/network-scripts/ifcfg-eth1` cat < /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BRIDGE=br0 PROMISC=yes $HWETH0 EOF cat < /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 TYPE=Ethernet ONBOOT=no BOOTPROTO=dhcp $HWETH1 EOF cat < /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=dhcp PEERDNS=yes DELAY=0 EOF #disabled networking code in init.d/kvm rm -f /etc/libvirt/qemu/networks/*.xml rm -f /etc/libvirt/qemu/networks/autostart/*.xml chkconfig --add libvirtd #added runlevels to init.d/kvm - kvm needs to start before libvirt or the #libvirt will not recognize kvm-ness is available and vm creation will fail. cat < /etc/init.d/kvm #!/bin/sh # kvm init script - stripped off bridge code, but still 'Takes care # # description: The KVM is a kernel level Virtual Machine Monitor. start () { grep -q GenuineIntel /proc/cpuinfo && /sbin/modprobe kvm-intel grep -q AuthenticAMD /proc/cpuinfo && /sbin/modprobe kvm-amd } stop () { grep -q GenuineIntel /proc/cpuinfo && /sbin/modprobe -r kvm-intel grep -q AuthenticAMD /proc/cpuinfo && /sbin/modprobe -r kvm-amd } logger -t xcat -p local4.info "KVM $1" case "\$1" in start) echo -n $"Starting KVM: " logger -t xcat -p local4.info "Starting KVM:" start echo ;; stop) echo -n $"Shutting down KVM: " logger -t xcat -p local4.info "Shutting down KVM:" stop echo ;; status) echo ;; *) echo "Unknown command: \$1" >&2 logger -t xcat -p local4.info "Unknown command: \$1" echo "Valid commands are: start, stop, status" >&2 logger -t xcat -p local4.info "Valid commands are: start, stop, status" exit 1 esac EOF chmod u+x /etc/init.d/kvm && chkconfig --add kvm # iscsi target init script # you may not need this. Also, you'll have to set the iSCSI target # leaving this command in shouldn't hurt anything if you don't have # an iSCSI target ISCSITARGET=h0.cluster1 cat < /etc/init.d/iscsiconnect #!/bin/sh # # chkconfig: 345 10 75 # description: iscsi script to discover and connect to targets on boot connect_targets() { iscsiadm -m discovery -t st -p $ISCSITARGET iscsiadm -m node -L automatic } disconnect_targets() { iscsiadm -m node --logout } logger -t xcat -p local4.info "iscsi $1" case "\$1" in start) connect_targets ;; stop) disconnect_targets ;; status) iscsiadm -m node ;; *) echo "Unknown command: \$1" >&2 logger -t xcat -p local4.info "Unknown command: \$1" echo "Valid commands are: start, stop, status" >&2 logger -t xcat -p local4.info "Valid commands are: start, stop, status" exit 1 esac EOF chmod u+x /etc/init.d/iscsiconnect && chkconfig --add iscsiconnect