Setting up linux headers for musl and golang
Example
$ ./setup_linux_headers
$ CGO_CFLAGS="-I/kernel-headers/include" CC='/usr/local/musl/bin/musl-gcc' go build -a --ldflags '-linkmode external -extldflags "-static"' main.go| #!/bin/sh | |
| set -xe | |
| # Simplified setup of linux headers, based on build from: | |
| # https://github.com/richfelker/musl-cross-make/blob/master/litecross/Makefile#L266 | |
| LINUX_SITE=https://cdn.kernel.org/pub/linux/kernel | |
| LINUX_KERNEL_VER=linux-4.4.10 | |
| KERNEL_TAR="${LINUX_KERNEL_VER}.tar.xz" | |
| ARCH=x86 | |
| HEADER_BASE_PATH=/kernel-headers | |
| mkdir -p $HEADER_BASE_PATH | |
| # Download and extract header files | |
| wget -c "${LINUX_SITE}/v4.x/${KERNEL_TAR}" | |
| tar -Jxvf $KERNEL_TAR --directory $HEADER_BASE_PATH && rm -rf $KERNEL_TAR | |
| # Install the headers | |
| cd "${HEADER_BASE_PATH}/${LINUX_KERNEL_VER}" | |
| mkdir -p /obj_kernel_headers/staged | |
| make ARCH=$ARCH O=$PWD/obj_kernel_headers INSTALL_HDR_PATH=$PWD/obj_kernel_headers/staged headers_install | |
| find $PWD/obj_kernel_headers/staged/include '(' -name .install -o -name ..install.cmd ')' -exec rm {} + | |
| # Final location for use in our apps | |
| mkdir -p $HEADER_BASE_PATH/include | |
| cp -R $PWD/obj_kernel_headers/staged/include/* $HEADER_BASE_PATH/include |