#!/bin/sh

###############################################################################
#
# Configuration file for setting up the unit.
#
# Copyright (c) 2016
# License- GPL
# Author-  Josh Kurland
# Company- Adtec Digital, Inc.
# Date-    2016-09-29
# Last edit - 2006-11-30 Increased /tmp size to 64m to accomodate large releases
# This file normally just mounts all of the directories required to give the 
# product it's "personality".
#
# TODO:  detect existing partitions instead of assuming 1 exists for each drive
#
##############################################################################

for MOUNT in \
  "etc                 /etc                      none   bind,rw                     umount" \
  "home                /home                     none   bind,rw                     umount" \
  "root                /root                     none   bind,rw                     umount" \
  "var                 /var                      none   bind,rw                     umount" \
  "lib/systemd         /lib/systemd              none   bind,rw                     umount" \
  "media               /media                    none   bind,rw                     umount"
#  "usbfs               /proc/bus/usb             usbfs  noauto                      umount" \
#  "sysfs               /sys                      sysfs  noauto                      umount" 
  
do
  do_mount "${MOUNT}"
done

# comment this to get get more kernel debug messages from printk on the console
echo "4 4 1 7" > /proc/sys/kernel/printk

# read slot from gpio, note requires rcw that enables gpio pins
echo 409 > /sys/class/gpio/export
let SLOT4=4*`cat /sys/class/gpio/gpio409/value`
#echo 409 > /sys/class/gpio/unexport

echo 408 > /sys/class/gpio/export
let SLOT2=2*`cat /sys/class/gpio/gpio408/value`
#echo 408 > /sys/class/gpio/unexport

echo 407 > /sys/class/gpio/export
let SLOT1=1*`cat /sys/class/gpio/gpio407/value`
#echo 407 > /sys/class/gpio/unexport

let HW_SLOT=$SLOT4+$SLOT2+$SLOT1
let UI_SLOT="$HW_SLOT + 5"
if [[ "$UI_SLOT" -gt "8"  ]];
then let UI_SLOT="8 - $HW_SLOT"
fi

# Set UI_SLOT in afiniti.conf (if not already set)
AFINITI_CONF=/rootfs/etc/afiniti/afiniti.conf
if ! grep "UI_SLOT=$UI_SLOT" $AFINITI_CONF; then
	echo Updating afiniti.conf
	sed -i -e "s/UI_SLOT=[1-8]/UI_SLOT=$UI_SLOT/" $AFINITI_CONF
	sync
fi
if ! grep "HW_SLOT=$HW_SLOT" $AFINITI_CONF; then
	echo Updating afiniti.conf
	sed -i -e "s/HW_SLOT=[0-7]/HW_SLOT=$HW_SLOT/" $AFINITI_CONF
	sync
fi
if [ -n "$SERIALNUMKV" ] && ! grep "$SERIALNUMKV" $AFINITI_CONF; then
	echo Updating afiniti.conf
	sed -i -e "s/serialnum=.*/$SERIALNUMKV/" $AFINITI_CONF
	sync
fi
if [ -n "$MTFRDATEKV" ] && ! grep "$MTFRDATEKV" $AFINITI_CONF; then
	echo Updating afiniti.conf
	sed -i -e "s/mtfrdate=.*/$MTFRDATEKV/" $AFINITI_CONF
	sync
fi

# Set eth2 address for slot (if not already set)
ETH2_CONF=/rootfs/etc/systemd/network/eth2.network
if ! grep "Address=169.254.1.$UI_SLOT" $ETH2_CONF; then
	echo Updating eth2.network
	echo "[Match]" > $ETH2_CONF
	echo "Name=eth2" >> $ETH2_CONF
	echo >> $ETH2_CONF
	echo "[Network]" >> $ETH2_CONF
	echo "Address=169.254.1.${UI_SLOT}/24" >> $ETH2_CONF
	echo >> $ETH2_CONF
	echo "[Link]" >> $ETH2_CONF
	echo "MACAddress=00:90:1f:00:0e:${HW_SLOT}1" >> $ETH2_CONF
fi

# Make configuration changes for master or slave (if not already set)
MODULES_LOAD_CONF=/rootfs/etc/modules-load.d
FANCONTROL_SERVICE=/rootfs/etc/systemd/system/multi-user.target.wants/fancontrol.service
TIMESYNCD_SERVICE=/rootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service
MENUD_SERVICE=/rootfs/etc/systemd/system/multi-user.target.wants/menud.service
if [[ "$HW_SLOT" -eq "3" ]]; then
# if master, activate drivers (frpanel, rtc, fans) and services (fancontrol)
	F=`readlink $MODULES_LOAD_CONF/fans.conf`
	if [[ "$F" == "/dev/null" ]]; then
		echo Configuring master
		ln -sf /usr/local/lib/modules-load.d/fans.conf $MODULES_LOAD_CONF/fans.conf
		ln -sf /usr/local/lib/modules-load.d/rtc.conf $MODULES_LOAD_CONF/rtc.conf
		ln -sf /usr/local/lib/modules-load.d/frpanel.conf $MODULES_LOAD_CONF/frpanel.conf
		#ln -sf /lib/systemd/system/fancontrol.service $FANCONTROL_SERVICE
		ln -sf /lib/systemd/system/systemd-timesyncd.service $TIMESYNCD_SERVICE
		ln -sf /lib/systemd/system/menud.service $MENUD_SERVICE
	fi
else
# if slave, mask drivers (frpanel, rtc, fans) and services (fancontrol)
	F=`readlink $MODULES_LOAD_CONF/fans.conf`
	if [[ "$F" != "/dev/null" ]]; then
		echo Configuring slave
		ln -sf /dev/null /rootfs/etc/modules-load.d/fans.conf
		ln -sf /dev/null /rootfs/etc/modules-load.d/rtc.conf
		ln -sf /dev/null /rootfs/etc/modules-load.d/frpanel.conf
		rm $FANCONTROL_SERVICE
		rm $TIMESYNCD_SERVICE
		rm $MENUD_SERVICE
	fi
fi

# Mount the large partition
do_mount  "/dev/mmcblk0p8  /media/hd0  ext4  rw  umount"
if [ ! -d $ROOTFS_DIR/media/hd0/media ]; then
	mkdir $ROOTFS_DIR/media/hd0/media
	chown 500.1000 $ROOTFS_DIR/media/hd0/media
	chmod g+ws $ROOTFS_DIR/media/hd0/media
fi
if [ ! -d $ROOTFS_DIR/media/hd0/log -o ! -d $ROOTFS_DIR/media/hd0/log/journal ]; then
	mkdir $ROOTFS_DIR/media/hd0/log
	mkdir $ROOTFS_DIR/media/hd0/log/journal
	chown -R 500.1000 $ROOTFS_DIR/media/hd0/log
	chmod -R g+ws $ROOTFS_DIR/media/hd0/log
fi

# Fix dangling journals from before machine-id was migrated
MACHID=`cat $ROOTFS_DIR/etc/machine-id`
if [[ ${#MACHID} -gt 0 ]]; then
  info "Migrate fix: journal from old machine-id"
  find $ROOTFS_DIR/media/hd0/log/journal -not -name ${MACHID} -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
fi

# Correct default log link, if necessary
L=`readlink $ROOTFS_DIR/var/log`
if [[ "$L" == "volatile/log" ]]; then
	rm $ROOTFS_DIR/var/log
	ln -s /media/hd0/log $ROOTFS_DIR/var/log
fi
