public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/openrc:master commit in: src/librc/, /, sh/
@ 2012-05-16 20:33 William Hubbs
  0 siblings, 0 replies; only message in thread
From: William Hubbs @ 2012-05-16 20:33 UTC (permalink / raw
  To: gentoo-commits

commit:     82d3918d7a1c625f98fcf607c7a450f18b7e60bd
Author:     William Hubbs <williamh <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 23 02:44:32 2012 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Mon May 14 18:49:06 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/openrc.git;a=commit;h=82d3918d

move rc_svcdir to /run/openrc on Linux systems

If you are not using linux, this should not affect you.

If you are using linux, from this point forward, openrc requires the
/run directory to be a mounted tmpfs. If it is, you can run
@LIBEXECDIR <AT> /sh/migrate-to-run.sh as root to migrate your dependency
tree and state information to the new location. If it is not, you must
create the /run directory as root with permissions 755 then reboot your
system.

reported-by: Maxim Kammerer <mk <AT> dee.su>
X-Gentoo-Bug: 401059
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=401059

---
 Makefile                |    2 +
 sh/.gitignore           |    1 +
 sh/Makefile             |    6 ++-
 sh/init.sh.Linux.in     |   97 +++++++++++++----------------------------------
 sh/migrate-to-run.sh.in |   50 ++++++++++++++++++++++++
 src/librc/rc.h.in       |    4 ++
 6 files changed, 88 insertions(+), 72 deletions(-)

diff --git a/Makefile b/Makefile
index 504092f..0a83495 100644
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,8 @@ include ${MK}/dist.mk
 include ${MK}/git.mk
 
 _installafter:
+ifneq ($(OS),Linux)
 	${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d
+endif
 	${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/tmp
 	${ECHO} "${VERSION}${GITVER}" > ${DESTDIR}/${LIBEXECDIR}/version

diff --git a/sh/.gitignore b/sh/.gitignore
index 3f6ef3f..a07afb3 100644
--- a/sh/.gitignore
+++ b/sh/.gitignore
@@ -10,3 +10,4 @@ ifwatchd-carrier.sh
 ifwatchd-nocarrier.sh
 udhcpc-hook.sh
 tmpfiles.sh
+migrate-to-run.sh

diff --git a/sh/Makefile b/sh/Makefile
index 4df8fde..356c37e 100644
--- a/sh/Makefile
+++ b/sh/Makefile
@@ -12,8 +12,10 @@ include ${MK}/os.mk
 SRCS-FreeBSD=
 BIN-FreeBSD=
 
-SRCS-Linux=	cgroup-release-agent.sh.in init-early.sh.in udhcpc-hook.sh.in
-BIN-Linux=	cgroup-release-agent.sh init-early.sh udhcpc-hook.sh
+SRCS-Linux=	cgroup-release-agent.sh.in init-early.sh.in migrate-to-run.sh.in \
+	udhcpc-hook.sh.in
+BIN-Linux=	cgroup-release-agent.sh init-early.sh migrate-to-run.sh \
+	udhcpc-hook.sh
 
 SRCS-NetBSD=	ifwatchd-carrier.sh.in ifwatchd-nocarrier.sh.in
 BIN-NetBSD=	ifwatchd-carrier.sh ifwatchd-nocarrier.sh

diff --git a/sh/init.sh.Linux.in b/sh/init.sh.Linux.in
index 176dba7..5daa1bb 100644
--- a/sh/init.sh.Linux.in
+++ b/sh/init.sh.Linux.in
@@ -3,62 +3,6 @@
 # Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
 # Released under the 2-clause BSD license.
 
-# This basically mounts $RC_SVCDIR as a ramdisk.
-# The tricky part is finding something our kernel supports
-# tmpfs and ramfs are easy, so force one or the other.
-svcdir_restorecon()
-{
-	local rc=0
-	if [ -x /usr/sbin/selinuxenabled -a -c /selinux/null ] &&
-	  selinuxenabled; then
-		restorecon $RC_SVCDIR
-		rc=$?
-	fi
-	return $rc
-}
-
-mount_svcdir()
-{
-	# mount from fstab if we can
-	fstabinfo --mount "$RC_SVCDIR" && return 0
-
-	local fs= fsopts="-o rw,noexec,nodev,nosuid"
-	local svcsize=${rc_svcsize:-1024}
-
-	# Some buggy kernels report tmpfs even when not present :(
-	if grep -Eq "[[:space:]]+tmpfs$" /proc/filesystems; then
-		local tmpfsopts="${fsopts},mode=755,size=${svcsize}k"
-		mount -n -t tmpfs $tmpfsopts rc-svcdir "$RC_SVCDIR"
-		if [ $? -eq 0 ]; then
-			svcdir_restorecon
-			[ $? -eq 0 ] && return 0
-		fi
-	fi
-
-	if grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then
-		fs="ramfs"
-		# ramfs has no special options
-	elif [ -e /dev/ram0 ] \
-		&& grep -Eq "[[:space:]]+ext2$" /proc/filesystems; then
-		devdir="/dev/ram0"
-		fs="ext2"
-		dd if=/dev/zero of="$devdir" bs=1k count="$svcsize"
-		mkfs -t "$fs" -i 1024 -vm0 "$devdir" "$svcsize"
-	else
-		echo
-		eerror "OpenRC requires tmpfs, ramfs or a ramdisk + ext2"
-		eerror "compiled into the kernel"
-		echo
-		return 1
-	fi
-
-	mount -n -t "$fs" $fsopts rc-svcdir "$RC_SVCDIR"
-	if [ $? -eq 0 ]; then
-		svcdir_restorecon
-		[ $? -eq 0 ] && return 0
-	fi
-}
-
 . "$RC_LIBEXECDIR"/sh/functions.sh
 [ -r /etc/rc.conf ] && . /etc/rc.conf
 
@@ -91,24 +35,32 @@ if $mountproc; then
 	eend $?
 fi
 
-# Mount tmpfs on /run when directory exists.
 # /run is a new directory for storing volatile runtime data.
 # Read more about /run at https://lwn.net/Articles/436012
-if [ -d /run ]; then
-	if mountinfo -q /run; then
-		einfo "/run is already mounted, skipping"
-	else
-		ebegin "Mounting /run"
-		if ! fstabinfo --mount /run; then
-			mount -t tmpfs -o mode=0755,nosuid,nodev tmpfs /run
-		fi
-		eend $?
+if [ ! -d /run ]; then
+	eerror "The /run directory does not exist. Unable to continue."
+	return 1
+fi
+
+if mountinfo -q /run; then
+	einfo "/run is already mounted, skipping"
+else
+	ebegin "Mounting /run"
+	rc=0
+	if ! fstabinfo --mount /run; then
+		mount -t tmpfs -o mode=0755,nosuid,nodev tmpfs /run
+		rc=$?
+	fi
+	if [ $rc != 0 ]; then
+		eerror "Unable to mount tmpfs on /run."
+		eerror "Can't continue."
+		exit 1
 	fi
-	checkpath -d -m 0775 -o root:uucp /run/lock
-elif [ -e /run ]; then
-	einfo "Unable to mount /run since it is not a directory"
 fi
 
+checkpath -d $RC_SVCDIR
+checkpath -d -m 0775 -o root:uucp /run/lock
+
 # Try to mount xenfs as early as possible, otherwise rc_sys() will always
 # return RC_SYS_XENU and will think that we are in a domU while it's not.
 if grep -Eq "[[:space:]]+xenfs$" /proc/filesystems; then
@@ -119,4 +71,9 @@ if grep -Eq "[[:space:]]+xenfs$" /proc/filesystems; then
 	eend $?
 fi
 
-. "$RC_LIBEXECDIR"/sh/init-common-post.sh
+if [ -e "$RC_LIBEXECDIR"/cache/deptree ]; then
+	cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
+fi
+
+echo sysinit >"$RC_SVCDIR"/softlevel
+exit 0

diff --git a/sh/migrate-to-run.sh.in b/sh/migrate-to-run.sh.in
new file mode 100644
index 0000000..f296a5c
--- /dev/null
+++ b/sh/migrate-to-run.sh.in
@@ -0,0 +1,50 @@
+#!@SHELL@
+# Copyright (c) 2012 William Hubbs <w.d.hubbs@gmail.com>
+# Released under the 2-clause BSD license.
+
+. "@LIBEXECDIR@/sh/functions.sh"
+
+if ! mountinfo -q -f tmpfs "@LIBEXECDIR@/init.d"; then
+	einfo "The OpenRC dependency data has already been migrated."
+	exit 0
+fi
+
+if [ ! -d "@PREFIX@/run" ]; then
+	eerror "'@PREFIX@/run' is not a directory."
+	eerror "This means the OpenRC dependency data cannot be migrated."
+	eerror "Please create the '@PREFIX@/run' directory and reboot the system."
+	exit 1
+fi
+
+if ! mountinfo -q -f tmpfs "@PREFIX@/run"; then
+	local x
+	for x in "@PREFIX@/run/."* "@PREFIX@/run/"*; do
+		case "$x" in
+			"@PREFIX@/run/."|"@PREFIX@/run/..")
+				continue
+				;;
+		esac
+		if [ -e "$x" ]; then
+				eerror "Your '@PREFIX@/run' directory contains files."
+				eerror "Please reboot the system."
+				exit 1
+		fi
+	done
+
+	mount -t tmpfs -o mode=0755,nosuid,nodev \
+		tmpfs "@PREFIX@/run" 2> /dev/null
+	if [ $? != 0 ]; then
+		eerror "Unable to mount a tmpfs on '@PREFIX@/run'."
+		eerror "This means the OpenRC dependency data cannot be migrated."
+		eerror "Please create the '@PREFIX@/run' directory and reboot the system."
+		exit 1
+	fi
+fi
+
+rm -rf "@PREFIX@/run/openrc"
+cp -a "@LIBEXECDIR@/init.d" "@PREFIX@/run/openrc"
+rc-update -u
+rm -rf "@LIBEXECDIR@/init.d"
+umount "@LIBEXECDIR@/init.d"
+einfo "The OpenRC dependency data was migrated successfully."
+exit 0

diff --git a/src/librc/rc.h.in b/src/librc/rc.h.in
index eaae25f..96926a5 100644
--- a/src/librc/rc.h.in
+++ b/src/librc/rc.h.in
@@ -36,7 +36,11 @@ __BEGIN_DECLS
 #define RC_SYSCONFDIR		"@SYSCONFDIR@"
 #define RC_LIBDIR               "@PREFIX@/@LIB@/rc"
 #define RC_LIBEXECDIR           "@LIBEXECDIR@"
+#ifdef __linux__
+#define RC_SVCDIR               "@PREFIX@/run/openrc"
+#else
 #define RC_SVCDIR               RC_LIBEXECDIR "/init.d"
+#endif
 #define RC_RUNLEVELDIR          RC_SYSCONFDIR "/runlevels"
 #define RC_INITDIR              RC_SYSCONFDIR "/init.d"
 #define RC_CONFDIR              RC_SYSCONFDIR "/conf.d"



^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2012-05-16 20:34 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-16 20:33 [gentoo-commits] proj/openrc:master commit in: src/librc/, /, sh/ William Hubbs

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox