From 8e8af091fd55501dcbab42836726cd25a494c077 Mon Sep 17 00:00:00 2001 From: Michael Neves Date: Fri, 27 Jan 2012 15:03:56 +0100 Subject: pbs-serials added --- install-usb.sh | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100755 install-usb.sh (limited to 'install-usb.sh') 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 + -- cgit v1.2.3-55-g7522