How to Install Debian Jessie - Arm

This version is for Arm routers: RT-AC56U, RT-AC66U_B1, RT-AC68U, RT-AC87U, RT-AC88U, RT-AC3200, RT-AC5300...
Can't be installed on mipsel devices because kernel is too old, use debian wheezy instead from here

I setup a chrooted Debian Jessie v8.9 where you can compile and install any package you want, of course if routers memory permit it, ex. transmission, plexmediaserver, minidlna, lighttpd, rutorrent, owncloud...

Choose only one version to install from point 1a or 1b, Optware or Entware

1a - Install NEW GENERATION OPTWARE from here, to simplify things, debian will be installed in optware-ng.arm folder, in this case is /mnt/usb_disk/optware-ng.arm

ipkg install nano findutils

or

1b - Install NEW GENERATION ENTWARE from here, to simplify things, debian will be installed in entware-ng.arm folder, in this case is /mnt/usb_disk/entware-ng.arm

2 - Download and extract prepared archive

cd /opt
wget -c -O debian_jessie8.9-arm_clean.tgz http://bit.ly/2JxYGjx
tar -xvzf ./debian_jessie8.9-arm_clean.tgz

3 - Create startup script for installed services (thanks @ryzhov_al), this is usefull for minidlna, transmission or any other package...

cat >> /opt/etc/init.d/S99debian << 'EOF'
#!/bin/sh
PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin
# Folder with Debian Jessie
CHROOT_DIR=/tmp/mnt/sda1/optware/debian
# Some folder outside of sandbox,
# will be mounted to /mnt folder in Debian
# Uncommented "EXT_DIR=" line if you need to
# mount a folder inside debian (remove #)
# EXT_DIR=/tmp/mnt/sda1/Media/
CHROOT_SERVICES_LIST=/opt/etc/chroot-services.list
if [ ! -e "$CHROOT_SERVICES_LIST" ]; then
echo "Please, define Debian services to start in
$CHROOT_SERVICES_LIST first!"
echo "One service per line. Hint: this is a script names from
Debian's /etc/init.d/"
exit 1
fi
MountedDirCount="$(mount | grep $CHROOT_DIR | wc -l)"
start() {
if [ $MountedDirCount -gt 0 ]; then
echo "Chroot'ed services seems to be already started,
exiting..."
exit 1
fi
echo "Starting chroot'ed Debian services..."
for dir in dev proc sys; do
mount -o bind /$dir $CHROOT_DIR/$dir
done
[ -z "$EXT_DIR" ] || mount -o bind $EXT_DIR $CHROOT_DIR/mnt
for item in $(cat $CHROOT_SERVICES_LIST); do
chroot $CHROOT_DIR /etc/init.d/$item start
done
}
stop() {
if [ $MountedDirCount -eq 0 ]; then
echo "Chroot'ed services seems to be already stopped,
exiting..."
exit 1
fi
echo "Stopping chroot'ed Debian services..."
for item in $(cat $CHROOT_SERVICES_LIST); do
chroot $CHROOT_DIR /etc/init.d/$item stop
sleep 2
done
umount /opt/debian/dev/pts
mount | grep $CHROOT_DIR | awk '{print $3}' | xargs umount -l
}
restart() {
if [ $MountedDirCount -eq 0 ]; then
echo "Chroot'ed services seems to be already stopped"
start
else
echo "Stopping chroot'ed Debian services..."
for item in $(cat $CHROOT_SERVICES_LIST); do
chroot $CHROOT_DIR /etc/init.d/$item stop
sleep 2
done
mount | grep $CHROOT_DIR | awk '{print $3}' | xargs umount -l
echo "Restarting chroot'ed Debian services..."
for dir in dev proc sys; do
mount -o bind /$dir $CHROOT_DIR/$dir
done
[ -z "$EXT_DIR" ] || mount -o bind $EXT_DIR $CHROOT_DIR/mnt
for item in $(cat $CHROOT_SERVICES_LIST); do
chroot $CHROOT_DIR /etc/init.d/$item start
done
fi
}
enter() {
[ -z "$EXT_DIR" ] || mount -o bind $EXT_DIR $CHROOT_DIR/mnt
mount -o bind /dev/ /opt/debian/dev/
mount -o bind /dev/pts /opt/debian/dev/pts
mount -o bind /proc/ /opt/debian/proc/
mount -o bind /sys/ /opt/debian/sys/
chroot /opt/debian /bin/bash
}
status() {
if [ $MountedDirCount -gt 0 ]; then
echo "Chroot'ed services running..."
else
echo "Chroot'ed services not running!"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
enter)
enter
;;
status) status
;;
*)
echo "Usage: (start|stop|restart|enter|status)"
exit 1
;;
esac
echo Done.
exit 0
EOF

Press ENTER
Make script executable

chmod 755 /opt/etc/init.d/S99debian

In this script is a path EXT_DIR to your external media folder which will be mounted in debian as /mnt, default is /mnt/sda1/Media/ (must be a single folder not the whole partition), don't forget to uncomment if is used, inside Debian, EXT_DIR /mnt/sda1/Media/ will become /mnt (Ex. you need to set Transmission download path to /mnt/transmission or a new library in Plex Media Server path to /mnt

If your disk has a label change sda1 from CHROOT_DIR with your disk label, modify the script to match your settings with a text editor, use this command:

nano /opt/etc/init.d/S99debian

After editing EXT_DIR and CHROOT_DIR, save settings with CTRL-O, press ENTER and exit nano with CTRL-X

4 - Create symlink to start-stop services or enter debian easier
touch /opt/etc/chroot-services.list
ln -s /opt/etc/init.d/S99debian /opt/bin/debian

Every time you want to start installed services in debian without typing long command "/opt/etc/init.d/S99debian start/stop", type only

debian start
debian stop
debian restart
debian enter
debian status

But don't forget to add services name from /opt/debian/etc/init.d/ to /opt/etc/chroot-services.list

5 - Copy hosts file to debian (usefull for some debian packages)
cp /etc/hosts /opt/debian/etc/

6 - Enter chrooted debian, you will see in terminal username will change to root@RT-AC... from admin@RT-AC... or other name if changed previously in router menu (all terminals commands with purple border are inside debian)

debian enter

7 - Run update to see if some recent packages are available

apt update && apt upgrade -y

8 - Set your country time zone

dpkg-reconfigure tzdata

9 - Install some packages, ex. wget

apt install wget

Now you have a full Debian distro and may install any package from here
10 - To exit chrooted debian just type exit

exit
Enjoy...

HOW TO UNINSTALL DEBIAN

It's very important to unmount external folder before removing debian, if not - all content from that directory will be deleted: movies, music files, photos...

1 - Stop debian and unmount external folder
debian stop
/opt/etc/init.d/S99debian stop
2 - Remove entire debian directory
rm -r /opt/debian
3 - Remove startup script
rm /opt/etc/init.d/S99debian
rm /opt/bin/debian
4 - Reboot router
reboot

HOW TO BACKUP-RESTORE DEBIAN

After installing a lot of packages, it's better to make a backup, if something goes wrong just restore it without reconfigure all off your work.

   It's very important to unmount external folder before backing up debian, if not - all content from that directory will be included in archive and may become huge...

Stop debian and unmount external folder
debian stop
BackUp debian
cd /opt
tar -cvzf ./chosen_debian_name.tgz ./debian/
Restore debian when needed
cd /opt
tar -xvzf ./chosen_debian_name.tgz