#!/bin/bash
#
# This script builds a precompiled version of sysdig-probe for a bunch of kernels
# The precompiled binary is then obtained at runtime by sysdig-probe-loader
# Ideally, the community should expand this stuff with better support
#
set -exuo pipefail

SYSDIG_VERSION=$1
REPOSITORY_NAME=$2
BASEDIR=$(pwd)
ARCH=$(uname -m)

rm -rf $BASEDIR/output || true
mkdir $BASEDIR/output

function build_sysdig {
	if [ ! -f $SYSDIG_VERSION.tar.gz ]; then
		wget https://github.com/draios/sysdig/archive/$SYSDIG_VERSION.tar.gz
	fi

	rm -rf sysdig-$SYSDIG_VERSION
	tar zxf $SYSDIG_VERSION.tar.gz
	cd sysdig-$SYSDIG_VERSION
	mkdir build
	cd build
	cmake -DCMAKE_BUILD_TYPE=Release -DSYSDIG_VERSION=$SYSDIG_VERSION ..
	make driver
	strip -g driver/sysdig-probe.ko
	cp driver/sysdig-probe.ko $BASEDIR/output/sysdig-probe-$SYSDIG_VERSION-$ARCH-$KERNEL_RELEASE-$HASH.ko
	cd $BASEDIR
}

function coreos_build {
	CONFIGURATION_NAME=$1
	KERNEL_RELEASE=$2
	KERNEL_URL=$3
	KERNEL_CONFIG=$4

	TGZ_NAME=$(echo $KERNEL_URL | awk -F"/" '{print $NF }')
	DIR_NAME=$(echo $TGZ_NAME | sed 's/.tar.xz//')

	if [ ! -d $CONFIGURATION_NAME ]; then
		mkdir $CONFIGURATION_NAME
	fi

	cd $CONFIGURATION_NAME

	if [ ! -f $TGZ_NAME ]; then
		wget $KERNEL_URL
	fi

	if [ ! -d $DIR_NAME ]; then
		tar xf $TGZ_NAME
		cd $DIR_NAME
		make distclean
		wget -O .config $KERNEL_CONFIG
		make modules_prepare
		mv .config ../config
		cd ..
	fi

	HASH=$(md5sum config | cut -d' ' -f1)

	cd $BASEDIR

	export KERNELDIR=$BASEDIR/$CONFIGURATION_NAME/$DIR_NAME
	build_sysdig
}

function ubuntu_build {
	KERNEL_RELEASE=$1
	IMAGE_URL=$2
	HEADERS_GENERIC_URL=$3
	HEADERS_URL=$4

	IMAGE_NAME=$(echo $IMAGE_URL | awk -F"/" '{print $NF }')
	HEADERS_GENERIC_NAME=$(echo $HEADERS_GENERIC_URL | awk -F"/" '{print $NF }')
	HEADERS_NAME=$(echo $HEADERS_URL | awk -F"/" '{print $NF }')

	if [ ! -f $IMAGE_NAME ]; then
		wget $IMAGE_URL
	fi

	if [ ! -f $HEADERS_GENERIC_NAME ]; then
		wget $HEADERS_GENERIC_URL
	fi

	if [ ! -f $HEADERS_NAME ]; then
		wget $HEADERS_URL
	fi

	if [ ! -d $KERNEL_RELEASE ]; then
		dpkg -x $IMAGE_NAME $KERNEL_RELEASE
		dpkg -x $HEADERS_GENERIC_NAME $KERNEL_RELEASE
		dpkg -x $HEADERS_NAME $KERNEL_RELEASE
	fi

	HASH=$(md5sum $KERNEL_RELEASE/boot/config-$KERNEL_RELEASE | cut -d' ' -f1)

	export KERNELDIR=$BASEDIR/$KERNEL_RELEASE/usr/src/linux-headers-$KERNEL_RELEASE
	build_sysdig
}

function rhel_build {
	KERNEL_RELEASE=$1
	IMAGE_NAME=$2
	HEADERS_NAME=$3

	if [ ! -f $IMAGE_NAME ]; then
		exit 1
	fi

	if [ ! -f $HEADERS_NAME ]; then
		exit 1
	fi

	if [ ! -d $KERNEL_RELEASE ]; then
		mkdir $KERNEL_RELEASE
		cd $KERNEL_RELEASE
		rpm2cpio ../$IMAGE_NAME | cpio -idmv
		rpm2cpio ../$HEADERS_NAME | cpio -idmv
		cd ..
	fi

	HASH=$(md5sum $KERNEL_RELEASE/boot/config-$KERNEL_RELEASE | cut -d' ' -f1)

	export KERNELDIR=$BASEDIR/$KERNEL_RELEASE/usr/src/kernels/$KERNEL_RELEASE
	build_sysdig
}

coreos_build coreos-591.0.0 3.18.6 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz https://transfer.sh/1fXwY5/config-591.0.0-3.18.6
coreos_build coreos-612.0.0 3.19.0 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.tar.xz https://transfer.sh/XjDFm/config-612.0.0-3.19.0
# 612.1.0
# 640.0.0
# 647.0.0
# 647.2.0
# 653.0.0
coreos_build coreos-3.19.3 3.19.3 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.3.tar.xz https://transfer.sh/1h437T/config
coreos_build coreos-660.0.0 4.0.0 https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.tar.xz https://transfer.sh/AiIyx/config-660.0.0-4.0.0
coreos_build coreos-4.0.1 4.0.1 https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.1.tar.xz https://transfer.sh/hYZUf/config
# 668.2.0
# 668.3.0
coreos_build coreos-675.0.0 4.0.1 https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.1.tar.xz https://transfer.sh/eNVfw/config-675.0.0-4.0.1
coreos_build coreos-4.0.3 4.0.3 https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.0.3.tar.xz https://transfer.sh/kapRQ/config
# 681.0.0
# 695.0.0

# ubuntu_build 3.13.0-43-generic http://mirrors.us.kernel.org/ubuntu/pool/main/l/linux/linux-image-3.13.0-43-generic_3.13.0-43.72_amd64.deb http://mirrors.us.kernel.org/ubuntu/pool/main/l/linux/linux-headers-3.13.0-43-generic_3.13.0-43.72_amd64.deb http://mirrors.us.kernel.org/ubuntu/pool/main/l/linux/linux-headers-3.13.0-43_3.13.0-43.72_all.deb
# ubuntu_build 3.13.0-44-generic http://mirrors.us.kernel.org/ubuntu/pool/main/l/linux/linux-image-3.13.0-44-generic_3.13.0-44.73_amd64.deb http://mirrors.us.kernel.org/ubuntu/pool/main/l/linux/linux-headers-3.13.0-44-generic_3.13.0-44.73_amd64.deb http://mirrors.us.kernel.org/ubuntu/pool/main/l/linux/linux-headers-3.13.0-44_3.13.0-44.73_all.deb

# rhel_build 3.14.27-25.47.amzn1.x86_64 kernel-3.14.27-25.47.amzn1.x86_64.rpm kernel-devel-3.14.27-25.47.amzn1.x86_64.rpm

aws s3 cp ./output/ s3://download.draios.com/$REPOSITORY_NAME/sysdig-probe-binaries/ --recursive --acl public-read
