blob: 87fb6882c1b2b42230f0095d63f289de2ebf8170 (
plain)
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
|
#!/bin/bash -
# @configure_input@
# Copyright (C) 2009 Red Hat Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
# Helper script which constructs the supermin appliance at runtime.
unset CDPATH
set -e
# Source directory containing the supermin input files.
sourcedir=$(cd "$1" > /dev/null; pwd)
# Output files.
kernel="$2"
initrd="$3"
# Look for the kernel first. This is very unsophisticated: We
# just look for any kernel named vmlinuz-*.$host_cpu which has a
# corresponding /lib/modules/*.$host_cpu directory.
for f in /boot/vmlinuz-*.@host_cpu@; do
b=$(basename "$f")
b=$(echo "$b" | sed 's,vmlinuz-,,')
modpath="/lib/modules/$b"
if [ -d "$modpath" ]; then
ln -sf "$f" "$kernel"
break
fi
modpath=
done
if [ -z "$modpath" ]; then
echo "$0: failed to find a suitable kernel" >&2
exit 1
fi
# The initrd consists of these components:
# (1) The base skeleton appliance that we constructed at build time.
# name = initramfs.@REPO@.@host_cpu@.supermin.img
# format = compressed cpio
# (2) The modules from modpath which are on the module whitelist.
# format = plain cpio
# (3) The host files which match wildcards in *.supermin.hostfiles.
# format = plain cpio
cp "$sourcedir"/initramfs.@REPO@.@host_cpu@.supermin.img "$initrd"
# Kernel modules (2).
exec 5<"$sourcedir"/kmod.whitelist
whitelist=
while read kmod 0<&5; do
whitelist="$whitelist -o -name $kmod"
done
exec 5<&-
find "$modpath" \( -not -name '*.ko' $whitelist \) -a -print0 |
cpio --quiet -o -0 -H newc >> "$initrd"
# Host files (3).
(cd / && \
ls -1df $(
cat "$sourcedir"/initramfs.@REPO@.@host_cpu@.supermin.hostfiles
) 2>/dev/null |
cpio --quiet -o -H newc ) >> "$initrd"
|