Installing optware on Dune HD-TV 102
Monday, November 4th, 2013 12:36 am GMT +2
Dune company has given us a miryad of excellent media players, especially by producing high quality software. In this article I’ll give you step-by-step instructions on how to convert your media player into full-fledged NAS with ability to download torrents and perform any task a generic linux box could do.
Root access
First off, you need to obtain a retail model Dune HD-TV 102w (with ‘w’ postfix), this is the only model which has appropriate firmware for getting root access.
Download dune_service_telnetd.dsf, copy it to usb-flash drive and insert into Dune. Power on device, go to Sources
, find that file and press OK
to execute it. Once this is done, telnetd
service will be available until next reboot. To make it permanent, run the following:
telnet root@dune_ip
login: root
password: <empty>
tangox[~] touch /config/telnetd
tangox[~] sync
HDD Partition
Connect USB-HDD disk drive to Dune to be able to install Optware and store torrents media. We’re going to re-format the disk and create 3 partitions. Here’s a sample list:
tangox[~] fdisk -l /dev/sda
Disk /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 1 499 4008186 83 Linux
/dev/sda2 500 624 1004062+ 82 Linux swap
/dev/sda3 625 19457 151276072+ 83 Linux
As you can see we’re going to use sda1
to store Optware, sda2
for swap and sda3
for video content.
To do that you may use fdisk
, mkfs.ext3
and mkswap
commands like this:
# after fdisk partitioning
tangox[~] mkswap /dev/sda2
tangox[~] mkfs.ext3 /dev/sda1
tangox[~] mkfs.ext3 /dev/sda3
Initialize swap
Dune a has special mechanism to autostart some services during initial boot. We’re going to put some preliminary startup work there.
Create file /mnt/config/boot/bootstrap.sh
and put following contents inside:
#!/bin/sh
# Turn on swap partition
swapon /dev/sda2
Then, make sure that file is executable:
tangox[~] chmod +x /mnt/config/boot/bootstrap.sh
Give nice names to HDD partitions
In order for HDD partitions to look nice in Dune GUI (sources menu section), will do some more tuning.
First off, issue df
command:
tangox[~] df
Filesystem Size Used Available Use% Mounted on
tmpfs 92.7M 3.1M 89.6M 3% /tmp
/dev/sda3 142.0G 57.8G 77.0G 43% /D
/dev/mtdblock4 105.2M 75.6M 29.5M 72% /app
/dev/loop0 262.3M 262.3M 0 100% /tango3
/dev/mtdblock5 100.0M 8.1M 91.9M 8% /mnt
/dev/sda1 3.8G 132.3M 3.4G 4% /tmp/mnt/storage/34611c58-ba35-4256-b546-8038078575ab
/dev/sda3 142.0G 57.8G 77.0G 43% /tmp/mnt/storage/566c9eb8-8239-4af5-9ea5-609ddc035e6f
You’ll see those ugly long directory names, which we want to change. Go to /tmp/mnt/storage/34611c58-ba35-4256-b546-8038078575ab
and create the file dune_folder.txt
with the following contents:
storage_name=opt
system_files=*
Because this is a system partition for our Optware we’re going to hide every file from being visible by end-user. Go to next directory and create similar file:
tangox[~] cd /tmp/mnt/storage/566c9eb8-8239-4af5-9ea5-609ddc035e6f
tangox[~] echo "storage_name=media" >> dune_folder.txt
tangox[~] echo "system_files=*.part" >> dune_folder.txt
This set of folder settings will make uncompleted torrent files hidden from Dune menus. Once you’re done, reboot, telnet again and run df
command one more time:
tangox[~] df
Filesystem Size Used Available Use% Mounted on
tmpfs 92.7M 3.1M 89.6M 3% /tmp
/dev/sda3 142.0G 57.8G 77.0G 43% /D
/dev/mtdblock4 105.2M 75.6M 29.5M 72% /app
/dev/loop0 262.3M 262.3M 0 100% /tango3
/dev/mtdblock5 100.0M 8.1M 91.9M 8% /mnt
/dev/sda1 3.8G 132.3M 3.4G 4% /tmp/mnt/storage/opt
/dev/sda3 142.0G 57.8G 77.0G 43% /tmp/mnt/storage/media
Things will look more nicer! Now, let’s make aliases for opt
and media
folders by symlinking them to root. Make sure your system don’t have any important data at /opt
as we’re going to delete it. Now, open /mnt/config/boot/bootstrap.sh
file and modify it to look as following:
#!/bin/sh
# Turn on swap partition
swapon /dev/sda2
# symlink optware and media folders
rm -rf /opt
ln -s /tmp/mnt/storage/opt /opt
ln -s /tmp/mnt/storage/media /media
Now reboot, and ensure that there are valid /opt
and /media
symlinks at root path.
Optware installation
Finally we’re ready to install additional software. Create optware installation script at /opt/install.sh
:
#!/bin/sh
# Source code: http://www.nslu2-linux.org/wiki/Optware/HomePage
feed=http://ipkg.nslu2-linux.org/feeds/optware/oleg/cross/unstable/
# install ipkg
ipk_name=`wget -qO- $feed/Packages | awk '/^Filename: ipkg-opt/ {print $2}'`
/usr/bin/wget "$feed/$ipk_name"
/bin/tar -xOvzf $ipk_name ./data.tar.gz | tar -C / -xzvf -
mkdir -p /opt/etc/ipkg
echo "src cross $feed" > /opt/etc/ipkg/feeds.conf
# install uc-libC
ipk_name=`wget -qO- $feed/Packages | awk '/^Filename: uclibc-opt/ {print $2}'`
/usr/bin/wget "$feed/$ipk_name"
/bin/tar -xOvzf $ipk_name ./data.tar.gz | tar -C / -xzvf -
To do that you may should use vi
editor which is available by default. Ensure that the file is executable and run it:
tangox[~] chmod +x /opt/install.sh
# run it
tangox[opt] ./install.sh
Connecting to ipkg.nslu2-linux.org (140.211.169.161:80)
ipkg-opt_0.99.163-10 100% |*************************************************************************************************************| 75831 00:00:00 ETA
./
./opt/
./opt/bin/
./opt/bin/ipkg
./opt/bin/ipkg-opt
./opt/bin/update-alternatives
./opt/etc/
./opt/etc/ipkg.conf
.....................................
Connecting to ipkg.nslu2-linux.org (140.211.169.161:80)
uclibc-opt_0.9.28-13 100% |*************************************************************************************************************| 832k 00:00:00 ETA
./
./opt/
./opt/etc/
./opt/lib/
./opt/lib/ld-uClibc-0.9.28.so
./opt/lib/ld-uClibc.so.0
./opt/lib/libc.so
......................................................
If you’ve been observing messages above chances are high that you now have a working skeleton of optware system.
Let’s check this by typing:
tangox[opt] /opt/bin/ipkg --version
ipkg version 0.99.163
This means that package management system has been installed and works fine. From this time on you have the ability to install tons of additional linux software precompiled for MIPS architecture! You may get the list of available software by typing ipkg --list
, and we’ll continue our tuning process.
Fix PATH variable
Let’s make using optware more convenient, open /mnt/config/boot/bootstrap.sh
and add following lines:
# fix PATH for new packages
echo "export PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/bin/X11:/usr/local/bin" >> /root/.bashrc
echo "export PATH=/opt/bin:/opt/sbin:/bin:/sbin:/usr/bin:/usr/bin/X11:/usr/local/bin" >> /etc/profile
Optware autostart hack
In order to autostart all neccessary services we’re going to do some additional hacking. At first, it seems that adding call of autostart script to /mnt/config/boot/bootstrap.sh
will do the trick, but after numeruos attempts to do just that things didn’t work. My guess is that at /mnt/config/boot/
stage external storage is not mounted yet, so everything under /opt
is not available.
To overcome that, I’ve managed to create a bit ugly, but working solution, i.e. to autostart services using crond, which is available by default on device. The idea is simple: start optware only once, and if it is started already just do nothing. Let’s write some scripts to achieve that.
Create /opt/etc/rc.optware
file with following contents:
#!/bin/sh
# Start all init scripts in /opt/etc/init.d
# executing them in numerical order.
for i in /opt/etc/init.d/* ;do
# Ignore dangling symlinks (if any).
[ ! -f "$i" ] && continue
case "$i" in
*.sh)
# Source shell script for speed.
(
trap - INT QUIT TSTP
set start
. $i
)
;;
*)
# No sh extension, so fork subprocess.
$i start
;;
esac
done
Create /opt/etc/optware-cron.sh
with following contents:
#!/bin/sh
# After reboot this file will be absent!
FLAG_FILE=/var/run/optware.started
# if file not found, run optware
if [ ! -f $FLAG_FILE ]; then
touch $FLAG_FILE
/opt/etc/rc.optware
fi
Make sure both files are executable:
tangox[opt] chmod +x optware-cron.sh rc.optware
Open our /mnt/config/boot/bootstrap.sh
file and add following lines:
killall crond
echo "*/1 * * * * /opt/etc/optware-cron.sh" >> /tmp/cron/crontabs/root
/usr/sbin/crond
This will modify crond config during startup and will make sure that optware-cron.sh
file will be launched once per every minute.
Reboot your dune and ensure that everything works fine. Next, we’re going to add some useful software like transmission!
Install transmission
tangox[opt] ipkg install transmission
Let’s create startup script for Transmission daemon, open /opt/etc/init.d/S60transmission
and type in:
#!/bin/sh
# Exit if the package is not installed
test -f /opt/bin/transmission-daemon || exit 0
function start_daemon() {
/sbin/start-stop-daemon --start --quiet --exec /opt/bin/transmission-daemon --auth --config-dir=/opt/etc/transmission/ --username="your_username" --password="your_password" --download-dir=/media/ --allowed=* --logfile=/opt/var/log/transmissiond.log
}
case "$1" in
start)
echo "Starting transmission-daemon"
start_daemon
;;
stop)
echo "Stopping transmission-daemon"
/sbin/start-stop-daemon --stop --quiet --exec /opt/bin/transmission-daemon
;;
restart)
echo -n "Stopping transmission-daemon"
/sbin/start-stop-daemon --stop --quiet --exec /opt/bin/transmission-daemon
for i in 1 2 3 ;
do
sleep 1
echo -n "."
done
echo "Restarting transmission-daemon"
start_daemon
;;
*)
echo "Usage: /opt/etc/init.d/S60transmission {start|stop|restart}"
exit 1
esac
exit 0
Don’t forget to make this script executable and make sure you provide valid your_username
and your_password
. Verify that transmission daemon works by typing in the terminal:
tangox[opt] /opt/etc/init.d/S60transmission start
tangox[opt] ps -Af | grep trans
1500 root 0:04 /opt/bin/transmission-daemon --auth --config-dir=/opt/etc/transmission/ --username="your_username" --password="your_password" --download-dir=/media/ --allowed=* --logfile=/opt/var/log/transmissiond.log
If everything went fine the last command should output transmission process running in the background, you might also observe it by running top
command.
Reboot your dune once again, open your favorite web browser and point it to http://dune_ip:9091
you should see basic auth dialog from your Transmission web interface. From this point you’re free to download any torrent media which will be instantly accessible for playback once completed.
Some useful tips
1) I would highly recommend desktop client for transmission called Transmission Remote GUI it has more control and features than default web interface.
2) Find out power management
section in main dune menu and set sleep mode
to never
. You need your device to be online 7×24 don’t you?
3) Install openssh
tools, setup public key based authentication and turn off passwordless telnet to increase security
Links
- http://files.dune-hd.com/partners/sdk/dune_devel_info.txt
- http://files.dune-hd.com/partners/sdk/dune_service_telnetd.dsf
- http://dune-hd.com/support/misc/dune_folder_howto.txt
- http://files.dune-hd.com/partners/sdk/dune_boot_process.txt
- https://code.google.com/p/transmisson-remote-gui/
- http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html