On 12/08/2009 03:41 PM, Joey Boggs wrote:
- dracut does not currently support booting a dmsquash file system on an
iscsiroot
- can not be configured in standalone mode since networking is not up, although
works fine if ovirt-config-setup is run once booted.
Signed-off-by: Joey Boggs<[email protected]>
---
recipe/common-pkgs.ks | 1 +
scripts/ovirt-config-boot | 67 ++++++++++++++++----
scripts/ovirt-config-storage | 142 +++++++++++++++++++++++++++++++++++++++--
scripts/ovirt-functions | 8 +++
4 files changed, 199 insertions(+), 19 deletions(-)
diff --git a/recipe/common-pkgs.ks b/recipe/common-pkgs.ks
index daff195..9bd3b07 100644
--- a/recipe/common-pkgs.ks
+++ b/recipe/common-pkgs.ks
@@ -73,3 +73,4 @@ kpartx
# workaround for gpxe issue with the virt-preview qemu on F11 host kernel
# https://bugzilla.redhat.com/show_bug.cgi?id=512358
etherboot-zroms-kvm
+dracut-network
diff --git a/scripts/ovirt-config-boot b/scripts/ovirt-config-boot
index 470f57b..4c4e3d7 100755
--- a/scripts/ovirt-config-boot
+++ b/scripts/ovirt-config-boot
@@ -29,9 +29,28 @@ ovirt_boot_setup() {
local disk2
local partN=-1
log "installing the image."
+ if [ -h /dev/disk/by-label/Boot ]; then
+ mount_boot
+ mountpoint /boot
+ if [ $? -ne 0 ] ; then
+ log "Boot partition not available"
+ return 1
+ fi
+ grub_dev_label="Boot"
+ # Grab OVIRT_ISCSI VARIABLES from boot partition for upgrading
+ # file created only if OVIRT_ISCSI_ENABLED=y
+ if [ -f /boot/ovirt ]; then
+ . /boot/ovirt
+ iscsiadm -p $OVIRT_ISCSI_TARGET_IP:$OVIRT_ISCSI_TARGET_PORT -m
discovery -t sendtargets
+ log "Restarting iscsi service"
+ service iscsi restart
+ fi
+ else
+ grub_dev_label="RootBackup"
+ fi
mount_liveos
# check that /boot mounted ok and find partition number for GRUB
- eval $(readlink -f /dev/disk/by-label/RootBackup|awk {'
+ eval $(readlink -f /dev/disk/by-label/$grub_dev_label|awk {'
print "disk=" substr($1,1,length($1)-1);
print "disk2=" substr($1,1,length($1)-2);
partN=substr($1,length($1),1); partN--;
@@ -75,9 +94,10 @@ ovirt_boot_setup() {
fi
if [ $rc -ne 0 ]; then
log "root partition not available."
- log "$(lvdisplay -c)"
+ log "$(ls -al /dev/disk/by-label)"
return $rc
fi
+
mount $candidate_dev /liveos
# install oVirt Node image for local boot
if [ -e "$live/syslinux" ]; then
@@ -87,12 +107,25 @@ ovirt_boot_setup() {
else
syslinux=
fi
- rm -rf /liveos/boot/grub
+
rm -rf /liveos/LiveOS
- mkdir -p /liveos/boot/grub
mkdir -p /liveos/LiveOS
+
+ if [ "$OVIRT_ISCSI_ENABLED" == "y" ]; then
+ initrd_dest="/boot"
+ grub_dir="/boot/grub"
+ grub_prefix="/grub"
+ else
+ initrd_dest="/liveos"
+ grub_dir="/liveos/boot/grub"
+ grub_prefix="/boot/grub"
+ fi
+
+ rm -rf $grub_dir
+ mkdir -p $grub_dir
+
cp -p $live/LiveOS/squashfs.img /liveos/LiveOS \
-&& cp -p $live/$syslinux/vmlinuz0 /liveos
+&& cp -p $live/$syslinux/vmlinuz0 $initrd_dest
rc=$?
if [ $rc -ne 0 ]; then
log "image copy failed."
@@ -139,17 +172,23 @@ set -e\
# lvm is not static in Fedora
cp /lib$bit/libreadline.so.5 /lib$bit/libncurses.so.5 lib$bit
fi
+
find $init_script bin/lvm lib$bit -type f |
cpio -H newc --quiet -o |
gzip -9 |
- cat $live/$syslinux/initrd0.img -> /liveos/initrd0.img
+ cat $live/$syslinux/initrd0.img -> $initrd_dest/initrd0.img
version=$(rpm -q --qf '%{version}' ovirt-node)
release=$(rpm -q --qf '%{release}' ovirt-node)
# reorder tty0 to allow both serial and phys console after installation
- bootparams="ro root=LABEL=Root roottypefs=ext3 console=tty0 \
+ if [ "$OVIRT_ISCSI_ENABLED" == "y" ]; then
+ bootparams="ro root=LABEL=live:Root roottypefs=ext3 console=tty0 \
+
netroot=iscsi:$OVIRT_ISCSI_TARGET_IP::$OVIRT_ISCSI_TARGET_PORT::$OVIRT_ISCSI_NODE_NAME
ip=eth0:dhcp"
+ else
+ bootparams="ro root=LABEL=live:Root roottypefs=ext3 console=tty0 \
$(echo $bootparams | sed s/console=tty0//g)"
- cat> /liveos/boot/grub/grub.conf<< EOF
+ fi
+ cat> $grub_dir/grub.conf<< EOF
default=0
timeout=5
hiddenmenu
@@ -158,11 +197,11 @@ title oVirt Node (${version}-${release})
kernel /vmlinuz0 $bootparams
initrd /initrd0.img
EOF
- echo "(hd0) $disk"> /liveos/boot/grub/device.map
- ( cd /usr/share/grub/*; cp -p stage? e2fs_stage1_5 /liveos/boot/grub )
- grub --device-map=/liveos/boot/grub/device.map<<EOF
+ echo "(hd0) $disk"> $grub_dir/device.map
+ ( cd /usr/share/grub/*; cp -p stage? e2fs_stage1_5 $grub_dir )
+ grub --device-map=$grub_dir/device.map<<EOF
root (hd0,$partN)
-setup --prefix=/boot/grub (hd0)
+setup --prefix=$grub_prefix (hd0)
EOF
rc=$?
if [ $rc -ne 0 ]; then
@@ -175,6 +214,10 @@ EOF
e2label $candidate_dev RootUpdate
rm -rf $tmpdir
+ if [ "$OVIRT_ISCSI_ENABLED" == "y" ]; then
+ # copy default for when Root/HostVG is inaccessible(iscsi upgrade
+ cp $OVIRT_DEFAULTS /boot
+ fi
log "done."
}
diff --git a/scripts/ovirt-config-storage b/scripts/ovirt-config-storage
index 57aaebd..f9a5b41 100755
--- a/scripts/ovirt-config-storage
+++ b/scripts/ovirt-config-storage
@@ -21,13 +21,13 @@ if is_booted_from_local_disk; then
fi
default_overcommit=0.5
-
+default_boot_size=50
default_root_size=256
default_config_size=5
default_logging_size=2048
# -1 indicates data partition should use remaining disk
default_data_size=-1
-
+boot_min_size=50
root_min_size=256
config_min_size=5
logging_min_size=5
@@ -206,6 +206,11 @@ get_dev_name()
do_configure()
{
local name_and_size
+ if [ "$OVIRT_ISCSI_ENABLED" == "y" ]; then
+ printf "\n\nPlease select the disk to use for the Boot partition.\n\n"
+ BOOTDRIVE=$(get_dev_name) || return 0
+ get_drive_size $BOOTDRIVE BOOTDRIVESPACE
+ fi
printf "\n\nPlease select the disk to use for the Root.\n\n"
ROOTDRIVE=$(get_dev_name) || return 0
get_drive_size $ROOTDRIVE ROOTDRIVESPACE
@@ -230,7 +235,12 @@ do_configure()
fi
local space_left=$HOSTVGDRIVESPACE
- for part in swap root config logging data ; do
+ if [ "$OVIRT_ISCSI_ENABLED" == "y" ]; then
+ partlist="boot swap root config logging data"
+ else
+ partlist="swap root config logging data"
+ fi
+ for part in $partlist ; do
part_regexp="^0$"
if [ "$part" = "data" ]; then
part_regexp="^\-1|0$"
@@ -276,12 +286,19 @@ do_configure()
# save input variables
augtool<<EOF
set /files$OVIRT_DEFAULTS/OVIRT_INIT $ROOTDRIVE
+set /files$OVIRT_DEFAULTS/OVIRT_VOL_BOOT_SIZE $BOOT_SIZE
set /files$OVIRT_DEFAULTS/OVIRT_VOL_SWAP_SIZE $SWAP_SIZE
set /files$OVIRT_DEFAULTS/OVIRT_VOL_ROOT_SIZE $ROOT_SIZE
set /files$OVIRT_DEFAULTS/OVIRT_VOL_CONFIG_SIZE $CONFIG_SIZE
set /files$OVIRT_DEFAULTS/OVIRT_VOL_LOGGING_SIZE $LOGGING_SIZE
set /files$OVIRT_DEFAULTS/OVIRT_VOL_DATA_SIZE $DATA_SIZE
EOF
+
+ if [ -n $BOOTDRIVE ]; then
+ augtool<<EOF
+set /files$OVIRT_DEFAULTS/OVIRT_BOOT_INIT $BOOTDRIVE
+EOF
+ fi
}
do_review()
@@ -356,20 +373,33 @@ perform_partitioning()
partprobe -s $ROOTDRIVE
MEM_SIZE_MB=$(echo "scale=0; $MEM_SIZE_MB / 1024;" | bc -l)
+ local boot_size_si=$(echo "scale=0; $BOOT_SIZE * (1024 * 1024) / (1000 *
1000)" | bc -l)
log "Labeling Drive: $ROOTDRIVE"
parted $ROOTDRIVE -s "mklabel ${LABEL_TYPE}"
+ if [ -n "$BOOTDRIVE" ]; then
+ dd if=/dev/zero of=$BOOTDRIVE bs=1024K count=1
+ blockdev --rereadpt $BOOTDRIVE
+ partprobe -s $BOOTDRIVE
+ log "Creating boot partition"
+ parted $BOOTDRIVE -s "mklabel ${LABEL_TYPE}"
+ parted $BOOTDRIVE -s "mkpartfs primary ext2 0M ${boot_size_si}M"
+ fi
if [ $ROOTDRIVE != $HOSTVGDRIVE ]; then
log "Labeling Drive: $HOSTVGDRIVE"
parted $HOSTVGDRIVE -s "mklabel ${LABEL_TYPE}"
fi
log "Creating Root and RootBackup Partitions"
let RootBackup_end=${ROOT_SIZE}*2
- parted $ROOTDRIVE -s "mkpartfs primary ext2 0M ${ROOT_SIZE}M"
- parted $ROOTDRIVE -s "mkpartfs primary ext2 ${ROOT_SIZE}M
${RootBackup_end}M"
+ parted $ROOTDRIVE -s "mkpart primary ext2 0M ${ROOT_SIZE}M"
+ parted $ROOTDRIVE -s "mkpart primary ext2 ${ROOT_SIZE}M ${RootBackup_end}M"
# sleep to ensure filesystems are created before continuing
sleep 10
- e2label ${ROOTDRIVE}1 Root
- e2label ${ROOTDRIVE}2 RootBackup
+ if [ -n "$BOOTDRIVE" ]; then
+ mke2fs ${BOOTDRIVE}1 -L Boot
+ tune2fs -c 0 -i 0 ${BOOTDRIVE}1
+ fi
+ mke2fs ${ROOTDRIVE}1 -L Root
+ mke2fs ${ROOTDRIVE}2 -L RootBackup
tune2fs -c 0 -i 0 ${ROOTDRIVE}1
tune2fs -c 0 -i 0 ${ROOTDRIVE}2
log "Creating LVM partition"
@@ -468,6 +498,7 @@ perform_partitioning()
do_confirm()
{
+
if [ -z "$ROOTDRIVE" ]; then
printf "\nNo storage device selected.\n"
return
@@ -502,6 +533,101 @@ do_confirm()
done
}
+do_iscsi_target()
+{
+while true; do
+ OPTIONS="\"Target IP\" \"Target Port\"" #\"CHAP Username\" \"CHAP
Password\""
+ printf "\nPress Enter to leave option blank or Q to quit (default Target Port
is 3260)\n"
+ eval set $OPTIONS
+ PS3="Choose an option: "
+ for OPTION in "$@"; do
+ while true; do
+ read -ep "Enter $OPTION: "
+ if [[ $REPLY == "q" || $REPLY == "Q" ]]; then
+ return
+ fi
+
+ if [ "$OPTION" == "Target IP" ]; then
+ OVIRT_ISCSI_TARGET_IP=$REPLY
+ if [ -n "$REPLY" ]; then
+ break;
+ fi
+
+ elif [ "$OPTION" == "Target Port" ]; then
+ OVIRT_ISCSI_TARGET_PORT=$REPLY
+ if [ -z "$REPLY" ]; then
+ OVIRT_ISCSI_TARGET_PORT="3260"
+ break;
+ else
+ break;
+ fi
+
+ elif [ "$OPTION" == "CHAP Username" ]; then
+ OVIRT_ISCSI_CHAP_USERNAME=$REPLY
+ break
+
+ elif [ "$OPTION" == "CHAP Password" ]; then
+ OVIRT_ISCSI_CHAP_PASSWORD=$REPLY
+ break;
+ fi
+ done
+ done
+
+ cat<<EOF
+
+The iSCSI target be configured as follows:
+================================================
+ Target IP: $OVIRT_ISCSI_TARGET_IP
+ Target Port: $OVIRT_ISCSI_TARGET_PORT
+
+EOF
+# Username: $OVIRT_ISCSI_CHAP_USERNAME
+# Password: $OVIRT_ISCSI_CHAP_PASSWORD
+#EOF
+
+if ask_yes_or_no "Is this correct ([Y]es/[N]o)?" true true; then
+
+ OVIRT_ISCSI_ENABLED="y"
+ augtool<<EOF
+set /files/etc/default/ovirt/OVIRT_ISCSI_ENABLED y
+set /files/etc/default/ovirt/OVIRT_ISCSI_TARGET_IP $OVIRT_ISCSI_TARGET_IP
+set /files/etc/default/ovirt/OVIRT_ISCSI_TARGET_PORT $OVIRT_ISCSI_TARGET_PORT
+EOF
+
+ if [[ -n "$OVIRT_ISCSI_CHAP_USERNAME"&& -n "$OVIRT_ISCSI_CHAP_PASSWORD"
]]; then
+ log "setting iscsid.conf username/password"
+ augtool<<EOF
+set /files/etc/iscsi/iscsid.conf/node.session.auth.authmethod CHAP
+set /files/etc/iscsi/iscsid.conf/node.session.auth.username
$OVIRT_ISCSI_CHAP_USERNAME
+set /files/etc/iscsi/iscsid.conf/node.session.auth.password
$OVIRT_ISCSI_CHAP_PASSWORD
+set /files/etc/default/ovirt/OVIRT_ISCSI_CHAP_USERNAME
$OVIRT_ISCSI_CHAP_USERNAME
+set /files/etc/default/ovirt/OVIRT_ISCSI_CHAP_PASSWORD
$OVIRT_ISCSI_CHAP_PASSWORD
+EOF
+ fi
+
+ iscsiadm -p $OVIRT_ISCSI_TARGET_IP:$OVIRT_ISCSI_TARGET_PORT -m discovery
-t sendtargets
+ log "Restarting iscsi service"
+ service iscsi restart
+
+ISCSI_NODE_NAMES="$(iscsiadm -m discovery -p
$OVIRT_ISCSI_TARGET_IP:$OVIRT_ISCSI_TARGET_PORT -t sendtargets|awk {'print $2'})"
+
+printf "\n\n Select iSCSI target node\n\n">&2
+select OVIRT_ISCSI_NODE_NAME in $ISCSI_NODE_NAMES ; do
+log " Selected Node Name: $OVIRT_ISCSI_NODE_NAME"
+break;
+done
+
+augtool<<EOF
+set /files/etc/default/ovirt/OVIRT_ISCSI_ENABLED y
+set /files/etc/default/ovirt/OVIRT_ISCSI_TARGET_IP $OVIRT_ISCSI_TARGET_IP
+set /files/etc/default/ovirt/OVIRT_ISCSI_TARGET_PORT $OVIRT_ISCSI_TARGET_PORT
+set /files/etc/default/ovirt/OVIRT_ISCSI_NODE_NAME $OVIRT_ISCSI_NODE_NAME
+EOF
+break;
+fi
+done
+}
+
MEM_SIZE_MB=$(awk '/MemTotal:/ { print $2 }' /proc/meminfo)
case $MEM_SIZE_MB in
''|*[^0-9]*) die failed to get system memory size;;
@@ -527,6 +653,7 @@ fi
CALC_SWAP_SIZE=$(echo "scale=0; ${BASE_SWAP_SIZE} + ${OVERCOMMIT_SWAP_SIZE};"
| bc -l)
+BOOT_SIZE=${OVIRT_VOL_BOOT_SIZE:-$default_boot_size}
SWAP_SIZE=${OVIRT_VOL_SWAP_SIZE:-$CALC_SWAP_SIZE}
ROOT_SIZE=${OVIRT_VOL_ROOT_SIZE:-$default_root_size}
CONFIG_SIZE=${OVIRT_VOL_CONFIG_SIZE:-$default_config_size}
@@ -577,6 +704,7 @@ else
select OPTION in "$@"
do
case "$OPTION" in
+ "Enable iSCSI Target") do_iscsi_target; break ;;
"Configure Storage") do_configure ; break ;;
"Review") do_review ; break ;;
"Commit Changes And Quit") do_confirm ; break ;;
diff --git a/scripts/ovirt-functions b/scripts/ovirt-functions
index 7cf8613..7cd9c81 100644
--- a/scripts/ovirt-functions
+++ b/scripts/ovirt-functions
@@ -304,6 +304,14 @@ mount_config() {
fi
}
+mount_boot() {
+
+ if grep -q " /boot " /etc/mtab; then
+ return 0
+ fi
+ mkdir -p /boot
+ mount /dev/disk/by-label/Boot /boot
+}
# stop any service which keeps /var/log busy
# keep the list of services
unmount_logging_services() {
This also fixes the live booting option in grub for dracut with the
node-images.
Just building and running a normal install to "local storage" that
doesn't fail is the expected result for now.
_______________________________________________
Ovirt-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/ovirt-devel