mirror of
				https://github.com/oSoWoSo/DistroHopper.git
				synced 2024-08-14 22:46:53 +00:00 
			
		
		
		
	Add the initial version of quickget
Supports Ubuntu (and all the flavours) and macOS.
This commit is contained in:
		
							parent
							
								
									9e4b20c463
								
							
						
					
					
						commit
						ab7f78a90c
					
				
					 1 changed files with 245 additions and 0 deletions
				
			
		
							
								
								
									
										245
									
								
								quickget
									
										
									
									
									
										Executable file
									
								
							
							
						
						
									
										245
									
								
								quickget
									
										
									
									
									
										Executable file
									
								
							|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue