Как запускать бинарники Termux из root-оболочки на Android

Если вы работаете с рутованным Android-устройством и используете Termux для продвинутых задач, рано или поздно может возникнуть необходимость запускать его утилиты из root-оболочки. Но здесь есть нюансы: даже после успешной команды su скрипты Termux могут не находить свои библиотеки, что приводит к ошибкам. Давайте разберёмся, как это исправить, и почему стандартные методы вроде LD_LIBRARY_PATH не всегда срабатывают.

Кстати, если вы впервые сталкиваетесь с такой ситуацией, не переживайте — это распространённая проблема, и её решение проще, чем кажется. Главное — понять, как Termux и Android взаимодействуют на уровне файловой системы.

Почему LD_LIBRARY_PATH не помогает

На обычных Linux-системах переменная окружения LD_LIBRARY_PATH позволяет указать каталоги с библиотеками, которые нужны программам. Однако Android — не совсем обычный Linux. Здесь используется собственная реализация libc (стандартной библиотеки языка C) и динамический линковщик /system/bin/linker64, который игнорирует LD_LIBRARY_PATH.

Но есть и хорошие новости: Termux не полагается на эту переменную. Вместо этого пути к библиотекам жестко прописаны в самих исполняемых файлах Termux. Проверить это можно с помощью команды:

readelf -d $(which nano) | grep RUNPATH

Вы увидите что-то вроде RUNPATH Library runpath: [/data/data/com.termux/files/usr/lib]. Это означает, что линковщик Android сначала ищет библиотеки именно в этом каталоге, независимо от окружения.

Обратите внимание: если вы попытаетесь вручную задать LD_LIBRARY_PATH в root-сессии, это не сработает. Вместо этого сосредоточьтесь на настройке переменной PATH.

Настройка PATH для доступа к бинарникам Termux

Основная задача — сделать так, чтобы root-оболочка «видела» исполняемые файлы Termux. Они расположены в /data/data/com.termux/files/usr/bin, но этот путь по умолчанию не добавлен в переменную PATH суперпользователя.

Вот как это исправить:

  1. Перейдите в root-режим, выполнив su.
  2. Экспортируйте путь к бинарникам Termux в текущей сессии: export PATH=”/data/data/com.termux/files/usr/bin:$PATH”
  3. Проверьте, что путь добавлен: echo $PATH

Теперь вы можете запускать утилиты Termux напрямую, например:

nano /system/etc/hosts

Если нужно сделать изменение постоянным, добавьте экспорт пути в файл инициализации оболочки (например, .bashrc в домашней директории root). Но будьте внимательны: редактирование системных файлов требует осторожности.

Дополнительные рекомендации и проверка

Иногда даже после настройки PATH могут возникать ошибки из-за конфликтов библиотек. Например, если Termux-программа пытается использовать библиотеки из /system/lib64 вместо своих собственных. В таком случае:

  1. Убедитесь, что в выводе readelf -d для проблемного бинарника указан правильный RUNPATH.
  2. Если путь отсутствует, возможно, файл был модифицирован — переустановите пакет через pkg install.

Также учитывайте, что некоторые программы Termux зависят от дополнительных переменных окружения (например, TERMUX_PREFIX). Их можно экспортировать аналогично PATH:

export TERMUX_PREFIX="/data/data/com.termux/files/usr"

Подводя итог: основная задача — корректно настроить PATH, а не манипулировать переменными линковщика. Если вы всё сделали правильно, Termux-утилиты будут работать даже из-под root без лишних сложностей.

И последнее: перед экспериментами с системными настройками всегда создавайте резервные копии. А если что-то пошло не так, смело пишите в комментариях — постараюсь помочь!

Добавить комментарий

Все поля обязательны к заполнению. Ваш адрес email не будет виден никому.

Новое
Интересное