summaryrefslogtreecommitdiff
path: root/sh/init.sh.Linux.in
diff options
context:
space:
mode:
authorWilliam Hubbs <williamh@gentoo.org>2012-02-22 20:44:32 -0600
committerWilliam Hubbs <williamh@gentoo.org>2012-05-14 13:49:06 -0500
commit82d3918d7a1c625f98fcf607c7a450f18b7e60bd (patch)
tree89866fb3fce5954a52075941d5dc27fe5c60b824 /sh/init.sh.Linux.in
parentee1a698451a01772d50a75e95c887520260f8619 (diff)
downloadopenrc-82d3918d7a1c625f98fcf607c7a450f18b7e60bd.tar.gz
openrc-82d3918d7a1c625f98fcf607c7a450f18b7e60bd.tar.bz2
openrc-82d3918d7a1c625f98fcf607c7a450f18b7e60bd.tar.xz
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@/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@dee.su> X-Gentoo-Bug: 401059 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=401059
Diffstat (limited to 'sh/init.sh.Linux.in')
-rw-r--r--sh/init.sh.Linux.in97
1 files changed, 27 insertions, 70 deletions
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