public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Mike Frysinger" <vapier@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] repo/gentoo:master commit in: app-emulation/qemu/, app-emulation/qemu/files/
Date: Fri, 20 Jan 2017 19:28:35 +0000 (UTC)	[thread overview]
Message-ID: <1484940379.175bcba82218df8e7ad40919b5d45dbcc3d2ac30.vapier@gentoo> (raw)

commit:     175bcba82218df8e7ad40919b5d45dbcc3d2ac30
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Fri Jan 20 19:21:20 2017 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Fri Jan 20 19:26:19 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=175bcba8

app-emulation/qemu: generate init.d script from upstream settings

 app-emulation/qemu/files/qemu-binfmt.initd.head | 64 +++++++++++++++++++++++++
 app-emulation/qemu/files/qemu-binfmt.initd.tail | 14 ++++++
 app-emulation/qemu/qemu-9999.ebuild             | 49 ++++++++++++++++++-
 3 files changed, 125 insertions(+), 2 deletions(-)

diff --git a/app-emulation/qemu/files/qemu-binfmt.initd.head b/app-emulation/qemu/files/qemu-binfmt.initd.head
new file mode 100644
index 00000000..858d5d7
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-binfmt.initd.head
@@ -0,0 +1,64 @@
+#!/sbin/openrc-run
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# Enable automatic non-native program execution by the kernel.
+
+# Defaulting to OC should be safe because it comes down to:
+#  - do we trust the interp itself to not be malicious?  yes; we built it.
+#  - do we trust the programs we're running?  ish; same permission as native
+#    binaries apply.  so if user can do bad stuff natively, cross isn't worse.
+: ${QEMU_BINFMT_FLAGS:=OC}
+
+depend() {
+	after procfs
+}
+
+start() {
+	ebegin "Registering qemu-user binaries (flags: ${QEMU_BINFMT_FLAGS})"
+
+	if [ ! -d /proc/sys/fs/binfmt_misc ] ; then
+		modprobe -q binfmt_misc
+	fi
+
+	if [ ! -d /proc/sys/fs/binfmt_misc ] ; then
+		eend 1 "You need support for 'misc binaries' in your kernel!"
+		return
+	fi
+
+	if [ ! -f /proc/sys/fs/binfmt_misc/register ] ; then
+		mount -t binfmt_misc -o nodev,noexec,nosuid \
+			binfmt_misc /proc/sys/fs/binfmt_misc >/dev/null 2>&1
+		eend $? || return
+	fi
+
+	# Probe the native cpu type so we don't try registering them.
+	local cpu="$(uname -m)"
+	case "${cpu}" in
+	armv[4-9]*)
+		cpu="arm"
+		;;
+	i386|i486|i586|i686|i86pc|BePC|x86_64)
+		cpu="i386"
+		;;
+	m68k)
+		cpu="m68k"
+		;;
+	mips*)
+		cpu="mips"
+		;;
+	"Power Macintosh"|ppc|ppc64)
+		cpu="ppc"
+		;;
+	s390*)
+		cpu="s390"
+		;;
+	sh*)
+		cpu="sh"
+		;;
+	sparc*)
+		cpu="sparc"
+		;;
+	esac
+
+	# Register the interpreter for each cpu except for the native one.

diff --git a/app-emulation/qemu/files/qemu-binfmt.initd.tail b/app-emulation/qemu/files/qemu-binfmt.initd.tail
new file mode 100644
index 00000000..7679481
--- /dev/null
+++ b/app-emulation/qemu/files/qemu-binfmt.initd.tail
@@ -0,0 +1,14 @@
+	eend 0
+}
+
+stop() {
+	# We unregister everything in the "qemu-xxx" namespace.
+	ebegin "Unregistering qemu-user binaries"
+	local f
+	for f in /proc/sys/fs/binfmt_misc/qemu-* ; do
+		if [ -f "${f}" ] ; then
+			echo '-1' > "${f}"
+		fi
+	done
+	eend 0
+}

diff --git a/app-emulation/qemu/qemu-9999.ebuild b/app-emulation/qemu/qemu-9999.ebuild
index 28b1867..6a78bbb 100644
--- a/app-emulation/qemu/qemu-9999.ebuild
+++ b/app-emulation/qemu/qemu-9999.ebuild
@@ -560,13 +560,58 @@ qemu_python_install() {
 	python_doscript "${S}/scripts/qmp/qemu-ga-client"
 }
 
+# Generate the /etc/init.d/qemu-binfmt script which registers the user handlers.
+generate_initd() {
+	local out="${T}/qemu-binfmt"
+	local d="${T}/binfmt.d"
+
+	einfo "Generating qemu init.d script"
+
+	# Generate the debian fragments first.
+	mkdir -p "${d}"
+	"${S}"/scripts/qemu-binfmt-conf.sh \
+		--debian \
+		--exportdir "${d}" \
+		--qemu-path "${EPREFIX}/usr/bin" \
+		|| die
+	# Then turn the fragments into a shell script we can source.
+	sed -E -i \
+		-e 's:^([^ ]+) (.*)$:\1="\2":' \
+		"${d}"/* || die
+
+	# Generate the init.d script by assembling the fragments from above.
+	local f qcpu package interpreter magic mask
+	cat "${FILESDIR}"/qemu-binfmt.initd.head >"${out}" || die
+	for f in "${d}"/qemu-* ; do
+		source "${f}"
+
+		# Normalize the cpu logic like we do in the init.d for the native cpu.
+		qcpu=${package#qemu-}
+		case ${qcpu} in
+		arm*)   qcpu="arm";;
+		mips*)  qcpu="mips";;
+		ppc*)   qcpu="ppc";;
+		s390*)  qcpu="s390";;
+		sh*)    qcpu="sh";;
+		sparc*) qcpu="sparc";;
+		esac
+
+		cat <<EOF >>"${out}"
+	if [ "\${cpu}" != "${qcpu}" -a -x "${interpreter}" ] ; then
+		echo ':${package}:M::${magic}:${mask}:${interpreter}:'"\${QEMU_BINFMT_FLAGS}" >/proc/sys/fs/binfmt_misc/register
+	fi
+EOF
+	done
+	cat "${FILESDIR}"/qemu-binfmt.initd.tail >>"${out}" || die
+}
+
 src_install() {
 	if [[ -n ${user_targets} ]]; then
 		cd "${S}/user-build"
 		emake DESTDIR="${ED}" install
 
-		# Install binfmt handler init script for user targets
-		newinitd "${FILESDIR}/qemu-binfmt.initd-r1" qemu-binfmt
+		# Install binfmt handler init script for user targets.
+		doinitd "${T}/qemu-binfmt"
 	fi
 
 	if [[ -n ${softmmu_targets} ]]; then


             reply	other threads:[~2017-01-20 19:28 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-20 19:28 Mike Frysinger [this message]
  -- strict thread matches above, loose matches on Subject: below --
2025-02-03  9:19 [gentoo-commits] repo/gentoo:master commit in: app-emulation/qemu/, app-emulation/qemu/files/ Sam James
2024-12-02 14:50 Sam James
2024-10-06  9:37 Sam James
2023-08-26  3:51 Sam James
2023-07-02 23:01 Sam James
2023-05-05 18:11 Matthias Maier
2023-03-12  0:38 Andreas K. Hüttel
2023-02-22 11:32 Sam James
2023-01-18 18:59 John Helmert III
2022-09-16 19:41 Georgy Yakovlev
2022-07-05  1:05 WANG Xuerui
2022-04-04 18:44 John Helmert III
2022-01-11 13:40 Matthias Maier
2021-12-20  6:42 Matthias Maier
2021-12-08  1:23 John Helmert III
2021-10-11  3:49 John Helmert III
2021-09-23  2:08 Matthias Maier
2021-05-26  6:54 Sergei Trofimovich
2021-05-12  6:55 Sergei Trofimovich
2021-04-12 19:39 Sergei Trofimovich
2021-02-01 18:01 Sergei Trofimovich
2021-01-31 14:29 Sergei Trofimovich
2021-01-31  9:38 Sergei Trofimovich
2020-12-14  8:46 Sergei Trofimovich
2020-12-10  9:02 Sergei Trofimovich
2020-11-24  8:38 Sergei Trofimovich
2020-09-20  8:23 Sergei Trofimovich
2020-09-19  7:33 Sergei Trofimovich
2020-09-05  7:08 Sergei Trofimovich
2020-08-13 22:36 Sergei Trofimovich
2020-07-09 22:55 Sergei Trofimovich
2020-04-30 23:47 Sergei Trofimovich
2020-04-18 22:06 Matthias Maier
2020-04-08 18:51 Matthias Maier
2020-02-06 15:52 Matthias Maier
2019-09-22  2:12 Matthias Maier
2019-07-28 18:21 Matthias Maier
2019-05-19 23:42 Matthias Maier
2019-04-29  6:48 Matthias Maier
2018-12-19 21:47 Matthias Maier
2018-08-19 17:49 Matthias Maier
2018-07-23 15:06 Jason Donenfeld
2018-06-15 17:47 Matthias Maier
2018-03-27 16:18 Matthias Maier
2018-02-12 22:48 Matthias Maier
2018-02-11 20:27 Matthias Maier
2017-09-01  1:32 Matthias Maier
2017-07-26 19:37 Matthias Maier
2017-07-26 18:57 Matthias Maier
2017-05-18  4:20 Matthias Maier
2017-04-29 21:32 Matthias Maier
2017-04-12  5:03 Matthias Maier
2017-02-21 12:03 Matthias Maier
2017-02-13  6:40 Matthias Maier
2017-02-13  4:58 Matthias Maier
2016-12-29 20:09 Mike Frysinger
2016-10-26 21:48 Matthias Maier
2016-09-18  4:33 Matthias Maier
2016-09-10  2:23 Matthias Maier
2016-03-28 22:03 Mike Frysinger
2016-02-15 15:27 Doug Goldstein
2016-01-18  4:59 Mike Frysinger
2015-12-17 15:12 Mike Frysinger
2015-10-15 20:24 Markos Chandras
2015-10-10  0:59 Mike Frysinger
2015-09-07  5:50 Mike Frysinger
2015-08-10 11:05 Mike Frysinger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1484940379.175bcba82218df8e7ad40919b5d45dbcc3d2ac30.vapier@gentoo \
    --to=vapier@gentoo.org \
    --cc=gentoo-commits@lists.gentoo.org \
    --cc=gentoo-dev@lists.gentoo.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox