-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathkernel_build.sh
executable file
·148 lines (126 loc) · 4.15 KB
/
kernel_build.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#!/bin/bash
#set -x
if [ "$1" == "skipkabi" ]; then
echo "kABI check will be skipped"
fi
pwd
BRANCH=$(git branch | grep \* | cut -d ' ' -f2 | sed -r 's/[{}/]/_/g')
START=$(date +%s)
START_MRPROPER=$(date +%s)
if [ -e .config ]; then
make mrproper | tee "/tmp/${BRANCH}_make_mrproper.log"
if [ $? -ne 0 ]; then
echo "Error: make mrproper failed"
echo "[TIMER]{MRPROPER} $(( $(date +%s) - $START_MRPROPER ))s"
exit 1
fi
else
echo "no .config file found, moving on"
fi
END_MRPROPER=$(date +%s)
echo "[TIMER]{MRPROPER}: $(( $END_MRPROPER - $START_MRPROPER ))s"
ARCH=$(uname -m)
if [ "x86_64" == "${ARCH}" ] || [ "aarch64" == "${ARCH}" ]; then
VERSION=$(uname -r | cut -d '-' -f1)
echo "${ARCH} architecture detected, copying config"
if [ -f ciq/configs/kernel-${ARCH}.config ]; then
cp -v ciq/configs/kernel-${ARCH}.config .config
elif [ -f configs/kernel-${ARCH}.config ]; then
cp -v configs/kernel-${ARCH}.config .config
elif [ -f configs/kernel-${ARCH}-rhel.config ]; then
cp -v configs/kernel-${ARCH}-rhel.config .config
elif [ -f configs/kernel-${VERSION}-${ARCH}.config ]; then
cp -v configs/kernel-${VERSION}-${ARCH}.config .config
else
echo "Error: Config file not found"
exit 1
fi
else
echo "Error: Unsupported architecture"
exit 1
fi
echo "Setting Local Version for build"
sed -i_bak "s/CONFIG_LOCALVERSION=\"\"/CONFIG_LOCALVERSION=\"-${BRANCH}-$(git rev-parse --short HEAD)\"/g" .config
grep "CONFIG_LOCALVERSION=" .config
echo "Making olddefconfig"
make olddefconfig
START_BUILD=$(date +%s)
echo "Starting Build"
make -j$(nproc)
if [ $? -ne 0 ]; then
echo "Error: Build failed"
echo "[TIMER]{BUILD} $(( $(date +%s) - $START_BUILD ))s"
exit 1
fi
END_BUILD=$(date +%s)
echo "[TIMER]{BUILD}: $(( $END_BUILD - $START_BUILD ))s"
echo "Making Modules"
START_MODULES=$(date +%s)
sudo INSTALL_MOD_STRIP=1 make -j$(nproc) modules_install
if [ $? -ne 0 ]; then
echo "Error: Modules install failed"
echo "[TIMER]{MODULES} $(( $(date +%s) - $START_MODULES ))s"
exit 1
fi
END_MODULES=$(date +%s)
echo "[TIMER]{MODULES}: $(( $END_MODULES - $START_MODULES ))s"
echo "Making Install"
START_INSTALL=$(date +%s)
sudo make install
if [ $? -ne 0 ]; then
echo "Error: Install failed"
echo "[TIMER]{INSTALL} $(( $(date +%s) - $START_INSTALL ))s"
exit 1
fi
END_INSTALL=$(date +%s)
echo "[TIMER]{INSTALL}: $(( $END_INSTALL - $START_INSTALL ))s"
echo "Checking kABI"
# ../kernel-dist-git/SOURCES/check-kabi -k ../kernel-dist-git/SOURCES/Module.kabi_x86_64 -s Module.symvers || echo "kABI failed"
if [ "$1" == "skipkabi" ]; then
echo "kABI check skipped"
else
echo "Checking kABI"
KABI_CHECK=$(../kernel-dist-git/SOURCES/check-kabi -k ../kernel-dist-git/SOURCES/Module.kabi_${ARCH} -s Module.symvers)
if [ $? -ne 0 ]; then
echo "Error: kABI check failed"
exit 1
fi
echo "kABI check passed"
fi
GRUB_INFO=$(sudo grubby --info=ALL | grep -E "^kernel|^index")
AWK_RES=$(awk -F '=' -v INDEX=0 -v KERNEL="" -v FINAL_INDEX=0 -v BRANCH="${BRANCH}" \
'{if ($2 ~/^[0-9]+$/) {INDEX=$2}} {if ($2 ~BRANCH) {KERNEL=$2; FINAL_INDEX=INDEX}} END {print FINAL_INDEX" "KERNEL}' \
<<< "${GRUB_INFO}")
if [ $? -ne 0 ]; then
echo "Error: awk failed"
exit 1
fi
read -r INDEX KERNEL <<< "${AWK_RES}"
KERNEL=$(echo ${KERNEL} | sed 's/\"//g')
echo "Setting Default Kernel to ${KERNEL} and Index to ${INDEX}"
sudo grubby --set-default-index=${INDEX}
if [ $? -ne 0 ]; then
echo "Error: grubby failed"
exit 1
fi
sudo grubby --set-default=${KERNEL}
if [ $? -ne 0 ]; then
echo "Error: grubby failed"
exit 1
fi
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
if [ $? -ne 0 ]; then
echo "Error: grub2-mkconfig failed"
exit 1
fi
echo "Hopefully Grub2.0 took everything ... rebooting after time metrices"
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "[TIMER]{MRPROPER}: $(( $END_MRPROPER - $START_MRPROPER ))s"
echo "[TIMER]{BUILD}: $(( $END_BUILD - $START_BUILD ))s"
echo "[TIMER]{MODULES}: $(( $END_MODULES - $START_MODULES ))s"
echo "[TIMER]{INSTALL}: $(( $END_INSTALL - $START_INSTALL ))s"
echo "[TIMER]{TOTAL} ${DIFF}s"
echo "Rebooting in 10 seconds"
sleep 10
sudo reboot