diff options
author | William Hubbs <williamh@gentoo.org> | 2012-02-22 20:44:32 -0600 |
---|---|---|
committer | William Hubbs <williamh@gentoo.org> | 2012-05-14 13:49:06 -0500 |
commit | 82d3918d7a1c625f98fcf607c7a450f18b7e60bd (patch) | |
tree | 89866fb3fce5954a52075941d5dc27fe5c60b824 /sh/init.sh.Linux.in | |
parent | ee1a698451a01772d50a75e95c887520260f8619 (diff) |
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.in | 97 |
1 files changed, 27 insertions, 70 deletions
diff --git a/sh/init.sh.Linux.in b/sh/init.sh.Linux.in index 176dba7a..5daa1bbf 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 |