На профильном форуме уже есть схожая тема, которая является адаптацией этого решения, но кинетике это можно сделать куда изящнее. Компонент OPKG умеет всё сам.
В итоге будет получена полноценная среда Debian, в которой не будет ни одного файла выше корня chroot, т.е. сущности из busybox’а с аплетом chroot и костыли для исполнения скриптов в /opt/etc/ndm/*.d
, которые ранее были “внешними” по отношению к Debian’у больше не нужны.
Примером успешного использования на кинетике chroot’ed Debian может служить сервер files.keenopt.ru.
Если не заинтересованы в самостоятельной подготовке установочного архива, сразу переходите к разделу Установка на роутере.
Подготовка на ПК
На Debian-машине подготовливаем архив с полуфабрикатом:
#!/bin/sh
DEB_FOLDER=debian
### Are we root or mere mortal?
if [ $(id -u) -ne 0 ] ; then
echo 'Please run it as root'
exit 1
fi
### First stage of debotsrap
apt-get install debootstrap
debootstrap --arch mipsel --foreign --variant=minbase \
--include=openssh-server stable $DEB_FOLDER ftp://ftp.debian.org/debian
### Make f\w hook dirs
for folder in button fs netfilter schedule time usb user wan; do
mkdir -p $DEB_FOLDER/etc/ndm/${folder}.d
done
### Place default evnvironment vars to /etc/ndm/env_vars.sh
cat > $DEB_FOLDER/etc/ndm/env_vars.sh << EOF
### Unset NDMS-specific env vars
#unset HOSTNAME
#unset IFS
unset LD_BIND_NOW
unset LD_LIBRARY_PATH
#unset PS1
#unset PS2
#unset PS4
#unset SHLVL
#unset timezone
### Set Debian-speceific env vars
export LANG=en_US.UTF-8
export TERM=xterm
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export SHELL=/bin/bash
export MAIL=/var/mail/root
export LOGNAME=root
export USER=root
export USERNAME=root
export HOME=/root
### Fix broken vars
[ "\$PWD" = "(unreachable)/" ] && export PWD=/
EOF
### Make start script for chroot'ed daemons
cat > $DEB_FOLDER/etc/ndm/initrc.sh << EOF
#!/bin/sh
### Fix env vars
. /etc/ndm/env_vars.sh
### Is /etc/ndm/services.txt exists?
CHROOT_SERVICES_LIST=/etc/ndm/services.txt
if [ ! -e "\$CHROOT_SERVICES_LIST" ]; then
echo ssh > \$CHROOT_SERVICES_LIST
fi
### Start/Stop services
cd /root
for item in \$(cat \$CHROOT_SERVICES_LIST); do
/etc/init.d/\$item \$1
done
EOF
chmod +x $DEB_FOLDER/etc/ndm/initrc.sh
### The second deboostrap stage should be done on router
tar -cvzf debian_clean.tgz $DEB_FOLDER
Архив надо положить в папку /opt
на USB-носителе кинетика, где предварительно развёрнут Entware.
Подготовка на роутере
В SSH-сессии на роутере:
opkg install tar
tar -xvzf debian_clean.tgz
mount /dev/ debian/dev
mount /proc/ debian/proc
mount /sys/ debian/sys
LC_ALL=C LANGUAGE=C LANG=C chroot debian /debootstrap/debootstrap --second-stage
echo 'PermitRootLogin yes' >> debian/etc/ssh/sshd_config
LC_ALL=C LANGUAGE=C LANG=C chroot debian /bin/bash
echo -e 'zyxel\nzyxel' | passwd # set 'zyxel' password for root
apt-get clean
exit
umount debian/dev
umount debian/proc
umount debian/sys
rm debian/var/lib/apt/lists/*
tar -cvzf debian_keenetic.tgz -C debian .
Архив debian_keenetic.tgz
готов для многократного использования. В случае, если среда Debian стала неработоспособной, всегда можно отформатировать раздел на USB-носителе в EXT2/3/4 и начать по новой. Сохраните его на ПК.
Установка на роутере
- Подготовьте чистый раздел на USB-накопителе, предварительно отформатированный в EXT2/3/4,
- Подключите носитель к кинетику,
- Запишите подготовленный ранее архив
debian_keenetic.tgz
в папкуinstall
на выбранном разделе с помощью FTP или SAMBA, - В CLI роутера выполните:
opkg initrc /opt/etc/ndm/initrc.sh opkg chroot system configuration save
- В веб-интерфейсе выберите соответствующий раздел в списке
Использовать накопитель
и нажмитеПрименить
.
На странице системного лога можно наблюдать за процессом распаковки архива и запуском службы SSH.
Использование
Учётные данные для SSH-сессии root:zyxel
лучше сразу поменять после первого входа.
Все файлы, ответственные за конфигурирование chroot-среды лежат только в /etc/ndm
, в частности:
initrc.sh
запускает и останавливает сервисы перечисленные вservices.txt
,- папки
*.d
служат для реакции на различные события прошивки, env_vars.sh
рекомендуется включать в состав любого вызова хук скриптов для корректировки передаваемых из хост-системы переменных среды.
Детали
Из ненаписанного в документации. Если в CLI задан параметр opkg chroot
, то после старта роутера и перед выполнением /etc/ndm/initrc.sh
компонент OPKG смонтирует (предварительно создав, если их нет) ряд папок:
/proc
в/opt/proc
,/sys
в/opt/sys
,/tmp
в/opt/tmp
,/dev
в/opt/dev
иdevpts
в/opt/dev/pts
.
Ещё OPKG при необходимости перепишет в /opt/etc
файлы /etc/shells
, /etc/profile
, /tmp/passwd
и /tmp/group
.