#!/bin/bash

#
# Read this script and modify it before running. It's not tested as is and is not
# meant to be run unsupervised. 
#

hostname='YOUR_DESIRED_HOSTNAME'
user='YOUR_USERNAME'
hdd_spindown_timeout=1800
kernel=$(uname -r)
tz='America/New_York'
zpool_name='pool0'
zpool_mount_point='some path'

###### with bionic already installed, ssh as rock64, pass rock64
# gain superuser privilege
sudo su

# set timezone
timedatectl set-timezone $tz

# adduser
adduser "$user"

# add to sudo group
usermod -aG sudo "$user"

###### login as user
# generate ssh folder and keys
ssh-keygen -t rsa -b 4096 -C "rock64"

# add your remote host key to authorized_keys
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
vi ~/.ssh/authorized_keys

# gain superuser access
sudo su

# lock default rock64 account
passwd -l rock64

# update hostname
hostnamectl set-hostname "$hostname"

# install packages
apt update && apt upgrade -y
apt install -y \
  zfsutils-linux zfs-dkms spl \
  samba \
  debhelper hdparm unzip

#### fix for kernel module builds
#### https://forum.armbian.com/topic/6789-build-zfs-on-rk3328/?tab=comments#comment-53681
# copy kernel source
# NOTE: you may need to change these paths for your kernel version
wget -qO- https://github.com/ayufan-rock64/linux-kernel/archive/4.4.190-1233-rockchip-ayufan.tar.gz | tar xvz -C /usr/src

# copy kernel source tools + scripts folder for builds to work
# NOTE: you may need to change these paths for your kernel version
rsync -a "/usr/src/linux-kernel-4.4.190-1233-rockchip-ayufan/tools/" "/usr/src/linux-headers-$(uname -r)/tools/"
rsync -a "/usr/src/linux-kernel-4.4.190-1233-rockchip-ayufan/scripts/" "/usr/src/linux-headers-$(uname -r)/scripts/"

# comment out selinux
# NOTE: read instructions at link, this sed command doesn't work
# sed -i 's/subdir\-\$\(CONFIG_SECURITY_SELINUX\)/#subdir-$(CONFIG_SECURITY_SELINUX)/' "/usr/src/linux-headers-$(uname -r)/scripts/Makefile"

# make kernel scripts
# NOTE: you may need to change these paths for your kernel version
cd "/usr/src/linux-headers-$(uname -r)/"
make scripts -j4

#### fix for spl kernel module
#### https://forum.armbian.com/topic/6789-build-zfs-on-rk3328/?tab=comments#comment-53681
# remove some KUID lines
# NOTE: read instructions at link, didn't get a chance to script it
vi /var/lib/dkms/spl/0.7.5/source/configure

# NOTE: path may vary based on spl/zfs version
dkms build spl/0.7.5
dkms install --force spl/0.7.5
modprobe spl

dkms build zfs/0.7.5
# this next one failed a few times before succeeding
dkms install --force zfs/0.7.5
modprobe zfs

# attempt to install again
apt install -y \
  zfsutils-linux zfs-dkms spl \
  samba \
  debhelper hdparm
  
# create directory to mount
mkdir -p some/path
chmod 755 some/path
# create or import zpool
# zpool import some_pool

#### configure samba
#### https://www.computerbeginnersguides.com/blog/2018/04/27/install-and-configure-samba-in-ubuntu-18-04-bionic-beaver/
smbpasswd -a "$user"

# add share
cat <<EOF >> /etc/samba/smb.conf
[NAME OF SHARE]
path = PATH TO SHARE
available = yes
valid users = $user
read only = no
browseable = yes
public = no
writable = yes
access based share enum = yes
EOF

#### HDD Power management
## Allow disks to standby after 5 minutes of inactivty
# NOTE: this may be all you need depending on your disks + enclosure, but for my use case
# this doesn't spin the disks down, just uses less power
cat <<EOF >> /etc/rc.local
#!/bin/bash
hdparm -B127 -S60 /dev/sda
hdparm -B127 -S60 /dev/sdb
exit 0
EOF
chmod u+x /etc/rc.local

## Spin down disks after 30 minutes of inactivity using hd-idle
# download, extract and install
wget https://github.com/h31/hd-idle/archive/master.zip \
  && unzip master.zip \
  && cd hd-idle-master \
  && dpkg-buildpackage \
  && dpkg -i ../hd-idle_*.deb

# configure hd-idle to start on boot
sed -i 's/START_HD_IDLE=.*/START_HD_IDLE=true/' /etc/default/hd-idle
# configure hd-idle to not spin down disks by default, but spin down our curiouser-backup after 30 minutes
# NOTE: you'll want to edit the next command to target your disks and for your desired timeout
echo 'HD_IDLE_OPTS="-i 0 -a sda -i $hdd_spindown_timeout -a sdb -i $hdd_spindown_timeout -l /var/log/hd-idle.log"' >> /etc/default/hd-idle

#### Reboot
systemctl reboot