blob: e7e5e62b1834a7c5429cb04fb50091e82ae72ad4 (
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
#! /bin/sh
# Created by Tobias Powalowski <tpowa@archlinux.org>
# Settings
APPNAME=$(basename "${0}")
CONFIG="/etc/mkbootcd.conf"
GENIMG=""
BURN="0"
BLANK="0"
GRUB="0"
TARNAME=""
export TEMPDIR=$(mktemp /tmp/mkbootcd.XXXX)
usage ()
{
echo "${APPNAME}: usage"
echo " -g=IMAGE Generate a ISO image as IMAGE"
echo " -c=CONFIG Use CONFIG file. default: /etc/mkbootcd.conf"
echo " -B Burn the ISO image after creation"
echo " -b Blanking media first"
echo " -grub Use grub instead of isolinux"
echo " -t=TARNAME Generate a tar image instead of an iso image"
echo " -h This message."
exit 1
}
[ "$1" == "" ] && usage
while [ $# -gt 0 ]; do
case $1 in
-c=*|--c=*) CONFIG="$(echo $1 | awk -F= '{print $2;}')" ;;
-g=*|--g=*) GENIMG="$(echo $1 | awk -F= '{print $2;}')" ;;
-B|--B) BURN="1" ;;
-b|--b) BLANK="1" ;;
-grub|--grub) GRUB="1" ;;
-t=*|--t=*) TARNAME="$(echo $1 | awk -F= '{print $2;}')" ;;
-h|--h|?) usage ;;
*) usage ;;
esac
shift
done
if [ "${TARNAME}" = "" -a "${GENIMG}" = "" ]; then
echo "ERROR: No image name specified, please use the -g option"
exit 1
fi
if [ ! -f "${CONFIG}" ]; then
echo "config file '${CONFIG}' cannot be found, aborting..."
exit 1
fi
. "${CONFIG}"
# export for mkinitcpio
[ -n "${APPENDBOOTMESSAGE}" ] && export APPENDBOOTMESSAGE
[ -n "${APPENDBOOTMESSAGE_SYSLINUX}" ] && export APPENDBOOTMESSAGE_SYSLINUX
[ -n "${APPENDBOOTMESSAGE_SYSLINUX_LOWMEM}" ] && export APPENDBOOTMESSAGE_SYSLINUX_LOWMEM
[ -n "${APPENDOPTIONSBOOTMESSAGE}" ] && export APPENDOPTIONSBOOTMESSAGE
if [ "$GRUB" = "1" ]; then
export RUNPROGRAM="${APPNAME}-grub"
export BOOTDIRNAME="boot"
else
export RUNPROGRAM="${APPNAME}"
export BOOTDIRNAME="isolinux"
fi
[ "${BOOTMESSAGE}" = "" ] && export BOOTMESSAGE=$(mktemp /tmp/bootmessage.XXXX)
[ "${OPTIONSBOOTMESSAGE}" = "" ] && export OPTIONSBOOTMESSAGE=$(mktemp /tmp/optionsbootmessage.XXXX)
[ "${ISONAME}" = "" ] && export ISONAME=$(mktemp /tmp/isoname.XXXX)
export USEKERNEL=${VERSION}
# begin script
[ -e ${TEMPDIR} ] && rm -r ${TEMPDIR}
mkdir -p ${TEMPDIR}/${BOOTDIRNAME}
if [ "$GRUB" = "1" ]; then
mkdir ${TEMPDIR}/${BOOTDIRNAME}/grub
install -m755 /usr/share/grub/i386-pc/stage2_eltorito ${TEMPDIR}/${BOOTDIRNAME}/grub/stage2_eltorito
else
install -m755 /usr/lib/syslinux/isolinux.bin ${TEMPDIR}/${BOOTDIRNAME}/isolinux.bin
fi
# create isolinux.cfg
if [ "$GRUB" = "1" ]; then
echo ":: Creating menu.lst ..."
[ ! -e "${MENULST}" ] && echo "No menu.lst found" && exit 1
sed "s|@@PROMPT@@|${PROMPT}|g;s|@@TIMEOUT@@|${TIMEOUT}|g;s|@@KERNEL_BOOT_OPTIONS@@|${KERNEL_BOOT_OPTIONS}|g" \
${MENULST} \
> ${TEMPDIR}/${BOOTDIRNAME}/grub/menu.lst
else
echo ":: Creating isolinux.cfg ..."
if [ "${ISOLINUXCFG}" = "" ]; then
[ -e ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg ] && rm ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "prompt ${PROMPT}" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "timeout ${TIMEOUT}" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "display boot.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "F1 boot.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "F2 options.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "default arch" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "label arch" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "kernel vmlinuz" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
echo "append initrd=initrd.img ${KERNEL_BOOT_OPTIONS}" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
else
sed "s|@@PROMPT@@|${PROMPT}|g;s|@@TIMEOUT@@|${TIMEOUT}|g;s|@@KERNEL_BOOT_OPTIONS@@|${KERNEL_BOOT_OPTIONS}|g" \
${ISOLINUXCFG} > ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg
fi
[ ! -s ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg ] && echo "No isolinux.cfg found" && exit 1
fi
echo ":: Calling mkinitcpio CONFIG=${MKINITCPIO_CONFIG} KERNEL=${VERSION} ..."
# generate initramdisk
echo ":: Creating initramdisk ..."
mkinitcpio -c ${MKINITCPIO_CONFIG} -k ${VERSION} -g ${TEMPDIR}/${BOOTDIRNAME}/initrd.img
echo ":: Using ${KERNEL} as image kernel ..."
install -m644 ${KERNEL} ${TEMPDIR}/${BOOTDIRNAME}/vmlinuz
install -m644 ${BOOTMESSAGE} ${TEMPDIR}/${BOOTDIRNAME}/boot.msg
install -m644 ${OPTIONSBOOTMESSAGE} ${TEMPDIR}/${BOOTDIRNAME}/options.msg
[ ! -s ${TEMPDIR}/${BOOTDIRNAME}/boot.msg ] && echo 'ERROR:no boot.msg found, aborting!' && exit 1
[ ! -s ${TEMPDIR}/${BOOTDIRNAME}/options.msg ] && echo 'ERROR:no options.msg found, aborting!' && exit 1
# create image
if ! [ "${TARNAME}" = "" ]; then
echo ":: Creating tar image ..."
[ -e ${TARNAME} ] && rm ${TARNAME}
rm ${TEMPDIR}/arch/pkg/*.pkg.tar.gz > /dev/null 2>&1
tar cfv ${TARNAME} ${TEMPDIR} > /dev/null 2>&1 && echo ":: tar Image succesfull created at ${TARNAME}"
else
echo ":: Creating ISO image ..."
[ -e ${GENIMG} ] && rm ${GENIMG}
[ -s "${ISONAME}" ] && ISONAME=$(cat $ISONAME) || ISONAME="Arch Linux"
if [ "$GRUB" = "1" ]; then
mkisofs -RlDJLV "${ISONAME}" -b boot/grub/stage2_eltorito -c boot/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -o ${GENIMG} ${TEMPDIR}/ > /dev/null 2>&1
else
mkisofs -RlDJLV "${ISONAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table -o ${GENIMG} ${TEMPDIR}/ > /dev/null 2>&1
fi
[ $? -ne 0 ] && echo ":: ISO Image succesfull created at ${GENIMG}"
# burning/blanking image
if [ "$BLANK" = "1" ]; then
echo ":: Blanking media DEVICE=${DEVICE}, BLANKMODE=${BLANKMODE}, SPEED=${SPEED} ..."
cdrecord dev=${DEVICE} speed=${SPEED} blank=${BLANKMODE} > /dev/null 2>&1 && echo ":: Successfull."
fi
if [ "$BURN" = "1" ]; then
echo ":: Burning ISO image DEVICE=${DEVICE}, SPEED=${SPEED} ..."
cdrecord dev=${DEVICE} speed=${SPEED} -eject ${GENIMG} > /dev/null 2>&1 && echo ":: Successfull."
fi
fi
# clean /tmp
rm -r ${TEMPDIR}
|