forked from elseif/MikroTikPatch
-
Notifications
You must be signed in to change notification settings - Fork 28
233 lines (209 loc) · 10.7 KB
/
patch6.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
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 }}-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 }}
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