#!/bin/sh

BOLD="\033[1;33m"
NORM="\033[0m"
INFO="$BOLD Info:$NORM"
ERROR="$BOLD Error:$NORM"
WARNING="$BOLD Warning:$NORM"
INPUT="$BOLD => $NORM"

if [ -z $1 ]
then
	chrootDir=debian
else
	chrootDir=$1
fi

chrootBaseDir=/DataVolume/$chrootDir
repositoryURL=http://fox-exe.ru/
isServicesInstalled=no

echo -e "$INFO Welcome to \"Chroot for WDMC-Gen1\" installer"
read -r -e -p $'\e[32mContinue (y/n)? \e[0m' -N1 userAnswer
if [ ! "$userAnswer" = "y" ]; then
	echo -e "$INFO Ok, quit..."
	exit 0
fi

if [ -e /etc/init.d/chroot_$chrootDir.sh ]
then
	echo -e $ERROR Chroot services start/stop script detected! Please, remove
	echo -e $ERROR previous installation or specify destination folder name
	echo -e $ERROR and run script again with <foldername> parameter, for example:
	echo -e $ERROR ./chroot64k_install.sh debian64k
	exit 1
fi

if [ -d $chrootBaseDir ]
then
	echo -e $WARNING Previous chroot environment will be moved to $chrootBaseDir.old
	[ -d $chrootBaseDir.old ] || mkdir $chrootBaseDir.old
	mv -f $chrootBaseDir/* $chrootBaseDir.old
else
	mkdir $chrootBaseDir
fi

echo -e $INFO Replacing APT repository...
echo "deb ${repositoryURL} wheezy-64k main" > /etc/apt/sources.list

echo -e $INFO Download and install debootstrap package...
apt-get update
apt-get --force-yes install debootstrap

echo -e $INFO Preparing a new Debian wheezy chroot file base. Please, be patient,
echo -e $INFO may takes a long time on low speed connection...
cp /usr/share/debootstrap/scripts/wheezy /usr/share/debootstrap/scripts/wheezy-64k
debootstrap --no-check-gpg --no-check-certificate --variant=minbase --exclude=yaboot,udev,dbus --include=locales wheezy-64k $chrootBaseDir $repositoryURL
echo "share:x:1000:root,www-data,daapd" >> $chrootBaseDir/etc/group
echo "deb ${repositoryURL} wheezy-64k main" > $chrootBaseDir/etc/apt/sources.list
sed -e "s/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/" -e "s/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/" $chrootBaseDir/etc/locale.gen >$chrootBaseDir/etc/locale.gen.sed
mv -f $chrootBaseDir/etc/locale.gen.sed $chrootBaseDir/etc/locale.gen
chroot $chrootBaseDir locale-gen
chroot $chrootBaseDir apt-get update > /dev/null 2>&1

echo -e $INFO A Debian wheezy chroot environment installed.
echo -e $INFO Now deploying services start script...
#################################################################################
cat <<\EOF > $chrootBaseDir/chroot_$chrootDir.sh
#!/bin/sh

SCRIPT_NAME=$(basename $0)
SCRIPT_START='99'
SCRIPT_STOP='01'

MOUNT_DIR="/DataVolume/shares"
CHROOT_DIR="__CHROOT_DIR_PLACEHOLDER__"
CHROOT_SERVICES="$(cat $CHROOT_DIR/chroot-services.list)"

### BEGIN INIT INFO
# Provides:          $SCRIPT_NAME
# Required-Start:
# Required-Stop:
# X-Start-Before:
# Default-Start:     2 3 4 5
# Default-Stop:      0 6
### END INIT INFO

script_install() {
  cp $0 /etc/init.d/$SCRIPT_NAME
  chmod a+x /etc/init.d/$SCRIPT_NAME
  update-rc.d $SCRIPT_NAME defaults $SCRIPT_START $SCRIPT_STOP > /dev/null
}

script_remove() {
  update-rc.d -f $SCRIPT_NAME remove > /dev/null
  rm -f /etc/init.d/$SCRIPT_NAME
}

###

shareDirMountCount="$(mount | grep "$CHROOT_DIR/" | wc -l)"

check_started() {
  if [[ $shareDirMountCount -gt 0 ]]; then
      echo "CHROOT servicess seems to be already started, exiting..."
      exit 1
  fi
}

check_stopped() {
  if [[ $shareDirMountCount -eq 0 ]]; then
      echo "CHROOT services seems to be already stopped, exiting..."
      exit 1
  fi
}

###

start() {
    check_started
    mount --bind $MOUNT_DIR $CHROOT_DIR/mnt
    chroot $CHROOT_DIR mount -t sysfs none /sys -o rw,noexec,nosuid,nodev
    mount -o bind /dev $CHROOT_DIR/dev
    mount -o bind /dev/pts $CHROOT_DIR/dev/pts
    mount -o bind /proc $CHROOT_DIR/proc
    for ITEM in $CHROOT_SERVICES; do
        chroot $CHROOT_DIR service $ITEM start
    done
}

stop() {
    check_stopped
    for ITEM in $CHROOT_SERVICES; do
        chroot $CHROOT_DIR service $ITEM stop
    done
    umount $CHROOT_DIR/proc
    umount $CHROOT_DIR/dev/pts
    umount $CHROOT_DIR/dev
    chroot $CHROOT_DIR umount /sys
    umount $CHROOT_DIR/mnt
}

#########

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        stop
        sleep 1
        start
    ;;
    install)
        script_install
    ;;
    init)
        script_install
        sleep 1
        start
    ;;
    remove)
#        stop
#        sleep 1
        script_remove
        echo Warning! A reboot is highly recommended to complete uninstallation!
    ;;
    *)
        echo "Usage: $0 {start|stop|restart|install|init|remove}"
        exit 1
esac

exit 0
EOF
#################################################################################
eval sed -i 's,__CHROOT_DIR_PLACEHOLDER__,$chrootBaseDir,g' $chrootBaseDir/chroot_$chrootDir.sh
chmod +x $chrootBaseDir/chroot_$chrootDir.sh

touch $chrootBaseDir/chroot-services.list
$chrootBaseDir/chroot_$chrootDir.sh install
echo >> $chrootBaseDir/root/.bashrc
echo PS1=\'\(chroot-$chrootDir\)\\w\# \' >> $chrootBaseDir/root/.bashrc
$chrootBaseDir/chroot_$chrootDir.sh start
echo -e $INFO ...finished.

echo -en $INPUT Do you wish to install miniDLNA UPnP/DLNA server [y/n]?
read userAnswer
if [ "$userAnswer" = "y" ] || [ "$userAnswer" = "yes" ]
then
	isServicesInstalled=yes
	echo -e $INFO UPnP/DLNA content will be taken from \"Public/Shared Music\",
	echo -e $INFO \"Public/Shared Pictures\" and\"Public/Shared Videos\" shares.
	chroot $chrootBaseDir apt-get --force-yes -qqy install minidlna
	chroot $chrootBaseDir /etc/init.d/minidlna stop > /dev/null 2>&1
	chroot $chrootBaseDir /etc/init.d/minissdpd stop > /dev/null 2>&1
	killall minidlna > /dev/null 2>&1
	[ -d "/DataVolume/shares/Public/Shared Music" ] || mkdir "/DataVolume/shares/Public/Shared Music"
	[ -d "/DataVolume/shares/Public/Shared Pictures" ] || mkdir "/DataVolume/shares/Public/Shared Pictures"
	[ -d "/DataVolume/shares/Public/Shared Videos" ] || mkdir "/DataVolume/shares/Public/Shared Videos"
	sed -i 's|^media_dir=/var/lib/minidlna|media_dir=A,/mnt/Public/Shared Music\nmedia_dir=P,/mnt/Public/Shared Pictures\nmedia_dir=V,/mnt/Public/Shared Videos|g' $chrootBaseDir/etc/minidlna.conf
	rm -f $chrootBaseDir/var/lib/minidlna/files.db
	echo minidlna >> $chrootBaseDir/chroot-services.list
	echo -e $INFO MiniDLNA is installed.
fi

echo -en $INPUT Do you wish to install Transmission BitTorrent client [y/n]?
read userAnswer
if [ "$userAnswer" = "y" ] || [ "$userAnswer" = "yes" ]
then
	isServicesInstalled=yes
	[ -d /DataVolume/shares/Public/Torrents ] || mkdir /DataVolume/shares/Public/Torrents
	echo -e $INFO Torrents content will be downloaded to \"Public/Torrents\" share. Installing...
	chroot $chrootBaseDir apt-get --force-yes -qqy install transmission-daemon
	chroot $chrootBaseDir /etc/init.d/transmission-daemon stop > /dev/null 2>&1
	sed -i 's/USER=debian-transmission/USER=root:share /g' $chrootBaseDir/etc/init.d/transmission-daemon
	sed -i "s|\"rpc-whitelist-enabled\": true,|\"rpc-whitelist-enabled\": false,|g" $chrootBaseDir/etc/transmission-daemon/settings.json
	sed -i "s|\"cache-size-mb\": 4,|\"cache-size-mb\": 8,|g" $chrootBaseDir/etc/transmission-daemon/settings.json
	sed -i "s|\"port-forwarding-enabled\": false,|\"port-forwarding-enabled\": true,|g" $chrootBaseDir/etc/transmission-daemon/settings.json
	sed -i "s|\"ratio-limit-enabled\": false,|\"ratio-limit-enabled\": true,|g" $chrootBaseDir/etc/transmission-daemon/settings.json
	sed -i "s|\"scrape-paused-torrents-enabled\": true,|\"scrape-paused-torrents-enabled\": false,|g" $chrootBaseDir/etc/transmission-daemon/settings.json
	sed -i "s|\"trash-original-torrent-files\": false,|\"trash-original-torrent-files\": true,|g" $chrootBaseDir/etc/transmission-daemon/settings.json
	sed -i "s|\"umask\": 18,|\"umask\": 2,|g" $chrootBaseDir/etc/transmission-daemon/settings.json
	sed -i "s|\"download-dir\": \"/var/lib/transmission-daemon/downloads\",|\"download-dir\": \"/mnt/Public/Downloads\",|g" $chrootBaseDir/etc/transmission-daemon/settings.json	
	echo transmission-daemon >> $chrootBaseDir/chroot-services.list
	echo -e $INFO Transmission is installed.
fi

if [ "$isServicesInstalled" == "yes" ]
then
	echo -en $INPUT Do you wish to start chroot services right now [y/n]?
	read userAnswer
	if [ "$userAnswer" = "y" ] || [ "$userAnswer" = "yes" ]
	then
		/etc/init.d/chroot_$chrootDir.sh stop
		sleep 5
		/etc/init.d/chroot_$chrootDir.sh start
	fi
fi

echo -e $INFO Congratulation! Installation finished. Youve got a working
echo -e $INFO Debian wheezy environment onboard.  You may install any services
echo -e $INFO you wish, but dont forget to add its names to
echo -e $INFO $chrootBaseDir/chroot-services.list
echo -e $INFO /etc/init.d/chroot_$chrootDir.sh script is used
echo -e $INFO to start or stop chroot services.
echo -e $INFO Found bug? Please, report us!
echo -e $INFO Thanks for http://code.google.com/p/mbl-common/issues/list
echo -e $INFO This sctipt updated by Fox_exe, https://fox-exe.ru/
