-
-
Save moutons/3812060 to your computer and use it in GitHub Desktop.
Kickstart files for generic CentOS 6 VM image for OpenNebula
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Clear VM's network config | |
rm /etc/udev/rules.d/70-persistent-net.rules | |
rm /etc/sysconfig/network-scripts/ifcfg-eth0 | |
rm /etc/resolv.conf | |
rm /etc/sysconfig/network |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
######################################################## | |
### one-image-generic EL6 kickstart file ### | |
######################################################## | |
# Install OS | |
install | |
text | |
# Installation logging level | |
logging --level=info | |
# installation media url | |
url --url http://192.168.1.7/repo/centos/6/os/x86_64 | |
# Authentication | |
auth --useshadow --enablemd5 | |
# System bootloader configuration | |
# I haven't password protected bootloader here, but you may want to do so! | |
bootloader --location=mbr --append="rhgb quiet divider=10" | |
# Run the Setup Agent on first boot | |
firstboot --disable | |
# System keyboard | |
keyboard us | |
# System language | |
lang en_US.UTF-8 | |
# System timezone | |
timezone --utc America/Chicago | |
# Root password not given in the kickstart - will be prompted | |
# Network settings | |
network --device eth0 --bootproto static --ip 192.168.1.18 --netmask 255.255.0.0 --gateway 192.168.1.2 --nameserver 192.168.1.2 --hostname one-image-generic.uabgrid.uab.edu --noipv6 | |
# Firewall configuration | |
firewall --enabled --ssh | |
# SELinux configuration | |
selinux --permissive | |
# authconfig - pam_ldap | |
authconfig --enableshadow --passalgo=sha512 --enableldapauth --enableldaptls --ldapserver peopledb.uab.edu --ldapbasedn ou=staff,dc=uab,dc=edu | |
# Do not configure the X Window System | |
skipx | |
# Partition clearing information | |
clearpart --all --initlabel | |
# Disk partitioning information | |
# Total (40GB) = pv.1 + /boot | |
part /boot --fstype="ext4" --size=256 | |
part pv.1 --size=1 --grow | |
volgroup generic-server_vg00 pv.1 | |
logvol / --fstype ext4 --name=LogVol00 --vgname=generic-server_vg00 --size=2048 --grow | |
# System packages | |
%packages --nobase | |
rpm | |
rpm-libs | |
rpm-devel | |
rpm-build | |
rpmdevtools | |
yum | |
lvm2 | |
grub | |
sysstat | |
ntp | |
openssh-server | |
openssh-clients | |
perl | |
wget | |
rsync | |
gcc | |
gcc-c++ | |
make | |
sudo | |
man | |
which | |
patch | |
xinetd | |
bind-utils | |
pam_ldap | |
nss-pam-ldapd | |
autofs | |
nfs-utils | |
nfs-utils-lib | |
yum-priorities | |
openssl | |
curl | |
curl-devel | |
yum-utils | |
httpd | |
httpd-devel | |
mysql | |
mysql-server | |
mysql-devel | |
php | |
php-pear | |
php-mysql | |
acpid | |
audit | |
gd | |
libgfortran | |
gcc-gfortran | |
telnet | |
tcpdump | |
lsof | |
strace | |
redhat-lsb | |
tcl | |
environment-modules | |
git-all | |
mercurial | |
subversion | |
subversion-devel | |
ruby-libs | |
ruby-docs | |
ruby-devel | |
rubygems | |
ruby-ri | |
vim-common | |
vim-enhanced | |
vim-X11 | |
emacs | |
%end | |
%post | |
########################################################### | |
### Create scripts to configure the server at first boot ### | |
########################################################### | |
postinstdir="/root/post-install" | |
postinsturl="http://192.168.1.7/kickstarts/rcs-el6/post-install" | |
host="one-image-generic" | |
/bin/mkdir -p $postinstdir/log/{common,nodes/$host} $postinstdir/common $postinstdir/nodes/$host | |
# Build array, Files, containing the post install files | |
# IMPORTANT: The order in which they are added is the order in which they will be executed! | |
# Common configs - those that can be applied to multiple machines | |
Files[${#Files[*]}]="common/rsyslog-remote-server.sh" | |
Files[${#Files[*]}]="common/repo-el6-config.sh" | |
Files[${#Files[*]}]="common/autofs-config.sh" | |
Files[${#Files[*]}]="common/ntp-config.sh" | |
Files[${#Files[*]}]="common/yum-update-config.sh" | |
# Node specific configs | |
Files[${#Files[*]}]="nodes/${host}/root-email.sh" | |
Files[${#Files[*]}]="nodes/${host}/sudo-config.sh" | |
Files[${#Files[*]}]="nodes/${host}/firewall-config.sh" | |
Files[${#Files[*]}]="nodes/${host}/rc-local-contextualize.sh" | |
Files[${#Files[*]}]="nodes/${host}/clear-network-config.sh" | |
for file in ${Files[@]} ; do | |
/usr/bin/wget ${postinsturl}/${file} -P ${postinstdir} -O ${postinstdir}/${file} | |
done | |
# Set the execute bit on the post install scripts that you want to run | |
/bin/chmod +x $postinstdir/common/*.sh | |
/bin/chmod +x $postinstdir/nodes/${host}/*.sh | |
# if you want to prevent particular scripts from running, remove the execute | |
# bit here | |
# Now run the scripts | |
for file in ${Files[@]} ; do | |
# Only run the files with the execute bit | |
if [ -x $postinstdir/$file ] ; then | |
$postinstdir/$file 2>&1 | tee $postinstdir/log/${file}.log | |
else | |
echo "This script has been disabled and wasn't executed: $postinstdir/$file" > $postinstdir/log/${file}.log | |
fi | |
done | |
unset Files | |
# Halt or turn-off system after the installation is complete | |
/sbin/shutdown -h now | |
%end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
## Example script - how rc.local can self-contain all contextualization steps | |
## network config, ntpd, rpcidmapd and puppet | |
# Update rc.local to | |
## Mount CD-ROM ISO device on boot | |
## Run contextualization script | |
## Unmount CD-ROM ISO device | |
cat >> /etc/rc.local << \EOF | |
## Added for OpenNebula contextualization | |
# http://opennebula.org/documentation:rel3.2:cong | |
# Virtual Machine contextualization | |
# OpenNebula VM templates with CONTEXT/files section can be launched only | |
# by 'oneadmin' users. Since we want non-oneadmin users to launch VMs as well | |
# we can't use the same CONTEXT/files technique. Hence the contextualization | |
# is added directly to the rc.local script. | |
# network-config | |
# NETMASK, NAMESERVER and GATEWAY variables are set through CONTEXT section | |
function network_config(){ | |
ip="$IPBASE.$VMID" | |
hostname="one-$VMID.$IMGTYPE.$DOMAIN" | |
hostname $hostname | |
# ifcfg-eth0 | |
cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF1 | |
# Added using OpenNebula contextualization | |
DEVICE=eth0 | |
BOOTPROTO=static | |
ONBOOT=yes | |
IPADDR=$ip | |
NETMASK=$NETMASK | |
IPV6INIT=NO | |
TYPE=ETHERNET | |
EOF1 | |
# resolv.conf | |
cat > /etc/resolv.conf << EOF2 | |
# Added using OpenNebula contextualization | |
search uabgrid.uab.edu | |
nameserver $NAMESERVER1 | |
nameserver $NAMESERVER2 | |
EOF2 | |
# network | |
cat > /etc/sysconfig/network << EOF3 | |
NETWORKING=yes | |
HOSTNAME=$hostname | |
GATEWAY=$GATEWAY | |
EOF3 | |
/etc/init.d/network start | |
exit_code="$?" | |
return $exit_code | |
} | |
# rpcidmapd | |
function rpcidmapd_start(){ | |
/etc/init.d/rpcidmapd start | |
exit_code="$?" | |
return $exit_code | |
} | |
# puppet | |
function puppet_registration(){ | |
# Register VM with the Puppet server | |
/etc/init.d/puppet once | |
exit_code="$?" | |
return $exit_code | |
} | |
# ntpd | |
function ntpd_restart(){ | |
# Restart ntpd daemon after network service is up | |
/etc/init.d/ntpd restart | |
exit_code="$?" | |
return $exit_code | |
} | |
# Main function | |
# Mount CONTEXT drive | |
export CONTEXT_DIR=/mnt/context | |
export CONTEXT_DEV=/dev/cdrom | |
export ERROR_OUT=/tmp/context-mount.errout | |
mkdir -p $CONTEXT_DIR | |
# Mount /dev/cdrom device which contains 'contextulization files' | |
mount -v -t iso9660 $CONTEXT_DEV $CONTEXT_DIR > $ERROR_OUT 2>&1 | |
# Execute context.sh script if present | |
if [[ -f $CONTEXT_DIR/context.sh ]]; then | |
. $CONTEXT_DIR/context.sh | |
IPBASE="10.20.30" | |
# OpenNebula launched VMs have restricted IP range in current config | |
# Ideally we should be using vnet and/or DHCP | |
if [[ "$VMID" -lt 50 && "$VMID" -gt 0 ]]; then | |
network_config | |
if [[ "$?" -eq 0 ]]; then | |
# call rpcidmapd_start and puppet_registration functions | |
rpcidmapd_start | |
ntpd_restart | |
puppet_registration | |
else | |
echo "Failed to configure/start network service." >> $ERROR_OUT | |
# echo "The system will be halted now..." >> $ERROR_OUT | |
# /sbin/shutdown -h now | |
fi | |
else | |
echo "Generated IP address $IPBASE.$VMID is outside of allowed range." >> $ERROR_OUT | |
echo "The system will be halted now..." >> $ERROR_OUT | |
/sbin/shutdown -h now | |
fi | |
else | |
echo "Can't find $CONTEXT_DIR/context.sh" >> $ERROR_OUT | |
fi | |
# Unmount CONTEXT drive | |
umount -v $CONTEXT_DIR >> $ERROR_OUT 2>&1 | |
rm -rf $CONTEXT_DIR | |
EOF |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# Update rc.local to | |
## Mount CD-ROM ISO device on boot | |
## Run contextualization scripts | |
## Unmount CD-ROM ISO device | |
cat >> /etc/rc.local << \EOF | |
## Added for OpenNebula contextualization | |
# http://opennebula.org/documentation:rel3.2:cong | |
# Mount CONTEXT drive | |
export CONTEXT_DIR=/mnt/context | |
export CONTEXT_DEV=/dev/cdrom | |
export ERROR_OUT=/tmp/context-mount.errout | |
mkdir -p $CONTEXT_DIR | |
# Mount /dev/cdrom device which contains 'contextulization files' | |
mount -v -t iso9660 $CONTEXT_DEV $CONTEXT_DIR > $ERROR_OUT 2>&1 | |
# Execute context.sh script if present | |
if [[ -f $CONTEXT_DIR/context.sh ]]; then | |
. $CONTEXT_DIR/context.sh | |
. $CONTEXT_DIR/init.sh | |
. $CONTEXT_DIR/puppet-registration.sh | |
else | |
echo "Can't find $CONTEXT_DIR/context.sh" >> $ERROR_OUT | |
fi | |
# Unmount CONTEXT drive | |
umount -v $CONTEXT_DIR >> $ERROR_OUT 2>&1 | |
rm -rf $CONTEXT_DIR | |
EOF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment