summaryrefslogtreecommitdiffstats
path: root/install-usb
blob: 3ad2a62ae7e41eccbc40c97f348c8625136eee95 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/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

sync

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