Created
March 7, 2017 21:48
-
-
Save jchodakowski/3ccf5fc96e6e78362ade56f7fe0dcf4b to your computer and use it in GitHub Desktop.
Complex filesystem shell script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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