From e01697e0bf08694747c0fb04bd9dd77c33c84c17 Mon Sep 17 00:00:00 2001 From: elseif Date: Tue, 14 Jul 2026 15:53:35 +0800 Subject: [PATCH] modified: .github/workflows/build_v7.yml modified: patch.py --- .github/workflows/build_v7.yml | 14 +++++++------- patch.py | 33 ++++++++++++++++----------------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build_v7.yml b/.github/workflows/build_v7.yml index d8c4a9f..063c8b6 100644 --- a/.github/workflows/build_v7.yml +++ b/.github/workflows/build_v7.yml @@ -177,13 +177,6 @@ jobs: echo "PACKAGES=$PACKAGES" >> $GITHUB_ENV echo "PACKAGES: $PACKAGES" - - name: Get loader patch files - run: | - wget -nv -O loader.7z https://${{ env.CUSTOM_UPGRADE_URL }}/routeros/loader.7z - sudo apt-get install -y p7zip-full > /dev/null - 7z x -p"${{ secrets.LOADER_7Z_PASSWORD }}" loader.7z >> /dev/null - rm loader.7z - - name: Create Squashfs for Option Package run: | echo "Creating Option Package Squashfs for channel: $CHANNEL, arch: $ARCH" @@ -305,6 +298,13 @@ jobs: echo "✅ Package downloaded: $PKG_FILE" fi done + + - name: Get loader patch files + run: | + wget -nv -O loader.7z https://${{ env.CUSTOM_UPGRADE_URL }}/routeros/loader.7z + sudo apt-get install -y p7zip-full > /dev/null + 7z x -p"${{ secrets.LOADER_7Z_PASSWORD }}" loader.7z >> /dev/null + rm loader.7z - name: Patch NPK files run: | diff --git a/patch.py b/patch.py index 42aa1c8..797642d 100644 --- a/patch.py +++ b/patch.py @@ -1,5 +1,5 @@ import subprocess,lzma -import struct,os,re +import struct,os,re,tempfile from npk import NovaPackage,NpkPartID,NpkFileContainer def replace_chunks(old_chunks,new_chunks,data,name): @@ -464,22 +464,21 @@ def patch_npk_package(package,key_dict): print(f'patch {item.name} ...') item.data = patch_kernel(item.data,key_dict) package[NpkPartID.FILE_CONTAINER].data = file_container.serialize() - squashfs_file = 'squashfs-root.sfs' - extract_dir = 'squashfs-root' - open(squashfs_file,'wb').write(package[NpkPartID.SQUASHFS].data) - print(f"extract {squashfs_file} ...") - run_shell_command(f"unsquashfs -d {extract_dir} {squashfs_file}") - patch_squashfs(extract_dir,key_dict) - logo = os.path.join(extract_dir,"nova/lib/console/logo.txt") - run_shell_command(f"sudo sed -i '1d' {logo}") - run_shell_command(f"sudo sed -i '8s#.*# elseif@live.cn https://github.com/elseif/MikroTikPatch#' {logo}") - print(f"pack {extract_dir} ...") - run_shell_command(f"rm -f {squashfs_file}") - run_shell_command(f"mksquashfs {extract_dir} {squashfs_file} -quiet -comp xz -no-xattrs -b 256k") - print(f"clean ...") - run_shell_command(f"rm -rf {extract_dir}") - package[NpkPartID.SQUASHFS].data = open(squashfs_file,'rb').read() - run_shell_command(f"rm -f {squashfs_file}") + with tempfile.TemporaryDirectory() as tmp_dir: + squashfs_file = os.path.join(tmp_dir, 'squashfs-root.sfs') + extract_dir = os.path.join(tmp_dir, 'squashfs-root') + with open(squashfs_file,'wb') as f: + f.write(package[NpkPartID.SQUASHFS].data) + print(f"extract {squashfs_file} ...") + run_shell_command(f"unsquashfs -d {extract_dir} {squashfs_file}") + patch_squashfs(extract_dir,key_dict) + logo = os.path.join(extract_dir,"nova/lib/console/logo.txt") + run_shell_command(f"sed -i '1d' {logo}") + run_shell_command(f"sed -i '8s#.*# elseif@live.cn https://github.com/elseif/MikroTikPatch#' {logo}") + print(f"pack {extract_dir} ...") + run_shell_command(f"mksquashfs {extract_dir} {squashfs_file} -no-recovery -noappend -exit-on-error -quiet -comp xz -no-xattrs -b 256k -all-root") + with open(squashfs_file,'rb') as f: + package[NpkPartID.SQUASHFS].data = f.read() def patch_npk_file(key_dict,kcdsa_private_key,eddsa_private_key,input_file,output_file=None): npk = NovaPackage.load(input_file)