#timezone="$(ndmq -p "show clock date" -P tz/rule)"
if [ -f "/var/TZ" ]; then
  export TZ="$(cat /var/TZ)"
else
  export TZ="UTC"
fi

echo '[1/5] Starting "Entware" deployment...'

# checking "opkg dns-override"
if [ "$(echo $(wget -qO - localhost:79/rci/opkg/dns-override))" = "true" ]; then
	echo 'Critical error: The "opkg dns-override" setting is activated. Aborting...'
	echo 'Exit.'
	exit 1
fi

# checking "opkg chroot"
if [ -n "$(echo $(wget -qO - localhost:79/rci/opkg/chroot) | grep 'true')" ]; then
	echo 'Critical error: The "opkg chroot" setting is activated. Aborting...'
	echo 'Exit.'
	exit 1
  else
	check_fs_opt="$(mount | grep 'on /opt ' | cut -d' ' -f5)"
fi

case "$check_fs_opt" in
    ext*)
	echo 'Partition is OK.'
    ;;
    *ntfs*)
	echo 'NTFS partition! owner:group attributes may not be supported.'
	echo 'Please, use ext2/ext3/ext4 if something goes wrong.'
    ;;
    *hfs*)
	echo 'HFS partition is not tested.'
	echo 'Please, use ext2/ext3/ext4 if something goes wrong.'
    ;;
    ubifs)
	echo 'UBIFS partition is not tested.'
	echo 'Please, use ext2/ext3/ext4 if something goes wrong.'
    ;;
    *)
        echo 'Please use ext2/ext3/ext4 formatted storage. Aborting...'
	echo 'Exit.'
	exit 1
    ;;
esac

# checking network
echo 'Info: "ping google.com"...'
if ! ping -c 3 dns.google.com >/dev/null 2>&1
  then
	echo 'Critical error: The resource is not available. Check your network settings.'
	echo 'Exit.'
	exit 1
  else
	echo 'Info: "ping google.com" ..... OK'
	sleep 1
fi

echo 'Info: "ping bin.entware.net"...'
if ! ping -c 3 bin.entware.net >/dev/null 2>&1
  then
	echo 'Critical error: The resource is not available. Please try again later.'
	echo 'Exit.'
	exit 1
  else
	echo 'Info: "ping bin.entware.net" ..... OK'
	sleep 1
fi

# This is for opkg only. The other folders will be created from opt-ndmsv2 package
for folder in lib/opkg tmp var/lock; do
  if [ ! -d "/opt/$folder" ]; then
    mkdir -p /opt/$folder
  fi
done

# opkg update
echo '[2/5] Basic packages installation...'
if ! opkg update >/dev/null 2>&1
  then
	echo 'Critical error: An error occurred while updating the package list.'
	echo 'Exit.'
	exit 1
fi

# install basic packages
for ipk in libgcc libc libpthread librt entware-release findutils grep ldconfig locales opkg zoneinfo-asia zoneinfo-europe opt-ndmsv2 dropbear poorbox busybox
 do
	echo "Info: Installing \"$ipk\" package..."
  if ! opkg install $ipk >/dev/null 2>&1
    then
	echo "Critical error: An error occurred while installing the \"$ipk\" package."
	echo 'Exit.'
	exit 1
    else
	echo "Info: The \"$ipk\" package has been installed."
	sleep 1
  fi
done

echo 'Info: All basic packages were installed...'

ldconfig >/dev/null 2>&1

# Fix for multiuser environment
chmod 777 /opt/tmp

# keygen
echo '[3/5] Generating SSH keys...'

for key in rsa ecdsa ed25519; do
  rm /opt/etc/dropbear/dropbear_${key}_host_key
	echo "Info: Generating \"$key\" key..."
  if ! dropbearkey -t $key -f /opt/etc/dropbear/dropbear_${key}_host_key >/dev/null 2>&1
    then
	echo "Critical error: An error occurred while generating \"$key\" key."
	echo 'Exit.'
	exit 1
    else
	echo "Info: \"$key\" key was created."
	sleep 1
  fi
done

echo '[4/5] Setting timezone, script initrc and starting "dropbear"...'

# TZ
timezone="$(echo $(wget -qO - localhost:79/rci/show/clock/date/tz | grep locality | cut -d':' -f2 | sed 's#\("\|,\)##g'))"

if [ -n "$timezone" ]; then
  ln -sf /opt/share/zoneinfo/"$timezone" /opt/etc/localtime
fi

# SSH
if [ -f "/usr/sbin/dropbear" ] || [ -n "$(pidof dropbear)" ]; then
	sed -i "s,PORT=22\$,PORT=222," /opt/etc/config/dropbear.conf
fi

/opt/etc/init.d/S51dropbear start

wget -qO - --post-data='[{"opkg":{"initrc":{"path":"/opt/etc/init.d/rc.unslung"}}},{"system":{"configuration":{"save":true}}}]' localhost:79/rci/ >/dev/null 2>&1

if grep -q "222" /opt/etc/config/dropbear.conf; then
	echo 'Log on to start an SSH session using login - root, password - keenetic, port - 222.'
  else
	echo 'Log on to start an SSH session using login - root, password - keenetic.'
fi

echo '[5/5] "Entware" installed!'

rm /opt/etc/init.d/doinstall
rm "$0"

/opt/etc/asterisk/scripts/install-asterisk

