You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.1 KiB
49 lines
1.1 KiB
3 years ago
|
#!/bin/sh -e
|
||
|
# tally up sizes of chroot's ELF binaries for squashfs tuning
|
||
|
|
||
|
# NB: it's unclear so far whether mksquashfs -sort is beneficial
|
||
|
if [ -z "$GLOBAL_SQUASHFS_SORT" -o "$GLOBAL_SQUASHFS" != "tight" ]; then
|
||
|
echo "SKIP elf-stats: looks like it's not needed" >&2
|
||
|
exit 0
|
||
|
fi
|
||
|
|
||
|
exit_handler()
|
||
|
{
|
||
|
local rc=$1
|
||
|
rm -f -- "$TMPFILE"
|
||
|
exit $rc
|
||
|
}
|
||
|
|
||
|
# it's controlled environment
|
||
|
TMPFILE="$(mktemp)"
|
||
|
|
||
|
trap 'exit_handler $?' EXIT HUP PIPE INT QUIT TERM
|
||
|
|
||
|
# a list of ELF binaries (both executables and shared libraries)
|
||
|
ELFLIST=/.our/elf.lst
|
||
|
|
||
|
cd "$WORKDIR"
|
||
|
|
||
|
# let's parallelize a bit, chroot should be on tmpfs or just-cached
|
||
|
du -bsx | cut -f1 > "$TMPFILE" &
|
||
|
|
||
|
elf="$(find {,usr/}{lib*,{,s}bin} \
|
||
|
-path lib/modules -prune -o \
|
||
|
-path usr/lib/locale -prune -o \
|
||
|
-type f \
|
||
|
| file -nN -e ascii -e compress -e tar -e elf -f - \
|
||
|
| sed -n "/: ELF /s/: .*$//p" \
|
||
|
| tee "$ELFLIST.in" \
|
||
|
| tr '\n' '\0' \
|
||
|
| du -cb --files0-from=- \
|
||
|
| tail -1 \
|
||
|
| cut -f1)"
|
||
|
|
||
|
wait
|
||
|
read root < "$TMPFILE"
|
||
|
|
||
|
echo "** live chroot ELF ratio: $((100*$elf/$root))% ($elf/$root)" >&2
|
||
|
|
||
|
# add priorities
|
||
|
sed 's,^.*$,& 1,' < "$ELFLIST.in" > "$ELFLIST"
|