#!/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 -exu

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 silentoldconfig
		mv .config ../config
		make distclean
		wget -O .config $KERNEL_CONFIG
		sed -i s/"CONFIG_BLK_DEV_INITRD=y"/"# CONFIG_BLK_DEV_INITRD is not set"/ .config
		make -j8 all
		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-3.18.1 3.18.1 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.1.tar.xz https://raw.githubusercontent.com/coreos/coreos-overlay/463d19f583961ddf9cc89f26350af2a828a1fa82/sys-kernel/coreos-kernel/files/amd64_defconfig-3.18
# coreos_build coreos-3.18.4 3.18.4 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.4.tar.xz https://raw.githubusercontent.com/coreos/coreos-overlay/bee2fa74623b87beede7f9397cb7278e9d409049/sys-kernel/coreos-kernel/files/amd64_defconfig-3.18
# coreos_build coreos-3.18.4-2 3.18.4 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.4.tar.xz https://raw.githubusercontent.com/coreos/coreos-overlay/8b399794d0df370c6f8907c7026521621845e563/sys-kernel/coreos-kernel/files/amd64_defconfig-3.18
coreos_build coreos-3.18.6 3.18.6 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz https://raw.githubusercontent.com/coreos/coreos-overlay/b38dabe01e756f7265983d126f33b947a693091d/sys-kernel/coreos-kernel/files/amd64_defconfig-3.18
coreos_build coreos-3.19.0 3.19.0 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.tar.xz https://raw.githubusercontent.com/coreos/coreos-overlay/b70c57deb14602e7cc65a238f2b0230cd8665c94/sys-kernel/coreos-kernel/files/amd64_defconfig-3.19
coreos_build coreos-3.19.0-2 3.19.0 https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.tar.xz https://raw.githubusercontent.com/coreos/coreos-overlay/709954c8e3c14659bb5ec55b37bfed9ac5a90dd2/sys-kernel/coreos-kernel/files/amd64_defconfig-3.19

# 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
