From 086b086043802e659d05747cb61c68c671ae343a Mon Sep 17 00:00:00 2001 From: Ing Date: Sat, 8 Jun 2024 06:50:35 +0800 Subject: [PATCH] add rr.ova --- .github/workflows/issues.yml | 17 ++- .gitignore | 4 + docs/issues.html | 14 ++- scripts/func.sh | 98 ++++++++++++++++ scripts/vm.sh | 211 ----------------------------------- 5 files changed, 129 insertions(+), 215 deletions(-) delete mode 100644 scripts/vm.sh diff --git a/.github/workflows/issues.yml b/.github/workflows/issues.yml index aee77aca..1f7d9165 100644 --- a/.github/workflows/issues.yml +++ b/.github/workflows/issues.yml @@ -37,6 +37,7 @@ jobs: iscustom = 'false' warinfo = 'false' + format = '' language= '' model = '' version = '' @@ -46,6 +47,7 @@ jobs: if issuetitle.lower().startswith('custom'): jsonbody = json.loads(issuebody) iscustom = 'true' + format = jsonbody.get('format', '') language = jsonbody.get('language', '') model = jsonbody.get('model', '') version = jsonbody.get('version', '') @@ -61,6 +63,7 @@ jobs: set_output("iscustom", iscustom) set_output("warinfo", warinfo) + set_output("format", format) set_output("language", language) set_output("model", model) set_output("version", version) @@ -227,9 +230,17 @@ jobs: fi ls rr -al - ARTIFACTS="rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" - zip -9 "${ARTIFACTS}" -j rr/rr.img - + if [ "${{ env.format }}" = "ova" ]; then + . scripts/func.sh "${{ secrets.RRORG }}" + convertova "rr/rr.img" "rr/rr.ova" + ARTIFACTS="rr-${MODEL}-${TAG}-${{ github.run_id }}.ova.zip" + (cd rr; sha256sum rr.ova >../sha256sum) + zip -9 "${ARTIFACTS}" -j rr/rr.ova sha256sum + else + ARTIFACTS="rr-${MODEL}-${TAG}-${{ github.run_id }}.img.zip" + (cd rr; sha256sum rr.img >../sha256sum) + zip -9 "${ARTIFACTS}" -j rr/rr.img sha256sum + fi # UPLOAD="$(curl -k -F "file=@${ARTIFACTS}" -F "token=${{ secrets.TT_TOKEN }}" -F "model=0" -X POST "https://tmp-cli.vx-cdn.com/app/upload_cli")" if echo "${UPLOAD}" | grep -q "Download Page"; then DLURL="$(echo "${UPLOAD}" | grep "Download Page" | head -1)" diff --git a/.gitignore b/.gitignore index df3d8f65..482202ee 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,10 @@ rr*.vmdk tests Changelog* +ovftool* +OVA* +**.ova + files/mnt/p1/.locale files/mnt/p1/grub_cksum.syno files/mnt/p1/GRUB_VER diff --git a/docs/issues.html b/docs/issues.html index 21e927e0..1611adb1 100644 --- a/docs/issues.html +++ b/docs/issues.html @@ -185,7 +185,7 @@ let formData = new FormData(form); var title = "custom"; var body = {}; - var _parameters = ["title", "language", "model", "version", "addons", "modules"]; + var _parameters = ["title", "format", "language", "model", "version", "addons", "modules"]; for (var key in _parameters) { var name = _parameters[key]; if (name == "title") { @@ -254,6 +254,18 @@ value="" /> +
+
+ +
+
+ +
+
diff --git a/scripts/func.sh b/scripts/func.sh index 4e942abf..22cc1459 100755 --- a/scripts/func.sh +++ b/scripts/func.sh @@ -287,3 +287,101 @@ function resizeImg() { sudo resize2fs $(ls ${LOOPX}* 2>/dev/null | sort -n | tail -1) sudo losetup -d ${LOOPX} } + +# convertova +# $1 bootloader file +# $2 ova file +function convertova() { + BLIMAGE=${1} + OVAPATH=${2} + + BLIMAGE="$(readlink -f "${BLIMAGE}")" + OVAPATH="$(readlink -f "${OVAPATH}")" + 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" + + # Create VM configuration + cat <<_EOF_ >"OVA_${VMNAME}/${VMNAME}.vmx" +.encoding = "GBK" +config.version = "8" +virtualHW.version = "21" +displayName = "${VMNAME}" +annotation = "https://github.com/RROrg/rr" +guestOS = "ubuntu-64" +firmware = "efi" +mks.enable3d = "TRUE" +pciBridge0.present = "TRUE" +pciBridge4.present = "TRUE" +pciBridge4.virtualDev = "pcieRootPort" +pciBridge4.functions = "8" +pciBridge5.present = "TRUE" +pciBridge5.virtualDev = "pcieRootPort" +pciBridge5.functions = "8" +pciBridge6.present = "TRUE" +pciBridge6.virtualDev = "pcieRootPort" +pciBridge6.functions = "8" +pciBridge7.present = "TRUE" +pciBridge7.virtualDev = "pcieRootPort" +pciBridge7.functions = "8" +vmci0.present = "TRUE" +hpet0.present = "TRUE" +nvram = "${VMNAME}.nvram" +virtualHW.productCompatibility = "hosted" +powerType.powerOff = "soft" +powerType.powerOn = "soft" +powerType.suspend = "soft" +powerType.reset = "soft" +tools.syncTime = "FALSE" +sound.autoDetect = "TRUE" +sound.fileName = "-1" +sound.present = "TRUE" +numvcpus = "2" +cpuid.coresPerSocket = "1" +vcpu.hotadd = "TRUE" +memsize = "4096" +mem.hotadd = "TRUE" +usb.present = "TRUE" +ehci.present = "TRUE" +usb_xhci.present = "TRUE" +svga.graphicsMemoryKB = "8388608" +usb.vbluetooth.startConnected = "TRUE" +extendedConfigFile = "${VMNAME}.vmxf" +floppy0.present = "FALSE" +ethernet0.addressType = "generated" +ethernet0.virtualDev = "vmxnet3" +ethernet0.present = "TRUE" +sata0.present = "TRUE" +sata0:0.fileName = "${VMNAME}-disk1.vmdk" +sata0:0.present = "TRUE" +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}" +} diff --git a/scripts/vm.sh b/scripts/vm.sh deleted file mode 100644 index 12aaa46f..00000000 --- a/scripts/vm.sh +++ /dev/null @@ -1,211 +0,0 @@ - -filename=$(basename "${1}") - -OVFNAME=${filename%.*} -BLDISKNAME="${OVFNAME}-disk1.vmdk" -SDDISKNAME="${OVFNAME}-disk2.vmdk" - -# Convert raw image to VMDK -qemu-img convert -O vmdk -o 'adapter_type=lsilogic,subformat=streamOptimized,compat6' "${1}" "${BLDISKNAME}" -#qemu-img create -f vmdk "${SDDISKNAME}" "32G" - -BLSIZE=$(du -b "${BLDISKNAME}" | cut -f 1) -SDSIZE=$(du -b "${SDDISKNAME}" | cut -f 1) -BLVIRTUALSIZE=$(qemu-img info "${BLDISKNAME}" --output json | jq -r '."virtual-size"') -SDVIRTUALSIZE=$(qemu-img info "${SDDISKNAME}" --output json | jq -r '."virtual-size"') - -# Create VM configuration -cat << _EOF_ > "${OVFNAME}.ovf" - - - - - - - - Virtual disk information - - - - - The list of logical networks - - The bridged network - - - - A virtual machine - ${OVFNAME} - - The kind of installed guest operating system - - - Virtual hardware requirements - - Virtual Hardware Family - 0 - ${OVFNAME} - vmx-21 - - - hertz * 10^6 - Number of Virtual CPUs - 2 virtual CPU(s) - 1 - 3 - 2 - 2 - - - byte * 2^20 - Memory Size - 4096MB of memory - 2 - 4 - 4096 - 1 - - - 0 - SATA Controller - sataController0 - 3 - vmware.sata.ahci - 20 - 1 - - - 0 - USB Controller (XHCI) - usb3 - 4 - vmware.usb.xhci - 23 - 1 - - - 0 - USB Controller (EHCI) - usb - 5 - vmware.usb.ehci - 23 - - 1 - - - true - serial0 - 6 - 21 - - - 1 - - - 1 - true - bridged - VmxNet3 ethernet adapter on "bridged" - ethernet0 - 7 - VmxNet3 - 10 - - 1 - - - false - sound - 8 - vmware.soundcard.ensoniq1371 - 1 - 1 - - - false - video - 9 - 24 - - 1 - - - false - vmci - 10 - vmware.vmci - 1 - 1 - - - 0 - disk0 - ovf:/disk/vmdisk1 - 11 - 3 - 17 - 1 - - - 1 - disk1 - ovf:/disk/vmdisk2 - 12 - 3 - 17 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - A human-readable annotation - Redpill Recovery - - - -_EOF_ - -# Create manifest file for automatic integrity check -cat << _EOF_ > "${OVFNAME}.mf" -SHA256(${OVFNAME}.ovf)= $(sha256sum "${OVFNAME}.ovf" | mawk '{print $1}') -SHA256(${BLDISKNAME})= $(sha256sum "${BLDISKNAME}" | mawk '{print $1}') -SHA256(${SDDISKNAME})= $(sha256sum "${SDDISKNAME}" | mawk '{print $1}') -_EOF_ - -# Pack everything as OVA appliance for ESXi import -rm -f "${OVFNAME}.ova" -tar -cf "${OVFNAME}.ova" ${OVFNAME}.ovf ${BLDISKNAME} ${SDDISKNAME} ${OVFNAME}.mf -rm -f ${OVFNAME}.ovf ${BLDISKNAME} ${SDDISKNAME} ${OVFNAME}.mf -#gzip "${OVFNAME}.ova" -