From 1149d4291f984d57159a73c4f48bf31d0a726614 Mon Sep 17 00:00:00 2001 From: agnostic-apollo Date: Fri, 28 Mar 2025 11:30:08 +0500 Subject: [PATCH] Added: Export additional primary `TERMUX_*` scoped shell environment variables - TERMUX__APPS_DIR - TERMUX__ROOTFS - TERMUX__HOME - TERMUX__PREFIX - TERMUX_APP__LEGACY_DATA_DIR (Expected legacy app data directory path for the `com.termux` app, mainly accessible on primary user `0` and is a symlink/bind mount to/from `TERMUX_APP__DATA_DIR`) - TERMUX_APP__BUILD_DATA_DIR (App data directory path used by `termux-packages` `properties.sh` while building packages and `TermuxConstants.java` while building Termux app) `TERMUX_APP__DATA_DIR` variable already exported is for the actual app data directory path assigned by Android for the `com.termux` app returned by `ApplicationInfo`. This is also required for `libtermux-exec-*-ld-preload.so` `$LD_PRELOAD` library as well for `termux-exec` version `>= 2.0.0`. - https://github.com/termux/termux-exec-package/commit/db738a11 See also https://github.com/termux/termux-packages/blob/96eefda/scripts/properties.sh --- .../environment/TermuxAppShellEnvironment.java | 5 ++++- .../environment/TermuxShellEnvironment.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/termux-shared/src/main/java/com/termux/shared/termux/shell/command/environment/TermuxAppShellEnvironment.java b/termux-shared/src/main/java/com/termux/shared/termux/shell/command/environment/TermuxAppShellEnvironment.java index 7f08f562..3fafd56e 100644 --- a/termux-shared/src/main/java/com/termux/shared/termux/shell/command/environment/TermuxAppShellEnvironment.java +++ b/termux-shared/src/main/java/com/termux/shared/termux/shell/command/environment/TermuxAppShellEnvironment.java @@ -77,7 +77,8 @@ public class TermuxAppShellEnvironment { public static final String ENV_TERMUX_APP__PACKAGE_VARIANT = TERMUX_APP_ENV_PREFIX + "PACKAGE_VARIANT"; /** Environment variable for the Termux app files directory. */ public static final String ENV_TERMUX_APP__DATA_DIR = TERMUX_APP_ENV_PREFIX + "DATA_DIR"; - + public static final String ENV_TERMUX_APP__LEGACY_DATA_DIR = TERMUX_APP_ENV_PREFIX + "LEGACY_DATA_DIR"; + public static final String ENV_TERMUX_APP__BUILD_DATA_DIR = TERMUX_APP_ENV_PREFIX + "BUILD_DATA_DIR"; /** Environment variable for the Termux app {@link TermuxAmSocketServer#getTermuxAppAMSocketServerEnabled(Context)}. */ public static final String ENV_TERMUX_APP__AM_SOCKET_SERVER_ENABLED = TERMUX_APP_ENV_PREFIX + "AM_SOCKET_SERVER_ENABLED"; @@ -143,6 +144,8 @@ public class TermuxAppShellEnvironment { */ ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_TERMUX_APP__DATA_DIR, applicationInfo.dataDir); + ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_TERMUX_APP__LEGACY_DATA_DIR, "/data/data/" + applicationInfo.packageName); + ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_TERMUX_APP__BUILD_DATA_DIR, TermuxConstants.TERMUX_INTERNAL_PRIVATE_APP_DATA_DIR_PATH); ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_TERMUX__SE_PROCESS_CONTEXT, SELinuxUtils.getContext()); ShellEnvironmentUtils.putToEnvIfSet(environment, ENV_TERMUX__SE_FILE_CONTEXT, SELinuxUtils.getFileContext(applicationInfo.dataDir)); diff --git a/termux-shared/src/main/java/com/termux/shared/termux/shell/command/environment/TermuxShellEnvironment.java b/termux-shared/src/main/java/com/termux/shared/termux/shell/command/environment/TermuxShellEnvironment.java index 5f3519c5..05c5fc8f 100644 --- a/termux-shared/src/main/java/com/termux/shared/termux/shell/command/environment/TermuxShellEnvironment.java +++ b/termux-shared/src/main/java/com/termux/shared/termux/shell/command/environment/TermuxShellEnvironment.java @@ -1,9 +1,12 @@ package com.termux.shared.termux.shell.command.environment; import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; import androidx.annotation.NonNull; +import com.termux.shared.android.PackageUtils; import com.termux.shared.errors.Error; import com.termux.shared.file.FileUtils; import com.termux.shared.logger.Logger; @@ -77,8 +80,19 @@ public class TermuxShellEnvironment extends AndroidShellEnvironment { environment.putAll(termuxApiAppEnvironment); */ + ApplicationInfo applicationInfo = PackageUtils.getApplicationInfoForPackage(currentPackageContext, TermuxConstants.TERMUX_PACKAGE_NAME); + if (applicationInfo != null && !applicationInfo.enabled) { + applicationInfo = null; + } + + if (applicationInfo != null) { + environment.put("TERMUX__APPS_DIR", applicationInfo.dataDir + "/termux/apps"); + } + environment.put("TERMUX__ROOTFS", TermuxConstants.TERMUX_FILES_DIR_PATH); environment.put(ENV_HOME, TermuxConstants.TERMUX_HOME_DIR_PATH); + environment.put("TERMUX__HOME", TermuxConstants.TERMUX_HOME_DIR_PATH); environment.put(ENV_PREFIX, TermuxConstants.TERMUX_PREFIX_DIR_PATH); + environment.put("TERMUX__PREFIX", TermuxConstants.TERMUX_PREFIX_DIR_PATH); // If failsafe is not enabled, then we keep default PATH and TMPDIR so that system binaries can be used if (!isFailSafe) {