[Ovirt-devel] [PATCH appliance] new ovirt appliance implementation using oVirt server installer

Joey Boggs jboggs at redhat.com
Wed Sep 16 16:33:32 UTC 2009


Mohammed Morsi wrote:
>   - checkout appliance
>   - make rpms
>   - rpm -ivh ovirt-appliance.rpm
>   - /usr/sbin/ovirt-appliance-ctrl install
>
>   The install process will take a while, after which you can
>   access the server by going to http://192.168.50.2/ovirt at
>   which you can boot and manage vms on your host.
> ---
>  .gitignore                        |   17 +--
>  Makefile.am                       |   56 +++++++
>  autogen.sh                        |   66 ++++++++
>  configure.ac                      |   11 ++
>  data/appliance.ks                 |   82 ++++++++++
>  data/ifcfg-breth0                 |    4 +
>  data/network.xml                  |    9 +
>  ovirt-appliance.spec.in           |   52 +++++++
>  scripts/ovirt-appliance-ctrl      |   56 +++++++
>  scripts/ovirt-appliance-functions |  297 +++++++++++++++++++++++++++++++++++++
>  10 files changed, 639 insertions(+), 11 deletions(-)
>  create mode 100644 Makefile.am
>  create mode 100755 autogen.sh
>  create mode 100644 configure.ac
>  create mode 100644 data/appliance.ks
>  create mode 100644 data/ifcfg-breth0
>  create mode 100644 data/network.xml
>  create mode 100644 ovirt-appliance.spec.in
>  create mode 100755 scripts/ovirt-appliance-ctrl
>  create mode 100644 scripts/ovirt-appliance-functions
>
> diff --git a/.gitignore b/.gitignore
> index 1221087..5b4f7d7 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -1,22 +1,17 @@
> -*~
> -INSTALL
>  Makefile
>  Makefile.in
>  aclocal.m4
> -autom4te.cache/
> +autom4te.cache
>  config.h
>  config.h.in
>  config.log
>  config.status
>  configure
> +depcomp
>  install-sh
>  missing
> -ovirt-appliance-manifests*.tar
> -ovirt-appliance-*-*.tar*
> -ovirt-appliance-*-*.tar.sha1sum
> -ovirt-appliance-*.tar.gz
> -ovirt-appliance.spec
> -ovirt-authorized_keys
> -repos.ks
>  stamp-h1
> -tmp
> +ovirt-appliance*.gz
> +ovirt-appliance.spec
> +schema.rb
> +log/
> diff --git a/Makefile.am b/Makefile.am
> new file mode 100644
> index 0000000..7a104ce
> --- /dev/null
> +++ b/Makefile.am
> @@ -0,0 +1,56 @@
> +# Copyright (C) 2008 Red Hat, Inc.
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> +# MA  02110-1301, USA.  A copy of the GNU General Public License is
> +# also available at http://www.gnu.org/copyleft/gpl.html.
> +
> +OVIRT_CACHE_DIR	?= $(HOME)/ovirt-cache
> +
> +EXTRA_DIST =			\
> +  .gitignore			\
> +  ovirt-appliance.spec		\
> +  ovirt-appliance.spec.in	\
> +  scripts			\
> +  data
> +
> +DISTCLEANFILES = $(PACKAGE)-$(VERSION).tar.gz
> +
> +# For Release: 0..., set _ovirt_dev=1 so that we get extra_release.GIT-
> +# annotated rpm version strings.
> +_ovirt_dev = \
> + $(shell grep -q '^[[:space:]]*Release:[[:space:]]*0' \
> +   $(srcdir)/*.spec.in && echo 1 || :)
> +
> +git_head	= $$(git log -1 --pretty=format:%h)
> +GIT_RELEASE	= $$(date --utc +%Y%m%d%H%M%S)git$(git_head)
> +RPMDIR		= $$(rpm --eval '%{_rpmdir}')
> +RPM_FLAGS	= --define "ovirt_cache_dir $(OVIRT_CACHE_DIR)"
> +RPM_FLAGS	+= $(if $(_ovirt_dev),--define "extra_release .$(GIT_RELEASE)")
> +
> +rpms: dist
> +	rpmbuild $(RPM_FLAGS) -ta $(distdir).tar.gz
> +
> +srpms: dist
> +	rpmbuild $(RPM_FLAGS) -ts $(distdir).tar.gz
> +
> +publish: rpms
> +	mkdir -p $(OVIRT_CACHE_DIR)
> +	rsync -aq $(shell rpm --eval '%{_rpmdir}')/ $(OVIRT_CACHE_DIR)/ovirt/
> +	rsync -aq $(shell rpm --eval '%{_srcrpmdir}')/ $(OVIRT_CACHE_DIR)/ovirt/src
> +	createrepo $(OVIRT_CACHE_DIR)/ovirt
> +
> +genlangs:
> +	cd src && rake updatepo && rake makemo
> +
> +.PHONY: rpms publish srpms genlangs
> diff --git a/autogen.sh b/autogen.sh
> new file mode 100755
> index 0000000..6b0970f
> --- /dev/null
> +++ b/autogen.sh
> @@ -0,0 +1,66 @@
> +#!/bin/sh
> +# Run this to generate configure and Makefile
> +
> +srcdir=`dirname $0`
> +test -z "$srcdir" && srcdir=.
> +
> +THEDIR=`pwd`
> +(
> +  cd $srcdir
> +  die=0
> +
> +  (autoconf --version) < /dev/null > /dev/null 2>&1 || {
> +	  echo
> +	  echo "You must have autoconf installed."
> +	  echo "Download the appropriate package for your distribution,"
> +	  echo "or see http://www.gnu.org/software/autoconf"
> +	  die=1
> +  }
> +
> +  # Require libtool only if one of of LT_INIT,
> +  # AC_PROG_LIBTOOL, AM_PROG_LIBTOOL is used in configure.ac.
> +  grep -E '^[[:blank:]]*(LT_INIT|A[CM]_PROG_LIBTOOL)' configure.ac >/dev/null \
> +      && {
> +    (libtool --version) < /dev/null > /dev/null 2>&1 || {
> +	  echo
> +	  echo "You must have libtool installed."
> +	  echo "Download the appropriate package for your distribution,"
> +	  echo "or see http://www.gnu.org/software/libtool"
> +	  die=1
> +    }
> +  }
> +
> +  (automake --version) < /dev/null > /dev/null 2>&1 || {
> +	  echo
> +	  die=1
> +	  echo "You must have automake installed."
> +	  echo "Download the appropriate package for your distribution,"
> +	  echo "or see http://www.gnu.org/software/automake"
> +  }
> +
> +  test $die = 1 && exit 1
> +
> +  test -f ovirt-appliance.spec.in || {
> +	  echo "You must run this script in the top-level directory"
> +	  exit 1
> +  }
> +
> +  if test -z "$*"; then
> +	  echo "I am going to run ./configure with no arguments - if you wish "
> +	  echo "to pass any to it, please specify them on the $0 command line."
> +  fi
> +
> +  aclocal
> +
> +  # Run autoheader only if needed
> +  grep '^[[:blank:]]*AC_CONFIG_HEADERS' configure.ac >/dev/null && autoheader
> +
> +  automake --add-missing
> +  autoconf
> +  ./configure "$@"
> +)
> +
> +if test "x$OBJ_DIR" != x; then
> +    mkdir -p "$OBJ_DIR"
> +    cd "$OBJ_DIR"
> +fi
> diff --git a/configure.ac b/configure.ac
> new file mode 100644
> index 0000000..db3bc30
> --- /dev/null
> +++ b/configure.ac
> @@ -0,0 +1,11 @@
> +AC_INIT([ovirt-appliance], [0.101], [ovirt-devel at redhat.com])
> +AM_INIT_AUTOMAKE([-Wall -Werror foreign -Wno-portability tar-pax])
> +AC_PROG_CC
> +AC_CONFIG_HEADERS([config.h])
> +
> +# If using gcc and default CFLAGS, enable some warnings.
> +test x"$ac_ct_CC:$CFLAGS" = 'xgcc:-g -O2' \
> +  && CFLAGS="$CFLAGS -Wshadow -Wall -Werror"
> +
> +AC_CONFIG_FILES([Makefile ovirt-appliance.spec])
> +AC_OUTPUT
> diff --git a/data/appliance.ks b/data/appliance.ks
> new file mode 100644
> index 0000000..39a821c
> --- /dev/null
> +++ b/data/appliance.ks
> @@ -0,0 +1,82 @@
> +install
> +
> +lang en_US.UTF-8
> +keyboard us
> +
> +# setup two nics, one public, one on the private libvirt network we setup
> +network --device=eth0 --bootproto=static --ip=192.168.50.2 --netmask=255.255.255.0 --onboot=on --nameserver=192.168.50.1
> +network --device=eth1 --onboot=on
> +
> +# Root password is 'ovirt'
> +rootpw --iscrypted Xa8QeYfWrtscM
> +
> +firewall --disabled
> +authconfig --enableshadow --enablemd5
> +selinux --disabled
> +
> +# NOTE: ntp/ntpdate need to stay in this list to ensure that time on the
> +# appliance is correct prior to the ovirt-server-installer being run.  Otherwise you
> +# get Kerberos errors
> +services --disabled=libvirtd,postgresql --enabled=network,iptables,ntpdate,acpid,sshd
> +timezone --utc UTC
> +text
> +
> +bootloader --location=mbr
> +clearpart --all --drives=sda
> +part /boot  --ondisk=sda --fstype=ext3 --size=100
> +part /      --ondisk=sda --fstype=ext3 --size=10000
> +part swap   --ondisk=sda --fstype=swap --size=512
> +reboot
> +
> +repo --name=f11 --mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-11&arch=x86_64
> +repo --name=f11-updates --mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=updates-released-f11&arch=x86_64
> +#repo --name=f11-rawhide --mirrorlist=http://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=x86_64
> +repo --name=ovirtorg --baseurl=http://ovirt.org/repos/ovirt/11/x86_64/
> +repo --name=ovirt --baseurl=file://OVIRT_REPO
> +
> +%packages --excludedocs --nobase
> +%include /usr/share/appliance-os/includes/base-pkgs.ks
> +ntpdate
> +openssh-server
> +openssh-clients
> +ovirt-server
> +ovirt-server-installer
> +ovirt-node-image
> +ovirt-node-image-pxe
> +%end
> +
> +%post
> +# setup automatic ssh login
> +mkdir -p /root/.ssh
> +chmod 700 /root/.ssh
> +cat > /root/.ssh/authorized_keys << \EOF
> +OVIRT_SSH_KEY
> +EOF
> +chmod 600 /root/.ssh/authorized_keys
> +
> +# setup the ovirt installer answers
> +cat > /root/ovirt-installer-answers << \EOF
> +y
> +eth1
> +eth0
> +server.ovirt-appliance.com
> +n
> +n
> +192.168.50
> +3
> +50
> +ovirt-appliance.com
> +
> +y
> +n
> +cobbler
> +cobbler
> +cobbler
> +v23zj59an
> +v23zj59an
> +ovirt-appliance.com
> +ovirt
> +ovirt
> +EOF
> +
> +%end
> diff --git a/data/ifcfg-breth0 b/data/ifcfg-breth0
> new file mode 100644
> index 0000000..02955b2
> --- /dev/null
> +++ b/data/ifcfg-breth0
> @@ -0,0 +1,4 @@
> +DEVICE=breth0
> +ONBOOT=yes
> +TYPE=Bridge
> +PEERNTP=yes
> diff --git a/data/network.xml b/data/network.xml
> new file mode 100644
> index 0000000..8bce0db
> --- /dev/null
> +++ b/data/network.xml
> @@ -0,0 +1,9 @@
> +<network>
> +  <name>ovirt-appliance</name>
> +  <uuid>OVIRT_NETWORK_UUID</uuid>
> +  <ip address='192.168.50.1' netmask='255.255.255.0'>
> +    <dhcp>
> +      <host mac='54:52:00:1a:cb:f0' name='server.ovirt-appliance.com' ip='192.168.50.2' />
> +    </dhcp>
> +  </ip>
> +</network>
> diff --git a/ovirt-appliance.spec.in b/ovirt-appliance.spec.in
> new file mode 100644
> index 0000000..61bdc8d
> --- /dev/null
> +++ b/ovirt-appliance.spec.in
> @@ -0,0 +1,52 @@
> +%define app_root %{_datadir}/%{name}
> +
> +Summary: oVirt Appliance
> +Name: ovirt-appliance
> +Version: @VERSION@
> +Release: 1%{?dist}%{?extra_release}
> +Source0: %{name}-%{version}.tar.gz
> +License: GPLv2+
> +Group: Applications/System
> +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
> +BuildArch: noarch
> +URL: http://ovirt.org/
> +#Requires: 
> +
> +%description
> +The oVirt Appliance scripts to install on a Fedora Host
> +
> +%prep
> +%setup -q
> +
> +%build
> +
> +%install
> +%{__rm} -rf %{buildroot}
> +mkdir       %{buildroot}
> +
> +%{__install} -d -m0755      %{buildroot}%{_sbindir}
> +%{__install} -d -m0755      %{buildroot}%{app_root}
> +%{__install} -d -m0755      %{buildroot}%{app_root}/backup
> +%{__cp}      -a scripts/*   %{buildroot}%{app_root}
> +%{__cp}      -a data/*      %{buildroot}%{app_root}
> +%{__ln_s}    %{app_root}/ovirt-appliance-ctrl %{buildroot}%{_sbindir}/
> +
> +%clean
> +%{__rm} -rf %{buildroot}
> +
> +%files
> +%defattr(-,root,root,0755)
> +%{app_root}
> +%{_sbindir}/ovirt-appliance-ctrl
> +
> +%changelog
> +* Wed Sep 02 2009 Mohammed Morsi <mmorsi at redhat.com> 0.100-1
> +- Revamped entire appliance project to fix it bring it up 
> +  to speed with the current implementation of oVirt
> +* Wed Nov 05 2008 Perry Myers <pmyers at redhat.com> 0.96
> +- Removed appliance building from rpm.  RPM now just contains tools to
> +  download image and install it
> +* Sun Sep 14 2008 Perry Myers <pmyers at redhat.com> 0.92-1
> +- Added Requires on libvirt/kvm
> +* Fri Sep 05 2008 Perry Myers <pmyers at redhat.com> 0.92-1
> +- Initial build.
> diff --git a/scripts/ovirt-appliance-ctrl b/scripts/ovirt-appliance-ctrl
> new file mode 100755
> index 0000000..2ac86c6
> --- /dev/null
> +++ b/scripts/ovirt-appliance-ctrl
> @@ -0,0 +1,56 @@
> +#!/bin/bash
> +# Control script for the oVirt appliance.
> +#
> +# Use this to setup / install a server appliance running in a vm 
> +# and a node configuration on the baremetal host.
> +#
> +# This must be run as a super-user to be successful.
> +#
> +# Copyright (C) 2008 Red Hat, Inc.
> +# Written by Mohammed Morsi <mmorsi at redhat.com>
> +# 
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +# 
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +# 
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> +# MA  02110-1301, USA.  A copy of the GNU General Public License is
> +# also available at http://www.gnu.org/copyleft/gpl.html.
> +
> +. /etc/init.d/functions
> +. /usr/share/ovirt-appliance/ovirt-appliance-functions
> +
> +case "$1" in
> +   install)
> +     bootstrap_setup
> +     build_rpms  # would like to make this step optional
> +     setup_network
> +     setup_server_ssh_access
> +     create_server_vm
> +     run_server_installer
> +     setup_server_env
> +     backup_node_env
> +     setup_node_env
> +     ;;
> +   uninstall)
> +     bootstrap_teardown
> +     destroy_server_vm
> +     destroy_network
> +     restore_node_env
> +     echo "reboot to complete the uninstall process"
> +     ;;
> +   *)
> +     echo "Usage: ovirt-appliance-ctrl {install|uninstall}"
> +     exit 1
> +     ;;
> +esac
> +
> +exit $RETVAL
> +
> diff --git a/scripts/ovirt-appliance-functions b/scripts/ovirt-appliance-functions
> new file mode 100644
> index 0000000..3ed77fb
> --- /dev/null
> +++ b/scripts/ovirt-appliance-functions
> @@ -0,0 +1,297 @@
> +#!/bin/bash
> +# Function definitions part of the oVirt appliance setup utility
> +#
> +# Copyright (C) 2008 Red Hat, Inc.
> +# Written by Mohammed Morsi <mmorsi at redhat.com>
> +# 
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +# 
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +# 
> +# You should have received a copy of the GNU General Public License
> +# along with this program; if not, write to the Free Software
> +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
> +# MA  02110-1301, USA.  A copy of the GNU General Public License is
> +# also available at http://www.gnu.org/copyleft/gpl.html.
> +
> +OVIRT_APPLIANCE_DIR="/usr/share/ovirt-appliance"
> +OVIRT_APPLIANCE_BACKUP_DIR="$OVIRT_APPLIANCE_DIR/backup"
> +OVIRT_APPLIANCE_WORKING_DIR="`mktemp -d`"
> +
> +# perform any common setup initialization routines
> +bootstrap_setup() {
> +   unalias cp
> +
> +   # set selinux to permissive mode
> +   /usr/sbin/setenforce 0
> +
> +   # make sure we aren't localhost so the server can lookup our hostname
> +   hostname="`hostname`"
> +   if [ "$hostname"  == "localhost" -o "$hostname" == "localhost.localdomain" -o "$hostname" == "" ]; then
> +      echo "hostname cannot be localhost (server needs to be able to resolve it)"
> +      hostname host.ovirt-appliance.com
> +      cp -f /etc/sysconfig/network $OVIRT_APPLIANCE_BACKUP_DIR
> +      sed -i s/HOSTNAME.*$/HOSTNAME\=host\.ovirt-appliance\.com/g /etc/sysconfig/network
> +      hostname host.ovirt-appliance.com
> +   fi
> +   
> +   # install the oVirt release rpm if not present
> +   rpm -q ovirt-release || rpm -ivh http://ovirt.org/repos/ovirt/ovirt-release-LATEST.noarch.rpm
> + 
> +   # update our system to have the latest packages, install base packages
> +   yum install -y yum-fastestmirror libvirt
> +   yum update  -y --enablerepo=ovirt
> +
> +   # copy the files we will be modifying into the working dir
> +   cp -f $OVIRT_APPLIANCE_DIR/appliance.ks  $OVIRT_APPLIANCE_WORKING_DIR/
> +   cp -f $OVIRT_APPLIANCE_DIR/network.xml   $OVIRT_APPLIANCE_WORKING_DIR/
> +   cp -f $OVIRT_APPLIANCE_DIR/ifcfg-breth0  $OVIRT_APPLIANCE_WORKING_DIR/
> +
> +   # start up libvirt
> +   service libvirtd start
> +}
> +
> +# perform any common teardown initialization routines
> +bootstrap_teardown() {
> +   unalias cp
> +
> +   # restore /etc/sysconfig/network if modified
> +   test -f $OVIRT_APPLIANCE_BACKUP_DIR/network && cp -f $OVIRT_APPLIANCE_BACKUP_DIR/network /etc/sysconfig/
> +}
> +
> +# build the neccessary oVirt rpms to install the appliance
> +build_rpms() {
> +   # install dependencies
> +   yum install -y --enablerepo=ovirt                           \
> +                  git automake autoconf gcc rpm-build          \
> +                  ruby ruby-devel rubygem-gettext rubygem-rake \
> +                  libvirt-devel dbus-devel hal-devel hardlink  \
> +                  livecd-tools appliance-tools                 \
> +                  publican publican-ovirt 
> +
> +   ### checkout / build oVirt
> +
> +   # create a build directory, and cd into it
> +   saved_dir=`pwd`
> +   OVIRT_CHECKOUT_DIR=`mktemp -d`
> +   cd $OVIRT_CHECKOUT_DIR
> +
> +   # clone the release project
> +   git clone git://ovirt.org/ovirt-release release
> +
> +   # setup the cache dir and make update and publish
> +   export OVIRT_CACHE_DIR=$(pwd)/cache
> +   OVIRT_REPO=$OVIRT_CACHE_DIR/ovirt
> +   make -f release/ovirt.mk update publish
> +
> +   # restore working directory
> +   cd $saved_dir
> +
> +   # swap in the correct local repo in the kickstart
> +   sed -i s~OVIRT_REPO~$OVIRT_REPO~g $OVIRT_APPLIANCE_WORKING_DIR/appliance.ks
> +}
> +
> +# setup a libvirt network to act as the oVirt admin network
> +setup_network() {
> +   # generate a network id and swap it into the network config
> +   sed -i s/OVIRT_NETWORK_UUID/`uuidgen`/g $OVIRT_APPLIANCE_WORKING_DIR/network.xml
> +
> +   # write the network config to the appropriate place
> +   cp -f $OVIRT_APPLIANCE_WORKING_DIR/network.xml /etc/libvirt/qemu/networks/ovirt-appliance.xml
> +
> +   # define and start the network via libvirt, set to autostart
> +   virsh net-define /etc/libvirt/qemu/networks/ovirt-appliance.xml
> +   virsh net-start ovirt-appliance
> +   virsh net-autostart ovirt-appliance
> +
> +   # setup breth0 as its needed to start vms with a network 
> +   # (backing the old config up first)
> +   test -f /etc/sysconfig/network-scripts/ifcfg-breth0 && \
> +      cp -f /etc/sysconfig/network-scripts/ifcfg-breth0 $OVIRT_APPLIANCE_BACKUP_DIR/ifcfg-breth0.bak
> +   cp -f $OVIRT_APPLIANCE_WORKING_DIR/ifcfg-breth0 /etc/sysconfig/network-scripts/
> +   ifup breth0
> +}
> +
> +# destroy / remove the network that was setup
> +destroy_network() {
> +  # destroy, undefine, and un-autostart the network
> +  virsh net-destroy  ovirt-appliance
> +  virsh net-undefine ovirt-appliance
> +  rm -f /etc/libvirt/qemu/networks/ovirt-appliance.xml
> +
> +  # restore ifcfg-breth0 backup if neccessary
> +  test -f $OVIRT_APPLIANCE_BACKUP_DIR/ifcfg-breth0.bak && \
> +    cp -f $OVIRT_APPLIANCE_BACKUP_DIR/ifcfg-breth0.bak /etc/sysconfig/network-scripts/
> +}
> +
> +# setup no-password ssh login for the server
> +setup_server_ssh_access() {
> +   # create convenience env variables for the ssh params/cmds
> +   SSHKEY=~/.ssh/id_ovirt_appliance
> +   remote_target="root at 192.168.50.2"
> +   ssh_cmd="ssh -i $SSHKEY -o StrictHostKeyChecking=no \
> +                -o UserKnownHostsFile=/dev/null $remote_target"
> +   scp_cmd="scp -i $SSHKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
> +
> +   # generate new ssh key if not found
> +   if [ ! -r $SSHKEY ]; then
> +     mkdir -p $(dirname "$SSHKEY")
> +     ssh-keygen -q -t rsa -N "" -f $SSHKEY
> +   fi
> +
> +   # implant ssh key into the server kickstart
> +   sed -i "s~OVIRT_SSH_KEY~`ssh-keygen -y -f $SSHKEY`~g" $OVIRT_APPLIANCE_WORKING_DIR/appliance.ks
> +}
> +
> +# create and start the server vm
> +create_server_vm() {
> +   # install dependencies
> +   yum install -y --enablerepo=ovirt   \
> +                  appliance-os  python-virtinst kvm 
> +
> +
> +   # save the current dir, and enter the working dir
> +   saved_dir=`pwd`
> +   cd $OVIRT_APPLIANCE_WORKING_DIR
> +
> +   # remove the appliance image if it exists
> +   test -d ovirt-appliance && rm -rf ovirt-appliance
> +
> +   # create the appliance image
> +   appliance-creator --config appliance.ks --name ovirt-appliance \
> +                     -f raw --vmem=2048 -d -v
> +   
> +   # define / start the vm via libvirt, set to autostart
> +   virt-image --network=network:ovirt-appliance ovirt-appliance/ovirt-appliance.xml
> +   virsh define /etc/libvirt/qemu/ovirt-appliance.xml
> +   virsh autostart ovirt-appliance
> +
> +   # restore the saved dir
> +   cd $saved_dir
> +
> +   for i in $(seq 1 60); do
> +     $ssh_cmd exit && break
> +     sleep 10
> +   done
> +}
> +
> +# destroy the server vm that was setup
> +destroy_server_vm() {
> +  # at some point, find a way to destroy the oVirt
> +  #  managed vms as well
> +  virsh destroy  ovirt-appliance
> +  virsh undefine ovirt-appliance
> +}
> +
> +# run the oVirt server installation process on the server vm
> +run_server_installer() {
> +   # run the actual installer w/ pre-specified answers (see kickstart)
> +   $ssh_cmd "ovirt-installer < /root/ovirt-installer-answers"
> +
> +   # XXX for whatever reason ovirt-node-image-pxe isn't setting
> +   # up the pxe correctly for the node-image iso, just put this
> +   # here until we figure out why
> +   $ssh_cmd "cd /usr/share/ovirt-node-image/ && \ 
> +             rm -rf tftpboot && \
> +             livecd-iso-to-pxeboot ovirt-node-image.iso"
> +
> +   # XXX another hack needed here to install the old fedora-ds-base
> +   # instead of the currently broken 389-ds-base
> +   # https://bugzilla.redhat.com/show_bug.cgi?id=518544
> +   # http://ovirt.org/install-instructions.html#free-ipa-warning
> +   $ssh_cmd "yum install perl-Mozilla-LDAP nss-tools mozldap-tools  lm_sensors-devel net-snmp-devel openssl-devel -y"
> +   $ssh_cmd "rpm -ivh http://kojipkgs.fedoraproject.org/packages/fedora-ds-base/1.2.0/4.fc11/x86_64/fedora-ds-base-1.2.0-4.fc11.x86_64.rpm"
> +   
> +   # run the ace portion of the installer, actuall performing the oVirt installation
> +   $ssh_cmd "ace -d install ovirt > /root/install.log"
> +}
> +
> +# perform everything else needed to get the oVirt server
> +# to work on a single machine install
> +setup_server_env() {
> +   # set server resolv.conf to avoid an infinite loop.
> +   # set it to the server nameserver, followed by the 
> +   # nameservers as defined in the host's resolv.conf
> +   nameservers=`grep nameserver /etc/resolv.conf`
> +   nameservers="nameserver 192.168.50.2
> +$nameservers"
> +   $ssh_cmd "echo '$nameservers' > /etc/resolv.conf"
> +
> +   # prepend this hostname onto server's hosts and restart the dns service,
> +   # required for kerberos and other components that need to lookup the host
> +   $ssh_cmd "echo '192.168.50.1 `hostname`'|cat - /etc/hosts > /tmp/out && mv -f /tmp/out /etc/hosts"
> +   $ssh_cmd "service dnsmasq restart"
> +
> +   # add priciples to the kerberos server allowing node access
> +   #$ssh_cmd /usr/bin/ovirt-add-host `hostname` /usr/share/ovirt-server/ovirt.keytab
> +   $ssh_cmd "echo 'addprinc -randkey libvirt/`hostname`@OVIRT-APPLIANCE.COM' | kadmin.local"
> +   $ssh_cmd "echo 'addprinc -randkey qpidd/`hostname`@OVIRT-APPLIANCE.COM' | kadmin.local"
> +   $ssh_cmd "echo 'ktadd -k /usr/share/ipa/html/`hostname`-libvirt.tab libvirt/`hostname`@OVIRT-APPLIANCE.COM' | kadmin.local"
> +   $ssh_cmd "echo 'ktadd -k /usr/share/ipa/html/`hostname`-libvirt.tab qpidd/`hostname`@OVIRT-APPLIANCE.COM' | kadmin.local"
> +}
> +
> +# backup all config files modified by setup_node_env
> +backup_node_env() {
> +   test -f /etc/resolv.conf            && cp -f /etc/resolv.conf            $OVIRT_APPLIANCE_BACKUP_DIR
> +   test -f /etc/krb5.conf              && cp -f /etc/krb5.conf              $OVIRT_APPLIANCE_BACKUP_DIR
> +   test -f /etc/libvirt/krb5.tab/      && cp -f /etc/libvirt/krb5.tab       $OVIRT_APPLIANCE_BACKUP_DIR
> +   test -f /etc/sysconfig/libvirt-qpid && cp -f /etc/sysconfig/libvirt-qpid $OVIRT_APPLIANCE_BACKUP_DIR
> +   test -f /etc/sysconfig/matahari     && cp -f /etc/sysconfig/matahari     $OVIRT_APPLIANCE_BACKUP_DIR
> +}
> +
> +# perform everything else needed to get the oVirt node/host
> +# to work on a single machine install
> +setup_node_env() {
> +   # install dependencies
> +   yum install -y --enablerepo=ovirt   \
> +                  wget libvirt-qpid cyrus-sasl-gssapi
> +   #         selinux-policy-doc \
> +
> +   # sync up our system time w/ the server's ntp server
> +   ntpdate 192.168.50.2
> +
> +   # prepend the ovirt server's dns nameserver onto the local resolv.conf,
> +   # so that we can perform the appliance domain lookups
> +   echo "nameserver 192.168.50.2"|cat - /etc/resolv.conf > /tmp/out && mv -f /tmp/out /etc/resolv.conf
> +
> +   # grab the kerberos config
> +   wget -q --no-check-certificate http://192.168.50.2:80/ipa/config/krb5.ini -O /etc/krb5.conf
> +
> +   # grab key/ticket off the server, and initialize kerberos w/ it
> +   $scp_cmd $remote_target:/usr/share/ipa/html/`hostname`-libvirt.tab /etc/libvirt/krb5.tab
> +   /usr/kerberos/bin/kinit -k -t /etc/libvirt/krb5.tab qpidd/`hostname`
> +
> +   # setup the libvirt-qpid / matahari sysconfig
> +   echo "LIBVIRT_QPID_ARGS=\"--broker 192.168.50.2 --port 5672\""              >> /etc/sysconfig/libvirt-qpid
> +   echo "/usr/kerberos/bin/kinit -k -t /etc/libvirt/krb5.tab qpidd/`hostname`" >> /etc/sysconfig/libvirt-qpid
> +   echo "MATAHARI_ARGS=\"--broker 192.168.50.2 --port 5672\""                  >> /etc/sysconfig/matahari
> +   echo "/usr/kerberos/bin/kinit -k -t /etc/libvirt/krb5.tab qpidd/`hostname`" >> /etc/sysconfig/matahari
> +
> +   # restart libvirt and start libvirt-qpid
> +   service libvirtd restart
> +   service libvirt-qpid start
> +
> +   # install matahari (XXX yum install it when it is availabe in the repos)
> +   rpm -q matahari || rpm -ivh http://kojipkgs.fedoraproject.org/packages/matahari/0.0.4/4.fc11/x86_64/matahari-0.0.4-4.fc11.x86_64.rpm
> +   
> +   # and start it
> +   sudo service matahari start
> +   
> +   # run ovirt awake to register us w/ the server
> +   #bash checkout/node/scripts/ovirt-awake start 192.168.50.2 12120 /etc/libvirt/krb5.tab
> +
> +   # FIXME on reboot we need to setenforce 0, ifup breth0, resetup resolv.conf (on both server/node), start libvirt-qpid / matahari
> +}
> +
> +restore_node_env(){
> +   test -f $OVIRT_APPLIANCE_BACKUP_DIR/resolv.conf       && cp -f $OVIRT_APPLIANCE_BACKUP_DIR/resolv.conf  /etc
> +   test -f $OVIRT_APPLIANCE_BACKUP_DIR/krb5.conf         && cp -f $OVIRT_APPLIANCE_BACKUP_DIR/krb5.conf    /etc
> +   test -f $OVIRT_APPLIANCE_BACKUP_DIR/libvirt/krb5.tab/ && cp -f $OVIRT_APPLIANCE_BACKUP_DIR/krb5.tab     /etc
> +   test -f $OVIRT_APPLIANCE_BACKUP_DIR/libvirt-qpid      && cp -f $OVIRT_APPLIANCE_BACKUP_DIR/libvirt-qpid /etc/sysconfig
> +   test -f $OVIRT_APPLIANCE_BACKUP_DIR/matahari          && cp -f $OVIRT_APPLIANCE_BACKUP_DIR/matahari     /etc/sysconfig
> +}
>   
ack, works for me




More information about the ovirt-devel mailing list