[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: syslinux patch for xen flavour



hi,

How about this workaround?

- lh_binary_linux-image moves xen kernels if exist
- lh_binary_syslinux:
  it detects xen-flavour and xen kernels, and create syslinux multiboot entry
  for every xen kernels.

Netboot is not tested (I don't have netboot environment), and xen boot
parameters
are hardcoded.

regards,
-- 
KURASHIKI Satoru
diff --git a/helpers/lh_binary_linux-image b/helpers/lh_binary_linux-image
index 7fe2986..8d5136e 100755
--- a/helpers/lh_binary_linux-image
+++ b/helpers/lh_binary_linux-image
@@ -79,6 +79,11 @@ mkdir -p "${DESTDIR}"
 cp chroot/boot/"${LINUX}"-* "${DESTDIR}"
 cp chroot/boot/initrd.img-* "${DESTDIR}"
 
+# Instaling xen kernel
+if echo ${LH_LINUX_FLAVOURS} | grep -q 'xen\-'
+	cp chroot/boot/xen-* "${DESTDIR}"
+fi
+
 # Including boot parameter documentation
 if [ "${LH_BINARY_IMAGES}" != "net" ]
 then
diff --git a/helpers/lh_binary_syslinux b/helpers/lh_binary_syslinux
index 2d7cf33..9414afb 100755
--- a/helpers/lh_binary_syslinux
+++ b/helpers/lh_binary_syslinux
@@ -8,6 +8,7 @@
 # under certain conditions; see COPYING for details.
 
 set -e
+set -x
 
 # Including common functions
 LH_BASE="${LH_BASE:-/usr/share/live-helper}"
@@ -97,32 +98,46 @@ Syslinux_live_entry ()
 	case "${LH_BINARY_IMAGES}" in
 		iso|usb-hdd)
 			NUMBER="$(ls -1 ${KERNEL_PATH} | grep 'vmlinuz[0-9]\+$' | wc -l)"
-			NUMBER="$((${NUMBER} +1))"
 
-			# Note: ISOLINUX will not find the kernel if the name ends in ".img".
-			mv ${KERNEL_PATH}/${KERNEL} ${KERNEL_PATH}/vmlinuz${NUMBER}
-			mv ${KERNEL_PATH}/${INITRD} ${KERNEL_PATH}/initrd${NUMBER}.img
+			if [ -f "${KERNEL_PATH}/${KERNEL}" ]
+			then
+				NUMBER="$((${NUMBER} +1))"
+
+				# Note: ISOLINUX will not find the kernel if the name ends in ".img".
+				mv ${KERNEL_PATH}/${KERNEL} ${KERNEL_PATH}/vmlinuz${NUMBER}
+				mv ${KERNEL_PATH}/${INITRD} ${KERNEL_PATH}/initrd${NUMBER}.img
+			fi
 
 			KERNEL=vmlinuz${NUMBER}
 			INITRD=initrd${NUMBER}.img
 		;;
 	esac
 
-	# Regular kernel
-	LINUX_LIVE="${LINUX_LIVE}\nLABEL ${LABEL}\n"
+	if echo ${LABEL} | grep -q '\-xen'
+	then
+		# Xen kernel
+		LH_XEN_BOOTAPPEND="dom0_mem=256M vga=gfx-1024x768x16 console=vga"
+		LINUX_LIVE="${LINUX_LIVE}\nLABEL ${LABEL} ${XEN_KERNEL}\n"
+		LINUX_LIVE="${LINUX_LIVE}\nMENU LABEL ${MENULABEL} ${XEN_KERNEL}\n"
+		LINUX_LIVE="${LINUX_LIVE}\tkernel ${LIVE_DATA_PATH}/mboot.c32\n"
+		LINUX_LIVE="${LINUX_LIVE}\tappend ${LIVE_KERNEL_PATH}/${XEN_KERNEL} ${LH_XEN_BOOTAPPEND} --- ${LIVE_KERNEL_PATH}/${KERNEL} boot=${INITFS} ${LH_BOOTAPPEND_LIVE} ${APPEND} --- ${LIVE_KERNEL_PATH}/${INITRD}\n"
+	else
+		# Regular kernel
+		LINUX_LIVE="${LINUX_LIVE}\nLABEL ${LABEL}\n"
 
-	# Write the menu label if the syslinux menu is being use
-	LINUX_LIVE="${LINUX_LIVE}\tMENU LABEL ${MENULABEL}\n"
-	LINUX_LIVE="${LINUX_LIVE}\tkernel ${LIVE_KERNEL_PATH}/${KERNEL}\n"
-	LINUX_LIVE="${LINUX_LIVE}\tappend initrd=${LIVE_KERNEL_PATH}/${INITRD} boot=${INITFS} ${LH_BOOTAPPEND_LIVE} ${APPEND}\n"
+		# Write the menu label if the syslinux menu is being use
+		LINUX_LIVE="${LINUX_LIVE}\tMENU LABEL ${MENULABEL}\n"
+		LINUX_LIVE="${LINUX_LIVE}\tkernel ${LIVE_KERNEL_PATH}/${KERNEL}\n"
+		LINUX_LIVE="${LINUX_LIVE}\tappend initrd=${LIVE_KERNEL_PATH}/${INITRD} boot=${INITFS} ${LH_BOOTAPPEND_LIVE} ${APPEND}\n"
 
-	# Failsafe kernel
-	LINUX_LIVE="${LINUX_LIVE}\nLABEL ${LABEL}failsafe\n"
+		# Failsafe kernel
+		LINUX_LIVE="${LINUX_LIVE}\nLABEL ${LABEL}failsafe\n"
 
-	# Write the menu label if the syslinux menu is being use
-	LINUX_LIVE="${LINUX_LIVE}\tMENU LABEL ${MENULABEL} (fail-safe mode)\n"
-	LINUX_LIVE="${LINUX_LIVE}\tkernel ${LIVE_KERNEL_PATH}/${KERNEL}\n"
-	LINUX_LIVE="${LINUX_LIVE}\tappend initrd=${LIVE_KERNEL_PATH}/${INITRD} boot=${INITFS} ${LH_BOOTAPPEND_LIVE} ${APPEND} ${FAILSAFE}\n"
+		# Write the menu label if the syslinux menu is being use
+		LINUX_LIVE="${LINUX_LIVE}\tMENU LABEL ${MENULABEL} (fail-safe mode)\n"
+		LINUX_LIVE="${LINUX_LIVE}\tkernel ${LIVE_KERNEL_PATH}/${KERNEL}\n"
+		LINUX_LIVE="${LINUX_LIVE}\tappend initrd=${LIVE_KERNEL_PATH}/${INITRD} boot=${INITFS} ${LH_BOOTAPPEND_LIVE} ${APPEND} ${FAILSAFE}\n"
+	fi
 }
 
 Syslinux_install_entry ()
@@ -496,6 +511,11 @@ then
 	mv binary/${INITFS}/vmlinuz* ${KERNEL_PATH}
 	mv binary/${INITFS}/initrd* ${KERNEL_PATH}
 
+	if echo ${LH_LINUX_FLAVOURS} | grep -q 'xen\-'
+	then
+		mv binary/${INITFS}/xen-* ${KERNEL_PATH}
+	fi
+
 	if [ "${LH_MEMTEST}" != "disabled" ] && [ "${LH_MEMTEST}" != "none" ]
 	then
 		mv binary/${INITFS}/memtest ${KERNEL_PATH}
@@ -507,7 +527,26 @@ DEFAULT_FLAVOUR="$(echo ${LH_LINUX_FLAVOURS} | awk '{ print $1 }')"
 DEFAULT_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})"
 DEFAULT_INITRD="initrd.img-$(echo ${DEFAULT_KERNEL} | sed -e 's|vmlinuz-||')"
 
-Syslinux_live_entry "live" "${LH_SYSLINUX_MENU_LIVE_ENTRY}" "${DEFAULT_KERNEL}" "${DEFAULT_INITRD}"
+if echo ${DEFAULT_FLAVOUR} | grep -q 'xen-'
+then
+	# prepare multiboot module
+	case "${LH_CHROOT_BUILD}" in
+		enabled)
+			cp chroot/usr/lib/syslinux/mboot.c32 ${DATA_PATH}
+			;;
+		disabled)
+			cp /usr/lib/syslinux/mboot.c32 ${DATA_PATH}
+			;;
+	esac
+
+	XEN_KERNELS=$(find chroot/boot/ -name 'xen-*' -printf "%f ")
+	for XEN_KERNEL in ${XEN_KERNELS}
+	do
+		Syslinux_live_entry "live-xen" "${LH_SYSLINUX_MENU_LIVE_ENTRY} (${XEN_KERNEL})" "${DEFAULT_KERNEL}" "${DEFAULT_INITRD}"
+	done
+else
+	Syslinux_live_entry "live" "${LH_SYSLINUX_MENU_LIVE_ENTRY}" "${DEFAULT_KERNEL}" "${DEFAULT_INITRD}"
+fi
 
 if [ "$(echo ${LH_LINUX_FLAVOURS} | wc -w)" -gt "1" ]
 then
@@ -517,7 +556,15 @@ then
 		then
 			FLAVOUR_KERNEL="$(basename chroot/boot/vmlinuz-*${FLAVOUR})"
 			FLAVOUR_INITRD="initrd.img-$(echo ${FLAVOUR_KERNEL} | sed -e 's|vmlinuz-||')"
-			Syslinux_live_entry "live-${FLAVOUR}" "${LH_SYSLINUX_MENU_LIVE_ENTRY} ${FLAVOUR}" "${FLAVOUR_KERNEL}" "${FLAVOUR_INITRD}"
+			if echo ${DEFAULT_FLAVOUR} | grep -q 'xen-'
+			then
+				for XEN_KERNEL in ${XEN_KERNELS}
+				do
+					Syslinux_live_entry "live-${FLAVOUR}" "${LH_SYSLINUX_MENU_LIVE_ENTRY} ${FLAVOUR}" "${FLAVOUR_KERNEL}" "${FLAVOUR_INITRD}"
+				done
+			else
+				Syslinux_live_entry "live-${FLAVOUR}" "${LH_SYSLINUX_MENU_LIVE_ENTRY} ${FLAVOUR}" "${FLAVOUR_KERNEL}" "${FLAVOUR_INITRD}"
+			fi
 		fi
 	done
 fi

Reply to: