--- /dev/null
+SHELL = /bin/bash
+
+PWD := $(shell pwd)
+
+ifndef BOOT_CONFIG
+BOOT_CONFIG=config
+endif
+
+-include $(BOOT_CONFIG)
+
+
+
+.SILENT:
+
+GPXEDIR = gpxe
+SYSLINUXDIR = syslinux
+SUPPORTDIRS = $(SYSLINUXDIR) $(GPXEDIR)
+
+GPXEIMAGESDIR = gpxe_images
+
+
+all: make_gpxe make_syslinux
+
+
+make_gpxe :
+ cat gpxe_UbuntuNet/pxeDHCP.bko.tmpl | sed 's/P_BOOT_URL/$(shell echo "$(BASE_URL)" | sed -e 's/\//\\\//gi' )/g' > $(GPXEDIR)/src/pxeDHCP.gpxe
+ cat gpxe_UbuntuNet/pxeSTATIC.bko.tmpl | sed 's/P_BOOT_URL/$(shell echo "$(BASE_URL)" | sed -e 's/\//\\\//gi' )/g' > $(GPXEDIR)/src/pxeSTATIC.gpxe
+ $(MAKE) $(MFLAGS) EMBEDDED_IMAGE=pxeDHCP.gpxe,pxeSTATIC.gpxe -C $(GPXEDIR)/src -f Makefile
+ $(MAKE) $(MFLAGS) EMBEDDED_IMAGE=pxeDHCP.gpxe,pxeSTATIC.gpxe -C $(GPXEDIR)/src -f Makefile bin/gpxe.usb
+ $(MAKE) $(MFLAGS) EMBEDDED_IMAGE=pxeDHCP.gpxe,pxeSTATIC.gpxe -C $(GPXEDIR)/src -f Makefile bin/gpxe.dsk
+ $(MAKE) $(MFLAGS) EMBEDDED_IMAGE=pxeDHCP.gpxe,pxeSTATIC.gpxe -C $(GPXEDIR)/src -f Makefile bin/gpxe.iso
+ $(MAKE) $(MFLAGS) EMBEDDED_IMAGE=pxeDHCP.gpxe,pxeSTATIC.gpxe -C $(GPXEDIR)/src -f Makefile bin/gpxe.pxe
+ $(MAKE) $(MFLAGS) EMBEDDED_IMAGE=pxeDHCP.gpxe,pxeSTATIC.gpxe -C $(GPXEDIR)/src -f Makefile bin/gpxe.lkrn
+ $(MAKE) $(MFLAGS) EMBEDDED_IMAGE=pxeDHCP.gpxe,pxeSTATIC.gpxe -C $(GPXEDIR)/src -f Makefile bin/undionly.kpxe
+ mkdir -p gpxe_images
+ mv $(GPXEDIR)/src/bin/gpxe.usb $(GPXEDIR)/src/bin/gpxe.dsk $(GPXEDIR)/src/bin/gpxe.iso $(GPXEIMAGESDIR)/
+ mv $(GPXEDIR)/src/bin/gpxe.pxe $(GPXEDIR)/src/bin/undionly.kpxe $(GPXEDIR)/src/bin/gpxe.lkrn $(GPXEIMAGESDIR)/
+
+
+make_syslinux :
+ ${MAKE} ${MFLAGS} -C ${SYSLINUXDIR} -f Makefile
+ mkdir -p boot
+ find \
+ $(SYSLINUXDIR) \
+ -type f \
+ \( \
+ -name *.c32 \
+ -o \
+ -name memdisk \
+ -o \
+ -name pxelinux.0 \
+ \) \
+ -exec cp {} boot/ \;
+
+
+clean : clean_gpxe clean_syslinux
+
+clean_gpxe :
+ $(MAKE) $(MFLAGS) -C $(GPXEDIR)/src -f Makefile clean
+
+
+clean_syslinux :
+ ${MAKE} ${MFLAGS} -C ${SYSLINUXDIR} -f Makefile clean
+
--- /dev/null
+#!/bin/sh
+
+# set -e
+
+export PATH=/usr/bin:/usr/sbin:/bin:/sbin
+
+mountpoint=/cdrom
+LIVE_MEDIA_PATH=casper
+
+root_persistence="casper-rw"
+home_persistence="home-rw"
+root_snapshot_label="casper-sn"
+home_snapshot_label="home-sn"
+
+USERNAME=casper
+USERFULLNAME="Live session user"
+HOST=live
+BUILD_SYSTEM=Custom
+
+mkdir -p $mountpoint
+tried=/tmp/tried
+
+[ -f /etc/casper.conf ] && . /etc/casper.conf
+export USERNAME USERFULLNAME HOST BUILD_SYSTEM
+
+. /scripts/casper-helpers
+
+if [ ! -f /casper.vars ]; then
+ touch /casper.vars
+fi
+
+parse_cmdline() {
+ for x in $(cat /proc/cmdline); do
+ case $x in
+ showmounts|show-cow)
+ export SHOWMOUNTS='Yes' ;;
+ persistent)
+ export PERSISTENT="Yes" ;;
+ nopersistent)
+ export PERSISTENT="" ;;
+ union=*)
+ export UNIONFS="${x#union=}";;
+ ip*)
+ STATICIP=${x#ip=}
+ if [ "${STATICIP}" = "" ]; then
+ STATICIP="frommedia"
+ fi
+ export STATICIP ;;
+ ignore_uuid)
+ IGNORE_UUID="Yes" ;;
+ live-media-path=*)
+ LIVE_MEDIA_PATH="${x#live-media-path=}"
+ export LIVE_MEDIA_PATH
+ echo "export LIVE_MEDIA_PATH=\"$LIVE_MEDIA_PATH\"" >> /etc/casper.conf ;;
+ esac
+ done
+ if [ "${UNIONFS}" = "" ]; then
+ export UNIONFS="aufs"
+ fi
+}
+
+is_casper_path() {
+ path=$1
+ if [ -d "$path/$LIVE_MEDIA_PATH" ]; then
+ if [ "$(echo $path/$LIVE_MEDIA_PATH/*.squashfs)" != "$path/$LIVE_MEDIA_PATH/*.squashfs" ] ||
+ [ "$(echo $path/$LIVE_MEDIA_PATH/*.ext2)" != "$path/$LIVE_MEDIA_PATH/*.ext2" ] ||
+ [ "$(echo $path/$LIVE_MEDIA_PATH/*.dir)" != "$path/$LIVE_MEDIA_PATH/*.dir" ]; then
+ return 0
+ fi
+ fi
+ return 1
+}
+
+matches_uuid() {
+ if [ "$IGNORE_UUID" ] || [ ! -e /conf/uuid.conf ]; then
+ return 0
+ fi
+ path="$1"
+ uuid="$(cat /conf/uuid.conf)"
+ for try_uuid_file in "$path/.disk/casper-uuid"*; do
+ [ -e "$try_uuid_file" ] || continue
+ try_uuid="$(cat "$try_uuid_file")"
+ if [ "$uuid" = "$try_uuid" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+get_backing_device() {
+ case "$1" in
+ *.squashfs|*.ext2)
+ echo $(setup_loop "$1" "loop" "/sys/block/loop*")
+ ;;
+ *.dir)
+ echo "directory"
+ ;;
+ *)
+ panic "Unrecognized casper filesystem: $1"
+ ;;
+ esac
+}
+
+match_files_in_dir() {
+ # Does any files match pattern $1 ?
+
+ local pattern="$1"
+ if [ "$(echo $pattern)" != "$pattern" ]; then
+ return 0
+ fi
+ return 1
+}
+
+mount_images_in_directory() {
+ directory="$1"
+ rootmnt="$2"
+ if match_files_in_dir "$directory/$LIVE_MEDIA_PATH/*.squashfs" ||
+ match_files_in_dir "$directory/$LIVE_MEDIA_PATH/*.ext2" ||
+ match_files_in_dir "$directory/$LIVE_MEDIA_PATH/*.dir"; then
+ setup_unionfs "$directory/$LIVE_MEDIA_PATH" "$rootmnt"
+ else
+ :
+ fi
+}
+
+is_nice_device() {
+ sysfs_path="${1#/sys}"
+ if /lib/udev/path_id "${sysfs_path}" | grep -E -q "ID_PATH=(usb|pci-[^-]*-(ide|scsi|usb)|platform-orion-ehci|platform-mmc|platform-mxsdhci)"; then
+ return 0
+ fi
+ if echo ${sysfs_path} | grep -q "^/block/dm-"; then
+ return 0
+ fi
+ return 1
+}
+
+copy_live_to() {
+ copyfrom="${1}"
+ copytodev="${2}"
+ copyto="${copyfrom}_swap"
+
+ size=$(fs_size "" ${copyfrom} "used")
+
+ if [ "${copytodev}" = "ram" ]; then
+ # copying to ram:
+ freespace=$( expr $(awk '/MemFree/{print $2}' /proc/meminfo) + $( cat /proc/meminfo | grep Cached | head -n 1 | awk '/Cached/{print $2}' - ) )
+ mount_options="-o size=${size}k"
+ free_string="memory"
+ fstype="tmpfs"
+ dev="/dev/shm"
+ else
+ # it should be a writable block device
+ if [ -b "${copytodev}" ]; then
+ dev="${copytodev}"
+ free_string="space"
+ fstype=$(get_fstype "${dev}")
+ freespace=$(fs_size "${dev}")
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "${copytodev} is not a block device."
+ return 1
+ fi
+ fi
+ if [ "${freespace}" -lt "${size}" ] ; then
+ [ "$quiet" != "y" ] && log_warning_msg "Not enough free ${free_string} (${freespace}k > ${size}k) to copy live media in ${copytodev}."
+ return 1
+ fi
+
+ # begin copying..
+ mkdir "${copyto}"
+ echo "mount -t ${fstype} ${mount_options} ${dev} ${copyto}"
+ mount -t "${fstype}" ${mount_options} "${dev}" "${copyto}"
+ cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files
+ umount ${copyfrom}
+ mount -r -o move ${copyto} ${copyfrom}
+ rmdir ${copyto}
+ return 0
+}
+
+add_ip_to_resolv_conf ()
+{
+ if [ ! -z ${1} ]
+ then
+ echo "nameserver $1" >> /etc/resolv.conf
+ fi
+}
+
+setup_static_ip ()
+{
+ ifconfig lo 127.0.0.1 up
+ ifconfig "${DEVICE}" up
+ local myip=`echo ${STATICIP} | cut -d: -f1`
+ local mynm=`echo ${STATICIP} | cut -d: -f4`
+ local mygw=`echo ${STATICIP} | cut -d: -f3`
+ echo "myip=${myip} mynm=${mynm} mygw=${mygw}"
+ ifconfig "${DEVICE}" "${myip}" netmask "${mynm}"
+ ifconfig "${DEVICE}"
+ route add default gw "${mygw}"
+ return 0
+}
+
+setup_static_dns ()
+{
+ if [ -z ${DNSIP} ]
+ then
+ add_ip_to_resolv_conf "4.2.2.2"
+ add_ip_to_resolv_conf "128.255.1.3"
+ else
+ for x in $( echo "${DNS}" | sed 's/,/ /g')
+ do
+ add_ip_to_resolv_conf ${x}
+ done
+ fi
+ return 0
+}
+
+
+do_netmount() {
+ rc=1
+
+ modprobe "${MP_QUIET}" af_packet # For DHCP
+
+ /sbin/udevadm trigger
+ /sbin/udevadm settle
+
+ if [ -z ${BOOTIP} ]
+ then
+ ipconfig ${DEVICE} /tmp/net-${DEVICE}.conf | tee /netboot.config
+
+ # Adding DNS Entry
+ local ipconf_dnsip=`cat /netboot.config | grep dns0 | cut -d':' -f3 | cut -d' ' -f2`
+ if [ -z ${ipconf_dnsip}] || [ ${ipconf_dnsip} == '0.0.0.0']
+ then
+ setup_static_dns
+ else
+ add_ip_to_resolv_conf ${ipconf_dnsip}
+ fi
+ # source relevant ipconfig output
+ OLDHOSTNAME=${HOSTNAME}
+ . /tmp/net-${DEVICE}.conf
+ [ -z ${HOSTNAME} ] && HOSTNAME=${OLDHOSTNAME}
+ export HOSTNAME
+
+ else
+ setup_static_ip
+ setup_static_dns
+ fi
+
+
+ if [ "${NFSROOT}" = "auto" ]; then
+ NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ fi
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying netboot from ${NFSROOT}"
+
+ if [ "${NETBOOT}" == "http" ] && do_httpfsmount ; then
+ rc=0
+ elif [ "${NETBOOT}" == "iscsi" ] && do_iscsifsmount ; then
+ rc=0
+ elif [ "${NETBOOT}" != "nfs" ] && do_cifsmount ; then
+ rc=0
+ elif do_nfsmount ; then
+ NETBOOT="nfs"
+ export NETBOOT
+ rc=0
+ fi
+
+ [ "$quiet" != "y" ] && log_end_msg
+ return ${rc}
+}
+
+
+
+do_nfsmount() {
+ rc=1
+ modprobe "${MP_QUIET}" nfs
+ if [ -z "${NFSOPTS}" ]; then
+ NFSOPTS=""
+ fi
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying nfsmount -o nolock -o ro ${NFSOPTS} ${NFSROOT} ${mountpoint}"
+ # FIXME: This while loop is an ugly HACK round an nfs bug
+ i=0
+ while [ "$i" -lt 60 ]; do
+ nfsmount -o nolock -o ro ${NFSOPTS} "${NFSROOT}" "${mountpoint}" && rc=0 && break
+ sleep 1
+ i="$(($i + 1))"
+ done
+ return ${rc}
+}
+
+do_iscsifsmount ()
+{
+ rc=1
+
+ echo "inside iscsimount" >> /mylogs
+
+ #insmod /modules/libcrc32c.ko
+ #insmod /modules/crc32c.ko
+ modprobe scsi-transport-iscsi
+ modprobe libiscsi
+ modprobe iscsi_tcp
+ mkdir /var/run
+ /sbin/iscsid
+ sleep 4
+ iscsiadm -m discovery -t st -p "${ISCSIFS}" >> /mylogs
+ sleep 4
+ targetname=`iscsiadm -m node | grep "${TARGET}" | cut -d' ' -f2`
+ iscsiadm -m node --targetname "${targetname}" --login >> /mylogs
+ sync
+ i=0
+# iscsiadm -m session -P 3 | grep "attached scsi disk"
+ export iscsidevice=/dev/disk/by-label/Ubuntu\\x209.10\\x20i386
+ while [ "$i" -lt 160 ]
+ do
+ ls -l "${iscsidevice}" && break
+ i="$(($i + 1))"
+ echo "waiting for iscsi disk to appear $i"
+ sleep 1
+ sync
+ done
+ mount -t iso9660 "${iscsidevice}" "${mountpoint}"
+ rc=${?}
+ sync
+ sleep 2
+ rc=0
+ return $rc
+}
+
+do_httpfsmount() {
+ # objectives:
+ # Enable networking.
+ # Setup networking.
+ # Find the location from which we need to get the ISO.
+ # Mount the ISO.
+ rc=1
+
+ log_begin_msg "############# inside HTTPFS #########"
+ log_end_msg
+
+ echo "#################################"
+ echo "passed on path is ${HTTPFS}" >> status
+ ISO_PATH="${HTTPFS}"
+ echo "The location of ubuntu iso is $ISO_PATH" >> /output
+ echo "mounting CDROM" >> /output
+
+ issquash=`echo "$ISO_PATH" | grep "filesystem.squashfs"`
+ mytest=${?}
+ if [ "${mytest}" = "0" ]
+ then
+ mkdir -p ${mountpoint}/casper/
+ httpfs $ISO_PATH ${mountpoint}/casper/
+ else
+
+ mkdir /iso
+ httpfs $ISO_PATH /iso
+ FILEPATH=`ls /iso/*`
+ echo "File path is $FILEPATH\n" >> /output
+ losetup -r /dev/loop0 $FILEPATH
+ mount -t iso9660 $FILEPATH "${mountpoint}" -o loop -o ro
+ fi
+
+ # test if knoppix is there
+ if test -d /cdrom/casper
+ then
+ echo "successfully mounted the Image" >> /output
+ #return 0
+ rc=0
+ fi
+# /bin/sh
+ return ${rc}
+
+}
+
+
+do_cifsmount() {
+ rc=1
+ if [ -x "/sbin/mount.cifs" ]; then
+ if [ -z "${NFSOPTS}" ]; then
+ CIFSOPTS="-ouser=root,password="
+ else
+ CIFSOPTS="${NFSOPTS}"
+ fi
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying mount.cifs ${NFSROOT} ${mountpoint} ${CIFSOPTS}"
+ modprobe "${MP_QUIET}" cifs
+
+ if mount.cifs "${NFSROOT}" "${mountpoint}" "${CIFSOPTS}" ; then
+ rc=0
+ fi
+ fi
+ return ${rc}
+}
+
+do_snap_copy ()
+{
+ fromdev="${1}"
+ todir="${2}"
+ snap_type="${3}"
+
+ size=$(fs_size "${fromdev}" "" "used")
+
+ if [ -b "${fromdev}" ]; then
+ # look for free mem
+ if [ -n "${HOMEMOUNTED}" -a "${snap_type}" = "HOME" ]; then
+ todev=$(cat /proc/mounts | grep -s " $(base_path ${todir}) " | awk '{print $1}' )
+ freespace=$(df -k | grep -s ${todev} | awk '{print $4}')
+ else
+ freespace=$( expr $(awk '/MemFree/{print $2}' /proc/meminfo) + $( cat /proc/meminfo | grep Cached | head -n 1 | awk '/Cached/{print $2}' - ))
+ fi
+
+ tomount="/mnt/tmpsnap"
+ if [ ! -d "${tomount}" ] ; then
+ mkdir -p "${tomount}"
+ fi
+
+ fstype=$(get_fstype "${fromdev}")
+ if [ -n "${fstype}" ]; then
+ # Copying stuff...
+ mount -t "${fstype}" -o ro,noatime "${fromdev}" "${tomount}"
+ cp -a "${tomount}"/* ${todir}
+ umount "${tomount}"
+ else
+ log_warning_msg "Unrecognized fstype: ${fstype} on ${fromdev}:${snap_type}"
+ fi
+
+ rmdir "${tomount}"
+ if echo ${fromdev} | grep -qs loop; then
+ losetup -d "${fromdev}"
+ fi
+ return 0
+ else
+ return 1
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the snapshot ${snap_type} medium"
+ fi
+}
+
+try_snap ()
+{
+ # Look for $snap_label.* in block devices and copy the contents to $snap_mount
+ # and remember the device and filename for resync on exit in casper.init
+
+ snap_label="${1}"
+ snap_mount="${2}"
+ snap_type="${3}"
+
+ snapdata=$(find_files "${snap_label}.squashfs ${snap_label}.cpio.gz ${snap_label}.ext2")
+ if [ ! -z "${snapdata}" ]; then
+ snapdev="$(echo ${snapdata} | cut -f1 -d ' ')"
+ snapback="$(echo ${snapdata} | cut -f2 -d ' ')"
+ snapfile="$(echo ${snapdata} | cut -f3 -d ' ')"
+ if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\)'; then
+ # squashfs or ext2 snapshot
+ dev=$(get_backing_device "${snapback}/${snapfile}")
+ if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}"; then
+ log_warning_msg "Impossible to include the ${snapfile} Snapshot"
+ return 1
+ fi
+ else
+ # cpio.gz snapshot
+ # Unfortunately klibc's cpio is incompatible with the rest of
+ # the world; everything else requires -u -d, while klibc doesn't
+ # implement them. Try to detect whether it's in use.
+ cpiopath="$(which cpio)" || true
+ if [ "$cpiopath" ] && grep -aq /lib/klibc "$cpiopath"; then
+ cpioargs=
+ else
+ cpioargs='-u -d'
+ fi
+ if ! (cd "${snap_mount}" && zcat "${snapback}/${snapfile}" | cpio -i $cpioargs 2>/dev/null) ; then
+ log_warning_msg "Impossible to include the ${snapfile} Snapshot"
+ return 1
+ fi
+ fi
+ umount "${snapback}"
+ else
+ dev=$(find_cow_device "${snap_label}")
+ if [ -b "${dev}" ]; then
+ if echo "${dev}" | grep -qs loop; then
+ # strange things happens, user confused?
+ snaploop=$( losetup ${dev} | awk '{print $3}' | tr -d '()' )
+ snapfile=$(basename ${snaploop})
+ snapdev=$(cat /proc/mounts | awk '{print $2,$1}' | grep -es "^$( dirname ${snaploop} )" | cut -f2 -d ' ')
+ else
+ snapdev="${dev}"
+ fi
+ if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}" ; then
+ log_warning_msg "Impossible to include the ${snap_label} Snapshot"
+ return 1
+ else
+ if [ -n "${snapfile}" ]; then
+ # it was a loop device, user confused
+ umount ${snapdev}
+ fi
+ fi
+ else
+ log_warning_msg "Impossible to include the ${snap_label} Snapshot"
+ return 1
+ fi
+ fi
+ echo "export ${snap_type}SNAP="/cow${snap_mount#$rootmnt}":${snapdev}:${snapfile}" >> /etc/casper.conf # for resync on reboot/halt
+ return 0
+}
+
+setup_unionfs() {
+ image_directory="$1"
+ rootmnt="$2"
+
+ case ${UNIONFS} in
+ aufs|unionfs)
+ modprobe "${MP_QUIET}" -b ${UNIONFS} || true
+ if ! cut -f2 /proc/filesystems | grep -q "^${UNIONFS}\$" && \
+ [ -x /bin/unionfs-fuse ]; then
+ UNIONFS="unionfs-fuse"
+ fi
+ ;;
+ esac
+
+ # run-init can't deal with images in a subdir, but we're going to
+ # move all of these away before it runs anyway. No, we're not,
+ # put them in / since move-mounting them into / breaks mono and
+ # some other apps.
+
+ croot="/"
+
+ # Let's just mount the read-only file systems first
+ rofsstring=""
+ rofslist=""
+ if [ "${NETBOOT}" = "nfs" ] ; then
+ roopt="nfsro" # work around a bug in nfs-unionfs locking
+ elif [ "${UNIONFS}" = "aufs" ]; then
+ roopt="rr"
+ elif [ "${UNIONFS}" = "unionfs-fuse" ]; then
+ roopt="RO"
+ else
+ roopt="ro"
+ fi
+
+ mkdir -p "${croot}"
+ for image_type in "ext2" "squashfs" "dir" ; do
+ for image in "${image_directory}"/*."${image_type}"; do
+ imagename=$(basename "${image}")
+ if [ -d "${image}" ]; then
+ # it is a plain directory: do nothing
+ rofsstring="${image}=${roopt}:${rofsstring}"
+ rofslist="${image} ${rofslist}"
+ elif [ -f "${image}" ]; then
+ backdev=$(get_backing_device "$image")
+ fstype=$(get_fstype "${backdev}")
+ if [ "${fstype}" = "unknown" ]; then
+ panic "Unknown file system type on ${backdev} (${image})"
+ fi
+ mkdir -p "${croot}/${imagename}"
+ mount -t "${fstype}" -o ro,noatime "${backdev}" "${croot}/${imagename}" || panic "Can not mount $backdev ($image) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}"
+ fi
+ done
+ done
+ rofsstring=${rofsstring%:}
+
+ mkdir -p /cow
+ cowdevice="tmpfs"
+ cow_fstype="tmpfs"
+ cow_mountopt="rw,noatime,mode=755"
+
+ # Looking for "${root_persistence}" device or file
+ if [ -n "${PERSISTENT}" ]; then
+ cowprobe=$(find_cow_device "${root_persistence}")
+ if [ -b "${cowprobe}" ]; then
+ cowdevice=${cowprobe}
+ cow_fstype=$(get_fstype "${cowprobe}")
+ cow_mountopt="rw,noatime"
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the persistent medium"
+ fi
+ fi
+
+ mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} /cow || panic "Can not mount $cowdevice on /cow"
+
+ case ${UNIONFS} in
+ unionfs-fuse)
+ (ulimit -n 16384; unionfs-fuse -o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid /cow=RW:$rofsstring "$rootmnt" || panic "${UNIONFS} mount failed")
+ mkdir -p /dev/.initramfs/varrun
+ pidof unionfs-fuse >> /dev/.initramfs/varrun/sendsigs.omit || true
+ ;;
+ *)
+ mount -t ${UNIONFS} -o noatime,dirs=/cow=rw:$rofsstring ${UNIONFS} "$rootmnt" || panic "${UNIONFS} mount failed"
+ ;;
+ esac
+
+ # Adding other custom mounts
+ if [ -n "${PERSISTENT}" ]; then
+ # directly mount /home
+ # FIXME: add a custom mounts configurable system
+ homecow=$(find_cow_device "${home_persistence}" )
+ if [ -b "${homecow}" ]; then
+ mount -t $(get_fstype "${homecow}") -o rw,noatime "${homecow}" "${rootmnt}/home"
+ export HOMEMOUNTED=1 # used to proper calculate free space in do_snap_copy()
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the persistent home medium"
+ fi
+ # Look for other snapshots to copy in
+ try_snap "${root_snapshot_label}" "${rootmnt}" "ROOT"
+ try_snap "${home_snapshot_label}" "${rootmnt}/home" "HOME"
+ fi
+
+ if [ -n "${SHOWMOUNTS}" ]; then
+ for d in ${rofslist}; do
+ mkdir -p "${rootmnt}/${LIVE_MEDIA_PATH}/${d##*/}"
+ case d in
+ *.dir) # do nothing # mount -o bind "${d}" "${rootmnt}/${LIVE_MEDIA_PATH}/${d##*/}"
+ ;;
+ *)
+ if [ "${UNIONFS}" = unionfs-fuse ]; then
+ mount -o bind "${d}" "${rootmnt}/${LIVE_MEDIA_PATH}/${d##*/}"
+ else
+ mount -o move "${d}" "${rootmnt}/${LIVE_MEDIA_PATH}/${d##*/}"
+ fi
+ ;;
+ esac
+ done
+ # shows cow fs on /cow for use by casper-snapshot
+ mkdir -p "${rootmnt}/cow"
+ mount -o bind /cow "${rootmnt}/cow"
+ fi
+
+ # move the first mount; no head in busybox-initramfs
+ for d in $(mount -t squashfs | cut -d\ -f 3); do
+ mkdir -p "${rootmnt}/rofs"
+ if [ "${UNIONFS}" = unionfs-fuse ]; then
+ mount -o bind "${d}" "${rootmnt}/rofs"
+ else
+ mount -o move "${d}" "${rootmnt}/rofs"
+ fi
+ break
+ done
+}
+
+check_dev ()
+{
+ sysdev="${1}"
+ devname="${2}"
+ skip_uuid_check="${3}"
+ if [ -z "${devname}" ]; then
+ devname=$(sys2dev "${sysdev}")
+ fi
+
+ if [ -d "${devname}" ]; then
+ mount -o bind "${devname}" $mountpoint || continue
+ if is_casper_path $mountpoint; then
+ echo $mountpoint
+ return 0
+ else
+ umount $mountpoint
+ fi
+ fi
+ [ -e "$devname" ] || continue
+
+ if [ -n "${LIVEMEDIA_OFFSET}" ]; then
+ loopdevname=$(setup_loop "${devname}" "loop" "/sys/block/loop*" "${LIVEMEDIA_OFFSET}")
+ devname="${loopdevname}"
+ fi
+
+ fstype=$(get_fstype "${devname}")
+ if is_supported_fs ${fstype}; then
+ devuid=$(blkid -o value -s UUID "$devname")
+ [ -n "$devuid" ] && grep -qs "\<$devuid\>" $tried && continue
+ mount -t ${fstype} -o ro,noatime "${devname}" $mountpoint || continue
+ [ -n "$devuid" ] && echo "$devuid" >> $tried
+ if is_casper_path $mountpoint && \
+ ([ "$skip_uuid_check" ] || matches_uuid $mountpoint); then
+ echo $mountpoint
+ return 0
+ else
+ umount $mountpoint
+ fi
+ fi
+
+ if [ -n "${LIVEMEDIA_OFFSET}" ]; then
+ losetup -d "${loopdevname}"
+ fi
+ return 1
+}
+
+find_livefs() {
+ timeout="${1}"
+ # first look at the one specified in the command line
+ if [ ! -z "${LIVEMEDIA}" ]; then
+ if check_dev "null" "${LIVEMEDIA}" "skip_uuid_check"; then
+ return 0
+ fi
+ fi
+ # don't start autodetection before timeout has expired
+ if [ -n "${LIVEMEDIA_TIMEOUT}" ]; then
+ if [ "${timeout}" -lt "${LIVEMEDIA_TIMEOUT}" ]; then
+ return 1
+ fi
+ fi
+ # or do the scan of block devices
+ for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|fd)"); do
+ devname=$(sys2dev "${sysblock}")
+ [ -e "$devname" ] || continue
+ fstype=$(get_fstype "${devname}")
+ if /lib/udev/cdrom_id ${devname} > /dev/null; then
+ if check_dev "null" "${devname}" ; then
+ return 0
+ fi
+ elif is_nice_device "${sysblock}" ; then
+ for dev in $(subdevices "${sysblock}"); do
+ if check_dev "${dev}" ; then
+ return 0
+ fi
+ done
+ elif [ "${fstype}" = "squashfs" -o \
+ "${fstype}" = "ext4" -o \
+ "${fstype}" = "ext3" -o \
+ "${fstype}" = "ext2" ]; then
+ # This is an ugly hack situation, the block device has
+ # an image directly on it. It's hopefully
+ # casper, so take it and run with it.
+ ln -s "${devname}" "${devname}.${fstype}"
+ echo "${devname}.${fstype}"
+ return 0
+ fi
+ done
+ return 1
+}
+
+set_usplash_timeout() {
+ if [ -x /sbin/usplash_write ]; then
+ /sbin/usplash_write "TIMEOUT 120"
+ fi
+}
+
+start_usplash_pulse() {
+ if [ -x /sbin/usplash_write ]; then
+ /sbin/usplash_write "PULSELOGO"
+ fi
+}
+
+mountroot() {
+ exec 6>&1
+ exec 7>&2
+ exec > casper.log
+ exec 2>&1
+ tail -f casper.log >&7 &
+ tailpid="$!"
+
+ parse_cmdline
+
+ set_usplash_timeout
+ start_usplash_pulse
+ [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-premount"
+ run_scripts /scripts/casper-premount
+ [ "$quiet" != "y" ] && log_end_msg
+
+ # Needed here too because some things (*cough* udev *cough*)
+ # changes the timeout
+
+ set_usplash_timeout
+
+ if [ ! -z "${NETBOOT}" ]; then
+ if do_netmount ; then
+ livefs_root="${mountpoint}"
+ else
+ panic "Unable to find a live file system on the network"
+ fi
+ else
+ # Scan local devices for the image
+ i=0
+ while [ "$i" -lt 60 ]; do
+ livefs_root=$(find_livefs $i)
+ if [ "${livefs_root}" ]; then
+ break
+ fi
+ sleep 1
+ i="$(($i + 1))"
+ done
+ fi
+
+ if [ -z "${livefs_root}" ]; then
+ panic "Unable to find a medium containing a live file system"
+ fi
+
+ if [ "${TORAM}" ]; then
+ live_dest="ram"
+ elif [ "${TODISK}" ]; then
+ live_dest="${TODISK}"
+ fi
+ if [ "${live_dest}" ]; then
+ log_begin_msg "Copying live_media to ${live_dest}"
+ copy_live_to "${livefs_root}" "${live_dest}"
+ log_end_msg
+ fi
+
+ mount_images_in_directory "${livefs_root}" "${rootmnt}"
+
+ log_end_msg
+
+ # unionfs-fuse needs /dev to be bind-mounted for the duration of
+ # casper-bottom; udev's init script will take care of things after that
+ if [ "${UNIONFS}" = unionfs-fuse ]; then
+ mount -n -o bind /dev "${rootmnt}/dev"
+ fi
+
+ maybe_break casper-bottom
+ [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-bottom"
+
+ run_scripts /scripts/casper-bottom
+ [ "$quiet" != "y" ] && log_end_msg
+
+ if [ "${UNIONFS}" = unionfs-fuse ]; then
+ umount "${rootmnt}/dev"
+ fi
+
+# This may still cause trouble with installing off of the livecd, but at least this will be more obvious
+echo "iface eth0 inet manual #httpfs" >> "${rootmnt}/etc/network/interfaces"
+ exec 1>&6 6>&-
+ exec 2>&7 7>&-
+ kill "$tailpid"
+ cp casper.log "${rootmnt}/var/log/"
+ if [ -f /etc/casper.conf ]; then
+ cp /etc/casper.conf "${rootmnt}/etc/"
+ fi
+}
--- /dev/null
+#!/bin/sh
+
+# set -e
+
+export PATH=/usr/bin:/usr/sbin:/bin:/sbin
+
+mountpoint=/cdrom
+LIVE_MEDIA_PATH=casper
+
+root_persistence="casper-rw"
+home_persistence="home-rw"
+root_snapshot_label="casper-sn"
+home_snapshot_label="home-sn"
+
+USERNAME=casper
+USERFULLNAME="Live session user"
+HOST=live
+BUILD_SYSTEM=Custom
+
+mkdir -p $mountpoint
+tried=/tmp/tried
+
+[ -f /etc/casper.conf ] && . /etc/casper.conf
+export USERNAME USERFULLNAME HOST BUILD_SYSTEM
+
+. /scripts/casper-helpers
+
+if [ ! -f /casper.vars ]; then
+ touch /casper.vars
+fi
+
+parse_cmdline() {
+ for x in $(cat /proc/cmdline); do
+ case $x in
+ showmounts|show-cow)
+ export SHOWMOUNTS='Yes' ;;
+ persistent)
+ export PERSISTENT="Yes" ;;
+ nopersistent)
+ export PERSISTENT="" ;;
+ union=*)
+ export UNIONFS="${x#union=}";;
+ ip*)
+ STATICIP=${x#ip=}
+ if [ "${STATICIP}" = "" ]; then
+ STATICIP="frommedia"
+ fi
+ export STATICIP ;;
+ ignore_uuid)
+ IGNORE_UUID="Yes" ;;
+ live-media-path=*)
+ LIVE_MEDIA_PATH="${x#live-media-path=}"
+ export LIVE_MEDIA_PATH
+ echo "export LIVE_MEDIA_PATH=\"$LIVE_MEDIA_PATH\"" >> /etc/casper.conf ;;
+ esac
+ done
+ if [ "${UNIONFS}" = "" ]; then
+ export UNIONFS="aufs"
+ fi
+}
+
+is_casper_path() {
+ path=$1
+ if [ -d "$path/$LIVE_MEDIA_PATH" ]; then
+ if [ "$(echo $path/$LIVE_MEDIA_PATH/*.squashfs)" != "$path/$LIVE_MEDIA_PATH/*.squashfs" ] ||
+ [ "$(echo $path/$LIVE_MEDIA_PATH/*.ext2)" != "$path/$LIVE_MEDIA_PATH/*.ext2" ] ||
+ [ "$(echo $path/$LIVE_MEDIA_PATH/*.dir)" != "$path/$LIVE_MEDIA_PATH/*.dir" ]; then
+ return 0
+ fi
+ fi
+ return 1
+}
+
+matches_uuid() {
+ if [ "$IGNORE_UUID" ] || [ ! -e /conf/uuid.conf ]; then
+ return 0
+ fi
+ path="$1"
+ uuid="$(cat /conf/uuid.conf)"
+ for try_uuid_file in "$path/.disk/casper-uuid"*; do
+ [ -e "$try_uuid_file" ] || continue
+ try_uuid="$(cat "$try_uuid_file")"
+ if [ "$uuid" = "$try_uuid" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+get_backing_device() {
+ case "$1" in
+ *.squashfs|*.ext2)
+ echo $(setup_loop "$1" "loop" "/sys/block/loop*")
+ ;;
+ *.dir)
+ echo "directory"
+ ;;
+ *)
+ panic "Unrecognized casper filesystem: $1"
+ ;;
+ esac
+}
+
+match_files_in_dir() {
+ # Does any files match pattern $1 ?
+
+ local pattern="$1"
+ if [ "$(echo $pattern)" != "$pattern" ]; then
+ return 0
+ fi
+ return 1
+}
+
+mount_images_in_directory() {
+ directory="$1"
+ rootmnt="$2"
+ if match_files_in_dir "$directory/$LIVE_MEDIA_PATH/*.squashfs" ||
+ match_files_in_dir "$directory/$LIVE_MEDIA_PATH/*.ext2" ||
+ match_files_in_dir "$directory/$LIVE_MEDIA_PATH/*.dir"; then
+ setup_unionfs "$directory/$LIVE_MEDIA_PATH" "$rootmnt"
+ else
+ :
+ fi
+}
+
+is_nice_device() {
+ sysfs_path="${1#/sys}"
+ if /lib/udev/path_id "${sysfs_path}" | grep -E -q "ID_PATH=(usb|pci-[^-]*-(ide|scsi|usb)|platform-orion-ehci|platform-mmc|platform-mxsdhci)"; then
+ return 0
+ fi
+ if echo ${sysfs_path} | grep -q "^/block/dm-"; then
+ return 0
+ fi
+ return 1
+}
+
+copy_live_to() {
+ copyfrom="${1}"
+ copytodev="${2}"
+ copyto="${copyfrom}_swap"
+
+ size=$(fs_size "" ${copyfrom} "used")
+
+ if [ "${copytodev}" = "ram" ]; then
+ # copying to ram:
+ freespace=$( expr $(awk '/MemFree/{print $2}' /proc/meminfo) + $( cat /proc/meminfo | grep Cached | head -n 1 | awk '/Cached/{print $2}' - ) )
+ mount_options="-o size=${size}k"
+ free_string="memory"
+ fstype="tmpfs"
+ dev="/dev/shm"
+ else
+ # it should be a writable block device
+ if [ -b "${copytodev}" ]; then
+ dev="${copytodev}"
+ free_string="space"
+ fstype=$(get_fstype "${dev}")
+ freespace=$(fs_size "${dev}")
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "${copytodev} is not a block device."
+ return 1
+ fi
+ fi
+ if [ "${freespace}" -lt "${size}" ] ; then
+ [ "$quiet" != "y" ] && log_warning_msg "Not enough free ${free_string} (${freespace}k > ${size}k) to copy live media in ${copytodev}."
+ return 1
+ fi
+
+ # begin copying..
+ mkdir "${copyto}"
+ echo "mount -t ${fstype} ${mount_options} ${dev} ${copyto}"
+ mount -t "${fstype}" ${mount_options} "${dev}" "${copyto}"
+ cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files
+ umount ${copyfrom}
+ mount -r -o move ${copyto} ${copyfrom}
+ rmdir ${copyto}
+ return 0
+}
+
+do_netmount() {
+ rc=1
+
+ modprobe "${MP_QUIET}" af_packet # For DHCP
+
+ /sbin/udevadm trigger
+ /sbin/udevadm settle
+
+ ipconfig ${DEVICE} /tmp/net-${DEVICE}.conf | tee /netboot.config
+
+ if [ "${NFSROOT}" = "auto" ]; then
+ NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ fi
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying netboot from ${NFSROOT}"
+
+ if [ "${NETBOOT}" != "nfs" ] && do_cifsmount ; then
+ rc=0
+ elif do_nfsmount ; then
+ NETBOOT="nfs"
+ export NETBOOT
+ rc=0
+ fi
+
+ [ "$quiet" != "y" ] && log_end_msg
+ return ${rc}
+}
+
+do_nfsmount() {
+ rc=1
+ modprobe "${MP_QUIET}" nfs
+ if [ -z "${NFSOPTS}" ]; then
+ NFSOPTS=""
+ fi
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying nfsmount -o nolock -o ro ${NFSOPTS} ${NFSROOT} ${mountpoint}"
+ # FIXME: This while loop is an ugly HACK round an nfs bug
+ i=0
+ while [ "$i" -lt 60 ]; do
+ nfsmount -o nolock -o ro ${NFSOPTS} "${NFSROOT}" "${mountpoint}" && rc=0 && break
+ sleep 1
+ i="$(($i + 1))"
+ done
+ return ${rc}
+}
+
+do_cifsmount() {
+ rc=1
+ if [ -x "/sbin/mount.cifs" ]; then
+ if [ -z "${NFSOPTS}" ]; then
+ CIFSOPTS="-ouser=root,password="
+ else
+ CIFSOPTS="${NFSOPTS}"
+ fi
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying mount.cifs ${NFSROOT} ${mountpoint} ${CIFSOPTS}"
+ modprobe "${MP_QUIET}" cifs
+
+ if mount.cifs "${NFSROOT}" "${mountpoint}" "${CIFSOPTS}" ; then
+ rc=0
+ fi
+ fi
+ return ${rc}
+}
+
+do_snap_copy ()
+{
+ fromdev="${1}"
+ todir="${2}"
+ snap_type="${3}"
+
+ size=$(fs_size "${fromdev}" "" "used")
+
+ if [ -b "${fromdev}" ]; then
+ # look for free mem
+ if [ -n "${HOMEMOUNTED}" -a "${snap_type}" = "HOME" ]; then
+ todev=$(cat /proc/mounts | grep -s " $(base_path ${todir}) " | awk '{print $1}' )
+ freespace=$(df -k | grep -s ${todev} | awk '{print $4}')
+ else
+ freespace=$( expr $(awk '/MemFree/{print $2}' /proc/meminfo) + $( cat /proc/meminfo | grep Cached | head -n 1 | awk '/Cached/{print $2}' - ))
+ fi
+
+ tomount="/mnt/tmpsnap"
+ if [ ! -d "${tomount}" ] ; then
+ mkdir -p "${tomount}"
+ fi
+
+ fstype=$(get_fstype "${fromdev}")
+ if [ -n "${fstype}" ]; then
+ # Copying stuff...
+ mount -t "${fstype}" -o ro,noatime "${fromdev}" "${tomount}"
+ cp -a "${tomount}"/* ${todir}
+ umount "${tomount}"
+ else
+ log_warning_msg "Unrecognized fstype: ${fstype} on ${fromdev}:${snap_type}"
+ fi
+
+ rmdir "${tomount}"
+ if echo ${fromdev} | grep -qs loop; then
+ losetup -d "${fromdev}"
+ fi
+ return 0
+ else
+ return 1
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the snapshot ${snap_type} medium"
+ fi
+}
+
+try_snap ()
+{
+ # Look for $snap_label.* in block devices and copy the contents to $snap_mount
+ # and remember the device and filename for resync on exit in casper.init
+
+ snap_label="${1}"
+ snap_mount="${2}"
+ snap_type="${3}"
+
+ snapdata=$(find_files "${snap_label}.squashfs ${snap_label}.cpio.gz ${snap_label}.ext2")
+ if [ ! -z "${snapdata}" ]; then
+ snapdev="$(echo ${snapdata} | cut -f1 -d ' ')"
+ snapback="$(echo ${snapdata} | cut -f2 -d ' ')"
+ snapfile="$(echo ${snapdata} | cut -f3 -d ' ')"
+ if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\)'; then
+ # squashfs or ext2 snapshot
+ dev=$(get_backing_device "${snapback}/${snapfile}")
+ if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}"; then
+ log_warning_msg "Impossible to include the ${snapfile} Snapshot"
+ return 1
+ fi
+ else
+ # cpio.gz snapshot
+ # Unfortunately klibc's cpio is incompatible with the rest of
+ # the world; everything else requires -u -d, while klibc doesn't
+ # implement them. Try to detect whether it's in use.
+ cpiopath="$(which cpio)" || true
+ if [ "$cpiopath" ] && grep -aq /lib/klibc "$cpiopath"; then
+ cpioargs=
+ else
+ cpioargs='-u -d'
+ fi
+ if ! (cd "${snap_mount}" && zcat "${snapback}/${snapfile}" | cpio -i $cpioargs 2>/dev/null) ; then
+ log_warning_msg "Impossible to include the ${snapfile} Snapshot"
+ return 1
+ fi
+ fi
+ umount "${snapback}"
+ else
+ dev=$(find_cow_device "${snap_label}")
+ if [ -b "${dev}" ]; then
+ if echo "${dev}" | grep -qs loop; then
+ # strange things happens, user confused?
+ snaploop=$( losetup ${dev} | awk '{print $3}' | tr -d '()' )
+ snapfile=$(basename ${snaploop})
+ snapdev=$(cat /proc/mounts | awk '{print $2,$1}' | grep -es "^$( dirname ${snaploop} )" | cut -f2 -d ' ')
+ else
+ snapdev="${dev}"
+ fi
+ if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}" ; then
+ log_warning_msg "Impossible to include the ${snap_label} Snapshot"
+ return 1
+ else
+ if [ -n "${snapfile}" ]; then
+ # it was a loop device, user confused
+ umount ${snapdev}
+ fi
+ fi
+ else
+ log_warning_msg "Impossible to include the ${snap_label} Snapshot"
+ return 1
+ fi
+ fi
+ echo "export ${snap_type}SNAP="/cow${snap_mount#$rootmnt}":${snapdev}:${snapfile}" >> /etc/casper.conf # for resync on reboot/halt
+ return 0
+}
+
+setup_unionfs() {
+ image_directory="$1"
+ rootmnt="$2"
+
+ case ${UNIONFS} in
+ aufs|unionfs)
+ modprobe "${MP_QUIET}" -b ${UNIONFS} || true
+ if ! cut -f2 /proc/filesystems | grep -q "^${UNIONFS}\$" && \
+ [ -x /bin/unionfs-fuse ]; then
+ UNIONFS="unionfs-fuse"
+ fi
+ ;;
+ esac
+
+ # run-init can't deal with images in a subdir, but we're going to
+ # move all of these away before it runs anyway. No, we're not,
+ # put them in / since move-mounting them into / breaks mono and
+ # some other apps.
+
+ croot="/"
+
+ # Let's just mount the read-only file systems first
+ rofsstring=""
+ rofslist=""
+ if [ "${NETBOOT}" = "nfs" ] ; then
+ roopt="nfsro" # work around a bug in nfs-unionfs locking
+ elif [ "${UNIONFS}" = "aufs" ]; then
+ roopt="rr"
+ elif [ "${UNIONFS}" = "unionfs-fuse" ]; then
+ roopt="RO"
+ else
+ roopt="ro"
+ fi
+
+ mkdir -p "${croot}"
+ for image_type in "ext2" "squashfs" "dir" ; do
+ for image in "${image_directory}"/*."${image_type}"; do
+ imagename=$(basename "${image}")
+ if [ -d "${image}" ]; then
+ # it is a plain directory: do nothing
+ rofsstring="${image}=${roopt}:${rofsstring}"
+ rofslist="${image} ${rofslist}"
+ elif [ -f "${image}" ]; then
+ backdev=$(get_backing_device "$image")
+ fstype=$(get_fstype "${backdev}")
+ if [ "${fstype}" = "unknown" ]; then
+ panic "Unknown file system type on ${backdev} (${image})"
+ fi
+ mkdir -p "${croot}/${imagename}"
+ mount -t "${fstype}" -o ro,noatime "${backdev}" "${croot}/${imagename}" || panic "Can not mount $backdev ($image) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}"
+ fi
+ done
+ done
+ rofsstring=${rofsstring%:}
+
+ mkdir -p /cow
+ cowdevice="tmpfs"
+ cow_fstype="tmpfs"
+ cow_mountopt="rw,noatime,mode=755"
+
+ # Looking for "${root_persistence}" device or file
+ if [ -n "${PERSISTENT}" ]; then
+ cowprobe=$(find_cow_device "${root_persistence}")
+ if [ -b "${cowprobe}" ]; then
+ cowdevice=${cowprobe}
+ cow_fstype=$(get_fstype "${cowprobe}")
+ cow_mountopt="rw,noatime"
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the persistent medium"
+ fi
+ fi
+
+ mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} /cow || panic "Can not mount $cowdevice on /cow"
+
+ case ${UNIONFS} in
+ unionfs-fuse)
+ (ulimit -n 16384; unionfs-fuse -o cow -o noinitgroups -o default_permissions -o allow_other -o use_ino -o suid /cow=RW:$rofsstring "$rootmnt" || panic "${UNIONFS} mount failed")
+ mkdir -p /dev/.initramfs/varrun
+ pidof unionfs-fuse >> /dev/.initramfs/varrun/sendsigs.omit || true
+ ;;
+ *)
+ mount -t ${UNIONFS} -o noatime,dirs=/cow=rw:$rofsstring ${UNIONFS} "$rootmnt" || panic "${UNIONFS} mount failed"
+ ;;
+ esac
+
+ # Adding other custom mounts
+ if [ -n "${PERSISTENT}" ]; then
+ # directly mount /home
+ # FIXME: add a custom mounts configurable system
+ homecow=$(find_cow_device "${home_persistence}" )
+ if [ -b "${homecow}" ]; then
+ mount -t $(get_fstype "${homecow}") -o rw,noatime "${homecow}" "${rootmnt}/home"
+ export HOMEMOUNTED=1 # used to proper calculate free space in do_snap_copy()
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the persistent home medium"
+ fi
+ # Look for other snapshots to copy in
+ try_snap "${root_snapshot_label}" "${rootmnt}" "ROOT"
+ try_snap "${home_snapshot_label}" "${rootmnt}/home" "HOME"
+ fi
+
+ if [ -n "${SHOWMOUNTS}" ]; then
+ for d in ${rofslist}; do
+ mkdir -p "${rootmnt}/${LIVE_MEDIA_PATH}/${d##*/}"
+ case d in
+ *.dir) # do nothing # mount -o bind "${d}" "${rootmnt}/${LIVE_MEDIA_PATH}/${d##*/}"
+ ;;
+ *)
+ if [ "${UNIONFS}" = unionfs-fuse ]; then
+ mount -o bind "${d}" "${rootmnt}/${LIVE_MEDIA_PATH}/${d##*/}"
+ else
+ mount -o move "${d}" "${rootmnt}/${LIVE_MEDIA_PATH}/${d##*/}"
+ fi
+ ;;
+ esac
+ done
+ # shows cow fs on /cow for use by casper-snapshot
+ mkdir -p "${rootmnt}/cow"
+ mount -o bind /cow "${rootmnt}/cow"
+ fi
+
+ # move the first mount; no head in busybox-initramfs
+ for d in $(mount -t squashfs | cut -d\ -f 3); do
+ mkdir -p "${rootmnt}/rofs"
+ if [ "${UNIONFS}" = unionfs-fuse ]; then
+ mount -o bind "${d}" "${rootmnt}/rofs"
+ else
+ mount -o move "${d}" "${rootmnt}/rofs"
+ fi
+ break
+ done
+}
+
+check_dev ()
+{
+ sysdev="${1}"
+ devname="${2}"
+ skip_uuid_check="${3}"
+ if [ -z "${devname}" ]; then
+ devname=$(sys2dev "${sysdev}")
+ fi
+
+ if [ -d "${devname}" ]; then
+ mount -o bind "${devname}" $mountpoint || continue
+ if is_casper_path $mountpoint; then
+ echo $mountpoint
+ return 0
+ else
+ umount $mountpoint
+ fi
+ fi
+ [ -e "$devname" ] || continue
+
+ if [ -n "${LIVEMEDIA_OFFSET}" ]; then
+ loopdevname=$(setup_loop "${devname}" "loop" "/sys/block/loop*" "${LIVEMEDIA_OFFSET}")
+ devname="${loopdevname}"
+ fi
+
+ fstype=$(get_fstype "${devname}")
+ if is_supported_fs ${fstype}; then
+ devuid=$(blkid -o value -s UUID "$devname")
+ [ -n "$devuid" ] && grep -qs "\<$devuid\>" $tried && continue
+ mount -t ${fstype} -o ro,noatime "${devname}" $mountpoint || continue
+ [ -n "$devuid" ] && echo "$devuid" >> $tried
+ if is_casper_path $mountpoint && \
+ ([ "$skip_uuid_check" ] || matches_uuid $mountpoint); then
+ echo $mountpoint
+ return 0
+ else
+ umount $mountpoint
+ fi
+ fi
+
+ if [ -n "${LIVEMEDIA_OFFSET}" ]; then
+ losetup -d "${loopdevname}"
+ fi
+ return 1
+}
+
+find_livefs() {
+ timeout="${1}"
+ # first look at the one specified in the command line
+ if [ ! -z "${LIVEMEDIA}" ]; then
+ if check_dev "null" "${LIVEMEDIA}" "skip_uuid_check"; then
+ return 0
+ fi
+ fi
+ # don't start autodetection before timeout has expired
+ if [ -n "${LIVEMEDIA_TIMEOUT}" ]; then
+ if [ "${timeout}" -lt "${LIVEMEDIA_TIMEOUT}" ]; then
+ return 1
+ fi
+ fi
+ # or do the scan of block devices
+ for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|fd)"); do
+ devname=$(sys2dev "${sysblock}")
+ [ -e "$devname" ] || continue
+ fstype=$(get_fstype "${devname}")
+ if /lib/udev/cdrom_id ${devname} > /dev/null; then
+ if check_dev "null" "${devname}" ; then
+ return 0
+ fi
+ elif is_nice_device "${sysblock}" ; then
+ for dev in $(subdevices "${sysblock}"); do
+ if check_dev "${dev}" ; then
+ return 0
+ fi
+ done
+ elif [ "${fstype}" = "squashfs" -o \
+ "${fstype}" = "ext4" -o \
+ "${fstype}" = "ext3" -o \
+ "${fstype}" = "ext2" ]; then
+ # This is an ugly hack situation, the block device has
+ # an image directly on it. It's hopefully
+ # casper, so take it and run with it.
+ ln -s "${devname}" "${devname}.${fstype}"
+ echo "${devname}.${fstype}"
+ return 0
+ fi
+ done
+ return 1
+}
+
+set_usplash_timeout() {
+ if [ -x /sbin/usplash_write ]; then
+ /sbin/usplash_write "TIMEOUT 120"
+ fi
+}
+
+start_usplash_pulse() {
+ if [ -x /sbin/usplash_write ]; then
+ /sbin/usplash_write "PULSELOGO"
+ fi
+}
+
+mountroot() {
+ exec 6>&1
+ exec 7>&2
+ exec > casper.log
+ exec 2>&1
+ tail -f casper.log >&7 &
+ tailpid="$!"
+
+ parse_cmdline
+
+ set_usplash_timeout
+ start_usplash_pulse
+ [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-premount"
+ run_scripts /scripts/casper-premount
+ [ "$quiet" != "y" ] && log_end_msg
+
+ # Needed here too because some things (*cough* udev *cough*)
+ # changes the timeout
+
+ set_usplash_timeout
+
+ if [ ! -z "${NETBOOT}" ]; then
+ if do_netmount ; then
+ livefs_root="${mountpoint}"
+ else
+ panic "Unable to find a live file system on the network"
+ fi
+ else
+ # Scan local devices for the image
+ i=0
+ while [ "$i" -lt 60 ]; do
+ livefs_root=$(find_livefs $i)
+ if [ "${livefs_root}" ]; then
+ break
+ fi
+ sleep 1
+ i="$(($i + 1))"
+ done
+ fi
+
+ if [ -z "${livefs_root}" ]; then
+ panic "Unable to find a medium containing a live file system"
+ fi
+
+ if [ "${TORAM}" ]; then
+ live_dest="ram"
+ elif [ "${TODISK}" ]; then
+ live_dest="${TODISK}"
+ fi
+ if [ "${live_dest}" ]; then
+ log_begin_msg "Copying live_media to ${live_dest}"
+ copy_live_to "${livefs_root}" "${live_dest}"
+ log_end_msg
+ fi
+
+ mount_images_in_directory "${livefs_root}" "${rootmnt}"
+
+ log_end_msg
+
+ # unionfs-fuse needs /dev to be bind-mounted for the duration of
+ # casper-bottom; udev's init script will take care of things after that
+ if [ "${UNIONFS}" = unionfs-fuse ]; then
+ mount -n -o bind /dev "${rootmnt}/dev"
+ fi
+
+ maybe_break casper-bottom
+ [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-bottom"
+
+ run_scripts /scripts/casper-bottom
+ [ "$quiet" != "y" ] && log_end_msg
+
+ if [ "${UNIONFS}" = unionfs-fuse ]; then
+ umount "${rootmnt}/dev"
+ fi
+
+ exec 1>&6 6>&-
+ exec 2>&7 7>&-
+ kill "$tailpid"
+ cp casper.log "${rootmnt}/var/log/"
+ if [ -f /etc/casper.conf ]; then
+ cp /etc/casper.conf "${rootmnt}/etc/"
+ fi
+}
--- /dev/null
+#!/bin/bash
+set -e
+
+#cleanup the old mess
+echo "Removing the old files"
+sudo rm -rf mpoint initrd initrd.lzma
+
+# create a copy of image to modify
+cp initrd_orig.lz initrd.lzma
+unlzma initrd.lzma
+
+echo "extracting filesystem filesystem"
+mkdir -p mpoint
+cd mpoint
+cpio -ivu --no-absolute-filename < ../initrd 2> /dev/null
+cd ..
+
+echo "coping the needed files..."
+
+cp run-init mpoint/bin/
+chmod 777 mpoint/bin/run-init
+
+cp httpfs/server/httpfs mpoint/bin/
+chmod 777 mpoint/bin/httpfs
+
+cp httpfs/server/fusermount mpoint/bin/
+chmod 777 mpoint/bin/fusermount
+
+cp init mpoint/
+chmod 0777 mpoint/init
+
+cp casper mpoint/scripts/
+chmod 0777 mpoint/scripts/casper
+
+echo "copying iscsi related files..."
+mkdir -p mpoint/etc/iscsi
+cp iscsi/iscsid.conf mpoint/etc/iscsi/
+cp iscsi/initiatorname.iscsi mpoint/etc/iscsi/
+cp iscsi/tools/* mpoint/sbin/
+
+mkdir -p mpoint/modules
+#TODO: Fetch iscsi related modules and put them here.
+#cp modules/* mpoint/modules/
+
+sudo chown -R root.root mpoint
+cd mpoint
+echo "creating initrd from new system filesystem"
+echo "Compressing the filesystem"
+sudo find . | sudo cpio -oH newc | lzma -9 -c> ../initrd.lz
+cd ..
+
+sudo rm -rf mpoint initrd initrd.lzma
+
+echo "Done, you can use initrd.gz"
--- /dev/null
+#!/static/sh
+
+case "$1" in
+ renew|bound)
+ ifconfig $interface $ip up
+
+ if [ -n "$router" ] ; then
+ for i in $router ; do
+ route add -net 0.0.0.0 netmask 0.0.0.0 gw $i dev $interface
+ done
+ fi
+ ;;
+ * )
+ ifconfig $interface 0.0.0.0
+ ;;
+esac
+
+exit 0
--- /dev/null
+#!/bin/sh
+
+[ -d /dev ] || mkdir -m 0755 /dev
+[ -d /root ] || mkdir -m 0700 /root
+[ -d /sys ] || mkdir /sys
+[ -d /proc ] || mkdir /proc
+[ -d /tmp ] || mkdir /tmp
+mkdir -p /var/lock
+mount -t sysfs -o nodev,noexec,nosuid none /sys
+mount -t proc -o nodev,noexec,nosuid none /proc
+
+grep -q '\<quiet\>' /proc/cmdline || echo "Loading, please wait..."
+
+# Note that this only becomes /dev on the real filesystem if udev's scripts
+# are used; which they will be, but it's worth pointing out
+mount -t tmpfs -o mode=0755 udev /dev
+[ -e /dev/console ] || mknod -m 0600 /dev/console c 5 1
+[ -e /dev/null ] || mknod /dev/null c 1 3
+> /dev/.initramfs-tools
+mkdir /dev/.initramfs
+
+# Export the dpkg architecture
+export DPKG_ARCH=
+. /conf/arch.conf
+
+# Set modprobe env
+export MODPROBE_OPTIONS="-qb"
+
+# Export relevant variables
+export ROOT=
+export ROOTDELAY=
+export ROOTFLAGS=
+export ROOTFSTYPE=
+export IPOPTS=
+export break=
+export init=/sbin/init
+export quiet=n
+export readonly=y
+export rootmnt=/root
+export debug=
+export panic=
+export blacklist=
+export resume_offset=
+
+# Bring in the main config
+. /conf/initramfs.conf
+for conf in conf/conf.d/*; do
+ [ -f ${conf} ] && . ${conf}
+done
+. /scripts/functions
+
+# Parse command line options
+for x in $(cat /proc/cmdline); do
+ case $x in
+ init=*)
+ init=${x#init=}
+ ;;
+ root=*)
+ ROOT=${x#root=}
+ case $ROOT in
+ LABEL=*)
+ ROOT="${ROOT#LABEL=}"
+
+ # support / in LABEL= paths (escape to \x2f)
+ case "${ROOT}" in
+ *[/]*)
+ if [ -x "$(command -v sed)" ]; then
+ ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')"
+ else
+ if [ "${ROOT}" != "${ROOT#/}" ]; then
+ ROOT="\x2f${ROOT#/}"
+ fi
+ if [ "${ROOT}" != "${ROOT%/}" ]; then
+ ROOT="${ROOT%/}\x2f"
+ fi
+ IFS='/'
+ newroot=
+ for s in $ROOT; do
+ if [ -z "${newroot}" ]; then
+ newroot="${s}"
+ else
+ newroot="${newroot}\\x2f${s}"
+ fi
+ done
+ unset IFS
+ ROOT="${newroot}"
+ fi
+ esac
+ ROOT="/dev/disk/by-label/${ROOT}"
+ ;;
+ UUID=*)
+ ROOT="/dev/disk/by-uuid/${ROOT#UUID=}"
+ ;;
+ /dev/nfs)
+ [ -z "${BOOT}" ] && BOOT=nfs
+ ;;
+ esac
+ ;;
+ rootflags=*)
+ ROOTFLAGS="-o ${x#rootflags=}"
+ ;;
+ rootfstype=*)
+ ROOTFSTYPE="${x#rootfstype=}"
+ ;;
+ rootdelay=*)
+ ROOTDELAY="${x#rootdelay=}"
+ case ${ROOTDELAY} in
+ *[![:digit:].]*)
+ ROOTDELAY=
+ ;;
+ esac
+ ;;
+ resumedelay=*)
+ RESUMEDELAY="${x#resumedelay=}"
+ ;;
+ loop=*)
+ LOOP="${x#loop=}"
+ ;;
+ loopflags=*)
+ LOOPFLAGS="-o ${x#loopflags=}"
+ ;;
+ loopfstype=*)
+ LOOPFSTYPE="${x#loopfstype=}"
+ ;;
+ cryptopts=*)
+ cryptopts="${x#cryptopts=}"
+ ;;
+ nfsroot=*)
+ NFSROOT="${x#nfsroot=}"
+ ;;
+ httpfs=*)
+ HTTPFS="${x#httpfs=}"
+ ;;
+ iscsifs=*)
+ ISCSIFS="${x#iscsifs=}"
+ ;;
+ target=*)
+ TARGET="${x#target=}"
+ ;;
+ netboot=*)
+ NETBOOT="${x#netboot=}"
+ ;;
+ ip=*)
+ IPOPTS="${x#ip=}"
+ ;;
+ boot=*)
+ BOOT=${x#boot=}
+ ;;
+ resume=*)
+ RESUME="${x#resume=}"
+ ;;
+ resume_offset=*)
+ resume_offset="${x#resume_offset=}"
+ ;;
+ noresume)
+ noresume=y
+ ;;
+ panic=*)
+ panic="${x#panic=}"
+ case ${panic} in
+ *[![:digit:].]*)
+ panic=
+ ;;
+ esac
+ ;;
+ quiet)
+ quiet=y
+ ;;
+ ro)
+ readonly=y
+ ;;
+ rw)
+ readonly=n
+ ;;
+ debug)
+ debug=y
+ quiet=n
+ exec >/dev/.initramfs/initramfs.debug 2>&1
+ set -x
+ ;;
+ debug=*)
+ debug=y
+ quiet=n
+ set -x
+ ;;
+ break=*)
+ break=${x#break=}
+ ;;
+ break)
+ break=premount
+ ;;
+ blacklist=*)
+ blacklist=${x#blacklist=}
+ ;;
+ esac
+done
+
+if [ -z "${noresume}" ]; then
+ export resume=${RESUME}
+else
+ export noresume
+fi
+
+depmod -a
+maybe_break top
+
+# export BOOT variable value for compcache,
+# so we know if we run from casper
+export BOOT
+
+# Don't do log messages here to avoid confusing usplash
+run_scripts /scripts/init-top
+
+maybe_break modules
+log_begin_msg "Loading essential drivers..."
+load_modules
+log_end_msg
+
+maybe_break premount
+[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount"
+run_scripts /scripts/init-premount
+[ "$quiet" != "y" ] && log_end_msg
+
+maybe_break mount
+log_begin_msg "Mounting root file system..."
+. /scripts/${BOOT}
+parse_numeric ${ROOT}
+mountroot
+log_end_msg
+
+maybe_break bottom
+[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom"
+run_scripts /scripts/init-bottom
+[ "$quiet" != "y" ] && log_end_msg
+
+# Move virtual filesystems over to the real filesystem
+mount -n -o move /sys ${rootmnt}/sys
+mount -n -o move /proc ${rootmnt}/proc
+
+# Check init bootarg
+if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then
+ echo "Target filesystem doesn't have ${init}."
+ init=
+fi
+
+# Search for valid init
+if [ -z "${init}" ] ; then
+ for init in /sbin/init /etc/init /bin/init /bin/sh; do
+ if [ ! -x "${rootmnt}${init}" ]; then
+ continue
+ fi
+ break
+ done
+fi
+
+# No init on rootmount
+if [ ! -x "${rootmnt}${init}" ]; then
+ panic "No init found. Try passing init= bootarg."
+fi
+
+# Confuses /etc/init.d/rc
+if [ -n ${debug} ]; then
+ unset debug
+fi
+
+# because of some reasons, I dont understand, resolv.conf is not being set
+# that is why I am copying this manually into actual filesystem. -- pravin
+cp /etc/resolv.conf /root/etc/resolv.conf
+
+
+# Chain to real filesystem
+maybe_break init
+exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1
+panic "Could not execute run-init."
--- /dev/null
+## DO NOT EDIT OR REMOVE THIS FILE!
+## If you remove this file, the iSCSI daemon will not start.
+## If you change the InitiatorName, existing access control lists
+## may reject this initiator. The InitiatorName must be unique
+## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames.
+InitiatorName=iqn.1993-08.org.debian:01:74e6bd2d995f
--- /dev/null
+#
+# Open-iSCSI default configuration.
+# Could be located at /etc/iscsi/iscsid.conf or ~/.iscsid.conf
+#
+# Note: To set any of these values for a specific node/session run
+# the iscsiadm --mode node --op command for the value. See the README
+# and man page for iscsiadm for details on the --op command.
+#
+
+################
+# iSNS settings
+################
+# Address of iSNS server
+#isns.address = 192.168.0.1
+#isns.port = 3205
+
+#############################
+# NIC/HBA and driver settings
+#############################
+# open-iscsi can create a session and bind it to a NIC/HBA.
+# To set this up see the example iface config file.
+
+#*****************
+# Startup settings
+#*****************
+
+# To request that the iscsi initd scripts startup a session set to "automatic".
+node.startup = automatic
+#
+# To manually startup the session set to "manual". The default is manual.
+#node.startup = manual
+
+# *************
+# CHAP Settings
+# *************
+
+# To enable CHAP authentication set node.session.auth.authmethod
+# to CHAP. The default is None.
+#node.session.auth.authmethod = CHAP
+
+# To set a CHAP username and password for initiator
+# authentication by the target(s), uncomment the following lines:
+#node.session.auth.username = username
+#node.session.auth.password = password
+
+# To set a CHAP username and password for target(s)
+# authentication by the initiator, uncomment the following lines:
+#node.session.auth.username_in = username_in
+#node.session.auth.password_in = password_in
+
+# To enable CHAP authentication for a discovery session to the target
+# set discovery.sendtargets.auth.authmethod to CHAP. The default is None.
+#discovery.sendtargets.auth.authmethod = CHAP
+
+# To set a discovery session CHAP username and password for the initiator
+# authentication by the target(s), uncomment the following lines:
+#discovery.sendtargets.auth.username = username
+#discovery.sendtargets.auth.password = password
+
+# To set a discovery session CHAP username and password for target(s)
+# authentication by the initiator, uncomment the following lines:
+#discovery.sendtargets.auth.username_in = username_in
+#discovery.sendtargets.auth.password_in = password_in
+
+# ********
+# Timeouts
+# ********
+#
+# See the iSCSI REAME's Advanced Configuration section for tips
+# on setting timeouts when using multipath or doing root over iSCSI.
+#
+# To specify the length of time to wait for session re-establishment
+# before failing SCSI commands back to the application when running
+# the Linux SCSI Layer error handler, edit the line.
+# The value is in seconds and the default is 120 seconds.
+node.session.timeo.replacement_timeout = 120
+
+# To specify the time to wait for login to complete, edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.conn[0].timeo.login_timeout = 15
+
+# To specify the time to wait for logout to complete, edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.conn[0].timeo.logout_timeout = 15
+
+# Time interval to wait for on connection before sending a ping.
+node.conn[0].timeo.noop_out_interval = 5
+
+# To specify the time to wait for a Nop-out response before failing
+# the connection, edit this line. Failing the connection will
+# cause IO to be failed back to the SCSI layer. If using dm-multipath
+# this will cause the IO to be failed to the multipath layer.
+node.conn[0].timeo.noop_out_timeout = 5
+
+# To specify the time to wait for abort response before
+# failing the operation and trying a logical unit reset edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.session.err_timeo.abort_timeout = 15
+
+# To specify the time to wait for a logical unit response
+# before failing the operation and trying session re-establishment
+# edit the line.
+# The value is in seconds and the default is 30 seconds.
+node.session.err_timeo.lu_reset_timeout = 20
+
+#******
+# Retry
+#******
+
+# To specify the number of times iscsid should retry a login
+# if the login attempt fails due to the node.conn[0].timeo.login_timeout
+# expiring modify the following line. Note that if the login fails
+# quickly (before node.conn[0].timeo.login_timeout fires) because the network
+# layer or the target returns an error, iscsid may retry the login more than
+# node.session.initial_login_retry_max times.
+#
+# This retry count along with node.conn[0].timeo.login_timeout
+# determines the maximum amount of time iscsid will try to
+# establish the initial login. node.session.initial_login_retry_max is
+# multiplied by the node.conn[0].timeo.login_timeout to determine the
+# maximum amount.
+#
+# The default node.session.initial_login_retry_max is 8 and
+# node.conn[0].timeo.login_timeout is 15 so we have:
+#
+# node.conn[0].timeo.login_timeout * node.session.initial_login_retry_max =
+# 120 seconds
+#
+# Valid values are any integer value. This only
+# affects the initial login. Setting it to a high value can slow
+# down the iscsi service startup. Setting it to a low value can
+# cause a session to not get logged into, if there are distuptions
+# during startup or if the network is not ready at that time.
+node.session.initial_login_retry_max = 8
+
+################################
+# session and device queue depth
+################################
+
+# To control how many commands the session will queue set
+# node.session.cmds_max to an integer between 2 and 2048 that is also
+# a power of 2. The default is 128.
+node.session.cmds_max = 128
+
+# To control the device's queue depth set node.session.queue_depth
+# to a value between 1 and 128. The default is 32.
+node.session.queue_depth = 32
+
+#***************
+# iSCSI settings
+#***************
+
+# To enable R2T flow control (i.e., the initiator must wait for an R2T
+# command before sending any data), uncomment the following line:
+#
+#node.session.iscsi.InitialR2T = Yes
+#
+# To disable R2T flow control (i.e., the initiator has an implied
+# initial R2T of "FirstBurstLength" at offset 0), uncomment the following line:
+#
+# The defaults is No.
+node.session.iscsi.InitialR2T = No
+
+#
+# To disable immediate data (i.e., the initiator does not send
+# unsolicited data with the iSCSI command PDU), uncomment the following line:
+#
+#node.session.iscsi.ImmediateData = No
+#
+# To enable immediate data (i.e., the initiator sends unsolicited data
+# with the iSCSI command packet), uncomment the following line:
+#
+# The default is Yes
+node.session.iscsi.ImmediateData = Yes
+
+# To specify the maximum number of unsolicited data bytes the initiator
+# can send in an iSCSI PDU to a target, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 262144
+node.session.iscsi.FirstBurstLength = 262144
+
+# To specify the maximum SCSI payload that the initiator will negotiate
+# with the target for, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the defauls it 16776192
+node.session.iscsi.MaxBurstLength = 16776192
+
+# To specify the maximum number of data bytes the initiator can receive
+# in an iSCSI PDU from a target, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 131072
+node.conn[0].iscsi.MaxRecvDataSegmentLength = 131072
+
+
+# To specify the maximum number of data bytes the initiator can receive
+# in an iSCSI PDU from a target during a discovery session, edit the
+# following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 32768
+#
+discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
+
+# To allow the targets to control the setting of the digest checking,
+# with the initiator requesting a preference of enabling the checking, uncomment# one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = CRC32C,None
+#node.conn[0].iscsi.DataDigest = CRC32C,None
+#
+# To allow the targets to control the setting of the digest checking,
+# with the initiator requesting a preference of disabling the checking,
+# uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = None,CRC32C
+#node.conn[0].iscsi.DataDigest = None,CRC32C
+#
+# To enable CRC32C digest checking for the header and/or data part of
+# iSCSI PDUs, uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = CRC32C
+#node.conn[0].iscsi.DataDigest = CRC32C
+#
+# To disable digest checking for the header and/or data part of
+# iSCSI PDUs, uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = None
+#node.conn[0].iscsi.DataDigest = None
+#
+# The default is to never use DataDigests or HeaderDigests.
+#
+
+
+#************
+# Workarounds
+#************
+
+# Some targets like IET prefer after an initiator has sent a task
+# management function like an ABORT TASK or LOGICAL UNIT RESET, that
+# it does not respond to PDUs like R2Ts. To enable this behavior uncomment
+# the following line (The default behavior is Yes):
+node.session.iscsi.FastAbort = Yes
+
+# Some targets like Equalogic prefer that after an initiator has sent
+# a task management function like an ABORT TASK or LOGICAL UNIT RESET, that
+# it continue to respond to R2Ts. To enable this uncomment this line
+# node.session.iscsi.FastAbort = No
--- /dev/null
+#!/bin/sh
+#
+# Copyright (C) Voltaire Ltd. 2006. ALL RIGHTS RESERVED.
+#
+# 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; either version 2 of the License, or (at your option) any later
+# version.
+#
+# 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., 59 Temple
+# Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Author: Dan Bar Dov <danb@voltaire.com>
+
+# iscsi_discovery:
+# * does a send-targets discovery to the given IP
+# * set the transport type to the preferred transport (or tcp is -t flag is not used)
+# * tries to login
+# * if succeeds,
+# o logout,
+# o mark record autmatic (unless -m flag is used)
+# * else
+# o reset transport type to TCP
+# o try to login
+# o if succeeded
+# + logout
+# + mark record automatic (unless -m flag is used)
+#
+
+usage()
+{
+ echo "Usage: $0 <IP> [-p <port>] [-d] [-t <tcp|iser> [-f]] [-m] [-l]"
+ echo "Options:"
+ echo "-p set the port number (defualt is 3260)."
+ echo "-d print debugging information"
+ echo "-t set trasnpot (default is tcp)."
+ echo "-f force specific transport -disable the fallback to tcp (default is fallback enabled)."
+ echo " force the transport specified by the argument of the -t flag."
+ echo "-m manual startup - will set manual startup (default is automatic startup)."
+ echo "-l login to the new discovered nodes (defualt is false)."
+}
+
+dbg()
+{
+ $debug && echo $@
+}
+
+initialize()
+{
+ trap "exit" 2
+ debug=false
+ force="0"
+ log_out="1"
+ startup_manual="0"
+ #set defualt transport to tcp
+ transport=tcp
+ #set defualt port to 3260
+ port=3260;
+}
+
+parse_cmdline()
+{
+ if [ $# -lt 1 ]; then
+ usage
+ exit 1
+ fi
+
+ # check if the IP address is valid
+ ip=`echo $1 | awk -F'.' '$1 != "" && $1 <=255 && $2 != "" && $2 <= 255 && $3 != "" && $3 <= 255 && $4 != "" && $4 <= 255 {print $0}'`
+ if [ -z "$ip" ]; then
+ echo "$1 is not a vaild IP address!"
+ exit 1
+ fi
+ shift
+ while getopts "dfmlt:p:" options; do
+ case $options in
+ d ) debug=true;;
+ f ) force="1";;
+ t ) transport=$OPTARG;;
+ p ) port=$OPTARG;;
+ m ) startup_manual="1";;
+ l ) log_out=0;;
+ \? ) usage
+ exit 1;;
+ * ) usage
+ exit 1;;
+ esac
+ done
+}
+
+discover()
+{
+ # If open-iscsi is already logged in to the portal, exit
+ if [ $(iscsiadm -m session | grep -c ${ip}:${port}) -ne 0 ]; then
+ echo "Please logout from all targets on ${ip}:${port} before trying to run discovery on that portal"
+ exit 2
+ fi
+
+ connected=0
+ discovered=0
+ df=/tmp/discovered.$$
+
+ dbg "starting discovery to $ip"
+ iscsiadm -m discovery --type sendtargets --portal ${ip}:${port} > ${df}
+ while read portal target
+ do
+ portal=${portal%,*}
+ select_transport
+ done < ${df}
+
+ discovered=$(cat ${df} | wc -l)
+ if [ ${discovered} = 0 ]; then
+ echo "failed to discover targets at ${ip}"
+ exit 2
+ else
+ echo "discovered ${discovered} targets at ${ip}"
+ fi
+ /bin/rm -f ${df}
+}
+
+try_login()
+{
+ if [ "$startup_manual" != "1" ]; then
+ iscsiadm -m node --targetname ${target} --portal ${portal} --op update -n node.conn[0].startup -v automatic
+ fi
+ iscsiadm -m node --targetname ${target} --portal ${portal} --login >/dev/null 2>&1
+ ret=$?
+ if [ ${ret} = 0 ]; then
+ echo "Set target ${target} to automatic login over ${transport} to portal ${portal}"
+ connected=$(($connected + 1))
+ if [ "$log_out" = "1" ]; then
+ iscsiadm -m node --targetname ${target} --portal ${portal} --logout
+ fi
+ else
+ echo "Cannot login over ${transport} to portal ${portal}"
+ iscsiadm -m node --targetname ${target} --portal ${portal} --op update -n node.conn[0].startup -v manual
+ fi
+ return ${ret}
+}
+
+set_transport()
+{
+ transport=$1
+ if [ "$transport" == "iser" ];then
+ iscsiadm -m node --targetname ${target} --portal ${portal} \
+ --op update -n node.conn[0].iscsi.HeaderDigest -v None
+ iscsiadm -m node --targetname ${target} --portal ${portal} \
+ --op update -n node.conn[0].iscsi.DataDigest -v None
+ fi
+ transport_name=`iscsiadm -m node -p ${portal} -T ${target} |awk '/transport_name/ {print $1}'`
+ iscsiadm -m node --targetname ${target} --portal ${portal} \
+ --op update -n ${transport_name} -v ${transport}
+}
+
+select_transport()
+{
+ set_transport $transport
+ dbg "Testing $transport-login to target ${target} portal ${portal}"
+ try_login;
+ if [ $? != 0 -a "$force" = "0" ]; then
+ set_transport tcp
+ dbg "starting to test tcp-login to target ${target} portal ${portal}"
+ try_login;
+ fi
+}
+
+check_iscsid()
+{
+ #check if iscsid is running
+ pidof iscsid &>/dev/null
+ ret=$?
+ if [ $ret -ne 0 ]; then
+ echo "iscsid is not running"
+ echo "Exiting..."
+ exit 1
+ fi
+}
+
+check_iscsid
+initialize
+parse_cmdline "$@"
+discover
--- /dev/null
+#!/bin/sh
+
+# set -e
+
+export PATH=/usr/bin:/usr/sbin:/bin:/sbin
+
+mountpoint=/cdrom
+
+root_persistence="casper-rw"
+home_persistence="home-rw"
+root_snapshot_label="casper-sn"
+home_snapshot_label="home-sn"
+export RESCUEBREAK="No"
+
+USERNAME=casper
+USERFULLNAME="Live session user"
+HOST=live
+BUILD_SYSTEM=Custom
+
+mkdir -p $mountpoint
+
+[ -f /etc/casper.conf ] && . /etc/casper.conf
+export USERNAME USERFULLNAME HOST BUILD_SYSTEM
+
+. /scripts/casper-helpers
+
+if [ ! -f /casper.vars ]; then
+ touch /casper.vars
+fi
+
+parse_cmdline() {
+ for x in $(cat /proc/cmdline); do
+ case $x in
+ showmounts|show-cow)
+ export SHOWMOUNTS='Yes' ;;
+ persistent)
+ export PERSISTENT="Yes" ;;
+ nopersistent)
+ export PERSISTENT="" ;;
+ rescuebreak)
+ export RESCUEBREAK="Yes" ;;
+ union=*)
+ export UNIONFS="${x#union=}";;
+ ip*)
+ STATICIP=${x#ip=}
+ if [ "${STATICIP}" = "" ]; then
+ STATICIP="frommedia"
+ fi
+ export STATICIP ;;
+ ignore_uuid)
+ IGNORE_UUID="Yes" ;;
+ esac
+ done
+ if [ "${UNIONFS}" = "" ]; then
+ export UNIONFS="aufs"
+ fi
+}
+
+is_casper_path() {
+ path=$1
+ if [ -d "$path/casper" ]; then
+ if [ "$(echo $path/casper/*.squashfs)" != "$path/casper/*.squashfs" ] ||
+ [ "$(echo $path/casper/*.ext2)" != "$path/casper/*.ext2" ] ||
+ [ "$(echo $path/casper/*.dir)" != "$path/casper/*.dir" ]; then
+ return 0
+ fi
+ fi
+ return 1
+}
+
+matches_uuid() {
+ if [ "$IGNORE_UUID" ] || [ ! -e /conf/uuid.conf ]; then
+ return 0
+ fi
+ path="$1"
+ uuid="$(cat /conf/uuid.conf)"
+ for try_uuid_file in "$path/.disk/casper-uuid"*; do
+ [ -e "$try_uuid_file" ] || continue
+ try_uuid="$(cat "$try_uuid_file")"
+ if [ "$uuid" = "$try_uuid" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+get_backing_device() {
+ case "$1" in
+ *.squashfs|*.ext2)
+ echo $(setup_loop "$1" "loop" "/sys/block/loop*")
+ ;;
+ *.dir)
+ echo "directory"
+ ;;
+ *)
+ panic "Unrecognized casper filesystem: $1"
+ ;;
+ esac
+}
+
+match_files_in_dir() {
+ # Does any files match pattern $1 ?
+
+ local pattern="$1"
+ if [ "$(echo $pattern)" != "$pattern" ]; then
+ return 0
+ fi
+ return 1
+}
+
+mount_images_in_directory() {
+ directory="$1"
+ rootmnt="$2"
+ if match_files_in_dir "$directory/casper/*.squashfs" ||
+ match_files_in_dir "$directory/casper/*.ext2" ||
+ match_files_in_dir "$directory/casper/*.dir"; then
+ setup_unionfs "$directory/casper" "$rootmnt"
+ else
+ :
+ fi
+}
+
+is_nice_device() {
+ sysfs_path="${1#/sys}"
+ if /lib/udev/path_id "${sysfs_path}" | grep -E -q "ID_PATH=(usb|pci-[^-]*-(ide|scsi|usb)|platform-mmc)"; then
+ return 0
+ fi
+ return 1
+}
+
+copy_live_to() {
+ copyfrom="${1}"
+ copytodev="${2}"
+ copyto="${copyfrom}_swap"
+
+ size=$(fs_size "" ${copyfrom} "used")
+
+ if [ "${copytodev}" = "ram" ]; then
+ # copying to ram:
+ freespace=$( expr $(awk '/MemFree/{print $2}' /proc/meminfo) + $( cat /proc/meminfo | grep Cached | head -n 1 | awk '/Cached/{print $2}' - ) )
+ mount_options="-o size=${size}k"
+ free_string="memory"
+ fstype="tmpfs"
+ dev="/dev/shm"
+ else
+ # it should be a writable block device
+ if [ -b "${copytodev}" ]; then
+ dev="${copytodev}"
+ free_string="space"
+ fstype=$(get_fstype "${dev}")
+ freespace=$(fs_size "${dev}")
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "${copytodev} is not a block device."
+ return 1
+ fi
+ fi
+ if [ "${freespace}" -lt "${size}" ] ; then
+ [ "$quiet" != "y" ] && log_warning_msg "Not enough free ${free_string} (${freespace}k > ${size}k) to copy live media in ${copytodev}."
+ return 1
+ fi
+
+ # begin copying..
+ mkdir "${copyto}"
+ echo "mount -t ${fstype} ${mount_options} ${dev} ${copyto}"
+ mount -t "${fstype}" ${mount_options} "${dev}" "${copyto}"
+ cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files
+ umount ${copyfrom}
+ mount -r -o move ${copyto} ${copyfrom}
+ rmdir ${copyto}
+ return 0
+}
+
+add_ip_to_resolv_conf ()
+{
+ if [ ! -z ${1} ]
+ then
+ echo "nameserver $1" >> /etc/resolv.conf
+ fi
+}
+
+setup_static_ip ()
+{
+ ifconfig lo 127.0.0.1 up
+ ifconfig "${DEVICE}" up
+ local myip=`echo ${STATICIP} | cut -d: -f1`
+ local mynm=`echo ${STATICIP} | cut -d: -f4`
+ local mygw=`echo ${STATICIP} | cut -d: -f3`
+ echo "myip=${myip} mynm=${mynm} mygw=${mygw}"
+ ifconfig "${DEVICE}" "${myip}" netmask "${mynm}"
+ ifconfig "${DEVICE}"
+ route add default gw "${mygw}"
+ return 0
+}
+
+setup_static_dns ()
+{
+ if [ -z ${DNSIP} ]
+ then
+ add_ip_to_resolv_conf "4.2.2.2"
+ add_ip_to_resolv_conf "128.255.1.3"
+ else
+ for x in $( echo "${DNS}" | sed 's/,/ /g')
+ do
+ add_ip_to_resolv_conf ${x}
+ done
+ fi
+ return 0
+}
+
+do_netmount() {
+ rc=1
+
+
+ modprobe "${MP_QUIET}" af_packet # For DHCP
+
+ /sbin/udevadm trigger
+ /sbin/udevadm settle
+
+
+ if [ -z ${BOOTIP} ]
+ then
+ ipconfig ${DEVICE} /tmp/net-${DEVICE}.conf | tee /netboot.config
+
+ # Adding DNS Entry
+ local ipconf_dnsip=`cat /netboot.config | grep dns0 | cut -d':' -f3 | cut -d' ' -f2`
+ if [ -z ${ipconf_dnsip}] || [ ${ipconf_dnsip} == '0.0.0.0']
+ then
+ setup_static_dns
+ else
+ add_ip_to_resolv_conf ${ipconf_dnsip}
+ fi
+ # source relevant ipconfig output
+ OLDHOSTNAME=${HOSTNAME}
+ . /tmp/net-${DEVICE}.conf
+ [ -z ${HOSTNAME} ] && HOSTNAME=${OLDHOSTNAME}
+ export HOSTNAME
+
+ else
+ setup_static_ip
+ setup_static_dns
+ fi
+
+
+ if [ "${NFSROOT}" = "auto" ]; then
+ NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ fi
+ log_begin_msg "inside netboot, will use ${NETBOOT} and httproot as ${HTTPFS}"
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying netboot from ${NFSROOT}"
+
+ if [ "${NETBOOT}" == "http" ] && do_httpfsmount ; then
+ rc=0
+ elif [ "${NETBOOT}" == "iscsi" ] && do_iscsifsmount ; then
+ rc=0
+ elif [ "${NETBOOT}" != "nfs" ] && do_cifsmount ; then
+ rc=0
+ elif do_nfsmount ; then
+ NETBOOT="nfs"
+ export NETBOOT
+ rc=0
+ fi
+
+ [ "$quiet" != "y" ] && log_end_msg
+
+ return ${rc}
+}
+
+do_nfsmount() {
+ rc=1
+ modprobe "${MP_QUIET}" nfs
+ if [ -z "${NFSOPTS}" ]; then
+ NFSOPTS=""
+ fi
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying nfsmount -o nolock -o ro ${NFSOPTS} ${NFSROOT} ${mountpoint}"
+ # FIXME: This while loop is an ugly HACK round an nfs bug
+ i=0
+ while [ "$i" -lt 60 ]; do
+ nfsmount -o nolock -o ro ${NFSOPTS} "${NFSROOT}" "${mountpoint}" && rc=0 && break
+ sleep 1
+ i="$(($i + 1))"
+ done
+ return ${rc}
+}
+
+do_iscsifsmount ()
+{
+ rc=1
+
+ echo "inside iscsimount" >> /mylogs
+
+ insmod /modules/libcrc32c.ko
+ insmod /modules/crc32c.ko
+ modprobe scsi-transport-iscsi
+ modprobe libiscsi
+ modprobe iscsi_tcp
+ mkdir /var/run
+ /sbin/iscsid
+ sleep 4
+ iscsiadm -m discovery -t st -p "${ISCSIFS}" >> /mylogs
+ sleep 4
+ targetname=`iscsiadm -m node | grep "${TARGET}" | cut -d' ' -f2`
+ iscsiadm -m node --targetname "${targetname}" --login >> /mylogs
+ sync
+ i=0
+# iscsiadm -m session -P 3 | grep "attached scsi disk"
+ export iscsidevice=/dev/disk/by-label/Ubuntu\\x209.04\\x20i386
+ while [ "$i" -lt 160 ]
+ do
+ ls -l "${iscsidevice}" && break
+ i="$(($i + 1))"
+ echo "waiting for iscsi disk to appear $i"
+ sleep 1
+ sync
+ done
+ mount -t iso9660 "${iscsidevice}" "${mountpoint}"
+ rc=${?}
+ sync
+ sleep 2
+ rc=0
+ return $rc
+}
+
+
+do_httpfsmount() {
+ # objectives:
+ # Enable networking.
+ # Setup networking.
+ # Find the location from which we need to get the ISO.
+ # Mount the ISO.
+ rc=1
+
+ echo "passed on path is ${HTTPFS}" >> status
+ ISO_PATH="${HTTPFS}"
+ echo "The location of ubuntu iso is $ISO_PATH" >> /output
+ echo "mounting CDROM" >> /output
+
+ issquash=`echo "$ISO_PATH" | grep "filesystem.squashfs"`
+ mytest=${?}
+ if [ "${mytest}" = "0" ]
+ then
+ mkdir -p ${mountpoint}/casper/
+ httpfs $ISO_PATH ${mountpoint}/casper/
+ else
+
+ mkdir /iso
+ httpfs $ISO_PATH /iso
+ FILEPATH=`ls /iso/*`
+ echo "File path is $FILEPATH\n" >> /output
+ losetup -r /dev/loop0 $FILEPATH
+ mount -t iso9660 $FILEPATH "${mountpoint}" -o loop -o ro
+ fi
+
+ # test if knoppix is there
+ if test -d /cdrom/casper
+ then
+ echo "successfully mounted the Image" >> /output
+ return 0
+ fi
+ return ${rc}
+
+}
+
+
+do_cifsmount() {
+ rc=1
+ if [ -x "/sbin/mount.cifs" ]; then
+ if [ -z "${NFSOPTS}" ]; then
+ CIFSOPTS="-ouser=root,password="
+ else
+ CIFSOPTS="${NFSOPTS}"
+ fi
+
+ [ "$quiet" != "y" ] && log_begin_msg "Trying mount.cifs ${NFSROOT} ${mountpoint} ${CIFSOPTS}"
+ modprobe "${MP_QUIET}" cifs
+
+ if mount.cifs "${NFSROOT}" "${mountpoint}" "${CIFSOPTS}" ; then
+ rc=0
+ fi
+ fi
+ return ${rc}
+}
+
+do_snap_copy ()
+{
+ fromdev="${1}"
+ todir="${2}"
+ snap_type="${3}"
+
+ size=$(fs_size "${fromdev}" "" "used")
+
+ if [ -b "${fromdev}" ]; then
+ # look for free mem
+ if [ -n "${HOMEMOUNTED}" -a "${snap_type}" = "HOME" ]; then
+ todev=$(cat /proc/mounts | grep -s " $(base_path ${todir}) " | awk '{print $1}' )
+ freespace=$(df -k | grep -s ${todev} | awk '{print $4}')
+ else
+ freespace=$( expr $(awk '/MemFree/{print $2}' /proc/meminfo) + $( cat /proc/meminfo | grep Cached | head -n 1 | awk '/Cached/{print $2}' - ))
+ fi
+
+ tomount="/mnt/tmpsnap"
+ if [ ! -d "${tomount}" ] ; then
+ mkdir -p "${tomount}"
+ fi
+
+ fstype=$(get_fstype "${fromdev}")
+ if [ -n "${fstype}" ]; then
+ # Copying stuff...
+ mount -t "${fstype}" -o ro,noatime "${fromdev}" "${tomount}"
+ cp -a "${tomount}"/* ${todir}
+ umount "${tomount}"
+ else
+ log_warning_msg "Unrecognized fstype: ${fstype} on ${fromdev}:${snap_type}"
+ fi
+
+ rmdir "${tomount}"
+ if echo ${fromdev} | grep -qs loop; then
+ losetup -d "${fromdev}"
+ fi
+ return 0
+ else
+ return 1
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the snapshot ${snap_type} medium"
+ fi
+}
+
+try_snap ()
+{
+ # Look for $snap_label.* in block devices and copy the contents to $snap_mount
+ # and remember the device and filename for resync on exit in casper.init
+
+ snap_label="${1}"
+ snap_mount="${2}"
+ snap_type="${3}"
+
+ snapdata=$(find_files "${snap_label}.squashfs ${snap_label}.cpio.gz ${snap_label}.ext2")
+ if [ ! -z "${snapdata}" ]; then
+ snapdev="$(echo ${snapdata} | cut -f1 -d ' ')"
+ snapback="$(echo ${snapdata} | cut -f2 -d ' ')"
+ snapfile="$(echo ${snapdata} | cut -f3 -d ' ')"
+ if echo "${snapfile}" | grep -qs '\(squashfs\|ext2\)'; then
+ # squashfs or ext2 snapshot
+ dev=$(get_backing_device "${snapback}/${snapfile}")
+ if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}"; then
+ log_warning_msg "Impossible to include the ${snapfile} Snapshot"
+ return 1
+ fi
+ else
+ # cpio.gz snapshot
+ if ! (cd "${snap_mount}" && zcat "${snapback}/${snapfile}" | cpio -i -u -d 2>/dev/null) ; then
+ log_warning_msg "Impossible to include the ${snapfile} Snapshot"
+ return 1
+ fi
+ fi
+ umount "${snapback}"
+ else
+ dev=$(find_cow_device "${snap_label}")
+ if [ -b ${dev} ]; then
+ if echo "${dev}" | grep -qs loop; then
+ # strange things happens, user confused?
+ snaploop=$( losetup ${dev} | awk '{print $3}' | tr -d '()' )
+ snapfile=$(basename ${snaploop})
+ snapdev=$(cat /proc/mounts | awk '{print $2,$1}' | grep -es "^$( dirname ${snaploop} )" | cut -f2 -d ' ')
+ else
+ snapdev="${dev}"
+ fi
+ if ! do_snap_copy "${dev}" "${snap_mount}" "${snap_type}" ; then
+ log_warning_msg "Impossible to include the ${snap_label} Snapshot"
+ return 1
+ else
+ if [ -n "${snapfile}" ]; then
+ # it was a loop device, user confused
+ umount ${snapdev}
+ fi
+ fi
+ else
+ log_warning_msg "Impossible to include the ${snap_label} Snapshot"
+ return 1
+ fi
+ fi
+ echo "export ${snap_type}SNAP="${snap_mount}":${snapdev}:${snapfile}" >> /etc/casper.conf # for resync on reboot/halt
+ return 0
+}
+
+setup_unionfs() {
+ image_directory="$1"
+ rootmnt="$2"
+
+ modprobe "${MP_QUIET}" -b ${UNIONFS}
+
+ # run-init can't deal with images in a subdir, but we're going to
+ # move all of these away before it runs anyway. No, we're not,
+ # put them in / since move-mounting them into / breaks mono and
+ # some other apps.
+
+ croot="/"
+
+ # Let's just mount the read-only file systems first
+ rofsstring=""
+ rofslist=""
+ if [ "${NETBOOT}" = "nfs" ] ; then
+ roopt="nfsro" # go aroung a bug in nfs-unionfs locking
+ elif [ "${UNIONFS}" = "aufs" ]; then
+ roopt="rr"
+ else
+ roopt="ro"
+ fi
+
+ mkdir -p "${croot}"
+ for image_type in "ext2" "squashfs" "dir" ; do
+ for image in "${image_directory}"/*."${image_type}"; do
+ imagename=$(basename "${image}")
+ if [ -d "${image}" ]; then
+ # it is a plain directory: do nothing
+ rofsstring="${image}=${roopt}:${rofsstring}"
+ rofslist="${image} ${rofslist}"
+ elif [ -f "${image}" ]; then
+ backdev=$(get_backing_device "$image")
+ fstype=$(get_fstype "${backdev}")
+ if [ "${fstype}" = "unknown" ]; then
+ panic "Unknown file system type on ${backdev} (${image})"
+ fi
+ mkdir -p "${croot}/${imagename}"
+ mount -t "${fstype}" -o ro,noatime "${backdev}" "${croot}/${imagename}" || panic "Can not mount $backdev ($image) on ${croot}/${imagename}" && rofsstring="${croot}/${imagename}=${roopt}:${rofsstring}" && rofslist="${croot}/${imagename} ${rofslist}"
+ fi
+ done
+ done
+ rofsstring=${rofsstring%:}
+
+ mkdir -p /cow
+ cowdevice="tmpfs"
+ cow_fstype="tmpfs"
+ cow_mountopt="rw,noatime,mode=755"
+
+ # Looking for "${root_persistence}" device or file
+ if [ -n "${PERSISTENT}" ]; then
+ cowprobe=$(find_cow_device "${root_persistence}")
+ if [ -b "${cowprobe}" ]; then
+ cowdevice=${cowprobe}
+ cow_fstype=$(get_fstype "${cowprobe}")
+ cow_mountopt="rw,noatime"
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the persistent medium"
+ fi
+ fi
+
+ mount -t ${cow_fstype} -o ${cow_mountopt} ${cowdevice} /cow || panic "Can not mount $cowdevice on /cow"
+
+ mount -t ${UNIONFS} -o noatime,dirs=/cow=rw:$rofsstring ${UNIONFS} "$rootmnt" || panic "${UNIONFS} mount failed"
+
+ # Adding other custom mounts
+ if [ -n "${PERSISTENT}" ]; then
+ # directly mount /home
+ # FIXME: add a custom mounts configurable system
+ homecow=$(find_cow_device "${home_persistence}" )
+ if [ -b "${homecow}" ]; then
+ mount -t $(get_fstype "${homecow}") -o rw,noatime "${homecow}" "${rootmnt}/home"
+ export HOMEMOUNTED=1 # used to proper calculate free space in do_snap_copy()
+ else
+ [ "$quiet" != "y" ] && log_warning_msg "Unable to find the persistent home medium"
+ fi
+ # Look for other snapshots to copy in
+ try_snap "${root_snapshot_label}" "${rootmnt}" "ROOT"
+ try_snap "${home_snapshot_label}" "${rootmnt}/home" "HOME"
+ fi
+
+ if [ -n "${SHOWMOUNTS}" ]; then
+ for d in ${rofslist}; do
+ mkdir -p "${rootmnt}/casper/${d##*/}"
+ case d in
+ *.dir) # do nothing # mount -o bind "${d}" "${rootmnt}/casper/${d##*/}"
+ ;;
+ *) mount -o move "${d}" "${rootmnt}/casper/${d##*/}"
+ ;;
+ esac
+ done
+ # shows cow fs on /cow for use by casper-snapshot
+ mkdir -p "${rootmnt}/cow"
+ mount -o bind /cow "${rootmnt}/cow"
+ fi
+
+ # move the first mount; no head in busybox-initramfs
+ for d in $(mount -t squashfs | cut -d\ -f 3); do
+ mkdir -p "${rootmnt}/rofs"
+ mount -o move "${d}" "${rootmnt}/rofs"
+ break
+ done
+}
+
+check_dev ()
+{
+ sysdev="${1}"
+ devname="${2}"
+ skip_uuid_check="${3}"
+ if [ -z "${devname}" ]; then
+ devname=$(sys2dev "${sysdev}")
+ fi
+
+ if [ -d "${devname}" ]; then
+ mount -o bind "${devname}" $mountpoint || continue
+ if is_casper_path $mountpoint; then
+ echo $mountpoint
+ return 0
+ else
+ umount $mountpoint
+ fi
+ fi
+
+ if [ -n "${LIVEMEDIA_OFFSET}" ]; then
+ loopdevname=$(setup_loop "${devname}" "loop" "/sys/block/loop*" "${LIVEMEDIA_OFFSET}")
+ devname="${loopdevname}"
+ fi
+
+ fstype=$(get_fstype "${devname}")
+ if is_supported_fs ${fstype}; then
+ mount -t ${fstype} -o ro,noatime "${devname}" $mountpoint || continue
+ if is_casper_path $mountpoint && \
+ ([ "$skip_uuid_check" ] || matches_uuid $mountpoint); then
+ echo $mountpoint
+ return 0
+ else
+ umount $mountpoint
+ fi
+ fi
+
+ if [ -n "${LIVEMEDIA_OFFSET}" ]; then
+ losetup -d "${loopdevname}"
+ fi
+ return 1
+}
+
+find_livefs() {
+ timeout="${1}"
+ # first look at the one specified in the command line
+ if [ ! -z "${LIVEMEDIA}" ]; then
+ if check_dev "null" "${LIVEMEDIA}" "skip_uuid_check"; then
+ return 0
+ fi
+ fi
+ # don't start autodetection before timeout has expired
+ if [ -n "${LIVEMEDIA_TIMEOUT}" ]; then
+ if [ "${timeout}" -lt "${LIVEMEDIA_TIMEOUT}" ]; then
+ return 1
+ fi
+ fi
+ # or do the scan of block devices
+ for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|fd)"); do
+ devname=$(sys2dev "${sysblock}")
+ fstype=$(get_fstype "${devname}")
+ if /lib/udev/cdrom_id ${devname} > /dev/null; then
+ if check_dev "null" "${devname}" ; then
+ return 0
+ fi
+ elif is_nice_device "${sysblock}" ; then
+ for dev in $(subdevices "${sysblock}"); do
+ if check_dev "${dev}" ; then
+ return 0
+ fi
+ done
+ elif [ "${fstype}" = "squashfs" -o \
+ "${fstype}" = "ext4" -o \
+ "${fstype}" = "ext3" -o \
+ "${fstype}" = "ext2" ]; then
+ # This is an ugly hack situation, the block device has
+ # an image directly on it. It's hopefully
+ # casper, so take it and run with it.
+ ln -s "${devname}" "${devname}.${fstype}"
+ echo "${devname}.${fstype}"
+ return 0
+ fi
+ done
+ return 1
+}
+
+set_usplash_timeout() {
+ if [ -x /sbin/usplash_write ]; then
+ /sbin/usplash_write "TIMEOUT 120"
+ fi
+}
+
+rescue_break_shell ()
+{
+ if [ "${RESCUEBREAK}" = "Yes" ];
+ then
+ echo "#################################################################"
+ echo "#### giving rescue shell, you can execute any commands here #####"
+ echo "#### When done, type exit, boot process will resume :-) #####"
+ echo "#################################################################"
+ /bin/sh -i
+ echo "#################################################################"
+ echo "#### Resuming Boot Process #####"
+ echo "#################################################################"
+ fi
+}
+
+mountroot() {
+ exec 6>&1
+ exec 7>&2
+ exec > casper.log
+ exec 2>&1
+
+ parse_cmdline
+
+ set_usplash_timeout
+ [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-premount"
+ run_scripts /scripts/casper-premount
+ [ "$quiet" != "y" ] && log_end_msg
+
+ # Needed here too because some things (*cough* udev *cough*)
+ # changes the timeout
+
+ set_usplash_timeout
+
+ if [ ! -z "${NETBOOT}" ]; then
+ if do_netmount ; then
+ livefs_root="${mountpoint}"
+ else
+ panic "Unable to find a live file system on the network"
+ fi
+ else
+ # Scan local devices for the image
+ i=0
+ while [ "$i" -lt 60 ]; do
+ livefs_root=$(find_livefs $i)
+ if [ "${livefs_root}" ]; then
+ break
+ fi
+ sleep 1
+ i="$(($i + 1))"
+ done
+ fi
+
+ if [ "${RESCUEBREAK}" = "Yes" ]; then
+ rescue_break_shell
+ fi
+
+ if [ -z "${livefs_root}" ]; then
+ panic "Unable to find a medium containing a live file system"
+ fi
+
+ if [ "${TORAM}" ]; then
+ live_dest="ram"
+ elif [ "${TODISK}" ]; then
+ live_dest="${TODISK}"
+ fi
+ if [ "${live_dest}" ]; then
+ log_begin_msg "Copying live_media to ${live_dest}"
+ copy_live_to "${livefs_root}" "${live_dest}"
+ log_end_msg
+ fi
+
+ mount_images_in_directory "${livefs_root}" "${rootmnt}"
+
+ log_end_msg
+
+ maybe_break casper-bottom
+ [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/casper-bottom"
+
+ run_scripts /scripts/casper-bottom
+ [ "$quiet" != "y" ] && log_end_msg
+
+ exec 1>&6 6>&-
+ exec 2>&7 7>&-
+ cp casper.log "${rootmnt}/var/log/"
+}
--- /dev/null
+#!/bin/bash
+set -e
+
+#cleanup the old mess
+echo "Removing the old files"
+sudo rm -rf initrd.gz initrd mpoint
+
+# create a copy of image to modify
+cp initrd.gz_orig initrd.gz
+gunzip initrd.gz
+
+echo "extracting filesystem filesystem"
+mkdir -p mpoint
+cd mpoint
+cpio -ivu --no-absolute-filename < ../initrd 2> /dev/null
+cd ..
+
+echo "coping the needed files..."
+
+cp strace mpoint/bin/
+
+cp run-init mpoint/bin/
+chmod 777 mpoint/bin/run-init
+
+cp httpfs/server/httpfs mpoint/bin/
+chmod 777 mpoint/bin/httpfs
+
+cp httpfs/server/fusermount mpoint/bin/
+chmod 777 mpoint/bin/fusermount
+
+cp init mpoint/
+chmod 0777 mpoint/init
+
+cp casper mpoint/scripts/
+chmod 0777 mpoint/scripts/casper
+
+echo "copying iscsi related files..."
+mkdir -p mpoint/etc/iscsi
+cp iscsi/iscsid.conf mpoint/etc/iscsi/
+cp iscsi/initiatorname.iscsi mpoint/etc/iscsi/
+cp iscsi/tools/* mpoint/sbin/
+cp fdisk mpoint/sbin/
+
+mkdir -p mpoint/modules
+cp modules/* mpoint/modules/
+
+sudo chown -R root.root mpoint
+cd mpoint
+echo "creating initrd from new system filesystem"
+echo "Compressing the filesystem"
+sudo find . | sudo cpio -oH newc | gzip -9 > ../initrd.gz
+cd ..
+
+sudo rm -rf mpoint initrd
+
+echo "Done, you can use initrd.gz"
--- /dev/null
+#!/static/sh
+
+case "$1" in
+ renew|bound)
+ ifconfig $interface $ip up
+
+ if [ -n "$router" ] ; then
+ for i in $router ; do
+ route add -net 0.0.0.0 netmask 0.0.0.0 gw $i dev $interface
+ done
+ fi
+ ;;
+ * )
+ ifconfig $interface 0.0.0.0
+ ;;
+esac
+
+exit 0
--- /dev/null
+#!/bin/sh
+
+echo "Loading, please wait..."
+
+[ -d /dev ] || mkdir -m 0755 /dev
+[ -d /root ] || mkdir -m 0700 /root
+[ -d /sys ] || mkdir /sys
+[ -d /proc ] || mkdir /proc
+[ -d /tmp ] || mkdir /tmp
+mkdir -p /var/lock
+mount -t sysfs -o nodev,noexec,nosuid none /sys
+mount -t proc -o nodev,noexec,nosuid none /proc
+
+# Note that this only becomes /dev on the real filesystem if udev's scripts
+# are used; which they will be, but it's worth pointing out
+mount -t tmpfs -o mode=0755 udev /dev
+[ -e /dev/console ] || mknod -m 0600 /dev/console c 5 1
+[ -e /dev/null ] || mknod /dev/null c 1 3
+> /dev/.initramfs-tools
+mkdir /dev/.initramfs
+
+# Export the dpkg architecture
+export DPKG_ARCH=
+. /conf/arch.conf
+
+# Set modprobe env
+export MODPROBE_OPTIONS="-qb"
+
+# Export relevant variables
+export ROOT=
+export ROOTDELAY=
+export ROOTFLAGS=
+export ROOTFSTYPE=
+export break=
+export init=/sbin/init
+export quiet=n
+export readonly=y
+export rootmnt=/root
+export debug=
+export panic=
+export blacklist=
+export resume_offset=
+
+
+# Bring in the main config
+. /conf/initramfs.conf
+for conf in conf/conf.d/*; do
+ [ -f ${conf} ] && . ${conf}
+done
+. /scripts/functions
+
+# Parse command line options
+for x in $(cat /proc/cmdline); do
+ case $x in
+ init=*)
+ init=${x#init=}
+ ;;
+ root=*)
+ ROOT=${x#root=}
+ case $ROOT in
+ LABEL=*)
+ ROOT="${ROOT#LABEL=}"
+
+ # support / in LABEL= paths (escape to \x2f)
+ case "${ROOT}" in
+ *[/]*)
+ if [ -x "$(command -v sed)" ]; then
+ ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')"
+ else
+ if [ "${ROOT}" != "${ROOT#/}" ]; then
+ ROOT="\x2f${ROOT#/}"
+ fi
+ if [ "${ROOT}" != "${ROOT%/}" ]; then
+ ROOT="${ROOT%/}\x2f"
+ fi
+ IFS='/'
+ newroot=
+ for s in $ROOT; do
+ if [ -z "${newroot}" ]; then
+ newroot="${s}"
+ else
+ newroot="${newroot}\\x2f${s}"
+ fi
+ done
+ unset IFS
+ ROOT="${newroot}"
+ fi
+ esac
+ ROOT="/dev/disk/by-label/${ROOT}"
+ ;;
+ UUID=*)
+ ROOT="/dev/disk/by-uuid/${ROOT#UUID=}"
+ ;;
+ /dev/nfs)
+ [ -z "${BOOT}" ] && BOOT=nfs
+ ;;
+ esac
+ ;;
+ rootflags=*)
+ ROOTFLAGS="-o ${x#rootflags=}"
+ ;;
+ rootfstype=*)
+ ROOTFSTYPE="${x#rootfstype=}"
+ ;;
+ rootdelay=*)
+ ROOTDELAY="${x#rootdelay=}"
+ case ${ROOTDELAY} in
+ *[![:digit:].]*)
+ ROOTDELAY=
+ ;;
+ esac
+ ;;
+ resumedelay=*)
+ RESUMEDELAY="${x#resumedelay=}"
+ ;;
+ loop=*)
+ LOOP="${x#loop=}"
+ ;;
+ loopflags=*)
+ LOOPFLAGS="-o ${x#loopflags=}"
+ ;;
+ loopfstype=*)
+ LOOPFSTYPE="${x#loopfstype=}"
+ ;;
+ cryptopts=*)
+ cryptopts="${x#cryptopts=}"
+ ;;
+ nfsroot=*)
+ NFSROOT="${x#nfsroot=}"
+ ;;
+ httpfs=*)
+ HTTPFS="${x#httpfs=}"
+ ;;
+ iscsifs=*)
+ ISCSIFS="${x#iscsifs=}"
+ ;;
+ target=*)
+ TARGET="${x#target=}"
+ ;;
+ netboot=*)
+ NETBOOT="${x#netboot=}"
+ ;;
+ ip=*)
+ IPOPTS="${x#ip=}"
+ ;;
+ boot=*)
+ BOOT=${x#boot=}
+ ;;
+ resume=*)
+ RESUME="${x#resume=}"
+ ;;
+ resume_offset=*)
+ resume_offset="${x#resume_offset=}"
+ ;;
+ noresume)
+ noresume=y
+ ;;
+ panic=*)
+ panic="${x#panic=}"
+ case ${panic} in
+ *[![:digit:].]*)
+ panic=
+ ;;
+ esac
+ ;;
+ quiet)
+ quiet=y
+ ;;
+ ro)
+ readonly=y
+ ;;
+ rw)
+ readonly=n
+ ;;
+ debug)
+ debug=y
+ quiet=n
+ exec >/dev/.initramfs/initramfs.debug 2>&1
+ set -x
+ ;;
+ debug=*)
+ debug=y
+ quiet=n
+ set -x
+ ;;
+ break=*)
+ break=${x#break=}
+ ;;
+ break)
+ break=premount
+ ;;
+ blacklist=*)
+ blacklist=${x#blacklist=}
+ ;;
+ esac
+done
+
+if [ -z "${noresume}" ]; then
+ export resume=${RESUME}
+else
+ export noresume
+fi
+
+depmod -a
+maybe_break top
+
+# export BOOT variable value for compcache,
+# so we know if we run from casper
+export BOOT
+
+# Don't do log messages here to avoid confusing usplash
+run_scripts /scripts/init-top
+
+maybe_break modules
+log_begin_msg "Loading essential drivers..."
+load_modules
+log_end_msg
+
+maybe_break premount
+[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount"
+run_scripts /scripts/init-premount
+[ "$quiet" != "y" ] && log_end_msg
+
+maybe_break mount
+log_begin_msg "Mounting root file system..."
+. /scripts/${BOOT}
+parse_numeric ${ROOT}
+mountroot
+log_end_msg
+
+maybe_break bottom
+[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom"
+run_scripts /scripts/init-bottom
+[ "$quiet" != "y" ] && log_end_msg
+
+# Move virtual filesystems over to the real filesystem
+mount -n -o move /sys ${rootmnt}/sys
+mount -n -o move /proc ${rootmnt}/proc
+
+# Check init bootarg
+if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then
+ echo "Target filesystem doesn't have ${init}."
+ init=
+fi
+
+# Search for valid init
+if [ -z "${init}" ] ; then
+ for init in /sbin/init /etc/init /bin/init /bin/sh; do
+ if [ ! -x "${rootmnt}${init}" ]; then
+ continue
+ fi
+ break
+ done
+fi
+
+# No init on rootmount
+if [ ! -x "${rootmnt}${init}" ]; then
+ panic "No init found. Try passing init= bootarg."
+fi
+
+# Confuses /etc/init.d/rc
+if [ -n ${debug} ]; then
+ unset debug
+fi
+
+# moving Network mangager related scripts so that they will not get executed
+# these scripts do have sucidal tendency of tearing down the network
+# thats why disabling them -- pravin
+mv /root/etc/init.d/NetworkManager /root/etc/init.d/d_NetworkManager
+mv /root/etc/init.d/networking /root/etc/init.d/d_networking
+
+# Modifying rc.local so that network manager scripts can be restored back.
+echo "#!/bin/sh -e
+# rc.local
+mv /etc/init.d/d_NetworkManager /etc/init.d/NetworkManager
+mv /etc/init.d/d_networking /etc/init.d/networking
+exit 0
+" > /root/etc/rc.local
+
+# because of some reasons, I dont understand, resolv.conf is not being set
+# that is why I am copying this manually into actual filesystem. -- pravin
+cp /etc/resolv.conf /root/etc/resolv.conf
+
+
+#/bin/sh
+# Chain to real filesystem
+maybe_break init
+exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1
+panic "Could not execute run-init."
+
+/bin/sh
+# Chain to real filesystem
+maybe_break init
+exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1
+panic "Could not execute run-init."
--- /dev/null
+## DO NOT EDIT OR REMOVE THIS FILE!
+## If you remove this file, the iSCSI daemon will not start.
+## If you change the InitiatorName, existing access control lists
+## may reject this initiator. The InitiatorName must be unique
+## for each iSCSI initiator. Do NOT duplicate iSCSI InitiatorNames.
+InitiatorName=iqn.1993-08.org.debian:01:74e6bd2d995f
--- /dev/null
+#
+# Open-iSCSI default configuration.
+# Could be located at /etc/iscsi/iscsid.conf or ~/.iscsid.conf
+#
+# Note: To set any of these values for a specific node/session run
+# the iscsiadm --mode node --op command for the value. See the README
+# and man page for iscsiadm for details on the --op command.
+#
+
+################
+# iSNS settings
+################
+# Address of iSNS server
+#isns.address = 192.168.0.1
+#isns.port = 3205
+
+#############################
+# NIC/HBA and driver settings
+#############################
+# open-iscsi can create a session and bind it to a NIC/HBA.
+# To set this up see the example iface config file.
+
+#*****************
+# Startup settings
+#*****************
+
+# To request that the iscsi initd scripts startup a session set to "automatic".
+node.startup = automatic
+#
+# To manually startup the session set to "manual". The default is manual.
+#node.startup = manual
+
+# *************
+# CHAP Settings
+# *************
+
+# To enable CHAP authentication set node.session.auth.authmethod
+# to CHAP. The default is None.
+#node.session.auth.authmethod = CHAP
+
+# To set a CHAP username and password for initiator
+# authentication by the target(s), uncomment the following lines:
+#node.session.auth.username = username
+#node.session.auth.password = password
+
+# To set a CHAP username and password for target(s)
+# authentication by the initiator, uncomment the following lines:
+#node.session.auth.username_in = username_in
+#node.session.auth.password_in = password_in
+
+# To enable CHAP authentication for a discovery session to the target
+# set discovery.sendtargets.auth.authmethod to CHAP. The default is None.
+#discovery.sendtargets.auth.authmethod = CHAP
+
+# To set a discovery session CHAP username and password for the initiator
+# authentication by the target(s), uncomment the following lines:
+#discovery.sendtargets.auth.username = username
+#discovery.sendtargets.auth.password = password
+
+# To set a discovery session CHAP username and password for target(s)
+# authentication by the initiator, uncomment the following lines:
+#discovery.sendtargets.auth.username_in = username_in
+#discovery.sendtargets.auth.password_in = password_in
+
+# ********
+# Timeouts
+# ********
+#
+# See the iSCSI REAME's Advanced Configuration section for tips
+# on setting timeouts when using multipath or doing root over iSCSI.
+#
+# To specify the length of time to wait for session re-establishment
+# before failing SCSI commands back to the application when running
+# the Linux SCSI Layer error handler, edit the line.
+# The value is in seconds and the default is 120 seconds.
+node.session.timeo.replacement_timeout = 120
+
+# To specify the time to wait for login to complete, edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.conn[0].timeo.login_timeout = 15
+
+# To specify the time to wait for logout to complete, edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.conn[0].timeo.logout_timeout = 15
+
+# Time interval to wait for on connection before sending a ping.
+node.conn[0].timeo.noop_out_interval = 5
+
+# To specify the time to wait for a Nop-out response before failing
+# the connection, edit this line. Failing the connection will
+# cause IO to be failed back to the SCSI layer. If using dm-multipath
+# this will cause the IO to be failed to the multipath layer.
+node.conn[0].timeo.noop_out_timeout = 5
+
+# To specify the time to wait for abort response before
+# failing the operation and trying a logical unit reset edit the line.
+# The value is in seconds and the default is 15 seconds.
+node.session.err_timeo.abort_timeout = 15
+
+# To specify the time to wait for a logical unit response
+# before failing the operation and trying session re-establishment
+# edit the line.
+# The value is in seconds and the default is 30 seconds.
+node.session.err_timeo.lu_reset_timeout = 20
+
+#******
+# Retry
+#******
+
+# To specify the number of times iscsid should retry a login
+# if the login attempt fails due to the node.conn[0].timeo.login_timeout
+# expiring modify the following line. Note that if the login fails
+# quickly (before node.conn[0].timeo.login_timeout fires) because the network
+# layer or the target returns an error, iscsid may retry the login more than
+# node.session.initial_login_retry_max times.
+#
+# This retry count along with node.conn[0].timeo.login_timeout
+# determines the maximum amount of time iscsid will try to
+# establish the initial login. node.session.initial_login_retry_max is
+# multiplied by the node.conn[0].timeo.login_timeout to determine the
+# maximum amount.
+#
+# The default node.session.initial_login_retry_max is 8 and
+# node.conn[0].timeo.login_timeout is 15 so we have:
+#
+# node.conn[0].timeo.login_timeout * node.session.initial_login_retry_max =
+# 120 seconds
+#
+# Valid values are any integer value. This only
+# affects the initial login. Setting it to a high value can slow
+# down the iscsi service startup. Setting it to a low value can
+# cause a session to not get logged into, if there are distuptions
+# during startup or if the network is not ready at that time.
+node.session.initial_login_retry_max = 8
+
+################################
+# session and device queue depth
+################################
+
+# To control how many commands the session will queue set
+# node.session.cmds_max to an integer between 2 and 2048 that is also
+# a power of 2. The default is 128.
+node.session.cmds_max = 128
+
+# To control the device's queue depth set node.session.queue_depth
+# to a value between 1 and 128. The default is 32.
+node.session.queue_depth = 32
+
+#***************
+# iSCSI settings
+#***************
+
+# To enable R2T flow control (i.e., the initiator must wait for an R2T
+# command before sending any data), uncomment the following line:
+#
+#node.session.iscsi.InitialR2T = Yes
+#
+# To disable R2T flow control (i.e., the initiator has an implied
+# initial R2T of "FirstBurstLength" at offset 0), uncomment the following line:
+#
+# The defaults is No.
+node.session.iscsi.InitialR2T = No
+
+#
+# To disable immediate data (i.e., the initiator does not send
+# unsolicited data with the iSCSI command PDU), uncomment the following line:
+#
+#node.session.iscsi.ImmediateData = No
+#
+# To enable immediate data (i.e., the initiator sends unsolicited data
+# with the iSCSI command packet), uncomment the following line:
+#
+# The default is Yes
+node.session.iscsi.ImmediateData = Yes
+
+# To specify the maximum number of unsolicited data bytes the initiator
+# can send in an iSCSI PDU to a target, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 262144
+node.session.iscsi.FirstBurstLength = 262144
+
+# To specify the maximum SCSI payload that the initiator will negotiate
+# with the target for, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the defauls it 16776192
+node.session.iscsi.MaxBurstLength = 16776192
+
+# To specify the maximum number of data bytes the initiator can receive
+# in an iSCSI PDU from a target, edit the following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 131072
+node.conn[0].iscsi.MaxRecvDataSegmentLength = 131072
+
+
+# To specify the maximum number of data bytes the initiator can receive
+# in an iSCSI PDU from a target during a discovery session, edit the
+# following line.
+#
+# The value is the number of bytes in the range of 512 to (2^24-1) and
+# the default is 32768
+#
+discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768
+
+# To allow the targets to control the setting of the digest checking,
+# with the initiator requesting a preference of enabling the checking, uncomment# one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = CRC32C,None
+#node.conn[0].iscsi.DataDigest = CRC32C,None
+#
+# To allow the targets to control the setting of the digest checking,
+# with the initiator requesting a preference of disabling the checking,
+# uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = None,CRC32C
+#node.conn[0].iscsi.DataDigest = None,CRC32C
+#
+# To enable CRC32C digest checking for the header and/or data part of
+# iSCSI PDUs, uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = CRC32C
+#node.conn[0].iscsi.DataDigest = CRC32C
+#
+# To disable digest checking for the header and/or data part of
+# iSCSI PDUs, uncomment one or both of the following lines:
+#node.conn[0].iscsi.HeaderDigest = None
+#node.conn[0].iscsi.DataDigest = None
+#
+# The default is to never use DataDigests or HeaderDigests.
+#
+
+
+#************
+# Workarounds
+#************
+
+# Some targets like IET prefer after an initiator has sent a task
+# management function like an ABORT TASK or LOGICAL UNIT RESET, that
+# it does not respond to PDUs like R2Ts. To enable this behavior uncomment
+# the following line (The default behavior is Yes):
+node.session.iscsi.FastAbort = Yes
+
+# Some targets like Equalogic prefer that after an initiator has sent
+# a task management function like an ABORT TASK or LOGICAL UNIT RESET, that
+# it continue to respond to R2Ts. To enable this uncomment this line
+# node.session.iscsi.FastAbort = No
--- /dev/null
+#!/bin/sh
+#
+# Copyright (C) Voltaire Ltd. 2006. ALL RIGHTS RESERVED.
+#
+# 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; either version 2 of the License, or (at your option) any later
+# version.
+#
+# 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., 59 Temple
+# Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Author: Dan Bar Dov <danb@voltaire.com>
+
+# iscsi_discovery:
+# * does a send-targets discovery to the given IP
+# * set the transport type to the preferred transport (or tcp is -t flag is not used)
+# * tries to login
+# * if succeeds,
+# o logout,
+# o mark record autmatic (unless -m flag is used)
+# * else
+# o reset transport type to TCP
+# o try to login
+# o if succeeded
+# + logout
+# + mark record automatic (unless -m flag is used)
+#
+
+usage()
+{
+ echo "Usage: $0 <IP> [-p <port>] [-d] [-t <tcp|iser> [-f]] [-m] [-l]"
+ echo "Options:"
+ echo "-p set the port number (defualt is 3260)."
+ echo "-d print debugging information"
+ echo "-t set trasnpot (default is tcp)."
+ echo "-f force specific transport -disable the fallback to tcp (default is fallback enabled)."
+ echo " force the transport specified by the argument of the -t flag."
+ echo "-m manual startup - will set manual startup (default is automatic startup)."
+ echo "-l login to the new discovered nodes (defualt is false)."
+}
+
+dbg()
+{
+ $debug && echo $@
+}
+
+initialize()
+{
+ trap "exit" 2
+ debug=false
+ force="0"
+ log_out="1"
+ startup_manual="0"
+ #set defualt transport to tcp
+ transport=tcp
+ #set defualt port to 3260
+ port=3260;
+}
+
+parse_cmdline()
+{
+ if [ $# -lt 1 ]; then
+ usage
+ exit 1
+ fi
+
+ # check if the IP address is valid
+ ip=`echo $1 | awk -F'.' '$1 != "" && $1 <=255 && $2 != "" && $2 <= 255 && $3 != "" && $3 <= 255 && $4 != "" && $4 <= 255 {print $0}'`
+ if [ -z "$ip" ]; then
+ echo "$1 is not a vaild IP address!"
+ exit 1
+ fi
+ shift
+ while getopts "dfmlt:p:" options; do
+ case $options in
+ d ) debug=true;;
+ f ) force="1";;
+ t ) transport=$OPTARG;;
+ p ) port=$OPTARG;;
+ m ) startup_manual="1";;
+ l ) log_out=0;;
+ \? ) usage
+ exit 1;;
+ * ) usage
+ exit 1;;
+ esac
+ done
+}
+
+discover()
+{
+ # If open-iscsi is already logged in to the portal, exit
+ if [ $(iscsiadm -m session | grep -c ${ip}:${port}) -ne 0 ]; then
+ echo "Please logout from all targets on ${ip}:${port} before trying to run discovery on that portal"
+ exit 2
+ fi
+
+ connected=0
+ discovered=0
+ df=/tmp/discovered.$$
+
+ dbg "starting discovery to $ip"
+ iscsiadm -m discovery --type sendtargets --portal ${ip}:${port} > ${df}
+ while read portal target
+ do
+ portal=${portal%,*}
+ select_transport
+ done < ${df}
+
+ discovered=$(cat ${df} | wc -l)
+ if [ ${discovered} = 0 ]; then
+ echo "failed to discover targets at ${ip}"
+ exit 2
+ else
+ echo "discovered ${discovered} targets at ${ip}"
+ fi
+ /bin/rm -f ${df}
+}
+
+try_login()
+{
+ if [ "$startup_manual" != "1" ]; then
+ iscsiadm -m node --targetname ${target} --portal ${portal} --op update -n node.conn[0].startup -v automatic
+ fi
+ iscsiadm -m node --targetname ${target} --portal ${portal} --login >/dev/null 2>&1
+ ret=$?
+ if [ ${ret} = 0 ]; then
+ echo "Set target ${target} to automatic login over ${transport} to portal ${portal}"
+ connected=$(($connected + 1))
+ if [ "$log_out" = "1" ]; then
+ iscsiadm -m node --targetname ${target} --portal ${portal} --logout
+ fi
+ else
+ echo "Cannot login over ${transport} to portal ${portal}"
+ iscsiadm -m node --targetname ${target} --portal ${portal} --op update -n node.conn[0].startup -v manual
+ fi
+ return ${ret}
+}
+
+set_transport()
+{
+ transport=$1
+ if [ "$transport" == "iser" ];then
+ iscsiadm -m node --targetname ${target} --portal ${portal} \
+ --op update -n node.conn[0].iscsi.HeaderDigest -v None
+ iscsiadm -m node --targetname ${target} --portal ${portal} \
+ --op update -n node.conn[0].iscsi.DataDigest -v None
+ fi
+ transport_name=`iscsiadm -m node -p ${portal} -T ${target} |awk '/transport_name/ {print $1}'`
+ iscsiadm -m node --targetname ${target} --portal ${portal} \
+ --op update -n ${transport_name} -v ${transport}
+}
+
+select_transport()
+{
+ set_transport $transport
+ dbg "Testing $transport-login to target ${target} portal ${portal}"
+ try_login;
+ if [ $? != 0 -a "$force" = "0" ]; then
+ set_transport tcp
+ dbg "starting to test tcp-login to target ${target} portal ${portal}"
+ try_login;
+ fi
+}
+
+check_iscsid()
+{
+ #check if iscsid is running
+ pidof iscsid &>/dev/null
+ ret=$?
+ if [ $ret -ne 0 ]; then
+ echo "iscsid is not running"
+ echo "Exiting..."
+ exit 1
+ fi
+}
+
+check_iscsid
+initialize
+parse_cmdline "$@"
+discover
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Automatic Ubuntu boot ==--
+MENU LABEL ^Automatic Ubuntu Boot
+
+TEXT HELP
+ Allows user to boot Ubuntu without any hassle
+ Closest mirror selection is automatic
+ and is based on your IP
+
+ This work is still under progress
+ Please use manual Selection for time being.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+
+menu include manual/manual.conf manual mirror selection
+
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:i="http://ns.adobe.com/AdobeIllustrator/10.0/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="800"
+ height="600"
+ id="svg3735"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="bko-background.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-filename="/home/warthog9/git/BKO/bkotest/bko/bko/bko-background.png"
+ inkscape:export-xdpi="71.999992"
+ inkscape:export-ydpi="71.999992"
+ version="1.0">
+ <defs
+ id="defs3737"><linearGradient
+ inkscape:collect="always"
+ id="linearGradient3803">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop3805" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop3807" />
+</linearGradient>
+<linearGradient
+ inkscape:collect="always"
+ id="linearGradient3784">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3786" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop3788" />
+</linearGradient>
+<inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 300 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="800 : 300 : 1"
+ inkscape:persp3d-origin="400 : 200 : 1"
+ id="perspective3743" />
+<linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3784"
+ id="linearGradient3790"
+ x1="416.0145"
+ y1="600"
+ x2="416.0145"
+ y2="483.32739"
+ gradientUnits="userSpaceOnUse" />
+<linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3803"
+ id="linearGradient3823"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,1.1804986,0,1.9902435)"
+ x1="417.19299"
+ y1="-48.181217"
+ x2="413.65747"
+ y2="125.05994" />
+<inkscape:perspective
+ id="perspective3870"
+ inkscape:persp3d-origin="183.5045 : 86.998332 : 1"
+ inkscape:vp_z="367.009 : 130.4975 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 130.4975 : 1"
+ sodipodi:type="inkscape:persp3d" />
+
+ <foreignObject
+ id="foreignObject8"
+ height="1"
+ width="1"
+ y="0"
+ x="0"
+ requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
+ <i:pgfRef
+ xlink:href="#adobe_illustrator_pgf">
+ </i:pgfRef>
+
+ </foreignObject>
+
+
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.6"
+ inkscape:cx="147.13668"
+ inkscape:cy="145.83821"
+ inkscape:current-layer="layer1"
+ inkscape:document-units="px"
+ showgrid="false"
+ showguides="true"
+ inkscape:guide-bbox="true"
+ inkscape:snap-global="false"
+ inkscape:window-width="1401"
+ inkscape:window-height="830"
+ inkscape:window-x="0"
+ inkscape:window-y="25">
+ <sodipodi:guide
+ orientation="1,0"
+ position="973.33333,380"
+ id="guide3770" />
+ <sodipodi:guide
+ orientation="0,1"
+ position="-43.333333,823.33333"
+ id="guide3772" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata3740">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <path
+ style="fill:#3771c8;fill-opacity:1"
+ d="M 0,-3e-06 L 0,86.15144 C 10.49074,503.27094 76.01623,586.22676 318.11293,600 L 800.00008,600 L 800.00008,-3e-06 L 0,-3e-06 z"
+ id="rect3758" />
+ <path
+ style="fill:url(#linearGradient3790);fill-opacity:1"
+ d="M 0,-9.9475983e-14 L 0,86.15145 C 10.4907,503.27094 76.0162,586.22676 318.1129,600 L 800,600 L 800,-9.9475983e-14 L 0,-9.9475983e-14 z"
+ id="path3768" />
+ <path
+ style="fill:url(#linearGradient3823);fill-opacity:1"
+ d="M 2,51.601892 C 54.596936,74.867445 113.1447,86.847932 171.24078,96.371057 C 290.44334,114.7179 412.38848,118.91548 533.34375,114.04865 C 622.5439,109.91733 711.89263,100.98971 798,80.57258 C 798,54.937276 798,29.301971 798,3.6666667 C 532.66667,3.6666667 267.33333,3.6666667 2,3.6666667 C 2,19.645075 2,35.623483 2,51.601892 z"
+ id="path3798" />
+ <g
+ id="g10"
+ transform="matrix(0.7146157,0,0,0.7146157,-346.39981,145.67286)">
+ <g
+ id="Layer_1">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <g
+ id="g3954"
+ transform="matrix(0.4282216,0,0,0.4282216,494.0759,486.00921)">
+ <line
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ id="line13"
+ y2="32.257999"
+ x2="33.618999"
+ y1="32.257999"
+ x1="9.1450005"
+ i:knockout="Off" />
+ <line
+ style="fill:none;stroke:#000000;stroke-width:1.69920003;stroke-linecap:round"
+ id="line15"
+ y2="71.262001"
+ x2="33.639999"
+ y1="71.262001"
+ x1="9.7390003"
+ i:knockout="Off" />
+ <path
+ id="path17"
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ d="M 37.448,72.257 L 37.44,72.257 M 21.827,72.3 C 22.201,76.36 25.607,79.411 29.635,79.422 C 33.965,79.422 37.475,75.912 37.475,71.582 M 37.475,32.661 C 37.475,28.331 33.965,24.821 29.635,24.821 C 25.304,24.821 21.794,28.331 21.794,32.661 M 37.475,32.661 L 37.475,71.581 M 33.641,32.661 L 33.641,71.581 M 33.641,32.661 C 33.641,31.555 33.192,30.554 32.468,29.828 C 31.743,29.103 30.741,28.655 29.635,28.655 C 28.529,28.655 27.527,29.104 26.802,29.828 C 26.077,30.553 25.629,31.555 25.629,32.661 M 25.686,72.257 C 25.828,73.092 26.228,73.84 26.802,74.414 C 27.527,75.139 28.529,75.587 29.635,75.587 C 30.741,75.587 31.742,75.138 32.468,74.414 C 33.193,73.689 33.641,72.687 33.641,71.581 M 8.566,96.927 L 33.445,99.542" />
+ <line
+ style="fill:none;stroke:#000000;stroke-width:1.69920003;stroke-linecap:round"
+ id="line19"
+ y2="138.33299"
+ x2="29.389999"
+ y1="135.765"
+ x1="4.9499998"
+ i:knockout="Off" />
+ <path
+ id="path21"
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ d="M 33.072,139.721 L 33.065,139.721 M 17.533,138.131 C 17.533,138.167 17.532,138.202 17.532,138.233 C 17.532,142.563 21.043,146.074 25.373,146.074 C 29.415,146.074 32.742,143.016 33.171,139.053 M 37.281,99.526 C 37.281,95.196 33.771,91.686 29.441,91.686 C 25.399,91.686 22.072,94.744 21.643,98.707 M 37.238,100.346 C 37.268,100.059 37.282,99.774 37.281,99.526 M 37.238,100.346 L 33.17,139.053 M 33.425,99.945 L 29.357,138.652 M 33.425,99.945 C 33.54,98.845 33.199,97.802 32.554,97.005 C 31.909,96.209 30.96,95.658 29.86,95.542 C 28.76,95.426 27.717,95.768 26.921,96.413 C 26.124,97.058 25.573,98.007 25.458,99.107 M 21.375,138.492 C 21.429,139.338 21.749,140.123 22.26,140.754 C 22.906,141.551 23.854,142.101 24.954,142.217 C 26.054,142.333 27.097,141.991 27.894,141.346 C 28.691,140.7 29.241,139.752 29.357,138.652" />
+ <path
+ id="path23"
+ style="fill:none;stroke:#000000;stroke-width:1.69920003;stroke-linecap:round"
+ d="M 4.009,260.144 L 120.762,260.144 M 210.217,260.144 L 366.157,260.144" />
+ <line
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ id="line25"
+ y2="226.98"
+ x2="4.0089998"
+ y1="260.14401"
+ x1="4.0089998"
+ i:knockout="Off" />
+ <path
+ id="path27"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 3.958,231.133 L 114.29,231.133 M 114.29,231.133 C 186.72,231.601 182.981,244.217 251.673,243.282 M 251.673,243.283 L 366.159,243.283" />
+ <line
+ style="fill:none;stroke:#000000;stroke-width:1.69920003;stroke-linecap:round"
+ id="line29"
+ y2="260.14499"
+ x2="366.159"
+ y1="239.069"
+ x1="366.159"
+ i:knockout="Off" />
+ <path
+ id="path31"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 251.673,239.078 L 366.159,239.078 M 114.317,226.928 C 150.432,227.16 167.81,230.384 184.484,233.475 C 201.222,236.578 217.236,239.545 251.617,239.078 M 4.009,226.927 L 114.29,226.927" />
+ <path
+ id="path33"
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ d="M 366.159,239.078 L 359.368,239.078 M 359.368,239.078 C 364.255,225.276 364.847,212.824 363.662,205.709 C 362.477,198.594 352.989,175.47 325.714,173.69 C 288.457,171.26 271.757,167.168 253.376,156.495 C 234.994,145.822 164.435,104.316 153.762,94.829 C 143.089,85.342 140.124,73.483 139.532,63.996 C 138.939,54.509 139.532,21.304 139.532,14.189 M 131.23,14.783 C 127.672,6.482 115.221,1.145 103.362,2.331 C 91.503,3.517 76.087,4.11 63.635,7.075 C 51.183,10.039 31.616,13.004 25.687,11.818 C 19.758,10.632 13.828,15.376 14.421,22.491 C 14.561,24.175 14.734,27.65 14.902,32.219 M 15.497,71.288 C 15.442,77.262 15.295,82.772 15.014,87.121 C 14.83,89.974 14.583,93.517 14.282,97.508 M 10.637,136.381 C 9.214,148.439 7.579,158.86 5.885,163.217 M 3.155,163.61 C 0.191,175.469 -1.066,217.314 4.009,226.927 M 3.155,163.61 C 29.838,165.389 71.267,172.075 77.519,226.778 M 3.155,163.61 C 29.838,165.389 71.267,172.075 77.519,226.778 M 3.155,163.61 C 29.838,165.389 71.267,172.075 77.519,226.778" />
+ <path
+ id="path35"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round;stroke-dasharray:7.2, 3.6"
+ d="M 2.907,167.331 C 15.492,168.17 31.506,170.066 45.254,178.056 C 50.975,181.38 56.298,185.774 60.786,191.618 C 67.1,199.84 71.547,210.257 73.438,225.079" />
+ <path
+ id="path37"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 73.438,225.078 C 73.499,225.55 73.556,226.026 73.611,226.508" />
+ <path
+ id="path39"
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ d="M 254.654,165.042 C 259.342,167.126 264.032,168.688 257.258,174.419 C 250.486,180.15 246.318,182.755 235.898,182.755 C 225.479,182.755 190.573,182.234 167.128,185.881 C 143.684,189.528 94.19,203.595 94.19,226.518" />
+ <path
+ id="path41"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round;stroke-dasharray:7.2, 3.6"
+ d="M 252.673,169.54 L 253.435,169.875 C 254.569,170.373 255.701,170.751 256.374,171.346 L 255.89,168.806 C 255.609,169.346 254.983,169.908 254.084,170.667 C 248.31,175.553 244.782,177.84 235.898,177.84 L 235.913,177.84 L 232.366,177.83 L 232.371,177.83 C 218.895,177.778 187.872,177.68 166.374,181.024 C 149.357,183.67 119.152,191.733 102.533,204.412 C 96.921,208.693 92.791,213.538 90.758,218.762 C 89.965,220.801 89.477,222.905 89.326,225.071" />
+ <path
+ id="path43"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 89.326,225.07 C 89.293,225.547 89.276,226.026 89.276,226.508" />
+ <path
+ id="path45"
+ style="fill:none;stroke:#000000;stroke-width:1.69920003;stroke-linecap:round"
+ d="M 120.761,245.273 L 120.761,260.144 M 120.761,245.273 C 185.657,248.24 184.3,255.694 210.067,260.12" />
+ <path
+ id="path47"
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ d="M 131.23,14.783 C 131.973,24.236 131.973,41.971 131.086,47.734 C 130.199,53.497 130.199,65.025 130.643,70.789 C 131.087,76.553 133.747,88.08 140.397,94.287 C 147.047,100.494 167.442,114.238 176.752,119.558 C 186.063,124.878 246.987,160.869 254.653,165.042" />
+ <path
+ id="path49"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round;stroke-dasharray:7.2, 3.6"
+ d="M 126.203,14.428 C 126.914,23.473 126.961,40.441 126.112,45.955 C 125.171,52.072 125.145,64.306 125.615,70.423 C 126.136,77.202 129.492,90.665 137.314,97.965 C 144.179,104.372 165.21,118.592 174.797,124.072 C 174.797,124.072 241.35,162.928 251.405,168.8" />
+ <path
+ id="path51"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 251.406,168.8 C 252.214,169.272 252.673,169.539 252.673,169.539 M 185.446,135.385 C 185.446,134.072 185.116,132.838 184.552,131.799 M 178.606,127.787 C 178.325,127.758 178.047,127.744 177.806,127.745 C 173.586,127.745 170.166,131.166 170.166,135.385 C 170.166,139.605 173.586,143.026 177.806,143.026 C 182.026,143.026 185.446,139.605 185.446,135.385 M 182.755,135.385 C 182.755,135.095 182.73,134.811 182.687,134.564 M 176.74,130.553 C 174.44,131.061 172.87,133.092 172.858,135.385 C 172.858,138.118 175.073,140.334 177.806,140.334 C 180.539,140.334 182.754,138.118 182.754,135.385" />
+ <path
+ id="path53"
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 181.642,136.114 C 180.99,137.074 179.902,137.697 178.667,137.697 C 176.687,137.697 175.08,136.091 175.08,134.109 C 175.076,133.428 175.274,132.723 175.694,132.103 L 187.824,114.119 C 188.478,113.159 189.565,112.537 190.799,112.537 C 192.779,112.537 194.386,114.143 194.386,116.124 C 194.39,116.806 194.192,117.51 193.773,118.131 L 181.642,136.114 L 181.642,136.114" />
+ <path
+ id="path55"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 215.678,152.46 C 215.678,151.147 215.347,149.912 214.784,148.874 M 208.837,144.862 C 208.557,144.832 208.279,144.819 208.038,144.82 C 203.818,144.82 200.397,148.24 200.397,152.46 C 200.397,156.68 203.818,160.1 208.038,160.1 C 212.257,160.1 215.678,156.68 215.678,152.46 M 212.986,152.46 C 212.986,152.169 212.961,151.885 212.917,151.638 M 206.972,147.628 C 204.672,148.135 203.102,150.167 203.09,152.46 C 203.09,155.193 205.305,157.408 208.038,157.408 C 210.77,157.408 212.986,155.193 212.986,152.46" />
+ <path
+ id="path57"
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 211.873,153.188 C 211.22,154.148 210.132,154.771 208.898,154.771 C 206.917,154.771 205.311,153.165 205.311,151.184 C 205.307,150.502 205.505,149.798 205.924,149.178 L 218.055,131.194 C 218.709,130.234 219.796,129.612 221.029,129.612 C 223.01,129.612 224.617,131.218 224.617,133.199 C 224.621,133.881 224.422,134.585 224.003,135.206 L 211.873,153.188 L 211.873,153.188" />
+ <path
+ id="path59"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 245.909,169.535 C 245.909,168.222 245.578,166.987 245.015,165.949 M 239.068,161.937 C 238.788,161.907 238.509,161.893 238.268,161.895 C 234.049,161.895 230.628,165.315 230.628,169.535 C 230.628,173.755 234.049,177.176 238.268,177.176 C 242.488,177.176 245.909,173.755 245.909,169.535 M 243.218,169.535 C 243.218,169.245 243.193,168.961 243.149,168.714 M 237.202,164.703 C 234.903,165.211 233.333,167.242 233.32,169.535 C 233.32,172.268 235.536,174.483 238.268,174.483 C 241.001,174.483 243.217,172.268 243.217,169.535" />
+ <path
+ id="path61"
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 242.104,170.263 C 241.451,171.224 240.363,171.846 239.129,171.846 C 237.148,171.846 235.541,170.24 235.541,168.258 C 235.537,167.576 235.736,166.872 236.155,166.252 L 248.286,148.267 C 248.939,147.308 250.027,146.685 251.26,146.685 C 253.241,146.685 254.848,148.291 254.848,150.273 C 254.851,150.954 254.653,151.659 254.234,152.279 L 242.104,170.263 L 242.104,170.263" />
+ <path
+ id="path63"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 155.368,117.246 C 155.368,115.933 155.037,114.699 154.473,113.66 M 148.526,109.647 C 148.247,109.617 147.968,109.604 147.727,109.605 C 143.508,109.605 140.086,113.026 140.086,117.245 C 140.086,121.465 143.508,124.886 147.727,124.886 C 151.947,124.886 155.368,121.465 155.368,117.245 M 152.676,117.246 C 152.676,116.956 152.652,116.671 152.608,116.425 M 146.661,112.414 C 144.362,112.922 142.792,114.953 142.779,117.246 C 142.779,119.979 144.995,122.194 147.727,122.194 C 150.459,122.194 152.675,119.979 152.675,117.246" />
+ <path
+ id="path65"
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 151.563,117.975 C 150.909,118.935 149.821,119.557 148.588,119.557 C 146.607,119.557 145,117.951 145,115.97 C 144.996,115.289 145.195,114.584 145.613,113.964 L 157.744,95.98 C 158.398,95.02 159.486,94.398 160.719,94.398 C 162.699,94.398 164.307,96.004 164.307,97.985 C 164.31,98.667 164.112,99.371 163.693,99.992 L 151.563,117.975 L 151.563,117.975" />
+ <path
+ id="path67"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 127.115,83.786 C 125.75,82.794 124.167,82.321 122.626,82.328 C 118.406,82.328 114.986,85.748 114.986,89.968 C 114.986,94.187 118.406,97.608 122.626,97.608 C 126.752,97.608 130.115,94.337 130.262,90.233 M 124.116,85.25 C 123.609,85.089 123.094,85.015 122.625,85.02 C 119.892,85.02 117.677,87.235 117.677,89.968 C 117.677,92.701 119.892,94.916 122.625,94.916 C 124.738,94.916 126.542,93.592 127.262,91.694" />
+ <path
+ id="path69"
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 125.583,92.517 C 124.537,93.021 123.284,93.017 122.215,92.4 C 120.499,91.409 119.911,89.215 120.902,87.5 C 121.239,86.908 121.764,86.397 122.437,86.069 L 141.935,76.559 C 142.982,76.055 144.234,76.06 145.302,76.676 C 147.017,77.667 147.605,79.861 146.615,81.577 C 146.277,82.169 145.754,82.68 145.08,83.008 L 125.583,92.517 L 125.583,92.517" />
+ <path
+ id="path71"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 124.385,51.702 C 122.978,49.268 120.433,47.901 117.77,47.886 C 113.551,47.886 110.13,51.306 110.13,55.526 C 110.13,59.745 113.551,63.166 117.77,63.166 C 120.772,63.166 123.37,61.435 124.639,58.872 M 121.051,51.821 C 120.107,50.986 118.933,50.576 117.771,50.578 C 115.038,50.578 112.823,52.793 112.823,55.526 C 112.823,58.259 115.038,60.474 117.771,60.474 C 119.156,60.474 120.407,59.906 121.306,58.988" />
+ <path
+ id="path73"
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 119.436,59.057 C 118.275,59.093 117.132,58.578 116.407,57.58 C 115.242,55.977 115.598,53.734 117.201,52.569 C 117.75,52.165 118.437,51.912 119.185,51.886 L 140.865,51.129 C 142.026,51.094 143.168,51.608 143.892,52.606 C 145.057,54.209 144.702,56.452 143.099,57.617 C 142.55,58.021 141.863,58.274 141.115,58.3 L 119.436,59.057 L 119.436,59.057" />
+ <path
+ id="path75"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 124.385,18.78 C 122.978,16.346 120.433,14.979 117.77,14.964 C 113.551,14.964 110.13,18.385 110.13,22.604 C 110.13,26.824 113.551,30.245 117.77,30.245 C 120.772,30.245 123.37,28.514 124.639,25.95 M 121.051,18.899 C 120.107,18.063 118.933,17.653 117.771,17.656 C 115.038,17.656 112.823,19.871 112.823,22.604 C 112.823,25.337 115.038,27.553 117.771,27.553 C 119.156,27.553 120.407,26.984 121.306,26.067" />
+ <path
+ id="path77"
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 119.436,26.135 C 118.275,26.17 117.132,25.656 116.407,24.658 C 115.242,23.055 115.598,20.811 117.201,19.647 C 117.75,19.244 118.437,18.99 119.185,18.964 L 140.865,18.207 C 142.026,18.172 143.168,18.686 143.892,19.684 C 145.057,21.287 144.702,23.531 143.099,24.695 C 142.55,25.098 141.863,25.352 141.115,25.378 L 119.436,26.135 L 119.436,26.135" />
+ <path
+ id="path79"
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ d="M 131.7,16.63 C 133.101,15.696 137.324,17.119 139.532,14.19 C 141.74,11.26 142.675,5.89 141.74,4.255 C 140.806,2.621 142.675,-2.749 117.458,3.555" />
+ <path
+ id="path81"
+ style="fill:none;stroke:#000000;stroke-width:0.70560002;stroke-linecap:round"
+ d="M 129.82,13.811 C 130.316,13.48 130.924,13.219 131.647,13.062 C 132.279,12.925 133.066,12.873 133.933,12.84 C 134.724,12.81 135.672,12.883 136.465,12.459 C 136.598,12.388 136.72,12.289 136.824,12.15 C 137.981,10.615 138.635,8.173 138.705,6.433 C 138.713,6.219 138.857,6.043 138.797,5.937 L 138.797,5.937 C 138.651,5.681 138.52,5.395 138.408,5.08 L 138.408,5.078 C 138.349,4.913 138.295,4.735 138.238,4.547 C 138.206,4.439 138.18,4.317 138.124,4.197 L 138.268,4.37 C 136.704,3.289 132.867,3.387 122.245,5.88" />
+ <path
+ id="path85"
+ style="fill:none;stroke:#000000;stroke-width:1.13039994;stroke-linecap:round"
+ d="M 9.142,32.202 C 9.515,42.371 9.858,57.967 9.738,71.271 M 8.567,96.909 C 7.734,108.03 6.464,122.802 4.947,135.779" />
+</g>
+
+ </g>
+
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Nimbus Sans L;-inkscape-font-specification:Nimbus Sans L"
+ x="4.6321363"
+ y="593.7522"
+ id="text3992"
+ sodipodi:linespacing="125%"><tspan
+ sodipodi:role="line"
+ id="tspan3994"
+ x="4.6321363"
+ y="593.7522">boot.kernel.org</tspan></text>
+ </g>
+</svg>
--- /dev/null
+MENU BACKGROUND bko-background.png
+MENU VSHIFT 5
+MENU COLOR BORDER 30;44 #00000000 #00000000 none
+MENU COLOR TITLE 1;36;44 #ffffffff #00000000 std
+
+MENU COLOR screen 37;40 #80ffffff #00000000 std
+#MENU COLOR border 30;44 #40000000 #00000000 std
+#MENU COLOR title 1;36;44 #c00090f0 #00000000 std
+MENU COLOR unsel 37;44 #90ffffff #00000000 std
+MENU COLOR hotkey 1;37;44 #ffffffff #00000000 std
+MENU COLOR sel 7;37;40 #e0000000 #20ff8000 all
+MENU COLOR hotsel 1;7;37;40 #e0400000 #20ff8000 all
+MENU COLOR disabled 1;30;44 #60cccccc #00000000 std
+MENU COLOR scrollbar 30;44 #40000000 #00000000 std
+MENU COLOR tabmsg 31;40 #90ffff00 #00000000 std
+MENU COLOR cmdmark 1;36;40 #c000ffff #00000000 std
+MENU COLOR cmdline 37;40 #c0ffffff #00000000 std
+MENU COLOR pwdborder 30;47 #80ffffff #20ffffff std
+MENU COLOR pwdheader 31;47 #80ff8080 #20ffffff std
+MENU COLOR pwdentry 30;47 #80ffffff #20ffffff std
+MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std
+MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std
+MENU COLOR help 37;40 #c0ffffff #00000000 std
+MENU COLOR msg07 37;40 #90ffffff #00000000 std
+
+MENU WIDTH 80
+MENU MARGIN 10
+MENU PASSWORDMARGIN 3
+MENU ROWS 12
+MENU TABMSGROW 18
+MENU CMDLINEROW 18
+MENU ENDROW -1
+MENU PASSWORDROW 11
+MENU TIMEOUTROW 20
+MENU HELPMSGROW 22
+MENU HELPMSGENDROW -1
+MENU HIDDENROW -2
+MENU HSHIFT 0
+#MENU VSHIFT 0
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select your Country from __CONTINENTNAME__ ==--
+MENU LABEL ^__CONTINENTNAME__
+
+TEXT HELP
+ Select your country from __CONTINENTNAME__
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your __COUNTRYNAME__ ==--
+MENU LABEL ^__COUNTRYNAME__
+
+TEXT HELP
+ Select closest mirror from __COUNTRYNAME__
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^__MIRRORNAME__
+
+TEXT HELP
+ You have selected __MIRRORNAME__ residing in
+ __COUNTRYNAME__ within __CONTINENTNAME__
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=__URL__/9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=__URL__/9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select your Country from Africa ==--
+MENU LABEL ^Africa
+
+TEXT HELP
+ Select your country from Africa
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/africa/botswana/botswana.conf Mirrors from Botswana
+menu include manual/africa/lesotho/lesotho.conf Mirrors from Lesotho
+menu include manual/africa/mozambique/mozambique.conf Mirrors from Mozambique
+menu include manual/africa/namibia/namibia.conf Mirrors from Namibia
+menu include manual/africa/south_africa/south_africa.conf Mirrors from South_africa
+menu include manual/africa/swaziland/swaziland.conf Mirrors from Swaziland
+menu include manual/africa/zimbabwe/zimbabwe.conf Mirrors from Zimbabwe
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Botswana ==--
+MENU LABEL ^Botswana
+
+TEXT HELP
+ Select closest mirror from Botswana
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/africa/botswana/mirror1.conf Mirror: Botswana TENET
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Botswana TENET
+
+TEXT HELP
+ You have selected Botswana TENET residing in
+ Botswana within Africa
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://bw.releases.ubuntu.com//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://bw.releases.ubuntu.com//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Lesotho ==--
+MENU LABEL ^Lesotho
+
+TEXT HELP
+ Select closest mirror from Lesotho
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/africa/lesotho/mirror1.conf Mirror: Lesotho TENET
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Lesotho TENET
+
+TEXT HELP
+ You have selected Lesotho TENET residing in
+ Lesotho within Africa
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ls.releases.ubuntu.com//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ls.releases.ubuntu.com//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Mozambique TENET
+
+TEXT HELP
+ You have selected Mozambique TENET residing in
+ Mozambique within Africa
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mz.releases.ubuntu.com//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mz.releases.ubuntu.com//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Mozambique ==--
+MENU LABEL ^Mozambique
+
+TEXT HELP
+ Select closest mirror from Mozambique
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/africa/mozambique/mirror1.conf Mirror: Mozambique TENET
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Namibia TENET
+
+TEXT HELP
+ You have selected Namibia TENET residing in
+ Namibia within Africa
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://na.releases.ubuntu.com//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://na.releases.ubuntu.com//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Namibia ==--
+MENU LABEL ^Namibia
+
+TEXT HELP
+ Select closest mirror from Namibia
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/africa/namibia/mirror1.conf Mirror: Namibia TENET
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^South Africa Telkom SAIX
+
+TEXT HELP
+ You have selected South Africa Telkom SAIX residing in
+ South_africa within Africa
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.saix.net/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.saix.net/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^South Africa TENET
+
+TEXT HELP
+ You have selected South Africa TENET residing in
+ South_africa within Africa
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.mirror.ac.za/ubuntu-release//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.mirror.ac.za/ubuntu-release//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your South_africa ==--
+MENU LABEL ^South_africa
+
+TEXT HELP
+ Select closest mirror from South_africa
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/africa/south_africa/mirror1.conf Mirror: South Africa Telkom SAIX
+menu include manual/africa/south_africa/mirror2.conf Mirror: South Africa TENET
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Swaziland TENET
+
+TEXT HELP
+ You have selected Swaziland TENET residing in
+ Swaziland within Africa
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://sz.releases.ubuntu.com//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://sz.releases.ubuntu.com//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Swaziland ==--
+MENU LABEL ^Swaziland
+
+TEXT HELP
+ Select closest mirror from Swaziland
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/africa/swaziland/mirror1.conf Mirror: Swaziland TENET
--- /dev/null
+http://bw.releases.ubuntu.com/|BW|AF|Botswana|Botswana TENET|Africa|
+http://ls.releases.ubuntu.com/|LS|AF|Lesotho|Lesotho TENET|Africa|
+http://mz.releases.ubuntu.com/|MZ|AF|Mozambique|Mozambique TENET|Africa|
+http://na.releases.ubuntu.com/|NA|AF|Namibia|Namibia TENET|Africa|
+http://ubuntu.saix.net/ubuntu-releases/|ZA|AF|South Africa|South Africa Telkom SAIX|Africa|
+http://ubuntu.mirror.ac.za/ubuntu-release/|ZA|AF|South Africa|South Africa TENET|Africa|
+http://sz.releases.ubuntu.com/|SZ|AF|Swaziland|Swaziland TENET|Africa|
+http://zw.releases.ubuntu.com/|ZW|AF|Zimbabwe|Zimbabwe TENET|Africa|
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Zimbabwe TENET
+
+TEXT HELP
+ You have selected Zimbabwe TENET residing in
+ Zimbabwe within Africa
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://zw.releases.ubuntu.com//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://zw.releases.ubuntu.com//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Zimbabwe ==--
+MENU LABEL ^Zimbabwe
+
+TEXT HELP
+ Select closest mirror from Zimbabwe
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/africa/zimbabwe/mirror1.conf Mirror: Zimbabwe TENET
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Armenia ==--
+MENU LABEL ^Armenia
+
+TEXT HELP
+ Select closest mirror from Armenia
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/armenia/mirror1.conf Mirror: Armenia ADC
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Armenia ADC
+
+TEXT HELP
+ You have selected Armenia ADC residing in
+ Armenia within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.mirrors.adc.am//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.mirrors.adc.am//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select your Country from Asia ==--
+MENU LABEL ^Asia
+
+TEXT HELP
+ Select your country from Asia
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/armenia/armenia.conf Mirrors from Armenia
+menu include manual/asia/china/china.conf Mirrors from China
+menu include manual/asia/cyprus/cyprus.conf Mirrors from Cyprus
+menu include manual/asia/georgia/georgia.conf Mirrors from Georgia
+menu include manual/asia/hong_kong/hong_kong.conf Mirrors from Hong_kong
+menu include manual/asia/india/india.conf Mirrors from India
+menu include manual/asia/indonesia/indonesia.conf Mirrors from Indonesia
+menu include manual/asia/israel/israel.conf Mirrors from Israel
+menu include manual/asia/japan/japan.conf Mirrors from Japan
+menu include manual/asia/korea,_republic_of/korea,_republic_of.conf Mirrors from Korea,_republic_of
+menu include manual/asia/kuwait/kuwait.conf Mirrors from Kuwait
+menu include manual/asia/mongolia/mongolia.conf Mirrors from Mongolia
+menu include manual/asia/russian_federation/russian_federation.conf Mirrors from Russian_federation
+menu include manual/asia/saudi_arabia/saudi_arabia.conf Mirrors from Saudi_arabia
+menu include manual/asia/singapore/singapore.conf Mirrors from Singapore
+menu include manual/asia/sri_lanka/sri_lanka.conf Mirrors from Sri_lanka
+menu include manual/asia/taiwan/taiwan.conf Mirrors from Taiwan
+menu include manual/asia/thailand/thailand.conf Mirrors from Thailand
+menu include manual/asia/turkey/turkey.conf Mirrors from Turkey
+menu include manual/asia/uzbekistan/uzbekistan.conf Mirrors from Uzbekistan
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your China ==--
+MENU LABEL ^China
+
+TEXT HELP
+ Select closest mirror from China
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/china/mirror1.conf Mirror: China LUPA
+menu include manual/asia/china/mirror2.conf Mirror: China Rootguide.org
+menu include manual/asia/china/mirror3.conf Mirror: China SRT mirror
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^China LUPA
+
+TEXT HELP
+ You have selected China LUPA residing in
+ China within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.lupaworld.com/ubuntu/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.lupaworld.com/ubuntu/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^China Rootguide.org
+
+TEXT HELP
+ You have selected China Rootguide.org residing in
+ China within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.rootguide.org/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.rootguide.org/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^China SRT mirror
+
+TEXT HELP
+ You have selected China SRT mirror residing in
+ China within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.srt.cn/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.srt.cn/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Cyprus ==--
+MENU LABEL ^Cyprus
+
+TEXT HELP
+ Select closest mirror from Cyprus
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/cyprus/mirror1.conf Mirror: Cyprus Cytanet
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Cyprus Cytanet
+
+TEXT HELP
+ You have selected Cyprus Cytanet residing in
+ Cyprus within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirrors.cytanet.com.cy/linux/ubuntu/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirrors.cytanet.com.cy/linux/ubuntu/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Georgia ==--
+MENU LABEL ^Georgia
+
+TEXT HELP
+ Select closest mirror from Georgia
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/georgia/mirror1.conf Mirror: Georgia Open Consultants
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Georgia Open Consultants
+
+TEXT HELP
+ You have selected Georgia Open Consultants residing in
+ Georgia within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.eriders.ge/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.eriders.ge/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Hong_kong ==--
+MENU LABEL ^Hong_kong
+
+TEXT HELP
+ Select closest mirror from Hong_kong
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/hong_kong/mirror1.conf Mirror: Hong Kong Hostrino
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Hong Kong Hostrino
+
+TEXT HELP
+ You have selected Hong Kong Hostrino residing in
+ Hong_kong within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.hostrino.com/pub/ubuntu/cdimage//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.hostrino.com/pub/ubuntu/cdimage//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your India ==--
+MENU LABEL ^India
+
+TEXT HELP
+ Select closest mirror from India
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/india/mirror1.conf Mirror: India Honesty Net Solutions Pvt Ltd
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^India Honesty Net Solutions Pvt Ltd
+
+TEXT HELP
+ You have selected India Honesty Net Solutions Pvt Ltd residing in
+ India within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirrors.hns.net.in/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirrors.hns.net.in/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Indonesia ==--
+MENU LABEL ^Indonesia
+
+TEXT HELP
+ Select closest mirror from Indonesia
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/indonesia/mirror1.conf Mirror: Indonesia IndikaNet
+menu include manual/asia/indonesia/mirror2.conf Mirror: Indonesia PT Pasifik Satelit Nusantara
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Indonesia IndikaNet
+
+TEXT HELP
+ You have selected Indonesia IndikaNet residing in
+ Indonesia within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.indika.net.id/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.indika.net.id/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Indonesia PT Pasifik Satelit Nusantara
+
+TEXT HELP
+ You have selected Indonesia PT Pasifik Satelit Nusantara residing in
+ Indonesia within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.pesat.net.id/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.pesat.net.id/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Israel ==--
+MENU LABEL ^Israel
+
+TEXT HELP
+ Select closest mirror from Israel
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/israel/mirror1.conf Mirror: Israel Israel Internet Association
+menu include manual/asia/israel/mirror2.conf Mirror: Israel INTERHOST
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Israel Israel Internet Association
+
+TEXT HELP
+ You have selected Israel Israel Internet Association residing in
+ Israel within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.isoc.org.il/pub/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.isoc.org.il/pub/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Israel INTERHOST
+
+TEXT HELP
+ You have selected Israel INTERHOST residing in
+ Israel within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.interhost.co.il//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.interhost.co.il//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Japan ==--
+MENU LABEL ^Japan
+
+TEXT HELP
+ Select closest mirror from Japan
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/japan/mirror1.conf Mirror: Japan RIKEN
+menu include manual/asia/japan/mirror2.conf Mirror: Japan JAIST
+menu include manual/asia/japan/mirror3.conf Mirror: Japan Information Technology Center, the University of Tokyo.
+menu include manual/asia/japan/mirror4.conf Mirror: Japan UNIVERSITY OF TOYAMA with Ubuntu Japanese LoCo
+menu include manual/asia/japan/mirror5.conf Mirror: Japan Yamagata University
+menu include manual/asia/japan/mirror6.conf Mirror: Japan mithril-linux.org offered by Debian-JP Project member
+menu include manual/asia/japan/mirror7.conf Mirror: Japan KDDI R&D Laboratories Inc.
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Japan RIKEN
+
+TEXT HELP
+ You have selected Japan RIKEN residing in
+ Japan within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.riken.jp/Linux/ubuntu-iso/CDs//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.riken.jp/Linux/ubuntu-iso/CDs//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Japan JAIST
+
+TEXT HELP
+ You have selected Japan JAIST residing in
+ Japan within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.jaist.ac.jp/pub/Linux/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.jaist.ac.jp/pub/Linux/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Japan Information Technology Center, the University of Tokyo.
+
+TEXT HELP
+ You have selected Japan Information Technology Center, the University of Tokyo. residing in
+ Japan within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.ecc.u-tokyo.ac.jp/UBUNTU-CDS//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.ecc.u-tokyo.ac.jp/UBUNTU-CDS//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Japan UNIVERSITY OF TOYAMA with Ubuntu Japanese LoCo
+
+TEXT HELP
+ You have selected Japan UNIVERSITY OF TOYAMA with Ubuntu Japanese LoCo residing in
+ Japan within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntutym2.u-toyama.ac.jp/ubuntu//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntutym2.u-toyama.ac.jp/ubuntu//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Japan Yamagata University
+
+TEXT HELP
+ You have selected Japan Yamagata University residing in
+ Japan within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.yz.yamagata-u.ac.jp/pub/linux/ubuntu/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Japan mithril-linux.org offered by Debian-JP Project member
+
+TEXT HELP
+ You have selected Japan mithril-linux.org offered by Debian-JP Project member residing in
+ Japan within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.mithril-linux.org/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.mithril-linux.org/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Japan KDDI R&D Laboratories Inc.
+
+TEXT HELP
+ You have selected Japan KDDI R&D Laboratories Inc. residing in
+ Japan within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://www.ftp.ne.jp/Linux/packages/ubuntu/releases-cd//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://www.ftp.ne.jp/Linux/packages/ubuntu/releases-cd//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Korea,_republic_of ==--
+MENU LABEL ^Korea,_republic_of
+
+TEXT HELP
+ Select closest mirror from Korea,_republic_of
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/korea,_republic_of/mirror1.conf Mirror: Korea, Republic of Kyung Hee University Linux User Group
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Korea, Republic of Kyung Hee University Linux User Group
+
+TEXT HELP
+ You have selected Korea, Republic of Kyung Hee University Linux User Group residing in
+ Korea,_republic_of within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.khlug.org/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.khlug.org/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Kuwait ==--
+MENU LABEL ^Kuwait
+
+TEXT HELP
+ Select closest mirror from Kuwait
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/kuwait/mirror1.conf Mirror: Kuwait Qualitynet
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Kuwait Qualitynet
+
+TEXT HELP
+ You have selected Kuwait Qualitynet residing in
+ Kuwait within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.qualitynet.net/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.qualitynet.net/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Mongolia Mongolian Open Source Initiative NGO
+
+TEXT HELP
+ You have selected Mongolia Mongolian Open Source Initiative NGO residing in
+ Mongolia within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://releases.ubuntu.mnosi.org//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://releases.ubuntu.mnosi.org//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Mongolia ==--
+MENU LABEL ^Mongolia
+
+TEXT HELP
+ Select closest mirror from Mongolia
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/mongolia/mirror1.conf Mirror: Mongolia Mongolian Open Source Initiative NGO
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Russian Federation COMSTAR-Direct
+
+TEXT HELP
+ You have selected Russian Federation COMSTAR-Direct residing in
+ Russian_federation within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.mtu.ru/pub/ubuntu/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.mtu.ru/pub/ubuntu/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Russian Federation Yandex
+
+TEXT HELP
+ You have selected Russian Federation Yandex residing in
+ Russian_federation within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.yandex.ru/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://mirror.yandex.ru/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Russian Federation Novosibirsk State University
+
+TEXT HELP
+ You have selected Russian Federation Novosibirsk State University residing in
+ Russian_federation within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://linux.nsu.ru/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://linux.nsu.ru/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Russian Federation Ftp.chg.ru
+
+TEXT HELP
+ You have selected Russian Federation Ftp.chg.ru residing in
+ Russian_federation within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.chg.ru/pub/Linux/ubuntu/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ftp.chg.ru/pub/Linux/ubuntu/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Russian_federation ==--
+MENU LABEL ^Russian_federation
+
+TEXT HELP
+ Select closest mirror from Russian_federation
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/russian_federation/mirror1.conf Mirror: Russian Federation COMSTAR-Direct
+menu include manual/asia/russian_federation/mirror2.conf Mirror: Russian Federation Yandex
+menu include manual/asia/russian_federation/mirror3.conf Mirror: Russian Federation Novosibirsk State University
+menu include manual/asia/russian_federation/mirror4.conf Mirror: Russian Federation Ftp.chg.ru
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Saudi Arabia KACST/ISU
+
+TEXT HELP
+ You have selected Saudi Arabia KACST/ISU residing in
+ Saudi_arabia within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.mirrors.isu.net.sa/releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ubuntu.mirrors.isu.net.sa/releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Saudi_arabia ==--
+MENU LABEL ^Saudi_arabia
+
+TEXT HELP
+ Select closest mirror from Saudi_arabia
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/saudi_arabia/mirror1.conf Mirror: Saudi Arabia KACST/ISU
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Singapore Nanyang Technological University Open Source Society
+
+TEXT HELP
+ You have selected Singapore Nanyang Technological University Open Source Society residing in
+ Singapore within Asia
+ Now, select which version you want to boot.
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+label 910desktopi386-iso
+ MENU LABEL Ubuntu 9.10 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.10 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9.10/vmlinuz
+ append initrd=U9.10/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ntuoss1.uni.cx/ubuntu-releases//9.10/ubuntu-9.10-desktop-i386.iso
+ IPAPPEND 3
+
+label 904desktopi386-iso
+ MENU LABEL Ubuntu 9.04 Desktop i386 - iso
+ TEXT HELP
+ Boot ubuntu 9.04 Desktop
+ It uses http for booting
+ ENDTEXT
+ kernel U9/vmlinuz
+ append initrd=U9/initrd.gz file=/cdrom/preseed/ubuntu.seed boot=casper netboot=http httpfs=http://ntuoss1.uni.cx/ubuntu-releases//9.04/ubuntu-9.04-desktop-i386.iso
+ IPAPPEND 3
+
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : Select closest mirror from your Singapore ==--
+MENU LABEL ^Singapore
+
+TEXT HELP
+ Select closest mirror from Singapore
+ENDTEXT
+
+label uplvl
+ MENU LABEL Return
+ MENU EXIT
+
+label spacer
+ MENU LABEL
+
+menu include manual/asia/singapore/mirror1.conf Mirror: Singapore Nanyang Technological University Open Source Society
--- /dev/null
+MENU INCLUDE bko-gui.conf
+PROMPT 0
+MENU TITLE --== Manual Ubuntu boot : OS version you want to boot ==--
+MENU LABEL ^Sri Lanka SchoolNet - Sri Lanka under MInistry of Education
+
+TEXT HELP
+ You have selected Sri Lanka SchoolNet - Sri Lanka under MInistry of Education residing in
+