Skip to content

Instantly share code, notes, and snippets.

@jchodakowski
Created March 7, 2017 21:48
Show Gist options
  • Save jchodakowski/3ccf5fc96e6e78362ade56f7fe0dcf4b to your computer and use it in GitHub Desktop.
Save jchodakowski/3ccf5fc96e6e78362ade56f7fe0dcf4b to your computer and use it in GitHub Desktop.
Complex filesystem shell script
#!/bin/sh
case "$1" in
# update the file 'partman-base.postinst' with our filesystem "installer"
installer)
#sed -i 's/partman/\/tmp\/lvm.sh partman/' /var/lib/dpkg/info/partman-base.postinst
sed -i 's/partman/\/tmp\/lvm.sh destroy; \/tmp\/lvm.sh partman/' /var/lib/dpkg/info/partman-base.postinst
logger -t lvm.sh modified partman-base.postinst
;;
# carry out the update we performed above
partman)
logger -t lvm.sh partition configuration starting
modprobe dm_mod
DISK_COUNT=`ls -1 /dev/sd? | wc -l`
# Fallback to normal partman setup if we don't detect our disks
if [ $DISK_COUNT -lt 2 ]
then
logger -t lvm.sh Cannot correct number of disks, running partman
partman
exit
fi
SIZE_SDA=`sed -n 's/.* \([0-9]*\) sda$/\1/p' < /proc/partitions`
SIZE_SDB=`sed -n 's/.* \([0-9]*\) sdb$/\1/p' < /proc/partitions`
logger -t lvm.sh found disks sda: $SIZE_SDA sdb: $SIZE_SDB
# main disk (sda)
logger -t lvm.sh partitioning sda
parted -s /dev/sda -- mklabel msdos
parted -s /dev/sda -- mkpart primary 256k 512 # /boot
parted -s /dev/sda -- mkpart primary 512 100% # System LVM
parted -s /dev/sda -- set 1 boot on
parted -s /dev/sda -- set 2 root on
parted -s /dev/sda -- set 2 lvm on
logger -t lvm.sh partioning sda complete
# secondary disk (sdb)
logger -t lvm.sh partitioning sdb
parted -s /dev/sdb -- mklabel msdos
parted -s /dev/sdb -- mkpart primary 0 100%
parted -s /dev/sdb -- set 1 lvm on
logger -t lvm.sh partitioning sdb complete
# provision the filesystem for main disk
mke2fs -q -L boot /dev/sda1
logger -t lvm.sh "created boot file systems"
pvcreate -ff -y /dev/sda2
logger -t lvm.sh "created LVM physical volume on sda2"
vgcreate vg_system /dev/sda2
logger -t lvm.sh "created LVM volume group (vg_system) on sda2"
lvcreate -l 100%FREE -n root vg_system
logger -t lvm.sh "created logical volume (root) on vg_system"
mkfs.ext4 -q -L root /dev/vg_system/root
logger -t lvm.sh "created filesystem on root (vg_system)"
# provision the secondary disk (sdb)
pvcreate -ff -y /dev/sdb1
logger -t lvm.sh "created LVM physical volume on sdb1"
vgcreate vg_core /dev/sdb1
logger -t lvm.sh "created LVM volume group (vg_core) on sdb1"
lvcreate -L 4G -n tmp vg_core
logger -t lvm.sh "created logical volume (tmp) on vg_core"
lvcreate -L 8G -n home vg_core
logger -t lvm.sh "created logical volume (home) on vg_core"
lvcreate -L 4G -n var vg_core
logger -t lvm.sh "created logical volume (var) on vg_core"
lvcreate -L 10G -n logaudit vg_core
logger -t lvm.sh "created logical volume (logaudit) on vg_core"
lvcreate -L 30G -n varlog vg_core
logger -t lvm.sh "created logical volume (varlog) on vg_core"
mkfs.ext4 -q -L tmp /dev/vg_core/tmp
logger -t lvm.sh "created filesystem on tmp (vg_core)"
mkfs.ext4 -q -L home /dev/vg_core/home
logger -t lvm.sh "created filesystem on home (vg_core)"
mkfs.ext4 -q -L var /dev/vg_core/var
logger -t lvm.sh "created filesystem on var (vg_core)"
mkfs.ext4 -q -L logaudit /dev/vg_core/logaudit
logger -t lvm.sh "created filesystem on logaudit (vg_core)"
mkfs.ext4 -q -L varlog /dev/vg_core/varlog
logger -t lvm.sh "created filesystem on varlog (vg_core)"
# Create directory structure
logger -t lvm.sh creating base file structure
mkdir /target
mount /dev/vg_system/root /target
mkdir /target/home
mount /dev/vg_core/home /target/home
mkdir /target/var
mount /dev/vg_core/var /target/var
mkdir /target/var/log
mount /dev/vg_core/varlog /target/var/log
mkdir /target/var/log/audit
mount /dev/vg_core/logaudit /target/var/log/audit
mkdir /target/tmp
mount /dev/vg_core/tmp /target/tmp
mkdir /target/boot
mount /dev/sda1 /target/boot
# Create fstab
logger -t lvm.sh creating fstab
mkdir /target/etc
echo "# /etc/fstab: static file system information." > /target/etc/fstab
echo "#" >> /target/etc/fstab
echo "# <file system> <mount point> <type> <options> <dump> <pass>" >> /target/etc/fstab
echo "LABEL=root / ext4 defaults,noatime 0 0" >> /target/etc/fstab
echo "LABEL=home /home ext4 defaults,nodev 0 2" >> /target/etc/fstab
echo "LABEL=var /var ext4 defaults,noatime 0 2" >> /target/etc/fstab
echo "LABEL=varlog /var/log ext4 defaults 0 2" >> /target/etc/fstab
echo "LABEL=logaudit /var/log/audit ext4 defaults,noatime 0 2" >> /target/etc/fstab
echo "LABEL=tmp /tmp ext4 defaults,nodev,noexec,nosuid 0 2" >> /target/etc/fstab
echo "LABEL=boot /boot ext2 defaults,nodev,noexec 0 2" >> /target/etc/fstab
echo "proc /proc proc defaults 0 0" >> /target/etc/fstab
;;
destroy)
logger -t lvm.sh Destroying existing volumes
umount /target/var/log/audit
umount /target/var/log
umount /target/var
umount /target/home
umount /target/tmp
umount /target/boot
umount /target
# swapoff /dev/vg0/swap
pvremove -ff -y /dev/sda2
pvremove -ff -y /dev/sdb1
;;
*)
echo $0: This script is destructive and should only be run as part of the debian-installer process
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment