binary_syslinux 8.83 KB
Newer Older
1
2
#!/bin/sh

3
## live-build(7) - System Build Scripts
4
## Copyright (C) 2006-2012 Daniel Baumann <daniel@debian.org>
5
##
6
## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
7
8
9
## This is free software, and you are welcome to redistribute it
## under certain conditions; see COPYING for details.

10
11
12

set -e

13
# Including common functions
14
[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh
15

16
# Setting static variables
17
DESCRIPTION="$(Echo 'installs syslinux into binary')"
18
19
20
21
22
HELP=""
USAGE="${PROGRAM} [--force]"

Arguments "${@}"

23
# Reading configuration files
24
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
25
26
Set_defaults

27
if [ "${LB_BOOTLOADER}" != "syslinux" ]
28
29
30
31
then
	exit 0
fi

32
Echo_message "Begin installing syslinux..."
33

34
# Requiring stage file
35
Require_stagefile .build/config .build/bootstrap
36

37
# Checking stage file
38
Check_stagefile .build/binary_syslinux
39

40
# Checking lock file
41
Check_lockfile .lock
42
43

# Creating lock file
44
Create_lockfile .lock
45

46
# Check architecture
47
48
Check_architectures amd64 i386
Check_crossarchitectures
49

50
# Assembling image specifics
51
case "${LB_BINARY_IMAGES}" in
52
	iso*)
53
		_BOOTLOADER="isolinux"
54
55
56
57
58
59
60
61
62
63

		case "${LB_MODE}" in
			progress)
				_TARGET="binary/boot"
				;;

			*)
				_TARGET="binary/isolinux"
				;;
		esac
64
65
		;;

66
	netboot)
67
		_BOOTLOADER="pxelinux"
68
		_TARGET="tftpboot"
69
		;;
70

71
	hdd*|*)
72
		_BOOTLOADER="syslinux"
73
74
75
76
77
78
79
80
81
82

		case "${LB_MODE}" in
			progress)
				_TARGET="binary/boot"
				;;

			*)
				_TARGET="binary/syslinux"
				;;
		esac
83
84
85
86
87
88
89
90
91
		;;
esac

# Checking depends
case "${LB_BUILD_WITH_CHROOT}" in
	true)
		Check_package chroot/usr/bin/syslinux syslinux
		Check_package chroot/usr/lib/syslinux syslinux-common

92
93
94
95
		case "${LB_SYSLINUX_THEME}" in
			live-build)
				Check_package chroot/usr/bin/rsvg librsvg2-bin
				;;
96

97
98
99
100
101
102
103
104
105
106
			*)
				Check_package chroot/usr/share/syslinux/themes/${LB_SYSLINUX_THEME} syslinux-themes-${LB_SYSLINUX_THEME}

				case "${LB_MODE}" in
					ubuntu)
						Check_package chroot/usr/share/gfxboot-theme-ubuntu/bootlogo.tar.gz gfxboot-theme-ubuntu
						;;
				esac
				;;
		esac
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
		;;

	false)
		if [ ! -e /usr/bin/syslinux ]
		then
			# syslinux
			Echo_error "/usr/bin/syslinux - no such file."
			exit 1
		fi

		if [ ! -e /usr/lib/syslinux ]
		then
			# syslinux-common
			Echo_error "/usr/lib/syslinux - no such directory"
			exit 1
		fi

124
125
		case "${LB_SYSLINUX_THEME}" in
			live-build)
126
				if [ ! -e /usr/bin/rsvg ]
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
				then
					# librsvg2-bin
					Echo_error "/usr/bin/rsvg - no such file"
					exit 1
				fi
				;;

			*)
				if [ ! -e /usr/share/syslinux/themes/${LB_SYSLINUX_THEME} ]
				then
					# syslinux-theme
					Echo_error "/usr/share/syslinux/themes/${LB_SYSLINUX_THEME} - no such directory."
					exit 1
				fi
				;;
		esac
143
144
145
		;;
esac

146
# Restoring cache
147
Restore_cache cache/packages.binary
148
149
150
151
152
153
154
155
156
157
158
159
160

# Installing depends
Install_package

# FIXME: cleanup, unify, and extend themes for ${_BOOTLOADER}-live and ${_BOOTLOADER}-installer
if [ "${LB_SYSLINUX_THEME}" = "live-build" ]
then
	if [ -e "config/bootloaders/${_BOOTLOADER}" ]
	then
		# Internal local copy
		_SOURCE="config/bootloaders/${_BOOTLOADER}"
	else
		# Internal system copy
161
162
		if [ -n "${LIVE_BUILD}" ]
		then
163
			_SOURCE="${LIVE_BUILD}/share/bootloaders/${_BOOTLOADER}"
164
165
166
		else
			_SOURCE="/usr/share/live/build/bootloaders/${_BOOTLOADER}"
		fi
167
168
169
170
171
172
	fi
else
	# External copy from chroot or system
	_SOURCE="/usr/share/syslinux/themes/${LB_SYSLINUX_THEME}/${_BOOTLOADER}-live"
fi

173
# Copying files
174
175
case "${LB_BUILD_WITH_CHROOT}" in
	true)
176
177
		mkdir -p $(dirname ${_TARGET})

178
		# Copy in two steps since the theme can have absolute symlinks and would therefore not be dereferenced correctly
179
180
181
182
183
184
185
186
		if [ "${LB_SYSLINUX_THEME}" = "live-build" ]
		then
			cp -a ${_SOURCE} chroot/root
			Chroot chroot cp -aL /root/$(basename ${_SOURCE}) /root/$(basename ${_SOURCE}).tmp
			rm -rf chroot/$(basename ${_SOURCE})
		else
			Chroot chroot cp -aL ${_SOURCE} /root/$(basename ${_SOURCE}).tmp
		fi
187
188
189

		case "${LB_MODE}" in
			ubuntu)
190
				Chroot chroot "tar xfz /usr/share/gfxboot-theme-ubuntu/bootlogo.tar.gz -C /root/$(basename ${_SOURCE}).tmp"
191
192
193
				;;
		esac

194
		mv chroot/root/$(basename ${_SOURCE}).tmp ${_TARGET}
195
196
197
		;;

	false)
198
199
		mkdir -p ${_TARGET}

200
		cp -aL ${_SOURCE}/* ${_TARGET}
201
202
203

		case "${LB_MODE}" in
			ubuntu)
204
				tar xfz /usr/share/gfxboot-theme-ubuntu/bootlogo.tar.gz -C ${_TARGET}
205
206
				;;
		esac
207
208
		;;
esac
209

210
# Configuring files
211
212
213
214
215
216
217
218
219
220
if [ -e "${_TARGET}/live.cfg.in" ]
then
	# This is all rather suboptimal.. needs prettifying at some point
	_FLAVOURS="$(echo ${LB_LINUX_FLAVOURS} | wc -w)"

	case "${_FLAVOURS}" in
		1)
			mv binary/live/vmlinuz-* binary/live/vmlinuz
			mv binary/live/initrd.img-* binary/live/initrd.img

221
			sed -e "s|@FLAVOUR@|${LB_LINUX_FLAVOURS}|g" \
222
223
224
			    -e "s|@KERNEL@|/live/vmlinuz|g" \
			    -e "s|@INITRD@|/live/initrd.img|g" \
			    -e "s|@LB_BOOTAPPEND_LIVE@|${LB_BOOTAPPEND_LIVE}|g" \
225
			    -e "s|@LB_BOOTAPPEND_FAILSAFE@|${LB_BOOTAPPEND_FAILSAFE}|g" \
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
			"${_TARGET}/live.cfg.in" >> "${_TARGET}/live.cfg"

			rm -f "${_TARGET}/live.cfg.in"
			;;

		*)
			_NUMBER="0"

			for _FLAVOUR in ${LB_LINUX_FLAVOURS}
			do
				_NUMBER="$((${_NUMBER} + 1))"

				mv binary/live/vmlinuz-*-${_FLAVOUR} binary/live/vmlinuz${_NUMBER}
				mv binary/live/initrd.img-*-${_FLAVOUR} binary/live/initrd${_NUMBER}.img

				sed -e "s|@FLAVOUR@|${_FLAVOUR}|g" \
				    -e "s|@KERNEL@|/live/vmlinuz${_NUMBER}|g" \
				    -e "s|@INITRD@|/live/initrd${_NUMBER}.img|g" \
				    -e "s|@LB_BOOTAPPEND_LIVE@|${LB_BOOTAPPEND_LIVE}|g" \
245
				    -e "s|@LB_BOOTAPPEND_FAILSAFE@|${LB_BOOTAPPEND_FAILSAFE}|g" \
246
247
248
249
250
251
252
				"${_TARGET}/live.cfg.in" >> "${_TARGET}/live.cfg"
			done

			rm -f "${_TARGET}/live.cfg.in"
			;;
	esac
elif [ -e "${_TARGET}/live.cfg" ]
253
then
254
255
	sed -i  -e "s|@LB_BOOTAPPEND_LIVE@|${LB_BOOTAPPEND_LIVE}|g" \
		-e "s|@LB_BOOTAPPEND_FAILSAFE@|${LB_BOOTAPPEND_FAILSAFE}|g" \
256
	${_TARGET}/live.cfg
257
fi
258

259
if [ -e ${_TARGET}/install.cfg ]
260
then
261
	sed -i -e "s|@LB_BOOTAPPEND_INSTALL@|${LB_BOOTAPPEND_INSTALL}|g" \
262
	${_TARGET}/install.cfg
263
fi
264

265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
if [ -e "${_TARGET}/splash.svg.in" ]
then
	case "${LB_MODE}" in
		progress)
			_PROJECT="Progress Linux"

			if ls config/package-lists/client-gnome.list*
			then
				_DESCRIPTION="Client GNOME"
			elif ls config/package-lists/client-lxde.list* > /dev/null 2>&1
			then
				_DESCRIPTION="Client LXDE"
			elif ls config/package-lists/server-lxc.list* > /dev/null 2>&1
			then
				_DESCRIPTION="Server LXC"
			else
				_DESCRIPTION="Standard"
			fi
			;;

		*)
			_PROJECT="Debian GNU/Linux"
			_DESCRIPTION=""
			;;

	esac

	eval _VERSION="$`echo RELEASE_${LB_DISTRIBUTION}`"
	_DISTRIBUTION="${LB_DISTRIBUTION}"
	_ARCHITECTURE="${LB_ARCHITECTURES}"
	_DATE=$(date -R)
	_YEAR="$(date +%Y)"
	_MONTH="$(date +%m)"
	_DAY="$(date +%d)"
	_HOUR="$(date +%H)"
	_MINUTE="$(date +%M)"
	_SECOND="$(date +%S)"
	_LINUX_VERSIONS="$(for _LINUX in chroot/boot/vmlinuz-* ; do chroot chroot apt-cache policy $(basename ${_LINUX} | sed -e 's|vmlinuz-|linux-image-|') | awk '/Installed: / { print $2 }' ; done | sort -u)"
	_LIVE_BUILD_VERSION="$(lb --version)"
	_LIVE_BOOT_VERSION="$(chroot chroot apt-cache policy live-boot | awk '/Installed: / { print $2 }')"
	_LIVE_CONFIG_VERSION="$(chroot chroot apt-cache policy live-config | awk '/Installed: / { print $2 }')"
	_LIVE_TOOLS_VERSION="$(chroot chroot apt-cache policy live-tools | awk '/Installed: / { print $2 }')"

	sed	-e "s|@PROJECT@|${_PROJECT}|g" \
		-e "s|@DISTRIBUTION@|${_DISTRIBUTION}|g" \
		-e "s|@VERSION@|${_VERSION}|g" \
		-e "s|@ARCHITECTURE@|${_ARCHITECTURE}|g" \
		-e "s|@DESCRIPTION@|${_DESCRIPTION}|g" \
		-e "s|@DATE@|${_DATE}|g" \
		-e "s|@YEAR@|${_YEAR}|g" \
		-e "s|@MONTH@|${_MONTH}|g" \
		-e "s|@DAY@|${_DAY}|g" \
		-e "s|@HOUR@|${_HOUR}|g" \
		-e "s|@MINUTE@|${_MINUTE}|g" \
		-e "s|@SECOND@|${_SECOND}|g" \
		-e "s|@LINUX_VERSIONS@|${_LINUX_VERSIONS}|g" \
		-e "s|@LIVE_BUILD_VERSION@|${_LIVE_BUILD_VERSION}|g" \
		-e "s|@LIVE_BOOT_VERSION@|${_LIVE_BOOT_VERSION}|g" \
		-e "s|@LIVE_CONFIG_VERSION@|${_LIVE_CONFIG_VERSION}|g" \
		-e "s|@LIVE_TOOLS_VERSION@|${_LIVE_TOOLS_VERSION}|g" \
	"${_TARGET}/splash.svg.in" > "${_TARGET}/splash.svg"

	case "${LB_BUILD_WITH_CHROOT}" in
		true)
			cp "${_TARGET}/splash.svg" chroot
			Chroot chroot "rsvg --format png --height 480 --width 640 splash.svg splash.png"
			mv chroot/splash.png "${_TARGET}"
			rm -f chroot/splash.svg
			;;

		false)
			rsvg --format png --height 480 --width 640 "${_TARGET}/splash.svg" "${_TARGET}/splash.png"
			;;
	esac

	rm -f "${_TARGET}/splash.svg.in" "${_TARGET}/splash.svg"
fi

343
344
345
346
347
348
case "${LB_MODE}" in
	progress)
		for _FILE in "${_TARGET}/isolinux.bin" "${_TARGET}/isolinux.cfg" "${_TARGET}/syslinux.cfg"
		do
			if [ -e "${_FILE}" ]
			then
349
				mv "${_FILE}" "${_TARGET}/$(echo ${_FILE} | sed -e 's|.*linux|boot|')"
350
351
352
353
354
			fi
		done
		;;
esac

355
356
357
case "${LB_BUILD_WITH_CHROOT}" in
	true)
		# Saving cache
358
		Save_cache cache/packages.binary
359

360
361
		# Removing depends
		Remove_package
362
363
		;;
esac
364

365
# Creating stage file
366
Create_stagefile .build/binary_syslinux