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
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user