parent
9e4b20c463
commit
ab7f78a90c
@ -0,0 +1,245 @@ |
|||||||
|
#!/usr/bin/env bash |
||||||
|
|
||||||
|
function os_support() { |
||||||
|
echo kubuntu \ |
||||||
|
lubuntu \ |
||||||
|
macos \ |
||||||
|
ubuntu \ |
||||||
|
ubuntu-kylin \ |
||||||
|
ubuntu-mate \ |
||||||
|
ubuntu-budgie \ |
||||||
|
ubuntu-studio \ |
||||||
|
xubuntu |
||||||
|
} |
||||||
|
|
||||||
|
function releases_macos() { |
||||||
|
echo high-sierra \ |
||||||
|
mojave \ |
||||||
|
catalina \ |
||||||
|
big-sur |
||||||
|
} |
||||||
|
|
||||||
|
function releases_ubuntu() { |
||||||
|
echo bionic \ |
||||||
|
focal \ |
||||||
|
hirsute \ |
||||||
|
devel |
||||||
|
} |
||||||
|
|
||||||
|
function web_get() { |
||||||
|
local DIR="${2}" |
||||||
|
local FILE="" |
||||||
|
local URL="${1}" |
||||||
|
FILE="${URL##*/}" |
||||||
|
mkdir -p "${DIR}" 2>/dev/null |
||||||
|
if ! wget --quiet --continue --show-progress --progress=bar:force:noscroll "${URL}" -O "${DIR}/${FILE}"; then |
||||||
|
echo "ERROR! Failed to download ${URL}" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
function zsync_get() { |
||||||
|
local DIR="${2}" |
||||||
|
local FILE="" |
||||||
|
local URL="${1}" |
||||||
|
FILE="${URL##*/}" |
||||||
|
mkdir -p "${DIR}" 2>/dev/null |
||||||
|
if ! zsync "${URL}.zsync" -o "${DIR}/${FILE}"; then |
||||||
|
echo "ERROR! Failed to download ${URL}.zsync" |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -e "${DIR}/${FILE}.zs-old" ]; then |
||||||
|
rm -v "${DIR}/${FILE}.zs-old" |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
function make_vm_dir() { |
||||||
|
if ! mkdir -p "${VM_PATH}" 2>/dev/null; then |
||||||
|
echo "ERROR! Unable to create directory ${VM_PATH}" |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
function make_vm_config() { |
||||||
|
local IMAGE_FILE="" |
||||||
|
local IMAGE_TYPE="" |
||||||
|
local GUEST="" |
||||||
|
IMAGE_FILE="${1}" |
||||||
|
if [[ "${OS}" == *"ubuntu"* ]]; then |
||||||
|
GUEST="linux" |
||||||
|
IMAGE_TYPE="iso" |
||||||
|
elif [ "${OS}" == "macos" ]; then |
||||||
|
GUEST="macos" |
||||||
|
IMAGE_TYPE="img" |
||||||
|
fi |
||||||
|
|
||||||
|
if [ ! -e "${OS}-${RELEASE}.conf" ]; then |
||||||
|
echo "Making VM configuration for ${OS}-${RELEASE}..." |
||||||
|
cat << EOF > "${OS}-${RELEASE}.conf" |
||||||
|
guest_os="${GUEST}" |
||||||
|
${IMAGE_TYPE}="${VM_PATH}/${IMAGE_FILE}" |
||||||
|
disk_img="${VM_PATH}/disk.qcow2" |
||||||
|
EOF |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
function start_vm_info() { |
||||||
|
echo |
||||||
|
echo "To start your ${OS} ${RELEASE} virtual machine run:" |
||||||
|
echo " quickemu --vm ${OS}-${RELEASE}.conf" |
||||||
|
echo |
||||||
|
} |
||||||
|
|
||||||
|
function get_macos() { |
||||||
|
local CWD="" |
||||||
|
local MACRECOVERY="" |
||||||
|
|
||||||
|
case ${RELEASE} in |
||||||
|
high-sierra) |
||||||
|
BOARD_ID="Mac-7BA5B2D9E42DDD94" |
||||||
|
MLB="00000000000J80300";; |
||||||
|
mohave) |
||||||
|
BOARD_ID="Mac-7BA5B2DFE22DDD8C" |
||||||
|
MLB="00000000000KXPG00";; |
||||||
|
catalina) |
||||||
|
BOARD_ID="Mac-CFF7D910A743CAAF" |
||||||
|
MLB="00000000000PHCD00";; |
||||||
|
big-sur) |
||||||
|
BOARD_ID="Mac-E43C1C25D4880AD6" |
||||||
|
MLB="00000000000000000";; |
||||||
|
*) echo "ERROR! Unknown release: ${RELEASE}" |
||||||
|
releases_macos |
||||||
|
exit 1;; |
||||||
|
esac |
||||||
|
|
||||||
|
# Use a bundled macrecovery if possible |
||||||
|
CWD="$(dirname ${0})" |
||||||
|
if [ -x "${CWD}/macrecovery.py" ]; then |
||||||
|
MACRECOVERY="${CWD}/macrecovery.py" |
||||||
|
elif [ -x /usr/bin/macrecovery ]; then |
||||||
|
MACRECOVERY="/usr/bin/macrecovery" |
||||||
|
else |
||||||
|
web_get "https://raw.githubusercontent.com/acidanthera/OpenCorePkg/master/Utilities/macrecovery/macrecovery.py" "${HOME}/.quickemu" |
||||||
|
MACRECOVERY="python3 ${HOME}/.quickemu/macrecovery.py" |
||||||
|
sed -i 's/\<env python\>/env python3/g' "${MACRECOVERY}" |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -z "${MACRECOVERY}" ]; then |
||||||
|
echo "ERROR! Can not find a usable macrecovery.py." |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
make_vm_dir |
||||||
|
|
||||||
|
if [ ! -e "${VM_PATH}/RecoveryImage.chunklist" ]; then |
||||||
|
echo "Downloading ${RELEASE}..." |
||||||
|
${MACRECOVERY} \ |
||||||
|
--board-id "${BOARD_ID}" \ |
||||||
|
--mlb "${MLB}" \ |
||||||
|
--basename RecoveryImage \ |
||||||
|
--outdir "${VM_PATH}" \ |
||||||
|
download |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -e "${VM_PATH}/RecoveryImage.dmg" ] && [ ! -e "${VM_PATH}/RecoveryImage.img" ]; then |
||||||
|
echo "Converting RecoveryImage..." |
||||||
|
qemu-img convert "${VM_PATH}/RecoveryImage.dmg" -O raw "${VM_PATH}/RecoveryImage.img" |
||||||
|
fi |
||||||
|
|
||||||
|
make_vm_config RecoveryImage.img |
||||||
|
start_vm_info |
||||||
|
} |
||||||
|
|
||||||
|
function get_ubuntu() { |
||||||
|
local DEVEL="daily-live" |
||||||
|
local ISO="" |
||||||
|
local PROJECT="" |
||||||
|
local RELEASES="" |
||||||
|
local URL="" |
||||||
|
|
||||||
|
case ${OS} in |
||||||
|
kubuntu|lubuntu|ubuntu|ubuntu-budgie|ubuntu-mate|xubuntu) |
||||||
|
PROJECT="${OS}";; |
||||||
|
ubuntu-kylin) |
||||||
|
PROJECT="ubuntukylin";; |
||||||
|
ubuntu-studio) |
||||||
|
PROJECT="ubuntustudio" |
||||||
|
DEVEL="dvd";; |
||||||
|
*) |
||||||
|
echo "ERROR! ${OS} is not a recognised Ubuntu flavour." |
||||||
|
exit 1;; |
||||||
|
esac |
||||||
|
|
||||||
|
if [ "${RELEASE}" == "devel" ]; then |
||||||
|
URL="http://cdimage.ubuntu.com/${PROJECT}/${DEVEL}/current" |
||||||
|
elif [ "${PROJECT}" == "ubuntu" ]; then |
||||||
|
URL="http://releases.ubuntu.com/${RELEASE}" |
||||||
|
else |
||||||
|
URL="http://cdimage.ubuntu.com/${PROJECT}/releases/${RELEASE}/release" |
||||||
|
fi |
||||||
|
|
||||||
|
RELEASES=$(releases_ubuntu) |
||||||
|
if [[ "${RELEASES}" != *"${RELEASE}"* ]]; then |
||||||
|
echo "ERROR! ${RELEASE} is not a supported release." |
||||||
|
releases_ubuntu |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
make_vm_dir |
||||||
|
|
||||||
|
echo "Downloading SHA256SUMS..." |
||||||
|
web_get "${URL}/SHA256SUMS" "${VM_PATH}" |
||||||
|
|
||||||
|
ISO=$(grep 'desktop\|dvd' "${VM_PATH}/SHA256SUMS" | grep amd64 | cut -d' ' -f2 | sed 's|*||g') |
||||||
|
|
||||||
|
echo "Downloading "${URL}/${ISO}"..." |
||||||
|
if [ "${RELEASE}" == "devel" ]; then |
||||||
|
zsync_get "${URL}/${ISO}" "${VM_PATH}" |
||||||
|
else |
||||||
|
web_get "${URL}/${ISO}" "${VM_PATH}" |
||||||
|
echo "Checking SHA256SUMS..." |
||||||
|
cd "${VM_PATH}" |
||||||
|
if ! sha256sum --check SHA256SUMS --ignore-missing --status; then |
||||||
|
echo "ERROR! ${ISO} doesn't match ${VM_PATH}/SHA256SUMS. Try running 'quickget' again." |
||||||
|
exit 1 |
||||||
|
else |
||||||
|
echo "All good." |
||||||
|
fi |
||||||
|
cd .. |
||||||
|
fi |
||||||
|
|
||||||
|
make_vm_config "${ISO}" |
||||||
|
start_vm_info |
||||||
|
} |
||||||
|
|
||||||
|
if [ -n "${1}" ]; then |
||||||
|
OS="${1,,}" |
||||||
|
else |
||||||
|
echo "ERROR! You must specify an OS:" |
||||||
|
os_support |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
if [ -n "${2}" ]; then |
||||||
|
RELEASE="${2,,}" |
||||||
|
else |
||||||
|
echo "ERROR! You must specify an OS release name." |
||||||
|
if [ "${OS}" == "macos" ]; then |
||||||
|
releases_macos |
||||||
|
elif [[ "${OS}" == *"ubuntu"* ]]; then |
||||||
|
releases_ubuntu |
||||||
|
fi |
||||||
|
exit 1 |
||||||
|
fi |
||||||
|
|
||||||
|
VM_PATH="${PWD}/${OS}-${RELEASE}" |
||||||
|
|
||||||
|
if [ "${OS}" == "macos" ]; then |
||||||
|
get_macos |
||||||
|
elif [[ "${OS}" == *"ubuntu"* ]]; then |
||||||
|
get_ubuntu |
||||||
|
else |
||||||
|
echo "ERROR! You must specify an OS:" |
||||||
|
os_support |
||||||
|
exit 1 |
||||||
|
fi |
Loading…
Reference in new issue