~asac/live-build/virtual-hdd-mtab-hack

« back to all changes in this revision

Viewing changes to helpers/lh_binary_usb-hdd

  • Committer: Daniel Baumann
  • Date: 2009-11-22 13:38:00 UTC
  • Revision ID: git-v1:a62f12110b19a52a58d7eae871012202cfa16055
Renaming categories to archive areas (Closes: #519690).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
 
 
3
# lh_binary_usb-hdd(1) - build binary usb-hdd image
 
4
# Copyright (C) 2006-2009 Daniel Baumann <daniel@debian.org>
 
5
#
 
6
# live-helper comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
 
7
# This is free software, and you are welcome to redistribute it
 
8
# under certain conditions; see COPYING for details.
 
9
 
 
10
set -e
 
11
 
 
12
# Including common functions
 
13
. "${LH_BASE:-/usr/share/live-helper}"/functions.sh
 
14
 
 
15
# Setting static variables
 
16
DESCRIPTION="$(Echo 'build binary image')"
 
17
HELP=""
 
18
USAGE="${PROGRAM} [--force]"
 
19
 
 
20
Arguments "${@}"
 
21
 
 
22
# Reading configuration files
 
23
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
 
24
Set_defaults
 
25
 
 
26
if ! In_list usb-hdd "${LH_BINARY_IMAGES}"
 
27
then
 
28
        exit 0
 
29
fi
 
30
 
 
31
Echo_message "Begin building binary usb-hdd image..."
 
32
 
 
33
# Requiring stage file
 
34
Require_stagefile .stage/config .stage/bootstrap .stage/chroot_proc
 
35
 
 
36
# Checking stage file
 
37
Check_stagefile .stage/binary_usb-hdd
 
38
 
 
39
# Checking lock file
 
40
Check_lockfile .lock
 
41
 
 
42
# Creating lock file
 
43
Create_lockfile .lock
 
44
 
 
45
# Checking depends
 
46
Check_package chroot/sbin/mkdosfs dosfstools
 
47
Check_package chroot/usr/share/doc/mtools mtools
 
48
Check_package chroot/sbin/parted parted
 
49
 
 
50
if [ "${LH_ARCHITECTURE}" = "sparc" ]
 
51
then
 
52
        case "${LH_BINARY_FILESYSTEM}" in
 
53
                ext2|ext3)
 
54
                        Check_package chroot/sbin/mkfs.ext2 e2fsprogs
 
55
                        ;;
 
56
 
 
57
                *)
 
58
                        Echo_error "Sparc only supports booting from ext2, ext3 (or ufs)"
 
59
                        exit 1
 
60
                        ;;
 
61
        esac
 
62
fi
 
63
 
 
64
case "${LH_BOOTLOADER}" in
 
65
        grub)
 
66
                Check_package chroot/usr/sbin/grub grub
 
67
                ;;
 
68
 
 
69
        syslinux)
 
70
                Check_package chroot/usr/bin/syslinux syslinux
 
71
                ;;
 
72
esac
 
73
 
 
74
# Restoring cache
 
75
Restore_cache cache/packages_binary
 
76
 
 
77
# Installing depends
 
78
Install_package
 
79
 
 
80
# Remove old binary
 
81
if [ -f binary.img ]
 
82
then
 
83
        rm -f binary.img
 
84
fi
 
85
 
 
86
# Enforce fat32 if we find individual files bigger than 2GB
 
87
if [ "${LH_BINARY_FILESYSTEM}" = "fat16" ] && [ -n "$(find binary -size +1999M)" ]
 
88
then
 
89
        Echo_warning "FAT16 doesn't support files larger than 2GB, automatically enforcing FAT32."
 
90
 
 
91
        LH_BINARY_FILESYSTEM="fat32"
 
92
        export LH_BINARY_FILESYSTEM
 
93
fi
 
94
 
 
95
# Enforce fat32 if we have images in total bigger than 2GB
 
96
if [ "${LH_BINARY_FILESYSTEM}" = "fat16" ] && [ "$(du -s binary | awk '{ print $1 }')" -gt "1900000" ]
 
97
then
 
98
        Echo_warning "FAT16 doesn't support partitions larger than 2GB, automatically enforcing FAT32"
 
99
 
 
100
        LH_BINARY_FILESYSTEM="fat32"
 
101
        export LH_BINARY_FILESYSTEM
 
102
fi
 
103
 
 
104
# Everything which comes here needs to be cleaned up,
 
105
DU_DIM="$(du -ms binary | cut -f1)"
 
106
REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LH_BINARY_FILESYSTEM})"
 
107
dd if=/dev/zero of=chroot/binary.img bs=1024k count=0 seek=${REAL_DIM}
 
108
FREELO="$(${LH_LOSETUP} -f)"
 
109
if [ ! -b chroot/${FREELO} ]
 
110
then
 
111
        MAKEDEV="true"
 
112
 
 
113
        mv chroot/dev chroot/dev.tmp
 
114
        find /dev | cpio -dmpu chroot
 
115
fi
 
116
 
 
117
echo "!!! The following error/warning messages can be ignored !!!"
 
118
Losetup $FREELO chroot/binary.img 0
 
119
 
 
120
case "${LH_ARCHITECTURE}" in
 
121
        sparc)
 
122
                PARTITION_TABLE_TYPE="sun"
 
123
                ;;
 
124
        *)
 
125
                PARTITION_TABLE_TYPE="msdos"
 
126
                ;;
 
127
esac
 
128
 
 
129
case "${LH_BINARY_FILESYSTEM}" in
 
130
        ext2|ext3)
 
131
                PARTITION_TYPE="ext2"
 
132
                ;;
 
133
 
 
134
        fat16|fat32)
 
135
                PARTITION_TYPE="${LH_BINARY_FILESYSTEM}"
 
136
                ;;
 
137
 
 
138
        *)
 
139
                Echo_error "Unsupported binary filesystem %s" "${LH_BINARY_FILESYSTEM}"
 
140
                exit 1
 
141
                ;;
 
142
esac
 
143
 
 
144
case "${LH_CHROOT_BUILD}" in
 
145
        enabled)
 
146
                Chroot chroot "parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE}" || true
 
147
                Chroot chroot "parted -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0.0 100%" || true
 
148
                Chroot chroot "parted -s ${FREELO} set 1 boot on" || true
 
149
                Chroot chroot "parted -s ${FREELO} set 1 lba off" || true
 
150
 
 
151
                if [ "${LH_BOOTLOADER}" = "syslinux" ]
 
152
                then
 
153
                        dd if=chroot/usr/lib/syslinux/mbr.bin of=${FREELO} bs=440 count=1
 
154
                fi
 
155
                ;;
 
156
 
 
157
        disabled)
 
158
                parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE} || true
 
159
                parted -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0.0 100% || true
 
160
                parted -s ${FREELO} set 1 boot on || true
 
161
                parted -s ${FREELO} set 1 lba off || true
 
162
 
 
163
                if [ "${LH_BOOTLOADER}" = "syslinux" ]
 
164
                then
 
165
                        dd if=/usr/lib/syslinux/mbr.bin of=${FREELO} bs=440 count=1
 
166
                fi
 
167
                ;;
 
168
esac
 
169
 
 
170
${LH_LOSETUP} -d ${FREELO}
 
171
 
 
172
FREELO="$(${LH_LOSETUP} -f)"
 
173
Losetup $FREELO chroot/binary.img 1
 
174
 
 
175
case "${LH_BINARY_FILESYSTEM}" in
 
176
        ext2|ext3)
 
177
                MKFS="${LH_BINARY_FILESYSTEM}"
 
178
                MKFS_OPTIONS="-L DEBIAN_LIVE -m 0"
 
179
                ;;
 
180
 
 
181
        fat16)
 
182
                MKFS="vfat"
 
183
                MKFS_OPTIONS="-F 16 -n DEBIAN_LIVE"
 
184
                ;;
 
185
 
 
186
        fat32)
 
187
                MKFS="vfat"
 
188
                MKFS_OPTIONS="-F 32 -n DEBIAN_LIVE"
 
189
                ;;
 
190
esac
 
191
 
 
192
case "${LH_CHROOT_BUILD}" in
 
193
        enabled)
 
194
                Chroot chroot "mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}"
 
195
                ;;
 
196
 
 
197
        disabled)
 
198
                mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}
 
199
                ;;
 
200
esac
 
201
 
 
202
case "${LH_BINARY_FILESYSTEM}" in
 
203
        fat*)
 
204
                CP_OPTIONS="-L"
 
205
                ;;
 
206
esac
 
207
 
 
208
mkdir -p chroot/binary.tmp
 
209
${LH_ROOT_COMMAND} mount ${FREELO} chroot/binary.tmp
 
210
cp -r -T ${CP_OPTIONS} binary/ chroot/binary.tmp
 
211
 
 
212
FIXME()
 
213
{
 
214
if [ "${LH_BOOTLOADER}" = "grub" ]
 
215
then
 
216
 
 
217
cat > chroot/grub.sh << EOF
 
218
cd binary.tmp
 
219
grub --batch << EOM
 
220
find /live/vmlinuz
 
221
EOM
 
222
EOF
 
223
 
 
224
        rootpartition="$(Chroot chroot 'sh grub.sh' 2>/dev/null | grep -A 1 'find /live/vmlinuz' | grep -v 'find /live/vmlinuz')"
 
225
        usbdev="$(echo $rootpartition | sed -e 's|,[[:digit:]]||')"
 
226
        echo "Root partition is $rootpartition, device is: $usbdev"
 
227
 
 
228
        echo "WAITING..." && read WAIT
 
229
 
 
230
#cat > chroot/grub.sh << EOF
 
231
#grub --batch << EOM
 
232
#root $rootpartition
 
233
#setup $usbdev
 
234
#EOM
 
235
#EOF
 
236
 
 
237
#Chroot chroot "sh grub.sh"
 
238
 
 
239
        rm -f chroot/grub.sh
 
240
fi
 
241
}
 
242
 
 
243
${LH_ROOT_COMMAND} umount chroot/binary.tmp
 
244
rmdir chroot/binary.tmp
 
245
 
 
246
if [ "${LH_BOOTLOADER}" = "syslinux" ]
 
247
then
 
248
        case "${LH_CHROOT_BUILD}" in
 
249
                enabled)
 
250
                        Chroot chroot "syslinux ${FREELO}"
 
251
                        ;;
 
252
 
 
253
                disabled)
 
254
                        syslinux ${FREELO}
 
255
                        ;;
 
256
        esac
 
257
fi
 
258
 
 
259
${LH_LOSETUP} -d ${FREELO}
 
260
 
 
261
echo "!!! The above error/warning messages can be ignored !!!"
 
262
 
 
263
if [ -n "${MAKEDEV}" ]
 
264
then
 
265
        rm -rf chroot/dev
 
266
        mv chroot/dev.tmp chroot/dev
 
267
fi
 
268
 
 
269
mv chroot/binary.img ./
 
270
 
 
271
# Saving cache
 
272
Save_cache cache/packages_binary
 
273
 
 
274
# Removing depends
 
275
Remove_package
 
276
 
 
277
# Creating stage file
 
278
Create_stagefile .stage/binary_usb-hdd