aboutsummaryrefslogtreecommitdiffstats
path: root/mknetboot.sh
blob: 91087deb2910db6a9a2e930f62314b5756d88861 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#!/bin/sh -e

ARCH=$(apk --print-arch)
FLAVOR="vanilla"
FEATURE="base squashfs network zfs"
PACKAGE="spl-vanilla zfs-vanilla"
OUTDIR="$PWD/out"
RELEASE="edge"
MIRROR="http://dl-cdn.alpinelinux.org/alpine"

usage() {
	local ws=$(printf %${#0}s)
	cat <<-EOF

	    $0                  [--arch ARCH] [--flavor FLAVOR] [--feature FEATURE]
	    $ws                  [--outdir OUTDIR] [--release RELEASE] [--repository REPO]
	    $0                  --help

	    options:
	    --arch              Specify which architecture images to build
	    --flavor            Specify which kernel flavor images to build
	    --feature           Specify which initramfs features to include
	    --package           Additional module or firmware package
	    --outdir            Specify directory for the created images
	    --release           Build images for specified release from main repository
	    --repository        Package repository to use (overides --release)
	    --extra-repository  Add repository to search packages from (overides --release)

	EOF
}

# parse parameters
while [ $# -gt 0 ]; do
	opt="$1"
	shift
	case "$opt" in
		--arch) ARCH="$1"; shift ;;
		--flavor) FLAVOR="$1"; shift ;;
		--feature) FEATURE="$1"; shift ;;
		--outdir) OUTDIR="$1"; shift ;;
		--release) RELEASE="$1"; shift ;;
		--repository) REPO="$1"; shift ;;
		--extra-repository) EXTRAREPO="$EXTRAREPO $1"; shift ;;
		--) break ;;
		-*) usage; exit 1;;
	esac
done

rm -rf "$OUTDIR"
mkdir -p "$OUTDIR"

REPOFILE=$(mktemp)
DEFAULT_REPO="$MIRROR/$RELEASE/main"
echo "${REPO:-$DEFAULT_REPO}" >> "$REPOFILE"
for repo in $EXTRAREPO; do
	echo "$repo" >> "$REPOFILE"
done

echo "Creating netboot image: $RELEASE/$ARCH/$FLAVOR"

update-kernel \
	--arch "$ARCH" \
	--flavor "$FLAVOR" \
	--feature "$FEATURE" \
	--package "$PACKAGE" \
	--repositories-file "$REPOFILE" \
	"$OUTDIR"

# older vanilla kernels do not have the flavor appended.
for file in vmlinuz config System.map; do
	if [ -f "$OUTDIR"/$file ]; then
		mv "$OUTDIR"/$file "$OUTDIR"/$file-"$FLAVOR"
	fi
done

rm -f "$REPOFILE"