aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/mkimg.base.sh
diff options
context:
space:
mode:
authorTimo Teräs <timo.teras@iki.fi>2016-08-08 15:25:22 +0300
committerNatanael Copa <ncopa@alpinelinux.org>2016-11-14 20:10:39 +0000
commit46f65fad4cce984a5f3cb781ee2fe18933665862 (patch)
treeb19f847e4f9b91071cfb1eab5faad4e63b9bd60b /scripts/mkimg.base.sh
parentcdaf6e91c92269a9ea7afe5cf83fee79f0594d90 (diff)
downloadaports-46f65fad4cce984a5f3cb781ee2fe18933665862.tar.bz2
aports-46f65fad4cce984a5f3cb781ee2fe18933665862.tar.xz
scripts/mkimage.sh: scripts to build bootable alpine images
Diffstat (limited to 'scripts/mkimg.base.sh')
-rw-r--r--scripts/mkimg.base.sh151
1 files changed, 151 insertions, 0 deletions
diff --git a/scripts/mkimg.base.sh b/scripts/mkimg.base.sh
new file mode 100644
index 0000000000..db2a3b2818
--- /dev/null
+++ b/scripts/mkimg.base.sh
@@ -0,0 +1,151 @@
+build_kernel() {
+ local _flavor="$2"
+ shift 3
+ local _pkgs="$@"
+ update-kernel \
+ $_hostkeys \
+ --media \
+ --flavor "$_flavor" \
+ --arch "$ARCH" \
+ --package "$_pkgs" \
+ --feature "$initfs_features" \
+ --repositories-file "$APKROOT/etc/apk/repositories" \
+ "$DESTDIR"
+}
+
+section_kernels() {
+ local _f _a _pkgs
+ for _f in $kernel_flavors; do
+ _pkgs="linux-$_f linux-firmware"
+ 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"
+ msg "Generating $_host.apkovl.tar.gz"
+ (local _pwd=$PWD; cd "$DESTDIR"; fakeroot "$_pwd"/"$apkovl" "$_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 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() {
+ [ "$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:-20}"
+ echo "PROMPT ${syslinux_prompt:-1}"
+ echo "DEFAULT ${kernel_flavors%% *}"
+
+ local _f
+ for _f in $kernel_flavors; do
+ if [ -z "${xen_params+set}" ]; then
+ cat <<EOF
+
+LABEL $_f
+ MENU LABEL Linux $_f
+ KERNEL /boot/vmlinuz-$_f
+ INITRD /boot/initramfs-$_f
+ DEVICETREEDIR /boot/dtbs
+ 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
+}
+
+build_syslinux_cfg() {
+ local syslinux_cfg="$1"
+ mkdir -p "${DESTDIR}/$(dirname $syslinux_cfg)"
+ syslinux_gen_config > "${DESTDIR}"/$syslinux_cfg
+}
+
+section_syslinux_cfg() {
+ syslinux_cfg=""
+ [ ! "$output_format" = "iso" ] || syslinux_cfg="boot/syslinux/syslinux.cfg"
+ [ ! -n "$uboot_install" ] || syslinux_cfg="extlinux/extlinux.conf"
+ [ -n "$syslinux_cfg" ] || return 0
+ build_section syslinux_cfg $syslinux_cfg $(syslinux_gen_config | checksum)
+}
+
+create_image_iso() {
+ local ISO="${OUTDIR}/${output_filename}"
+ xorrisofs \
+ -o ${ISO} -l -J -R \
+ -b boot/syslinux/isolinux.bin \
+ -c boot/syslinux/boot.cat \
+ -V "alpine-$PROFILE $RELEASE $ARCH" \
+ -no-emul-boot \
+ -boot-load-size 4 \
+ -boot-info-table \
+ -quiet \
+ -follow-links \
+ ${iso_opts} \
+ ${DESTDIR}
+ isohybrid ${ISO}
+}
+
+create_image_targz() {
+ tar -C "${DESTDIR}" -chzf ${OUTDIR}/${output_filename} .
+}
+
+profile_base() {
+ kernel_flavors="grsec"
+ initfs_cmdline="modules=loop,squashfs,sd-mod,usb-storage quiet"
+ initfs_features="ata base bootchart cdrom squashfs ext2 ext3 ext4 mmc raid scsi usb virtio"
+ apks="alpine-base alpine-mirrors bkeymaps chrony e2fsprogs network-extras openssl openssh tzdata"
+ apkovl="genapkovl-dhcp.sh"
+ hostname="alpine"
+}