forked from elseif/MikroTikPatch
-
Notifications
You must be signed in to change notification settings - Fork 28
228 lines (203 loc) · 10.3 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
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: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y mkisofs xorriso qemu-utils extlinux --no-install-recommends
- name: Check 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
- 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 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 -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 patch.py npk $file
done
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 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 -E python3 patch.py kernel install-image/initrd.rgz
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-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 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 -E python3 patch.py 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