עזרה בתיקון קובץ זרימת עבודה של גיטאהב
-
אני הכנתי WSA כולל תעודות אבטחה של הסינונים השונים
מבוסס על העבודה של https://forum.netfree.link/user/sivan22
והכל הלך מעולה
הבעיה היא שעדכון שהעלו לגיטאהב לפני יומים ואני מנסה להכניס לפרוייקט אצלי
השינוי האמיתי שקיים בין הפרוייקט הכללי אלי הוא בקטע הבאname: Add extra packages run: | wget -qO- "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_REF.tar.gz" | sudo tar --wildcards -zxvf- --strip-component=2 '*/${{ matrix.arch }}/system/*' sudo find system/system/priv-app -type d -exec chmod 0755 {} \; sudo find system/system/priv-app -type f -exec chmod 0644 {} \; sudo find system/system/priv-app -exec chcon --reference=system/system/priv-app {} \;
שאצלי יש בו עוד 3 שורות (ויש עוד קבצים של התעודות בתיקיה הנ"ל וכו')
- name: Add extra packages and Filtered internet CAs run: | wget -qO- "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_REF.tar.gz" | sudo tar --wildcards -zxvf- --strip-component=2 '*/${{ matrix.arch }}/system/*' sudo find system/system/priv-app -type d -exec chmod 0755 {} \; sudo find system/system/priv-app -type f -exec chmod 0644 {} \; sudo find system/system/priv-app -exec chcon --reference=system/system/priv-app {} \; sudo find system/system/etc/security/cacerts -type d -exec chmod 0755 {} \; sudo find system/system/etc/security/cacerts -type f -exec chmod 0644 {} \; sudo find system/system/etc/security/cacerts -exec chcon --reference=system/system/etc/security/cacerts {} \;
עד היום הכל הלך כשורה אבל בעדכון שהכנסתי היום הוסיפו שם את השורות הבאות לקראת סוף הקובץ
if (((Test-Path -Path $(ls -Q ./${{ matrix.arch }} | paste -sd "," -)) -eq \$false).Count) { Write-Error "Some files are missing in the zip. Please try to download it again from the browser downloader, or try to run the workflow again. Press any key to exist" \$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') exit 1 }
מה שגורם לשגיאה הבאה
Invalid workflow file: .github/workflows/Filtered-internet.yml#L542
You have an error in your yaml syntax on line 542אני מצרף את שני הקבצים המלאים של יוצר הפרוייקט ושלי
בתקווה שיהיה מי שיוכל לגלות מה הבעיה ולעזור לכל מי שמשתמש במה שאני מעלה לדרייב כל עדכון
מקורי
magisk.yml
ערוך
Filtered-internet.ymlההבדלים הם בשורות 374 עד 383
וכמובן הקבצים שנוספו לתיקיית הפרוייקט
וזה המקור של ההוספה בגיטאהב
https://github.com/LSPosed/MagiskOnWSA/commit/868c9420d79dc720d6b0bf23c69b570d664f03eb -
אני מוסיף את נוסח הקבצים עצמם
מקוריname: Build WSA on: push: paths-ignore: - 'README.md' pull_request: paths-ignore: - 'README.md' workflow_dispatch: inputs: arch: description: "Build arch" required: true default: "x64 & arm64" type: choice options: - x64 - arm64 - x64 & arm64 magisk_apk: description: "Magisk version" required: true default: "stable" type: choice options: - stable - beta - canary gapps_variant: description: "Variants of gapps" required: true default: "none" type: choice options: - none - super - stock - full - mini - micro - nano - pico - tvstock - tvmini root_sol: description: "Root solution" required: true default: "magisk" type: choice options: - magisk - none jobs: matrix: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Generate build matrix id: set-matrix uses: actions/github-script@v6 with: script: | let matrix = {}; let arch = "${{ github.event.inputs.arch }}" switch ( arch ) { case "x64": matrix.arch = ["x64"]; break; case "arm64": matrix.arch = ["arm64"]; break; default: matrix.arch = ["x64", "arm64"]; break; } core.setOutput("matrix",JSON.stringify(matrix)); build: runs-on: ubuntu-20.04 needs: matrix strategy: matrix: ${{fromJson(needs.matrix.outputs.matrix)}} steps: - name: Dependencies run: | pip3 install beautifulsoup4 lxml sudo apt-get update && sudo apt-get install setools lzip qemu-utils wine winetricks patchelf wget -qO- "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_REF.tar.gz" | sudo tar --wildcards -zxvf- -C ~ --strip-component=2 '*/wine/*' '*/linker/*' winetricks msxml6 echo "163.172.251.201 store.rg-adguard.net" | sudo tee -a /etc/hosts - name: Download WSA shell: python run: | import requests from bs4 import BeautifulSoup import re import zipfile import os import urllib.request arch = "${{ matrix.arch }}" res = requests.post("https://store.rg-adguard.net/api/GetFiles", "type=CategoryId&url=858014f3-3934-4abe-8078-4aa193e74ca8&ring=WIS&lang=en-US", headers={ "content-type": "application/x-www-form-urlencoded" }) html = BeautifulSoup(res.content, "lxml") a = html.find("a", string=re.compile(f"Microsoft\.UI\.Xaml\..*_{arch}_.*\.appx")) link = a["href"] print(f"downloading link: {link}", flush=True) out_file = "xaml.appx" if not os.path.isfile(out_file): urllib.request.urlretrieve(link, out_file) a = html.find("a", string=re.compile(f"Microsoft\.VCLibs\..*_{arch}_.*\.appx")) link = a["href"] print(f"downloading link: {link}", flush=True) out_file = "vclibs.appx" if not os.path.isfile(out_file): urllib.request.urlretrieve(link, out_file) a = html.find("a", string=re.compile("MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle")) link = a["href"] print(f"downloading link: {link}", flush=True) out_file = "wsa.zip" if not os.path.isfile(out_file): urllib.request.urlretrieve(link, out_file) zip_name = "" with zipfile.ZipFile(out_file) as zip: for f in zip.filelist: if arch in f.filename.lower(): zip_name = f.filename if not os.path.isfile(zip_name): print(f"unzipping to {zip_name}", flush=True) zip.extract(f) ver_no = zip_name.split("_") ver = ver_no[1] with open(os.environ['GITHUB_ENV'], 'a') as g: g.write(f'WSA_VER={ver}\n') rel = ver_no[3].split(".") rell = str(rel[0]) with open(os.environ['GITHUB_ENV'], 'a') as g: g.write(f'WSA_REL={rell}\n') if 'language' in f.filename.lower() or 'scale' in f.filename.lower(): name = f.filename.split("-", 1)[1].split(".")[0] zip.extract(f) with zipfile.ZipFile(f.filename) as l: for g in l.filelist: if g.filename == 'resources.pri': g.filename = f'{name}.pri' l.extract(g, 'pri') print(f"extract resource pack {g.filename}") elif g.filename == 'AppxManifest.xml': g.filename = f'{name}.xml' l.extract(g, 'xml') with zipfile.ZipFile(zip_name) as zip: if not os.path.isdir(arch): print(f"unzipping from {zip_name}", flush=True) zip.extractall(arch) print("done", flush=True) - name: Download Magisk shell: python run: | import urllib.request import zipfile import os import json import requests magisk_apk = """${{ github.event.inputs.magisk_apk }}""" if not magisk_apk: magisk_apk = "stable" if magisk_apk == "stable" or magisk_apk == "beta" or magisk_apk == "canary": magisk_apk = json.loads(requests.get(f"https://github.com/topjohnwu/magisk-files/raw/master/{magisk_apk}.json").content)['magisk']['link'] out_file = "magisk.zip" arch = "${{ matrix.arch }}" abi_map={"x64" : ["x86_64", "x86"], "arm64" : ["arm64-v8a", "armeabi-v7a"]} if not os.path.isfile(out_file): urllib.request.urlretrieve(magisk_apk, out_file) def extract_as(zip, name, as_name, dir): info = zip.getinfo(name) info.filename = as_name zip.extract(info, dir) with zipfile.ZipFile(out_file) as zip: extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagisk64.so", "magisk64", "magisk") extract_as(zip, f"lib/{ abi_map[arch][1] }/libmagisk32.so", "magisk32", "magisk") standalone_policy = False try: zip.getinfo(f"lib/{ abi_map[arch][0] }/libmagiskpolicy.so") standalone_policy = True except: pass extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskinit", "magisk") if standalone_policy: extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskpolicy.so", "magiskpolicy", "magisk") else: extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskpolicy", "magisk") extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskboot.so", "magiskboot", "magisk") extract_as(zip, f"lib/{ abi_map[arch][0] }/libbusybox.so", "busybox", "magisk") if standalone_policy: extract_as(zip, f"lib/{ abi_map['x64'][0] }/libmagiskpolicy.so", "magiskpolicy", ".") else: extract_as(zip, f"lib/{ abi_map['x64'][0] }/libmagiskinit.so", "magiskpolicy", ".") extract_as(zip, f"assets/boot_patch.sh", "boot_patch.sh", "magisk") extract_as(zip, f"assets/util_functions.sh", "util_functions.sh", "magisk") - name: Download OpenGApps if: ${{ github.event.inputs.gapps_variant != 'none' && github.event.inputs.gapps_variant != '' }} shell: python run: | import requests import zipfile import os import urllib.request import json import re arch = "${{ matrix.arch }}" variant = "${{ github.event.inputs.gapps_variant }}" abi_map = {"x64" : "x86_64", "arm64": "arm64"} try: res = requests.get(f"https://api.opengapps.org/list") j = json.loads(res.content) link = {i["name"]: i for i in j["archs"][abi_map[arch]]["apis"]["11.0"]["variants"]}[variant]["zip"] except Exception: print("Failed to fetch from opengapps api, fallbacking to sourceforge rss...") res = requests.get(f'https://sourceforge.net/projects/opengapps/rss?path=/{abi_map[arch]}&limit=100') link = re.search(f'https://.*{abi_map[arch]}/.*{variant}.*\.zip/download', res.text).group().replace('.zip/download', '.zip').replace('sourceforge.net/projects/opengapps/files', 'downloads.sourceforge.net/project/opengapps') print(f"downloading link: {link}", flush=True) out_file = "gapps.zip" if not os.path.isfile(out_file): urllib.request.urlretrieve(link, out_file) print("done", flush=True) - name: Extract GApps and expand images if: ${{ github.event.inputs.gapps_variant != 'none' && github.event.inputs.gapps_variant != '' }} run: | mkdir gapps unzip -p gapps.zip {Core,GApps}/'*.lz' | tar --lzip -C gapps -xvf - -i --strip-components=2 --exclude='setupwizardtablet-x86_64' --exclude='packageinstallergoogle-all' --exclude='speech-common' --exclude='markup-lib-arm' --exclude='markup-lib-arm64' --exclude='markup-all' --exclude='setupwizarddefault-x86_64' --exclude='pixellauncher-all' --exclude='pixellauncher-common' e2fsck -yf ${{ matrix.arch }}/system.img resize2fs ${{ matrix.arch }}/system.img $(( $(du -sB512 gapps | cut -f1) + $(du -sB512 ${{ matrix.arch }}/system.img | cut -f1) ))s e2fsck -yf ${{ matrix.arch }}/product.img resize2fs ${{ matrix.arch }}/product.img 1024M e2fsck -yf ${{ matrix.arch }}/system_ext.img resize2fs ${{ matrix.arch }}/system_ext.img 108M - name: Expand vendor run: | e2fsck -yf ${{ matrix.arch }}/vendor.img resize2fs ${{ matrix.arch }}/vendor.img 320M - name: Mount images run: | sudo mkdir system sudo mkdir userdata sudo mount -o loop ${{ matrix.arch }}/system.img system sudo mount -o loop ${{ matrix.arch }}/vendor.img system/vendor sudo mount -o loop ${{ matrix.arch }}/product.img system/product sudo mount -o loop ${{ matrix.arch }}/system_ext.img system/system_ext qemu-img convert -O raw ${{ matrix.arch }}/userdata.vhdx userdata.img sudo mount -o loop userdata.img userdata - name: Integrate Magisk if: ${{ github.event.inputs.root_sol == 'magisk' || github.event.inputs.root_sol == '' }} run: | sudo mkdir system/sbin sudo chcon --reference system/init.environ.rc system/sbin sudo chown root:root system/sbin sudo chmod 0700 system/sbin sudo cp magisk/* system/sbin/ sudo mkdir -p userdata/adb/magisk sudo chmod -R 700 userdata/adb sudo cp magisk/* userdata/adb/magisk/ sudo find userdata/adb/magisk -type f -exec chmod 0755 {} \; sudo cp magisk.zip userdata/adb/magisk/magisk.apk sudo tee -a system/sbin/loadpolicy.sh <<EOF #!/system/bin/sh restorecon -R /data/adb/magisk for module in \$(ls /data/adb/modules); do if ! [ -f "/data/adb/modules/\$module/disable" ] && [ -f "/data/adb/modules/\$module/sepolicy.rule" ]; then /sbin/magiskpolicy --live --apply "/data/adb/modules/\$module/sepolicy.rule" fi done EOF sudo find system/sbin -type f -exec chmod 0755 {} \; sudo find system/sbin -type f -exec chown root:root {} \; sudo find system/sbin -type f -exec chcon --reference system/product {} \; sudo patchelf --replace-needed libc.so "${HOME}/libc.so" ./magiskpolicy || true sudo patchelf --replace-needed libm.so "${HOME}/libm.so" ./magiskpolicy || true sudo patchelf --replace-needed libdl.so "${HOME}/libdl.so" ./magiskpolicy || true sudo patchelf --set-interpreter "${HOME}/linker64" ./magiskpolicy || true chmod +x ./magiskpolicy echo '/dev/wsa-magisk(/.*)? u:object_r:magisk_file:s0' | sudo tee -a system/vendor/etc/selinux/vendor_file_contexts echo '/data/adb/magisk(/.*)? u:object_r:magisk_file:s0' | sudo tee -a system/vendor/etc/selinux/vendor_file_contexts sudo ./magiskpolicy --load system/vendor/etc/selinux/precompiled_sepolicy --save system/vendor/etc/selinux/precompiled_sepolicy --magisk "allow * magisk_file lnk_file *" sudo tee -a system/system/etc/init/hw/init.rc <<EOF on post-fs-data start logd start adbd mkdir /dev/wsa-magisk mount tmpfs tmpfs /dev/wsa-magisk mode=0755 copy /sbin/magisk64 /dev/wsa-magisk/magisk64 chmod 0755 /dev/wsa-magisk/magisk64 symlink ./magisk64 /dev/wsa-magisk/magisk symlink ./magisk64 /dev/wsa-magisk/su symlink ./magisk64 /dev/wsa-magisk/resetprop copy /sbin/magisk32 /dev/wsa-magisk/magisk32 chmod 0755 /dev/wsa-magisk/magisk32 copy /sbin/magiskinit /dev/wsa-magisk/magiskinit chmod 0755 /dev/wsa-magisk/magiskinit copy /sbin/magiskpolicy /dev/wsa-magisk/magiskpolicy chmod 0755 /dev/wsa-magisk/magiskpolicy mkdir /dev/wsa-magisk/.magisk 700 mkdir /dev/wsa-magisk/.magisk/mirror 700 mkdir /dev/wsa-magisk/.magisk/block 700 rm /dev/.magisk_unblock start IhhslLhHYfse start FAhW7H9G5sf wait /dev/.magisk_unblock 40 rm /dev/.magisk_unblock service IhhslLhHYfse /system/bin/sh /sbin/loadpolicy.sh user root seclabel u:r:magisk:s0 oneshot service FAhW7H9G5sf /dev/wsa-magisk/magisk --post-fs-data user root seclabel u:r:magisk:s0 oneshot service HLiFsR1HtIXVN6 /dev/wsa-magisk/magisk --service class late_start user root seclabel u:r:magisk:s0 oneshot on property:sys.boot_completed=1 start YqCTLTppv3ML service YqCTLTppv3ML /dev/wsa-magisk/magisk --boot-complete user root seclabel u:r:magisk:s0 oneshot EOF - name: Merge Language Resources run: | cp ${{ matrix.arch }}/resources.pri pri/en-us.pri cp ${{ matrix.arch }}/AppxManifest.xml xml/en-us.xml tee priconfig.xml <<EOF <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <resources targetOsVersion="10.0.0" majorVersion="1"> <index root="\" startIndexAt="\"> <indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true" qualifierDelimiter="."/> <indexer-config type="PRI"/> </index> </resources> EOF wine64 ~/makepri.exe new /pr pri /in MicrosoftCorporationII.WindowsSubsystemForAndroid /cf priconfig.xml /of ${{ matrix.arch }}/resources.pri /o sed -i -zE "s/<Resources.*Resources>/<Resources>\n$(cat xml/* | grep -Po '<Resource [^>]*/>' | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/\$/\\$/g' | sed 's/\//\\\//g')\n<\/Resources>/g" ${{ matrix.arch }}/AppxManifest.xml - name: Add extra packages run: | wget -qO- "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_REF.tar.gz" | sudo tar --wildcards -zxvf- --strip-component=2 '*/${{ matrix.arch }}/system/*' sudo find system/system/priv-app -type d -exec chmod 0755 {} \; sudo find system/system/priv-app -type f -exec chmod 0644 {} \; sudo find system/system/priv-app -exec chcon --reference=system/system/priv-app {} \; - name: Integrate GApps if: ${{ github.event.inputs.gapps_variant != 'none' && github.event.inputs.gapps_variant != '' }} run: | wget -qO- "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_REF.tar.gz" | sudo tar --wildcards -zxvf- --strip-component=2 '*/${{ matrix.arch }}/gapps/*' shopt -s extglob sudo cp -vr gapps/!(product) system/system sudo cp -vr gapps/product/* system/product/ sudo find system/system/{app,etc,framework,priv-app} -exec chown root:root {} \; sudo find system/product/{app,etc,overlay,priv-app} -exec chown root:root {} \; sudo find system/system/{app,etc,framework,priv-app} -type d -exec chmod 0755 {} \; sudo find system/product/{app,etc,overlay,priv-app} -type d -exec chmod 0755 {} \; sudo find system/system/{app,framework,priv-app} -type f -exec chmod 0644 {} \; ls gapps/etc/ | xargs -n 1 -I dir sudo find system/system/etc/dir -type f -exec chmod 0644 {} \; sudo find system/product/{app,etc,overlay,priv-app} -type f -exec chmod 0644 {} \; sudo find system/system/{app,framework,priv-app} -type d -exec chcon --reference=system/system/app {} \; sudo find system/product/{app,etc,overlay,priv-app} -type d -exec chcon --reference=system/product/app {} \; ls gapps/etc/ | xargs -n 1 -I dir sudo find system/system/etc/dir -type d -exec chcon --reference=system/system/etc/permissions {} \; sudo find system/system/{app,framework,priv-app} -type f -exec chcon --reference=system/system/framework/ext.jar {} \; ls gapps/etc/ | xargs -n 1 -I dir sudo find system/system/etc/dir -type f -exec chcon --reference=system/system/etc/permissions {} \; sudo find system/product/{app,etc,overlay,priv-app} -type f -exec chcon --reference=system/product/etc/permissions/privapp-permissions-venezia.xml {} \; sudo patchelf --replace-needed libc.so "${HOME}/libc.so" ./magiskpolicy || true sudo patchelf --replace-needed libm.so "${HOME}/libm.so" ./magiskpolicy || true sudo patchelf --replace-needed libdl.so "${HOME}/libdl.so" ./magiskpolicy || true sudo patchelf --set-interpreter "${HOME}/linker64" ./magiskpolicy || true chmod +x ./magiskpolicy sudo ./magiskpolicy --load system/vendor/etc/selinux/precompiled_sepolicy --save system/vendor/etc/selinux/precompiled_sepolicy "allow gmscore_app gmscore_app vsock_socket { create connect write read }" "allow gmscore_app device_config_runtime_native_boot_prop file read" "allow gmscore_app system_server_tmpfs dir search" "allow gmscore_app system_server_tmpfs file open" - name: Fix GApps prop if: ${{ github.event.inputs.gapps_variant != 'none' && github.event.inputs.gapps_variant != '' }} shell: sudo python {0} run: | from __future__ import annotations from io import TextIOWrapper from os import system from typing import OrderedDict class Prop(OrderedDict): def __init__(self, file: TextIOWrapper) -> None: super().__init__() for i, line in enumerate(file.read().splitlines(False)): if '=' in line: k, v = line.split('=', 2) self[k] = v else: self[f".{i}"] = line def __str__(self) -> str: return '\n'.join([v if k.startswith('.') else f"{k}={v}" for k, v in self.items()]) def __iadd__(self, other: str) -> Prop: self[f".{len(self)}"] = other return self new_props = { ("product", "brand"): "google", ("product", "manufacturer"): "Google", ("build", "product"): "redfin", ("product", "name"): "redfin", ("product", "device"): "redfin", ("product", "model"): "Pixel 5", ("build", "flavor"): "redfin-user" } def description(sec: str, p: Prop) -> str: return f"{p[f'ro.{sec}.build.flavor']} {p[f'ro.{sec}.build.version.release_or_codename']} {p[f'ro.{sec}.build.id']} {p[f'ro.{sec}.build.version.incremental']} {p[f'ro.{sec}.build.tags']}" def fingerprint(sec: str, p: Prop) -> str: return f"""{p[f"ro.product.{sec}.brand"]}/{p[f"ro.product.{sec}.name"]}/{p[f"ro.product.{sec}.device"]}:{p[f"ro.{sec}.build.version.release"]}/{p[f"ro.{sec}.build.id"]}/{p[f"ro.{sec}.build.version.incremental"]}:{p[f"ro.{sec}.build.type"]}/{p[f"ro.{sec}.build.tags"]}""" def fix_prop(sec, prop): print(f"fixing {prop}", flush=True) with open(prop, 'r') as f: p = Prop(f) p += "# extra prop added by MagiskOnWSA" for k, v in new_props.items(): p[f"ro.{k[0]}.{k[1]}"] = v if k[0] == "build": p[f"ro.{sec}.{k[0]}.{k[1]}"] = v elif k[0] == "product": p[f"ro.{k[0]}.{sec}.{k[1]}"] = v p["ro.build.description"] = description(sec, p) p[f"ro.build.fingerprint"] = fingerprint(sec, p) p[f"ro.{sec}.build.description"] = description(sec, p) p[f"ro.{sec}.build.fingerprint"] = fingerprint(sec, p) p[f"ro.bootimage.build.fingerprint"] = fingerprint(sec, p) with open(prop, 'w') as f: f.write(str(p)) for sec, prop in {"system": "system/system/build.prop", "product": "system/product/build.prop", "system_ext": "system/system_ext/build.prop", "vendor": "system/vendor/build.prop", "odm": "system/vendor/odm/etc/build.prop"}.items(): fix_prop(sec, prop) - name: Umount images run: | sudo umount system/vendor sudo umount system/product sudo umount system/system_ext sudo umount system sudo umount userdata qemu-img convert -o subformat=dynamic -f raw -O vhdx userdata.img ${{ matrix.arch }}/userdata.vhdx - name: Shrink images run: | e2fsck -yf ${{ matrix.arch }}/system.img resize2fs -M ${{ matrix.arch }}/system.img e2fsck -yf ${{ matrix.arch }}/vendor.img resize2fs -M ${{ matrix.arch }}/vendor.img e2fsck -yf ${{ matrix.arch }}/product.img resize2fs -M ${{ matrix.arch }}/product.img e2fsck -yf ${{ matrix.arch }}/system_ext.img resize2fs -M ${{ matrix.arch }}/system_ext.img - name: Remove signature and add scripts run: | rm -rf ${{ matrix.arch }}/\[Content_Types\].xml ${{ matrix.arch }}/AppxBlockMap.xml ${{ matrix.arch }}/AppxSignature.p7x ${{ matrix.arch }}/AppxMetadata cp vclibs.appx xaml.appx ${{ matrix.arch }} tee ${{ matrix.arch }}/Install.ps1 <<EOF # Automated Install script by Mioki # http://github.com/okibcn function Test-Administrator { [OutputType([bool])] param() process { [Security.Principal.WindowsPrincipal]\$user = [Security.Principal.WindowsIdentity]::GetCurrent(); return \$user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator); } } function Finish { Clear-Host Start-Process "wsa://com.topjohnwu.magisk" Start-Process "wsa://com.android.vending" } if (-not (Test-Administrator)) { \$proc = Start-Process -PassThru -WindowStyle Hidden -Verb RunAs powershell.exe -Args "-executionpolicy bypass -command Set-Location '\$PSScriptRoot'; &'\$PSCommandPath' EVAL" \$proc.WaitForExit() if (\$proc.ExitCode -ne 0) { Clear-Host Write-Warning "Failed to launch start as Administrator\`r\`nPress any key to exit" \$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); } exit } elseif ((\$args.Count -eq 1) -and (\$args[0] -eq "EVAL")) { Start-Process powershell.exe -Args "-executionpolicy bypass -command Set-Location '\$PSScriptRoot'; &'\$PSCommandPath'" exit } if (((Test-Path -Path $(ls -Q ./${{ matrix.arch }} | paste -sd "," -)) -eq \$false).Count) { Write-Error "Some files are missing in the zip. Please try to download it again from the browser downloader, or try to run the workflow again. Press any key to exist" \$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') exit 1 } reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1" \$VMP = Get-WindowsOptionalFeature -Online -FeatureName 'VirtualMachinePlatform' if (\$VMP.State -ne "Enabled") { Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName 'VirtualMachinePlatform' Clear-Host Write-Warning "Need restart to enable virtual machine platform\`r\`nPress y to restart or press any key to exit" \$key = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') If ("y" -eq \$key.Character) { Restart-Computer -Confirm } Else { exit 1 } } Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Path vclibs.appx Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Path xaml.appx \$Installed = \$null \$Installed = Get-AppxPackage -Name 'MicrosoftCorporationII.WindowsSubsystemForAndroid' If ((\$null -ne \$Installed) -and (-not (\$Installed.IsDevelopmentMode))) { Clear-Host Write-Warning "There is already one installed WSA. Please uninstall it first.\`r\`nPress y to uninstall existing WSA or press any key to exit" \$key = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') If ("y" -eq \$key.Character) { Remove-AppxPackage -Package \$Installed.PackageFullName } Else { exit 1 } } Clear-Host Write-Host "Installing MagiskOnWSA..." Stop-Process -Name "wsaclient" -ErrorAction "silentlycontinue" Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml if (\$?) { Finish } Elseif (\$null -ne \$Installed) { Clear-Host Write-Host "Failed to update, try to uninstall existing installation while preserving userdata..." Remove-AppxPackage -PreserveApplicationData -Package \$Installed.PackageFullName Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml if (\$?) { Finish } } Write-Host "All Done\`r\`nPress any key to exit" \$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') EOF - name: Generate artifact name run: | variant="${{ github.event.inputs.gapps_variant }}" root="${{ github.event.inputs.root_sol }}" if [[ "$root" = "none" ]]; then name1="" elif [[ "$root" = "" ]]; then name1="-with-magisk" else name1="-with-${root}" fi if [[ "$variant" = "none" || "$variant" = "" ]]; then name2="-NoGApps" else name2="-GApps-${variant}" fi echo "artifact_name=WSA${name1}${name2}_${{ env.WSA_VER }}_${{ matrix.arch }}_${{ env.WSA_REL }}" >> $GITHUB_ENV - name: Upload WSA uses: actions/upload-artifact@v2 with: name: ${{ env.artifact_name }} path: "./${{ matrix.arch }}/*"
-
ערוך
name: Filtered internet on: push: paths-ignore: - 'README.md' pull_request: paths-ignore: - 'README.md' workflow_dispatch: inputs: arch: description: "Build arch" required: true default: "x64 & arm64" type: choice options: - x64 - arm64 - x64 & arm64 magisk_apk: description: "Magisk version" required: true default: "stable" type: choice options: - stable - beta - canary gapps_variant: description: "Variants of gapps" required: true default: "none" type: choice options: - none - super - stock - full - mini - micro - nano - pico - tvstock - tvmini root_sol: description: "Root solution" required: true default: "magisk" type: choice options: - magisk - none jobs: matrix: runs-on: ubuntu-latest outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Generate build matrix id: set-matrix uses: actions/github-script@v6 with: script: | let matrix = {}; let arch = "${{ github.event.inputs.arch }}" switch ( arch ) { case "x64": matrix.arch = ["x64"]; break; case "arm64": matrix.arch = ["arm64"]; break; default: matrix.arch = ["x64", "arm64"]; break; } core.setOutput("matrix",JSON.stringify(matrix)); build: runs-on: ubuntu-20.04 needs: matrix strategy: matrix: ${{fromJson(needs.matrix.outputs.matrix)}} steps: - name: Dependencies run: | pip3 install beautifulsoup4 lxml sudo apt-get update && sudo apt-get install setools lzip qemu-utils wine winetricks patchelf wget -qO- "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_REF.tar.gz" | sudo tar --wildcards -zxvf- -C ~ --strip-component=2 '*/wine/*' '*/linker/*' winetricks msxml6 echo "163.172.251.201 store.rg-adguard.net" | sudo tee -a /etc/hosts - name: Download WSA shell: python run: | import requests from bs4 import BeautifulSoup import re import zipfile import os import urllib.request arch = "${{ matrix.arch }}" res = requests.post("https://store.rg-adguard.net/api/GetFiles", "type=CategoryId&url=858014f3-3934-4abe-8078-4aa193e74ca8&ring=WIS&lang=en-US", headers={ "content-type": "application/x-www-form-urlencoded" }) html = BeautifulSoup(res.content, "lxml") a = html.find("a", string=re.compile(f"Microsoft\.UI\.Xaml\..*_{arch}_.*\.appx")) link = a["href"] print(f"downloading link: {link}", flush=True) out_file = "xaml.appx" if not os.path.isfile(out_file): urllib.request.urlretrieve(link, out_file) a = html.find("a", string=re.compile(f"Microsoft\.VCLibs\..*_{arch}_.*\.appx")) link = a["href"] print(f"downloading link: {link}", flush=True) out_file = "vclibs.appx" if not os.path.isfile(out_file): urllib.request.urlretrieve(link, out_file) a = html.find("a", string=re.compile("MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle")) link = a["href"] print(f"downloading link: {link}", flush=True) out_file = "wsa.zip" if not os.path.isfile(out_file): urllib.request.urlretrieve(link, out_file) zip_name = "" with zipfile.ZipFile(out_file) as zip: for f in zip.filelist: if arch in f.filename.lower(): zip_name = f.filename if not os.path.isfile(zip_name): print(f"unzipping to {zip_name}", flush=True) zip.extract(f) ver_no = zip_name.split("_") ver = ver_no[1] with open(os.environ['GITHUB_ENV'], 'a') as g: g.write(f'WSA_VER={ver}\n') rel = ver_no[3].split(".") rell = str(rel[0]) with open(os.environ['GITHUB_ENV'], 'a') as g: g.write(f'WSA_REL={rell}\n') if 'language' in f.filename.lower() or 'scale' in f.filename.lower(): name = f.filename.split("-", 1)[1].split(".")[0] zip.extract(f) with zipfile.ZipFile(f.filename) as l: for g in l.filelist: if g.filename == 'resources.pri': g.filename = f'{name}.pri' l.extract(g, 'pri') print(f"extract resource pack {g.filename}") elif g.filename == 'AppxManifest.xml': g.filename = f'{name}.xml' l.extract(g, 'xml') with zipfile.ZipFile(zip_name) as zip: if not os.path.isdir(arch): print(f"unzipping from {zip_name}", flush=True) zip.extractall(arch) print("done", flush=True) - name: Download Magisk shell: python run: | import urllib.request import zipfile import os import json import requests magisk_apk = """${{ github.event.inputs.magisk_apk }}""" if not magisk_apk: magisk_apk = "stable" if magisk_apk == "stable" or magisk_apk == "beta" or magisk_apk == "canary": magisk_apk = json.loads(requests.get(f"https://github.com/topjohnwu/magisk-files/raw/master/{magisk_apk}.json").content)['magisk']['link'] out_file = "magisk.zip" arch = "${{ matrix.arch }}" abi_map={"x64" : ["x86_64", "x86"], "arm64" : ["arm64-v8a", "armeabi-v7a"]} if not os.path.isfile(out_file): urllib.request.urlretrieve(magisk_apk, out_file) def extract_as(zip, name, as_name, dir): info = zip.getinfo(name) info.filename = as_name zip.extract(info, dir) with zipfile.ZipFile(out_file) as zip: extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagisk64.so", "magisk64", "magisk") extract_as(zip, f"lib/{ abi_map[arch][1] }/libmagisk32.so", "magisk32", "magisk") standalone_policy = False try: zip.getinfo(f"lib/{ abi_map[arch][0] }/libmagiskpolicy.so") standalone_policy = True except: pass extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskinit", "magisk") if standalone_policy: extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskpolicy.so", "magiskpolicy", "magisk") else: extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskpolicy", "magisk") extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskboot.so", "magiskboot", "magisk") extract_as(zip, f"lib/{ abi_map[arch][0] }/libbusybox.so", "busybox", "magisk") if standalone_policy: extract_as(zip, f"lib/{ abi_map['x64'][0] }/libmagiskpolicy.so", "magiskpolicy", ".") else: extract_as(zip, f"lib/{ abi_map['x64'][0] }/libmagiskinit.so", "magiskpolicy", ".") extract_as(zip, f"assets/boot_patch.sh", "boot_patch.sh", "magisk") extract_as(zip, f"assets/util_functions.sh", "util_functions.sh", "magisk") - name: Download OpenGApps if: ${{ github.event.inputs.gapps_variant != 'none' && github.event.inputs.gapps_variant != '' }} shell: python run: | import requests import zipfile import os import urllib.request import json import re arch = "${{ matrix.arch }}" variant = "${{ github.event.inputs.gapps_variant }}" abi_map = {"x64" : "x86_64", "arm64": "arm64"} try: res = requests.get(f"https://api.opengapps.org/list") j = json.loads(res.content) link = {i["name"]: i for i in j["archs"][abi_map[arch]]["apis"]["11.0"]["variants"]}[variant]["zip"] except Exception: print("Failed to fetch from opengapps api, fallbacking to sourceforge rss...") res = requests.get(f'https://sourceforge.net/projects/opengapps/rss?path=/{abi_map[arch]}&limit=100') link = re.search(f'https://.*{abi_map[arch]}/.*{variant}.*\.zip/download', res.text).group().replace('.zip/download', '.zip').replace('sourceforge.net/projects/opengapps/files', 'downloads.sourceforge.net/project/opengapps') print(f"downloading link: {link}", flush=True) out_file = "gapps.zip" if not os.path.isfile(out_file): urllib.request.urlretrieve(link, out_file) print("done", flush=True) - name: Extract GApps and expand images if: ${{ github.event.inputs.gapps_variant != 'none' && github.event.inputs.gapps_variant != '' }} run: | mkdir gapps unzip -p gapps.zip {Core,GApps}/'*.lz' | tar --lzip -C gapps -xvf - -i --strip-components=2 --exclude='setupwizardtablet-x86_64' --exclude='packageinstallergoogle-all' --exclude='speech-common' --exclude='markup-lib-arm' --exclude='markup-lib-arm64' --exclude='markup-all' --exclude='setupwizarddefault-x86_64' --exclude='pixellauncher-all' --exclude='pixellauncher-common' e2fsck -yf ${{ matrix.arch }}/system.img resize2fs ${{ matrix.arch }}/system.img $(( $(du -sB512 gapps | cut -f1) + $(du -sB512 ${{ matrix.arch }}/system.img | cut -f1) ))s e2fsck -yf ${{ matrix.arch }}/product.img resize2fs ${{ matrix.arch }}/product.img 1024M e2fsck -yf ${{ matrix.arch }}/system_ext.img resize2fs ${{ matrix.arch }}/system_ext.img 108M - name: Expand vendor run: | e2fsck -yf ${{ matrix.arch }}/vendor.img resize2fs ${{ matrix.arch }}/vendor.img 320M - name: Mount images run: | sudo mkdir system sudo mkdir userdata sudo mount -o loop ${{ matrix.arch }}/system.img system sudo mount -o loop ${{ matrix.arch }}/vendor.img system/vendor sudo mount -o loop ${{ matrix.arch }}/product.img system/product sudo mount -o loop ${{ matrix.arch }}/system_ext.img system/system_ext qemu-img convert -O raw ${{ matrix.arch }}/userdata.vhdx userdata.img sudo mount -o loop userdata.img userdata - name: Integrate Magisk if: ${{ github.event.inputs.root_sol == 'magisk' || github.event.inputs.root_sol == '' }} run: | sudo mkdir system/sbin sudo chcon --reference system/init.environ.rc system/sbin sudo chown root:root system/sbin sudo chmod 0700 system/sbin sudo cp magisk/* system/sbin/ sudo mkdir -p userdata/adb/magisk sudo chmod -R 700 userdata/adb sudo cp magisk/* userdata/adb/magisk/ sudo find userdata/adb/magisk -type f -exec chmod 0755 {} \; sudo cp magisk.zip userdata/adb/magisk/magisk.apk sudo tee -a system/sbin/loadpolicy.sh <<EOF #!/system/bin/sh restorecon -R /data/adb/magisk for module in \$(ls /data/adb/modules); do if ! [ -f "/data/adb/modules/\$module/disable" ] && [ -f "/data/adb/modules/\$module/sepolicy.rule" ]; then /sbin/magiskpolicy --live --apply "/data/adb/modules/\$module/sepolicy.rule" fi done EOF sudo find system/sbin -type f -exec chmod 0755 {} \; sudo find system/sbin -type f -exec chown root:root {} \; sudo find system/sbin -type f -exec chcon --reference system/product {} \; sudo patchelf --replace-needed libc.so "${HOME}/libc.so" ./magiskpolicy || true sudo patchelf --replace-needed libm.so "${HOME}/libm.so" ./magiskpolicy || true sudo patchelf --replace-needed libdl.so "${HOME}/libdl.so" ./magiskpolicy || true sudo patchelf --set-interpreter "${HOME}/linker64" ./magiskpolicy || true chmod +x ./magiskpolicy echo '/dev/wsa-magisk(/.*)? u:object_r:magisk_file:s0' | sudo tee -a system/vendor/etc/selinux/vendor_file_contexts echo '/data/adb/magisk(/.*)? u:object_r:magisk_file:s0' | sudo tee -a system/vendor/etc/selinux/vendor_file_contexts sudo ./magiskpolicy --load system/vendor/etc/selinux/precompiled_sepolicy --save system/vendor/etc/selinux/precompiled_sepolicy --magisk "allow * magisk_file lnk_file *" sudo tee -a system/system/etc/init/hw/init.rc <<EOF on post-fs-data start logd start adbd mkdir /dev/wsa-magisk mount tmpfs tmpfs /dev/wsa-magisk mode=0755 copy /sbin/magisk64 /dev/wsa-magisk/magisk64 chmod 0755 /dev/wsa-magisk/magisk64 symlink ./magisk64 /dev/wsa-magisk/magisk symlink ./magisk64 /dev/wsa-magisk/su symlink ./magisk64 /dev/wsa-magisk/resetprop copy /sbin/magisk32 /dev/wsa-magisk/magisk32 chmod 0755 /dev/wsa-magisk/magisk32 copy /sbin/magiskinit /dev/wsa-magisk/magiskinit chmod 0755 /dev/wsa-magisk/magiskinit copy /sbin/magiskpolicy /dev/wsa-magisk/magiskpolicy chmod 0755 /dev/wsa-magisk/magiskpolicy mkdir /dev/wsa-magisk/.magisk 700 mkdir /dev/wsa-magisk/.magisk/mirror 700 mkdir /dev/wsa-magisk/.magisk/block 700 rm /dev/.magisk_unblock start IhhslLhHYfse start FAhW7H9G5sf wait /dev/.magisk_unblock 40 rm /dev/.magisk_unblock service IhhslLhHYfse /system/bin/sh /sbin/loadpolicy.sh user root seclabel u:r:magisk:s0 oneshot service FAhW7H9G5sf /dev/wsa-magisk/magisk --post-fs-data user root seclabel u:r:magisk:s0 oneshot service HLiFsR1HtIXVN6 /dev/wsa-magisk/magisk --service class late_start user root seclabel u:r:magisk:s0 oneshot on property:sys.boot_completed=1 start YqCTLTppv3ML service YqCTLTppv3ML /dev/wsa-magisk/magisk --boot-complete user root seclabel u:r:magisk:s0 oneshot EOF - name: Merge Language Resources run: | cp ${{ matrix.arch }}/resources.pri pri/en-us.pri cp ${{ matrix.arch }}/AppxManifest.xml xml/en-us.xml tee priconfig.xml <<EOF <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <resources targetOsVersion="10.0.0" majorVersion="1"> <index root="\" startIndexAt="\"> <indexer-config type="folder" foldernameAsQualifier="true" filenameAsQualifier="true" qualifierDelimiter="."/> <indexer-config type="PRI"/> </index> </resources> EOF wine64 ~/makepri.exe new /pr pri /in MicrosoftCorporationII.WindowsSubsystemForAndroid /cf priconfig.xml /of ${{ matrix.arch }}/resources.pri /o sed -i -zE "s/<Resources.*Resources>/<Resources>\n$(cat xml/* | grep -Po '<Resource [^>]*/>' | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/\$/\\$/g' | sed 's/\//\\\//g')\n<\/Resources>/g" ${{ matrix.arch }}/AppxManifest.xml - name: Add extra packages and Filtered internet CAs run: | wget -qO- "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_REF.tar.gz" | sudo tar --wildcards -zxvf- --strip-component=2 '*/${{ matrix.arch }}/system/*' sudo find system/system/priv-app -type d -exec chmod 0755 {} \; sudo find system/system/priv-app -type f -exec chmod 0644 {} \; sudo find system/system/priv-app -exec chcon --reference=system/system/priv-app {} \; sudo find system/system/etc/security/cacerts -type d -exec chmod 0755 {} \; sudo find system/system/etc/security/cacerts -type f -exec chmod 0644 {} \; sudo find system/system/etc/security/cacerts -exec chcon --reference=system/system/etc/security/cacerts {} \; - name: Integrate GApps if: ${{ github.event.inputs.gapps_variant != 'none' && github.event.inputs.gapps_variant != '' }} run: | wget -qO- "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/archive/$GITHUB_REF.tar.gz" | sudo tar --wildcards -zxvf- --strip-component=2 '*/${{ matrix.arch }}/gapps/*' shopt -s extglob sudo cp -vr gapps/!(product) system/system sudo cp -vr gapps/product/* system/product/ sudo find system/system/{app,etc,framework,priv-app} -exec chown root:root {} \; sudo find system/product/{app,etc,overlay,priv-app} -exec chown root:root {} \; sudo find system/system/{app,etc,framework,priv-app} -type d -exec chmod 0755 {} \; sudo find system/product/{app,etc,overlay,priv-app} -type d -exec chmod 0755 {} \; sudo find system/system/{app,framework,priv-app} -type f -exec chmod 0644 {} \; ls gapps/etc/ | xargs -n 1 -I dir sudo find system/system/etc/dir -type f -exec chmod 0644 {} \; sudo find system/product/{app,etc,overlay,priv-app} -type f -exec chmod 0644 {} \; sudo find system/system/{app,framework,priv-app} -type d -exec chcon --reference=system/system/app {} \; sudo find system/product/{app,etc,overlay,priv-app} -type d -exec chcon --reference=system/product/app {} \; ls gapps/etc/ | xargs -n 1 -I dir sudo find system/system/etc/dir -type d -exec chcon --reference=system/system/etc/permissions {} \; sudo find system/system/{app,framework,priv-app} -type f -exec chcon --reference=system/system/framework/ext.jar {} \; ls gapps/etc/ | xargs -n 1 -I dir sudo find system/system/etc/dir -type f -exec chcon --reference=system/system/etc/permissions {} \; sudo find system/product/{app,etc,overlay,priv-app} -type f -exec chcon --reference=system/product/etc/permissions/privapp-permissions-venezia.xml {} \; sudo patchelf --replace-needed libc.so "${HOME}/libc.so" ./magiskpolicy || true sudo patchelf --replace-needed libm.so "${HOME}/libm.so" ./magiskpolicy || true sudo patchelf --replace-needed libdl.so "${HOME}/libdl.so" ./magiskpolicy || true sudo patchelf --set-interpreter "${HOME}/linker64" ./magiskpolicy || true chmod +x ./magiskpolicy sudo ./magiskpolicy --load system/vendor/etc/selinux/precompiled_sepolicy --save system/vendor/etc/selinux/precompiled_sepolicy "allow gmscore_app gmscore_app vsock_socket { create connect write read }" "allow gmscore_app device_config_runtime_native_boot_prop file read" "allow gmscore_app system_server_tmpfs dir search" "allow gmscore_app system_server_tmpfs file open" - name: Fix GApps prop if: ${{ github.event.inputs.gapps_variant != 'none' && github.event.inputs.gapps_variant != '' }} shell: sudo python {0} run: | from __future__ import annotations from io import TextIOWrapper from os import system from typing import OrderedDict class Prop(OrderedDict): def __init__(self, file: TextIOWrapper) -> None: super().__init__() for i, line in enumerate(file.read().splitlines(False)): if '=' in line: k, v = line.split('=', 2) self[k] = v else: self[f".{i}"] = line def __str__(self) -> str: return '\n'.join([v if k.startswith('.') else f"{k}={v}" for k, v in self.items()]) def __iadd__(self, other: str) -> Prop: self[f".{len(self)}"] = other return self new_props = { ("product", "brand"): "google", ("product", "manufacturer"): "Google", ("build", "product"): "redfin", ("product", "name"): "redfin", ("product", "device"): "redfin", ("product", "model"): "Pixel 5", ("build", "flavor"): "redfin-user" } def description(sec: str, p: Prop) -> str: return f"{p[f'ro.{sec}.build.flavor']} {p[f'ro.{sec}.build.version.release_or_codename']} {p[f'ro.{sec}.build.id']} {p[f'ro.{sec}.build.version.incremental']} {p[f'ro.{sec}.build.tags']}" def fingerprint(sec: str, p: Prop) -> str: return f"""{p[f"ro.product.{sec}.brand"]}/{p[f"ro.product.{sec}.name"]}/{p[f"ro.product.{sec}.device"]}:{p[f"ro.{sec}.build.version.release"]}/{p[f"ro.{sec}.build.id"]}/{p[f"ro.{sec}.build.version.incremental"]}:{p[f"ro.{sec}.build.type"]}/{p[f"ro.{sec}.build.tags"]}""" def fix_prop(sec, prop): print(f"fixing {prop}", flush=True) with open(prop, 'r') as f: p = Prop(f) p += "# extra prop added by MagiskOnWSA" for k, v in new_props.items(): p[f"ro.{k[0]}.{k[1]}"] = v if k[0] == "build": p[f"ro.{sec}.{k[0]}.{k[1]}"] = v elif k[0] == "product": p[f"ro.{k[0]}.{sec}.{k[1]}"] = v p["ro.build.description"] = description(sec, p) p[f"ro.build.fingerprint"] = fingerprint(sec, p) p[f"ro.{sec}.build.description"] = description(sec, p) p[f"ro.{sec}.build.fingerprint"] = fingerprint(sec, p) p[f"ro.bootimage.build.fingerprint"] = fingerprint(sec, p) with open(prop, 'w') as f: f.write(str(p)) for sec, prop in {"system": "system/system/build.prop", "product": "system/product/build.prop", "system_ext": "system/system_ext/build.prop", "vendor": "system/vendor/build.prop", "odm": "system/vendor/odm/etc/build.prop"}.items(): fix_prop(sec, prop) - name: Umount images run: | sudo umount system/vendor sudo umount system/product sudo umount system/system_ext sudo umount system sudo umount userdata qemu-img convert -o subformat=dynamic -f raw -O vhdx userdata.img ${{ matrix.arch }}/userdata.vhdx - name: Shrink images run: | e2fsck -yf ${{ matrix.arch }}/system.img resize2fs -M ${{ matrix.arch }}/system.img e2fsck -yf ${{ matrix.arch }}/vendor.img resize2fs -M ${{ matrix.arch }}/vendor.img e2fsck -yf ${{ matrix.arch }}/product.img resize2fs -M ${{ matrix.arch }}/product.img e2fsck -yf ${{ matrix.arch }}/system_ext.img resize2fs -M ${{ matrix.arch }}/system_ext.img - name: Remove signature and add scripts run: | rm -rf ${{ matrix.arch }}/\[Content_Types\].xml ${{ matrix.arch }}/AppxBlockMap.xml ${{ matrix.arch }}/AppxSignature.p7x ${{ matrix.arch }}/AppxMetadata cp vclibs.appx xaml.appx ${{ matrix.arch }} tee ${{ matrix.arch }}/Install.ps1 <<EOF # Automated Install script by Mioki # http://github.com/okibcn function Test-Administrator { [OutputType([bool])] param() process { [Security.Principal.WindowsPrincipal]\$user = [Security.Principal.WindowsIdentity]::GetCurrent(); return \$user.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator); } } function Finish { Clear-Host Start-Process "wsa://com.topjohnwu.magisk" Start-Process "wsa://com.android.vending" } if (-not (Test-Administrator)) { \$proc = Start-Process -PassThru -WindowStyle Hidden -Verb RunAs powershell.exe -Args "-executionpolicy bypass -command Set-Location '\$PSScriptRoot'; &'\$PSCommandPath' EVAL" \$proc.WaitForExit() if (\$proc.ExitCode -ne 0) { Clear-Host Write-Warning "Failed to launch start as Administrator\`r\`nPress any key to exit" \$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown'); } exit } elseif ((\$args.Count -eq 1) -and (\$args[0] -eq "EVAL")) { Start-Process powershell.exe -Args "-executionpolicy bypass -command Set-Location '\$PSScriptRoot'; &'\$PSCommandPath'" exit } if (((Test-Path -Path $(ls -Q ./${{ matrix.arch }} | paste -sd "," -)) -eq \$false).Count) { Write-Error "Some files are missing in the zip. Please try to download it again from the browser downloader, or try to run the workflow again. Press any key to exist" \$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') exit 1 } reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock" /t REG_DWORD /f /v "AllowDevelopmentWithoutDevLicense" /d "1" \$VMP = Get-WindowsOptionalFeature -Online -FeatureName 'VirtualMachinePlatform' if (\$VMP.State -ne "Enabled") { Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName 'VirtualMachinePlatform' Clear-Host Write-Warning "Need restart to enable virtual machine platform\`r\`nPress y to restart or press any key to exit" \$key = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') If ("y" -eq \$key.Character) { Restart-Computer -Confirm } Else { exit 1 } } Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Path vclibs.appx Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Path xaml.appx \$Installed = \$null \$Installed = Get-AppxPackage -Name 'MicrosoftCorporationII.WindowsSubsystemForAndroid' If ((\$null -ne \$Installed) -and (-not (\$Installed.IsDevelopmentMode))) { Clear-Host Write-Warning "There is already one installed WSA. Please uninstall it first.\`r\`nPress y to uninstall existing WSA or press any key to exit" \$key = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') If ("y" -eq \$key.Character) { Remove-AppxPackage -Package \$Installed.PackageFullName } Else { exit 1 } } Clear-Host Write-Host "Installing MagiskOnWSA..." Stop-Process -Name "wsaclient" -ErrorAction "silentlycontinue" Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml if (\$?) { Finish } Elseif (\$null -ne \$Installed) { Clear-Host Write-Host "Failed to update, try to uninstall existing installation while preserving userdata..." Remove-AppxPackage -PreserveApplicationData -Package \$Installed.PackageFullName Add-AppxPackage -ForceApplicationShutdown -ForceUpdateFromAnyVersion -Register .\AppxManifest.xml if (\$?) { Finish } } Write-Host "All Done\`r\`nPress any key to exit" \$null = \$Host.UI.RawUI.ReadKey('NoEcho,IncludeKeyDown') EOF - name: Generate artifact name run: | variant="${{ github.event.inputs.gapps_variant }}" root="${{ github.event.inputs.root_sol }}" if [[ "$root" = "none" ]]; then name1="" elif [[ "$root" = "" ]]; then name1="-with-magisk" else name1="-with-${root}" fi if [[ "$variant" = "none" || "$variant" = "" ]]; then name2="-NoGApps" else name2="-GApps-${variant}" fi echo "artifact_name=WSA-Filtered-internet${name1}${name2}_${{ env.WSA_VER }}_${{ matrix.arch }}_${{ env.WSA_REL }}" >> $GITHUB_ENV - name: Upload WSA uses: actions/upload-artifact@v2 with: name: ${{ env.artifact_name }} path: "./${{ matrix.arch }}/*"
-
בעיה נמצאה
היה בעיה בהזחה
כלומר הוא הוזח בליטה אחת פחות
החזרתי למקום ונראה שהכל עובד