mirror of
https://github.com/upx/upx.git
synced 2024-11-23 12:49:56 +00:00
all: CI and misc updates
This commit is contained in:
parent
ece5af2895
commit
b75e7687f4
5
.github/workflows/ci.yml
vendored
5
.github/workflows/ci.yml
vendored
@ -11,8 +11,8 @@ on: [push, workflow_dispatch]
|
||||
env:
|
||||
DEBIAN_FRONTEND: noninteractive
|
||||
UPX_CMAKE_BUILD_FLAGS: --verbose
|
||||
# 2023-06-27
|
||||
ZIG_DIST_VERSION: 0.11.0-dev.3859+88284c124
|
||||
# 2023-06-29
|
||||
ZIG_DIST_VERSION: 0.11.0-dev.3886+0c1bfe271
|
||||
|
||||
jobs:
|
||||
job-rebuild-and-verify-stubs:
|
||||
@ -144,6 +144,7 @@ jobs:
|
||||
run: |
|
||||
# testsuite needs working "readlink -en" and "sha256sum"
|
||||
if ! test -e /usr/local/opt/coreutils/libexec/gnubin/readlink; then
|
||||
echo "===== brew leaves:"; brew leaves; echo "===== brew list:"; brew list
|
||||
brew update
|
||||
brew install coreutils
|
||||
fi
|
||||
|
50
.github/workflows/test-alpine-linux.yml
vendored
50
.github/workflows/test-alpine-linux.yml
vendored
@ -58,8 +58,10 @@ jobs:
|
||||
name: ${{ env.artifact_name }}
|
||||
path: 'upx*/build/*/upx'
|
||||
|
||||
job-alpine-by-hand: # uses shell
|
||||
# and also uses a subdirectory "upx with space" in order to detect possible quoting issues
|
||||
job-alpine-by-hand: # uses a POSIX-compliant shell
|
||||
# ...and also uses a subdirectory "upx with space" in order to detect possible quoting issues
|
||||
# ...and also uses ccache as we are running the same build-script again and again
|
||||
if: ${{ true }}
|
||||
strategy: { matrix: { container: ['alpine:3.9','alpine:edge'] } }
|
||||
name: ${{ format('gcc by-hand {0}', matrix.container) }}
|
||||
runs-on: ubuntu-latest
|
||||
@ -67,7 +69,15 @@ jobs:
|
||||
steps:
|
||||
- name: ${{ format('Install packages {0}', matrix.container) }}
|
||||
run: |
|
||||
apk update && apk upgrade && apk add bash dash g++ git mksh zsh
|
||||
# install ccache, g++, git and various POSIX shells
|
||||
shells="bash dash loksh mksh zsh"
|
||||
case ${{ matrix.container }} in
|
||||
*:edge) shells="$shells oksh yash" ;;
|
||||
esac
|
||||
echo "installing shells: $shells"
|
||||
apk update && apk upgrade && apk add ccache g++ git $shells
|
||||
# enable ccache
|
||||
echo -e "CC=ccache gcc\nCXX=ccache g++ -std=gnu++17" >> $GITHUB_ENV
|
||||
# this seems to be needed when running in a container (beause of UID mismatch??)
|
||||
git config --global --add safe.directory '*'
|
||||
- name: 'Check out code'
|
||||
@ -77,11 +87,45 @@ jobs:
|
||||
path: 'upx with space'
|
||||
- name: 'Build by-hand with bash'
|
||||
run: 'bash "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with bash --posix'
|
||||
run: 'bash --posix "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with busybox ash'
|
||||
run: 'busybox ash "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with busybox sh'
|
||||
run: 'busybox sh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with dash'
|
||||
run: 'dash "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with loksh'
|
||||
run: 'ksh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with loksh -o posix'
|
||||
run: 'ksh -o posix "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with loksh -o sh'
|
||||
run: 'ksh -o sh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with mksh'
|
||||
run: 'mksh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with mksh -o posix'
|
||||
run: 'mksh -o posix "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with mksh -o sh'
|
||||
run: 'mksh -o sh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with oksh'
|
||||
if: ${{ contains(matrix.container, ':edge') }}
|
||||
run: 'oksh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with oksh -o posix'
|
||||
if: ${{ contains(matrix.container, ':edge') }}
|
||||
run: 'oksh -o posix "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with oksh -o sh'
|
||||
if: ${{ contains(matrix.container, ':edge') }}
|
||||
run: 'oksh -o sh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with yash'
|
||||
if: ${{ contains(matrix.container, ':edge') }}
|
||||
run: 'yash "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with zsh'
|
||||
run: 'zsh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with zsh --emulate ksh'
|
||||
run: 'zsh --emulate ksh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Build by-hand with zsh --emulate sh'
|
||||
run: 'zsh --emulate sh "./upx with space/misc/scripts/build_upx_by_hand.sh"'
|
||||
- name: 'Show ccache stats'
|
||||
run: |
|
||||
ccache -s
|
||||
ccache -p
|
||||
|
4
.github/workflows/weekly-ci-zigcc.yml
vendored
4
.github/workflows/weekly-ci-zigcc.yml
vendored
@ -8,8 +8,8 @@ on:
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
# 2023-06-27
|
||||
ZIG_DIST_VERSION: 0.11.0-dev.3859+88284c124
|
||||
# 2023-06-29
|
||||
ZIG_DIST_VERSION: 0.11.0-dev.3886+0c1bfe271
|
||||
|
||||
jobs:
|
||||
job-linux-zigcc: # uses cmake + make
|
||||
|
@ -416,10 +416,6 @@ endif() # UPX_CONFIG_CMAKE_DISABLE_INSTALL
|
||||
# finally print some info about the build configuration
|
||||
#***********************************************************************
|
||||
|
||||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/maint/make/CMakeLists.maint.txt")
|
||||
include("${CMAKE_CURRENT_SOURCE_DIR}/maint/make/CMakeLists.maint.txt")
|
||||
endif()
|
||||
|
||||
function(print_var)
|
||||
foreach(v ${ARGV})
|
||||
if(${v})
|
||||
@ -427,6 +423,11 @@ function(print_var)
|
||||
endif()
|
||||
endforeach()
|
||||
endfunction()
|
||||
|
||||
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/maint/make/CMakeLists.maint.txt")
|
||||
include("${CMAKE_CURRENT_SOURCE_DIR}/maint/make/CMakeLists.maint.txt")
|
||||
endif()
|
||||
|
||||
print_var(CMAKE_VERSION UPX_CONFIG_CMAKE_MINIMUM_REQUIRED_VERSION)
|
||||
if(NOT UPX_CONFIG_CMAKE_DISABLE_PRINT_INFO)
|
||||
print_var(CMAKE_HOST_SYSTEM_NAME CMAKE_HOST_SYSTEM_VERSION)
|
||||
|
@ -6,10 +6,10 @@ argv0=$0; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"
|
||||
# create the image from Dockerfile
|
||||
# using a rootless Podman container
|
||||
|
||||
# NOTE: this image is based on rebuild-stubs-with-podman/upx-stubtools-20221212-v5,
|
||||
# NOTE: this image is based on rebuild-stubs-with-podman/upx-stubtools-20221212-v6,
|
||||
# so you have to create that image first
|
||||
# WARNING: we install many packages, so the resulting image needs A LOT of disk space!
|
||||
image=upx-cross-compile-20230115-v3
|
||||
image=upx-cross-compile-20230115-v4
|
||||
|
||||
podman build -t "$image" -f "$argv0dir/Dockerfile" "$argv0dir"
|
||||
|
||||
|
@ -6,7 +6,7 @@ argv0=$0; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"
|
||||
# list all system packages that are installed in the image
|
||||
# using a rootless Podman container
|
||||
|
||||
image=upx-cross-compile-20230115-v3
|
||||
image=upx-cross-compile-20230115-v4
|
||||
|
||||
podman image list "$image"
|
||||
echo
|
||||
|
@ -6,7 +6,7 @@ argv0=$0; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"
|
||||
# run an interactive shell in the image
|
||||
# using a rootless Podman container
|
||||
|
||||
image=upx-cross-compile-20230115-v3
|
||||
image=upx-cross-compile-20230115-v4
|
||||
|
||||
flags=( --read-only --rm --pull=never )
|
||||
flags+=( --cap-drop=all ) # drop all capabilities
|
||||
@ -23,6 +23,8 @@ if [[ 1 == 1 ]]; then
|
||||
# INFO: SELinux users *may* have to add ":z" to the volume mount flags; check the docs!
|
||||
flags+=( -v "${argv0dir}/../..:/home/upx/src/upx" )
|
||||
flags+=( -w /home/upx/src/upx ) # set working directory
|
||||
flags+=( --tmpfs /home/upx/.cache:rw,exec ) # mount a writeable tmpfs
|
||||
flags+=( --tmpfs /home/upx/.local:rw,exec ) # mount a writeable tmpfs
|
||||
else
|
||||
# run as user root 0:0
|
||||
# ONLY FOR DEBUGGING THE IMAGE
|
||||
|
@ -1,8 +1,8 @@
|
||||
# NOTE: this image is based on rebuild-stubs-with-podman/upx-stubtools-20221212-v5,
|
||||
# NOTE: this image is based on rebuild-stubs-with-podman/upx-stubtools-20221212-v6,
|
||||
# so you have to create that image first
|
||||
# WARNING: we install many packages, so the resulting image needs A LOT of disk space!
|
||||
FROM localhost/upx-stubtools-20221212-v5
|
||||
ENV UPX_CONTAINER_IMAGE_NAME=upx-cross-compile-20230115-v3
|
||||
FROM localhost/upx-stubtools-20221212-v6
|
||||
ENV UPX_CONTAINER_IMAGE_NAME=upx-cross-compile-20230115-v4
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
USER root
|
||||
|
@ -15,6 +15,7 @@ fi
|
||||
# go to upx top-level directory
|
||||
cd "$argv0dir/../.." || exit 1
|
||||
pwd
|
||||
test -f doc/upx.pod || exit 1 # sanity check
|
||||
test -f src/version.h || exit 1 # sanity check
|
||||
|
||||
function run_config_and_build {
|
||||
|
@ -41,9 +41,11 @@ ii binutils-sparc64-linux-gnu 2.38-4ubuntu2.2
|
||||
ii binutils-x86-64-linux-gnu 2.38-4ubuntu2.2 amd64 GNU binary utilities, for x86-64-linux-gnu target
|
||||
ii binutils-x86-64-linux-gnux32 2.38-4ubuntu2.2 amd64 GNU binary utilities, for x86-64-linux-gnux32 target
|
||||
ii bsdutils 1:2.37.2-4ubuntu3 amd64 basic utilities from 4.4BSD-Lite
|
||||
ii busybox 1:1.30.1-7ubuntu3 amd64 Tiny utilities for small and embedded systems
|
||||
ii bzip2 1.0.8-5build1 amd64 high-quality block-sorting file compressor - utilities
|
||||
ii ca-certificates 20230311ubuntu0.22.04.1 all Common CA certificates
|
||||
ii cabextract 1.9-3 amd64 Microsoft Cabinet file unpacker
|
||||
ii ccache 4.5.1-1 amd64 Compiler cache for fast recompilation of C/C++ code
|
||||
ii chrpath 0.16-2 amd64 Tool to edit the rpath in ELF binaries
|
||||
ii clang-14 1:14.0.0-1ubuntu1 amd64 C, C++ and Objective-C compiler
|
||||
ii clang-format-14 1:14.0.0-1ubuntu1 amd64 Tool to format C/C++/Obj-C code
|
||||
@ -166,6 +168,7 @@ ii g++-s390x-linux-gnu 4:11.2.0-1ubuntu1
|
||||
ii g++-sh4-linux-gnu 4:11.2.0--1ubuntu1 amd64 GNU C++ compiler for the sh4 architecture
|
||||
ii g++-sparc64-linux-gnu 4:11.2.0--1ubuntu1 amd64 GNU C++ compiler for the sparc64 architecture
|
||||
ii g++-x86-64-linux-gnux32 4:11.2.0--1ubuntu1 amd64 GNU C++ compiler for the x32 architecture
|
||||
ii gawk 1:5.1.0-1build3 amd64 GNU awk, a pattern scanning and processing language
|
||||
ii gcc 4:11.2.0-1ubuntu1 amd64 GNU C compiler
|
||||
ii gcc-10-cross-base-mipsen 10.3.0-1ubuntu1cross2 all GCC, the GNU Compiler Collection (library base package)
|
||||
ii gcc-10-mips-linux-gnu 10.3.0-1ubuntu1cross2 amd64 GNU C compiler (cross compiler for mips architecture)
|
||||
@ -628,6 +631,7 @@ ii libgudev-1.0-0:amd64 1:237-2build1
|
||||
ii libgudev-1.0-0:i386 1:237-2build1 i386 GObject-based wrapper library for libudev
|
||||
ii libharfbuzz0b:amd64 2.7.4-1ubuntu3.1 amd64 OpenType text shaping engine (shared library)
|
||||
ii libharfbuzz0b:i386 2.7.4-1ubuntu3.1 i386 OpenType text shaping engine (shared library)
|
||||
ii libhiredis0.14:amd64 0.14.1-2 amd64 minimalistic C client library for Redis
|
||||
ii libhogweed6:amd64 3.7.3-1build2 amd64 low level cryptographic library (public-key cryptos)
|
||||
ii libhogweed6:i386 3.7.3-1build2 i386 low level cryptographic library (public-key cryptos)
|
||||
ii libhwasan0-arm64-cross 12.1.0-2ubuntu1~22.04cross1 all AddressSanitizer -- a fast memory error detector
|
||||
@ -820,6 +824,7 @@ ii libsensors5:i386 1:3.6.0-7ubuntu1
|
||||
ii libsepol2:amd64 3.3-1build1 amd64 SELinux library for manipulating binary security policies
|
||||
ii libshout3:amd64 2.4.5-1build3 amd64 MP3/Ogg Vorbis broadcast streaming library
|
||||
ii libshout3:i386 2.4.5-1build3 i386 MP3/Ogg Vorbis broadcast streaming library
|
||||
ii libsigsegv2:amd64 2.13-1ubuntu3 amd64 Library for handling page faults in a portable way
|
||||
ii libslang2:amd64 2.3.2-5build4 amd64 S-Lang programming library - runtime version
|
||||
ii libslang2:i386 2.3.2-5build4 i386 S-Lang programming library - runtime version
|
||||
ii libslirp0:amd64 4.6.1-1build1 amd64 General purpose TCP-IP emulator library
|
||||
@ -1070,7 +1075,7 @@ ii linux-libc-dev-s390x-cross 5.15.0-22.22cross3
|
||||
ii linux-libc-dev-sh4-cross 5.15.0-22.22cross4 all Linux Kernel Headers for development (for cross-compiling)
|
||||
ii linux-libc-dev-sparc64-cross 5.15.0-22.22cross4 all Linux Kernel Headers for development (for cross-compiling)
|
||||
ii linux-libc-dev-x32-cross 5.15.0-22.22cross4 all Linux Kernel Headers for development (for cross-compiling)
|
||||
ii linux-libc-dev:amd64 5.15.0-75.82 amd64 Linux Kernel Headers for development
|
||||
ii linux-libc-dev:amd64 5.15.0-76.83 amd64 Linux Kernel Headers for development
|
||||
ii lldb-14 1:14.0.0-1ubuntu1 amd64 Next generation, high-performance debugger
|
||||
ii llvm-14 1:14.0.0-1ubuntu1 amd64 Modular compiler and toolchain technologies
|
||||
ii llvm-14-dev 1:14.0.0-1ubuntu1 amd64 Modular compiler and toolchain technologies, libraries and headers
|
||||
@ -1091,6 +1096,7 @@ ii mesa-vulkan-drivers:i386 22.2.5-0ubuntu0.1~22.04.3
|
||||
ii mingw-w64-common 8.0.0-1 all Common files for Mingw-w64
|
||||
ii mingw-w64-i686-dev 8.0.0-1 all Development files for MinGW-w64 targeting Win32
|
||||
ii mingw-w64-x86-64-dev 8.0.0-1 all Development files for MinGW-w64 targeting Win64
|
||||
ii mksh 59c-16 amd64 MirBSD Korn Shell
|
||||
ii moreutils 0.66-1 amd64 additional Unix utilities
|
||||
ii mount 2.37.2-4ubuntu3 amd64 tools for mounting and manipulating filesystems
|
||||
ii msr-tools 1.3-4 amd64 Utilities for modifying MSRs from userspace
|
||||
@ -1161,6 +1167,7 @@ ii systemd-sysv 249.11-0ubuntu3.9
|
||||
ii systemd-timesyncd 249.11-0ubuntu3.9 amd64 minimalistic service to synchronize local time with NTP servers
|
||||
ii sysvinit-utils 3.01-1ubuntu1 amd64 System-V-like utilities
|
||||
ii tar 1.34+dfsg-1ubuntu0.1.22.04.1 amd64 GNU version of the tar archiving utility
|
||||
ii time 1.9-0.1build2 amd64 GNU time program for measuring CPU resource usage
|
||||
ii ubuntu-keyring 2021.03.26 all GnuPG keys of the Ubuntu archive
|
||||
ii ubuntu-mono 20.10-0ubuntu2 all Ubuntu Mono Icon theme
|
||||
ii ucf 3.0043 all Update Configuration File(s): preserve user changes to config files
|
||||
@ -1181,6 +1188,7 @@ ii xdg-user-dirs 0.17-2ubuntu4
|
||||
ii xkb-data 2.33-1 all X Keyboard Extension (XKB) configuration data
|
||||
ii xxd 2:8.2.3995-1ubuntu2.8 amd64 tool to make (or reverse) a hex dump
|
||||
ii xz-utils 5.2.5-2ubuntu1 amd64 XZ-format compression utilities
|
||||
ii yash 2.51-1 amd64 yet another shell
|
||||
ii zip 3.0-12build2 amd64 Archiver for .zip files
|
||||
ii zlib1g-dev:amd64 1:1.2.11.dfsg-2ubuntu9.2 amd64 compression library - development
|
||||
ii zlib1g:amd64 1:1.2.11.dfsg-2ubuntu9.2 amd64 compression library - runtime
|
||||
@ -1193,7 +1201,7 @@ ii zstd 1.4.8+dfsg-3build1
|
||||
||/ Name Version Architecture Description
|
||||
|
||||
Packages sorted by Installed-Size:
|
||||
7715290 ===== TOTAL (1187 packages)
|
||||
7722308 ===== TOTAL (1195 packages)
|
||||
474522 libwine i386
|
||||
270993 llvm-14-dev amd64
|
||||
264247 qemu-efi-aarch64 all
|
||||
@ -1549,11 +1557,13 @@ Packages sorted by Installed-Size:
|
||||
1746 libunistring2 amd64
|
||||
1730 libsdl2-2.0-0 amd64
|
||||
1695 libgcc-11-dev-alpha-cross all
|
||||
1680 gawk amd64
|
||||
1655 zstd amd64
|
||||
1628 libslang2 amd64
|
||||
1602 libsqlite3-0 amd64
|
||||
1534 libcairo2 i386
|
||||
1516 e2fsprogs amd64
|
||||
1508 mksh amd64
|
||||
1487 libstdc++6-armhf-cross all
|
||||
1484 libsamplerate0 amd64
|
||||
1483 libsamplerate0 i386
|
||||
@ -1562,6 +1572,7 @@ Packages sorted by Installed-Size:
|
||||
1455 libx11-6 i386
|
||||
1445 hyperfine amd64
|
||||
1436 libobjc-11-dev amd64
|
||||
1429 yash amd64
|
||||
1429 libx11-data all
|
||||
1425 libp11-kit0 i386
|
||||
1408 llvm-14-runtime amd64
|
||||
@ -1571,6 +1582,7 @@ Packages sorted by Installed-Size:
|
||||
1373 libslang2 i386
|
||||
1354 libgcrypt20 amd64
|
||||
1351 libcairo2 amd64
|
||||
1343 ccache amd64
|
||||
1328 libzstd-dev amd64
|
||||
1292 libp11-kit0 amd64
|
||||
1285 libasound2 i386
|
||||
@ -1619,6 +1631,7 @@ Packages sorted by Installed-Size:
|
||||
806 libsoup2.4-1 i386
|
||||
794 rsync amd64
|
||||
793 libbrotli1 i386
|
||||
791 busybox amd64
|
||||
787 libcurl4 amd64
|
||||
784 libbrotli1 amd64
|
||||
783 libcups2 amd64
|
||||
@ -2035,6 +2048,7 @@ Packages sorted by Installed-Size:
|
||||
130 dbus-user-session amd64
|
||||
128 libtasn1-6 i386
|
||||
128 libdrm2 amd64
|
||||
126 time amd64
|
||||
125 libmpc3 amd64
|
||||
125 libitm1-alpha-cross all
|
||||
123 libtimedate-perl all
|
||||
@ -2103,6 +2117,7 @@ Packages sorted by Installed-Size:
|
||||
94 libcairo-gobject2 i386
|
||||
93 libsasl2-modules-db amd64
|
||||
92 libsasl2-modules-db i386
|
||||
92 libhiredis0.14 amd64
|
||||
92 libgsm1 i386
|
||||
92 libgcc-s1-sparc64-cross all
|
||||
92 libgcc-s1-riscv64-cross all
|
||||
@ -2206,6 +2221,7 @@ Packages sorted by Installed-Size:
|
||||
50 libkeyutils1 i386
|
||||
50 glib-networking-services amd64
|
||||
50 gcc amd64
|
||||
49 libsigsegv2 amd64
|
||||
48 libxtst6 amd64
|
||||
48 libatomic1-armel-cross all
|
||||
48 glib-networking-common all
|
||||
|
@ -6,7 +6,7 @@ argv0=$0; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"
|
||||
# create the image from Dockerfile
|
||||
# using a rootless Podman container
|
||||
|
||||
image=upx-stubtools-20221212-v5
|
||||
image=upx-stubtools-20221212-v6
|
||||
|
||||
podman build -t "$image" -f "$argv0dir/Dockerfile" "$argv0dir"
|
||||
|
||||
|
@ -6,7 +6,7 @@ argv0=$0; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"
|
||||
# list all system packages that are installed in the image
|
||||
# using a rootless Podman container
|
||||
|
||||
image=upx-stubtools-20221212-v5
|
||||
image=upx-stubtools-20221212-v6
|
||||
|
||||
podman image list "$image"
|
||||
echo
|
||||
|
@ -6,7 +6,7 @@ argv0=$0; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"
|
||||
# run an interactive shell in the image
|
||||
# using a rootless Podman container
|
||||
|
||||
image=upx-stubtools-20221212-v5
|
||||
image=upx-stubtools-20221212-v6
|
||||
|
||||
flags=( --read-only --rm --pull=never )
|
||||
flags+=( --cap-drop=all ) # drop all capabilities
|
||||
@ -23,6 +23,8 @@ if [[ 1 == 1 ]]; then
|
||||
# INFO: SELinux users *may* have to add ":z" to the volume mount flags; check the docs!
|
||||
flags+=( -v "${argv0dir}/../..:/home/upx/src/upx" )
|
||||
flags+=( -w /home/upx/src/upx ) # set working directory
|
||||
flags+=( --tmpfs /home/upx/.cache:rw,exec ) # mount a writeable tmpfs
|
||||
flags+=( --tmpfs /home/upx/.local:rw,exec ) # mount a writeable tmpfs
|
||||
else
|
||||
# run as user root 0:0
|
||||
# ONLY FOR DEBUGGING THE IMAGE
|
||||
|
@ -1,5 +1,5 @@
|
||||
FROM docker.io/library/ubuntu:22.04
|
||||
ENV UPX_CONTAINER_IMAGE_NAME=upx-stubtools-20221212-v5
|
||||
ENV UPX_CONTAINER_IMAGE_NAME=upx-stubtools-20221212-v6
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
ENV LANG=C.UTF-8
|
||||
|
||||
@ -7,16 +7,16 @@ ENV LANG=C.UTF-8
|
||||
RUN dpkg --add-architecture i386 \
|
||||
&& apt-get update && apt-get upgrade -y \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
aria2 bash-completion ca-certificates git less libmpc3 libncurses5 \
|
||||
make ncurses-term perl-base python2-minimal wget xz-utils \
|
||||
aria2 bash bash-completion ca-certificates dash git less libmpc3 libncurses5 \
|
||||
make ncurses-term perl-base python2-minimal time wget xz-utils \
|
||||
libc6:i386 zlib1g:i386 \
|
||||
# the following packages are not required for rebuilding the stubs, but
|
||||
# they do make the image much more convenient and also allow building
|
||||
# they do make the image *much* more convenient and also allow building
|
||||
# the full UPX binary inside the container via CMake:
|
||||
7zip bfs bzip2 cabextract chrpath cmake cpio curl elfutils fd-find file fzf g++ gdb gojq \
|
||||
ht htop hyperfine jq libzstd-dev lsb-release lz4 lzip lzop moreutils ninja-build \
|
||||
p7zip parallel patch patchelf pax-utils paxctl re2c ripgrep rsync \
|
||||
screen universal-ctags unzip vim zip zlib1g-dev zsh zstd \
|
||||
7zip bfs busybox bzip2 cabextract ccache chrpath cmake cpio curl elfutils fd-find file fzf \
|
||||
g++ gawk gdb gojq ht htop hyperfine jq libzstd-dev lsb-release lz4 lzip lzop \
|
||||
mksh moreutils ninja-build p7zip parallel patch patchelf pax-utils paxctl \
|
||||
re2c ripgrep rsync screen universal-ctags unzip vim yash zip zlib1g-dev zsh zstd \
|
||||
# extra packages for compiling with "gcc -m32" and and "gcc -mx32":
|
||||
g++-multilib gcc-multilib \
|
||||
&& true
|
||||
@ -52,8 +52,12 @@ RUN cd /root \
|
||||
|
||||
# create default user upx 2000:2000
|
||||
RUN useradd upx -U --uid 2000 --shell /bin/bash -m \
|
||||
&& mkdir -p /home/upx/.cache/zig /home/upx/.local/bin /home/upx/.wine /home/upx/src/upx \
|
||||
&& ln -s /usr/local/bin/bin-upx-20221212 /home/upx/.local/bin/bin-upx \
|
||||
&& chown -R upx:upx /home/upx \
|
||||
&& cd /home/upx && chmod 700 . \
|
||||
&& mkdir -p .cache .local src/upx \
|
||||
&& for d in ccache go-build tmp wine zig; do mkdir -p .cache/$d; done \
|
||||
&& for d in bin share state; do mkdir -p .local/$d; done \
|
||||
&& ln -s .cache/wine .wine && ln -s .cache/tmp tmp \
|
||||
&& ln -s /usr/local/bin/bin-upx-20221212 .local/bin/bin-upx \
|
||||
&& chown -R upx:upx . \
|
||||
&& true
|
||||
USER upx
|
||||
|
@ -14,9 +14,11 @@ ii binutils 2.38-4ubuntu2.2 amd64
|
||||
ii binutils-common:amd64 2.38-4ubuntu2.2 amd64 Common files for the GNU assembler, linker and binary utilities
|
||||
ii binutils-x86-64-linux-gnu 2.38-4ubuntu2.2 amd64 GNU binary utilities, for x86-64-linux-gnu target
|
||||
ii bsdutils 1:2.37.2-4ubuntu3 amd64 basic utilities from 4.4BSD-Lite
|
||||
ii busybox 1:1.30.1-7ubuntu3 amd64 Tiny utilities for small and embedded systems
|
||||
ii bzip2 1.0.8-5build1 amd64 high-quality block-sorting file compressor - utilities
|
||||
ii ca-certificates 20230311ubuntu0.22.04.1 all Common CA certificates
|
||||
ii cabextract 1.9-3 amd64 Microsoft Cabinet file unpacker
|
||||
ii ccache 4.5.1-1 amd64 Compiler cache for fast recompilation of C/C++ code
|
||||
ii chrpath 0.16-2 amd64 Tool to edit the rpath in ELF binaries
|
||||
ii cmake 3.22.1-1ubuntu1.22.04.1 amd64 cross-platform, open-source make system
|
||||
ii cmake-data 3.22.1-1ubuntu1.22.04.1 all CMake data files (modules, templates and documentation)
|
||||
@ -43,6 +45,7 @@ ii g++ 4:11.2.0-1ubuntu1 amd64
|
||||
ii g++-11 11.3.0-1ubuntu1~22.04.1 amd64 GNU C++ compiler
|
||||
ii g++-11-multilib 11.3.0-1ubuntu1~22.04.1 amd64 GNU C++ compiler (multilib support)
|
||||
ii g++-multilib 4:11.2.0-1ubuntu1 amd64 GNU C++ compiler (multilib files)
|
||||
ii gawk 1:5.1.0-1build3 amd64 GNU awk, a pattern scanning and processing language
|
||||
ii gcc 4:11.2.0-1ubuntu1 amd64 GNU C compiler
|
||||
ii gcc-11 11.3.0-1ubuntu1~22.04.1 amd64 GNU C compiler
|
||||
ii gcc-11-base:amd64 11.3.0-1ubuntu1~22.04.1 amd64 GCC, the GNU Compiler Collection (base package)
|
||||
@ -135,6 +138,7 @@ ii libgomp1:amd64 12.1.0-2ubuntu1~22.04 amd64
|
||||
ii libgpg-error0:amd64 1.43-3 amd64 GnuPG development runtime library
|
||||
ii libgpm2:amd64 1.20.7-10build1 amd64 General Purpose Mouse - shared library
|
||||
ii libgssapi-krb5-2:amd64 1.19.2-2ubuntu0.2 amd64 MIT Kerberos runtime libraries - krb5 GSS-API Mechanism
|
||||
ii libhiredis0.14:amd64 0.14.1-2 amd64 minimalistic C client library for Redis
|
||||
ii libhogweed6:amd64 3.7.3-1build2 amd64 low level cryptographic library (public-key cryptos)
|
||||
ii libicu70:amd64 70.1-2 amd64 International Components for Unicode
|
||||
ii libidn2-0:amd64 2.3.2-2build1 amd64 Internationalized domain names (IDNA2008/TR46) library
|
||||
@ -202,6 +206,7 @@ ii libsemanage2:amd64 3.3-1build2 amd64
|
||||
ii libsensors-config 1:3.6.0-7ubuntu1 all lm-sensors configuration files
|
||||
ii libsensors5:amd64 1:3.6.0-7ubuntu1 amd64 library to read temperature/voltage/fan sensors
|
||||
ii libsepol2:amd64 3.3-1build1 amd64 SELinux library for manipulating binary security policies
|
||||
ii libsigsegv2:amd64 2.13-1ubuntu3 amd64 Library for handling page faults in a portable way
|
||||
ii libsmartcols1:amd64 2.37.2-4ubuntu3 amd64 smart column output alignment library
|
||||
ii libsodium23:amd64 1.0.18-1build2 amd64 Network communication, cryptography and signaturing library
|
||||
ii libsource-highlight-common 3.1.9-4.1build2 all architecture-independent files for source highlighting library
|
||||
@ -249,7 +254,7 @@ ii libxxhash0:amd64 0.8.1-1 amd64
|
||||
ii libyaml-0-2:amd64 0.2.2-1build2 amd64 Fast YAML 1.1 parser and emitter library
|
||||
ii libzstd-dev:amd64 1.4.8+dfsg-3build1 amd64 fast lossless compression algorithm -- development files
|
||||
ii libzstd1:amd64 1.4.8+dfsg-3build1 amd64 fast lossless compression algorithm
|
||||
ii linux-libc-dev:amd64 5.15.0-75.82 amd64 Linux Kernel Headers for development
|
||||
ii linux-libc-dev:amd64 5.15.0-76.83 amd64 Linux Kernel Headers for development
|
||||
ii login 1:4.8.1-2ubuntu2.1 amd64 system login tools
|
||||
ii logsave 1.46.5-2ubuntu1.1 amd64 save the output of a command in a log file
|
||||
ii lsb-base 11.1.0ubuntu4 all Linux Standard Base init script functionality
|
||||
@ -260,6 +265,7 @@ ii lzop 1.04-2build2 amd64
|
||||
ii make 4.3-4.1build1 amd64 utility for directing compilation
|
||||
ii mawk 1.3.4.20200120-3 amd64 Pattern scanning and text processing language
|
||||
ii media-types 7.0.0 all List of standard media types and their usual file extension
|
||||
ii mksh 59c-16 amd64 MirBSD Korn Shell
|
||||
ii moreutils 0.66-1 amd64 additional Unix utilities
|
||||
ii mount 2.37.2-4ubuntu3 amd64 tools for mounting and manipulating filesystems
|
||||
ii ncurses-base 6.3-2ubuntu0.1 all basic terminal type definitions
|
||||
@ -295,6 +301,7 @@ ii sensible-utils 0.0.17 all
|
||||
ii sysstat 12.5.2-2ubuntu0.2 amd64 system performance tools for Linux
|
||||
ii sysvinit-utils 3.01-1ubuntu1 amd64 System-V-like utilities
|
||||
ii tar 1.34+dfsg-1ubuntu0.1.22.04.1 amd64 GNU version of the tar archiving utility
|
||||
ii time 1.9-0.1build2 amd64 GNU time program for measuring CPU resource usage
|
||||
ii ubuntu-keyring 2021.03.26 all GnuPG keys of the Ubuntu archive
|
||||
ii ucf 3.0043 all Update Configuration File(s): preserve user changes to config files
|
||||
ii universal-ctags 5.9.20210829.0-1 amd64 build tag file indexes of source code definitions
|
||||
@ -307,6 +314,7 @@ ii vim-runtime 2:8.2.3995-1ubuntu2.8 all
|
||||
ii wget 1.21.2-2ubuntu1 amd64 retrieves files from the web
|
||||
ii xxd 2:8.2.3995-1ubuntu2.8 amd64 tool to make (or reverse) a hex dump
|
||||
ii xz-utils 5.2.5-2ubuntu1 amd64 XZ-format compression utilities
|
||||
ii yash 2.51-1 amd64 yet another shell
|
||||
ii zip 3.0-12build2 amd64 Archiver for .zip files
|
||||
ii zlib1g-dev:amd64 1:1.2.11.dfsg-2ubuntu9.2 amd64 compression library - development
|
||||
ii zlib1g:amd64 1:1.2.11.dfsg-2ubuntu9.2 amd64 compression library - runtime
|
||||
@ -319,7 +327,7 @@ ii zstd 1.4.8+dfsg-3build1 amd64
|
||||
||/ Name Version Architecture Description
|
||||
|
||||
Packages sorted by Installed-Size:
|
||||
741791 ===== TOTAL (313 packages)
|
||||
748809 ===== TOTAL (321 packages)
|
||||
52577 gcc-11 amd64
|
||||
34444 libicu70 amd64
|
||||
32780 vim-runtime all
|
||||
@ -401,16 +409,20 @@ Packages sorted by Installed-Size:
|
||||
1854 aria2 amd64
|
||||
1750 libdb5.3 amd64
|
||||
1746 libunistring2 amd64
|
||||
1680 gawk amd64
|
||||
1655 zstd amd64
|
||||
1602 libsqlite3-0 amd64
|
||||
1516 e2fsprogs amd64
|
||||
1508 mksh amd64
|
||||
1472 sysstat amd64
|
||||
1464 bash-completion all
|
||||
1445 hyperfine amd64
|
||||
1429 yash amd64
|
||||
1429 libx11-data all
|
||||
1388 procps amd64
|
||||
1386 libx11-6 amd64
|
||||
1354 libgcrypt20 amd64
|
||||
1343 ccache amd64
|
||||
1328 libzstd-dev amd64
|
||||
1292 libp11-kit0 amd64
|
||||
1138 libpam-modules amd64
|
||||
@ -424,6 +436,7 @@ Packages sorted by Installed-Size:
|
||||
876 libarchive13 amd64
|
||||
846 libzstd1 amd64
|
||||
794 rsync amd64
|
||||
791 busybox amd64
|
||||
787 libcurl4 amd64
|
||||
784 libbrotli1 amd64
|
||||
771 libcurl3-gnutls amd64
|
||||
@ -558,6 +571,7 @@ Packages sorted by Installed-Size:
|
||||
133 init-system-helpers all
|
||||
132 libipt2 amd64
|
||||
131 libprocps8 amd64
|
||||
126 time amd64
|
||||
125 libmpc3 amd64
|
||||
123 libtimedate-perl all
|
||||
123 libnsl2 amd64
|
||||
@ -583,6 +597,7 @@ Packages sorted by Installed-Size:
|
||||
96 libmspack0 amd64
|
||||
95 libpsl5 amd64
|
||||
93 libsasl2-modules-db amd64
|
||||
92 libhiredis0.14 amd64
|
||||
91 libjansson4 amd64
|
||||
90 python3 amd64
|
||||
83 sysvinit-utils amd64
|
||||
@ -608,6 +623,7 @@ Packages sorted by Installed-Size:
|
||||
51 libutempter0 amd64
|
||||
51 hostname amd64
|
||||
50 gcc amd64
|
||||
49 libsigsegv2 amd64
|
||||
47 libkeyutils1 amd64
|
||||
45 libgdbm-compat4 amd64
|
||||
45 libcap-ng0 amd64
|
||||
|
@ -3,49 +3,78 @@
|
||||
set -e
|
||||
|
||||
#
|
||||
# build UPX "by hand", using POSIX shell and a minimal number of compilation flags
|
||||
# build UPX "by hand", using a POSIX-compliant shell and
|
||||
# a minimal number of compilation flags
|
||||
# Copyright (C) Markus Franz Xaver Johannes Oberhumer
|
||||
#
|
||||
|
||||
# uses optional environment variables: AR, CC, CXX, OPTIMIZE, top_srcdir
|
||||
|
||||
# shell init
|
||||
### set -x # enable logging
|
||||
DUALCASE=1; export DUALCASE # for MKS sh
|
||||
test -n "${ZSH_VERSION+set}" && emulate sh # for zsh
|
||||
argv0="$0"; argv0abs="$(readlink -fn "$argv0")"; argv0dir="$(dirname "$argv0abs")"
|
||||
# HINT: set "argv0dir" manually if your system does not have "readlink"
|
||||
my_argv0="$0"
|
||||
|
||||
# toolchain settings and flags
|
||||
# toolchain settings and compilation flags
|
||||
AR="${AR:-ar}"
|
||||
CC="${CC:-cc}"
|
||||
CXX="${CXX:-c++ -std=gnu++17}"
|
||||
AR="${AR:-ar}"
|
||||
# HINT: use "export AR=false" if "$AR rcs" does not work on your system; see below
|
||||
if test "x$AR" = "x0" || test "x$AR" = "xfalse" || test "x$AR" = "x/bin/false"; then
|
||||
AR="" # do not use $AR
|
||||
fi
|
||||
# protect against security threats caused by misguided compiler "optimizations"
|
||||
mandatory_flags="-fno-strict-aliasing -fno-strict-overflow -funsigned-char"
|
||||
# not mandatory and not minimal, but usually a good idea:
|
||||
### mandatory_flags="-Wall -O2 $mandatory_flags"
|
||||
if test "x$OPTIMIZE" != "x" && test "x$OPTIMIZE" != "x0"; then
|
||||
# not mandatory and not minimal, but usually a good idea:
|
||||
mandatory_flags="-Wall -O2 $mandatory_flags"
|
||||
fi
|
||||
CC="$CC $mandatory_flags"
|
||||
CXX="$CXX $mandatory_flags"
|
||||
|
||||
# go to upx top-level directory
|
||||
cd "$argv0dir/../.." || exit 1
|
||||
pwd
|
||||
# HINT: set "top_srcdir" manually if your system does not have "readlink"
|
||||
if test "x$top_srcdir" = "x"; then
|
||||
my_argv0abs="$(readlink -fn "$my_argv0")"
|
||||
my_argv0dir="$(dirname "$my_argv0abs")"
|
||||
cd "$my_argv0dir/../.." || exit 1
|
||||
else
|
||||
cd "$top_srcdir" || exit 1
|
||||
fi
|
||||
top_srcdir="$(pwd)" # absolute
|
||||
rel_top_srcdir=. # relative top_srcdir
|
||||
echo "# current directory: '$(pwd)'"
|
||||
test -f doc/upx.pod || exit 1 # sanity check
|
||||
test -f src/version.h || exit 1 # sanity check
|
||||
top_srcdir="$PWD"
|
||||
rm -rf ./build/by-hand # WARNING: existing build-directory gets deleted!
|
||||
mkdir -p ./build/by-hand
|
||||
|
||||
# helper function
|
||||
run() {
|
||||
if test 0 = 1; then
|
||||
# DEBUG dry-run: print command, but don't actually run unless $1 is "+"
|
||||
if test "x$1" = "x+"; then
|
||||
shift; echo "$@"; "$@"; return
|
||||
fi
|
||||
shift; echo "$@"; return
|
||||
fi
|
||||
# print short info and run command
|
||||
test "x$1" != "x" && test "x$1" != "x+" && echo "$1"
|
||||
shift; "$@"
|
||||
}
|
||||
|
||||
# helper function
|
||||
check_submodule() {
|
||||
local f
|
||||
for f in COPYING LICENSE LICENSE.txt; do
|
||||
if test -f "$top_srcdir/vendor/$1/$f"; then
|
||||
# create and enter build directory
|
||||
mkdir -p "$top_srcdir/build/by-hand/$1"
|
||||
cd "$top_srcdir/build/by-hand/$1" || exit 1
|
||||
echo "===== build $1 ====="
|
||||
#local ff # "local" seems unsupported by some versions of ksh
|
||||
for ff in COPYING LICENSE LICENSE.txt; do
|
||||
if test -f "$rel_top_srcdir/vendor/$1/$ff"; then
|
||||
# create and enter build directory; updates global $rel_top_srcdir
|
||||
run "+" cd "$rel_top_srcdir" || exit 1
|
||||
rel_top_srcdir=.
|
||||
echo "#==== build $1 ====="
|
||||
run "+" mkdir "build/by-hand/$1"
|
||||
run "+" cd "build/by-hand/$1" || exit 1
|
||||
rel_top_srcdir=../../..
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
@ -53,48 +82,44 @@ check_submodule() {
|
||||
}
|
||||
|
||||
# build
|
||||
run "+" mkdir -p "build/by-hand"
|
||||
if check_submodule bzip2; then
|
||||
for f in "$top_srcdir"/vendor/bzip2/*.c; do
|
||||
echo "CC $f"
|
||||
$CC -c "$f"
|
||||
for f in "$rel_top_srcdir"/vendor/bzip2/*.c; do
|
||||
run "CC $f" $CC -c "$f"
|
||||
done
|
||||
fi
|
||||
if check_submodule ucl; then
|
||||
for f in "$top_srcdir"/vendor/ucl/src/*.c; do
|
||||
echo "CC $f"
|
||||
$CC -I"$top_srcdir"/vendor/ucl/include -I"$top_srcdir"/vendor/ucl -c "$f"
|
||||
for f in "$rel_top_srcdir"/vendor/ucl/src/*.c; do
|
||||
run "CC $f" $CC -I"$rel_top_srcdir"/vendor/ucl/include -I"$rel_top_srcdir"/vendor/ucl -c "$f"
|
||||
done
|
||||
fi
|
||||
if check_submodule zlib; then
|
||||
for f in "$top_srcdir"/vendor/zlib/*.c; do
|
||||
echo "CC $f"
|
||||
$CC -DHAVE_STDARG_H -DHAVE_VSNPRINTF -DHAVE_UNISTD_H -c "$f"
|
||||
for f in "$rel_top_srcdir"/vendor/zlib/*.c; do
|
||||
run "CC $f" $CC -DHAVE_STDARG_H -DHAVE_VSNPRINTF -DHAVE_UNISTD_H -c "$f"
|
||||
done
|
||||
fi
|
||||
if check_submodule zstd; then
|
||||
for f in "$top_srcdir"/vendor/zstd/lib/*/*.c; do
|
||||
echo "CC $f"
|
||||
$CC -DDYNAMIC_BMI2=0 -DZSTD_DISABLE_ASM -c "$f"
|
||||
for f in "$rel_top_srcdir"/vendor/zstd/lib/*/*.c; do
|
||||
run "CC $f" $CC -DDYNAMIC_BMI2=0 -DZSTD_DISABLE_ASM -c "$f"
|
||||
done
|
||||
fi
|
||||
echo "===== build UPX ====="
|
||||
cd "$top_srcdir"/build/by-hand || exit 1
|
||||
for f in "$top_srcdir"/src/*.cpp "$top_srcdir"/src/*/*.cpp; do
|
||||
echo "CXX $f"
|
||||
$CXX -I"$top_srcdir"/vendor -c "$f"
|
||||
run "+" cd "$rel_top_srcdir" || exit 1
|
||||
rel_top_srcdir=.
|
||||
echo "#==== build UPX ====="
|
||||
run "+" cd "build/by-hand" || exit 1
|
||||
rel_top_srcdir=../..
|
||||
for f in "$rel_top_srcdir"/src/*.cpp "$rel_top_srcdir"/src/*/*.cpp; do
|
||||
run "CXX $f" $CXX -I"$rel_top_srcdir"/vendor -c "$f"
|
||||
done
|
||||
# echo "===== link UPX ====="
|
||||
# echo "#==== link UPX ====="
|
||||
if test "x$AR" = "x"; then
|
||||
# link without using $AR
|
||||
echo "CXX upx"
|
||||
$CXX -o upx *.o */*.o
|
||||
run "CXX upx" $CXX -o upx *.o */*.o
|
||||
else
|
||||
echo "AR libupx"
|
||||
$AR rcs libupx_submodules.a */*.o
|
||||
echo "CXX upx"
|
||||
$CXX -o upx *.o -L. -lupx_submodules
|
||||
run "AR libupx" $AR rcs libupx_submodules.a */*.o
|
||||
run "CXX upx" $CXX -o upx *.o -L. -lupx_submodules
|
||||
fi
|
||||
pwd
|
||||
echo "# current directory: '$(pwd)'"
|
||||
ls -l upx*
|
||||
|
||||
echo "All done."
|
||||
echo "# All done."
|
||||
|
Loading…
Reference in New Issue
Block a user