diff options
author | Alexander Egorenkov <egorenar-dev@posteo.net> | 2021-04-10 01:32:44 +0200 |
---|---|---|
committer | Paul Spooren <mail@aparcar.org> | 2021-05-12 11:13:53 +0200 |
commit | 1854aeec4d37079690309dec3171d0864339f73a (patch) | |
tree | ce4516c3d00abdb4484153a6c5403eff7e76bb2a /COPYING | |
parent | 6a37286c2add96dba42fdd285162228eb55a99f1 (diff) | |
download | upstream-1854aeec4d37079690309dec3171d0864339f73a.tar.gz upstream-1854aeec4d37079690309dec3171d0864339f73a.tar.bz2 upstream-1854aeec4d37079690309dec3171d0864339f73a.zip |
build: fix opkg install step for large package selection
When the list of packages to be installed in a built image exceeds a certain
number, then 'opkg install' executed for target '$(curdir)/install' in
package/Makefile fails with: /usr/bin/env: Argument list too long.
On Linux, the length of a command-line parameter is limited by
MAX_ARG_STRLEN to max 128 kB.
* https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/binfmts.h#L15
* https://www.in-ulm.de/~mascheck/various/argmax/
To solve the problem, store the package list being passed to 'opkg install'
in a temporary file and use the shell command substitution to pass the
content of the file to 'opkg install'. This guarantees that the length of
the command-line parameters passed to the bash shell is short.
The following bash script demonstrates the problem:
----------------------------------------------------------------------------
count=${1:-1000}
FILES=""
a_file="/home/egorenar/Repositories/openwrt-rel/bin/targets/alpine/generic/packages/base-files_1414-r16464+19-e887049fbb_arm_cortex-a15_neon-vfpv4.ipk"
for i in $(seq 1 $count); do
FILES="$FILES $a_file"
done
env bash -c "echo $FILES >/dev/null"
echo "$FILES" | wc -c
----------------------------------------------------------------------------
Test run:
----------------------------------------------------------------------------
$ ./test.sh 916
130989
$ ./test.sh 917
./test.sh: line 14: /bin/env: Argument list too long
131132
----------------------------------------------------------------------------
Signed-off-by: Alexander Egorenkov <egorenar-dev@posteo.net>
[reword commit subject]
Signed-off-by: Paul Spooren <mail@aparcar.org>
Diffstat (limited to 'COPYING')
0 files changed, 0 insertions, 0 deletions