这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/packages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -228,9 +228,9 @@ jobs:
done

if [ "$DOCKER_BUILD" == 'false' ]; then
NDK=$ANDROID_NDK ANDROID_HOME=$ANDROID_SDK_ROOT ./build-package.sh -I -a ${{ matrix.target_arch }} $packages
NDK=$ANDROID_NDK ANDROID_HOME=$ANDROID_SDK_ROOT ./build-package.sh -I -a -C ${{ matrix.target_arch }} $packages
elif [ -n "$packages" ]; then
./scripts/run-docker.sh ./build-package.sh -I -a ${{ matrix.target_arch }} $packages
./scripts/run-docker.sh ./build-package.sh -I -a -C ${{ matrix.target_arch }} $packages
fi

- name: Generate build artifacts
Expand Down
5 changes: 4 additions & 1 deletion build-package.sh
Original file line number Diff line number Diff line change
Expand Up @@ -423,6 +423,8 @@ _show_usage() {
echo "Available options:"
[ "$TERMUX_ON_DEVICE_BUILD" = "false" ] && echo " -a The architecture to build for: aarch64(default), arm, i686, x86_64 or all."
echo " -d Build with debug symbols."
echo " -c Continue building."
echo " -C Cleanup already built packages on low disk space."
echo " -D Build a disabled package in disabled-packages/."
echo " -f Force build even if package has already been built."
echo " -F Force build even if package and its dependencies have already been built."
Expand Down Expand Up @@ -521,6 +523,7 @@ while (($# >= 1)); do
fi
;;
-c) TERMUX_CONTINUE_BUILD=true;;
-C) TERMUX_CLEANUP_BUILT_PACKAGES_ON_LOW_DISK_SPACE=true;;
-*) termux_error_exit "./build-package.sh: illegal option '$1'";;
*) PACKAGE_LIST+=("$1");;
esac
Expand Down Expand Up @@ -588,7 +591,7 @@ for ((i=0; i<${#PACKAGE_LIST[@]}; i++)); do
${TERMUX_FORCE_BUILD+-f} ${TERMUX_INSTALL_DEPS+-i} ${TERMUX_IS_DISABLED+-D} \
${TERMUX_DEBUG_BUILD+-d} ${TERMUX_OUTPUT_DIR+-o $TERMUX_OUTPUT_DIR} \
${TERMUX_FORCE_BUILD_DEPENDENCIES+-F} ${TERMUX_GLOBAL_LIBRARY+-L} \
${TERMUX_WITHOUT_DEPVERSION_BINDING+-w} \
${TERMUX_WITHOUT_DEPVERSION_BINDING+-w} ${TERMUX_CLEANUP_BUILT_PACKAGES_ON_LOW_DISK_SPACE+-C} \
--format ${TERMUX_PACKAGE_FORMAT:=debian} \
--library ${TERMUX_PACKAGE_LIBRARY:=bionic} "${PACKAGE_LIST[i]}"
done
Expand Down
23 changes: 15 additions & 8 deletions scripts/build/termux_step_cleanup_packages.sh
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
termux_step_cleanup_packages() {
[[ "${TERMUX_CLEANUP_BUILT_PACKAGES_ON_LOW_DISK_SPACE:=false}" == "true" ]] || return 0
[[ -d "$TERMUX_TOPDIR" ]] || return 0

# Extract available disk space in GB
local AVAILABLE=`df -B $((1024**3)) --output=avail "$TERMUX_TOPDIR" | tail -1`
local AVAILABLE TERMUX_PACKAGES_DIRECTORIES PKGS PKG_REGEX

# No need to cleanup if there is enough disk space (more than 5 GB)
[ "$AVAILABLE" -lt 5 ] || return 0
# Extract available disk space in bytes
AVAILABLE="$(df "$TERMUX_TOPDIR" | awk 'NR==2 {print $4 * 1024}')"

local TERMUX_PACKAGES_DIRECTORIES="$(jq --raw-output 'del(.pkg_format) | keys | .[]' "${TERMUX_SCRIPTDIR}"/repo.json)"
# No need to cleanup if there is enough disk space
(( AVAILABLE <= TERMUX_CLEANUP_BUILT_PACKAGES_THRESHOLD )) || return 0

TERMUX_PACKAGES_DIRECTORIES="$(jq --raw-output 'del(.pkg_format) | keys | .[]' "${TERMUX_SCRIPTDIR}"/repo.json)"

# Build package name regex to be used with `find`, avoiding loops.
local PKG_REGEX="$(find ${TERMUX_PACKAGES_DIRECTORIES} -mindepth 1 -maxdepth 1 -type d -printf '%f|')^$"
PKGS="$(find ${TERMUX_PACKAGES_DIRECTORIES} -mindepth 1 -maxdepth 1 -type d -printf '%f\n')"
[[ -z "$PKGS" ]] && return 0

# Exclude current package from the list.
PKG_REGEX="${PKG_REGEX//$TERMUX_PKG_NAME|/}"
PKGS="$(printf "%s" "$PKGS" | grep -Fxv "$TERMUX_PKG_NAME")"
[[ -z "$PKGS" ]] && return 0

PKG_REGEX="$(printf "%s" "$PKGS" | sed -zE 's/[][\.|$(){}?+*^]/\\&/g' | sed -E 's/(.*)/(\1)/g' | sed -zE -e 's/[\n]+/|/g' -e 's/(.*)/(\1)/g')"

echo "INFO: cleaning up some disk space for building \"${TERMUX_PKG_NAME}\"."

find "$TERMUX_TOPDIR" -mindepth 1 -maxdepth 1 -type d -regextype posix-extended -regex ".*/($PKG_REGEX)$" -exec rm -rf {} +
(cd "$TERMUX_TOPDIR" && find . -mindepth 1 -maxdepth 1 -type d -regextype posix-extended -regex "^\./$PKG_REGEX$" -exec rm -rf "{}" +)
}
1 change: 1 addition & 0 deletions scripts/properties.sh
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ TERMUX_ETC_PREFIX_DIR_PATH="${TERMUX_PREFIX}/etc"
TERMUX_PROFILE_D_PREFIX_DIR_PATH="${TERMUX_ETC_PREFIX_DIR_PATH}/profile.d"
TERMUX_CONFIG_PREFIX_DIR_PATH="${TERMUX_ETC_PREFIX_DIR_PATH}/termux"
TERMUX_BOOTSTRAP_CONFIG_DIR_PATH="${TERMUX_CONFIG_PREFIX_DIR_PATH}/bootstrap"
TERMUX_CLEANUP_BUILT_PACKAGES_THRESHOLD="$(( 5 * 1024 ** 3 ))" # 5 GiB

# Path to CGCT tools
CGCT_DEFAULT_PREFIX="/data/data/com.termux/files/usr/glibc"
Expand Down
18 changes: 14 additions & 4 deletions scripts/updates/utils/termux_pkg_upgrade_version.sh
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,18 @@ termux_pkg_upgrade_version() {
fi
done

# Get available space (df outputs sizes in 1024-byte blocks)
local space_available="$(df -P "/var/lib/docker" | awk 'NR==2 {print $4}')"
local force_cleanup="false"
local space_available

if [[ -d "/var/lib/docker" ]]; then
# Get available space in bytes
space_available="$(df "/var/lib/docker" | awk 'NR==2 { print $4 * 1024 }')"

if (( space_available <= TERMUX_CLEANUP_BUILT_PACKAGES_THRESHOLD )); then
force_cleanup="true"
fi
fi


local big_package=false
while IFS= read -r p; do
Expand All @@ -111,15 +121,15 @@ termux_pkg_upgrade_version() {
"${TERMUX_SCRIPTDIR}/scripts/run-docker.sh" ./clean.sh
fi

if ! "${TERMUX_SCRIPTDIR}/scripts/run-docker.sh" ./build-package.sh -a "${TERMUX_ARCH}" -i "${TERMUX_PKG_NAME}"; then
if ! "${TERMUX_SCRIPTDIR}/scripts/run-docker.sh" ./build-package.sh -C -a "${TERMUX_ARCH}" -i "${TERMUX_PKG_NAME}"; then
if [[ "${big_package}" == "true" ]]; then
"${TERMUX_SCRIPTDIR}/scripts/run-docker.sh" ./clean.sh
fi
git checkout -- "${TERMUX_PKG_BUILDER_DIR}"
termux_error_exit "ERROR: failed to build."
fi

if [[ "${big_package}" == "true" ]] || (( space_available <= 2 * 1024 ** 2 )); then
if [[ "${big_package}" == "true" ]] || [[ "${force_cleanup}" == "true" ]]; then
"${TERMUX_SCRIPTDIR}/scripts/run-docker.sh" ./clean.sh
fi

Expand Down