Compare commits

..

18 Commits

Author SHA1 Message Date
William Hubbs
7c9f1add21 Remove references to localmount
Convert all references to localmount to the specific file systems that
should be needed.
2015-07-31 12:44:55 -05:00
William Hubbs
a643e918dd Add experimental mount service
This is highly experimental, so read the mount-service.md file for more
info before you play with it.
2015-07-29 15:07:51 -05:00
William Hubbs
eeadca0b8a Add EERROR_QUIET and EINFO_QUIET to environment whitelist 2015-07-23 12:44:10 -05:00
William Hubbs
dde339070b Increment version 2015-07-10 13:25:43 -05:00
Doug Freed
1736be3bc3 savecache: Fix unable to create cache message
The cache is created in $RC_LIBEXECDIR, not $RC_SVCDIR, so fix the error
message when we fail to create it to match.
2015-07-10 13:24:10 -04:00
Mike Gilbert
a36a635b01 tmpfiles: Recognize type 'v' (create btrfs subvol)
This change does NOT implement btrfs subvol creation.  Instead, it
treats 'v' the same as 'd', which is an acceptable fallback
according to the manual.

Fixes #58
2015-06-24 22:40:35 -07:00
Mike Gilbert
9310ccc06b Remove execute bit from tmpfiles.sh.in 2015-06-24 22:40:02 -07:00
William Hubbs
0c2e4eb3cd Update ChangeLog 2015-06-19 09:55:37 -05:00
William Hubbs
d2ce07e227 Add rc-sstat script
The rc-sstat script is written to display status of s6 services and
run rc-status to display all services status.

This currently only works on Linux.
2015-06-10 18:45:29 -05:00
Mike Gilbert
b209fe3859 bootmisc: Don't call dmesg in systemd-nspawn containers
This fixes #57.
2015-06-02 13:11:04 -05:00
Mike Frysinger
c94c8288cd fix link to s6 website 2015-05-29 02:10:44 -04:00
Mike Gilbert
bcb9c44e73 man: Document the stopsig variable
This variable can be used to set the signal to send if the service is
using start-stop-daemon.

This fixes #56
2015-05-27 14:09:45 -05:00
William Hubbs
bbabf546f9 Document bash's handling of ulimit options
When bash is used in posix mode for the shell, the ulimit command uses
a block size of 512 bytes for the -c and -f options.

X-Gentoo-Bug: 549238
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=549238
2015-05-22 09:43:51 -05:00
William Hubbs
a7fcc1e264 S6: kick the scanner and sleep 1.5 seconds to avoid a race condition 2015-05-14 14:26:52 -05:00
William Hubbs
b79d058f16 s6: Use s6-svc -Dd to stop services
This allows us to get rid of the sleep call in the stop function. Also,
we set a configurable timeout value for stopping daemons.
2015-05-14 11:40:29 -05:00
William Hubbs
ddce529c71 More s6 fixes
- When no service link is in the scan directory, show the default
  stopped message.
- Do not remove the service link when stopping the service.
2015-05-13 16:51:55 -05:00
William Hubbs
e372f97beb Fix the s6 handling
This changes the default s6 service directory to /var/svc.d, also
it changes the code to work with the individual services instead of
forcing a rescan when a service is started or stopped.
2015-05-13 16:10:08 -05:00
William Hubbs
c2abf4b436 Start work on 0.17 2015-05-13 16:06:31 -05:00
53 changed files with 473 additions and 95 deletions

View File

@@ -1,4 +1,15 @@
commit 4f3df4cacb20bb17838986376ad53d4063749a14
commit d2ce07e227ec95370e8aee5f1199edc6ad61aff9
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Add rc-sstat script
The rc-sstat script is written to display status of s6 services and
run rc-status to display all services status.
This currently only works on Linux.
commit b209fe3859c05c286037843bb34058f849c54b15
Author: Mike Gilbert <floppym@gentoo.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
@@ -6,13 +17,13 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
This fixes #57.
commit 514b007e2713ac5046f6df78a720ca8e3de013b5
commit c94c8288cd5217b01c24d6f048c64ebbc30bee02
Author: Mike Frysinger <vapier@gentoo.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Commit: Mike Frysinger <vapier@gentoo.org>
fix link to s6 website
commit 6ad9b134e6c9da009842f61bdaf129a1716274ba
commit bcb9c44e73ccf332c7c961a6f82520699c6e776d
Author: Mike Gilbert <floppym@gentoo.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
@@ -23,7 +34,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
This fixes #56
commit e571c67ff812ad839107acaa5ba97313dde9dd7a
commit bbabf546f9d72cbfc48bd839a6d01b402ee6cced
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
@@ -35,37 +46,13 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
X-Gentoo-Bug: 549238
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=549238
commit c4067a65b0ecfad3e6b97416640c6b85382b8fe8
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Start work on 0.16.4
commit a8c30a89c417aff5bc863d65976ff8abcffa9e40
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update change log
commit fe0847c9a2565518334ef03da5c6cdc63726e122
commit a7fcc1e264b035177b4e524a40b27145baa86969
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
S6: kick the scanner and sleep 1.5 seconds to avoid a race condition
commit 58156137f9bbb0d853d994b793622cf48281cf08
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Start on 0.16.3
commit b1d7df15ef017e7b011a211eff2b2b75a39c8c9e
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update change log
commit 01088e282f08ca373ae1d61b2ed954c3075f130a
commit b79d058f162d8b49ccc968744e7cb1b7a7ba729c
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
@@ -74,19 +61,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
This allows us to get rid of the sleep call in the stop function. Also,
we set a configurable timeout value for stopping daemons.
commit b95ae213e9435f267da3331fd4568a5ad297b54c
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Start work on 0.16.2
commit 4f544f4130e0b62e18bdde42cad2b3aed085136d
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update change log
commit c65bed756e5f5cfa244d9aa4325691345d8c324d
commit ddce529c71c2e9f01d8e5666e27050b6ed6c6761
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
@@ -96,7 +71,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
stopped message.
- Do not remove the service link when stopping the service.
commit ccc81a9cad5d9beb739593827fc4bbc04c4a3304
commit e372f97bebd4866633ad56aa5d5b1ae59fa88118
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
@@ -106,11 +81,11 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
it changes the code to work with the individual services instead of
forcing a rescan when a service is started or stopped.
commit 3a1e304d6c56875838b884b6e0608fe756ccce4e
commit c2abf4b436b8cca8ebed395ff08f5fdc546eadac
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Start work on 0.16.1
Start work on 0.17
commit d247ac4cbbe0ab62564ef82a5940b4f1a03973b3
Author: William Hubbs <w.d.hubbs@gmail.com>

View File

@@ -1,3 +1,3 @@
NAME= openrc
VERSION= 0.16.4
VERSION= 0.18
PKG= ${NAME}-${VERSION}

View File

@@ -1,7 +1,7 @@
include ../mk/net.mk
DIR= ${CONFDIR}
CONF= bootmisc fsck hostname localmount netmount urandom tmpfiles \
CONF= bootmisc fsck hostname localmount mount netmount urandom tmpfiles \
${CONF-${OS}}
ifeq (${MKNET},yes)

23
conf.d/mount Normal file
View File

@@ -0,0 +1,23 @@
# The mount service is a multiplexed service. This means you must have
# symbolic links to it in your init.d directory for each file system you
# want to mount. I recommend naming those symbolic links the same as the
# paths to the file systems they mount, removing the leading slash and
# substituting _ for the remaining slashes, for example:
#
# cd /etc/init.d
# ln -s mount mount.usr
# ln -s mount mount.usr_local
#
# Set up a symbolic link like this for each file system you wish to
# mount, then add the symbolic link to the appropriate runlevel. Once
# that is done, add the appropriate definitions for the file system to
# this file.
#
#You will need to define the mountpoint and any dependencies for each
#filesystem as shown here.
#
#If the mountpoint does not match an entry in fstab, the mount will be
#ignored.
#
#mount_usr_mountpoint="/usr"
#

View File

@@ -10,6 +10,6 @@ name="Avahi DNS Configuration Daemon"
depend()
{
use dns
need localmount dbus
need mount.usr mount.var dbus
after bootmisc
}

View File

@@ -10,6 +10,6 @@ name="Avahi Service Advertisement Daemon"
depend()
{
use dns
need localmount dbus
need mount.usr mount.var dbus
after bootmisc
}

View File

@@ -9,7 +9,7 @@ name="Message Bus Daemon"
depend()
{
need localmount net
need mount.usr mount.var net
after bootmisc
}

View File

@@ -10,7 +10,7 @@ name="DHCP Client Daemon"
depend()
{
provide net
need localmount
need mount.usr mount.var
use logger
after bootmisc modules
before dns

View File

@@ -12,7 +12,7 @@ extra_started_commands="reload"
depend()
{
provide dns
need localmount net
need mount.usr mount.var net
after bootmisc
}

View File

@@ -24,7 +24,7 @@ esac
depend()
{
provide dns
need localmount
need mount.usr mount.var
after bootmisc
}

View File

@@ -14,7 +14,7 @@ name="Network Time Protocol Daemon"
depend()
{
use dns
need localmount
need mount.usr mount.var
after bootmisc ntp-client
}

View File

@@ -31,7 +31,7 @@ fi
depend()
{
need localmount net
need mount.usr mount.var net
use dns
after bootmisc
}

View File

@@ -10,7 +10,7 @@ name="WPA Supplicant Daemon"
depend()
{
need localmount
need mount.usr mount.var
use logger
after bootmisc modules
before dns dhcpcd net

1
init.d/.gitignore vendored
View File

@@ -4,6 +4,7 @@ hostname
local
localmount
loopback
mount
moused
netmount
network

View File

@@ -2,7 +2,7 @@ include ../mk/net.mk
DIR= ${INITDIR}
SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \
netmount.in osclock.in root.in savecache.in swap.in swapfiles.in \
mount.in netmount.in osclock.in root.in savecache.in swap.in swapfiles.in \
tmpfiles.setup.in swclock.in sysctl.in urandom.in s6-svscan.in ${SRCS-${OS}}
BIN= ${OBJS}

View File

@@ -4,7 +4,7 @@
depend()
{
need localmount
need mount.usr mount.var
before logger
after clock root sysctl
keyword -prefix -timeout

View File

@@ -6,7 +6,7 @@ description="Sets a font for the consoles."
depend()
{
need localmount termencoding
need mount.usr mount.var termencoding
after hotplug bootmisc
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
}

View File

@@ -7,7 +7,7 @@ command_args=$devd_args
name="Device State Change Daemon"
depend() {
need localmount
need mount.usr mount.var
after bootmisc
before net.lo0
keyword -jail -prefix

View File

@@ -6,7 +6,7 @@ description="Creates the dev database"
depend()
{
need localmount
need mount.usr mount.var
}
start()

View File

@@ -6,7 +6,7 @@ description="Applies a keymap for the consoles."
depend()
{
need localmount termencoding
need mount.usr mount.var termencoding
after bootmisc
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
}

View File

@@ -6,7 +6,7 @@ extra_commands="restore"
depend()
{
need localmount
need mount.usr mount.var
keyword -jail -prefix
}

118
init.d/mount.in Normal file
View File

@@ -0,0 +1,118 @@
#!@SBINDIR@/openrc-run
# Copyright (c) 2015 William Hubbs <w.d.hubbs@gmail.com>
# Released under the 2-clause BSD license.
description="Mount a file system defined in @SYSCONFDIR@/fstab"
extra_commands="generate"
depend()
{
need fsck
use modules mtab
after modules
keyword -jail -prefix -vserver -lxc
}
. "$RC_LIBEXECDIR"/sh/rc-mount.sh
start_pre()
{
# Do not start this service as "mount"
if [ "$rc_svcname" = mount ]; then
eerror "The mount service should not be started directly"
return 1
fi
return 0
}
start()
{
if [ "$rc_svcname" = mount-generate-symlinks ]; then
generate
return $?
fi
local mountname=${rc_svcname#*.}
local fspath=${mount_${mountname}_mountpoint}
# for now, make sure fspath is in fstab
if [ ! fstabinfo -q $fspath ]; then
einfo "$rc_svcname: $fspath is not in @SYSCONFDIR@/fstab"
return 0
fi
# Is the file system mounted?
if mountinfo -q $fspath; then
action=remount
msg=Remounting
else
action=mount
msg=Mounting
fi
ebegin "$msg $fspath according to @SYSCONFDIR@/fstab"
fstabinfo --$action $fspath
eend $? "$fspath failed to $action"
}
stop_pre()
{
# Do not stop this service as "mount"
if [ "$rc_svcname" = mount ]; then
eerror "The mount service should not be stopped directly"
return 1
fi
return 0
}
stop()
{
yesno $RC_GOINGDOWN || return 0
local mountname=${rc_svcname#*.}
local fspath=${mount_${mountname}_mountpoint}
# make sure fspath is in fstab
if ! fstabinfo -q $fspath; then
einfo "$rc_svcname: $fspath is not in @SYSCONFDIR@/fstab"
return 0
fi
# Is the file system mounted?
mountinfo -q $fspath || return 0
# Flush all pending disk writes now
sync
ebegin "Unmounting $fspath"
do_unmount umount $fspath
eend $? "Unable to umount $fspath"
return 0
}
generate()
{
local fslist="$(fstabinfo)"
local fs fsopts rc=0
local svcpath=${RC_SVCNAME%/*}
ebegin "Generating mount symlinks"
for fs in $fslist; do
case $fs in
/) ;;
/*)
fsopts="$(fstabinfo -o $fs)"
case "$fsopts" in
*noauto*) ;;
*)
local name="${fs#/}"
name="$(echo $name | sed 's#/#.#g')"
einfo ln -snf mount "${svcpath}/${name}"
rc=$?
[ $rc -ne 0 ] && break
*) ;;
esac
*) ;;
esac
done
eend $rc "Failed to generate symlinks for all mounts"
return $rc
}

View File

@@ -14,7 +14,7 @@ name="Console Mouse Daemon"
depend()
{
need localmount
need mount.usr mount.var
after bootmisc
keyword -jail -prefix
}

View File

@@ -10,7 +10,7 @@ __nl="
depend()
{
need localmount
need mount.usr mount.var
after bootmisc
if [ -n "$(interfaces)" ]; then
provide net

View File

@@ -6,7 +6,7 @@ required_files="/etc/newsyslog.conf"
depend()
{
need localmount
need mount.usr mount.var
keyword -prefix
}

View File

@@ -10,7 +10,7 @@ name="Name Service Cache Daemon"
extra_started_commands="flush"
depend() {
need localmount
need mount.usr mount.var
use net dns ldap ypbind
after bootmisc
}

View File

@@ -8,7 +8,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend()
{
need localmount
need mount.usr mount.var
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
}

View File

@@ -10,7 +10,7 @@ extra_commands="checkconfig showstatus"
extra_started_commands="reload"
depend() {
need localmount
need mount.usr mount.var
keyword -jail -prefix
}

View File

@@ -9,7 +9,7 @@ name="Power Control Daemon"
depend()
{
need localmount
need mount.usr mount.var
use logger
after bootmisc
keyword -jail -prefix

View File

@@ -7,7 +7,7 @@ description="Mounts misc filesystems in /proc."
depend()
{
use modules devfs
need localmount
need mount.usr mount.var
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
}

View File

@@ -17,7 +17,7 @@ command_background=YES
depend()
{
need localmount
need mount.usr mount.var
after bootmisc
need net
}

View File

@@ -4,7 +4,7 @@
depend()
{
need localmount net
need mount.usr mount.var net
after *
before local
keyword -prefix

View File

@@ -9,7 +9,7 @@ name="RPC program number mapper"
depend()
{
provide rpc
need localmount
need mount.usr mount.var
use net logger dns
before inetd xinetd ntpd ntp-client
}

View File

@@ -9,7 +9,7 @@ pidfile=/var/run/s6-svscan.pid
depend()
{
need localmount
need mount.usr mount.var
}
start_pre()

View File

@@ -30,7 +30,7 @@ start()
if yesno "${RC_GOINGDOWN}"; then
rc=0
fi
eend $rc "Unable to create $RC_SVCDIR/cache"
eend $rc "Unable to create $RC_LIBEXECDIR/cache"
return $rc
fi
fi

View File

@@ -6,7 +6,7 @@ description="Saves a kernel dump."
depend()
{
need dumpon localmount
need dumpon mount.usr mount.var
before encswap
keyword -jail -prefix
}

View File

@@ -4,7 +4,7 @@
depend()
{
before localmount
before mount.usr mount.var
keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc
}

View File

@@ -4,7 +4,7 @@
depend()
{
need localmount
need mount.usr mount.var
keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc
}

View File

@@ -3,7 +3,7 @@
# Released under the 2-clause BSD license.
depend() {
need localmount
need mount.usr mount.var
keyword -jail -prefix
}

View File

@@ -14,7 +14,7 @@ depend()
{
provide logger
use net newsyslog
need localmount
need mount.usr mount.var
after bootmisc
keyword -prefix
}

View File

@@ -6,7 +6,7 @@ description="Set up tmpfiles.d entries"
depend()
{
need localmount
need mount.usr mount.var
}
start()

View File

@@ -7,7 +7,7 @@ description="Initializes the random number generator."
depend()
{
need localmount
need mount.usr mount.var
keyword -jail -lxc -openvz -prefix -systemd-nspawn
}

View File

@@ -4,7 +4,7 @@
depend()
{
need localmount
need mount.usr mount.var
keyword -prefix
}

View File

@@ -1,9 +1,17 @@
MK= ../mk
include ${MK}/sys.mk
include ${MK}/os.mk
MAN3= einfo.3 \
rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \
rc_runlevel.3 rc_service.3 rc_stringlist.3
MAN8= rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \
service.8 start-stop-daemon.8
ifeq (${OS},Linux)
MAN8 += rc-sstat.8
endif
# Handy macro to create symlinks
# This does rely on correctly formatting our manpages!
MAKE_LINKS= suffix=$${man\#*.}; \
@@ -16,8 +24,6 @@ MAKE_LINKS= suffix=$${man\#*.}; \
fi; \
done;
MK= ../mk
include ${MK}/sys.mk
include ${MK}/gitignore.mk
all:

View File

@@ -487,8 +487,8 @@ _need_dbus()
depend()
{
# We write a pidfile and to /var/cache, so we need localmount.
need localmount
# We write a pidfile and to /var/cache, so we need mount.var.
need mount.var
# We can optionally use the network, but it's not essential.
use net
# We should be after bootmisc so that /var/run is cleaned before

46
man/rc-sstat.8 Normal file
View File

@@ -0,0 +1,46 @@
.\" Copyright (c) 2015 William Hubbs
.\"
.\" Redistribution and use in source and binary forms, with or without
.\" modification, are permitted provided that the following conditions
.\" are met:
.\" 1. Redistributions of source code must retain the above copyright
.\" notice, this list of conditions and the following disclaimer.
.\" 2. Redistributions in binary form must reproduce the above copyright
.\" notice, this list of conditions and the following disclaimer in the
.\" documentation and/or other materials provided with the distribution.
.\"
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
.\" SUCH DAMAGE.
.\"
.Dd April 24, 2008
.Dt RC-sstat 8 SMM
.Os OpenRC
.Sh NAME
.Nm rc-sstat
.Nd show status info about services supervised by s6 then rc-status
info
.Sh SYNOPSIS
.Nm
.Sh DESCRIPTION
.Nm
gathers and displays information about the status of services supervised
by s6 then runs rc-status to show info about nnormal OpenRC services.
.Pp
.Sh EXIT STATUS
.Nm
exits 1 if there is an internal error or exits with the same exit codes
as rc-status.
.Sh SEE ALSO
.Xr rc-status 8 ,
.Xr rc-update 8
.Sh AUTHORS
.An William Hubbs <w.d.hubbs@gmail.com>

46
mount-service.md Normal file
View File

@@ -0,0 +1,46 @@
# New Mount Service
This is definitely considered testing code, so if you use it on your
system and it breaks, you have been warned.
This document will evolve as the testing proceeds and will be removed
once the script goes mainline.
Since this is on a topic branch, this branch will be subject to
rebasing, merging commits, etc. When it goes to master, everything here
will be in one commit.
The goal of this is to replace the localmount and metmount services with
a single mount service which will be multiplexed so that there is one
service for each file system that will be mounted.
- rc-service mount generate
scans your fstab and attempts to generate symbolic links in /etc/init.d
for each file system you want to mount.
Then you must edit /etc/conf.d/mount to list all of your file systems
and the dependencies they have by using
rc_mount_foo_before/after/need/use settings.
rc-service mount.foo start
tries to mount a file system and
rc-service mount.foo stop
tries to unmount it if your system is going down.
I'm considering automating the generation of symlinks into the boot
process, but I'm not sure yet whether this is a good idea.
I haven't decided yet exactly how I want to handle the transition from
localmount/netmount to this new mount service yet, so you will
definitely not have a clean boot if you try to boot with this.
Another question is whether I want to try automating adding the mount
services to runlevels; I think no, but let me know if you feel
differently.
Any suggestions would be helpful.

1
scripts/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
rc-sstat

View File

@@ -1,5 +1,19 @@
MK= ../mk
include ${MK}/os.mk
DIR= ${LIBEXECDIR}/bin
BIN= on_ac_power
INSTALLAFTER = _installafter
ifeq (${OS},Linux)
SRCS+= rc-sstat.in
BIN+= rc-sstat
endif
_installafter:
ifeq (${OS},Linux)
${INSTALL} -d ${DESTDIR}${SBINDIR}
ln -s ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat
endif
MK= ../mk
include ${MK}/scripts.mk

140
scripts/rc-sstat.in Normal file
View File

@@ -0,0 +1,140 @@
#!@SHELL@
# Define variables
scandir="/run/openrc/s6-scan"
statfile=/dev/shm/s6-svstat.${USER}
color_red='\E[01;31m'
color_green='\E[32m'
color_yellow='\E[01;33m'
# Time Modules
uptimeModules() {
# Given a single integer argument representing seconds of uptime...
# convert uptime to a friendly human readable string: '2d 16h 58m 46s'
# define a variable to keep track of the longest length uptime string
uSec=${1:-0}
uDay=$(( $uSec / 86400 ))
uSec=$(( $uSec % 86400 ))
uHour=$(( $uSec / 3600 ))
uSec=$(( $uSec % 3600 ))
uMin=$(( $uSec / 60 ))
uSec=$(( $uSec % 60 ))
[ $uDay -ne 0 ] && pDay="${uDay}d " || pDay=""
[ $uHour -ne 0 ] && pHour="${uHour}h " || pHour=""
[ $uMin -ne 0 ] && pMin="${uMin}m " || pMin=""
[ $uSec -ne 0 ] && pSec="${uSec}s " || pSec=""
parsedUptime="$( echo ${pDay}${pHour}${pMin}${pSec} | sed 's#[ \t]*$##' )"
uCharCount=${#parsedUptime}
}
# Make sure we are running as root
if [ $(id -u) != 0 ]; then
printf "This command must be run as root\n"
exit 1
fi
# Make sure scandir exists
if [ ! -d $scandir ]; then
printf "%s\n" "$scandir does not exist"
exit 1
fi
# Make sure s6-svscan is running
if ! pgrep s6-svscan >/dev/null ; then
printf "s6-svscan is not running\n"
exit 1
fi
# If TERM is undefined (launching sstat through an ssh command) then make it vt100
if [ -z $TERM -o $TERM = "dumb" ]; then
export TERM=vt100
fi
# Gather list of candidate services s6-supervise may be supervising
# filter for folders and symlinks at /run/openrc/s6-scan/* ommiting output starting with '.'
services="$(find $scandir -maxdepth 1 -mindepth 1 \( -type d -or -type l \) | awk -F'/' '{ if ( $NF !~ "^\\." ) print $NF}')"
if [ -z "$services" ]; then
printf "s6 found no services configured for supervision\n"
exit 1
fi
# Gather status for each service from s6-svstat
# write to tmp file in memory for non I/O bound repeatative access
rm -f $statfile 2>/dev/null
for service in $services ; do
echo "$service $(s6-svstat ${scandir}/${service})" >> $statfile
done
# Define longest string from parsed uptime (default to 7 to match string length of 'Up Time')
timeStringLength=7
for uptime in $(awk '$2 == "up" {print $5}' $statfile | sort -run)
do
uptimeModules $uptime
[ ${uCharCount} -gt $timeStringLength ] && timeStringLength=$uCharCount
done
# Print the status header like so...
# Service Name State PID Up Time Start Time
#---------------------------- ----- ----- -------------- -------------------
printf "\n"
printf "%28s %5s %5s %${timeStringLength}s %19s\n" "Service Name" "State" "PID" "Up Time" "Start Time"
for dashes in 28 5 5 $timeStringLength 19 ; do
printf "%0.s-" $(seq 1 $dashes) ; echo -n ' '
done && printf "\n"
# sshd up (pid 26300) 80373 seconds
cat $statfile | \
while read line
do
set $line
service=$1
state=$2
pid=${4/)/}
time=$5
# call function to convert time in seconds and define additional variables
uptimeModules $time
if [ "$state" = up ]; then
if [ $time -lt 30 ]; then
# uptime < 30 seconds, color the whole line yellow
echo -en "$color_yellow"
# 1st 4 columns are printed with printf for space padding
printf "%28s %5s %5s %${timeStringLength}s" $service $state $pid "$parsedUptime"
# 4th column is output from date -d
echo -e " $(date -d "${time} seconds ago" "+%F %T")"
# reset terminal colors
tput sgr0
else
printf "%28s" $service
# uptime > 30 seconds, color just the "state" value green
echo -en "$color_green"
printf " %5s" $state
# reset terminal colors
tput sgr0
printf " %5s" $pid
printf " %${timeStringLength}s" "$parsedUptime"
echo -e " $(date -d "${time} seconds ago" "+%F %T")"
fi
else
printf "%28s" $service
echo -en "$color_red"
printf " %5s" $state
tput sgr0
echo ""
fi
done
# Cleanup
rm -f $statfile 2>/dev/null
printf "\n\n"
rc-status

11
sh/tmpfiles.sh.in Executable file → Normal file
View File

@@ -141,6 +141,13 @@ _D() {
fi
}
_v() {
# Create a subvolume if the path does not exist yet and the file system
# supports this (btrfs). Otherwise create a normal directory.
# TODO: Implement btrfs subvol creation.
_d "$@"
}
_L() {
# Create a symlink if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
@@ -336,7 +343,7 @@ for FILE in $tmpfiles_d ; do
# whine about invalid entries
case $cmd in
f|F|w|d|D|p|L|c|C|b|x|X|r|R|z|Z) ;;
f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z) ;;
*) warninvalid ; continue ;;
esac
@@ -344,7 +351,7 @@ for FILE in $tmpfiles_d ; do
if [ "$mode" = '-' -o "$mode" = '' ]; then
case "$cmd" in
p|f|F) mode=0644 ;;
d|D) mode=0755 ;;
d|D|v) mode=0755 ;;
C|z|Z|x|r|R|L) ;;
esac
fi

View File

@@ -939,9 +939,9 @@ svc_stop_real(void)
{
bool stopped;
/* If we're stopping localmount, set LC_ALL=C so that
/* If we're stopping mount.*, set LC_ALL=C so that
* bash doesn't load anything blocking the unmounting of /usr */
if (strcmp(applet, "localmount") == 0)
if (strncmp(applet, "mount.", 6) == 0)
setenv("LC_ALL", "C", 1);
if (ibsave)

View File

@@ -66,6 +66,7 @@ static const char *const env_whitelist[] = {
"LC_MONETARY", "LC_MESSAGES", "LC_PAPER", "LC_NAME", "LC_ADDRESS",
"LC_TELEPHONE", "LC_MEASUREMENT", "LC_IDENTIFICATION", "LC_ALL",
"IN_HOTPLUG", "IN_BACKGROUND", "RC_INTERFACE_KEEP_CONFIG",
"EERROR_QUIET", "EINFO_QUIET",
NULL
};