68 lines
1.8 KiB
Bash
Executable File
68 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
function print {
|
|
echo >&2 "riju-init-volume: $@"
|
|
}
|
|
|
|
mount_point=/mnt/riju
|
|
|
|
mkdir -p "${mount_point}"
|
|
|
|
disks="$(lsblk -l -d -b -o name,size | grep -Ev 'loop|NAME')"
|
|
num_disks="$(wc -l <<< "${disks}")"
|
|
|
|
if [[ "${num_disks}" != 2 ]]; then
|
|
print "found unexpected number of disks from lsblk:"
|
|
printf >&2 '%s\n' "${disks}"
|
|
exit 1
|
|
fi
|
|
|
|
disk="$(sort -n -k2 <<< "${disks}" | tail -n1 | awk '{ print $1 }')"
|
|
print "identified data volume: ${disk}"
|
|
|
|
num_parts="$(lsblk -l -o name | (grep "${disk}." || true) | wc -l)"
|
|
print "volume has ${num_parts} partition(s)"
|
|
if [[ "${num_parts}" != 1 ]]; then
|
|
print "repartitioning so we have exactly one partition"
|
|
sfdisk -X gpt "/dev/${disk}" <<< ";"
|
|
print "waiting for 1 second so that partitions show up in /dev"
|
|
sleep 1
|
|
fi
|
|
|
|
part="$(lsblk -l -o name | (grep "${disk}." || true) | head -n1)"
|
|
print "identified data partition: ${part}"
|
|
|
|
if ! blkid "/dev/${part}" | grep -q "\bUUID="; then
|
|
print "no filesystem detected; initializing with ext4"
|
|
mkfs.ext4 "/dev/${part}"
|
|
fi
|
|
|
|
blkid_env="$(blkid /dev/${part} -o export)"
|
|
uuid="$(eval "${blkid_env}"; echo "${UUID}")"
|
|
|
|
print "identified filesystem UUID: ${uuid}"
|
|
|
|
if ! cat /etc/fstab | grep -q "${uuid}"; then
|
|
print "filesystem not listed in /etc/fstab; appending"
|
|
cat <<EOF >> /etc/fstab
|
|
UUID=${uuid} ${mount_point} ext4 defaults 0 2
|
|
EOF
|
|
fi
|
|
|
|
mount -a
|
|
|
|
print "filesystem mounted at ${mount_point}"
|
|
|
|
docker_args="-g ${mount_point}/docker"
|
|
|
|
if ! cat /lib/systemd/system/docker.service | grep -q -- "${docker_args}"; then
|
|
print "adding '${docker_args}' to docker.service"
|
|
sed -Ei "s|ExecStart=.+|& ${docker_args}|" /lib/systemd/system/docker.service
|
|
|
|
print "restarting Docker daemon"
|
|
systemctl daemon-reload
|
|
systemctl restart docker
|
|
fi
|