#!/bin/sh burl="https://launchpad.net/ubuntu/+archive/primary/+files/linux-image" outdir="./download" def_arches="i386 x86_64 arm powerpc ppc64 ppc64le aarch64" error() { echo "$@" 1>&2; } fail() { [ $# -eq 0 ] || error "$@"; exit 1; } dl() { local url="$1" target="$2" tfile="" t="" [ -f "$target" ] && return t=$(dirname "$target") tfile=$(mktemp "$t/.${0##*/}.XXXXXX") || return wget "$url" -O "$tfile" && mv "$tfile" "$target" || { t=$?; rm -f "$tfile"; return $t; } } [ "$1" = "--outdir" ] && { outdir="$1" && shift; } kver="$1" shift if [ $# -eq 0 ]; then set -- ${def_arches} fi [ -d "$outdir" ] || mkdir -p "$outdir" || fail "failed mkdir $outdir" [ -n "$kver" ] || fail "must give kernel version" # version like 3.13.0-52.86 # 3.19.0-20.20~14.04.1 kpart=${kver%-*} upart=${kver#*-} abi=${upart%%.*} kmajor=${kpart%%.*} kminor=${kpart#*.}; kminor=${kminor%.*} kmicro=${kpart#*.*.} for arch in "$@"; do xarch=$arch; [ "$arch" = "x86_64" ] && xarch="amd64"; if [ "$kmajor.$kminor" = "3.2" ]; then case "$arch" in x86_64|i386) flav="virtual";; arm) flav="omap"; xarch="armel";; powerpc) flav="powerpc64-smp";; *) fail "unknown kernel:arch for $kver:$arch" esac elif [ "$kmajor.$kminor" = "3.13" -o "$kmajor.$kminor" = "3.19" ]; then case "$arch" in arm) xarch="armhf"; flav="generic";; aarch64) xarch=arm64; flav="generic";; powerpc|ppc64) xarch=powerpc; flav="powerpc64-smp";; ppc64le) xarch="ppc64el"; flav="generic";; x86_64|i386|arm64) flav="generic";; *) fail "unknown kernel:arch for $kver:$arch" esac else fail "unknown kernel $kver ($kmajor.$kminor)" fi url="$burl-${kmajor}.${kminor}.${kmicro}-${abi}-${flav}_${kver}_${xarch}.deb" dl "$url" "$outdir/${url##*/}" || fail "failed dl $url" ln -sf ${url##*/} "$outdir/kernel-${arch}.deb" || fail "failed symlink for $outdir/kernel-$arch.deb" done