29 Commits

Author SHA1 Message Date
agnostic-apollo
7b9b9b6224 fix(run-docker.sh): Fix docker exec not passing kill signals (ctrl+c) to commands in some cases leaving processes still running
If `--tty` is not passed to `docker exec` because stdout is not available (`[ ! -t 1 ]`), like due to redirection to file (`&> build.log`) or if stdin is not available (`< /dev/null`), then docker does not forward kill signals to the process started and they remain running.

To fix the issue, the `DOCKER_EXEC_PID_FILE_PATH` env variable with the value `/tmp/docker-exec-pid-<timestamp>` is passed to the process called with `docke exec` and the process started stores its pid in the file path passed. Traps are set in `run-docker.sh` that runs the `docker exec` command to receive any kills signals, and if it does, it runs another `docker exec` command to read the pid of the process previously started from `DOCKER_EXEC_PID_FILE_PATH` and then kills it and all its children.

See Also:

https://github.com/docker/cli/issues/2607
https://github.com/moby/moby/issues/9098
https://github.com/moby/moby/pull/41548
https://stackoverflow.com/questions/41097652/how-to-fix-ctrlc-inside-a-docker-container

Also passing `--init` to `docker run` to "Run an init inside the container that forwards signals and reaps processes", although it does not work for above cases, but may helpful in others. The `--init` flag changes will only engage on new container creation.

https://docs.docker.com/engine/reference/run/#specify-an-init-process

https://docs.docker.com/engine/reference/commandline/run/

```
./scripts/run-docker.sh ./build-package.sh -f libjpeg-turbo  &> build.log
^C
$ ./scripts/run-docker.sh ps -efww
Running container 'termux-package-builder' from image 'termux/package-builder'...
UID          PID    PPID  C STIME TTY          TIME CMD
builder        1       0  0 05:48 pts/0    00:00:00 bash
builder     9243       0  0 06:01 pts/1    00:00:00 bash
builder    28127       0  0 06:12 ?        00:00:00 /bin/bash ./build-package.sh -f libjpeg-turbo
builder    28141   28127  0 06:12 ?        00:00:00 /bin/bash ./build-package.sh -f libjpeg-turbo
builder    28449   28141  1 06:12 ?        00:00:00 ninja -w dupbuild=warn -j 8
builder    28656   28449  0 06:12 ?        00:00:00 /bin/sh -c /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28657   28656 79 06:12 ?        00:00:01 /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28694   28449  0 06:12 ?        00:00:00 /bin/sh -c /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28695   28694 89 06:12 ?        00:00:00 /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28728   28449  0 06:12 ?        00:00:00 /bin/sh -c /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28729   28728  0 06:12 ?        00:00:00 /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28731   28449  0 06:12 ?        00:00:00 /bin/sh -c /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28734   28731  0 06:12 ?        00:00:00 /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28740   28449  0 06:12 ?        00:00:00 /bin/sh -c /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28741   28740  0 06:12 ?        00:00:00 /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28744       0  0 06:12 pts/2    00:00:00 ps -efww
builder    28748   28449  0 06:12 ?        00:00:00 /bin/sh -c /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28752   28748  0 06:12 ?        00:00:00 /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28753   28449  0 06:12 ?        00:00:00 /bin/sh -c /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28754   28753  0 06:12 ?        00:00:00 /home/builder/.termux-build/_cache/android-r23c-api-24-v0/bin/clang
builder    28755   28449  0 06:12 ?        00:00:00 ninja -w dupbuild=warn -j 8
$ ./scripts/run-docker.sh ./build-package.sh -f libjpeg-turbo  &> build.log
$ ./scripts/run-docker.sh ./build-package.sh -f libjpeg-turbo
Running container 'termux-package-builder' from image 'termux/package-builder'...
ERROR: Another build is already running within same environment.
```
2022-07-28 15:27:20 +05:00
Uchiha Kakashi
c2ade8c29a run-docker.sh: update user id
Since c4041bcf45, we have changed the default user id of builder from 1000 to 1001.
2022-07-23 10:29:54 +08:00
Leonid Pliushch
dc3869ad37 enhance(scripts): use GitHub package registry for Docker image
Should provide better (maybe) download speed when using GitHub Actions.
2022-07-23 00:19:08 +03:00
Jia Yuan Lo
16d890f323 enhance(run-docker.sh): add support for Fedora 2022-07-15 22:12:05 +08:00
Chongyun Lee
9eb2d6d13e run-docker.sh: Use a custom seccomp profile which allows the personality system call. 2022-04-25 10:09:50 +02:00
Leonid Pliushch
0a299dc780 run-docker.sh: don't rely on GITHUB_EVENT_PATH when checking for tty 2021-07-27 19:15:35 +03:00
Leonid Pliushch
719957fa2a Revert "fix" for curl in Github Actions
It doesn't work.
2021-05-26 16:45:50 +03:00
Henrik Grimler
e006976832 run-docker.sh: set GITHUB_ACTIONS to false if not set
To prevent error when building locally:
./scripts/run-docker.sh: line 34: GITHUB_ACTIONS: unbound variable
2021-05-26 14:33:35 +02:00
Leonid Pliushch
86cdb09734 another attempt to fix Github Actions curl timeouts
Will run "sudo ethtool -K eth0 tx off rx off" in container before executing
build commands.

Since our build environment doesn't have ethtool installed, this will
imply rebuilding Docker image. Until that, CI builds will fail due to
missing utility.
2021-05-26 15:15:37 +03:00
Leonid Pliushch
bc20ba7e70 run-docker.sh: if $TERMUX_DOCKER_USE_SUDO is set, run docker with sudo
Not all system configurations have user being added into `docker` group.
2020-09-28 00:40:17 +03:00
Leonid Pliushch
380e6fd501 run-docker.sh: don't modify $HOME variable which is set outside 2020-06-10 15:40:08 +03:00
Leonid Pliushch
149220d89d fix unbound variable error in scripts/run-docker.sh 2020-01-23 22:25:54 +02:00
Leonid Pliushch
b6c59df765 CI: use termux/package-builder Docker image as build environment 2020-01-23 21:54:42 +02:00
Leonid Pliushch
7c764b989b run-docker.sh: allow to set custom image via environment variable 2019-08-02 17:39:27 +03:00
Leonid Pliushch
03fcde2750 scripts/run-docker.sh: use sudo for privileged operations (when changing uid/gid) 2019-02-25 02:12:51 +02:00
Wetitpig
45eb50aa77 Remove relevant instructions 2019-02-24 21:08:38 +02:00
Wetitpig
d50c847f11 Shell script compliance 2019-02-15 18:01:09 +02:00
Fredrik Fornwall
76727af5e5 Fix mac error in scripts/run-docker.sh 2018-09-11 22:32:58 +02:00
Fredrik Fornwall
7634072451 run-docker.sh: Allow multiple containers
By defining CONTAINER_NAME one can now build from multiple containers:

    CONTAINER_NAME=builder1 ./scripts/run-docker.sh
    CONTAINER_NAME=builder2 ./scripts/run-docker.sh
    ...
2018-07-23 01:34:06 +02:00
Henrik Grimler
3c634e4903 Docker: login as "builder" even if run-docker.sh is run as root.
Running with sudo otherwise produces debs that normal users don't have
permission to access.
2017-07-22 18:52:08 +02:00
Fredrik Fornwall
bf74a80eac run-docker.sh: Work around mac readlink 2017-07-15 11:37:17 +02:00
olg
09c5e72a9a Fix the uid in the docker container, but only when needed and make the bind mount work for arbitrary pwd... 2017-07-15 11:20:05 +02:00
hacknox
3ac5e56343 Use $HOME replace home path 2017-07-15 11:20:05 +02:00
hacknox
36eeaeec1b Fix root user $HOME path 2017-07-15 11:20:05 +02:00
hacknox
b21d9e3343 fix docker volume read/write permission 2017-07-15 11:20:05 +02:00