Patch v7 #7
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Patch v7 | |
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 | |
strategy: | |
matrix: | |
arch: [x86, arm, arm64, mipsbe, mmips, smips, ppc] | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.x' | |
- name: Install dependencies | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y mkisofs xorriso qemu-utils extlinux --no-install-recommends | |
sudo pip install -r requirements.txt | |
- name: Check latest version | |
id: get_latest | |
run: | | |
echo $(uname -a) | |
NEWEST=$(curl -s https://upgrade.mikrotik.com/routeros/NEWESTa7.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 latest7.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 | |
if [ "${{ matrix.arch }}" == "x86" ]; then | |
ARCH='' | |
elif [ "${{ matrix.arch }}" == "arm" ]; then | |
ARCH='-arm' | |
elif [ "${{ matrix.arch }}" == "arm64" ]; then | |
ARCH='-arm64' | |
elif [ "${{ matrix.arch }}" == "mipsbe" ]; then | |
ARCH='-mipsbe' | |
elif [ "${{ matrix.arch }}" == "mmips" ]; then | |
ARCH='-mmips' | |
elif [ "${{ matrix.arch }}" == "smips" ]; then | |
ARCH='-smips' | |
elif [ "${{ matrix.arch }}" == "ppc" ]; then | |
ARCH='-ppc' | |
fi | |
echo "ARCH=$ARCH" >> $GITHUB_ENV | |
- name: Cache mikrotik-${{ env.LATEST_VERSION }}${{ env.ARCH }}.iso | |
if: steps.get_latest.outputs.has_new_version == 'true' && (matrix.arch == 'x86' || matrix.arch == 'arm64') | |
id: cache_mikrotik | |
uses: actions/cache@v4 | |
with: | |
path: mikrotik.iso | |
key: mikrotik-${{ env.LATEST_VERSION }}-${{ matrix.arch }} | |
- name: Get mikrotik-${{ env.LATEST_VERSION }}${{ env.ARCH }}.iso | |
if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_mikrotik.outputs.cache-hit != 'true' && (matrix.arch == 'x86' || matrix.arch == 'arm64') | |
run: | | |
sudo curl -s -o mikrotik.iso https://download.mikrotik.com/routeros/$LATEST_VERSION/mikrotik-$LATEST_VERSION$ARCH.iso | |
- name: Patch mikrotik-${{ env.LATEST_VERSION }}${{ env.ARCH }}.iso | |
if: steps.get_latest.outputs.has_new_version == 'true' && (matrix.arch == 'x86' || matrix.arch == 'arm64') | |
run: | | |
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/ | |
NPK_FILES=$(find new_iso/*.npk) | |
for file in $NPK_FILES; do | |
sudo -E python3 patch.py npk $file | |
done | |
sudo cp new_iso/routeros-$LATEST_VERSION*.npk routeros-$LATEST_VERSION$ARCH-patched.npk | |
sudo mkdir efiboot | |
sudo mount -o loop new_iso/efiboot.img efiboot/ | |
if [ "${{ matrix.arch }}" == "x86" ]; then | |
sudo -E python3 patch.py kernel efiboot/linux.x86_64 | |
sudo cp efiboot/linux.x86_64 new_iso/isolinux/linux | |
sudo umount efiboot/ | |
sudo mkisofs -o mikrotik-$LATEST_VERSION$ARCH-patched.iso \ | |
-V "MikroTik $LATEST_VERSION $ARCH" \ | |
-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 \ | |
-eltorito-alt-boot \ | |
-e efiboot.img \ | |
-no-emul-boot \ | |
-R -J \ | |
new_iso/ | |
elif [ "${{ matrix.arch }}" == "arm64" ]; then | |
sudo -E python3 patch.py kernel efiboot/EFI/BOOT/BOOTAA64.EFI | |
sudo umount efiboot/ | |
sudo xorriso -as mkisofs -o mikrotik-$LATEST_VERSION$ARCH-patched.iso \ | |
-V "MikroTik $LATEST_VERSION ${{ matrix.arch }}" \ | |
-sysid "" -preparer "MiKroTiK" \ | |
-publisher "" -A "MiKroTiK RouterOS" \ | |
-input-charset utf-8 \ | |
-b efiboot.img \ | |
-no-emul-boot \ | |
-R -J \ | |
new_iso/ | |
fi | |
sudo rm -rf efiboot/ | |
sudo mkdir all_packages_iso$ARCH-$LATEST_VERSION | |
sudo cp new_iso/*.npk all_packages_iso$ARCH-$LATEST_VERSION/ | |
sudo rm -rf new_iso/ | |
cd all_packages_iso$ARCH-$LATEST_VERSION/ | |
sudo zip ../all_packages$ARCH-$LATEST_VERSION-patched.zip *.npk | |
cd ../ | |
- name: Cache refind | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch == 'x86' | |
id: cache_refind | |
uses: actions/cache@v4 | |
with: | |
path: refind-bin-0.14.2.zip | |
key: refind | |
- name: Get refind | |
if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_refind.outputs.cache-hit != 'true' && matrix.arch == 'x86' | |
run: | | |
sudo curl -s -o refind-bin-0.14.2.zip https://nchc.dl.sourceforge.net/project/refind/0.14.2/refind-bin-0.14.2.zip | |
- name: Cache install-image-${{ env.LATEST_VERSION }}${{ env.ARCH }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch == 'x86' | |
id: cache_install_image | |
uses: actions/cache@v4 | |
with: | |
path: install-image.zip | |
key: install-image-${{ env.LATEST_VERSION }}-${{ matrix.arch }} | |
- name: Get install-image-${{ env.LATEST_VERSION }}${{ env.ARCH }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_install_image.outputs.cache-hit != 'true' && matrix.arch == 'x86' | |
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 }}${{ env.ARCH }}.img | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch == 'x86' | |
run: | | |
sudo unzip install-image.zip | |
sudo modprobe nbd | |
sudo qemu-nbd -c /dev/nbd0 -f raw install-image-$LATEST_VERSION.img | |
sudo mkdir install-image | |
sudo mount /dev/nbd0 install-image/ | |
sudo unzip refind-bin-0.14.2.zip refind-bin-0.14.2/refind/refind_x64.efi | |
sudo cp refind-bin-0.14.2/refind/refind_x64.efi install-image/EFI/BOOT/BOOTX64.EFI | |
sudo rm -rf refind-bin-0.14.2 | |
sudo -E python3 patch.py kernel install-image/linux | |
NPK_FILES=$(find install-image/*.npk) | |
for file in $NPK_FILES; do | |
sudo -E python3 patch.py npk $file | |
done | |
sudo umount /dev/nbd0 | |
sudo qemu-nbd -d /dev/nbd0 | |
sudo rm -rf install-image/ | |
sudo mv install-image-$LATEST_VERSION.img install-image-$LATEST_VERSION$ARCH-patched.img | |
sudo qemu-img convert -f raw -O qcow2 install-image-$LATEST_VERSION$ARCH-patched.img install-image-$LATEST_VERSION$ARCH-patched.qcow2 | |
sudo qemu-img convert -f raw -O vmdk install-image-$LATEST_VERSION$ARCH-patched.img install-image-$LATEST_VERSION$ARCH-patched.vmdk | |
sudo qemu-img convert -f raw -O vpc install-image-$LATEST_VERSION$ARCH-patched.img install-image-$LATEST_VERSION$ARCH-patched.vhd | |
sudo qemu-img convert -f raw -O vhdx install-image-$LATEST_VERSION$ARCH-patched.img install-image-$LATEST_VERSION$ARCH-patched.vhdx | |
sudo qemu-img convert -f raw -O vdi install-image-$LATEST_VERSION$ARCH-patched.img install-image-$LATEST_VERSION$ARCH-patched.vdi | |
sudo zip install-image-$LATEST_VERSION$ARCH-patched.qcow2.zip install-image-$LATEST_VERSION$ARCH-patched.qcow2 | |
sudo zip install-image-$LATEST_VERSION$ARCH-patched.vmdk.zip install-image-$LATEST_VERSION$ARCH-patched.vmdk | |
sudo zip install-image-$LATEST_VERSION$ARCH-patched.vhd.zip install-image-$LATEST_VERSION$ARCH-patched.vhd | |
sudo zip install-image-$LATEST_VERSION$ARCH-patched.vhdx.zip install-image-$LATEST_VERSION$ARCH-patched.vhdx | |
sudo zip install-image-$LATEST_VERSION$ARCH-patched.vdi.zip install-image-$LATEST_VERSION$ARCH-patched.vdi | |
sudo zip install-image-$LATEST_VERSION$ARCH-patched.img.zip install-image-$LATEST_VERSION$ARCH-patched.img | |
sudo rm install-image-$LATEST_VERSION$ARCH-patched.qcow2 | |
sudo rm install-image-$LATEST_VERSION$ARCH-patched.vmdk | |
sudo rm install-image-$LATEST_VERSION$ARCH-patched.vhd | |
sudo rm install-image-$LATEST_VERSION$ARCH-patched.vhdx | |
sudo rm install-image-$LATEST_VERSION$ARCH-patched.vdi | |
sudo rm install-image-$LATEST_VERSION$ARCH-patched.img | |
- name: Cache chr-${{ env.LATEST_VERSION }}${{ env.ARCH }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && (matrix.arch == 'x86' || matrix.arch == 'arm64') | |
id: cache_chr_img | |
uses: actions/cache@v4 | |
with: | |
path: chr.img.zip | |
key: chr-${{ env.LATEST_VERSION }}-${{ matrix.arch }} | |
- name: Get chr-${{ env.LATEST_VERSION }}${{ env.ARCH }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_chr_img.outputs.cache-hit != 'true' && (matrix.arch == 'x86' || matrix.arch == 'arm64') | |
run: | | |
sudo curl -s -o chr.img.zip https://download.mikrotik.com/routeros/$LATEST_VERSION/chr-$LATEST_VERSION$ARCH.img.zip | |
- name: Patch chr-${{ env.LATEST_VERSION }}${{ env.ARCH }}.img | |
if: steps.get_latest.outputs.has_new_version == 'true' && (matrix.arch == 'x86' || matrix.arch == 'arm64') | |
run: | | |
sudo unzip chr.img.zip | |
sudo modprobe nbd | |
sudo qemu-nbd -c /dev/nbd0 -f raw chr-$LATEST_VERSION$ARCH.img | |
sudo mkdir -p chr/{boot,routeros} | |
sudo mount /dev/nbd0p1 chr/boot/ | |
if [ "${{ matrix.arch }}" == "x86" ]; then | |
sudo mkdir -p chr/boot/BOOT | |
sudo -E python3 patch.py kernel chr/boot/EFI/BOOT/BOOTX64.EFI | |
sudo extlinux --install -H 64 -S 32 chr/boot/BOOT | |
echo -e "default system\nlabel system\n\tkernel /EFI/BOOT/BOOTX64.EFI\n\tappend load_ramdisk=1 root=/dev/ram0 quiet" | sudo tee chr/boot/BOOT/syslinux.cfg > /dev/null | |
elif [ "${{ matrix.arch }}" == "arm64" ]; then | |
sudo -E python3 patch.py kernel chr/boot/EFI/BOOT/BOOTAA64.EFI | |
fi | |
sudo umount /dev/nbd0p1 | |
sudo mount /dev/nbd0p2 chr/routeros/ | |
sudo -E python3 patch.py npk chr/routeros/var/pdb/system/image | |
sudo umount /dev/nbd0p2 | |
sudo rm -rf chr/ | |
sudo qemu-nbd -d /dev/nbd0 | |
sudo mv chr-$LATEST_VERSION$ARCH.img chr-$LATEST_VERSION$ARCH-patched.img | |
sudo qemu-img convert -f raw -O qcow2 chr-$LATEST_VERSION$ARCH-patched.img chr-$LATEST_VERSION$ARCH-patched.qcow2 | |
sudo qemu-img convert -f raw -O vmdk chr-$LATEST_VERSION$ARCH-patched.img chr-$LATEST_VERSION$ARCH-patched.vmdk | |
sudo qemu-img convert -f raw -O vpc chr-$LATEST_VERSION$ARCH-patched.img chr-$LATEST_VERSION$ARCH-patched.vhd | |
sudo qemu-img convert -f raw -O vhdx chr-$LATEST_VERSION$ARCH-patched.img chr-$LATEST_VERSION$ARCH-patched.vhdx | |
sudo qemu-img convert -f raw -O vdi chr-$LATEST_VERSION$ARCH-patched.img chr-$LATEST_VERSION$ARCH-patched.vdi | |
sudo zip chr-$LATEST_VERSION$ARCH-patched.qcow2.zip chr-$LATEST_VERSION$ARCH-patched.qcow2 | |
sudo zip chr-$LATEST_VERSION$ARCH-patched.vmdk.zip chr-$LATEST_VERSION$ARCH-patched.vmdk | |
sudo zip chr-$LATEST_VERSION$ARCH-patched.vhd.zip chr-$LATEST_VERSION$ARCH-patched.vhd | |
sudo zip chr-$LATEST_VERSION$ARCH-patched.vhdx.zip chr-$LATEST_VERSION$ARCH-patched.vhdx | |
sudo zip chr-$LATEST_VERSION$ARCH-patched.vdi.zip chr-$LATEST_VERSION$ARCH-patched.vdi | |
sudo zip chr-$LATEST_VERSION$ARCH-patched.img.zip chr-$LATEST_VERSION$ARCH-patched.img | |
sudo rm chr-$LATEST_VERSION$ARCH-patched.qcow2 | |
sudo rm chr-$LATEST_VERSION$ARCH-patched.vmdk | |
sudo rm chr-$LATEST_VERSION$ARCH-patched.vhd | |
sudo rm chr-$LATEST_VERSION$ARCH-patched.vhdx | |
sudo rm chr-$LATEST_VERSION$ARCH-patched.vdi | |
sudo rm chr-$LATEST_VERSION$ARCH-patched.img | |
- name: Cache NetInstall ${{ env.LATEST_VERSION }} | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch == 'x86' | |
id: cache_netinstall | |
uses: actions/cache@v4 | |
with: | |
path: | | |
netinstall.zip | |
netinstall64.zip | |
netinstall.tar.gz | |
key: netinstall-${{ env.LATEST_VERSION }} | |
- name: Get netinstall ${{ env.LATEST_VERSION }} | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch == 'x86' && steps.cache_netinstall.outputs.cache-hit != 'true' | |
run: | | |
sudo curl -s -o netinstall.zip https://download.mikrotik.com/routeros/$LATEST_VERSION/netinstall-$LATEST_VERSION.zip | |
sudo curl -s -o netinstall64.zip https://download.mikrotik.com/routeros/$LATEST_VERSION/netinstall64-$LATEST_VERSION.zip | |
sudo curl -s -o netinstall.tar.gz https://download.mikrotik.com/routeros/$LATEST_VERSION/netinstall-$LATEST_VERSION.tar.gz | |
- name: Patch netinstall ${{ env.LATEST_VERSION }} | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch == 'x86' | |
run: | | |
sudo unzip netinstall.zip netinstall.exe | |
sudo -E python3 patch.py netinstall netinstall.exe | |
sudo zip netinstall-$LATEST_VERSION-patched.zip netinstall.exe | |
sudo unzip netinstall64.zip netinstall64.exe | |
sudo -E python3 patch.py netinstall netinstall64.exe | |
sudo zip netinstall64-$LATEST_VERSION-patched.zip netinstall64.exe | |
sudo tar -xvf netinstall.tar.gz | |
sudo -E python3 patch.py netinstall netinstall-cli | |
sudo tar -czvf netinstall-$LATEST_VERSION-patched.tar.gz netinstall-cli | |
- name: Cache routeros-${{ env.LATEST_VERSION }}${{ env.ARCH }}.npk & all_packages${{ env.ARCH }}-${{ env.LATEST_VERSION }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch != 'x86' | |
id: cache_routeros_npk | |
uses: actions/cache@v4 | |
with: | |
path: | | |
routeros-${{ env.LATEST_VERSION }}${{ env.ARCH }}.npk | |
all_packages${{ env.ARCH }}-${{ env.LATEST_VERSION }}.zip | |
key: routeros-${{ env.LATEST_VERSION }}-${{ matrix.arch }} | |
- name: Get routeros-${{ env.LATEST_VERSION }}${{ env.ARCH }}.npk & all_packages${{ env.ARCH }}-${{ env.LATEST_VERSION }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && steps.cache_routeros_npk.outputs.cache-hit != 'true' && matrix.arch != 'x86' | |
run: | | |
sudo curl -s -o routeros-$LATEST_VERSION$ARCH.npk https://download.mikrotik.com/routeros/$LATEST_VERSION/routeros-$LATEST_VERSION$ARCH.npk | |
sudo curl -s -o all_packages$ARCH-$LATEST_VERSION.zip https://download.mikrotik.com/routeros/$LATEST_VERSION/all_packages$ARCH-$LATEST_VERSION.zip | |
- name: Patch routeros-${{ env.LATEST_VERSION }}${{ env.ARCH }}.npk & all_packages${{ env.ARCH }}-${{ env.LATEST_VERSION }}.zip | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch != 'x86' | |
run: | | |
sudo mkdir all_packages$ARCH-$LATEST_VERSION | |
sudo unzip all_packages$ARCH-$LATEST_VERSION.zip -d all_packages$ARCH-$LATEST_VERSION/ | |
sudo cp routeros-$LATEST_VERSION$ARCH.npk routeros-$LATEST_VERSION$ARCH-patched.npk | |
sudo -E python3 patch.py npk routeros-$LATEST_VERSION$ARCH-patched.npk | |
NPK_FILES=$(find all_packages$ARCH-$LATEST_VERSION/*.npk) | |
for file in $NPK_FILES; do | |
sudo -E python3 npk.py sign $file $file | |
done | |
cd all_packages$ARCH-$LATEST_VERSION/ | |
sudo zip ../all_packages$ARCH-$LATEST_VERSION-patched.zip *.npk | |
cd .. | |
sudo rm -rf all_packages$ARCH-$LATEST_VERSION/ | |
- name: Update latest version | |
if: steps.get_latest.outputs.has_new_version == 'true' && matrix.arch == 'x86' | |
run: | | |
echo $NEWEST > latest7.txt | |
git config user.name "github-actions[bot]" | |
git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
git add latest7.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 }}${{ env.ARCH }}-patched.iso | |
netinstall-${{ env.LATEST_VERSION }}-patched.zip | |
netinstall64-${{ env.LATEST_VERSION }}-patched.zip | |
netinstall-${{ env.LATEST_VERSION }}-patched.tar.gz | |
install-image-${{ env.LATEST_VERSION }}${{ env.ARCH }}-patched.*.zip | |
chr-${{ env.LATEST_VERSION }}${{ env.ARCH }}-patched.*.zip | |
routeros-${{ env.LATEST_VERSION }}${{ env.ARCH }}-patched.npk | |
all_packages*-${{ env.LATEST_VERSION }}-patched.zip |