From 581a827831b9356e9f9e1bb68e1fb82f88a619f0 Mon Sep 17 00:00:00 2001 From: poslop Date: Mon, 13 Jul 2026 11:23:39 -0500 Subject: [PATCH] fs version improvments --- CloneToDisk.sh | 34 +++++++++++++----- Image/PBX.img.lz4 | 3 -- Image/PBX.img3.lz4 | 3 -- Image/extract_partition.sh | 28 --------------- fs_extract.sh | 70 ++++++++++++++++++++++++++++++++++++++ fstab_template | 19 ----------- 6 files changed, 95 insertions(+), 62 deletions(-) delete mode 100644 Image/PBX.img.lz4 delete mode 100644 Image/PBX.img3.lz4 delete mode 100755 Image/extract_partition.sh create mode 100755 fs_extract.sh delete mode 100644 fstab_template diff --git a/CloneToDisk.sh b/CloneToDisk.sh index 324465c..5955540 100755 --- a/CloneToDisk.sh +++ b/CloneToDisk.sh @@ -55,6 +55,7 @@ done main() { root_check + check_dependencies udevadm trigger @@ -73,12 +74,9 @@ main() { make_filesystem fi - write_img - mount_chroot - + write_img gen_fstab - install_grub echo -e "${GREEN}Restore and resize complete!${RESET}" @@ -92,6 +90,27 @@ root_check() { fi } +check_dependencies() { + local missing=() + local required_tools=("sgdisk" "pv" "pvcreate" "vgcreate" "lvcreate" "vgchange" "mkfs.vfat" "mkfs.ext4" "mkswap" "tar" "zstd" "lsblk" "partprobe" "chroot") + + for tool in "${required_tools[@]}"; do + if ! command -v "$tool" &>/dev/null; then + missing+=("$tool") + fi + done + + if [[ ${#missing[@]} -gt 0 ]]; then + echo -e "${RED}Missing required tools: ${missing[*]}${RESET}" + echo + echo "Install with:" + echo " apt install gdisk pv lvm2 zstd dosfstools e2fsprogs parted util-linux coreutils" + exit 1 + fi + + echo -e "${GREEN}All dependencies found${RESET}" +} + dialogue() { lsblk @@ -142,6 +161,7 @@ lvm_init() { make_filesystem() { mkfs.vfat -F 32 $EFI_PART mkfs.ext4 $BOOT_PART + mkfs.ext4 "${VG_PATH}${ROOT_LV}" mkswap "${VG_PATH}${SWAP_LV}" echo -e "${GREEN}Make filesystems finished.${RESET}" } @@ -167,7 +187,7 @@ write_img() { lz4 -dc ${img_file_dir} | partclone.ext4 -r -o "${VG_PATH}${ROOT_LV}" - partprobe || true + tar -I zstd -xvf "${img_file_dir}" -C "${MOUNT_PATH}" echo -e "${GREEN}Finished writing image to disk${RESET}" } @@ -229,13 +249,9 @@ gen_fstab() { install_grub() { echo "Entering chroot to reinstall GRUB..." - CHROOT_LINUX_INSTALL="apt install --reinstall -y linux-image-6.1.0-44-amd64" - CHROOT_INITRAMFS="update-initramfs -u -k all" CHROOT_GRUB_INSTALL="grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=debian" CHROOT_GRUB_UPDATE="update-grub" - chroot_cmd "$CHROOT_LINUX_INSTALL" - chroot_cmd "$CHROOT_INITRAMFS" chroot_cmd "$CHROOT_GRUB_INSTALL" chroot_cmd "$CHROOT_GRUB_UPDATE" diff --git a/Image/PBX.img.lz4 b/Image/PBX.img.lz4 deleted file mode 100644 index 62cec8b..0000000 --- a/Image/PBX.img.lz4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0bb94626e3a51df1a374c3123ee3746c6920beeb3172de2c74966dea6b2d475d -size 7809018129 diff --git a/Image/PBX.img3.lz4 b/Image/PBX.img3.lz4 deleted file mode 100644 index 6008add..0000000 --- a/Image/PBX.img3.lz4 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b6c2daf667a6c852437975a217e9dd7e3052f5fee8b391ebc1efa67aaca8001 -size 7783924407 diff --git a/Image/extract_partition.sh b/Image/extract_partition.sh deleted file mode 100755 index 4d1e283..0000000 --- a/Image/extract_partition.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -set -e - -RED='\e[31m' -GREEN='\e[32m' -YELLOW='\e[33m' -RESET='\e[0m' - -img_file="PBX-Test.img" - -if [[ $EUID -ne 0 ]]; then - echo -e "${RED}You must be root to do this." 1>&2 - exit 100 -fi - -losetup -fP $img_file -loop_device=$(losetup -l | grep $img_file | cut -d ' ' -f1) -echo $loop_device - -vgchange -a y PBX-vg - -lvreduce -L 12G -r PBX-vg/root - -partclone.ext4 -c -s /dev/mapper/PBX--vg-root | lz4 -z >./PBX-root.img.lz4 - -vgchange -a n PBX-vg - -losetup -D diff --git a/fs_extract.sh b/fs_extract.sh new file mode 100755 index 0000000..bbc7209 --- /dev/null +++ b/fs_extract.sh @@ -0,0 +1,70 @@ +#!/bin/bash +set -e + +RED='\e[31m' +GREEN='\e[32m' +YELLOW='\e[33m' +RESET='\e[0m' + +IMG_FILE="PBX-Test.img" + +ROOT_LV_PATH="/dev/mapper/PBX--vg-root" +MOUNT_PATH="/mnt/debian" +VGROUP="PBX-vg" + +main() { + root_check + + trap 'echo "Status Code: $?"; cleanup;' EXIT + + losetup -fP $IMG_FILE + LOOP_DEVICE=$(losetup -l | grep $IMG_FILE | cut -d ' ' -f1) + echo $LOOP_DEVICE + + vgchange -a y $VGROUP + + mkdir -p $MOUNT_PATH + + mount $ROOT_LV_PATH $MOUNT_PATH + mount "${LOOP_DEVICE}p2" "$MOUNT_PATH/boot" + mount "${LOOP_DEVICE}p1" "$MOUNT_PATH/boot/efi" + + KERNEL_VERSION=$(get_kernel_version) + + tar -I zstd -c -C "${MOUNT_PATH}" --warning=no-file-ignored . | pv >"PBX-Image-${KERNEL_VERSION}.tar.zst" +} + +root_check() { + if [[ $EUID -ne 0 ]]; then + echo -e "${RED}You must be root to do this." 1>&2 + exit 77 + fi +} + +get_kernel_version() { + local kernel_file=$(ls -1 "$MOUNT_PATH/boot/vmlinuz-"* 2>/dev/null | head -n1) + if [[ -n "$kernel_file" ]]; then + basename "$kernel_file" | sed 's/vmlinuz-//' + else + echo "unknown" + fi +} + +cleanup() { + if [[ $NO_CLEANUP = true ]]; then + echo -e "${YELLOW}No cleanup specified. Make sure to manually clean mounts.${RESET}" 1>&2 + exit 100 + fi + + echo "Cleaning Mounts" + + umount -lf "${MOUNT_PATH}/boot/efi" 2>/dev/null || true + umount -lf "${MOUNT_PATH}/boot" 2>/dev/null || true + umount -lf "${MOUNT_PATH}" 2>/dev/null || true + + vgchange -a n $VGROUP + echo -e "${GREEN}Clean.${RESET}" + losetup -D +} + +main diff --git a/fstab_template b/fstab_template deleted file mode 100644 index 155a170..0000000 --- a/fstab_template +++ /dev/null @@ -1,19 +0,0 @@ -# /etc/fstab: static file system information. -# -# Use 'blkid' to print the universally unique identifier for a -# device; this may be used with UUID= as a more robust way to name devices -# that works even if disks are added and removed. See fstab(5). -# -# systemd generates mount units based on this file, see systemd.mount(5). -# Please run 'systemctl daemon-reload' after making changes here. - -# -/dev/mapper/SangomaPBX--vg-root / ext4 errors=remount-ro 0 1 - -# /boot was on /dev/vda2 during installation -UUID=BOOT_UUID /boot ext4 defaults 0 2 - -# /boot/efi was on /dev/vda1 during installation -UUID=EFI_UUID /boot/efi vfat umask=0077 0 1 - -/dev/mapper/SangomaPBX--vg-swap_1 none swap sw 0 0