Skip to content

Commit 79c0d27

Browse files
committed
Toil package builder
Introduce a toil[1]-based workflow to automate patch building for a package. [1] https://toil.readthedocs.io/ Change-Id: I7e3a11ad95781b8989d24fbf3992dcb49e4c8dba Signed-off-by: Pavel Boldin <[email protected]>
1 parent b88427b commit 79c0d27

File tree

8 files changed

+1175
-16
lines changed

8 files changed

+1175
-16
lines changed

packages/rhel7/glibc/glibc-2.17-55.el7/info

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,16 @@ _install_originals() {
7272
}
7373

7474
_run_tests() {
75-
export LD_PRELOAD=/libcare/tests/execve/execve.so
75+
if test -f $LIBCARE_DIR/execve/execve.so; then
76+
LD_PRELOAD=$LIBCARE_DIR/execve/execve.so
77+
elif test -f $LIBCARE_DIR/tests/execve/execve.so; then
78+
LD_PRELOAD=$LIBCARE_DIR/tests/execve/execve.so
79+
else
80+
echo "Can't find execve.so required to run tests"
81+
exit 1
82+
fi
83+
84+
export LD_PRELOAD
7685

7786
local ld_linux="$KP_PROJECT_BUILD_DIR/elf/ld*"
7887

@@ -110,9 +119,11 @@ kp_patch_test() {
110119
rm -f /var/run/libcare.sock
111120

112121
PATCH_ROOT=/root/${KP_PROJECT_PATCH%.*}
113-
/libcare/src/libcare-ctl -v server /var/run/libcare.sock $PATCH_ROOT \
114-
>/root/test.log 2>&1 & :
122+
$KPATCH_PATH/libcare-ctl -v server /var/run/libcare.sock $PATCH_ROOT \
123+
>/data/test.log 2>&1 & :
115124
LISTENER_PID=$!
125+
sleep 1
126+
kill -0 $LISTENER_PID
116127

117128
pushd $KP_PROJECT_BUILD_DIR
118129

@@ -123,11 +134,11 @@ kp_patch_test() {
123134

124135
popd
125136

126-
local patched=$(awk '/kpatch_ctl targeting/ { n++ } END { print n }' /root/test.log)
137+
local patched=$(awk '/kpatch_ctl targeting/ { n++ } END { print n }' /data/test.log)
127138

128139
test $patched -ge $executed
129140

130-
grep -vq 'No patch(es) applicable to' /root/test.log
131-
grep 'patch hunk(s) have been successfully applied' /root/test.log \
141+
grep -vq 'No patch(es) applicable to' /data/test.log
142+
grep 'patch hunk(s) have been successfully applied' /data/test.log \
132143
| wc -l
133144
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
image: kernelcare/centos7:gcc-4.8.2-16.el7
2+
prebuild: /tmp/build.orig-glibc-2.17-55.el7.x86_64.rpm.tgz
3+
input:
4+
- package: .
5+
- patches: ../../../../patches/

scripts/pkgbuild

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,9 @@ prepare() {
5454

5555
# Export env vars that are needed during the build
5656
SCRIPTS="$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)"
57-
SPWD="$(realpath $SCRIPTS/../)"
58-
export KPATCH_PATH=$SPWD/src
57+
LIBCARE_DIR="${LIBCARE_DIR:-$SCRIPTS/..}"
58+
KPATCH_PATH="${KPATCH_PATH:-$LIBCARE_DIR/src}"
59+
export LIBCARE_DIR KPATCH_PATH
5960
export OLDPATH=$PATH
6061
export KPATCH_PASSTHROUGH_ASM=1
6162
CPUS=`cat /proc/cpuinfo | grep ^processor | wc -l`
@@ -130,18 +131,20 @@ kp_prepare_source_deb() {
130131
}
131132

132133
kp_prepare_source() {
133-
echo " downloading source for $KP_PROJECT"
134-
kp_download_source_$KP_PROJECT_FORMAT
134+
if ! test -f /kcdata/$KP_PROJECT_SOURCE; then
135+
echo " downloading source for $KP_PROJECT"
136+
kp_download_source_$KP_PROJECT_FORMAT
137+
fi
135138
echo " preparing source for $KP_PROJECT"
136139
kp_prepare_source_$KP_PROJECT_FORMAT
137140
}
138141

139142
kp_patch_source() {
140143
echo " patching project"
141-
PATCH_DIR=$SPWD/patches
144+
PATCH_DIR=$LIBCARE_DIR/patches
142145
#patch_list_apply requires this dir
143146
mkdir -p /tmp/build.kpatch
144-
$SPWD/scripts/patch_list_apply $KP_PROJECT_DIR $PDIR/plist $PATCH_DIR
147+
$SCRIPTS/patch_list_apply $KP_PROJECT_DIR $PDIR/plist $PATCH_DIR
145148
}
146149

147150
kp_prebuild_rpm() {
@@ -364,10 +367,10 @@ overwrite_utils() {
364367
TMPBIN=$(mktemp -d --tmpdir)
365368

366369
mkdir $TMPBIN/bin
367-
ln -fs /libcare/src/libcare-cc $TMPBIN/gcc
368-
ln -fs /libcare/src/libcare-cc $TMPBIN/cc
369-
ln -fs /libcare/src/libcare-cc $TMPBIN/g++
370-
ln -fs /libcare/src/libcare-cc $TMPBIN/c++
370+
ln -fs $KPATCH_PATH/libcare-cc $TMPBIN/gcc
371+
ln -fs $KPATCH_PATH/libcare-cc $TMPBIN/cc
372+
ln -fs $KPATCH_PATH/libcare-cc $TMPBIN/g++
373+
ln -fs $KPATCH_PATH/libcare-cc $TMPBIN/c++
371374
if ! test -x /usr/bin/g++; then
372375
rm -f $TMPBIN/g++
373376
fi
@@ -379,6 +382,11 @@ overwrite_utils() {
379382
fi
380383

381384
export PATH=$TMPBIN:$PATH
385+
386+
if test "$(command -v cc)" != "$TMPBIN/cc"; then
387+
echo "Can't install our wrappers, missing?"
388+
exit 1
389+
fi
382390
}
383391

384392
kp_patch_test() {

scripts/toil/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is where [toil](https://toil.readthedocs.io/)-based scripts do live.

scripts/toil/build-patch.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/bin/sh -e
2+
3+
exec 1>&2
4+
5+
ln -fs /data /kcdata
6+
7+
ls -lR /data
8+
9+
yum install -y rpm-build
10+
11+
LIBCARE_DIR="/data"
12+
KPATCH_PATH="/data/src"
13+
export LIBCARE_DIR KPATCH_PATH
14+
make -C $KPATCH_PATH clean all
15+
make -C /data/execve clean all
16+
17+
/kcdata/scripts/pkgbuild $@ /kcdata/package
18+
ls /kcdata -lR

0 commit comments

Comments
 (0)