|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +set -e |
| 4 | +source ./.config.sh || exit 1 |
| 5 | + |
| 6 | +function requires_distro_variable() { |
| 7 | + if [ -z "$DISTRO" ]; then |
| 8 | + echo "You need to specify extracting distribution from $BASE/distro_extractor, use one of" |
| 9 | + ls "$BASE/distro_extractor" |
| 10 | + dd "use \`export DISTRO=artix\` for example" |
| 11 | + fi |
| 12 | +} |
| 13 | + |
| 14 | + |
| 15 | +if [ -n "$DISTRO_ISO" ]; then |
| 16 | + requires_distro_variable |
| 17 | + which VBoxManage &> /dev/null && HYPERVISOR_CANDIDATE=virtualbox || true |
| 18 | + which qemu-system-x86_64 &> /dev/null && HYPERVISOR_CANDIDATE=qemu || true |
| 19 | + |
| 20 | + export HYPERVISOR=${HYPERVISOR:-"$HYPERVISOR_CANDIDATE"} |
| 21 | + ./scripts/extract_from_vm.sh |
| 22 | + ./scripts/extract.sh |
| 23 | + |
| 24 | +elif [ -n "$DISTRO_ROOTFS" ]; then |
| 25 | + requires_distro_variable |
| 26 | + export NICE_EXTRACT_DISTRO_HDD_IMAGE_PATH=/tmp/nice-not-exists.noimg |
| 27 | + export VM_MOUNT_ROOT="$STORAGE/temp/extract/rootfs_$(date +%s)" && mkdir -p "$VM_MOUNT_ROOT" |
| 28 | + tar --checkpoint=100 -xf "$DISTRO_ROOTFS" -C "$VM_MOUNT_ROOT" |
| 29 | + ./scripts/extract_from_chroot.sh |
| 30 | + ./scripts/extract.sh |
| 31 | + sudo rm -rf "$VM_MOUNT_ROOT" |
| 32 | + |
| 33 | +elif [ -n "$DEBOOTSTRAP_SUITE" ]; then |
| 34 | + which debootstrap > /dev/null || dd "Debootstrap binary not found" |
| 35 | + |
| 36 | + export VM_MOUNT_ROOT="$STORAGE/temp/extract/debootstrap_$(date +%s)" && mkdir -p "$VM_MOUNT_ROOT" |
| 37 | + export NICE_EXTRACT_DISTRO_HDD_IMAGE_PATH=/tmp/nice-not-exists.noimg |
| 38 | + notify "We need sudo for debootstrap and cleanup" |
| 39 | + sudo debootstrap --variant=minbase --merged-usr --arch="${ARCH:-amd64}" --include="$(cat "$NICE_PRESET_PATH/packages.deb.txt" | xargs | sed 's/ /,/g')" "$DEBOOTSTRAP_SUITE" "$VM_MOUNT_ROOT" "$DEBOOTSTRAP_MIRROR" "$DEBOOTSTRAP_SCRIPT" |
| 40 | + ./scripts/extract.sh |
| 41 | + sudo rm -rf "$VM_MOUNT_ROOT" |
| 42 | + |
| 43 | +else |
| 44 | + echo "You need to provide extract method. Use one of:" |
| 45 | + echo "'DISTRO_ISO' OR 'DISTRO_ROOTFS' OR 'DEBOOTSTRAP_SUITE'" |
| 46 | + dd "For example use \`export DISTRO_ISO=/data/dwn/artix-base-openrc-20220123-x86_64.iso\`" |
| 47 | +fi |
0 commit comments