diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml index 2bc6862b..db76a1ef 100644 --- a/.github/workflows/issues.yml +++ b/.github/workflows/issues.yml @@ -278,10 +278,21 @@ jobs: convertova "rr/rr.img" "rr/rr.ova" (cd rr; sha256sum rr.ova >../sha256sum) zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.ova.zip" -j rr/rr.ova ${USER_CONFIG_FILE} sha256sum README.txt + elif [ "${{ env.format }}" = "vmx" ]; then + . scripts/func.sh "${{ secrets.RRORG }}" + convertvmx "rr/rr.img" "rr.vmx" # rr.vmx is a directory + (cd rr.vmx; sha256sum * >../sha256sum) + zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmx.zip" -r rr.vmx ${USER_CONFIG_FILE} sha256sum README.txt elif [ "${{ env.format }}" = "vmdk" ]; then qemu-img convert rr/rr.img -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' rr/rr.vmdk (cd rr; sha256sum rr.vmdk >../sha256sum) zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vmdk.zip" -j rr/rr.vmdk ${USER_CONFIG_FILE} sha256sum README.txt + elif [ "${{ env.format }}" = "vhd" ]; then + . scripts/func.sh "${{ secrets.RRORG }}" + createvmc "rr/rr.vmc" + qemu-img convert rr/rr.img -O vpc rr/rr.vhd + (cd rr; sha256sum rr.vhd >../sha256sum) + zip -9 "rr-${MODEL}-${TAG}-${{ github.run_id }}.vhd.zip" -j rr/rr.vmc rr/rr.vhd ${USER_CONFIG_FILE} sha256sum README.txt elif [ "${{ env.format }}" = "vhdx" ]; then qemu-img convert rr/rr.img -O vhdx -o subformat=dynamic rr/rr.vhdx (cd rr; sha256sum rr.vhdx >../sha256sum) diff --git a/docs/issues.html b/docs/issues.html index 9ce4c4db..4b231653 100644 --- a/docs/issues.html +++ b/docs/issues.html @@ -290,7 +290,9 @@ value=""> + + diff --git a/files/initrd/opt/rr/boot.sh b/files/initrd/opt/rr/boot.sh index 43db6369..8c963a9b 100755 --- a/files/initrd/opt/rr/boot.sh +++ b/files/initrd/opt/rr/boot.sh @@ -263,7 +263,7 @@ function _bootwait() { } DIRECT="$(readConfigKey "directboot" "${USER_CONFIG_FILE}")" -if [ "${DIRECT}" = "true" ]; then +if [ "${DIRECT}" = "true" ] || [ "${MEV:-physical}" = "parallels" ]; then grub-editenv ${USER_GRUBENVFILE} set rr_version="$([ -z "${RR_RELEASE}" ] && echo "${RR_TITLE}" || echo "${RR_TITLE}(${RR_RELEASE})")" grub-editenv ${USER_GRUBENVFILE} set dsm_model="${MODEL}(${PLATFORM})" grub-editenv ${USER_GRUBENVFILE} set dsm_version="${PRODUCTVER}(${BUILDNUM}$([ ${SMALLNUM:-0} -ne 0 ] && echo "u${SMALLNUM}"))" @@ -385,7 +385,7 @@ else done # # Unload all network interfaces - # for D in $(readlink /sys/class/net/*/device/driver); do rmmod -f "$(basename ${D})" 2>/dev/null || true; done + # for D in $(realpath /sys/class/net/*/device/driver); do rmmod -f "$(basename ${D})" 2>/dev/null || true; done # Unload all graphics drivers # for D in $(lsmod | grep -E '^(nouveau|amdgpu|radeon|i915)' | awk '{print $1}'); do rmmod -f "${D}" 2>/dev/null || true; done diff --git a/guide.md b/guide.md index 18c38c28..4a761cc1 100644 --- a/guide.md +++ b/guide.md @@ -129,6 +129,14 @@ ```shell curl -#kL https://bootstrap.pypa.io/get-pip.py | python3 ``` +* virt-what (MEV): + ```shell + kvm ---- Proxmox VE / Unraid ... + qemu ---- QEMU (windows) + vmware ---- VMware / VMware ESXi + parallels ---- Parallels Desktop + virtualbox ---- VirtualBox + ``` ## DEBUG * log: diff --git a/scripts/func.sh b/scripts/func.sh index ef73eec5..24a999ae 100755 --- a/scripts/func.sh +++ b/scripts/func.sh @@ -244,9 +244,9 @@ function repackInitrd() { [ -z "${INITRD_FILE}" ] || [ ! -f "${INITRD_FILE}" ] && exit 1 [ -z "${PLUGIN_PATH}" ] || [ ! -d "${PLUGIN_PATH}" ] && exit 1 - INITRD_FILE="$(readlink -f "${INITRD_FILE}")" - PLUGIN_PATH="$(readlink -f "${PLUGIN_PATH}")" - OUTPUT_PATH="$(readlink -f "${OUTPUT_PATH}")" + INITRD_FILE="$(realpath "${INITRD_FILE}")" + PLUGIN_PATH="$(realpath "${PLUGIN_PATH}")" + OUTPUT_PATH="$(realpath "${OUTPUT_PATH}")" local RDXZ_PATH="rdxz_tmp" mkdir -p "${RDXZ_PATH}" @@ -291,8 +291,8 @@ function resizeImg() { [ -z "${INPUT_FILE}" ] || [ ! -f "${INPUT_FILE}" ] && exit 1 [ -z "${CHANGE_SIZE}" ] && exit 1 - INPUT_FILE="$(readlink -f "${INPUT_FILE}")" - OUTPUT_FILE="$(readlink -f "${OUTPUT_FILE}")" + INPUT_FILE="$(realpath "${INPUT_FILE}")" + OUTPUT_FILE="$(realpath "${OUTPUT_FILE}")" local SIZE=$(($(du -sm "${INPUT_FILE}" 2>/dev/null | awk '{print $1}')$(echo "${CHANGE_SIZE}" | sed 's/M//g; s/b//g'))) [ "${SIZE:-0}" -lt 0 ] && exit 1 @@ -310,44 +310,25 @@ function resizeImg() { sudo losetup -d ${LOOPX} } -# convertova +# createvmx # $1 bootloader file -# $2 ova file -function convertova() { - local BLIMAGE=${1} - local OVAPATH=${2} +# $2 vmx name +function createvmx() { + BLIMAGE=${1} + VMNAME=${2} - BLIMAGE="$(readlink -f "${BLIMAGE}")" - OVAPATH="$(readlink -f "${OVAPATH}")" - local VMNAME="$(basename "${OVAPATH}" .ova)" - - # Download and install ovftool if it doesn't exist - if [ ! -x ovftool/ovftool ]; then - rm -rf ovftool ovftool.zip - curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.0-21452615-lin.x86_64.zip -o ovftool.zip - if [ $? -ne 0 ]; then - echo "Failed to download ovftool" - exit 1 - fi - unzip ovftool.zip -d . >/dev/null 2>&1 - if [ $? -ne 0 ]; then - echo "Failed to extract ovftool" - exit 1 - fi - chmod +x ovftool/ovftool - fi if ! command -v qemu-img &>/dev/null; then sudo apt install -y qemu-utils fi # Convert raw image to VMDK - rm -rf "OVA_${VMNAME}" - mkdir -p "OVA_${VMNAME}" - qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${BLIMAGE}" "OVA_${VMNAME}/${VMNAME}-disk1.vmdk" - qemu-img create -f vmdk "OVA_${VMNAME}/${VMNAME}-disk2.vmdk" "32G" + rm -rf "VMX_${VMNAME}" + mkdir -p "VMX_${VMNAME}" + qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${BLIMAGE}" "VMX_${VMNAME}/${VMNAME}-disk1.vmdk" + qemu-img create -f vmdk "VMX_${VMNAME}/${VMNAME}-disk2.vmdk" "32G" # Create VM configuration - cat <<_EOF_ >"OVA_${VMNAME}/${VMNAME}.vmx" + cat <<_EOF_ >"VMX_${VMNAME}/${VMNAME}.vmx" .encoding = "UTF-8" config.version = "8" virtualHW.version = "17" @@ -408,7 +389,81 @@ sata0:1.fileName = "${VMNAME}-disk2.vmdk" sata0:1.present = "TRUE" _EOF_ - rm -f "${OVAPATH}" - ovftool/ovftool "OVA_${VMNAME}/${VMNAME}.vmx" "${OVAPATH}" - rm -rf "OVA_${VMNAME}" +} + +# convertvmx +# $1 bootloader file +# $2 vmx file +function convertvmx() { + local BLIMAGE=${1} + local VMXPATH=${2} + + BLIMAGE="$(realpath "${BLIMAGE}")" + VMXPATH="$(realpath "${VMXPATH}")" + local VMNAME="$(basename "${VMXPATH}" .vmx)" + + createvmx "${BLIMAGE}" "${VMNAME}" + + rm -rf "${VMXPATH}" + mv -f "VMX_${VMNAME}" "${VMXPATH}" +} + +# convertova +# $1 bootloader file +# $2 ova file +function convertova() { + local BLIMAGE=${1} + local OVAPATH=${2} + + BLIMAGE="$(realpath "${BLIMAGE}")" + OVAPATH="$(realpath "${OVAPATH}")" + local VMNAME="$(basename "${OVAPATH}" .ova)" + + createvmx "${BLIMAGE}" "${VMNAME}" + + # Download and install ovftool if it doesn't exist + if [ ! -x ovftool/ovftool ]; then + rm -rf ovftool ovftool.zip + curl -skL https://github.com/rgl/ovftool-binaries/raw/main/archive/VMware-ovftool-4.6.0-21452615-lin.x86_64.zip -o ovftool.zip + if [ $? -ne 0 ]; then + echo "Failed to download ovftool" + exit 1 + fi + unzip ovftool.zip -d . >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "Failed to extract ovftool" + exit 1 + fi + chmod +x ovftool/ovftool + fi + + rm -f "${OVAPATH}" + ovftool/ovftool "VMX_${VMNAME}/${VMNAME}.vmx" "${OVAPATH}" + rm -rf "VMX_${VMNAME}" +} + +function createvmc() { + cat <<_EOF_ >"${1:-rr.vmc}" + + + 2.0 + + + 4096 + + + + + + 1 + + rr.vhd + + + + + + + +_EOF_ }