mirror of
				https://gitlab.alpinelinux.org/alpine/aports.git
				synced 2025-10-31 16:31:40 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			331 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			331 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| build_kernel() {
 | |
| 	local _flavor="$2" _modloopsign= _add
 | |
| 	shift 3
 | |
| 	local _pkgs="$@"
 | |
| 	[ "$modloop_sign" = "yes" ] && _modloopsign="--modloopsign"
 | |
| 	update-kernel \
 | |
| 		$_hostkeys \
 | |
| 		${_abuild_pubkey:+--apk-pubkey $_abuild_pubkey} \
 | |
| 		$_modloopsign \
 | |
| 		--media \
 | |
| 		--flavor "$_flavor" \
 | |
| 		--arch "$ARCH" \
 | |
| 		--package "$_pkgs" \
 | |
| 		--feature "$initfs_features" \
 | |
| 		--modloopfw "$modloopfw" \
 | |
| 		--repositories-file "$APKROOT/etc/apk/repositories" \
 | |
| 		"$DESTDIR" \
 | |
| 		|| return 1
 | |
|     if [ -n "$boot_addons" ]; then
 | |
|         for _add in $boot_addons; do
 | |
|            apk fetch --quiet --stdout $_add | tar -C "${DESTDIR}" -zx boot/
 | |
|         done
 | |
|     fi
 | |
| }
 | |
| 
 | |
| section_kernels() {
 | |
| 	local _f _a _pkgs
 | |
| 	for _f in $kernel_flavors; do
 | |
| 		_pkgs="linux-$_f linux-firmware wireless-regdb $modloop_addons"
 | |
| 		for _a in $kernel_addons; do
 | |
| 			_pkgs="$_pkgs $_a-$_f"
 | |
| 		done
 | |
| 		local id=$( (echo "$initfs_features::$_hostkeys" ; apk fetch --root "$APKROOT" --simulate alpine-base $_pkgs | sort) | checksum)
 | |
| 		build_section kernel $ARCH $_f $id $_pkgs
 | |
| 	done
 | |
| }
 | |
| 
 | |
| build_apks() {
 | |
| 	local _apksdir="$DESTDIR/apks"
 | |
| 	local _archdir="$_apksdir/$ARCH"
 | |
| 	mkdir -p "$_archdir"
 | |
| 
 | |
| 	apk fetch --root "$APKROOT" --link --recursive --output "$_archdir" $apks
 | |
| 	if ! ls "$_archdir"/*.apk >& /dev/null; then
 | |
| 		return 1
 | |
| 	fi
 | |
| 
 | |
| 	apk index \
 | |
| 		--description "$RELEASE" \
 | |
| 		--rewrite-arch "$ARCH" \
 | |
| 		--index "$_archdir"/APKINDEX.tar.gz \
 | |
| 		--output "$_archdir"/APKINDEX.tar.gz \
 | |
| 		"$_archdir"/*.apk
 | |
| 	abuild-sign "$_archdir"/APKINDEX.tar.gz
 | |
| 	touch "$_apksdir/.boot_repository"
 | |
| }
 | |
| 
 | |
| section_apks() {
 | |
| 	[ -n "$apks" ] || return 0
 | |
| 	build_section apks $ARCH $(apk fetch --root "$APKROOT" --simulate --recursive $apks | sort | checksum)
 | |
| }
 | |
| 
 | |
| build_apkovl() {
 | |
| 	local _host="$1" _script=
 | |
| 	msg "Generating $_host.apkovl.tar.gz"
 | |
| 	for _script in "$PWD"/"$apkovl" $HOME/.mkimage/$apkovl \
 | |
| 		$(readlink -f "$scriptdir/$apkovl"); do
 | |
| 
 | |
| 		if [ -f "$_script" ]; then
 | |
| 			break
 | |
| 		fi
 | |
| 	done
 | |
| 	[ -n "$_script" ] || die "could not find $apkovl"
 | |
| 	(cd "$DESTDIR"; fakeroot "$_script" "$_host")
 | |
| }
 | |
| 
 | |
| section_apkovl() {
 | |
| 	[ -n "$apkovl" -a -n "$hostname" ] || return 0
 | |
| 	build_section apkovl $hostname $(checksum < "$apkovl")
 | |
| }
 | |
| 
 | |
| build_syslinux() {
 | |
| 	local _fn
 | |
| 	mkdir -p "$DESTDIR"/boot/syslinux
 | |
| 	apk fetch --root "$APKROOT" --stdout syslinux | tar -C "$DESTDIR" -xz usr/share/syslinux
 | |
| 	for _fn in isohdpfx.bin isolinux.bin ldlinux.c32 libutil.c32 libcom32.c32 mboot.c32; do
 | |
| 		mv "$DESTDIR"/usr/share/syslinux/$_fn "$DESTDIR"/boot/syslinux/$_fn || return 1
 | |
| 	done
 | |
| 	rm -rf "$DESTDIR"/usr
 | |
| }
 | |
| 
 | |
| section_syslinux() {
 | |
| 	[ "$ARCH" = x86 -o "$ARCH" = x86_64 ] || return 0
 | |
| 	[ "$output_format" = "iso" ] || return 0
 | |
| 	build_section syslinux $(apk fetch --root "$APKROOT" --simulate syslinux | sort | checksum)
 | |
| }
 | |
| 
 | |
| syslinux_gen_config() {
 | |
| 	[ -z "$syslinux_serial" ] || echo "SERIAL $syslinux_serial"
 | |
| 	echo "TIMEOUT ${syslinux_timeout:-10}"
 | |
| 	echo "PROMPT ${syslinux_prompt:-1}"
 | |
| 	echo "DEFAULT ${kernel_flavors%% *}"
 | |
| 
 | |
| 	local _f _p _initrd
 | |
| 	for _f in $kernel_flavors; do
 | |
| 		if [ -z "${xen_params+set}" ]; then
 | |
| 			_initrd="/boot/initramfs-$_f"
 | |
| 			if [ -n "$initrd_ucode" ]; then
 | |
| 				for _p in $initrd_ucode; do
 | |
| 					_initrd="$_p,$_initrd"
 | |
| 				done
 | |
| 			fi
 | |
| 
 | |
| 			cat <<- EOF
 | |
| 
 | |
| 			LABEL $_f
 | |
| 				MENU LABEL Linux $_f
 | |
| 				KERNEL /boot/vmlinuz-$_f
 | |
| 				INITRD $_initrd
 | |
| 				FDTDIR /boot/dtbs-$_f
 | |
| 				APPEND $initfs_cmdline $kernel_cmdline
 | |
| 			EOF
 | |
| 		else
 | |
| 			cat <<- EOF
 | |
| 
 | |
| 			LABEL $_f
 | |
| 				MENU LABEL Xen/Linux $_f
 | |
| 				KERNEL /boot/syslinux/mboot.c32
 | |
| 				APPEND /boot/xen.gz ${xen_params} --- /boot/vmlinuz-$_f $initfs_cmdline $kernel_cmdline --- /boot/initramfs-$_f
 | |
| 			EOF
 | |
| 		fi
 | |
| 	done
 | |
| }
 | |
| 
 | |
| grub_gen_config() {
 | |
| 	local _f _p _initrd
 | |
| 	echo "set timeout=1"
 | |
| 	for _f in $kernel_flavors; do
 | |
| 		if [ -z "${xen_params+set}" ]; then
 | |
| 			_initrd="/boot/initramfs-$_f"
 | |
| 			if [ -n "$initrd_ucode" ]; then
 | |
| 				for _p in $initrd_ucode; do
 | |
| 					_initrd="$_p $_initrd"
 | |
| 				done
 | |
| 			fi
 | |
| 
 | |
| 			cat <<- EOF
 | |
| 
 | |
| 			menuentry "Linux $_f" {
 | |
| 				linux	/boot/vmlinuz-$_f $initfs_cmdline $kernel_cmdline
 | |
| 				initrd	$_initrd
 | |
| 			}
 | |
| 			EOF
 | |
| 		else
 | |
| 			cat <<- EOF
 | |
| 
 | |
| 			menuentry "Xen/Linux $_f" {
 | |
| 				multiboot2	/boot/xen.gz ${xen_params}
 | |
| 				module2		/boot/vmlinuz-$_f $initfs_cmdline $kernel_cmdline
 | |
| 				module2		/boot/initramfs-$_f
 | |
| 			}
 | |
| 			EOF
 | |
| 		fi
 | |
| 	done
 | |
| }
 | |
| 
 | |
| build_syslinux_cfg() {
 | |
| 	local syslinux_cfg="$1"
 | |
| 	mkdir -p "${DESTDIR}/$(dirname $syslinux_cfg)"
 | |
| 	syslinux_gen_config > "${DESTDIR}"/$syslinux_cfg
 | |
| }
 | |
| 
 | |
| section_syslinux_cfg() {
 | |
| 	syslinux_cfg=""
 | |
| 	if [ "$ARCH" = x86 -o "$ARCH" = x86_64 ]; then
 | |
| 		[ ! "$output_format" = "iso" ] || syslinux_cfg="boot/syslinux/syslinux.cfg"
 | |
| 	fi
 | |
| 	[ ! -n "$uboot_install" ] || syslinux_cfg="extlinux/extlinux.conf"
 | |
| 	[ -n "$syslinux_cfg" ] || return 0
 | |
| 	build_section syslinux_cfg $syslinux_cfg $(syslinux_gen_config | checksum)
 | |
| }
 | |
| 
 | |
| build_grub_cfg() {
 | |
| 	local grub_cfg="$1"
 | |
| 	mkdir -p "${DESTDIR}/$(dirname $grub_cfg)"
 | |
| 	grub_gen_config > "${DESTDIR}"/$grub_cfg
 | |
| }
 | |
| 
 | |
| grub_gen_earlyconf() {
 | |
| 	cat <<- EOF
 | |
| 	search --no-floppy --set=root --label "alpine-${profile_abbrev:-$PROFILE} $RELEASE $ARCH"
 | |
| 	set prefix=(\$root)/boot/grub
 | |
| 	EOF
 | |
| }
 | |
| 
 | |
| build_grub_efi() {
 | |
| 	local _format="$1"
 | |
| 	local _efi="$2"
 | |
| 
 | |
| 	# Prepare grub-efi bootloader
 | |
| 	mkdir -p "$DESTDIR/efi/boot"
 | |
| 	grub_gen_earlyconf > "$WORKDIR/grub_early.$3.cfg"
 | |
| 	grub-mkimage \
 | |
| 		--config="$WORKDIR/grub_early.$3.cfg" \
 | |
| 		--prefix="/boot/grub" \
 | |
| 		--output="$DESTDIR/efi/boot/$_efi" \
 | |
| 		--format="$_format" \
 | |
| 		--compression="xz" \
 | |
| 		$grub_mod
 | |
| }
 | |
| 
 | |
| section_grubieee1275() {
 | |
| 	[ "$ARCH" = ppc64le ] || return 0
 | |
| 	[ "$output_format" = "iso" ] || return 0
 | |
| 	kernel_cmdline="$kernel_cmdline console=hvc0"
 | |
| 
 | |
| 	build_section grub_cfg boot/grub/grub.cfg $(grub_gen_config | checksum)
 | |
| }
 | |
| 
 | |
| section_grub_efi() {
 | |
| 	[ -n "$grub_mod" ] || return 0
 | |
| 	local _format _efi
 | |
| 	case "$ARCH" in
 | |
| 	aarch64)_format="arm64-efi";  _efi="bootaa64.efi" ;;
 | |
| 	arm*)	_format="arm-efi";    _efi="bootarm.efi"  ;;
 | |
| 	x86)	_format="i386-efi";   _efi="bootia32.efi" ;;
 | |
| 	x86_64) _format="x86_64-efi"; _efi="bootx64.efi"  ;;
 | |
| 	riscv64) _format="riscv64-efi"; _efi="bootriscv64.efi"  ;;
 | |
| 	*)	return 0 ;;
 | |
| 	esac
 | |
| 
 | |
| 	build_section grub_cfg boot/grub/grub.cfg $(grub_gen_config | checksum)
 | |
| 	build_section grub_efi $_format $_efi $(grub_gen_earlyconf | checksum)
 | |
| }
 | |
| 
 | |
| create_image_iso() {
 | |
| 	local ISO="${OUTDIR}/${output_filename}"
 | |
| 	local _isolinux
 | |
| 	local _efiboot
 | |
| 
 | |
| 	if [ -e "${DESTDIR}/boot/syslinux/isolinux.bin" ]; then
 | |
| 		# isolinux enabled
 | |
| 		_isolinux="
 | |
| 			-isohybrid-mbr ${DESTDIR}/boot/syslinux/isohdpfx.bin
 | |
| 			-eltorito-boot boot/syslinux/isolinux.bin
 | |
| 			-eltorito-catalog boot/syslinux/boot.cat
 | |
| 			-no-emul-boot
 | |
| 			-boot-load-size 4
 | |
| 			-boot-info-table
 | |
| 			"
 | |
| 	fi
 | |
| 	if [ -e "${DESTDIR}/efi" -a -e "${DESTDIR}/boot/grub" ]; then
 | |
| 		# Create the EFI boot partition image
 | |
| 		mformat -i ${DESTDIR}/boot/grub/efi.img -C -f 1440 -N 0 ::
 | |
| 		mcopy -i ${DESTDIR}/boot/grub/efi.img -s ${DESTDIR}/efi ::
 | |
| 		touch -md "@${SOURCE_DATE_EPOCH}" ${DESTDIR}/boot/grub/efi.img
 | |
| 
 | |
| 		# Enable EFI boot
 | |
| 		if [ -z "$_isolinux" ]; then
 | |
| 			# efi boot only
 | |
| 			_efiboot="
 | |
| 				-efi-boot-part
 | |
| 				--efi-boot-image
 | |
| 				-e boot/grub/efi.img
 | |
| 				-no-emul-boot
 | |
| 				"
 | |
| 		else
 | |
| 			# hybrid isolinux+efi boot
 | |
| 			_efiboot="
 | |
| 				-eltorito-alt-boot
 | |
| 				-e boot/grub/efi.img
 | |
| 				-no-emul-boot
 | |
| 				-isohybrid-gpt-basdat
 | |
| 				"
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	if [ "$ARCH" = ppc64le ]; then
 | |
| 		grub-mkrescue --output ${ISO} ${DESTDIR} -follow-links \
 | |
| 			-sysid LINUX \
 | |
| 			-volid "alpine-${profile_abbrev:-$PROFILE} $RELEASE $ARCH"
 | |
| 	else
 | |
| 		if [ "$ARCH" = s390x ]; then
 | |
| 			printf %s "$initfs_cmdline $kernel_cmdline " > ${WORKDIR}/parmfile
 | |
| 			for _f in $kernel_flavors; do
 | |
| 				mk-s390-cdboot -p ${WORKDIR}/parmfile \
 | |
| 					-i ${DESTDIR}/boot/vmlinuz-$_f \
 | |
| 					-r ${DESTDIR}/boot/initramfs-$_f \
 | |
| 					-o ${DESTDIR}/boot/merged.img
 | |
| 			done
 | |
| 			iso_opts="$iso_opts -no-emul-boot -eltorito-boot boot/merged.img"
 | |
| 		fi
 | |
| 		xorrisofs \
 | |
| 			-quiet \
 | |
| 			-output ${ISO} \
 | |
| 			-full-iso9660-filenames \
 | |
| 			-joliet \
 | |
| 			-rational-rock \
 | |
| 			-sysid LINUX \
 | |
| 			-volid "alpine-${profile_abbrev:-$PROFILE} $RELEASE $ARCH" \
 | |
| 			$_isolinux \
 | |
| 			$_efiboot \
 | |
| 			-follow-links \
 | |
| 			${iso_opts} \
 | |
| 			${DESTDIR}
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| create_image_targz() {
 | |
| 	tar -C "${DESTDIR}" \
 | |
| 		--mtime="@${SOURCE_DATE_EPOCH}" \
 | |
| 		--owner=0 --group=0 --numeric-owner \
 | |
| 		-chzf "${OUTDIR}/${output_filename}" .
 | |
| }
 | |
| 
 | |
| profile_base() {
 | |
| 	kernel_flavors="lts"
 | |
| 	initfs_cmdline="modules=loop,squashfs,sd-mod,usb-storage quiet"
 | |
| 	initfs_features="ata base bootchart cdrom ext4 mmc nvme raid scsi squashfs usb virtio"
 | |
| 	modloop_sign=yes
 | |
| 	grub_mod="all_video disk part_gpt part_msdos linux normal configfile search search_label efi_gop fat iso9660 cat echo ls test true help gzio"
 | |
| 	case "$ARCH" in
 | |
| 	x86*) grub_mod="$grub_mod multiboot2 efi_uga";;
 | |
| 	esac
 | |
| 	apks="alpine-base busybox chrony dhcpcd doas e2fsprogs haveged
 | |
| 		kbd-bkeymaps network-extras openntpd openssl openssh
 | |
| 		tzdata wget"
 | |
| 	apkovl=
 | |
| 	hostname="alpine"
 | |
| }
 |