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
+}

Reply via email to