Skip to content

Commit 6bf805d

Browse files
authored
Merge pull request #78 from dalehamel/update-fetch-headers
feat: Update linux header fetching script
2 parents d03517f + 50f3f6d commit 6bf805d

File tree

1 file changed

+45
-39
lines changed

1 file changed

+45
-39
lines changed

build/init/fetch-linux-headers.sh

+45-39
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,126 @@
11
#!/bin/bash
22

3-
set -x
3+
set -ex
44

55
LSB_FILE="/etc/lsb-release.host"
66
OS_RELEASE_FILE="/etc/os-release.host"
77
TARGET_DIR="/usr/src"
88
HOST_MODULES_DIR="/lib/modules.host"
99

10+
KERNEL_VERSION="${KERNEL_VERSION:-$(uname -r)}"
11+
1012
generate_headers()
1113
{
1214
echo "Generating kernel headers"
13-
cd ${BUILD_DIR}
15+
16+
cd "${BUILD_DIR}"
1417
zcat /proc/config.gz > .config
1518
make ARCH=x86 oldconfig > /dev/null
1619
make ARCH=x86 prepare > /dev/null
1720

1821
# Clean up abundant non-header files to speed-up copying
19-
find ${BUILD_DIR} -regex '.*\.c\|.*\.txt\|.*Makefile\|.*Build\|.*Kconfig' -type f -delete
22+
find "${BUILD_DIR}" -regex '.*\.c\|.*\.txt\|.*Makefile\|.*Build\|.*Kconfig' -type f -delete
2023
}
2124

2225
fetch_cos_linux_sources()
2326
{
2427
echo "Fetching upstream kernel sources."
25-
mkdir -p ${BUILD_DIR}
26-
curl -s "https://storage.googleapis.com/cos-tools/${BUILD_ID}/kernel-src.tar.gz" | tar -xzf - -C ${BUILD_DIR}
28+
mkdir -p "${BUILD_DIR}"
29+
curl -s "https://storage.googleapis.com/cos-tools/${BUILD_ID}/kernel-src.tar.gz" \
30+
| tar -xzf - -C "${BUILD_DIR}"
2731
}
2832

2933
fetch_generic_linux_sources()
3034
{
31-
kernel_version=$(uname -r | tr -d '+')
32-
major_version=$(echo ${kernel_version} | cut -d . -f 1)
33-
echo "Fetching upstream kernel sources for ${kernel_version}."
34-
mkdir -p ${BUILD_DIR}
35-
curl -sL https://www.kernel.org/pub/linux/kernel/v${major_version}.x/linux-$kernel_version.tar.gz | tar --strip-components=1 -xzf - -C ${BUILD_DIR}
35+
kernel_version="$(echo "${KERNEL_VERSION}" | awk -vFS=+ '{ print $1 }')"
36+
major_version="$(echo "${KERNEL_VERSION}" | awk -vFS=. '{ print $1 }')"
3637

38+
echo "Fetching upstream kernel sources for ${kernel_version}."
39+
mkdir -p "${BUILD_DIR}"
40+
curl -sL "https://www.kernel.org/pub/linux/kernel/v${major_version}.x/linux-$kernel_version.tar.gz" \
41+
| tar --strip-components=1 -xzf - -C "${BUILD_DIR}"
3742
}
3843

3944
install_cos_linux_headers()
4045
{
41-
if grep -q CHROMEOS_RELEASE_VERSION ${LSB_FILE};then
42-
BUILD_ID=$(grep CHROMEOS_RELEASE_VERSION ${LSB_FILE} | cut -d = -f 2)
46+
if grep -q CHROMEOS_RELEASE_VERSION "${LSB_FILE}" >/dev/null; then
47+
BUILD_ID=$(awk '/CHROMEOS_RELEASE_VERSION =/ { print $3 }' "${LSB_FILE}")
4348
BUILD_DIR="/linux-lakitu-${BUILD_ID}"
4449
SOURCES_DIR="${TARGET_DIR}/linux-lakitu-${BUILD_ID}"
4550

46-
if [ ! -e "${SOURCES_DIR}/.installed" ];then
51+
if [[ ! -e "${SOURCES_DIR}/.installed" ]]; then
4752
echo "Installing kernel headers for COS build ${BUILD_ID}"
4853
time fetch_cos_linux_sources
4954
time generate_headers
50-
time mv ${BUILD_DIR} ${TARGET_DIR}
55+
time rm -rf "${TARGET_DIR}${BUILD_DIR}"
56+
time mv "${BUILD_DIR}" "${TARGET_DIR}"
5157
touch "${SOURCES_DIR}/.installed"
5258
fi
5359
fi
5460
}
5561

5662
install_generic_linux_headers()
5763
{
58-
BUILD_DIR="/linux-generic-$(uname -r)"
59-
SOURCES_DIR="${TARGET_DIR}/linux-generic-$(uname -r)"
64+
BUILD_DIR="/linux-generic-${KERNEL_VERSION}"
65+
SOURCES_DIR="${TARGET_DIR}/linux-generic-${KERNEL_VERSION}"
6066

61-
if [ ! -e "${SOURCES_DIR}/.installed" ];then
67+
if [[ ! -e "${SOURCES_DIR}/.installed" ]];then
6268
echo "Installing kernel headers for generic kernel"
6369
time fetch_generic_linux_sources
6470
time generate_headers
65-
time mv ${BUILD_DIR} ${TARGET_DIR}
71+
time rm -rf "${TARGET_DIR}${BUILD_DIR}"
72+
time mv "${BUILD_DIR}" "${TARGET_DIR}"
6673
touch "${SOURCES_DIR}/.installed"
6774
fi
6875
}
6976

7077
install_headers()
7178
{
72-
distro=$(grep ^NAME ${OS_RELEASE_FILE} | cut -d = -f 2)
79+
distro="$(awk '/^NAME =/ { print $3 }' "${OS_RELEASE_FILE}")"
7380

7481
case $distro in
7582
*"Container-Optimized OS"*)
7683
install_cos_linux_headers
77-
HEADERS_TARGET=${SOURCES_DIR}
84+
HEADERS_TARGET="${SOURCES_DIR}"
7885
;;
7986
*)
8087
echo "WARNING: Cannot find distro-specific headers for ${distro}. Fetching generic headers."
8188
install_generic_linux_headers
82-
HEADERS_TARGET=${SOURCES_DIR}
89+
HEADERS_TARGET="${SOURCES_DIR}"
8390
;;
8491
esac
8592
}
8693

8794
check_headers()
8895
{
89-
modules_path=$1
90-
utsname=$(uname -r)
91-
arch=$(uname -m)
92-
kdir="${modules_path}/${utsname}"
96+
modules_path="$1"
97+
arch="$(uname -m)"
98+
kdir="${modules_path}/${KERNEL_VERSION}"
9399

94-
[ "${arch}" == "x86_64" ] && arch="x86"
100+
[[ "${arch}" == "x86_64" ]] && arch="x86"
95101

96-
[ ! -e ${kdir} ] && return 1
97-
[ ! -e "${kdir}/source" ] && [ ! -e "${kdir}/build" ] && return 1
102+
[[ ! -e "${kdir}" ]] && return 1
103+
[[ ! -e "${kdir}/source" ]] && [[ ! -e "${kdir}/build" ]] && return 1
98104

99-
header_dir=$([ -e "${kdir}/source" ] && echo "${kdir}/source" || echo "${kdir}/build")
105+
header_dir="$([[ -e "${kdir}/source" ]] && echo "${kdir}/source" || echo "${kdir}/build")"
100106

101-
[ ! -e "${header_dir}/include/linux/kconfig.h" ] && return 1
102-
[ ! -e "${header_dir}/include/generated/uapi" ] && return 1
103-
[ ! -e "${header_dir}/arch/${arch}/include/generated/uapi" ] && return 1
107+
[[ ! -e "${header_dir}/include/linux/kconfig.h" ]] && return 1
108+
[[ ! -e "${header_dir}/include/generated/uapi" ]] && return 1
109+
[[ ! -e "${header_dir}/arch/${arch}/include/generated/uapi" ]] && return 1
104110

105111
return 0
106112
}
107113

108-
if [ ! -e /lib/modules/.installed ];then
109-
if ! check_headers ${HOST_MODULES_DIR}; then
110-
install_headers
114+
if [[ ! -e /lib/modules/.installed ]]; then
115+
if check_headers "${HOST_MODULES_DIR}"; then
116+
HEADERS_TARGET="${HOST_MODULES_DIR}/source"
111117
else
112-
HEADERS_TARGET=${HOST_MODULES_DIR}/source
118+
install_headers
113119
fi
114120

115-
mkdir -p "/lib/modules/$(uname -r)"
116-
ln -sf ${HEADERS_TARGET} "/lib/modules/$(uname -r)/source"
117-
ln -sf ${HEADERS_TARGET} "/lib/modules/$(uname -r)/build"
121+
mkdir -p "/lib/modules/${KERNEL_VERSION}"
122+
ln -sf "${HEADERS_TARGET}" "/lib/modules/${KERNEL_VERSION}/source"
123+
ln -sf "${HEADERS_TARGET}" "/lib/modules/${KERNEL_VERSION}/build"
118124
touch /lib/modules/.installed
119125
exit 0
120126
else

0 commit comments

Comments
 (0)