How to make a custom ISO image with mkimage

From Alpine Linux
Revision as of 09:09, 19 May 2017 by Fcolista (talk | contribs) (Created page with "This document explains how to build a custom ISO image using the new mkimage scripts located in aports directory. == Prerequisite == First make sure we have the needed tools...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

This document explains how to build a custom ISO image using the new mkimage scripts located in aports directory.

Prerequisite

First make sure we have the needed tools

apk add build-base apk-tools alpine-conf busybox fakeroot syslinux xorriso

For efi you shoud add

mtools dosfstools grub-efi

Create a user (e.g. build) and add it to abuild group:

useradd build -G abuild

Then create signing keys (-i installs them in /etc/apk/keys which is required for later)

abuild-keygen -i -a

{{Tip| Make sure your public keys are placed in /etc/apk/keys/ (example: build-xxxxxxxx.rsa.pub):

ls /etc/apk/keys/

Clone (or update) the git repository.

git clone git://git.alpinelinux.org/aports


Make sure the apk index is up to date (so apk finds the packages):

apk update


Configuration

The mkimg scripts are shipped with pre-configured profiles.

The format is mkimg.$PROFILENAME.sh

So, in order to have a custom ISO, you should create your own mkimg.$PROFILENAME.sh script.

This is an example used to have ZFS module, unionfs (which allows to have /lib/modules in r/w), a serial console output and some other useful apks to build a simple NAS:

export PROFILENAME=nas


cat << EOF > ~/aports/scripts/mkimg.$PROFILENAME.sh

profile_$PROFILENAME() {
	profile_standard
	kernel_flavors=""
	kernel_cmdline="unionfs_size=512M console=tty0 console=ttyS0,115200"
	syslinux_serial="0 115200"
	kernel_addons="zfs spl"
	apks="$apks iscsi-scst zfs-scripts zfs zfs-utils-py
		cciss_vol_status lvm2 mdadm mkinitfs mtools nfs-utils
		parted rsync sfdisk syslinux unrar util-linux xfsprogs
		dosfstools ntfs-3g
		"
	local _k _a
	for _k in $kernel_flavors; do
		apks="$apks linux-$_k"
		for _a in $kernel_addons; do
			apks="$apks $_a-$_k"
		done
	done
	apks="$apks linux-firmware"
}

Set the script as executable:

chmod +x mkimg.$PROFILENAME.sh


Create the ISO

Create a iso directory in your home dir:

mkdir -p ~/iso

Then create the actual ISO. In this example we will use the edge version x86_64:

sh mkimage.sh --tag edge \ --outdir ~/iso \ --arch x86_64 \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \ --profile $PROFILENAME


Notes:

Of course, several passages of this doc can be automated with a script, like the repository/arch/outdir settings. This steps are left to you and to your imagination :)


Testing your ISO image

Qemu is useful for a quick test of your created ISO image.