Files
DroidDeck/tools/components/recipes.json
Kurt Himebauch 2848484a99 feat: fuck proot and proots mama (#2300)
* feat: experimental native userland that runs the Linux side without proot

* fix(native): keep the visible name of link2symlink binaries

* fix(ci): run the native hook build through bash

* fix(native): address review findings in the hook and the ctl fallback

* fix(ctl): use the broadcast fallback only when content is missing

* fix(native): survive Android's seccomp filter in ld.so, libc and posix_spawn children

* docs(native): how to test under Android's seccomp filter

* fix(session): hide an unlistable /sys/bus/pci/devices so libpci does not abort Chromium's GPU init

* fix(native): nested syscall() redirects no longer loop with libblsession's openat2

* fix(native): controllers reach Steam and the install-script evaluator no longer blocks game moves

* fix(native): write the hook's NUL character literals as escapes

* fix(native): proot fast path turns off and greys out while running without proot

* fix(native): D-Bus logins work and Xwayland still admits root once peers read as root

* fix(native): scripts on session mounts outside the rootfs run with the rootfs shell

* fix(native): games on the SD card library start in their own folder

* fix(native): Wine drive links proot made point at their real places

* fix(native): at-calls, uid lookups and relative programs follow the session's mounts

* fix(native): close-from in spawned programs covers what is open at the spawn

* fix(native): service names resolve and the DNS fallback answers what was asked

* build(native): the hook is built with its Go support and tracked by the preload recipe

* fix(native): drive links into identity mounts stay, and relink and seccomp patch failures are logged

* fix(native): seccomp-sim's filter holds every allowed call

* fix(ctl): the broadcast fallback only stands in for a missing content command

* fix(native): pre-2.33 glibc stat calls present owners as root too

* fix(native): res_init and res_ninit call glibc, so Steam's store resolves names

* fix(ci): a preload lock older than a new output rebuilds that group, and generated headers are not hashed

* fix(native): a second seccomp patch run leaves other system calls alone

* fix(native): the terminal and bottom desktop keep proot's environment in a native session

* fix(native): any number of session mounts, and openat2 relative to a mounted folder

* fix(agent): a native command's stdin is written beside its timeout

* fix(ctl): native rejects --env without = and timeouts outside 0-600 s

* fix(native): the resolver fallback has the network's IPv6 servers, and lookups keep the fallback's validation errors

* fix(native): a spawn whose dup2 source close-from closed fails with EBADF

* fix(native): __getcwd_chk checks its buffer, and seccomp-sim -a takes only call numbers

* feat(native): guests see the session hostname from uname and gethostname

* feat(native): the terminal and bottom desktop run without proot

* fix(components): an origin APK without a newer preload output still proves the rest

* fix(native): seccomp-sim -a rejects empty fields

* fix(native): gethostbyname no longer answers failed lookups with Ubuntu and Debian addresses

* feat(native): store installers, root helpers, Comet and Xodus run without proot

* fix(native): the hook finds libraries, preloads and itself through a sandbox's mounts, and ldconfig -C makes its cache

* feat(native): Flatpak sandboxes run without proot, and apply_extra runs without a runtime

* fix(native): remove, glob and nftw take guest paths, and links in a mount are followed as the guest sees them

* fix(native): Flatpak sandboxes get the session's mounts, their libraries' RUNPATHs, and no rootfs-only settings

* fix(native): gethostbyname asks the network's DNS servers, nftw of / gives single slashes, and the library path fits mapped directories

* fix(native): a native process starts in its working directory's real place

* fix(native): the library path given to ld.so holds whole directories only

* fix(native): Wine drive links keep their guest paths, so proot finds the library after a native session

* fix(native): droiddeckctl native prepares the rootfs with the setting off

* fix(native): a SysV segment stays while any process has it attached

* fix(native): DNS lookups ask the network's own servers before public ones

* fix(native): a program's own seccomp traps reach its own SIGSYS handler

* feat(native): run native sessions under a device's own app seccomp filter for testing

* fix(native): SysV attaches and collection take a lock, a failed mark fails the attach, and collection closes its directory

* fix(native): shmat fails when it cannot take the segment lock

* fix(native): the SysV segment lock is retried when a signal interrupts it

* fix(native): process tools see the session's processes as root's

* fix(native): native processes are named after their program, not ld.so

* fix(native): a session's helpers keep the mode the session started in

* fix(native): a keyed SysV segment stays until IPC_RMID

* fix(native): a rootfs link to an absolute guest path is followed in the guest, so Wine finds its z: drive

* fix(native): a sandbox whose loader can't be patched runs under proot

* fix(native): creating a private SysV segment also collects stale ones

* fix(native): a session stopped during startup forgets its mode

* fix(xbox): a native backend is authorized by its process ancestry

* fix(native): Wine's drive links are followed in the guest from any prefix

* fix(native): only the startup that owns the running session publishes its mode

* fix(native): a SysV segment stays until IPC_RMID even after its maker ends

* fix(native): a sandbox mount nested in another mount gets its own place

* fix(native): a sandbox whose mount places can't be made runs under proot
2026-11-11 09:13:17 -05:00

267 lines
7.7 KiB
JSON

{
"runtime": {
"script": "tools/components/recipes/runtime.sh",
"inputs": [
"tools/components/recipes/runtime.sh",
"tools/quest",
"tools/linuxfs/overlay",
"tools/linuxfs/desktop",
"tools/linuxfs/licenses",
"tools/linuxfs/uruntime.env",
"tools/gamescope/release.env",
"tools/wlroots/release.env",
"tools/mangoapp",
"tools/msitools",
"tools/pipewire",
"tools/vr",
"tools/gpuload",
"app/src/main/cpp/waylandcomp/generated",
"app/src/main/cpp/waylandcomp/src/headpose_shm.h",
"app/src/main/cpp/waylandcomp/src/spatialpose_shm.h",
"app/src/main/cpp/venc/venc_proto.h"
],
"outputs": [
"app/src/main/assets/linuxfs/usr/local/bin/gamescope",
"app/src/main/assets/linuxfs/usr/local/lib/droiddeck-vr/droiddeck/bin/linuxarm64/driver_droiddeck.so",
"app/src/main/assets/linuxfs/usr/local/lib/droiddeck-gpuload/libVkLayer_droiddeck_gpuload.so",
"app/src/main/assets/linuxfs/usr/local/lib/droiddeck-gpuload/libVkLayer_droiddeck_vramcap.so"
],
"ndk": true,
"packages": [
"gcc-aarch64-linux-gnu",
"g++-aarch64-linux-gnu",
"libvulkan1",
"mesa-vulkan-drivers"
]
},
"esync": {
"script": "tools/components/recipes/esync.sh",
"inputs": [
"tools/components/recipes/esync.sh",
"tools/droiddeck-esync/release.env"
],
"outputs": [
"app/src/main/assets/droiddeck-esync/index.json",
"app/src/main/assets/droiddeck-esync/index.json.sig"
]
},
"debian-image": {
"script": "tools/components/recipes/debian-image.sh",
"inputs": [
"tools/components/recipes/debian-image.sh"
],
"outputs": []
},
"x86-preloads": {
"script": "tools/components/recipes/x86-preloads.sh",
"inputs": [
"tools/components/recipes/x86-preloads.sh",
"tools/linuxfs/build-x86-preloads.sh",
"tools/linuxfs/preload",
"tools/linuxfs/fex"
],
"outputs": [
"app/src/main/assets/linuxfs/x86_64/libfakeinput.so",
"app/src/main/assets/linuxfs/x86_64/libblsession.so",
"app/src/main/assets/linuxfs/x86_64/libfaultreport.so",
"app/src/main/assets/linuxfs/i386/libfakeinput.so",
"app/src/main/assets/linuxfs/i386/libblsession.so",
"app/src/main/assets/linuxfs/i386/libfaultreport.so",
"app/src/main/assets/linuxfs/x86_64/libwebkitinput.so",
"app/src/main/assets/linuxfs/x86_64/libvulkan-thunk.so"
],
"source_inputs": [
"app/src/main/cpp/fakeinput_steam.cpp",
"app/src/main/cpp/adrenotools/src/hook/kgsl.h",
"app/src/main/cpp/venc/venc_proto.h",
"tools/linuxfs/preload",
"tools/quest/kgsl_compat.c",
"tools/quest/kgsl_compat.h",
"tools/linuxfs/fex",
"tools/linuxfs/build-x86-preloads.sh",
"tools/linuxfs/debian-image.env"
],
"snapshot_outputs": [
"x86_64/libfakeinput.so",
"x86_64/libblsession.so",
"x86_64/libfaultreport.so",
"i386/libfakeinput.so",
"i386/libblsession.so",
"i386/libfaultreport.so",
"x86_64/libwebkitinput.so",
"x86_64/libvulkan-thunk.so"
]
},
"pulseaudio-source": {
"script": "tools/components/recipes/pulseaudio-source.sh",
"inputs": [
"tools/components/recipes/pulseaudio-source.sh"
],
"outputs": [
"pa13/src/pulsecore/module.h"
],
"source": {
"url": "https://github.com/pulseaudio/pulseaudio/archive/refs/tags/v13.0.tar.gz",
"sha256": "bd7980bc9bd44bd3b3363545dabd19476ebf4d6bb6d2527e7d179256394a6758"
}
},
"directaudio": {
"script": "tools/components/recipes/directaudio.sh",
"inputs": [
"tools/components/recipes/directaudio.sh",
"tools/directaudio"
],
"outputs": [
"app/src/main/jniLibs/arm64-v8a/libdirectaudiorelay.so"
],
"ndk": true
},
"audio": {
"script": "tools/components/recipes/audio.sh",
"inputs": [
"tools/aaudio-sink",
"tools/directaudio",
"tools/components/recipes/audio.sh",
"app/src/main/assets/pulseaudio.tzst"
],
"outputs": [
"app/build/prepared-assets/pulseaudio.tzst"
],
"ndk": true
},
"proot": {
"script": "tools/components/recipes/proot.sh",
"inputs": [
"tools/proot",
"tools/components/recipes/proot.sh"
],
"outputs": [
"app/src/main/jniLibs/arm64-v8a/libproot.so",
"app/src/main/jniLibs/arm64-v8a/libproot-loader.so"
],
"packages": [
"gawk"
],
"ndk": true
},
"comet": {
"script": "tools/components/recipes/comet.sh",
"inputs": [
"tools/comet",
"tools/components/recipes/comet.sh"
],
"outputs": [
"app/src/main/assets/linuxfs/usr/local/lib/droiddeck-comet/comet",
"app/src/main/assets/linuxfs/usr/local/lib/droiddeck-comet/version"
],
"packages": [
"gcc-aarch64-linux-gnu"
]
},
"arm64-preloads": {
"script": "tools/components/recipes/arm64-preloads.sh",
"inputs": [
"tools/components/build-arm64-preloads.sh",
"tools/linuxfs/preload",
"app/src/main/cpp/fakeinput_steam.cpp",
"tools/components/recipes/arm64-preloads.sh",
"tools/nativeguest"
],
"outputs": [
"app/src/main/assets/linuxfs/libfakeinput.so",
"app/src/main/assets/linuxfs/libblsession.so",
"app/src/main/assets/linuxfs/libblfastpath.so",
"app/src/main/assets/linuxfs/libblaudit.so",
"app/src/main/assets/linuxfs/libssbs.so",
"app/src/main/assets/linuxfs/usr/local/bin/droiddeck-clipboard",
"app/src/main/assets/linuxfs/libddnatv-hook.so"
],
"packages": [
"gcc-aarch64-linux-gnu",
"g++-aarch64-linux-gnu"
],
"source_inputs": [
"app/src/main/cpp/fakeinput_steam.cpp",
"app/src/main/cpp/adrenotools/src/hook/kgsl.h",
"app/src/main/cpp/venc/venc_proto.h",
"tools/linuxfs/preload",
"tools/quest/kgsl_compat.c",
"tools/quest/kgsl_compat.h",
"tools/proot/fastpath",
"tools/linuxfs/ssbs",
"tools/linuxfs/clipboard",
"tools/nativeguest"
],
"snapshot_outputs": [
"libfakeinput.so",
"libblsession.so",
"libblfastpath.so",
"libblaudit.so",
"libssbs.so",
"usr/local/bin/droiddeck-clipboard",
"libddnatv-hook.so"
]
},
"preload-snapshot": {
"command": [
"python3",
"tools/components/preloads.py",
"restore"
],
"inputs": [
"tools/components/preloads.py",
"tools/components/preloads.lock.json"
],
"outputs": []
},
"xbox": {
"script": "tools/components/recipes/xbox.sh",
"inputs": [
"tools/xbox",
"tools/components/recipes/xbox.sh"
],
"outputs": [
"app/src/main/assets/linuxfs/usr/local/lib/droiddeck-xbox/xodus-cli",
"app/src/main/assets/linuxfs/usr/local/lib/droiddeck-xbox/xodus-service"
],
"packages": [
"build-essential",
"pkg-config",
"libssl-dev",
"protobuf-compiler",
"cmake",
"xz-utils"
]
},
"vkbridge": {
"script": "tools/components/recipes/vkbridge.sh",
"inputs": [
"external/MaliBridge",
"tools/components/recipes/vkbridge.sh"
],
"outputs": [
"app/src/main/assets/linuxfs/usr/local/lib/vkbridge/libvulkan_droidbridge.so",
"app/src/main/assets/linuxfs/usr/local/share/vkbridge/droidbridge_icd.json",
"app/src/main/assets/linuxfs/usr/local/bin/droiddeck-vkbridge-smoke"
],
"packages": [
"gcc-aarch64-linux-gnu"
]
},
"dirt-ws2": {
"script": "tools/components/recipes/dirt-ws2.sh",
"inputs": [
"tools/dirt-ws2",
"tools/components/recipes/dirt-ws2.sh"
],
"outputs": [
"app/src/main/assets/linuxfs/usr/local/lib/droiddeck-dirt/ws2_32.dll"
],
"packages": [
"clang",
"lld",
"llvm"
]
}
}