Skip to content

Commit e4e2f43

Browse files
authored
Merge pull request #92 from krallin/muslc-binaries
Build musl-based binaries
2 parents eb3987c + 540eb7b commit e4e2f43

File tree

6 files changed

+41
-20
lines changed

6 files changed

+41
-20
lines changed

.travis.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ language: generic
55

66
env:
77
matrix:
8+
- CC=gcc ARCH_SUFFIX= ARCH_NATIVE=1 MINIMAL=
89
- CC=gcc ARCH_SUFFIX=amd64 ARCH_NATIVE=1 MINIMAL=
910
- CC=arm-linux-gnueabihf-gcc ARCH_SUFFIX=armhf ARCH_NATIVE= MINIMAL=
1011
- CC=aarch64-linux-gnu-gcc ARCH_SUFFIX=arm64 ARCH_NATIVE= MINIMAL=
1112
- CFLAGS="-m32" ARCH_SUFFIX=i386 ARCH_NATIVE= MINIMAL=
13+
- CC=musl-gcc ARCH_SUFFIX=muslc-amd64 ARCH_NATIVE=1 MINIMAL=
1214
- CC=gcc ARCH_SUFFIX=amd64 ARCH_NATIVE=1 MINIMAL=1
1315
global:
1416
- SIGN_BINARIES=1

ci/install_deps.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ DEPS=(
99
hardening-includes gnupg
1010
)
1111

12-
if [[ "$ARCH_SUFFIX" = "amd64" ]]; then
12+
if [[ -z "${ARCH_SUFFIX-}" ]] || [[ "$ARCH_SUFFIX" = "amd64" ]]; then
1313
true
1414
elif [[ "$ARCH_SUFFIX" = "armhf" ]]; then
1515
DEPS+=(gcc-arm-linux-gnueabihf binutils-arm-linux-gnueabi libc6-dev-armhf-cross)
1616
elif [[ "$ARCH_SUFFIX" = "arm64" ]]; then
1717
DEPS+=(gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu libc6-dev-arm64-cross)
1818
elif [[ "$ARCH_SUFFIX" = "i386" ]]; then
1919
DEPS+=(libc6-dev-i386 gcc-multilib)
20+
elif [[ "$ARCH_SUFFIX" = "muslc-amd64" ]]; then
21+
DEPS+=(musl-tools)
2022
else
2123
echo "Unknown ARCH_SUFFIX=${ARCH_SUFFIX}"
2224
exit 1

ci/run_build.sh

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,14 @@ if [[ -n "${ARCH_NATIVE-}" ]]; then
136136
{
137137
! "$tini" 2>&1
138138
} | grep -q "more verbose"
139+
140+
echo "Testing $tini with: -- true (should succeed)"
141+
"${tini}" -vvv -- true
142+
143+
echo "Testing $tini with: -- -- true (should fail)"
144+
if "${tini}" -vvv -- -- true; then
145+
exit 1
146+
fi
139147
fi
140148

141149
echo "Testing ${tini} supports TINI_VERBOSITY"
@@ -164,7 +172,12 @@ if [[ -n "${ARCH_NATIVE-}" ]]; then
164172
fi
165173

166174
echo "Checking hardening on $tini"
167-
hardening-check --nopie --nostackprotector --nobindnow "${tini}"
175+
hardening_skip=(--nopie --nostackprotector --nobindnow)
176+
if [[ "$CC" == "musl-gcc" ]]; then
177+
# FORTIFY_SOURCE is a glibc thing
178+
hardening_skip=("${hardening_skip[@]}" --nofortify)
179+
fi
180+
hardening-check "${hardening_skip[@]}" "${tini}"
168181
done
169182

170183
# Quick package audit
@@ -193,7 +206,7 @@ if [[ -n "${ARCH_NATIVE-}" ]]; then
193206
export CFLAGS # We need them to build our test suite, regardless of FORCE_SUBREAPER
194207

195208
# Install test dependencies
196-
pip install psutil python-prctl bitmap
209+
CC=gcc pip install psutil python-prctl bitmap
197210

198211
# Run tests
199212
python "${SOURCE_DIR}/test/run_inner_tests.py"
@@ -218,9 +231,7 @@ for tini in tini tini-static; do
218231
to="${DIST_DIR}/${tini}-${ARCH_SUFFIX}"
219232
TINIS+=("$to")
220233
cp "${BUILD_DIR}/${tini}" "$to"
221-
fi
222-
223-
if [[ -n "${ARCH_NATIVE-}" ]]; then
234+
else
224235
to="${DIST_DIR}/${tini}"
225236
TINIS+=("$to")
226237
cp "${BUILD_DIR}/${tini}" "$to"
@@ -235,9 +246,7 @@ if [[ -n "${ARCH_NATIVE-}" ]]; then
235246
to="${DIST_DIR}/tini_${pkg_version}-${ARCH_SUFFIX}.${pkg_format}"
236247
TINIS+=("$to")
237248
cp "$src" "$to"
238-
fi
239-
240-
if [[ -n "${ARCH_NATIVE-}" ]]; then
249+
else
241250
to="${DIST_DIR}/tini_${pkg_version}.${pkg_format}"
242251
TINIS+=("$to")
243252
cp "$src" "$to"

test/run_inner_tests.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,13 @@ def main():
6161

6262

6363
# Run the signals test
64-
for signum in [signal.SIGINT, signal.SIGTERM]:
65-
print "running signal test for: {0} ({1} with env {2})".format(SIGNUM_TO_SIGNAME[signum], " ".join(target), env)
64+
for signum in [signal.SIGTERM, signal.SIGUSR1, signal.SIGUSR2]:
65+
print "running signal test for: {0} ({1} with env {2})".format(signum, " ".join(target), env)
6666
p = subprocess.Popen(target + [os.path.join(src, "test", "signals", "test.py")], env=dict(os.environ, **env))
67+
busy_wait(lambda: len(psutil.Process(p.pid).children(recursive=True)) > 1, 10)
6768
p.send_signal(signum)
6869
ret = p.wait()
69-
assert ret == -signum, "Signals test failed (ret was {0}, expected {1})".format(ret, -signum)
70+
assert ret == 128 + signum, "Signals test failed (ret was {0}, expected {1})".format(ret, 128 + signum)
7071

7172

7273
# Run the process group test

test/run_outer_tests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,17 +47,17 @@ def target():
4747
# Checks
4848
if thread.is_alive():
4949
subprocess.check_call(self.fail_cmd, **pipe_kwargs)
50-
err = Exception("Test failed with timeout!")
50+
err = Exception("Test failed with timeout!")
5151

5252
elif self.proc.returncode != retcode:
53-
err = Exception("Test failed with unexpected returncode (expected {0}, got {1})".format(retcode, self.proc.returncode))
53+
err = Exception("Test failed with unexpected returncode (expected {0}, got {1})".format(retcode, self.proc.returncode))
5454

5555
if err is not None:
5656
print "FAIL"
5757
print "--- STDOUT ---"
58-
print self.stdout
58+
print getattr(self, "stdout", "no stdout")
5959
print "--- STDERR ---"
60-
print self.stderr
60+
print getattr(self, "stderr", "no stderr")
6161
print "--- ... ---"
6262
raise err
6363
else:
@@ -146,7 +146,7 @@ def main():
146146
Command(functional_base_cmd + ["/tini/test/reaping/stage_1.py"], fail_cmd).run(timeout=10)
147147

148148
# Signals test
149-
for sig, retcode in [("INT", 1), ("TERM", 143)]:
149+
for sig, retcode in [("TERM", 143), ("USR1", 138), ("USR2", 140)]:
150150
Command(
151151
functional_base_cmd + ["/tini/test/signals/test.py"],
152152
fail_cmd,

test/signals/test.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
#!/usr/bin/env python
2-
import time
2+
import signal
3+
import os
4+
5+
6+
def main():
7+
signal.signal(signal.SIGTERM, signal.SIG_DFL)
8+
signal.signal(signal.SIGUSR1, signal.SIG_DFL)
9+
signal.signal(signal.SIGUSR2, signal.SIG_DFL)
10+
os.system("sleep 100")
311

412
if __name__ == "__main__":
5-
while 1:
6-
time.sleep(10)
13+
main()

0 commit comments

Comments
 (0)