termux-packages/scripts
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
..
bin feat(auto update): update packages in there build order 2022-05-07 21:23:32 +05:30
build termux_step_configure_cmake: Revert CMAKE_INSTALL_LIBDIR old behaviour changed in 2af00064 2022-07-28 15:27:20 +05:00
updates refactor: update @MrAdityaAlok email address 2022-05-10 00:15:34 +05:30
utils/docker fix(run-docker.sh): Fix docker exec not passing kill signals (ctrl+c) to commands in some cases leaving processes still running 2022-07-28 15:27:20 +05:00
Dockerfile chore(scripts/Dockerfile): update comments about build/push 2022-07-23 13:35:31 +03:00
Vagrantfile Vagrantfile: update to newer Ubuntu LTS 2021-01-27 10:26:12 +05:30
aptly_api.sh Revert "revertme,ci(aptly_api): hardcode proxy-ip to use for deb uploads" 2022-06-18 19:08:38 +02:00
build-bootstraps.sh Added(scripts): Add build-bootstrap.sh 0.1.0 2022-02-08 08:11:53 +05:00
buildorder.py scripts(buildorder.py): make it possible to ./build-all.sh again 2022-06-18 21:50:23 +02:00
check-built-packages.py scripts,ci(*): use termux.dev instead of termux.org 2022-07-02 10:41:16 +02:00
check-versions.sh No backticks 2019-02-15 18:01:09 +02:00
config.guess Update to latest config.{guess,sub} 2017-01-18 01:02:18 +01:00
config.sub Update to latest config.{guess,sub} 2017-01-18 01:02:18 +01:00
generate-bootstraps.sh scripts,ci(*): use termux.dev instead of termux.org 2022-07-02 10:41:16 +02:00
get_hash_from_file.py get_hash_from_file.py: ignore Packages.gz/bz2 in Release file 2022-07-11 10:55:57 +02:00
lint-packages.sh CI: specify distribution in repo.json as well 2022-04-20 16:37:36 +02:00
list-packages.sh No backticks 2019-02-15 18:01:09 +02:00
list-versions.sh list-versions.sh: use proper way to get path to ./scripts/properties.sh 2020-10-30 21:31:48 +02:00
profile.json profile.json: update to e258d66f17 2022-07-26 15:57:12 +08:00
properties.sh fix(build-package.sh): Do not use dependencies while building from repo if it hosts packages built for a different package name than TERMUX_APP_PACKAGE 2022-07-28 15:27:20 +05:00
run-docker.ps1 enhance(scripts): use GitHub package registry for Docker image 2022-07-23 00:19:08 +03:00
run-docker.sh fix(run-docker.sh): Fix docker exec not passing kill signals (ctrl+c) to commands in some cases leaving processes still running 2022-07-28 15:27:20 +05:00
setup-android-sdk.sh ci(setup-android-sdk.sh): update to ndk r23c 2022-06-23 20:29:28 +02:00
setup-archlinux.sh setup-archlinux: aerc needs scdoc 2021-09-17 11:06:53 +02:00
setup-offline-bundle.sh upgpkg(swift): 5.6.1 to 5.6.2 2022-06-16 21:31:13 +05:30
setup-termux.sh setup-termux.sh: Install package jq and binutils-is-llvm 2022-05-19 11:30:08 +05:30
setup-ubuntu.sh enhance(scripts/Dockerfile): upgrade ubuntu version 2022-07-23 13:35:31 +03:00
test-runner.sh Shell script compliance 2019-02-15 18:01:09 +02:00
update-docker.ps1 enhance(scripts): use GitHub package registry for Docker image 2022-07-23 00:19:08 +03:00
update-docker.sh enhance(scripts): use GitHub package registry for Docker image 2022-07-23 00:19:08 +03:00