Initial commit

This commit is contained in:
LoveSy 2021-10-26 17:16:38 +08:00
parent 9209f83ed2
commit 9789c3f69c
2 changed files with 181 additions and 0 deletions

167
.github/workflows/magisk.yml vendored Normal file
View File

@ -0,0 +1,167 @@
name: Magisk
on:
workflow_dispatch:
inputs:
magisk_apk:
description: 'Download link to magisk apk.'
required: true
arch:
description: 'Architecture to build. Should be x64 or arm64.'
required: true
default: 'x64'
jobs:
build:
runs-on: ubuntu-20.04
steps:
- name: Dependencies
run: |
pip3 install beautifulsoup4 lxml
sudo apt-get update && sudo apt-get install setools
- name: Download AWS
shell: python
run: |
import requests
from bs4 import BeautifulSoup
import re
import zipfile
import os
import urllib.request
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("MicrosoftCorporationII\.WindowsSubsystemForAndroid_.*\.msixbundle"))
link = a["href"]
print(f"downloading link: {link}", flush=True)
out_file = "wsa.zip"
arch = "${{ github.event.inputs.arch }}"
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 f.filename.__contains__(arch):
zip_name = f.filename
if not os.path.isfile(zip_name):
print(f"unzipping to {zip_name}", flush=True)
zip.extract(f)
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
magisk_apk = """${{ github.event.inputs.magisk_apk }}"""
out_file = "magisk.zip"
arch = "${{ github.event.inputs.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")
extract_as(zip, f"lib/{ abi_map[arch][0] }/libmagiskinit.so", "magiskinit", "magisk")
- name: Expand images
run: |
e2fsck -yf ${{ github.event.inputs.arch }}/vendor.img
resize2fs ${{ github.event.inputs.arch }}/vendor.img 320M
- name: Mount images
run: |
sudo mkdir system
sudo mount -o loop ${{ github.event.inputs.arch }}/system.img system
sudo mount -o loop ${{ github.event.inputs.arch }}/vendor.img system/vendor
- name: Modify images
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 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 {} \;
ln -s magiskinit magisk/magiskpolicy
chmod +x magisk/magiskpolicy
echo '/dev/wsa-magisk(/.*)? u:object_r:magisk_file:s0' | sudo tee -a system/vendor/etc/selinux/vendor_file_contexts
sudo ./magisk/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
symlink ./magiskinit /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 FAhW7H9G5sf
wait /dev/.magisk_unblock 10
rm /dev/.magisk_unblock
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: Umount images
run: |
sudo umount system/vendor
sudo umount system
- name: Remove signature
run: |
rm -rf ${{ github.event.inputs.arch }}/\[Content_Types\].xml ${{ github.event.inputs.arch }}/AppxBlockMap.xml ${{ github.event.inputs.arch }}/AppxSignature.p7x ${{ github.event.inputs.arch }}/AppxMetadata
- name: Upload WSA
uses: actions/upload-artifact@v2
with:
name: WSA-with-Magisk
path: './${{ github.event.inputs.arch }}/*'

14
README.md Normal file
View File

@ -0,0 +1,14 @@
## Magisk on WSA
### Usage
1. Fork this repo
1. Go to Action tab and select workflow `Magisk`, click the run button and enter the needed infomation (architecture and magisk apk download link)
1. Wait the action complete and download the artifact
1. Uninstall WSA
1. Unzip the artifact
1. Enable deveop mode on Windows
1. Open powershell with admin permission and run `Add-AppxPackage -Register .\AppxManifest.xml` under the unzipped artifact directory
1. Launch WSA and enable develop mode, launch the file manager, and wait until the file manager popup
1. `adb connect localhost:58526` to connect` to connect to WSA and install Magisk canary app (23010) (the attached magisk.apk) and launch it
1. Fix the environment as Magisk app will prompt and reboot
1. Enjoy by installing Riru and LSPosed