# set -e
-export PATH=/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin
+export PATH="/root/usr/bin:/root/usr/sbin:/root/bin:/root/sbin:/usr/bin:/usr/sbin:/bin:/sbin"
echo "/root/lib" >> /etc/ld.so.conf
echo "/root/usr/lib" >> /etc/ld.so.conf
-mountpoint=/live_media
+mountpoint="/live/image"
+LIVE_MEDIA_PATH="live"
root_persistence="live-rw"
home_persistence="home-rw"
root_snapshot_label="live-sn"
home_snapshot_label="home-sn"
-USERNAME=user
+USERNAME="user"
USERFULLNAME="Live user"
-HOSTNAME=host
-BUILD_SYSTEM=Custom
+HOSTNAME="host"
+BUILD_SYSTEM="Custom"
-mkdir -p $mountpoint
+mkdir -p "${mountpoint}"
[ -f /etc/live.conf ] && . /etc/live.conf
export USERNAME USERFULLNAME HOSTNAME BUILD_SYSTEM
touch /live.vars
fi
-parse_cmdline ()
+Arguments ()
{
- PRESEEDS=
+ PRESEEDS=""
- # looking for live-initramfs specifics options as kernel parameters
-
- for x in $(cat /proc/cmdline)
+ for ARGUMENT in `cat /proc/cmdline`
do
- case $x in
+ case "${ARGUMENT}" in
access=*)
- ACCESS=${x#access=}
+ ACCESS="${ARGUMENT#access=}"
export ACCESS
;;
console=*)
- DEFCONSOLE="${x#*=}"
+ DEFCONSOLE="${ARGUMENT#*=}"
export DEFCONFSOLE
;;
+ debug)
+ DEBUG="Yes"
+ export DEBUG
+
+ set -x
+ ;;
+
+ fetch=*)
+ FETCH="${ARGUMENT#fetch=}"
+ export FETCH
+ ;;
+
hostname=*)
- HOSTNAME=${x#hostname=}
+ HOSTNAME="${ARGUMENT#hostname=}"
LIVECONF="changed"
export HOSTNAME LIVECONF
;;
username=*)
- USERNAME=${x#username=}
+ USERNAME="${ARGUMENT#username=}"
LIVECONF="changed"
export USERNAME LIVECONF
;;
userfullname=*)
- USERFULLNAME=${x#userfullname=}
+ USERFULLNAME="${ARGUMENT#userfullname=}"
LIVECONF="changed"
export USERFULLNAME LIVECONF
;;
- ip*)
- STATICIP=${x#ip=}
+ ip=*)
+ STATICIP="${ARGUMENT#ip=}"
if [ -z "${STATICIP}" ]
then
;;
keyb=*|kbd-chooser/method=*)
- KBD=${x#*=}
+ KBD="${ARGUMENT#*=}"
export KBD
;;
klayout=*|console-setup/layoutcode=*)
- KLAYOUT=${x#*=}
+ KLAYOUT="${ARGUMENT#*=}"
export KLAYOUT
;;
kvariant=*|console-setup/variantcode=*)
- KVARIANT=${x#*=}
+ KVARIANT="${ARGUMENT#*=}"
export KVARIANT
;;
kmodel=*|console-setup/modelcode=*)
- KMODEL=${x#*=}
+ KMODEL="${ARGUMENT#*=}"
export KMODEL
;;
koptions=*)
- KOPTIONS=${x#koptions=}
+ KOPTIONS="${ARGUMENT#koptions=}"
export KOPTIONS
;;
live-getty)
- LIVE_GETTY=1
+ LIVE_GETTY="1"
export LIVE_GETTY
;;
live-media=*|bootfrom=*)
- LIVE_MEDIA=${x#*=}
+ LIVE_MEDIA="${ARGUMENT#*=}"
export LIVE_MEDIA
;;
live-media-encryption=*|encryption=*)
- LIVE_MEDIA_ENCRYPTION=${x#*=}
+ LIVE_MEDIA_ENCRYPTION="${ARGUMENT#*=}"
export LIVE_MEDIA_ENCRYPTION
;;
live-media-offset=*)
- LIVE_MEDIA_OFFSET=${x#live-media-offset=}
+ LIVE_MEDIA_OFFSET="${ARGUMENT#live-media-offset=}"
export LIVE_MEDIA_OFFSET
;;
+ live-media-path=*)
+ LIVE_MEDIA_PATH="${ARGUMENT#live-media-path=}"
+ export LIVE_MEDIA_PATH
+ ;;
+
live-media-timeout=*)
- LIVE_MEDIA_TIMEOUT=${x#live-media-timeout=}
+ LIVE_MEDIA_TIMEOUT="${ARGUMENT#live-media-timeout=}"
export LIVE_MEDIA_TIMEOUT
;;
locale=*|debian-installer/locale=*)
- LOCALE=${x#*=}
+ LOCALE="${ARGUMENT#*=}"
export LOCALE
;;
module=*)
- MODULE=${x#module=}
+ MODULE="${ARGUMENT#module=}"
export MODULE
;;
- netboot*)
- NETBOOT=${x#netboot=}
+ netboot=*)
+ NETBOOT="${ARGUMENT#netboot=}"
export NETBOOT
;;
- nfsopts=)
- NFSOPTS=${x#nfsopts=}
+ nfsopts=*)
+ NFSOPTS="${ARGUMENT#nfsopts=}"
export NFSOPTS
;;
;;
preseed/file=*|file=*)
- LOCATION="${x#*=}"
+ LOCATION="${ARGUMENT#*=}"
export LOCATION
;;
+ url=*)
+ location="${ARGUMENT#url=}"
+
+ mount -n -o bind /sys /root/sys
+ mount -n -o bind /proc /root/proc
+ mount -n -o bind /dev /root/dev
+
+ mkdir -p /root/var/run/network
+ chroot /root ifup -a
+ chroot /root wget -P /tmp "$location"
+ chroot /root ifdown -a
+
+ umount /root/sys
+ umount /root/proc
+ umount /root/dev
+
+ LOCATION="/tmp/$(basename "$location")"
+ ;;
+
*/*=*)
- question="${x%%=*}"
- value="${x#*=}"
+ question="${ARGUMENT%%=*}"
+ value="${ARGUMENT#*=}"
PRESEEDS="${PRESEEDS}\"${question}=${value}\" "
-
export PRESEEDS
;;
export SHOWMOUNTS
;;
- timezone=*)
- TIMEZONE="${x#timezone=}"
+ timezone=*)
+ TIMEZONE="${ARGUMENT#timezone=}"
export TIMEZONE
;;
todisk=*)
- TODISK=${x#todisk=}
+ TODISK="${ARGUMENT#todisk=}"
export TODISK
;;
;;
union=*)
- UNIONTYPE="${x#union=}"
+ UNIONTYPE="${ARGUMENT#union=}"
export UNIONTYPE
;;
+ utc=*)
+ UTC="${ARGUMENT#utc=}"
+ export UTC
+ ;;
+
xdebconf)
XDEBCONF="Yes"
export XDEBCONF
;;
xvideomode=*)
- XVIDEOMODE="${x#xvideomode=}"
+ XVIDEOMODE="${ARGUMENT#xvideomode=}"
export XVIDEOMODE
;;
esac
{
DIRECTORY="${1}"
- if [ -d "${DIRECTORY}"/live ]
+ if [ -d "${DIRECTORY}"/"${LIVE_MEDIA_PATH}" ]
then
for FILESYSTEM in squashfs ext2 ext3 xfs dir
do
- if [ "`echo ${DIRECTORY}/live/*.${FILESYSTEM}`" != "${DIRECTORY}/live/*.${FILESYSTEM}" ]
+ if [ "`echo ${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM}`" != "${DIRECTORY}/${LIVE_MEDIA_PATH}/*.${FILESYSTEM}" ]
then
return 0
fi
mount_images_in_directory() {
directory="$1"
rootmnt="$2"
- if match_files_in_dir "$directory/live/*.squashfs" ||
- match_files_in_dir "$directory/live/*.ext2" ||
- match_files_in_dir "$directory/live/*.ext3" ||
- match_files_in_dir "$directory/live/*.dir"; then
- setup_unionfs "$directory/live" "$rootmnt"
+
+ 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}/*.ext3" ||
+ match_files_in_dir "$directory/${LIVE_MEDIA_PATH}/*.dir"; then
+ setup_unionfs "$directory/${LIVE_MEDIA_PATH}" "$rootmnt"
else
:
fi
return 1
fi
- # begin copying..
+ # begin copying (or uncompressing)
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 --move ${copyto} ${copyfrom}
+
+ if [ "$extension" == "tgz" ]; then
+ cd "${copyto}"
+ tar zxf "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
+ rm -f "${copyfrom}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
+ mount -r --move "${copyto}" "${rootmnt}"
+ cd "${OLDPWD}"
+ else
+ cp -a ${copyfrom}/* ${copyto} # "cp -a" from busybox also copies hidden files
+ umount ${copyfrom}
+ mount -r --move ${copyto} ${copyfrom}
+ fi
rmdir ${copyto}
return 0
}
NFSROOT=${ROOTSERVER}:${ROOTPATH}
fi
+ # source relevant ipconfig output
+ . /tmp/net-${DEVICE}.conf
+ export HOSTNAME
+
+ if [ -n "${FETCH}" ] && do_httpmount; then
+ rc=0
+ return ${rc}
+ fi
+
+ if [ "${NFSROOT#*:}" = "$NFSROOT" ] && [ "$NETBOOT" != "cifs" ]; then
+ NFSROOT=${ROOTSERVER}:${NFSROOT}
+ fi
+
[ "$quiet" != "y" ] && log_begin_msg "Trying netboot from ${NFSROOT}"
if [ "${NETBOOT}" != "nfs" ] && do_cifsmount ; then
return ${rc}
}
+do_httpmount() {
+ rc=1
+ extension=`echo "${FETCH}" | sed 's/\(.*\)\.\(.*\)/\2/'`
+ case "${extension}" in
+ squashfs|tgz|tar)
+ [ "$quiet" != "y" ] && log_begin_msg "Trying wget ${FETCH} -O ${mountpoint}/$(basename ${FETCH})"
+ mkdir -p "${mountpoint}/${LIVE_MEDIA_PATH}"
+ wget "${FETCH}" -O "${mountpoint}/${LIVE_MEDIA_PATH}/$(basename ${FETCH})"
+ [ $? -eq 0 ] && rc=0
+ [ "${extension}" == "tgz" ] && live_dest="ram"
+ ;;
+ *)
+ [ "$quiet" != "y" ] && log_begin_msg "Unrecognized archive extension for ${FETCH}"
+ esac
+ return ${rc}
+}
+
do_nfsmount() {
rc=1
modprobe "${MP_QUIET}" nfs
# 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
+ minor_kernel_version=`uname -r|cut -c 5-|sed 's/[^0-9].*//'`
+ if [ "${NETBOOT}" = "nfs" ] && [ "${minor_kernel_version}" -lt 22 ]; then
+ # go aroung a bug in nfs-unionfs locking for unionfs <= 1.4
+ roopt="nfsro"
else
roopt="ro"
fi
fi
# shows cow fs on /cow for use by live-snapshot
- mkdir -p "${rootmnt}/cow"
- mount -o bind /cow "${rootmnt}/cow"
+ mkdir -p "${rootmnt}/live/cow"
+ mount -o bind /cow "${rootmnt}/live/cow"
}
check_dev ()
exec > live.log
exec 2>&1
- parse_cmdline
+ Arguments
set_usplash_timeout
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/live-premount"
set_usplash_timeout
- if [ ! -z "${NETBOOT}" ]; then
+ if [ ! -z "${NETBOOT}" ] || [ ! -z "${FETCH}" ]; then
if do_netmount ; then
livefs_root="${mountpoint}"
else
live_dest="${TODISK}"
fi
if [ "${live_dest}" ]; then
- log_begin_msg "Copying live_media to ${live_dest}"
+ log_begin_msg "Copying live media to ${live_dest}"
copy_live_to "${livefs_root}" "${live_dest}"
log_end_msg
fi