Alan Pevec
2008-Jul-22 13:34 UTC
[Ovirt-devel] [PATCH] replace virt-install with appliance-creator in create-wui-appliance.sh
- use plain partitions in kickstart disk layout - use sparse files for iSCSI backing store (can't create LVMs on kpartx mappings) - add serial console to domain XML - option to produce qcow2 compressed image ovirt.org repo contains appliance-tools-002-1.fc9.noarch which works with unmodified livecd-tools-017.1-1.fc9.i386 --- build-all.sh | 23 ++----- wui-appliance/common-install.ks | 8 +-- wui-appliance/common-pkgs.ks | 5 +- wui-appliance/create-wui-appliance.sh | 118 ++++++++++++++------------------- wui-appliance/wui-devel.ks | 46 +++++++------ 5 files changed, 87 insertions(+), 113 deletions(-) diff --git a/build-all.sh b/build-all.sh index 26d6009..5819d37 100755 --- a/build-all.sh +++ b/build-all.sh @@ -35,7 +35,7 @@ Usage: $ME [-w] [-n] [-p init|update] [-s] [-a] [-c] [-v git|release|none] [-e e -p: update pungi repository (init or update) -s: include SRPMs and produce source ISO -a: updates all (WUI, Node, Appliance) - -c: cleanup old repos (pungi and ovirt) + -c: cleanup local repos (pungi and ovirt) -v: update version type (git, release, none) default is git -e: ethernet device to use as bridge (i.e. eth1) -h: display this help and exit @@ -65,10 +65,10 @@ while getopts wnp:sahcv:e: c; do n) update_node=1;; p) update_pungi=$OPTARG;; s) include_src=1;; - a) update_wui=1; update_node=1; update_app=1; update_pungi=init;; + a) update_wui=1; update_node=1; update_app=1;; c) cleanup=1;; - e) bridge=$OPTARG;; v) version_type=$OPTARG;; + e) bridge=$OPTARG;; h) help=1;; '?') err=1; warn "invalid option: \`-$OPTARG'";; :) err=1; warn "missing argument to \`-$OPTARG' option";; @@ -234,23 +234,17 @@ EOF fi # build oVirt admin appliance -# NOTE: create-wui-appliance.sh must be run as root if [ $update_app == 1 ]; then - # FIXME: This can go away once we have livecd tools building the appliances - VIRBR=$(virsh net-dumpxml default \ - | sed -n "s/^ *<ip address='\([^']*\)' .*/\1/p") - test -z $VIRBR && die "Could not get ip address of default network for app" - cd $BASE/wui-appliance make clean cat > repos.ks << EOF -url --url http://$VIRBR/pungi/$F_REL/$ARCH/os +url --url http://localhost/pungi/$F_REL/$ARCH/os EOF excludepkgs if [[ -f $OVIRT/repodata/repomd.xml ]]; then excludepkgs='--excludepkgs=ovirt*' cat >> repos.ks << EOF -repo --name=ovirt --baseurl=http://$VIRBR/ovirt +repo --name=ovirt --baseurl=http://localhost/ovirt EOF fi cat >> repos.ks << EOF @@ -258,7 +252,6 @@ repo --name=ovirt-org --baseurl=http://ovirt.org/repos/ovirt/$F_REL/$ARCH $exclu EOF make - cp wui-rel.ks $OVIRT bridge_flag if [ -n "$bridge" ]; then @@ -266,11 +259,7 @@ EOF fi ./create-wui-appliance.sh \ - -t http://$VIRBR/pungi/$F_REL/$ARCH/os \ - -k http://$VIRBR/ovirt/wui-rel.ks \ + -k wui-rel.ks \ $bridge_flag - set +x - echo "oVirt appliance setup started, check progress with:" - echo -n " virt-viewer ovirt-appliance" fi diff --git a/wui-appliance/common-install.ks b/wui-appliance/common-install.ks index 36eb28d..c9cbb0a 100644 --- a/wui-appliance/common-install.ks +++ b/wui-appliance/common-install.ks @@ -16,9 +16,7 @@ bootloader --location=mbr --driveorder=sda # not guaranteed to work zerombr clearpart --all --drives=sda -part /boot --fstype ext3 --size=100 --ondisk=sda -part pv.2 --size=1 --grow --ondisk=sda -volgroup VolGroup00 --pesize=32768 pv.2 -logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=512 -logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow +part /boot --ondisk=sda --fstype=ext3 --size=100 +part / --ondisk=sda --fstype=ext3 --size=5000 +part swap --ondisk=sda --fstype=swap --size=512 reboot diff --git a/wui-appliance/common-pkgs.ks b/wui-appliance/common-pkgs.ks index 34546a7..7a8866c 100644 --- a/wui-appliance/common-pkgs.ks +++ b/wui-appliance/common-pkgs.ks @@ -1,4 +1,5 @@ @core +kernel cronie policycoreutils chkconfig @@ -19,6 +20,8 @@ firefox gtk-vnc-plugin xorg-x11-xauth virt-viewer +rhpl cobbler bind-utils - +augeas +/usr/sbin/lokkit diff --git a/wui-appliance/create-wui-appliance.sh b/wui-appliance/create-wui-appliance.sh index d77ba16..2a3eb3c 100755 --- a/wui-appliance/create-wui-appliance.sh +++ b/wui-appliance/create-wui-appliance.sh @@ -11,40 +11,31 @@ IMGSIZE=6000M ISO IMGDIR_DEFAULT=/var/lib/libvirt/images NET_SCRIPTS=/etc/sysconfig/network-scripts -ARCH_DEFAULT=$(uname -m) NAME=ovirt-appliance BRIDGENAME=ovirtbr -ARCH=$ARCH_DEFAULT IMGDIR=$IMGDIR_DEFAULT -CONSOLE_FLAG=--noautoconsole usage() { case $# in 1) warn "$1"; try_h; exit 1;; esac cat <<EOF -Usage: $ME [-i install_iso | -t install_tree] [-d image_dir] [-a x86_64|i686] [-k kickstart] [-e eth] - -i: location of installation ISO - -t: location of installation tree - -k: URL of kickstart file for use with installation tree - -o: Display virt-viewer window during install (implied by -i option) +Usage: $ME [-c] [-d image_dir] [-k kickstart] [-e eth] -d: directory to place virtual disk (default: $IMGDIR_DEFAULT) - -a: architecture for the virtual machine (default: $ARCH_DEFAULT) + -c: compress the image (qcow2 compressed) + -k: appliance kickstart file -e: ethernet device to use as bridge (i.e. eth1) -h: display this help and exit EOF } err=0 help=0 -viewer=0 +compress=0 bridge-while getopts :a:d:i:t:k:ohe: c; do +while getopts :d:k:he: c; do case $c in - i) ISO=$OPTARG;; - t) TREE=$OPTARG;; - k) KICKSTART=$OPTARG;; d) IMGDIR=$OPTARG;; - a) ARCH=$OPTARG;; - o) CONSOLE_FLAG=;; + c) compress=1;; + k) KICKSTART=$OPTARG;; e) bridge=$OPTARG;; h) help=1;; '?') err=1; warn "invalid option: \`-$OPTARG'";; @@ -55,36 +46,6 @@ done test $err = 1 && { try_h; exit 1; } test $help = 1 && { usage; exit 0; } -test -n "$ISO" -a -n "$TREE" && usage "Can only specify one of -i and -t" - -if [ -n "$ISO" ]; then - test -n "$KICKSTART" && usage "-k not valid in conjunction with -i" - test -r "$ISO" || usage "missing or unreadable ISO file: \`$ISO'" - cdrom_arg="-c $ISO" - # If we're installing from an ISO, we need console to provide kickstart - CONSOLE_FLAG- do_install=1 -elif [ -n "$TREE" ]; then - location_arg="-l $TREE" - do_install=1 -else - do_install=0 -fi - -if [ -n "$KICKSTART" ]; then - extra_flag=-x - extra_arg="ksdevice=eth0 ks=$KICKSTART" -else - # If we didn't provide a kickstart, we need console access to provide - # one at boot time - CONSOLE_FLAG-fi - -case $ARCH in - i686|x86_64);; - *) usage "invalid architecture: \`$ARCH'";; -esac - gen_bridge() { name=$1 cat << EOF @@ -121,6 +82,12 @@ gen_fake_managed_node() { <mac address='00:16:3e:12:34:$last_mac'/> <source network='$BRIDGENAME'/> </interface> + <serial type='pty'> + <target port='0'/> + </serial> + <console type='pty'> + <target port='0'/> + </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' listen='127.0.0.1'/> </devices> @@ -158,6 +125,12 @@ gen_app() { <interface type='network'> <source network='$BRIDGENAME'/> </interface> + <serial type='pty'> + <target port='0'/> + </serial> + <console type='pty'> + <target port='0'/> + </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' listen='127.0.0.1'/> </devices> @@ -241,11 +214,11 @@ done virsh net-dumpxml $BRIDGENAME >& /dev/null RETVAL=$? if [ $( brctl show | grep -c $BRIDGENAME ) -ne 0 -a $RETVAL -ne 0 ]; then - # in this case, the bridge exists, but isn't managed by libvirt - # abort, since the user will have to clean up themselves - echo "Bridge $BRIDGENAME already exists. Please make sure you" - echo "unconfigure $BRIDGENAME, and then try the command again" - exit 1 + # in this case, the bridge exists, but isn't managed by libvirt + # abort, since the user will have to clean up themselves + echo "Bridge $BRIDGENAME already exists. Please make sure you" + echo "unconfigure $BRIDGENAME, and then try the command again" + exit 1 fi # Remove old bridge device if it exists @@ -258,8 +231,6 @@ if [ -n "$old_bridge" ]; then brctl delif $BRIDGENAME $old_bridge fi -# TODO when virFileReadAll is fixed for stdin -#virsh net-define <(gen_dummy) virsh net-destroy $BRIDGENAME > /dev/null 2>&1 virsh net-undefine $BRIDGENAME > /dev/null 2>&1 TMPXML=$(mktemp) || exit 1 @@ -300,20 +271,29 @@ mkdir -p $IMGDIR virsh destroy $NAME > /dev/null 2>&1 virsh undefine $NAME > /dev/null 2>&1 -if [ $do_install = 1 ]; then - rm -f "$IMGDIR/$IMGNAME" - qemu-img create -f qcow2 "$IMGDIR/$IMGNAME" $IMGSIZE - virt-install -n $NAME -r $RAM -f "$IMGDIR/$IMGNAME" --vnc \ - --accelerate -v --os-type=linux --arch=$ARCH \ - -w network:default -w network:$BRIDGENAME \ - $location_arg $cdrom_arg $extra_flag "$extra_arg" --noacpi $CONSOLE_FLAG -else - test ! -r $IMGDIR/$IMGNAME && die "Disk image not found at $IMGDIR/$IMGNAME" - - TMPXML=$(mktemp) || exit 1 - gen_app $IMGDIR/$IMGNAME $RAM > $TMPXML - virsh define $TMPXML - rm $TMPXML - echo "Application defined using disk located at $IMGDIR/$IMGNAME." - echo "Run virsh start $NAME to start the appliance" +if [ -n "$KICKSTART" ]; then + mkdir -p tmp + appliance-creator --config $KICKSTART --name $NAME --tmpdir $(pwd)/tmp + # FIXME add --compress option to appliance-creator + if [ $compress -ne 0 ]; then + echo -n "Compressing the image..." + qemu-img convert -c $NAME-sda.raw -O qcow2 "$IMGDIR/$IMGNAME" + rm ovirt-appliance-sda.raw + echo "done" + else + echo -n "Moving the image..." + mv ovirt-appliance-sda.raw "$IMGDIR/$IMGNAME" + restorecon -v "$IMGDIR/$IMGNAME" + echo "done" + fi fi + +test ! -r $IMGDIR/$IMGNAME && die "Disk image not found at $IMGDIR/$IMGNAME" + +TMPXML=$(mktemp) || exit 1 +# FIXME virt-image to define the appliance instance +gen_app $IMGDIR/$IMGNAME $RAM > $TMPXML +virsh define $TMPXML +rm $TMPXML +echo "Application defined using disk located at $IMGDIR/$IMGNAME." +echo "Run virsh start $NAME to start the appliance" diff --git a/wui-appliance/wui-devel.ks b/wui-appliance/wui-devel.ks index 2903a19..e36f3a7 100644 --- a/wui-appliance/wui-devel.ks +++ b/wui-appliance/wui-devel.ks @@ -2,12 +2,7 @@ install %include common-install.ks -network --device=eth1 --bootproto=static --ip=192.168.50.2 --netmask=255.255.255.0 --onboot=on --nameserver=192.168.50.2 - -# Create some fake iSCSI partitions -logvol /iscsi3 --name=iSCSI3 --vgname=VolGroup00 --size=64 -logvol /iscsi4 --name=iSCSI4 --vgname=VolGroup00 --size=64 -logvol /iscsi5 --name=iSCSI5 --vgname=VolGroup00 --size=64 +network --device=eth1 --bootproto=static --ip=192.168.50.2 --netmask=255.255.255.0 --onboot=on --nameserver=192.168.50.2 --hostname=management.priv.ovirt.org %include repos.ks @@ -20,12 +15,19 @@ exec > /root/kickstart-post.log 2>&1 %include common-post.ks -# make sure our "hostname" resolves to management.priv.ovirt.org -sed -i -e 's/^HOSTNAME.*/HOSTNAME=management.priv.ovirt.org/' \ - /etc/sysconfig/network +# FIXME [PATCH] fix SelinuxConfig firewall side-effect +lokkit -f --nostart --disabled +# FIXME imgcreate.kickstart.NetworkConfig doesn't store nameserver into ifcfg-* +# only in resolv.conf which gets overwritten by dhclient-script +augtool <<EOF +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/PEERDNS no +set /files/etc/sysconfig/network-scripts/ifcfg-eth1/DNS1 192.168.50.2 +save +EOF # make sure to update the /etc/hosts with the list of all possible DHCP # addresses we can hand out; dnsmasq uses this +sed -i -e 's/management\.priv\.ovirt\.org//' /etc/hosts echo "192.168.50.2 management.priv.ovirt.org" >> /etc/hosts for i in `seq 3 252` ; do echo "192.168.50.$i node$i.priv.ovirt.org" >> /etc/hosts @@ -75,9 +77,11 @@ IsRelative=1 Path=$ff_profile_dir EOF -# make sure we don't mount the "fake" iSCSI LUNs, since they are meant to -# be exported -sed -i -e '/\/dev\/VolGroup00\/iSCSI[0-9].*/d' /etc/fstab +# Create sparse files for iSCSI backing stores +mkdir -p /ovirtiscsi +for i in `seq 3 5`; do + dd if=/dev/null of=/ovirtiscsi/iSCSI$i bs=1 count=1 seek=64M +done # make an NFS directory with some small, fake disks and export them via NFS # to show off the NFS part of the WUI @@ -193,7 +197,7 @@ cat > /etc/init.d/ovirt-wui-dev << \EOF # # ovirt-wui-dev oVirt WUI Dev appliance service # -# chkconfig: 3 60 40 +# chkconfig: 3 60 40 # description: ovirt dev wui appliance service # @@ -215,22 +219,22 @@ start() { -O option:router,192.168.50.2 -O option:ntp-server,192.168.50.2 \ --dhcp-option=12 \ -R --local /priv.ovirt.org/ --server 192.168.122.1 - + # Set up the fake iscsi target tgtadm --lld iscsi --op new --mode target --tid 1 \ -T ovirtpriv:storage - + + # + # Now associate them to the backing stores # - # Now associate them to the LVs - # tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \ - --lun 1 -b /dev/VolGroup00/iSCSI3 + --lun 1 -b /ovirtiscsi/iSCSI3 tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \ - --lun 2 -b /dev/VolGroup00/iSCSI4 + --lun 2 -b /ovirtiscsi/iSCSI4 tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \ - --lun 3 -b /dev/VolGroup00/iSCSI5 + --lun 3 -b /ovirtiscsi/iSCSI5 - # + # # Now make them available # tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL -- 1.5.5.1
Alan Pevec
2008-Jul-23 21:38 UTC
[Ovirt-devel] [PATCH] replace virt-install with appliance-creator in create-wui-appliance.sh
- use plain partitions in kickstart disk layout - use sparse files for iSCSI backing store (can't create LVMs on kpartx mappings) - add serial console to domain XML - option to produce qcow2 compressed image ovirt.org repo contains appliance-tools-002-1.fc9 which works with unmodified livecd-tools-017.1-1.fc9 Signed-off-by: Alan Pevec <apevec at redhat.com> --- build-all.sh | 23 ++----- wui-appliance/common-install.ks | 8 +-- wui-appliance/common-pkgs.ks | 5 +- wui-appliance/create-wui-appliance.sh | 117 +++++++++++++------------------- wui-appliance/wui-devel.ks | 46 +++++++------ 5 files changed, 86 insertions(+), 113 deletions(-) diff --git a/build-all.sh b/build-all.sh index 26d6009..5819d37 100755 --- a/build-all.sh +++ b/build-all.sh @@ -35,7 +35,7 @@ Usage: $ME [-w] [-n] [-p init|update] [-s] [-a] [-c] [-v git|release|none] [-e e -p: update pungi repository (init or update) -s: include SRPMs and produce source ISO -a: updates all (WUI, Node, Appliance) - -c: cleanup old repos (pungi and ovirt) + -c: cleanup local repos (pungi and ovirt) -v: update version type (git, release, none) default is git -e: ethernet device to use as bridge (i.e. eth1) -h: display this help and exit @@ -65,10 +65,10 @@ while getopts wnp:sahcv:e: c; do n) update_node=1;; p) update_pungi=$OPTARG;; s) include_src=1;; - a) update_wui=1; update_node=1; update_app=1; update_pungi=init;; + a) update_wui=1; update_node=1; update_app=1;; c) cleanup=1;; - e) bridge=$OPTARG;; v) version_type=$OPTARG;; + e) bridge=$OPTARG;; h) help=1;; '?') err=1; warn "invalid option: \`-$OPTARG'";; :) err=1; warn "missing argument to \`-$OPTARG' option";; @@ -234,23 +234,17 @@ EOF fi # build oVirt admin appliance -# NOTE: create-wui-appliance.sh must be run as root if [ $update_app == 1 ]; then - # FIXME: This can go away once we have livecd tools building the appliances - VIRBR=$(virsh net-dumpxml default \ - | sed -n "s/^ *<ip address='\([^']*\)' .*/\1/p") - test -z $VIRBR && die "Could not get ip address of default network for app" - cd $BASE/wui-appliance make clean cat > repos.ks << EOF -url --url http://$VIRBR/pungi/$F_REL/$ARCH/os +url --url http://localhost/pungi/$F_REL/$ARCH/os EOF excludepkgs if [[ -f $OVIRT/repodata/repomd.xml ]]; then excludepkgs='--excludepkgs=ovirt*' cat >> repos.ks << EOF -repo --name=ovirt --baseurl=http://$VIRBR/ovirt +repo --name=ovirt --baseurl=http://localhost/ovirt EOF fi cat >> repos.ks << EOF @@ -258,7 +252,6 @@ repo --name=ovirt-org --baseurl=http://ovirt.org/repos/ovirt/$F_REL/$ARCH $exclu EOF make - cp wui-rel.ks $OVIRT bridge_flag if [ -n "$bridge" ]; then @@ -266,11 +259,7 @@ EOF fi ./create-wui-appliance.sh \ - -t http://$VIRBR/pungi/$F_REL/$ARCH/os \ - -k http://$VIRBR/ovirt/wui-rel.ks \ + -k wui-rel.ks \ $bridge_flag - set +x - echo "oVirt appliance setup started, check progress with:" - echo -n " virt-viewer ovirt-appliance" fi diff --git a/wui-appliance/common-install.ks b/wui-appliance/common-install.ks index 36eb28d..c9cbb0a 100644 --- a/wui-appliance/common-install.ks +++ b/wui-appliance/common-install.ks @@ -16,9 +16,7 @@ bootloader --location=mbr --driveorder=sda # not guaranteed to work zerombr clearpart --all --drives=sda -part /boot --fstype ext3 --size=100 --ondisk=sda -part pv.2 --size=1 --grow --ondisk=sda -volgroup VolGroup00 --pesize=32768 pv.2 -logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=512 -logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow +part /boot --ondisk=sda --fstype=ext3 --size=100 +part / --ondisk=sda --fstype=ext3 --size=5000 +part swap --ondisk=sda --fstype=swap --size=512 reboot diff --git a/wui-appliance/common-pkgs.ks b/wui-appliance/common-pkgs.ks index 34546a7..7a8866c 100644 --- a/wui-appliance/common-pkgs.ks +++ b/wui-appliance/common-pkgs.ks @@ -1,4 +1,5 @@ @core +kernel cronie policycoreutils chkconfig @@ -19,6 +20,8 @@ firefox gtk-vnc-plugin xorg-x11-xauth virt-viewer +rhpl cobbler bind-utils - +augeas +/usr/sbin/lokkit diff --git a/wui-appliance/create-wui-appliance.sh b/wui-appliance/create-wui-appliance.sh index d77ba16..e0ac074 100755 --- a/wui-appliance/create-wui-appliance.sh +++ b/wui-appliance/create-wui-appliance.sh @@ -11,40 +11,31 @@ IMGSIZE=6000M ISO IMGDIR_DEFAULT=/var/lib/libvirt/images NET_SCRIPTS=/etc/sysconfig/network-scripts -ARCH_DEFAULT=$(uname -m) NAME=ovirt-appliance BRIDGENAME=ovirtbr -ARCH=$ARCH_DEFAULT IMGDIR=$IMGDIR_DEFAULT -CONSOLE_FLAG=--noautoconsole usage() { case $# in 1) warn "$1"; try_h; exit 1;; esac cat <<EOF -Usage: $ME [-i install_iso | -t install_tree] [-d image_dir] [-a x86_64|i686] [-k kickstart] [-e eth] - -i: location of installation ISO - -t: location of installation tree - -k: URL of kickstart file for use with installation tree - -o: Display virt-viewer window during install (implied by -i option) +Usage: $ME [-c] [-d image_dir] [-k kickstart] [-e eth] -d: directory to place virtual disk (default: $IMGDIR_DEFAULT) - -a: architecture for the virtual machine (default: $ARCH_DEFAULT) + -c: compress the image (qcow2 compressed) + -k: appliance kickstart file -e: ethernet device to use as bridge (i.e. eth1) -h: display this help and exit EOF } err=0 help=0 -viewer=0 +compress=0 bridge-while getopts :a:d:i:t:k:ohe: c; do +while getopts :d:k:he: c; do case $c in - i) ISO=$OPTARG;; - t) TREE=$OPTARG;; - k) KICKSTART=$OPTARG;; d) IMGDIR=$OPTARG;; - a) ARCH=$OPTARG;; - o) CONSOLE_FLAG=;; + c) compress=1;; + k) KICKSTART=$OPTARG;; e) bridge=$OPTARG;; h) help=1;; '?') err=1; warn "invalid option: \`-$OPTARG'";; @@ -55,36 +46,6 @@ done test $err = 1 && { try_h; exit 1; } test $help = 1 && { usage; exit 0; } -test -n "$ISO" -a -n "$TREE" && usage "Can only specify one of -i and -t" - -if [ -n "$ISO" ]; then - test -n "$KICKSTART" && usage "-k not valid in conjunction with -i" - test -r "$ISO" || usage "missing or unreadable ISO file: \`$ISO'" - cdrom_arg="-c $ISO" - # If we're installing from an ISO, we need console to provide kickstart - CONSOLE_FLAG- do_install=1 -elif [ -n "$TREE" ]; then - location_arg="-l $TREE" - do_install=1 -else - do_install=0 -fi - -if [ -n "$KICKSTART" ]; then - extra_flag=-x - extra_arg="ksdevice=eth0 ks=$KICKSTART" -else - # If we didn't provide a kickstart, we need console access to provide - # one at boot time - CONSOLE_FLAG-fi - -case $ARCH in - i686|x86_64);; - *) usage "invalid architecture: \`$ARCH'";; -esac - gen_bridge() { name=$1 cat << EOF @@ -121,6 +82,12 @@ gen_fake_managed_node() { <mac address='00:16:3e:12:34:$last_mac'/> <source network='$BRIDGENAME'/> </interface> + <serial type='pty'> + <target port='0'/> + </serial> + <console type='pty'> + <target port='0'/> + </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' listen='127.0.0.1'/> </devices> @@ -158,6 +125,12 @@ gen_app() { <interface type='network'> <source network='$BRIDGENAME'/> </interface> + <serial type='pty'> + <target port='0'/> + </serial> + <console type='pty'> + <target port='0'/> + </console> <input type='mouse' bus='ps2'/> <graphics type='vnc' port='-1' listen='127.0.0.1'/> </devices> @@ -241,11 +214,11 @@ done virsh net-dumpxml $BRIDGENAME >& /dev/null RETVAL=$? if [ $( brctl show | grep -c $BRIDGENAME ) -ne 0 -a $RETVAL -ne 0 ]; then - # in this case, the bridge exists, but isn't managed by libvirt - # abort, since the user will have to clean up themselves - echo "Bridge $BRIDGENAME already exists. Please make sure you" - echo "unconfigure $BRIDGENAME, and then try the command again" - exit 1 + # in this case, the bridge exists, but isn't managed by libvirt + # abort, since the user will have to clean up themselves + echo "Bridge $BRIDGENAME already exists. Please make sure you" + echo "unconfigure $BRIDGENAME, and then try the command again" + exit 1 fi # Remove old bridge device if it exists @@ -258,8 +231,6 @@ if [ -n "$old_bridge" ]; then brctl delif $BRIDGENAME $old_bridge fi -# TODO when virFileReadAll is fixed for stdin -#virsh net-define <(gen_dummy) virsh net-destroy $BRIDGENAME > /dev/null 2>&1 virsh net-undefine $BRIDGENAME > /dev/null 2>&1 TMPXML=$(mktemp) || exit 1 @@ -300,20 +271,28 @@ mkdir -p $IMGDIR virsh destroy $NAME > /dev/null 2>&1 virsh undefine $NAME > /dev/null 2>&1 -if [ $do_install = 1 ]; then - rm -f "$IMGDIR/$IMGNAME" - qemu-img create -f qcow2 "$IMGDIR/$IMGNAME" $IMGSIZE - virt-install -n $NAME -r $RAM -f "$IMGDIR/$IMGNAME" --vnc \ - --accelerate -v --os-type=linux --arch=$ARCH \ - -w network:default -w network:$BRIDGENAME \ - $location_arg $cdrom_arg $extra_flag "$extra_arg" --noacpi $CONSOLE_FLAG -else - test ! -r $IMGDIR/$IMGNAME && die "Disk image not found at $IMGDIR/$IMGNAME" - - TMPXML=$(mktemp) || exit 1 - gen_app $IMGDIR/$IMGNAME $RAM > $TMPXML - virsh define $TMPXML - rm $TMPXML - echo "Application defined using disk located at $IMGDIR/$IMGNAME." - echo "Run virsh start $NAME to start the appliance" +if [ -n "$KICKSTART" ]; then + mkdir -p tmp + appliance-creator --config $KICKSTART --name $NAME --tmpdir $(pwd)/tmp + # FIXME add --compress option to appliance-creator + if [ $compress -ne 0 ]; then + echo -n "Compressing the image..." + qemu-img convert -c $NAME-sda.raw -O qcow2 "$IMGDIR/$IMGNAME" + rm ovirt-appliance-sda.raw + echo "done" + else + echo -n "Moving the image..." + mv ovirt-appliance-sda.raw "$IMGDIR/$IMGNAME" + restorecon -v "$IMGDIR/$IMGNAME" + echo "done" + fi fi + +test ! -r $IMGDIR/$IMGNAME && die "Disk image not found at $IMGDIR/$IMGNAME" + +TMPXML=$(mktemp) || exit 1 +# FIXME virt-image to define the appliance instance +gen_app $IMGDIR/$IMGNAME $RAM > $TMPXML +virsh define $TMPXML +rm $TMPXML +virsh start $NAME diff --git a/wui-appliance/wui-devel.ks b/wui-appliance/wui-devel.ks index 2903a19..e36f3a7 100644 --- a/wui-appliance/wui-devel.ks +++ b/wui-appliance/wui-devel.ks @@ -2,12 +2,7 @@ install %include common-install.ks -network --device=eth1 --bootproto=static --ip=192.168.50.2 --netmask=255.255.255.0 --onboot=on --nameserver=192.168.50.2 - -# Create some fake iSCSI partitions -logvol /iscsi3 --name=iSCSI3 --vgname=VolGroup00 --size=64 -logvol /iscsi4 --name=iSCSI4 --vgname=VolGroup00 --size=64 -logvol /iscsi5 --name=iSCSI5 --vgname=VolGroup00 --size=64 +network --device=eth1 --bootproto=static --ip=192.168.50.2 --netmask=255.255.255.0 --onboot=on --nameserver=192.168.50.2 --hostname=management.priv.ovirt.org %include repos.ks @@ -20,12 +15,19 @@ exec > /root/kickstart-post.log 2>&1 %include common-post.ks -# make sure our "hostname" resolves to management.priv.ovirt.org -sed -i -e 's/^HOSTNAME.*/HOSTNAME=management.priv.ovirt.org/' \ - /etc/sysconfig/network +# FIXME [PATCH] fix SelinuxConfig firewall side-effect +lokkit -f --nostart --disabled +# FIXME imgcreate.kickstart.NetworkConfig doesn't store nameserver into ifcfg-* +# only in resolv.conf which gets overwritten by dhclient-script +augtool <<EOF +set /files/etc/sysconfig/network-scripts/ifcfg-eth0/PEERDNS no +set /files/etc/sysconfig/network-scripts/ifcfg-eth1/DNS1 192.168.50.2 +save +EOF # make sure to update the /etc/hosts with the list of all possible DHCP # addresses we can hand out; dnsmasq uses this +sed -i -e 's/management\.priv\.ovirt\.org//' /etc/hosts echo "192.168.50.2 management.priv.ovirt.org" >> /etc/hosts for i in `seq 3 252` ; do echo "192.168.50.$i node$i.priv.ovirt.org" >> /etc/hosts @@ -75,9 +77,11 @@ IsRelative=1 Path=$ff_profile_dir EOF -# make sure we don't mount the "fake" iSCSI LUNs, since they are meant to -# be exported -sed -i -e '/\/dev\/VolGroup00\/iSCSI[0-9].*/d' /etc/fstab +# Create sparse files for iSCSI backing stores +mkdir -p /ovirtiscsi +for i in `seq 3 5`; do + dd if=/dev/null of=/ovirtiscsi/iSCSI$i bs=1 count=1 seek=64M +done # make an NFS directory with some small, fake disks and export them via NFS # to show off the NFS part of the WUI @@ -193,7 +197,7 @@ cat > /etc/init.d/ovirt-wui-dev << \EOF # # ovirt-wui-dev oVirt WUI Dev appliance service # -# chkconfig: 3 60 40 +# chkconfig: 3 60 40 # description: ovirt dev wui appliance service # @@ -215,22 +219,22 @@ start() { -O option:router,192.168.50.2 -O option:ntp-server,192.168.50.2 \ --dhcp-option=12 \ -R --local /priv.ovirt.org/ --server 192.168.122.1 - + # Set up the fake iscsi target tgtadm --lld iscsi --op new --mode target --tid 1 \ -T ovirtpriv:storage - + + # + # Now associate them to the backing stores # - # Now associate them to the LVs - # tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \ - --lun 1 -b /dev/VolGroup00/iSCSI3 + --lun 1 -b /ovirtiscsi/iSCSI3 tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \ - --lun 2 -b /dev/VolGroup00/iSCSI4 + --lun 2 -b /ovirtiscsi/iSCSI4 tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \ - --lun 3 -b /dev/VolGroup00/iSCSI5 + --lun 3 -b /ovirtiscsi/iSCSI5 - # + # # Now make them available # tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL -- 1.5.5.1