summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bays <rbays@cartagena.vyatta.com>2008-09-03 18:19:22 -0400
committerRobert Bays <rbays@cartagena.vyatta.com>2008-09-03 18:19:22 -0400
commit11eca774916110faaf375470c9a4d73c498d8cae (patch)
treec2b800d5b6fdf3a0e91c891a8a23f293b812b7bb
parent14dec9b9541260789e42423ff33b2347e0b39481 (diff)
downloadvyatta-cfg-quagga-11eca774916110faaf375470c9a4d73c498d8cae.tar.gz
vyatta-cfg-quagga-11eca774916110faaf375470c9a4d73c498d8cae.zip
add functioanlity for binary images to install system
-rwxr-xr-xscripts/grub-setup68
-rwxr-xr-xscripts/install-system175
2 files changed, 168 insertions, 75 deletions
diff --git a/scripts/grub-setup b/scripts/grub-setup
index e03020b4..cfa9fecc 100755
--- a/scripts/grub-setup
+++ b/scripts/grub-setup
@@ -26,6 +26,15 @@
#
#
+UNION="false"
+while getopts u c
+do
+ case $c in
+ u) UNION=true;;
+ esac
+done
+shift `expr $OPTIND - 1`
+
ROOT_PARTITION="$1"
GRUB_OPTIONS="$2"
ROOTFSDIR="$3"
@@ -62,11 +71,11 @@ serial_console="console=tty0 console=ttyS0,9600"
vga_logo="vga=785"
# get list of kernels, except Xen
- kernel_versions=$(ls /boot/vmlinuz-* 2> /dev/null | grep -v xen | sed 's:/boot/vmlinuz::g' | sort -r)
+ kernel_versions=$(ls $ROOTFSDIR/boot/vmlinuz-* 2> /dev/null | grep -v xen | awk -F/ '{ print $5 }' | sed 's/vmlinuz//g' | sort -r)
# get xen kernel info
- xen_kernel_version=$(ls /boot/vmlinuz*xen 2> /dev/null | sed 's:/boot/vmlinuz::g' | sort -r)
- xen_version=$(ls /boot/ | grep xen- | sort -r)
+ xen_kernel_version=$(ls $ROOTFSDIR/boot/vmlinuz*xen 2> /dev/null | awk -F/ '{ print $5 }' | sed 's/vmlinuz//g' | sort -r)
+ xen_version=$(ls $ROOTFSDIR/boot/ | awk -F/ '{ print $5 }' | grep xen- | sort -r)
# Figure out whether we are running on the serial or KVM console:
if [ "`tty`" == "/dev/ttyS0" ]; then
@@ -77,21 +86,20 @@ vga_logo="vga=785"
default_console=0
fi
- # Read UUID off of filesystem and use it to tell GRUB where to mount drive
- # This allows device to move around and grub will still find it
- uuid=$(dumpe2fs -h /dev/${ROOT_PARTITION} 2>/dev/null | awk '/^Filesystem UUID/ {print $3}')
- if [ -z "$uuid" ]
- then
+ if eval "$UNION"; then
+ GRUB_OPTIONS="boot=live live-media-path=/vyatta-live module=vc4 persistent noautologin nonetworking nouser hostname=vyatta"
+ else
+ # Read UUID off of filesystem and use it to tell GRUB where to mount drive
+ # This allows device to move around and grub will still find it
+ uuid=$(dumpe2fs -h /dev/${ROOT_PARTITION} 2>/dev/null | awk '/^Filesystem UUID/ {print $3}')
+ if [ -z "$uuid" ]
+ then
# TODO: use /proc/mount if dumpe2fs fails
- echo "Unable to read filesystem UUID. Exiting."
- exit 1
- else
- if [ "$GRUB_OPTIONS" ]
- then
+ echo "Unable to read filesystem UUID. Exiting."
+ exit 1
+ else
GRUB_OPTIONS="$GRUB_OPTIONS root=UUID=$uuid ro"
- else
- GRUB_OPTIONS="root=UUID=$uuid ro"
- fi
+ fi
fi
(
@@ -123,7 +131,20 @@ vga_logo="vga=785"
echo "fi"
echo ""
- if [ -f "/boot/vmlinuz" ]; then
+ # create xen kernels if they exist
+ if [ -n "$xen_kernel_version" ]; then
+ for xversion in $xen_kernel_version; do
+ echo
+ echo
+ echo -e "menuentry \"Vyatta Xen linux$xversion dom0\" {"
+ echo -e "\tmultiboot /boot/$xen_version "
+ echo -e "\tmodule /boot/vmlinuz$xversion $GRUB_OPTIONS $vga_logo $vty_console"
+ echo -e "\tmodule /boot/initrd.img$xversion"
+ echo -e "}"
+ done
+ fi
+
+ if [ -f "$ROOTFSDIR/boot/vmlinuz" ]; then
# Set first system boot option. Make KVM the default console in this one.
echo -e "menuentry \"Vyatta OFR (KVM console)\" {"
echo -e "\tlinux /boot/vmlinuz $GRUB_OPTIONS $vga_logo $vty_console"
@@ -139,19 +160,6 @@ vga_logo="vga=785"
echo -e "}"
fi
- # create xen kernels if they exist
- if [ -n "$xen_kernel_version" ]; then
- for xversion in $xen_kernel_version; do
- echo
- echo
- echo -e "menuentry \"Vyatta Xen linux$xversion dom0\" {"
- echo -e "\tmultiboot /boot/$xen_version "
- echo -e "\tmodule /boot/vmlinuz$xversion $GRUB_OPTIONS $vga_logo $vty_console"
- echo -e "\tmodule /boot/initrd.img$xversion"
- echo -e "}"
- done
- fi
-
# create other kernels if they exist
if [ -n "$kernel_versions" ]; then
for kversion in $kernel_versions; do
diff --git a/scripts/install-system b/scripts/install-system
index 724ced9d..e7364f2b 100755
--- a/scripts/install-system
+++ b/scripts/install-system
@@ -30,6 +30,7 @@
if [ -e /etc/default/vyatta ] ; then
. /etc/default/vyatta
fi
+
: ${vyatta_prefix:=/opt/vyatta}
: ${vyatta_exec_prefix:=$vyatta_prefix}
: ${vyatta_bindir:=${vyatta_exec_prefix}/bin}
@@ -40,6 +41,9 @@ ofrconfdir=${vyatta_sysconfdir}/config
fdconfdir=/media/floppy/config
rootfsdir=/mnt/rootfs
+# By default this is not a union install
+UNION=false
+
# install log file name
INSTALL_LOG="install.log"
# root partition minimum size in MB
@@ -433,6 +437,7 @@ select_drive () {
select_partition () {
minsize=$1
text=$2
+ exclude=$3
echo -n "Looking for appropriate partitions: "
progress_indicator start
@@ -443,9 +448,20 @@ select_partition () {
# list only the partitions in /proc/partitions.
parts=$(cat /proc/partitions | awk '{ if ($4!="name") { print $4 " "} }' | egrep "[0-9]" | egrep -v "loop" | tr -d '\n')
+ # remove any partitions we have already previously used
+ if [ -n "$exclude" ]; then
+ for part in $parts;
+ do
+ temp=$(echo $part | egrep -v $exclude)
+ parts_temp="$parts_temp $temp"
+ done
+ parts=$parts_temp
+ fi
+
# Get the partition sizes for display
# only show linux partitions that have sizes, i.e. remove loops
display=''
+ myparts=''
for part in $parts
do
if [ ${part:0:2} = "md" ]; then
@@ -652,49 +668,57 @@ install_root_filesystem () {
exit 1
fi
- echo -n "Copying system image files to /dev/$ROOT_PARTITION: "
- progress_indicator start
- # Mount the squashfs for copying
- output=$(mkdir -p /mnt/squashfs)
- output=$(mount /live/image/live/filesystem.squashfs /mnt/squashfs -t squashfs -o loop)
- status=$?
+ if ! eval "$UNION" ; then
+ echo -n "Copying system image files to /dev/$ROOT_PARTITION: "
+ progress_indicator start
+ # Mount the squashfs for copying
+ output=$(mkdir -p /mnt/squashfs)
+ output=$(mount /live/image/live/filesystem.squashfs /mnt/squashfs -t squashfs -o loop)
+ status=$?
- if [ "$status" != 0 ]; then
- echo -e "Error trying to mount the squashfs.\nPlease see install log for more details.\nExiting..."
- echo -e "Error trying to mount the squashfs.\nmount /live/image/live/filesystem.squashfs /mnt/squashfs -t squashfs -o loop\n$output" >> $INSTALL_LOG
- exit 1
- fi
+ if [ "$status" != 0 ]; then
+ echo -e "Error trying to mount the squashfs.\nPlease see install log for more details.\nExiting..."
+ echo -e "Error trying to mount the squashfs.\nmount /live/image/live/filesystem.squashfs /mnt/squashfs -t squashfs -o loop\n$output" >> $INSTALL_LOG
+ exit 1
+ fi
- output=$(cp -pR /mnt/squashfs/* $rootfsdir/)
- status=$?
+ output=$(cp -pR /mnt/squashfs/* $rootfsdir/)
+ status=$?
- if [ "$status" != 0 ]; then
- echo -e "Error trying to copy the rootfs.\nPlease see install log for more details.\nExiting.
-.."
- echo -e "Error trying to copy the rootfs.\ncp -pR /mnt/squashfs/* $rootfsdir/\n$output" >> $INSTALL_LOG
- exit 1
- fi
+ if [ "$status" != 0 ]; then
+ echo -e "Error trying to copy the rootfs.\nPlease see install log for more details.\nExiting..."
+ echo -e "Error trying to copy the rootfs.\ncp -pR /mnt/squashfs/* $rootfsdir/\n$output" >> $INSTALL_LOG
+ exit 1
+ fi
- # unmount the squashfs. No big deal if it fails.
- output=$(umount /mnt/squashfs)
+ # unmount the squashfs. No big deal if it fails.
+ output=$(umount /mnt/squashfs)
- # create the fstab
- local rootdev="/dev/$ROOT_PARTITION";
- uuid=$(dumpe2fs -h $rootdev 2>/dev/null | awk '/^Filesystem UUID/ {print $3}')
- if [ -z "$uuid" ]
- then
- echo "Unable to read filesystem UUID. Exiting."
- exit 1
- else
- echo -e "UUID=$uuid\t/\text3\tdefaults\t0 1" >> $rootfsdir/etc/fstab
- fi
+ # create the fstab
+ local rootdev="/dev/$ROOT_PARTITION";
+ uuid=$(dumpe2fs -h $rootdev 2>/dev/null | awk '/^Filesystem UUID/ {print $3}')
+ if [ -z "$uuid" ]
+ then
+ echo "Unable to read filesystem UUID. Exiting."
+ exit 1
+ else
+ echo -e "UUID=$uuid\t/\text3\tdefaults\t0 1" >> $rootfsdir/etc/fstab
+ fi
- #setup the hostname file
- cp /etc/hostname $rootfsdir/etc/
- cp /etc/hosts $rootfsdir/etc/
+ #setup the hostname file
+ cp /etc/hostname $rootfsdir/etc/
+ cp /etc/hosts $rootfsdir/etc/
- progress_indicator stop
- echo "OK"
+ progress_indicator stop
+ echo "OK"
+ else
+ mkdir -p $rootfsdir/vyatta-live/ $rootfsdir/boot
+ echo Copying squashfs image...
+ cp /live/image/live/filesystem.squashfs $rootfsdir/vyatta-live/vc4.squashfs
+ echo Copying kernel and initrd images...
+ cp -ar /boot/initrd.img-* $rootfsdir/boot/
+ cp -ar /boot/vmlinuz-* $rootfsdir/boot
+ fi
}
# copy the configuration to the config partition
@@ -821,7 +845,10 @@ install_grub () {
grub_options="ide=nodma"
fi
- if /opt/vyatta/sbin/grub-setup "$ROOT_PARTITION" "$grub_options" /mnt/rootfs >>$INSTALL_LOG
+ if eval "$UNION"; then
+ grub_args="-u"
+ fi
+ if /opt/vyatta/sbin/grub-setup $grub_args "$ROOT_PARTITION" "$grub_options" /mnt/rootfs $UNION >>$INSTALL_LOG
then
echo "OK"
else
@@ -841,7 +868,7 @@ setup_method_manual() {
echo -e "\n\n"
# if this is parted, let the user create the partitions
- if [ "$method" == "parted" ] || [ "$method" == "p" ]; then
+ if [ "$INSTALL_METHOD" == "parted" ] || [ "$INSTALL_METHOD" == "p" ]; then
while [ -z "$INSTALL_DRIVE" ]
do
# TODO: right now we only run parted on a single drive
@@ -960,6 +987,60 @@ setup_method_auto() {
create_partitions "$INSTALL_DRIVE" "$ROOT_PARTITION_SIZE" 0 "yes"
}
+# walk the user through a union setup
+# sets globals INSTALL_DRIVE, ROOT_PARTITION, CONFIG_PARTITION
+setup_method_union() {
+ UNION=true
+
+ echo "A union install requires an image partition and a root partition."
+ echo "The image partition must be a minimum of 250mbs. To accomodate"
+ echo "more than one image, the partition should be larger. Each image"
+ echo "is roughly 200mbs. The root partition should be a minimum of"
+ echo "50mbs for log files. If you plan on adding any other software"
+ echo "or upgrading it, the root partition should be large enough to"
+ echo "accomodate those packages"
+ echo
+
+ # Ask for the root partition and make sure it's valid
+ while [ -z "$ROOT_PARTITION" ]
+ do
+ select_partition 50 "Which partition should I install the writable root on?"
+ # Note that PARTITION is defined in select partition
+ ROOT_PARTITION=$PARTITION
+ unmount "$ROOT_PARTITION"
+ vd=$(grep $ROOT_PARTITION /proc/partitions | awk '{ print $4 }')
+
+ if [ -z "$vd" ]; then
+ echo
+ echo "$ROOT_PARTITION is an invalid partition. Please try again."
+ ROOT_PARTITION=""
+ fi
+ done
+
+ # Ask for the union partition and make sure it's valid
+ while [ -z "$UNION_PARTITION" ]
+ do
+ select_partition 250 "Which partition should I install the binary images on?" "$ROOT_PARTITION"
+ # Note that PARTITION is defined in select partition
+ UNION_PARTITION=$PARTITION
+ unmount "$UNION_PARTITION"
+ vd=$(grep $UNION_PARTITION /proc/partitions | awk '{ print $4 }')
+
+ if [ -z "$vd" ]; then
+ echo
+ echo "$UNION_PARTITION is an invalid partition. Please try again."
+ UNION_PARTITION=""
+ fi
+ done
+
+ echo Creating filesystems on $ROOT_PARTITION and $UNION_PARTITION
+ make_filesystem $ROOT_PARTITION
+ make_filesystem $UNION_PARTITION
+
+ echo Labeling $UNION_PARTITION
+ e2label /dev/$UNION_PARTITION live-rw
+}
+
unmount () {
# grab the list of mounted drives
# make sure to reverse sort so as to unmount up the tree
@@ -1082,7 +1163,7 @@ if [ -z "$INSTALL_METHOD" ]; then
while [ -z $INSTALL_METHOD ]
do
echo -n "Partition (Auto/Parted/Skip) [Auto]: "
- INSTALL_METHOD=$(get_response "Auto" "Auto Parted Skip A P S")
+ INSTALL_METHOD=$(get_response "Auto" "Auto Parted Skip Union A P S U")
done
echo
@@ -1090,12 +1171,14 @@ fi
# TODO: Note installs assume an LBA BIOS. So no boot partition currently.
# also note that we are not creating a swap partition right now.
-if [ "$INSTALL_METHOD" == "parted" ] || [ "$method" == "p" ]; then
+if [ "$INSTALL_METHOD" == "parted" ] || [ "$INSTALL_METHOD" == "p" ]; then
setup_method_manual "parted"
-elif [ "$INSTALL_METHOD" == "skip" ] || [ "$method" == "s" ]; then
+elif [ "$INSTALL_METHOD" == "skip" ] || [ "$INSTALL_METHOD" == "s" ]; then
setup_method_manual "skip"
-elif [ "$INSTALL_METHOD" == "auto" ] || [ "$method" == "a" ]; then
+elif [ "$INSTALL_METHOD" == "auto" ] || [ "$INSTALL_METHOD" == "a" ]; then
setup_method_auto
+elif [ "$INSTALL_METHOD" == "union" ] || [ "$INSTALL_METHOD" == "u" ]; then
+ setup_method_union
elif [ "$INSTALL_METHOD" == "vyatta" ]; then
echo "Automated install..."
echo "unmounting $INSTALL_DRIVE"
@@ -1124,9 +1207,11 @@ setup_xen_partition_images
# Install grub
install_grub
-# Fix up PAM configuration for login so that invalid users are prompted
-# for password
-sed -i 's/requisite[ \t][ \t]*pam_securetty.so/required pam_securetty.so/' $rootfsdir/etc/pam.d/login
+if ! eval "$UNION"; then
+ # Fix up PAM configuration for login so that invalid users are prompted
+ # for password
+ sed -i 's/requisite[ \t][ \t]*pam_securetty.so/required pam_securetty.so/' $rootfsdir/etc/pam.d/login
+fi
cp $INSTALL_LOG $rootfsdir/install.log