llebout / ungoogled-chromium

Google Chromium, sans integration with Google - PPC64LE FORK
BSD 3-Clause "New" or "Revised" License
17 stars 5 forks source link

Build issues in Debian 10 (Buster) #13

Open koen92 opened 4 years ago

koen92 commented 4 years ago

I'm facing some build issues when trying to build this project on Debian Buster. Most issues are easy to fix or work around, but I still want to discuss them before filing a PR.

Missing package in README.md

The package libgdm-dev is now required to build Chromium, I think we should add it to the sudo apt-get install instructions in the README.md?

Build error: use of undeclared identifier __NR_shmget

Second problem has already been reported here: https://github.com/shawnanastasio/chromium_power/issues/4. That issue has been closed, but the issue still isn't fixed.

Four syscalls are still missing from Debian's <asm/unistd.h>. I checked Fedora's <asm/unistd.h> and copied the missing syscalls over to the 0001-sandbox-linux-Implement-partial-support-for-ppc64-sy.patch patch file:

diff --git a/sandbox/linux/system_headers/ppc64_linux_syscalls.h b/sandbox/linux/system_headers/ppc64_linux_syscalls.h
new file mode 100644
index 000000000000..ccacffe22ea3
--- /dev/null
+++ b/sandbox/linux/system_headers/ppc64_linux_syscalls.h
@@ -0,0 +1,12 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
+#define SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_
+
+#include <asm/unistd.h>
+
+//TODO: is it necessary to redefine syscall numbers for PPC64?
+// Needed for Ubuntu/Debian:
+#if !defined(__NR_shmget)
+#define __NR_shmget     395
+#endif
+#if !defined(__NR_shmdt)
+#define __NR_shmdt      398
+#endif
+#if !defined(__NR_shmctl)
+#define __NR_shmctl     396
+#endif
+#if !defined(__NR_shmat)
+#define __NR_shmat      397
+#endif
+
+#endif  // SANDBOX_LINUX_SYSTEM_HEADERS_PPC64_LINUX_SYSCALLS_H_

This allows me to build Chromium on Debian, but I don't know if this will break on other distros/systems? And I also don't know if it's safe to just copy those syscalls over from Fedora..

Sandbox not working on Debian

While Chromium can be built now, it still won't run with a sandbox:

[5801:5801:0613/172738.997072:FATAL:zygote_host_impl_linux.cc(116)] No usable sandbox! Update your kernel or see https://chromium.9oo91esource.qjz9zk/chromium/src/+/master/docs/linux/suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live dangerously and need an immediate workaround, you can try using --no-sandbox.
Trace/breakpoint trap

This is caused because Debian has disabled user namespaces by default for non-root users. This can be fixed by running:

# echo kernel.unprivileged_userns_clone=1 > /etc/sysctl.d/00-local-userns.conf
# service procps restart

After this fix, Chromium starts and runs fine with sandboxing enabled (I checked with chrome://sandbox/).

I found this fix over here: https://github.com/iridium-browser/tracker/issues/208#issuecomment-393109594 Since Iridium is x86-only, I also checked Chromium on Debian Buster amd64. That version still uses the old setuid sandbox (Chromium 80). kernel.unprivileged_userns_clone is also set to 0 on Buster amd64. So hopefully, this problem will disappear once Debian updates to Chromium 83 on Buster amd64.

Is this the way to go for now? Should we add this instruction to the README.md?

Video calls are not working

Big issue for me, especially now with COVID-19: video calls don't work (I checked several different services). It recognizes my webcam and I can see myself in the 'video lobby', however joining a call doesn't work (looks like some kind of timeout). Other video-related websites like Youtube work fine. Video calls do work in the pre-built Fedora version (I checked by running Fedora 32 in a VM with the Gitlab build of ungoogled Chromium).

I don't see any logging related to this, can someone help me out debugging this issue? How can I provide more information to debug this issue?

Summary

In summary, almost everything works on Debian Buster with some fixes/workarounds:

llebout commented 4 years ago

Package list in README isnt kept in sync due to lack of time, the best way to get the list is to look at the Dockerfile used to build the image that's used by the build Gitlab CI pipeline. https://gitlab.com/chromium-ppc64le/ungoogled-chromium-ci-docker-image/-/raw/master/Dockerfile

The CI uses Fedora because of this bug with Debian.

Described here: https://gitlab.com/lle-bout/ungoogled-chromium/-/issues/6

For video calls, I suggest looking at GN args: https://gitlab.com/lle-bout/ungoogled-chromium/-/blob/master/flags.gn