commit: 09e83652920c6db7d912f6cbbd3636ceb2e0e458 Author: Denis Reva <denis7774 <AT> gmail <DOT> com> AuthorDate: Sat Jan 11 09:25:20 2025 +0000 Commit: David Roman <davidroman96 <AT> gmail <DOT> com> CommitDate: Sat Jan 11 09:35:31 2025 +0000 URL: https://gitweb.gentoo.org/repo/proj/guru.git/commit/?id=09e83652
app-containers/waydroid: add -r1, which fixes bugs Also fixed a bug (via patch from upstream) with intel haswell vulkan api Closes: https://bugs.gentoo.org/947280 Signed-off-by: Denis Reva <denis7774 <AT> gmail.com> .../waydroid/files/waydroid-1.4.3-r1.patch | 174 +++++++++++++++++++++ app-containers/waydroid/waydroid-1.4.3-r1.ebuild | 117 ++++++++++++++ 2 files changed, 291 insertions(+) diff --git a/app-containers/waydroid/files/waydroid-1.4.3-r1.patch b/app-containers/waydroid/files/waydroid-1.4.3-r1.patch new file mode 100644 index 000000000..1bfa0b99c --- /dev/null +++ b/app-containers/waydroid/files/waydroid-1.4.3-r1.patch @@ -0,0 +1,174 @@ +From c9ea5abff749e660c9aca0fcd224875464c3dacd Mon Sep 17 00:00:00 2001 +From: Alessandro Astone <ales.ast...@gmail.com> +Date: Sat, 10 Aug 2024 16:10:14 +0200 +Subject: [PATCH 1/3] debian: Use new polkitd package + +Prefer the new polkitd name but keep supporting policykit-1 for +older distros + +Fixes: #1484 +--- + debian/control | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/debian/control b/debian/control +index 2b63f56b..8f0dfa42 100644 +--- a/debian/control ++++ b/debian/control +@@ -20,7 +20,7 @@ Depends: ${misc:Depends}, + gir1.2-gtk-3.0, + python3-dbus, + dbus, +- policykit-1, ++ polkitd | policykit-1, + iptables + Description: Androidâ„¢ application support + waydroid allows running a separate Androidâ„¢ environment + +From 5000c9703de873e4f477ebcdd3556ad163252115 Mon Sep 17 00:00:00 2001 +From: Alessandro Astone <ales.ast...@gmail.com> +Date: Wed, 4 Sep 2024 23:27:58 +0200 +Subject: [PATCH 2/3] initializer: Refactor setup to better handle preinstalled + images + +Bail out early when using preinstalled images. +There's no reason to attempt fetching the OTA channels if we're +going to use preinstalled images. + +Fixes: #1550 +--- + tools/actions/initializer.py | 52 ++++++++++++++++++++---------------- + 1 file changed, 29 insertions(+), 23 deletions(-) + +diff --git a/tools/actions/initializer.py b/tools/actions/initializer.py +index 8f6c2c3b..87250971 100644 +--- a/tools/actions/initializer.py ++++ b/tools/actions/initializer.py +@@ -35,20 +35,37 @@ def setup_config(args): + args.arch = helpers.arch.host() + cfg["waydroid"]["arch"] = args.arch + ++ args.vendor_type = get_vendor_type(args) ++ cfg["waydroid"]["vendor_type"] = args.vendor_type ++ ++ helpers.drivers.setupBinderNodes(args) ++ cfg["waydroid"]["binder"] = args.BINDER_DRIVER ++ cfg["waydroid"]["vndbinder"] = args.VNDBINDER_DRIVER ++ cfg["waydroid"]["hwbinder"] = args.HWBINDER_DRIVER ++ ++ has_preinstalled_images = False + preinstalled_images_paths = tools.config.defaults["preinstalled_images_paths"] +- if not args.images_path: +- for preinstalled_images in preinstalled_images_paths: +- if os.path.isdir(preinstalled_images): +- if os.path.isfile(preinstalled_images + "/system.img") and os.path.isfile(preinstalled_images + "/vendor.img"): +- args.images_path = preinstalled_images +- break +- else: +- logging.warning("Found directory {} but missing system or vendor image, ignoring...".format(preinstalled_images)) ++ for preinstalled_images in preinstalled_images_paths: ++ if os.path.isdir(preinstalled_images): ++ if os.path.isfile(preinstalled_images + "/system.img") and os.path.isfile(preinstalled_images + "/vendor.img"): ++ has_preinstalled_images = True ++ args.images_path = preinstalled_images ++ break ++ else: ++ logging.warning("Found directory {} but missing system or vendor image, ignoring...".format(preinstalled_images)) + + if not args.images_path: + args.images_path = tools.config.defaults["images_path"] + cfg["waydroid"]["images_path"] = args.images_path + ++ if has_preinstalled_images: ++ cfg["waydroid"]["system_ota"] = args.system_ota = "None" ++ cfg["waydroid"]["vendor_ota"] = args.vendor_ota = "None" ++ cfg["waydroid"]["system_datetime"] = tools.config.defaults["system_datetime"] ++ cfg["waydroid"]["vendor_datetime"] = tools.config.defaults["vendor_datetime"] ++ tools.config.save(args, cfg) ++ return True ++ + channels_cfg = tools.config.load_channels() + if not args.system_channel: + args.system_channel = channels_cfg["channels"]["system_channel"] +@@ -67,11 +84,8 @@ def setup_config(args): + "/waydroid_" + args.arch + "/" + args.system_type + ".json" + system_request = helpers.http.retrieve(args.system_ota) + if system_request[0] != 200: +- if args.images_path not in preinstalled_images_paths: +- raise ValueError( +- "Failed to get system OTA channel: {}, error: {}".format(args.system_ota, system_request[0])) +- else: +- args.system_ota = "None" ++ raise ValueError( ++ "Failed to get system OTA channel: {}, error: {}".format(args.system_ota, system_request[0])) + + device_codename = helpers.props.host_get(args, "ro.product.device") + args.vendor_type = None +@@ -85,12 +99,8 @@ def setup_config(args): + break + + if not args.vendor_type: +- if args.images_path not in preinstalled_images_paths: +- raise ValueError( +- "Failed to get vendor OTA channel: {}".format(vendor_ota)) +- else: +- args.vendor_ota = "None" +- args.vendor_type = get_vendor_type(args) ++ raise ValueError( ++ "Failed to get vendor OTA channel: {}".format(vendor_ota)) + + if args.system_ota != cfg["waydroid"].get("system_ota"): + cfg["waydroid"]["system_datetime"] = tools.config.defaults["system_datetime"] +@@ -100,10 +110,6 @@ def setup_config(args): + cfg["waydroid"]["vendor_type"] = args.vendor_type + cfg["waydroid"]["system_ota"] = args.system_ota + cfg["waydroid"]["vendor_ota"] = args.vendor_ota +- helpers.drivers.setupBinderNodes(args) +- cfg["waydroid"]["binder"] = args.BINDER_DRIVER +- cfg["waydroid"]["vndbinder"] = args.VNDBINDER_DRIVER +- cfg["waydroid"]["hwbinder"] = args.HWBINDER_DRIVER + tools.config.save(args, cfg) + return True + + +From 023c4e31e06e2a31110a346516a841e68063d473 Mon Sep 17 00:00:00 2001 +From: Alessandro Astone <ales.ast...@gmail.com> +Date: Sat, 14 Dec 2024 16:40:05 +0100 +Subject: [PATCH 3/3] gpu: Use intel_hasvk on intel graphics gen 8 or lower + +Closes: #1604 +--- + tools/helpers/gpu.py | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/tools/helpers/gpu.py b/tools/helpers/gpu.py +index 55343d42..2a38cfe8 100644 +--- a/tools/helpers/gpu.py ++++ b/tools/helpers/gpu.py +@@ -4,6 +4,9 @@ + + unsupported = ["nvidia"] + ++def getMinor(args, dev): ++ return tools.helpers.props.file_get(args, "/sys/class/drm/{}/uevent".format(dev), "MINOR") ++ + def getKernelDriver(args, dev): + return tools.helpers.props.file_get(args, "/sys/class/drm/{}/device/uevent".format(dev), "DRIVER") + +@@ -32,6 +35,16 @@ def getVulkanDriver(args, dev): + "nouveau": "nouveau", + } + kernel_driver = getKernelDriver(args, dev) ++ ++ if kernel_driver == "i915": ++ try: ++ gen = tools.helpers.run.user(args,["awk", "/^graphics version:|^gen:/ {print $NF}", ++ "/sys/kernel/debug/dri/{}/i915_capabilities".format(getMinor(args, dev))], output_return=True) ++ if int(gen) < 9: ++ return "intel_hasvk" ++ except: ++ pass ++ + if kernel_driver in mapping: + return mapping[kernel_driver] + return "" diff --git a/app-containers/waydroid/waydroid-1.4.3-r1.ebuild b/app-containers/waydroid/waydroid-1.4.3-r1.ebuild new file mode 100644 index 000000000..106dfd17c --- /dev/null +++ b/app-containers/waydroid/waydroid-1.4.3-r1.ebuild @@ -0,0 +1,117 @@ +# Copyright 2022-2024 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_{10..13} ) +inherit linux-info xdg python-single-r1 + +DESCRIPTION="Container-based approach to boot a full Android system on Linux systems" +HOMEPAGE="https://waydro.id" +SRC_URI="https://github.com/${PN}/${PN}/archive/${PV}.tar.gz -> ${P}.tar.gz" + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="~amd64 ~arm ~arm64 ~x86" +REQUIRED_USE="${PYTHON_REQUIRED_USE}" +IUSE="apparmor +clipboard systemd" + +PATCHES=( + "${FILESDIR}/waydroid-1.4.3-r1.patch" + ) + +DEPEND="|| ( virtual/linux-sources virtual/dist-kernel )" +RDEPEND=" + systemd? ( sys-apps/systemd ) + app-containers/lxc[systemd?,apparmor?,seccomp] + $(python_gen_cond_dep ' + clipboard? ( >=dev-python/pyclip-0.7.0[wayland,${PYTHON_USEDEP}] ) + dev-python/pygobject[${PYTHON_USEDEP}] + >=dev-python/gbinder-1.1.1[${PYTHON_USEDEP}] + dev-python/dbus-python[${PYTHON_USEDEP}] + ') + net-firewall/nftables + net-dns/dnsmasq + >=dev-libs/libglibutil-1.0.79 + >=dev-libs/gbinder-1.1.41 + ${PYTHON_DEPS} +" + +CONFIG_CHECK=" + ~ANDROID_BINDER_IPC + ~ANDROID_BINDERFS + ~MEMFD_CREATE + ~NETFILTER_XT_TARGET_MASQUERADE + ~NETFILTER_XT_NAT + ~PSI + ~!PSI_DEFAULT_DISABLED + ~NF_TABLES + ~NF_TABLES_INET + ~NF_TABLES_NETDEV + ~NFT_NUMGEN + ~NFT_NAT + ~NFT_TUNNEL + ~NFT_QUOTA + ~NFT_SOCKET + ~NF_FLOW_TABLE + ~NFT_BRIDGE_META + ~NFT_BRIDGE_REJECT +" +ERROR_ANDROID_BINDERFS="CONFIG_ANDROID_BINDERFS: need for creating Android-specific binder IPC channels" +ERROR_ANDROID_BINDER_IPC="CONFIG_ANDROID_BINDER_IPC: need for creating Android-specific binder IPC channels" +ERROR_MEMFD_CREATE="CONFIG_MEMFD_CREATE: it completely replaced deprecated ISHMEM drivers, + therefore it's vital for android-specific memory management" +ERROR_NETFILTER_XT_NAT="CONFIG_NETFILTER_XT_NAT: see bug #937106" +ERROR_NETFILTER_XT_TARGET_MASQUERADE="CONFIG_NETFILTER_XT_TARGET_MASQUERADE: see bug #937106" +ERROR_PSI="CONFIG_PSI: see bug #947280" +ERROR_NF_TABLES="CONFIG_NF_TABLES: Make sure you have NFTABLES up and running in your kernel" +ERROR_NFT_NAT="CONFIG_NFT_NAT: see bug #947280" +ERROR_NFT_BRIDGE_META="CONFIG_NFT_BRIDGE_META: see bug #947280" + +pkg_setup() { + linux-info_pkg_setup + python-single-r1_pkg_setup +} + +src_prepare() { + if ! use apparmor; then + # https://github.com/waydroid/waydroid/issues/652 + sed -e '/^lxc\.apparmor\.profile =/d' \ + -i data/configs/config_3 || die + fi + default +} + +src_install() { + python_fix_shebang waydroid.py + emake install DESTDIR="${D}" USE_NFTABLES=1 USE_SYSTEMD=$(usex systemd 1 0) + if ! use systemd; then + elog "Installing waydroid OpenRC daemon" + doinitd "${FILESDIR}"/waydroid + fi +} + +pkg_postinst() { + xdg_pkg_postinst + + elog "After package installation run either 'emerge --config app-containers/waydroid'" + elog "or 'waydroid init' from root shell to install android container runtime" + elog "To run waydroid, 1. Start container: 'rc-service waydroid start'" + elog "2. start wayland channel (from user shell) 'waydroid session start'" + elog "Contact https://docs.waydro.id/usage/install-on-desktops for how-to guides" + elog "(does not cover Gentoo-specific things sadly)" + elog + + ewarn "Make sure you have NFTABLES up and running in your kernel. See" + ewarn "https://wiki.gentoo.org/wiki/Nftables for how-to details" + ewarn + + if use apparmor; then + ewarn "Check the known issues for apparmor:" + ewarn "https://docs.waydro.id/debugging/known-issues" + fi +} + +pkg_config() { + "${EROOT}"/usr/bin/waydroid init +}