summaryrefslogtreecommitdiffstats
path: root/install-usb.sh
diff options
context:
space:
mode:
authorMichael Neves2012-01-27 15:03:56 +0100
committerMichael Neves2012-01-27 15:03:56 +0100
commit8e8af091fd55501dcbab42836726cd25a494c077 (patch)
tree1af1be3fa81ca5196f5a7dba0e0df8218bde2cc5 /install-usb.sh
parentadded boot media type in kcl of preboot environment (diff)
downloadusb-boot-stick-8e8af091fd55501dcbab42836726cd25a494c077.tar.gz
usb-boot-stick-8e8af091fd55501dcbab42836726cd25a494c077.tar.xz
usb-boot-stick-8e8af091fd55501dcbab42836726cd25a494c077.zip
pbs-serials added
Diffstat (limited to 'install-usb.sh')
-rwxr-xr-xinstall-usb.sh129
1 files changed, 129 insertions, 0 deletions
diff --git a/install-usb.sh b/install-usb.sh
new file mode 100755
index 0000000..65838bc
--- /dev/null
+++ b/install-usb.sh
@@ -0,0 +1,129 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Copyright (c) 2011 - OpenSLX GmbH
+#
+# This program is free software distributed under the GPL version 2.
+# See http://openslx.org/COPYING
+#
+# If you have any feedback please consult http://openslx.org/feedback and
+# send your suggestions, praise, or complaints to feedback@openslx.org
+#
+# General information about OpenSLX can be found at http://openslx.org/
+# -----------------------------------------------------------------------------
+# PreBoot USB stick preparation utility
+# -----------------------------------------------------------------------------
+
+
+ROOT_DIR=$(dirname $(readlink -f $0))
+
+if [ $(whoami) != "root" ]; then
+ echo "you should be root"
+ exit 1;
+fi
+
+OUT_DEV=$1
+
+if [ -z $OUT_DEV ]; then
+ echo "[Error] No output device specified."
+ echo "Usage $0 [devicename of usb-stick] (e.g. \"sdc\" for /dev/sdc)."
+ exit 1
+fi
+
+echo "device ${OUT_DEV} will be repartitioned and formatted"
+echo -n "type 'cont' to proceed: "
+read cont
+[ "x${cont}" != "xcont" ] && exit 1
+
+for i in 1 2 3 4 5 6 7 8 9; do
+ umount /dev/${OUT_DEV}$i &> /dev/null
+done
+
+SYSLINUX=${ROOT_DIR}/contrib/syslinux/latest
+
+PATH="${ROOT_DIR}/bin/:$PATH"
+
+# create the required stuff (syslinux, kernel, initramfs)
+[ ! -f ${SYSLINUX}/Makefile ] && env.setup-syslinux.sh
+[ ! -f ${ROOT_DIR}/build/kernel-preboot-latest ] && build.kernel.sh
+#[ ! -f ${ROOT_DIR}/build/initramfs-default ] && build.initramfs.sh
+build.initramfs.sh
+
+# get the total size of the device
+DISKSIZE=$(sfdisk -s /dev/${OUT_DEV} 2>/dev/null || echo 0)
+DISKSIZE=$((${DISKSIZE}/1024))
+
+# get the size of boot stuff and calculate the left over free space on device
+KSIZE=$(ls -l ${ROOT_DIR}/build/kernel-preboot-latest|awk '{print $5}')
+ISIZE=$(ls -l ${ROOT_DIR}/build/initramfs-default|awk '{print $5}')
+IMAGESIZE=$(((${KSIZE}+${ISIZE}+6000000)/1048576))
+FREE=$((${DISKSIZE}-${IMAGESIZE}))
+
+# create bootable vfat at the end of the device if big enough, otherwise use
+# the entire device
+if [ ${FREE} -ge 50 ] ; then
+ sfdisk /dev/${OUT_DEV} -uM << EOF
+,${FREE},L,
+,,6,*
+EOF
+else
+ NO_USRHOME=true
+ sfdisk /dev/${OUT_DEV} << EOF
+,,6,*
+EOF
+fi
+
+# create bootable vfat partition with 96cylinders and a ext3 partition for the
+# rest of the stick
+#sfdisk /dev/${OUT_DEV} << EOF
+#,96,6,*
+#,,L
+#EOF
+
+sync
+
+# copy mbr to stick
+dd bs=440 count=1 conv=notrunc if=${SYSLINUX}/mbr/mbr.bin of=/dev/${OUT_DEV}
+
+# create filesystems on newly createt partitions
+if [ "x$NO_USRHOME" != "xtrue" ]; then
+ mkfs.vfat -F 16 -n openslx-stick /dev/${OUT_DEV}2
+ mkfs.ext2 -L openslx-usrhome /dev/${OUT_DEV}1
+else
+ mkfs.vfat -F 16 -n openslx-stick /dev/${OUT_DEV}1
+fi
+
+mkdir -p /media/openslx-stick /media/openslx-stick-usrhome
+
+
+if [ "x$NO_USRHOME" != "xtrue" ]; then
+ mount /dev/${OUT_DEV}2 /media/openslx-stick
+ mount /dev/${OUT_DEV}1 /media/openslx-stick-usrhome
+else
+ mount /dev/${OUT_DEV}1 /media/openslx-stick
+fi
+
+mkdir -p /media/openslx-stick/boot
+
+
+cp -v ${ROOT_DIR}/build/kernel-preboot-latest /media/openslx-stick/boot/kernel
+
+cp -v ${ROOT_DIR}/build/initramfs-default /media/openslx-stick/boot/initramfs
+
+cp -v ${SYSLINUX}/com32/menu/menu.c32 /media/openslx-stick/boot/
+cp -v ${SYSLINUX}/com32/menu/vesamenu.c32 /media/openslx-stick/boot/
+
+cp -v ${ROOT_DIR}/config/extlinux/* /media/openslx-stick/boot
+mv /media/openslx-stick/boot/extlinux.conf /media/openslx-stick/boot/syslinux.cfg
+
+sync
+umount /media/openslx-stick
+umount /media/openslx-stick-usrhome
+
+rm -rf /media/openslx-stick*
+
+if [ "x$NO_USRHOME" != "xtrue" ]; then
+ ${SYSLINUX}/linux/syslinux --install -d /boot -f /dev/${OUT_DEV}2
+else
+ ${SYSLINUX}/linux/syslinux --install -d /boot -f /dev/${OUT_DEV}1
+fi
+