diff --git a/.github/workflows/patch6.yml b/.github/workflows/patch6.yml new file mode 100644 index 00000000..b44945ef --- /dev/null +++ b/.github/workflows/patch6.yml @@ -0,0 +1,233 @@ +name: Patch v6 + +on: + workflow_dispatch: + +permissions: + contents: write + +env: + MIKRO_NPK_SIGN_PUBLIC_KEY: C293CED638A2A33C681FC8DE98EE26C54EADC5390C2DFCE197D35C83C416CF59 + MIKRO_LICENSE_PUBLIC_KEY: 8E1067E4305FCDC0CFBF95C10F96E5DFE8C49AEF486BD1A4E2E96C27F01E3E32 + CUSTOM_NPK_SIGN_PRIVATE_KEY: 7D008D9B80B036FB0205601FEE79D550927EBCA937B7008CC877281F2F8AC640 + CUSTOM_NPK_SIGN_PUBLIC_KEY: 28F886E32C141123126CFBCAD56766E99D1720CEB1F12BE2468BEBE7662FBEDB + CUSTOM_LICENSE_PRIVATE_KEY: 9DBC845E9018537810FDAE62824322EEE1B12BAD81FCA28EC295FB397C61CE0B + CUSTOM_LICENSE_PUBLIC_KEY: 723A34A6E3300F23E4BAA06156B9327514AEC170732655F16E04C17928DD770F + +jobs: + patch: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + + - name: Get latest version + id: get_latest + run: | + echo $(uname -a) + NEWEST=$(curl -s https://upgrade.mikrotik.com/routeros/NEWEST6.stable) + LATEST_VERSION=$(echo "$NEWEST" | cut -d' ' -f1) + BUILD_TIME=$(echo "$NEWEST" | cut -d' ' -f2) + echo Latest Version: $LATEST_VERSION + echo Build Time: $BUILD_TIME + _LATEST_VERSION=$(cat latest6.txt | cut -d ' ' -f1) + if [ "$_LATEST_VERSION" == "$LATEST_VERSION" ]; then + echo "No new version found" + echo "has_new_version=false" >> $GITHUB_OUTPUT + exit 0 + fi + echo "has_new_version=true" >> $GITHUB_OUTPUT + curl -s -o CHANGELOG https://upgrade.mikrotik.com/routeros/$LATEST_VERSION/CHANGELOG + cat CHANGELOG + echo "NEWEST=${NEWEST}" >> $GITHUB_ENV + echo "LATEST_VERSION=${LATEST_VERSION}" >> $GITHUB_ENV + sudo apt-get update > /dev/null + + - name: Cache mikrotik-${{ env.LATEST_VERSION }}.iso + if: steps.get_latest.outputs.has_new_version == 'true' + id: cache_mikrotik + uses: actions/cache@v4 + with: + path: mikrotik.iso + key: mikrotik-${{ env.LATEST_VERSION }} + + - name: Get mikrotik-${{ env.LATEST_VERSION }}.iso + if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_mikrotik.outputs.cache-hit != 'true' + run: | + sudo curl -s -o mikrotik.iso https://download.mikrotik.com/routeros/$LATEST_VERSION/mikrotik-$LATEST_VERSION.iso + + - name: Patch mikrotik-${{ env.LATEST_VERSION }}.iso + if: steps.get_latest.outputs.has_new_version == 'true' + run: | + sudo apt-get install -y mkisofs xorriso > /dev/null + sudo mkdir ./iso + sudo mount -o loop,ro mikrotik.iso ./iso + sudo mkdir ./new_iso + sudo cp -r ./iso/* ./new_iso/ + sudo rsync -a ./iso/ ./new_iso/ + sudo umount ./iso + sudo rm -rf ./iso + sudo mv ./new_iso/system-$LATEST_VERSION.npk ./ + sudo -E python3 patch.py npk system-$LATEST_VERSION.npk + sudo -E python3 patch.py kernel ./new_iso/isolinux/initrd.rgz + NPK_FILES=$(find ./new_iso/*.npk) + for file in $NPK_FILES; do + sudo -E python3 npk.py sign $file $file + done + sudo cp system-$LATEST_VERSION.npk ./new_iso/ + sudo mkisofs -o mikrotik-$LATEST_VERSION.iso \ + -V "MikroTik $LATEST_VERSION" \ + -sysid "" -preparer "MiKroTiK" \ + -publisher "" -A "MiKroTiK RouterOS" \ + -input-charset utf-8 \ + -b isolinux/isolinux.bin \ + -c isolinux/boot.cat \ + -no-emul-boot \ + -boot-load-size 4 \ + -boot-info-table \ + -R -J \ + ./new_iso + sudo mkdir ./all_packages + sudo cp ./new_iso/*.npk ./all_packages/ + sudo rm -rf ./new_iso + cd ./all_packages + sudo zip ../all_packages-x86-$LATEST_VERSION-patched.zip *.npk + cd .. + + - name: Cache install-image-${{ env.LATEST_VERSION }} + if: steps.get_latest.outputs.has_new_version == 'true' + id: cache_install_image + uses: actions/cache@v4 + with: + path: install-image.zip + key: install-image-${{ env.LATEST_VERSION }}-x86 + + - name: Get install-image-${{ env.LATEST_VERSION }} + if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_install_image.outputs.cache-hit != 'true' + run: | + sudo curl -s -o install-image.zip https://download.mikrotik.com/routeros/$LATEST_VERSION/install-image-$LATEST_VERSION.zip + + - name: Patch install-image-${{ env.LATEST_VERSION }} + if: steps.get_latest.outputs.has_new_version == 'true' + run: | + sudo apt-get install -y qemu-utils extlinux > /dev/null + sudo unzip install-image.zip + sudo modprobe nbd + sudo qemu-nbd -c /dev/nbd0 -f raw install-image-$LATEST_VERSION.img + sudo mkdir ./install + sudo mount /dev/nbd0 ./install + sudo -E python3 patch.py kernel ./install/initrd.rgz + sudo rm -rf ./install/*.npk + NPK_FILES=($(find ./all_packages/*.npk)) + for ((i=1; i<=${#NPK_FILES[@]}; i++)) + do + echo "${NPK_FILES[$i-1]}=>$i.npk" + sudo cp ${NPK_FILES[$i-1]} ./install/$i.npk + done + sudo umount /dev/nbd0 + sudo qemu-nbd -d /dev/nbd0 + sudo rm -rf ./install + sudo mv install-image-$LATEST_VERSION.img install-image-$LATEST_VERSION-patched.img + + sudo qemu-img convert -f raw -O qcow2 install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.qcow2 + sudo qemu-img convert -f raw -O vmdk install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.vmdk + sudo qemu-img convert -f raw -O vpc install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.vhd + sudo qemu-img convert -f raw -O vhdx install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.vhdx + sudo qemu-img convert -f raw -O vdi install-image-$LATEST_VERSION-patched.img install-image-$LATEST_VERSION-patched.vdi + + sudo zip install-image-$LATEST_VERSION-patched.qcow2.zip install-image-$LATEST_VERSION-patched.qcow2 + sudo zip install-image-$LATEST_VERSION-patched.vmdk.zip install-image-$LATEST_VERSION-patched.vmdk + sudo zip install-image-$LATEST_VERSION-patched.vhd.zip install-image-$LATEST_VERSION-patched.vhd + sudo zip install-image-$LATEST_VERSION-patched.vhdx.zip install-image-$LATEST_VERSION-patched.vhdx + sudo zip install-image-$LATEST_VERSION-patched.vdi.zip install-image-$LATEST_VERSION-patched.vdi + sudo zip install-image-$LATEST_VERSION-patched.img.zip install-image-$LATEST_VERSION-patched.img + + sudo rm install-image-$LATEST_VERSION-patched.qcow2 + sudo rm install-image-$LATEST_VERSION-patched.vmdk + sudo rm install-image-$LATEST_VERSION-patched.vhd + sudo rm install-image-$LATEST_VERSION-patched.vhdx + sudo rm install-image-$LATEST_VERSION-patched.vdi + sudo rm install-image-$LATEST_VERSION-patched.img + + - name: Cache chr-${{ env.LATEST_VERSION }} + if: steps.get_latest.outputs.has_new_version == 'true' + id: cache_chr_img + uses: actions/cache@v4 + with: + path: chr.img.zip + key: chr-${{ env.LATEST_VERSION }}-x86 + + - name: Get chr-${{ env.LATEST_VERSION }} + if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_chr_img.outputs.cache-hit != 'true' + run: | + sudo curl -s -o chr.img.zip https://download.mikrotik.com/routeros/$LATEST_VERSION/chr-$LATEST_VERSION.img.zip + + - name: Patch chr-${{ env.LATEST_VERSION }} + if: steps.get_latest.outputs.has_new_version == 'true' + run: | + sudo apt-get install -y qemu-utils extlinux > /dev/null + sudo unzip chr.img.zip + sudo modprobe nbd + sudo qemu-nbd -c /dev/nbd0 -f raw chr-$LATEST_VERSION.img + sudo mkdir -p ./chr/{boot,routeros} + sudo -E python3 patch.py block /dev/nbd0p1 boot/initrd.rgz + sudo mount /dev/nbd0p1 ./chr + sudo cp ./all_packages/dude-$LATEST_VERSION.npk ./chr/var/pdb/dude/image + sudo -E python3 patch.py npk ./chr/var/pdb/routeros-x86/image + sudo cp ./chr/var/pdb/routeros-x86/image ./all_packages/routeros-x86-$LATEST_VERSION.npk + sudo cp ./all_packages/routeros-x86-$LATEST_VERSION.npk ./routeros-x86-$LATEST_VERSION-patched.npk + sudo umount ./chr + sudo qemu-nbd -d /dev/nbd0 + sudo rm -rf ./chr + sudo cp chr-$LATEST_VERSION.img chr-$LATEST_VERSION-patched.img + + sudo qemu-img convert -f raw -O qcow2 chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.qcow2 + sudo qemu-img convert -f raw -O vmdk chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.vmdk + sudo qemu-img convert -f raw -O vpc chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.vhd + sudo qemu-img convert -f raw -O vhdx chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.vhdx + sudo qemu-img convert -f raw -O vdi chr-$LATEST_VERSION-patched.img chr-$LATEST_VERSION-patched.vdi + + sudo zip chr-$LATEST_VERSION-patched.qcow2.zip chr-$LATEST_VERSION-patched.qcow2 + sudo zip chr-$LATEST_VERSION-patched.vmdk.zip chr-$LATEST_VERSION-patched.vmdk + sudo zip chr-$LATEST_VERSION-patched.vhd.zip chr-$LATEST_VERSION-patched.vhd + sudo zip chr-$LATEST_VERSION-patched.vhdx.zip chr-$LATEST_VERSION-patched.vhdx + sudo zip chr-$LATEST_VERSION-patched.vdi.zip chr-$LATEST_VERSION-patched.vdi + sudo zip chr-$LATEST_VERSION-patched.img.zip chr-$LATEST_VERSION-patched.img + + sudo rm chr-$LATEST_VERSION-patched.qcow2 + sudo rm chr-$LATEST_VERSION-patched.vmdk + sudo rm chr-$LATEST_VERSION-patched.vhd + sudo rm chr-$LATEST_VERSION-patched.vhdx + sudo rm chr-$LATEST_VERSION-patched.vdi + sudo rm chr-$LATEST_VERSION-patched.img + + - name: Update latest version + if: steps.get_latest.outputs.has_new_version == 'true' + run: | + echo $NEWEST > latest6.txt + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git add latest6.txt + git commit -m "Update latest version" + git push + + - name: Create Release tag ${{ env.LATEST_VERSION }} + if: steps.get_latest.outputs.has_new_version == 'true' + uses: softprops/action-gh-release@v2 + with: + name: "RouterOS ${{ env.LATEST_VERSION }}" + body_path: "CHANGELOG" + tag_name: ${{ env.LATEST_VERSION }} + make_latest: true + files: | + mikrotik-${{ env.LATEST_VERSION }}-patched.iso + install-image-${{ env.LATEST_VERSION }}-patched.*.zip + chr-${{ env.LATEST_VERSION }}-patched.*.zip + routeros-x86-${{ env.LATEST_VERSION }}-patched.npk + all_packages-x86-${{ env.LATEST_VERSION }}-patched.zip diff --git a/latest6.txt b/latest6.txt new file mode 100644 index 00000000..e69de29b