blob: d2036fda769647ea1350ccecc7d6156df2b4cfae (
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
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
|
#!/bin/sh
usage()
{
cat >&2 << EOF
Usage: ${0} [OPTION]... <-o outfile> [version]
Options:
-d confdir Specify an alternative configuration directory.
-k Keep temporary directory used to make the image.
-o outfile Write to outfile.
-r root Override ROOT setting in mkinitrd.conf.
See ${0}(8) for further details.
EOF
exit 1
}
# Defaults
keep="n"
CONFDIR="/etc/mkinitramfs"
while getopts "d:ko:r:" flag; do
case $flag in
d)
CONFDIR="${OPTAGS}"
if [ ! d "${CONFDIR}" ]; then
echo "${0}: ${CONFDIR}: Not a directory" >&2
exit 1
fi
;;
o)
outfile="${OPTARG}"
;;
v)
version="${OPTARG}"
;;
k)
keep="y"
;;
esac
done
shift $((${OPTIND} - 1))
. ${CONFDIR}/initramfs.conf
if [ x${outfile} = x ] || [ ${#} -ne 1 ]; then
usage
fi
if [ -d ${outfile} ]; then
echo "${outfile} is a directory"
exit 1
fi
if [ ! -e /lib/modules/${version} ]; then
echo "Cannot find /lib/modules/${version}"
exit 1
fi
TMPDIR=$(mktemp -d) || exit 1
mkdir -p ${TMPDIR}/modules ${TMPDIR}/conf ${TMPDIR}/etc
mkdir -p ${TMPDIR}/bin ${TMPDIR}/lib ${TMPDIR}/scripts
for x in $(sed -e '/^#/d' ${CONFDIR}/modules); do
for y in $(modprobe --set-version=${version} --show-depends ${x} | awk '{ print $2 }'); do
# Prune duplicates
if [ -e ${TMPDIR}/modules/$(basename ${y}) ]; then
continue
fi
ln -s ${y} ${TMPDIR}/modules
echo $(basename ${y}) >>${TMPDIR}/conf/modules
done
done
# Have to do each file, because cpio --dereference doesn't recurse down
# symlinks.
ln -s /usr/lib/klibc/bin/* ${TMPDIR}/bin
ln -s /usr/lib/klibc/lib/* ${TMPDIR}/lib
ln -s /usr/share/initramfs-tools/init ${TMPDIR}/init
ln -s /usr/share/initramfs-tools/scripts/* ${TMPDIR}/scripts
ln -s ${CONFDIR}/initramfs.conf ${TMPDIR}/conf
ln -s /etc/udev ${TMPDIR}/etc
# Hack until udev is built with klibc
ln -s /sbin/udev ${TMPDIR}/bin
ln -s /sbin/udevstart ${TMPDIR}/bin
ln -s /lib/libc.so.* ${TMPDIR}/lib
ln -s /lib/ld*.so.* ${TMPDIR}/lib
rm ${TMPDIR}/lib/*lsb*
# Busybox
if [ "x${BUSYBOX}" = "xy" ]; then
rm ${TMPDIR}/bin/sh
ln -s /bin/busybox ${TMPDIR}/bin/sh
fi
# Raid
ln -s /sbin/mdadm ${TMPDIR}/bin
ln -s /sbin/mdrun ${TMPDIR}/bin
(cd ${TMPDIR} && find . | cpio --quiet --dereference -o -H newc | gzip -9 >${outfile})
if [ "${keep}" = "y" ]; then
echo "Working files in ${TMPDIR}"
else
rm -rf "${TMPDIR}"
fi
|