Thursday, January 28, 2010

Ecualyptus from scratch via kickstart


I'm trying to record a bit about my research into cloud managment, so I used my old Apple MacPro quad Xeon to give it a try on Centos.
I started out with a Centos 5.4 vanilla install cd (X86_64) and a kickstart file that looked something like this:





install
cdrom
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp
## I had multiple network cards... disabled the second one
# network --device eth1 --onboot no --bootproto dhcp
## commenting out the password, set your own
# rootpw --iscrypted 120394871aoeu097123
## for simplicity, disabled firewall and selinux
firewall --disabled
selinux --disabled
authconfig --enableshadow --enablemd5
timezone --utc America/Chicago
## My machine had 4 1Tb drives which I put into a big raid-10
## I clear out all data on all drives, edit to your own liking
#bootloader --location=partition --driveorder=sda,sdb,sdc,sdd
#clearpart --all --initlabel --drives=sda,sdb,sdc,sdd
# part raid.100000 --size=500 --ondisk=sda
# part raid.100001 --size=500 --ondisk=sdb
# part raid.100002 --size=500 --ondisk=sdc
# part raid.100003 --size=500 --ondisk=sdd
# part raid.100007 --size=1 --grow --ondisk=sdd
# part raid.100006 --size=1 --grow --ondisk=sdc
# part raid.100005 --size=1 --grow --ondisk=sdb
# part raid.100004 --size=1 --grow --ondisk=sda
# raid /boot --fstype ext3 --level=RAID1 --device=md0 raid.100000 raid.100001 raid.100002 raid.100003
# raid pv.100008 --fstype "physical volume (LVM)" --level=RAID10 --device=md1 raid.100004 raid.100005 raid.100006 raid.100007
# volgroup vg --pesize=65536 pv.100008
# logvol swap --fstype swap --name=SystemSwap --vgname=vg --size=8000
# logvol / --fstype ext3 --name=SystemRoot --vgname=vg --size=19968
%post
## The post install is where it gets interesting
## Change to virtual termial 3 then download the eucalyptus rpms and install
exec < /dev/tty3 > /dev/tty3
chvt 3
echo
echo "################################"
echo "# Running Post Configuration #"
echo "################################"
(
set -x
# /dev/hda and /dev/hdb are cdrom drives on this box, don't allow lvm to look for them
sed -iksinstall 'sX filter = \[ "a/\.\*/" \]X filter = \[ "r|/dev/hda|", "r|/dev/hdb|", "a/\.\*/" \]X' /etc/lvm/lvm.conf
system-config-securitylevel-tui --disabled -q
system-config-securitylevel-tui --selinux=disabled -q
ntpdate pool.ntp.org

#yum install -y xen
sed -iksinstall 's/#(xend-http-server no)/(xend-http-server yes)/' /etc/xen/xend-config.sxp
sed -iksinstall 's/#(xend-address localhost)/(xend-address localhost)/' /etc/xen/xend-config.sxp
service xend restart

#yum install -y java-1.6.0-openjdk ant ant-nodeps dhcp bridge-utils

echo options loop max_loop=256 > /etc/modprobe.d/moreloops.conf
depmod -a
rmmod loop
modprobe loop

mkdir -p /root/euca
cd /root/euca
curl -O "http://eucalyptussoftware.com/downloads/releases/eucalyptus-1.6.1-centos-x86_64.tar.gz"
tar xvfz eucalyptus-1.6.1-centos-x86_64.tar.gz
rpm -Uvg eucalyptus-1.6.1-centos-x86_64/eucalyptus-1.6.1-rpm-deps-x86_64/*rpm
rpm -Uvg eucalyptus-1.6.1-centos-x86_64/*rpm

curl -O http://eucalyptussoftware.com/downloads/releases/euca2ools-1.1-centos-x86_64.tar.gz
tar xvfz euca2ools-1.1-centos-x86_64.tar.gz
rpm -Uvg euca2ools-1.1-centos-x86_64/*rpm

) 2>&1 | /usr/bin/tee /var/log/post_install.log
chvt 1


%packages
@base
@core
@editors
@emacs
@text-internet
@xen
keyutils
iscsi-initiator-utils
trousers
bridge-utils
fipscheck
device-mapper-multipath
emacs
emacs-nox
-aspell
-bluez-utils
-emacs-leim
-psgml
-emacspeak
-slrn
-fetchmail
-mutt
-cadaver
-gnome-applet-vm
ntp
httpd
swig
java-1.6.0-openjdk
ant
ant-nodeps
dhcp
bridge-utils



When the system comes up, run the following to get a simple standalone eucalyptus running.





# make sure these services are started
service eucalyptus-cloud start
service eucalyptus-cc start
service eucalyptus-nc start

# Might want to replace 127.0.0.1 with your external IP
euca_conf --register-walrus 127.0.0.1
euca_conf --register-cluster mycluster 127.0.0.1
euca_conf --register-sc mycluster 127.0.0.1
euca_conf --register-nodes "127.0.0.1"
euca_conf --get-credentials euca-admin-cred.zip
mkdir ~/.euca
unzip euca-admin-cred.zip -d ~/.euca



Download the euca-centos-5.3 image and untar it, the bundle, upload, and register the kernel, ramdisk, and machine images.





# source eucarc
. .euca/eucarc

#kernel
euca-bundle-image --kernel true --image ./euca-centos-5.3-x86_64/xen-kernel/vmlinuz-2.6.27.21-0.1-xen
euca-upload-bundle --bucket centos-kernel-bucket --manifest /tmp/vmlinuz-2.6.27.21-0.1-xen.manifest.xml
euca-register centos-kernel-bucket/vmlinuz-2.6.27.21-0.1-xen.manifest.xml

#ramdisk
euca-bundle-image --ramdisk true --image ./euca-centos-5.3-x86_64/xen-kernel/initrd-2.6.27.21-0.1-xen
euca-upload-bundle --bucket centos-ramdisk-bucket --manifest /tmp/initrd-2.6.27.21-0.1-xen.manifest.xml
euca-register centos-ramdisk-bucket/initrd-2.6.27.21-0.1-xen.manifest.xml

#euca machine image
euca-bundle-image --image ./euca-centos-5.3-x86_64/centos.5-3.x86-64.img
euca-upload-bundle --bucket centos-root-bucket --manifest /tmp/centos.5-3.x86-64.img.manifest.xml
euca-register centos-root-bucket/centos.5-3.x86-64.img.manifest.xml




Keep trace of the emi, eki, and eri id's that are created and use them to start a new instance of centos:





#ssh keypair creation
euca-add-keypair adminkey > ~/.ssh/id_rsa
euca-describe-keypairs
# KEYPAIR adminkey 95:d5:6a:de:a5:7c:6e:35:ed:61:1b:bf:2c:c9:54:6d:a7:f5:c6:24

euca-run-instances emi-XXXXXXX --kernel eki-XXXXXXX --ramdisk eri-XXXXXX -t c1.medium -k adminkey




Still a work in progress, but feel free to comment.

No comments: