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@gmail.com>
This commit is contained in:
Denis Reva
2025-01-11 14:25:20 +05:00
parent 7e85b0f4a1
commit 09e8365292
2 changed files with 291 additions and 0 deletions

View File

@@ -0,0 +1,174 @@
From c9ea5abff749e660c9aca0fcd224875464c3dacd Mon Sep 17 00:00:00 2001
From: Alessandro Astone <ales.astone@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.astone@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.astone@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 ""

View File

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