Difference between revisions of "How to make a custom ISO image with mkimage"

From Alpine Linux
Jump to: navigation, search
(Configuration)
Line 36: Line 36:
  
 
<pre>export PROFILENAME=nas</pre>
 
<pre>export PROFILENAME=nas</pre>
 
 
{{Cmd|cat << EOF > ~/aports/scripts/mkimg.$PROFILENAME.sh}}
 
  
 
<pre>
 
<pre>
 +
cat << EOF > ~/aports/scripts/mkimg.$PROFILENAME.sh
 
profile_$PROFILENAME() {
 
profile_$PROFILENAME() {
 
profile_standard
 
profile_standard
kernel_flavors=""
 
 
kernel_cmdline="unionfs_size=512M console=tty0 console=ttyS0,115200"
 
kernel_cmdline="unionfs_size=512M console=tty0 console=ttyS0,115200"
 
syslinux_serial="0 115200"
 
syslinux_serial="0 115200"
Line 61: Line 58:
 
apks="$apks linux-firmware"
 
apks="$apks linux-firmware"
 
}
 
}
 +
EOF
 
</pre>
 
</pre>
  
 
Set the script as executable:
 
Set the script as executable:
 
{{Cmd|chmod +x mkimg.$PROFILENAME.sh}}
 
{{Cmd|chmod +x mkimg.$PROFILENAME.sh}}
 
  
 
== Create the ISO ==
 
== Create the ISO ==

Revision as of 18:13, 23 June 2017

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, overlayfs (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_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"
}
EOF

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.