add new option to mount cow device on nfs volume

At the moment this only works with the root volume
on nfs as well. If we add a switch to configure the
network early in the boot process then this option
could be made available for other root mediums. This
option works reliably on the latest kernel 2.6.23.1
On earlier kernels I experienced frequent oopses.
This commit is contained in:
Jesse Hathaway 2007-10-30 14:17:16 -04:00 committed by Daniel Baumann
parent beebfa63ae
commit bb08fc8d1e
8 changed files with 138 additions and 43 deletions

View File

@ -540,24 +540,27 @@ Set_defaults ()
LH_MEMTEST="${LH_MEMTEST:-memtest86+}" LH_MEMTEST="${LH_MEMTEST:-memtest86+}"
# Setting netboot filesystem # Setting netboot filesystem
LH_NET_FILESYSTEM="${LH_NET_FILESYSTEM:-nfs}" LH_NET_ROOT_FILESYSTEM="${LH_NET_ROOT_FILESYSTEM:-nfs}"
# Setting netboot server path # Setting netboot server path
if [ -z "${LH_NET_PATH}" ] if [ -z "${LH_NET_ROOT_PATH}" ]
then then
case "${LH_MODE}" in case "${LH_MODE}" in
debian) debian)
LH_NET_PATH="/srv/debian-live" LH_NET_ROOT_PATH="/srv/debian-live"
;; ;;
debian-edu) debian-edu)
LH_NET_PATH="/srv/debian-edu-live" LH_NET_ROOT_PATH="/srv/debian-edu-live"
;; ;;
esac esac
fi fi
# Setting netboot server address # Setting netboot server address
LH_NET_SERVER="${LH_NET_SERVER:-192.168.1.1}" LH_NET_ROOT_SERVER="${LH_NET_ROOT_SERVER:-192.168.1.1}"
# Setting net cow filesystem
LH_NET_COW_FILESYSTEM="${LH_NET_COW_FILESYSTEM:-nfs}"
# Setting syslinux configuration file # Setting syslinux configuration file
# LH_SYSLINUX_CFG # LH_SYSLINUX_CFG

View File

@ -178,6 +178,12 @@ then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} union=${LH_UNION_FILESYSTEM}" LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} union=${LH_UNION_FILESYSTEM}"
fi fi
if [ -n "${LH_NET_COW_PATH}" ]
then
Echo_error "Net cow not yet supported on grub"
exit 1
fi
if [ "${LH_EXPOSED_ROOT}" != "disabled" ] if [ "${LH_EXPOSED_ROOT}" != "disabled" ]
then then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} exposedroot" LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} exposedroot"

View File

@ -59,21 +59,21 @@ then
fi fi
# Creating image file # Creating image file
if [ "$(basename ${LH_NET_PATH})" = "chroot" ] if [ "$(basename ${LH_NET_ROOT_PATH})" = "chroot" ]
then then
mv chroot chroot.tmp mv chroot chroot.tmp
fi fi
mv binary "$(basename ${LH_NET_PATH})" mv binary "$(basename ${LH_NET_ROOT_PATH})"
cd .. cd ..
tar cfz binary-net.tar.gz "$(basename ${OLDPWD})/$(basename ${LH_NET_PATH})" "$(basename ${OLDPWD})/tftpboot" tar cfz binary-net.tar.gz "$(basename ${OLDPWD})/$(basename ${LH_NET_ROOT_PATH})" "$(basename ${OLDPWD})/tftpboot"
mv binary-net.tar.gz "${OLDPWD}" mv binary-net.tar.gz "${OLDPWD}"
cd "${OLDPWD}" cd "${OLDPWD}"
mv "$(basename ${LH_NET_PATH})" binary mv "$(basename ${LH_NET_ROOT_PATH})" binary
if [ "$(basename ${LH_NET_PATH})" = "chroot" ] if [ "$(basename ${LH_NET_ROOT_PATH})" = "chroot" ]
then then
mv chroot.tmp chroot mv chroot.tmp chroot
fi fi

View File

@ -411,13 +411,13 @@ fi
if [ "${LH_BINARY_IMAGES}" = "net" ] if [ "${LH_BINARY_IMAGES}" = "net" ]
then then
case "${LH_NET_FILESYSTEM}" in case "${LH_NET_ROOT_FILESYSTEM}" in
nfs) nfs)
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} netboot=nfs nfsroot=${LH_NET_SERVER}:${LH_NET_PATH}" LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} netboot=nfs nfsroot=${LH_NET_ROOT_SERVER}:${LH_NET_ROOT_PATH}"
;; ;;
cifs) cifs)
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} netboot=cifs nfsroot=//${LH_NET_SERVER}${LH_NET_PATH}" LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} netboot=cifs nfsroot=//${LH_NET_ROOT_SERVER}${LH_NET_ROOT_PATH}"
;; ;;
*) *)
@ -426,12 +426,29 @@ then
;; ;;
esac esac
if [ -n "${LH_NET_MOUNTOPTIONS}" ] if [ -n "${LH_NET_ROOT_MOUNTOPTIONS}" ]
then then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} nfsopts=${LH_NET_MOUNTOPTIONS}" LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} nfsopts=${LH_NET_ROOT_MOUNTOPTIONS}"
fi fi
fi fi
if [ -n "${LH_NET_COW_PATH}" ]
then
case "${LH_NET_COW_FILESYSTEM}" in
nfs)
if [ -n "${LH_NET_COW_MOUNTOPTIONS}" ]
then
LH_NET_COW_MOUNTOPTIONS=",${LH_NET_COW_MOUNTOPTIONS}"
fi
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} nfscow=${LH_NET_COW_SERVER}:${LH_NET_COW_PATH}${LH_NET_COW_MOUNTOPTIONS}"
;;
*)
Echo_error "Unsupported net filesystem"
exit 1
;;
esac
fi
LH_BOOTAPPEND_LIVE="$(echo ${LH_BOOTAPPEND_LIVE} | sed -e 's/ //')" LH_BOOTAPPEND_LIVE="$(echo ${LH_BOOTAPPEND_LIVE} | sed -e 's/ //')"
# Parameters are listed at: linux/Documentation/kernel-parameters.txt # Parameters are listed at: linux/Documentation/kernel-parameters.txt

View File

@ -186,6 +186,12 @@ then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} union=${LH_UNION_FILESYSTEM}" LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} union=${LH_UNION_FILESYSTEM}"
fi fi
if [ -n "${LH_NET_COW_PATH}" ]
then
Echo_error "Net cow not yet supported on yaboot"
exit 1
fi
if [ "${LH_EXPOSED_ROOT}" != "disabled" ] if [ "${LH_EXPOSED_ROOT}" != "disabled" ]
then then
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} exposedroot" LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} exposedroot"

View File

@ -50,6 +50,10 @@ Create_lockfile .lock
# Removing udev mac caching rule # Removing udev mac caching rule
Chroot "rm -f /etc/udev/rules.d/z25_persistent-net.rules" Chroot "rm -f /etc/udev/rules.d/z25_persistent-net.rules"
# Blanking out fstab, so the live-initramfs will know to populate it
Chroot "rm -f /etc/fstab"
Chroot "touch /etc/fstab"
case "${LH_BINARY_IMAGES}" in case "${LH_BINARY_IMAGES}" in
net) net)
if [ ! -f chroot/usr/bin/smbmount ] if [ ! -f chroot/usr/bin/smbmount ]

View File

@ -76,10 +76,14 @@ USAGE="${PROGRAM} [--apt apt|aptitude]\n\
\t [--mirror-bootstrap-security URL]\n\ \t [--mirror-bootstrap-security URL]\n\
\t [--mirror-bootstrap URL]\n\ \t [--mirror-bootstrap URL]\n\
\t [--mode debian|debian-edu]\n\ \t [--mode debian|debian-edu]\n\
\t [--net-filesystem nfs|cfs]\n\ \t [--net-root-filesystem nfs|cfs]\n\
\t [--net-mountoptions OPTIONS]\n\ \t [--net-root-mountoptions OPTIONS]\n\
\t [--net-path PATH]\n\ \t [--net-root-path PATH]\n\
\t [--net-server IP|HOSTNAME]\n\ \t [--net-root-server IP|HOSTNAME]\n\
\t [--net-cow-filesystem nfs|cfs]\n\
\t [--net-cow-mountoptions OPTIONS]\n\
\t [--net-cow-path PATH]\n\
\t [--net-cow-server IP|HOSTNAME]\n\
\t [-p|--packages-lists FILE]\n\ \t [-p|--packages-lists FILE]\n\
\t [--packages PACKAGE|\"PACKAGES\"]\n\ \t [--packages PACKAGE|\"PACKAGES\"]\n\
\t [--quiet]\n\ \t [--quiet]\n\
@ -102,7 +106,7 @@ USAGE="${PROGRAM} [--apt apt|aptitude]\n\
Local_arguments () Local_arguments ()
{ {
ARGUMENTS="$(getopt --longoptions apt:,apt-ftp-proxy:,apt-http-proxy:,apt-pdiffs:,apt-pipeline:,apt-recommends:,apt-secure:,bootstrap:,cache:,cache-indices:,cache-packages:,cache-stages:,debconf-frontend:,debconf-nowarnings:,debconf-priority:,genisoimage:,initramfs:,losetup:,mode:,root-command:,tasksel:,includes:,templates:,architecture:,bootstrap-config:,bootstrap-flavour:,bootstrap-keyring:,distribution:,mirror-bootstrap:,mirror-bootstrap-security:,mirror-binary:,mirror-binary-security:,sections:,chroot-filesystem:,union-filesystem:,exposed-root:,hooks:,interactive:,keyring-packages:,language:,linux-flavours:,linux-packages:,packages:,packages-lists:,tasks:,security:,symlinks:,sysvinit:,binary-images:,binary-indices:,bootappend-install:,bootappend-live:,bootloader:,chroot-build:,debian-installer:,debian-installer-daily:,encryption:,grub-splash:,hostname:,iso-application:,iso-preparer:,iso-publisher:,iso-volume:,memtest:,net-filesystem:,net-mountoptions:,net-path:,net-server:,syslinux-splash:,syslinux-timeout:,username:,source:,source-images:,breakpoints,conffile:,debug,force,help,quiet,usage,verbose,version --name=${PROGRAM} --options a:f:d:m:l:k:p:b:e:s:c:huv --shell sh -- "${@}")" ARGUMENTS="$(getopt --longoptions apt:,apt-ftp-proxy:,apt-http-proxy:,apt-pdiffs:,apt-pipeline:,apt-recommends:,apt-secure:,bootstrap:,cache:,cache-indices:,cache-packages:,cache-stages:,debconf-frontend:,debconf-nowarnings:,debconf-priority:,genisoimage:,initramfs:,losetup:,mode:,root-command:,tasksel:,includes:,templates:,architecture:,bootstrap-config:,bootstrap-flavour:,bootstrap-keyring:,distribution:,mirror-bootstrap:,mirror-bootstrap-security:,mirror-binary:,mirror-binary-security:,sections:,chroot-filesystem:,union-filesystem:,exposed-root:,hooks:,interactive:,keyring-packages:,language:,linux-flavours:,linux-packages:,packages:,packages-lists:,tasks:,security:,symlinks:,sysvinit:,binary-images:,binary-indices:,bootappend-install:,bootappend-live:,bootloader:,chroot-build:,debian-installer:,debian-installer-daily:,encryption:,grub-splash:,hostname:,iso-application:,iso-preparer:,iso-publisher:,iso-volume:,memtest:,net-root-filesystem:,net-root-mountoptions:,net-root-path:,net-root-server:,net-cow-filesystem:,net-cow-mountoptions:,net-cow-path:,net-cow-server:,syslinux-splash:,syslinux-timeout:,username:,source:,source-images:,breakpoints,conffile:,debug,force,help,quiet,usage,verbose,version --name=${PROGRAM} --options a:f:d:m:l:k:p:b:e:s:c:huv --shell sh -- "${@}")"
if [ "${?}" != "0" ] if [ "${?}" != "0" ]
then then
@ -464,23 +468,43 @@ Local_arguments ()
shift 2 shift 2
;; ;;
--net-filesystem) --net-root-filesystem)
LH_NET_FILESYSTEM="${2}" LH_NET_ROOT_FILESYSTEM="${2}"
shift 2 shift 2
;; ;;
--net-mountoptions) --net-root-mountoptions)
LH_NET_MOUNTOPTIONS="${2}" LH_NET_ROOT_MOUNTOPTIONS="${2}"
shift 2 shift 2
;; ;;
--net-path) --net-root-path)
LH_NET_PATH="${2}" LH_NET_ROOT_PATH="${2}"
shift 2 shift 2
;; ;;
--net-server) --net-root-server)
LH_NET_SERVER="${2}" LH_NET_ROOT_SERVER="${2}"
shift 2
;;
--net-cow-filesystem)
LH_NET_COW_FILESYSTEM="${2}"
shift 2
;;
--net-cow-mountoptions)
LH_NET_COW_MOUNTOPTIONS="${2}"
shift 2
;;
--net-cow-path)
LH_NET_COW_PATH="${2}"
shift 2
;;
--net-cow-server)
LH_NET_COW_SERVER="${2}"
shift 2 shift 2
;; ;;
@ -911,21 +935,37 @@ LH_ISO_VOLUME="${LH_ISO_VOLUME}"
# (Default: ${LH_MEMTEST}) # (Default: ${LH_MEMTEST})
LH_MEMTEST="${LH_MEMTEST}" LH_MEMTEST="${LH_MEMTEST}"
# \$LH_NET_FILESYSTEM: set netboot filesystem # \$LH_NET_ROOT_FILESYSTEM: set netboot filesystem
# (Default: ${LH_NET_FILESYSTEM}) # (Default: ${LH_NET_ROOT_FILESYSTEM})
LH_NET_FILESYSTEM="${LH_NET_FILESYSTEM}" LH_NET_ROOT_FILESYSTEM="${LH_NET_ROOT_FILESYSTEM}"
# \$LH_NET_MOUNTOPTIONS: set nfsopts # \$LH_NET_ROOT_MOUNTOPTIONS: set nfsopts
# (Default: empty) # (Default: empty)
LH_NET_MOUNTOPTIONS="${LH_NET_MOUNTOPTIONS}" LH_NET_ROOT_MOUNTOPTIONS="${LH_NET_ROOT_MOUNTOPTIONS}"
# \$LH_NET_PATH: set netboot server directory # \$LH_NET_ROOT_PATH: set netboot server directory
# (Default: ${LH_NET_PATH}) # (Default: ${LH_NET_ROOT_PATH})
LH_NET_PATH="${LH_NET_PATH}" LH_NET_ROOT_PATH="${LH_NET_ROOT_PATH}"
# \$LH_NET_SERVER: set netboot server address # \$LH_NET_ROOT_SERVER: set netboot server address
# (Default: ${LH_NET_SERVER}) # (Default: ${LH_NET_ROOT_SERVER})
LH_NET_SERVER="${LH_NET_SERVER}" LH_NET_ROOT_SERVER="${LH_NET_ROOT_SERVER}"
# \$LH_NET_COW_FILESYSTEM: set net client cow filesystem
# (Default: ${LH_NET_COW_FILESYSTEM})
LH_NET_COW_FILESYSTEM="${LH_NET_COW_FILESYSTEM}"
# \$LH_NET_COW_MOUNTOPTIONS: set cow mount options
# (Default: empty)
LH_NET_COW_MOUNTOPTIONS="${LH_NET_COW_MOUNTOPTIONS}"
# \$LH_NET_COW_PATH: set cow directory
# (Default: ${LH_NET_COW_PATH})
LH_NET_COW_PATH="${LH_NET_COW_PATH}"
# \$LH_NET_COW_SERVER: set cow server
# (Default: ${LH_NET_COW_SERVER})
LH_NET_COW_SERVER="${LH_NET_COW_SERVER}"
# \$LH_SYSLINUX_SPLASH: set custom syslinux splash # \$LH_SYSLINUX_SPLASH: set custom syslinux splash
# (Default: empty) # (Default: empty)

View File

@ -113,13 +113,32 @@ Here is the complete list of available options for lh_config.
.IP "\fB\-\-mode\fR debian|debian\-edu" 4 .IP "\fB\-\-mode\fR debian|debian\-edu" 4
.IP "\fB\-\-net\-filesystem\fR nfs|cfs" 4 .IP "\fB\-\-net\-root\-filesystem\fR nfs|cfs" 4
.IP "\fB\-\-net\-mountoptions\fR \fIOPTION\fR|""\fIOPTIONS\fR""" 4 .IP "\fB\-\-net\-root\-mountoptions\fR \fIOPTION\fR|""\fIOPTIONS\fR""" 4
.IP "\fB\-\-net\-path\fR \fIPATH\fR" 4 .IP "\fB\-\-net\-root\-path\fR \fIPATH\fR" 4
.IP "\fB\-\-net\\-server\fR \fIIP\fR|\fIHOSTNAME\fR" 4 .IP "\fB\-\-net\-root\\-server\fR \fIIP\fR|\fIHOSTNAME\fR" 4
.IP "\fB\-\-net\-cow\-filesystem\fR nfs" 4
.IP "\fB\-\-net\-cow\-mountoptions\fR \fIOPTION\fR|""\fIOPTIONS\fR""" 4
.IP "\fB\-\-net\-cow\-path\fR \fIPATH\fR" 4
Specify path to client writable filesystem. Anywhere that
.BI "client_mac_address"
is specified in the path live-initramfs
will substitute the MAC address of the client delimited with hyphens.
.RS
.TP
EXAMPLE:
/export/hosts/client_mac_address
.br
/export/hosts/52-54-00-12-34-56
.RE
.IP "\fB\-\-net\-cow\\-server\fR \fIIP\fR|\fIHOSTNAME\fR" 4
.IP "\fB\-p|\-\-packages\-lists\fR \fIFILE\fR" 4 .IP "\fB\-p|\-\-packages\-lists\fR \fIFILE\fR" 4