Skip to content

Patch v6

Patch v6 #3

Workflow file for this run

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 }}-x86
- 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-patched.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 }}.zip
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 }}.zip
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 }}.img
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 }}.zip
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 }}.zip
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 }}.img
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