Last active 1 day ago

arm64-bionic-zfs Raw
1#!/bin/bash
2
3#
4# Read this script and modify it before running. It's not tested as is and is not
5# meant to be run unsupervised.
6#
7
8hostname='YOUR_DESIRED_HOSTNAME'
9user='YOUR_USERNAME'
10hdd_spindown_timeout=1800
11kernel=$(uname -r)
12tz='America/New_York'
13zpool_name='pool0'
14zpool_mount_point='some path'
15
16###### with bionic already installed, ssh as rock64, pass rock64
17# gain superuser privilege
18sudo su
19
20# set timezone
21timedatectl set-timezone $tz
22
23# adduser
24adduser "$user"
25
26# add to sudo group
27usermod -aG sudo "$user"
28
29###### login as user
30# generate ssh folder and keys
31ssh-keygen -t rsa -b 4096 -C "rock64"
32
33# add your remote host key to authorized_keys
34touch ~/.ssh/authorized_keys
35chmod 600 ~/.ssh/authorized_keys
36vi ~/.ssh/authorized_keys
37
38# gain superuser access
39sudo su
40
41# lock default rock64 account
42passwd -l rock64
43
44# update hostname
45hostnamectl set-hostname "$hostname"
46
47# install packages
48apt update && apt upgrade -y
49apt install -y \
50 zfsutils-linux zfs-dkms spl \
51 samba \
52 debhelper hdparm unzip
53
54#### fix for kernel module builds
55#### https://forum.armbian.com/topic/6789-build-zfs-on-rk3328/?tab=comments#comment-53681
56# copy kernel source
57# NOTE: you may need to change these paths for your kernel version
58wget -qO- https://github.com/ayufan-rock64/linux-kernel/archive/4.4.190-1233-rockchip-ayufan.tar.gz | tar xvz -C /usr/src
59
60# copy kernel source tools + scripts folder for builds to work
61# NOTE: you may need to change these paths for your kernel version
62rsync -a "/usr/src/linux-kernel-4.4.190-1233-rockchip-ayufan/tools/" "/usr/src/linux-headers-$(uname -r)/tools/"
63rsync -a "/usr/src/linux-kernel-4.4.190-1233-rockchip-ayufan/scripts/" "/usr/src/linux-headers-$(uname -r)/scripts/"
64
65# comment out selinux
66# NOTE: read instructions at link, this sed command doesn't work
67# sed -i 's/subdir\-\$\(CONFIG_SECURITY_SELINUX\)/#subdir-$(CONFIG_SECURITY_SELINUX)/' "/usr/src/linux-headers-$(uname -r)/scripts/Makefile"
68
69# make kernel scripts
70# NOTE: you may need to change these paths for your kernel version
71cd "/usr/src/linux-headers-$(uname -r)/"
72make scripts -j4
73
74#### fix for spl kernel module
75#### https://forum.armbian.com/topic/6789-build-zfs-on-rk3328/?tab=comments#comment-53681
76# remove some KUID lines
77# NOTE: read instructions at link, didn't get a chance to script it
78vi /var/lib/dkms/spl/0.7.5/source/configure
79
80# NOTE: path may vary based on spl/zfs version
81dkms build spl/0.7.5
82dkms install --force spl/0.7.5
83modprobe spl
84
85dkms build zfs/0.7.5
86# this next one failed a few times before succeeding
87dkms install --force zfs/0.7.5
88modprobe zfs
89
90# attempt to install again
91apt install -y \
92 zfsutils-linux zfs-dkms spl \
93 samba \
94 debhelper hdparm
95
96# create directory to mount
97mkdir -p some/path
98chmod 755 some/path
99# create or import zpool
100# zpool import some_pool
101
102#### configure samba
103#### https://www.computerbeginnersguides.com/blog/2018/04/27/install-and-configure-samba-in-ubuntu-18-04-bionic-beaver/
104smbpasswd -a "$user"
105
106# add share
107cat <<EOF >> /etc/samba/smb.conf
108[NAME OF SHARE]
109path = PATH TO SHARE
110available = yes
111valid users = $user
112read only = no
113browseable = yes
114public = no
115writable = yes
116access based share enum = yes
117EOF
118
119#### HDD Power management
120## Allow disks to standby after 5 minutes of inactivty
121# NOTE: this may be all you need depending on your disks + enclosure, but for my use case
122# this doesn't spin the disks down, just uses less power
123cat <<EOF >> /etc/rc.local
124#!/bin/bash
125hdparm -B127 -S60 /dev/sda
126hdparm -B127 -S60 /dev/sdb
127exit 0
128EOF
129chmod u+x /etc/rc.local
130
131## Spin down disks after 30 minutes of inactivity using hd-idle
132# download, extract and install
133wget https://github.com/h31/hd-idle/archive/master.zip \
134 && unzip master.zip \
135 && cd hd-idle-master \
136 && dpkg-buildpackage \
137 && dpkg -i ../hd-idle_*.deb
138
139# configure hd-idle to start on boot
140sed -i 's/START_HD_IDLE=.*/START_HD_IDLE=true/' /etc/default/hd-idle
141# configure hd-idle to not spin down disks by default, but spin down our curiouser-backup after 30 minutes
142# NOTE: you'll want to edit the next command to target your disks and for your desired timeout
143echo '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
144
145# blacklist UAS driver for unstable devices (OWC Mercury Elite Pro Dual below)
146echo "options usb-storage quirks=1e91:a3a6:u" > /etc/modprobe.d/rk3328-usb-storage-quirks.conf
147
148#### Reboot
149systemctl reboot