tolvmxfs/init.sh

92 lines
1.8 KiB
Bash

#!/bin/sh -e
Usage() {
>&2 echo "Usage: $0 hostname [vgname]"
exit 1
}
die() {
>&2 echo "died: $*"
exit 1
}
msg() {
>&2 printf '\e[34;1m%s\e[0m\n' "$*"
}
lv_exists() {
true && lvs --noheadings --options lv_name "$1"
case $? in
0) return 0 ;;
5) return 1 ;;
*) die "Error while determining, if lv «$1» exists" ;;
esac
}
alias blkuuid="blkid -ovalue -sUUID" blkfstype="blkid -ovalue -sTYPE"
[ X = X"$1" ] && Usage
[ X-h = X"$1" ] && Usage
[ X--help = X"$1" ] && Usage
hostname="$1"
#vgname="${2:-${hostname}sd}"
disc="/dev/mmcblk1"
pvpath="${disc}p2"
echo "Hostname: «$hostname»"
#echo "VG-name: «$vgname»"
echo
msg "Install needed tools..."
apt update
apt install -y lvm2 xfsprogs
msg "Set Hostname «$hostname»..."
oldhostname=`cat /etc/hostname`
sed -i -e "s/$oldhostname/$hostname/g" /etc/hosts
echo "$hostname" > /etc/hostname
vgname="`pvs --noheadings --options vg_name "$pvpath" | sed -e 's/^ *//'`"
# renaming does not work, because blockdevices will not be created.
# vgknodes, vgscan --mknodes tested.
#if [ "X$oldvgname" = "X$vgname" ]
#then
# msg "VG already named «$vgname»."
#else
# msg "Rename VG in «$vgname»..."
# vgrename "$oldvgname" "$vgname"
#fi
msg "Expand PV «$pvpath»..."
parted -ms "$disc" -- resizepart 2 -4MB print
pvresize "$pvpath"
msg "Expand root-LV..."
lvextend -rL4G "$vgname/root"
if lv_exists "$vgname/swap"
then
msg "LV «swap» already exists."
else
msg "Prepare swap-LV..."
lvcreate -nswap -L2G "$vgname"
mkswap "/dev/$vgname/swap"
echo "UUID=`blkuuid /dev/$vgname/swap` swap swap sw 0 0" >>/etc/fstab
fi
if lv_exists "$vgname/home"
then
msg "LV «home» already exists"
else
msg "Prepare home-LV..."
lvcreate -nhome -L4G "$vgname"
mkfs.xfs "/dev/$vgname/home"
echo "UUID=`blkuuid /dev/$vgname/home` /home xfs defaults 0 0" >>/etc/fstab
fi
msg "Install Updates..."
apt dist-upgrade -y
msg "ok"