Как то мы всем говорим, что для установки Entware нужна папка /opt с правами на запись, расположенная на файловой системе, где возможны символические ссылки. На самом деле не обязательно устанавливать Entware в /opt, можно выполнять сервисы Entware в chroot среде имея при этом доступ к файловой системе всего устройства. Вначале я описал в этом посте установку на Android 10 tv приставку с magisk в качестве рута и суперразделом, в этом случае нельзя создавать папки и файлы в корневой файловой системе. Установка была довольно сильно ориентирована на устройство. В настоящее время скрипт установки одинаков для всех устройств, он работает и на android и на НАСе (проверял на Qnap).
В основе установки лежит специальная версия busybox со встроенной утилитой установки (параметр --install), собранная статически и поэтому работающая на всех устройствах с заданной при сборки архитектурой. Скрипт установки (install_entware_chroot.sh) и такая версия busybox выложены для скачивания в папке http://bin.entware.net/armv7sf-k3.2/installer/chroot/ (для armv7).
Итак скрипт установки с комментариями. Предполагается, что пользователь разместит скрипт и бинарник busybox в одной папке на устройстве и запустит скрипт командой `sh <path_to_install_entware_chroot.sh> <папка_для_установки_entware>`
Код: Выделить всё
#!/bin/sh
if [ -n "$1" ]
then
CHROOT_DIR=$1
else
echo "Usage: $0 <directory_to _install_entware>"
exit 1
fi
#Подмонтируем виртуальные ядерные ФС
for dir in dev dev/pts proc sys; do
mkdir -p $CHROOT_DIR/$dir
mount -o bind /$dir $CHROOT_DIR/$dir
sleep 1
done
#папки для установки busybox
mkdir -p $CHROOT_DIR/bin
mkdir -p $CHROOT_DIR/sbin
#скрипт и busybox могут быть на файловой системе, смонтированной с noexec, а вот на $CHROOT_DIR execution bit должен поддерживаться
cp `dirname $0`/busybox $CHROOT_DIR/bin/
chmod +x $CHROOT_DIR/bin/busybox
#установка busybox (создание симлинков) - делаем в среде chroot
PATH=/bin:/sbin $CHROOT_DIR/bin/busybox chroot $CHROOT_DIR /bin/busybox --install -s
#для дальнейшего нам потребуются в chroot файлы /etc/resolv.conf и /etc/hosts
#их можно или скопировать с папки /etc устройства или создать так:
mkdir -p $CHROOT_DIR/etc
echo 'nameserver 8.8.8.8' > $CHROOT_DIR/etc/resolv.conf
echo 'nameserver 8.8.4.4' >> $CHROOT_DIR/etc/resolv.conf
echo '127.0.0.1 localhost' > $CHROOT_DIR/etc/hosts
echo "После успешной 'установки' busybox можно из chroot среды установить Entware."
echo "Для того, чтобы оказаться в chroot среде выполните:"
echo ""
echo "PATH=/opt/bin:/opt/sbin:/bin:/sbin $CHROOT_DIR/bin/busybox chroot $CHROOT_DIR /bin/sh"
echo ""
echo "В chroot среде выполните:"
echo "wget http://bin.entware.net/armv7sf-k3.2/installer/alternative.sh -O /installer.sh"
echo ""
echo "Затем установите Entware:"
echo "sh /installer.sh"
Скрипт небольшой, можно все команды ввести руками по одной. Собственно нужно создать папки dev, dev/pts, sys, proc в выбранной для установки Entware папки, подмонтирвать в них (mount -o bind) папки (linux ядра)устройства. Создать папки /bin и /sbin /etc и пару фалов в выбранной для установки Entware папки. Скопировать busybox в папку bin и запустить (уже в среде chroot) busybox с параметрами `--install -s`.
Если все пройдет без ошибок, то будет подготовлена chroot среда, в которой стандартными способами можно установить Entware.
Примерный лог установки
Код: Выделить всё
sti6140d360:/ # sh /sdcard/Download/install_entware_chroot.sh /data/local/entware
После успешной 'установки' busybox можно из chroot среды установить Entware.
Для того, чтобы оказаться в chroot среде выполните:
PATH=/opt/bin:/opt/sbin:/bin:/sbin /data/local/entware/bin/busybox chroot /data/local/entware /bin/sh
В chroot среде выполните:
wget http://bin.entware.net/armv7sf-k3.2/installer/alternative.sh -O /installer.sh
Затем установите Entware:
sh /installer.sh