Compare commits

..

20 Commits

Author SHA1 Message Date
William Hubbs
ea047033c4 update ChangeLog 2016-11-03 16:27:33 -05:00
William Hubbs
2bad4da891 init.d/loopback.in: drop the route to the loopback interface on Linux
This is related to #103.
2016-11-03 13:26:19 -05:00
William Hubbs
3c5244fb6a init.d/mount-ro: do not remount /usr read only if it is premounted
X-Gentoo-Bug: 573760
X-Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=573760
2016-11-03 13:20:48 -05:00
William Hubbs
f1134f4efe conf.d/net-online: clarify comment about interfaces setting
This setting refers to all interfaces that support ethernet
2016-11-03 13:20:48 -05:00
William Hubbs
9f68514f8a init.d/net-online: remove interfaces and timeout from local declarations
X-Gentoo-Bug:  598621
X-Gentoo-Bug-URL:  https://bugs.gentoo.org/show_bug.cgi?id=598621
2016-11-03 13:20:48 -05:00
William Hubbs
b16625e625 src/rc/rc: do not try to start services if fork fails 2016-11-03 13:20:48 -05:00
Robin H. Johnson
5dc13a0ff2 init.d/loopback: drop scope on loopback
Busybox does not support the 'scope' argument on 'ip address add' or 'ip
route add', this is documented in BUSYBOX.md, but is no longer actually
needed, as the kernel does get it right without manual specification,
and the ifconfig variant already relies on the kernel to get it right.
This is part of #103.

X-Gentoo-Bug: 487208
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=487208
2016-11-03 13:20:48 -05:00
William Hubbs
c094c75f34 src/rc/rc-misc.c: report error if call to flock() fails
X-Gentoo-Bug: 597390
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=597390
2016-11-03 13:20:48 -05:00
Sven Wegener
0e925c511d do_service: Initialize idx to 0
If index is not explicitly specified for service_started_daemon, it will
look for daemons by random index.

This fixes #100.
2016-11-03 13:20:48 -05:00
William Hubbs
9ae469289d version 0.22.3 2016-11-03 12:39:02 -05:00
William Hubbs
d8ed89971b update ChangeLog 2016-10-06 11:55:31 -05:00
William Hubbs
a537bd7abb init.d/sysfs: load efivarfs module when booting in efi mode
The presence of /sys/firmware/efi is used to indicate that the system
was booted in efi mode.
2016-10-06 08:31:21 -05:00
William Hubbs
a13f2b91b2 init.d/sysfs: fix efivarfs module test 2016-10-05 11:41:40 -05:00
William Hubbs
b5a7222fe0 init.d/sysfs: fix efivarfs handling
Separate loading the module, if it isn't built in or loaded, from
mounting the file system.

This also makes sure the warning about configuring the module in
/etc/conf.d/modules or building it in is displayed only if it is loaded
successfully.

X-Gentoo-Bug: 595836
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=595836
2016-10-05 11:41:40 -05:00
William Hubbs
ace8dfdaae version 0.22.2 2016-10-05 11:35:25 -05:00
William Hubbs
7056107725 Update ChangeLog 2016-09-30 18:57:51 -05:00
Doug Freed
5df511e9e4 openrc-run: fix double free 2016-09-30 17:35:57 -04:00
Doug Freed
60ede6b687 init.d: Clean up some bad ewarn output 2016-09-30 16:16:19 -05:00
William Hubbs
c2f2533db0 typo fix
X-Gentoo-Bug: 595306
X-Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=595306
2016-09-30 16:16:19 -05:00
William Hubbs
e627ad4804 version 0.22.1 2016-09-30 16:13:04 -05:00
71 changed files with 1242 additions and 838 deletions

1024
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@@ -13,7 +13,7 @@ MK= ${TOP}/mk
include ${TOP}/Makefile.inc
SUBDIR= conf.d etc init.d local.d man scripts sh src support sysctl.d
SUBDIR= conf.d etc init.d local.d man scripts sh src sysctl.d
# Build pkgconfig or not
MKPKGCONFIG?= yes

View File

@@ -1,3 +1,3 @@
NAME= openrc
VERSION= 0.24.1
VERSION= 0.22.3
PKG= ${NAME}-${VERSION}

30
NEWS.md
View File

@@ -3,36 +3,6 @@
This file will contain a list of notable changes for each release. Note
the information in this file is in reverse order.
## OpenRC-0.24.1
This version starts cleaning up the dependencies so that rc_parallel
will work correctly.
The first step in this process is to remove the 'before *' from the
depend functions in the clock services. This means some services not
controlled by OpenRC may now start before instead of after the clock
service. If it is important for these services to start after the clock
service, they need to have 'after clock' added to their depend
functions.
## OpenRC-0.24
Since the deptree2dot tool and the perl requirement are completely
optional, the deptree2dot tool has been moved to the support directory.
As a result, the MKTOOLS=yes/no switch has been removed from the makefiles.
This version adds the agetty service which can be used to spawn
agetty on a specific terminal. This is currently documented in the
agetty-guide.md file at the top level of this distribution.
## OpenRC-0.23
The tmpfiles.d processing code, which was part of previous versions of
OpenRC, has been separated into its own package [1]. If you need to
process systemd style tmpfiles.d files, please install this package.
[1] https://github.com/openrc/opentmpfiles
## OpenRC-0.22
In previous versions of OpenRC, configuration information was processed

View File

@@ -30,6 +30,7 @@ MKSELINUX=yes
MKSTATICLIBS=no
MKTERMCAP=ncurses
MKTERMCAP=termcap
MKTOOLS=yes
PKG_PREFIX=/usr/pkg
LOCAL_PREFIX=/usr/local
PREFIX=/usr/local
@@ -72,6 +73,10 @@ Obviously, if you're installing this onto a system that does not use
OpenRC by default then you may wish to backup the above listed files,
remove them and then install so that the OS hooks into OpenRC.
`init.d.misc` is not installed by default as the scripts will need
tweaking on a per distro basis. They are also non essential to the
operation of the system.
## Reporting Bugs
If you are using Gentoo Linux, bugs can be filed on their bugzilla under

View File

@@ -1,19 +0,0 @@
# Setting up the agetty service in OpenRC
The agetty service is an OpenRC specific way to monitor and respawn a
getty, using agetty, on Linux. To use this method, make sure you aren't
spawning a getty manager for this port some other way (such as through
sysvinit/inittab), then run the following commands as root.
Note that [port] refers to the port you are spawning the getty on, and
not the full path to it. For example, tty0 or ttyS0instead of /dev/tty0
or /dev/ttyS0.
tty0 or ttyS0, not the full path to it (for example, tty0 or ttyS0 and
```
# cd /etc/init.d
# ln -s agetty agetty.[port]
# cd /etc/conf.d
# cp agetty agetty.[port]
#rc-update add agetty.[port] [runlevel]
```

View File

@@ -1,7 +1,8 @@
include ../mk/net.mk
DIR= ${CONFDIR}
CONF= bootmisc fsck hostname localmount netmount swap urandom ${CONF-${OS}}
CONF= bootmisc fsck hostname localmount netmount swap urandom tmpfiles \
${CONF-${OS}}
ifeq (${MKNET},yes)
CONF+= network staticroute
@@ -12,8 +13,8 @@ include ${MK}/os.mk
CONF-FreeBSD= ipfw modules moused powerd rarpd savecore syscons
CONF-Linux= agetty consolefont devfs dmesg hwclock keymaps killprocs modules \
mtab net-online
CONF-Linux= consolefont devfs dmesg hwclock keymaps killprocs modules mtab \
net-online
CONF-NetBSD= moused rarpd savecore

View File

@@ -1,8 +0,0 @@
# Set the baud rate of the terminal line
#baud=""
# set the terminal type
#termtype="linux"
# extra options to pass to agetty for this port
#agetty_options=""

View File

@@ -3,13 +3,10 @@
# default is all interfaces that support ethernet.
#interfaces=""
# This setting controls whether a ping test is included in the test for
# network connectivity after all interfaces are active.
#include_ping_test=no
# This setting is the host to attempt to ping if the above is yes.
# The default is google.com.
#ping_test_host=some.host.name
# This setting controls whether a ping to the default gateway is
# included in the test for network connectivity after all interfaces
# are active.
#ping_default_gateway=no
# The timeout setting controls how long the net-online service waits
# for the network to be configured.

3
conf.d/tmpfiles Normal file
View File

@@ -0,0 +1,3 @@
# Extra options for tmpfiles.sh
#tmpfiles_opts="--verbose"
tmpfiles_opts=""

View File

@@ -48,7 +48,7 @@
# /var/log/rc.log
# NOTE: Linux systems require the devfs service to be started before
# logging can take place and as such cannot log the sysinit runlevel.
#rc_logger="NO"
#rc_logger="YES"
# Through rc_log_path you can specify a custom log file.
# The default value is: /var/log/rc.log

View File

@@ -14,7 +14,7 @@ trap : SIGINT SIGQUIT
# Try and use stuff in /lib over anywhere else so we can shutdown
# local mounts correctly.
LD_LIBRARY_PATH="/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" ; export LD_LIBRARY_PATH
LD_LIBRARY_PATH="/lib${LD_LIBRARY_PATH:+:}${LDLIBRARY_PATH}" ; export LD_LIBRARY_PATH
# If $TERM is not set then assume default of @TERM@
# This gives us a nice colour boot :)

View File

@@ -198,7 +198,7 @@ script:
command=
command_args=
pidfile=
```
``
Thus the 'smallest' service scripts can be half a dozen lines long

View File

@@ -1,11 +1,9 @@
DIR= ${DATADIR}/support/init.d.examples
INC= README.md
DIR= ${INITDIR}
SRCS= avahi-dnsconfd.in avahid.in dhcpcd.in dbus.in \
hald.in named.in ntpd.in \
openvpn.in polkitd.in sshd.in wpa_supplicant.in
BIN= ${OBJS}
MK= ../../mk
MK= ../mk
SED_EXTRA+= -e 's:@VARBASE@:/var:g'

View File

@@ -39,11 +39,6 @@ find_wireless()
fi
done
;;
FreeBSD)
for iface in $(sysctl -b net.wlan.devices 2>/dev/null); do
echo "${iface##*/}"
done
;;
*)
for iface in /dev/net/* $(ifconfig -l 2>/dev/null); do
if ifconfig "${iface##*/}" 2>/dev/null | \

2
init.d/.gitignore vendored
View File

@@ -45,3 +45,5 @@ syslogd
termencoding
ttys
wscons
tmpfiles.dev
tmpfiles.setup

View File

@@ -2,8 +2,8 @@ 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 swclock.in \
sysctl.in runsvdir.in urandom.in s6-svscan.in ${SRCS-${OS}}
netmount.in osclock.in root.in savecache.in swap.in tmpfiles.setup.in \
swclock.in sysctl.in runsvdir.in urandom.in s6-svscan.in ${SRCS-${OS}}
BIN= ${OBJS}
# Are we installing our network scripts?
@@ -21,9 +21,9 @@ SRCS-FreeBSD= hostid.in modules.in moused.in newsyslog.in pf.in rarpd.in \
SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
modules.in modules-load.in mixer.in nscd.in powerd.in syscons.in
SRCS-Linux= agetty.in binfmt.in devfs.in dmesg.in hwclock.in consolefont.in \
keymaps.in killprocs.in modules.in modules-load.in mount-ro.in mtab.in \
numlock.in procfs.in net-online.in sysfs.in termencoding.in
SRCS-Linux= binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \
killprocs.in modules.in modules-load.in mount-ro.in mtab.in numlock.in \
procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in
# Generic BSD scripts
SRCS-NetBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \

View File

@@ -1,31 +0,0 @@
#!@SBINDIR@/openrc-run
# Copyright (c) 2017 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
#
# This file is part of OpenRC. It is subject to the license terms in
# the LICENSE file found in the top-level directory of this
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.
description="start agetty on a terminal line"
supervisor=supervise-daemon
port="${RC_SVCNAME#*.}"
term_type="${term_type:-linux}"
command=/sbin/agetty
command_args_foreground="${agetty_options} ${port} ${baud} ${termtype}"
pidfile="/run/${RC_SVCNAME}.pid"
depend() {
after local
}
start_pre() {
if [ -z "$port" ]; then
eerror "${RC_SVCNAME} cannot be started directly. You must create"
eerror "symbolic links to it for the ports you want to start"
eerror "agetty on and add those to the appropriate runlevels."
return 1
fi
}

View File

@@ -34,8 +34,7 @@ depend()
if yesno $clock_adjfile; then
use root
else
before binfmt bootmisc fsck hostname keymaps localmount loopback mtab
before procfs root swap sysctl termencoding urandom
before *
fi
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
}

View File

@@ -14,18 +14,17 @@ description="Mounts disks and swap according to /etc/fstab."
depend()
{
need fsck
use lvm modules mtab root
after lvm modules root
use lvm modules mtab
after lvm modules
keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
}
start()
{
# Mount local filesystems in /etc/fstab.
# The types variable must start with no, and must be a type
local critical= types="noproc" x= no_netdev= rc=
for x in $net_fs_list $extra_net_fs_list; do
types="${types},${x}"
types="${types},no${x}"
done
if [ "$RC_UNAME" = Linux ]; then

View File

@@ -29,6 +29,7 @@ start()
else
ebegin "Bringing up network interface lo0"
ifconfig lo0 127.0.0.1 netmask 255.0.0.0
route -q add -inet 127.0.0.0 -netmask 255.0.0.0 127.0.0.1
fi
eend $?
}

View File

@@ -31,7 +31,7 @@ FreeBSD_modules()
Linux_modules()
{
# Should not fail if kernel does not have module
# Should not fail if kernel do not have module
# support compiled in ...
[ ! -f /proc/modules ] && return 0
@@ -48,21 +48,22 @@ Linux_modules()
x=${x%.*}
done
local list= x= xx= y= args= mpargs= a=
local list= x= xx= y= args= mpargs= cnt=0 a=
for x in $kv_variant_list ; do
eval list=\$modules_$(shell_var "$x")
[ -n "$list" ] && break
done
[ -z "$list" ] && list=$modules
[ -n "$list" ] && ebegin "Loading kernel modules"
for x in $list; do
a=${x#*:}
if [ "$a" = "$x" ]; then
unset mpargs
ebegin "Loading module $x"
else
x=${x%%:*}
mpargs="-o $a"
ebegin "Loading module $x as $a"
fi
aa=$(shell_var "$a")
xx=$(shell_var "$x")
@@ -74,9 +75,10 @@ Linux_modules()
done
[ -z "$args" ] && eval args=\$module_${aa}_args
[ -z "$args" ] && eval args=\$module_${xx}_args
eval modprobe --use-blacklist --verbose "$mpargs" "$x" "$args"
eval modprobe --use-blacklist -q "$mpargs" "$x" "$args"
eend $? "Failed to load $x" && : $(( cnt += 1 ))
done
[ -n "$list" ] && eend
einfo "Autoloaded $cnt module(s)"
}
start()

View File

@@ -15,7 +15,6 @@ depend()
{
after modules
need sysfs
provide network-online
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
}
@@ -28,6 +27,19 @@ get_interfaces()
done
}
get_default_gateway()
{
local cmd gateway
if command -v ip > /dev/null 2>&1; then
cmd="ip route show"
else
cmd=route
fi
set -- $($cmd | grep default)
[ "$2" != via ] && gateway="$2" || gateway="$3"
printf "%s" $gateway
}
start ()
{
local carriers configured dev gateway ifcount infinite
@@ -54,15 +66,10 @@ start ()
: $((timeout -= 1))
done
! $infinite && [ $timeout -eq 0 ] && rc=1
include_ping_test=${include_ping_test:-${ping_default_gateway}}
if [ -n "${ping_default_gateway}" ]; then
ewarn "ping_default_gateway is deprecated, please use include_ping_test"
fi
if [ $rc -eq 0 ] && yesno ${include_ping_test:-no}; then
ping_test_host="${ping_test_host:-google.com}"
if [ -n "$ping_test_host" ]; then
ping -c 1 $ping_test_host > /dev/null 2>&1
rc=$?
if [ $rc -eq 0 ] && yesno ${ping_default_gateway:-no}; then
gateway="$(get_default_gateway)"
if [ -n "$gateway" ] && ! ping -c 1 $gateway > /dev/null 2>&1; then
rc=1
fi
fi
eend $rc "The network is offline"

View File

@@ -20,12 +20,10 @@ depend()
*) mywant="$mywant nfsclient"; break ;;
esac
done
after root
config /etc/fstab
want $mywant
use afc-client amd openvpn
use dns
use root
keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
}

View File

@@ -13,10 +13,7 @@ description="Sets the local clock to the mtime of a given file."
depend()
{
before adjkerntz binfmt bootmisc devdb dumpon fsck hostid hostname keymaps
before localmount loopback modules mtab network newsyslog procfs root
before savecore staticroute swap swap-blk syscons sysctl syslogd
before termencoding ttys urandom wscons
before *
provide clock
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
}

View File

@@ -15,6 +15,7 @@ sysfs_opts=nodev,noexec,nosuid
depend()
{
want modules
keyword -docker -lxc -prefix -systemd-nspawn -vserver
}
@@ -98,12 +99,23 @@ mount_misc()
fi
# set up kernel support for efivarfs
if [ -d /sys/firmware/efi/efivars ] &&
! mountinfo -q /sys/firmware/efi/efivars; then
ebegin "Mounting efivarfs filesystem"
mount -n -t efivarfs -o ${sysfs_opts} \
efivarfs /sys/firmware/efi/efivars 2> /dev/null
eend 0
# The presence of /sys/firmware/efi indicates that the system was
# booted in efi mode.
if [ -d /sys/firmware/efi ]; then
if [ ! -d /sys/firmware/efi/efivars ] &&
modprobe -q efivarfs; then
ewarn "The efivarfs module needs to be configured in " \
"@SYSCONFDIR@/conf.d/modules or built in"
fi
if [ -d /sys/firmware/efi/efivars ] &&
! mountinfo -q /sys/firmware/efi/efivars; then
if grep -qs efivarfs /proc/filesystems; then
ebegin "Mounting efivarfs filesystem"
mount -n -t efivarfs -o ${sysfs_opts} \
efivarfs /sys/firmware/efi/efivars
eend $?
fi
fi
fi
}

20
init.d/tmpfiles.dev.in Normal file
View File

@@ -0,0 +1,20 @@
#!@SBINDIR@/openrc-run
# Copyright 1999-2012 Gentoo Foundation
# Released under the 2-clause BSD license.
description="Set up tmpfiles.d entries"
depend()
{
use dev-mount
before dev
keyword -prefix -vserver
}
start()
{
ebegin "Setting up tmpfiles.d entries for /dev"
@LIBEXECDIR@/sh/tmpfiles.sh --prefix=/dev --create --boot ${tmpfiles_opts}
eend $?
return 0
}

19
init.d/tmpfiles.setup.in Normal file
View File

@@ -0,0 +1,19 @@
#!@SBINDIR@/openrc-run
# Copyright 1999-2012 Gentoo Foundation
# Released under the 2-clause BSD license.
description="Set up tmpfiles.d entries"
depend()
{
need localmount
}
start()
{
ebegin "Setting up tmpfiles.d entries"
@LIBEXECDIR@/sh/tmpfiles.sh --exclude-prefix=/dev --create --remove --boot \
${tmpfiles_opts}
eend $?
return 0
}

View File

@@ -97,7 +97,7 @@ String describing the extra command.
.It Ar supervisor
Supervisor to use to monitor this daemon. If this is unset or invalid,
start-stop-daemon will be used.
Currently, we support s6 from skarnet software, and supervise-daemon
Currently, we support s6 from scarnet software, and supervise-daemon
which is a light-weight supervisor internal to OpenRC.
To use s6, set
supervisor=s6.

View File

@@ -55,7 +55,7 @@ is used.
.It Fl p , -pidfile Ar pidfile
When starting, we expect the daemon to create a valid
.Ar pidfile
within a reasonable amount of time. When stopping we only stop the first pid
within a reasonable amount of time. When stopping we only stop the pid(s)
listed in the
.Ar pidfile .
.It Fl n , -name Ar name

View File

@@ -11,5 +11,5 @@
SFX= .GNU.in
PKG_PREFIX?= /usr
CPPFLAGS+= -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 -DMAXPATHLEN=4096 -DPATH_MAX=4096
CPPFLAGS+= -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -DMAXPATHLEN=4096 -DPATH_MAX=4096
LIBDL= -Wl,-Bdynamic -ldl

View File

@@ -11,7 +11,7 @@
SFX= .Linux.in
PKG_PREFIX?= /usr
CPPFLAGS+= -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700
CPPFLAGS+= -D_BSD_SOURCE -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700
LIBDL= -Wl,-Bdynamic -ldl
ifeq (${MKSELINUX},yes)

View File

@@ -59,9 +59,6 @@ MANPREFIX?= ${UPREFIX}/share
MANDIR?= ${MANPREFIX}/man
MANMODE?= 0444
DATADIR?= ${UPREFIX}/share/openrc
DATAMODE?= 0644
DOCDIR?= ${UPREFIX}/share/doc
DOCMODE?= 0644

View File

@@ -36,9 +36,10 @@ BOOT-FreeBSD+= hostid modules newsyslog savecore syslogd
# FreeBSD specific stuff
BOOT-FreeBSD+= adjkerntz dumpon syscons
BOOT-Linux+= binfmt hwclock keymaps modules mtab procfs termencoding
BOOT-Linux+= binfmt hwclock keymaps modules mtab procfs termencoding \
tmpfiles.setup
SHUTDOWN-Linux= killprocs mount-ro
SYSINIT-Linux= devfs dmesg sysfs
SYSINIT-Linux= devfs dmesg sysfs tmpfiles.dev
# Generic BSD stuff
BOOT-NetBSD+= hostid newsyslog savecore syslogd

View File

@@ -13,7 +13,7 @@ endif
_installafter:
ifeq (${OS},Linux)
${INSTALL} -d ${DESTDIR}${SBINDIR}
ln -sf ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat
ln -s ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat
endif
include ${MK}/scripts.mk

1
sh/.gitignore vendored
View File

@@ -6,5 +6,6 @@ cgroup-release-agent.sh
init.sh
init-early.sh
rc-cgroup.sh
tmpfiles.sh
migrate-to-run.sh
binfmt.sh

View File

@@ -1,9 +1,9 @@
DIR= ${LIBEXECDIR}/sh
SRCS= init.sh.in functions.sh.in gendepends.sh.in \
openrc-run.sh.in rc-functions.sh.in ${SRCS-${OS}}
openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}}
INC= rc-mount.sh functions.sh rc-functions.sh runit.sh s6.sh \
start-stop-daemon.sh supervise-daemon.sh
BIN= gendepends.sh init.sh openrc-run.sh ${BIN-${OS}}
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
INSTALLAFTER= _installafter

View File

@@ -11,16 +11,6 @@ if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then
done
fi
# check for md5sum, and probably /usr too
if command -v md5sum >/dev/null; then
got_md5sum=true
else
eerror "md5sum is missing, which suggests /usr is not mounted"
eerror "If you have separate /usr, it must be mounted by initramfs"
eerror "If not, you should check coreutils is installed correctly"
got_md5sum=false
fi
# By default VServer already has /proc mounted, but OpenVZ does not!
# However, some of our users have an old proc image in /proc
# NFC how they managed that, but the end result means we have to test if
@@ -31,12 +21,9 @@ fi
mountproc=true
f=/proc/self/environ
if [ -e $f ]; then
if $got_md5sum && [ "$(VAR=a md5sum $f)" = "$(VAR=b md5sum $f)" ]; then
if [ "$(VAR=a md5sum $f)" = "$(VAR=b md5sum $f)" ]; then
eerror "You have cruft in /proc that should be deleted"
else
# If they don't have md5sum, this will fail in pretty ways if
# /proc isn't really mounted. Oh well, their system is busted
# anyway, and they get to keep the pieces.
einfo "/proc is already mounted"
mountproc=false
fi
@@ -44,9 +31,11 @@ fi
unset f
if $mountproc; then
procfs="proc"
[ "$RC_UNAME" = "GNU/kFreeBSD" ] && proc="linprocfs"
ebegin "Mounting /proc"
if ! fstabinfo --mount /proc; then
mount -n -t proc -o noexec,nosuid,nodev proc /proc
mount -n -t "$procfs" -o noexec,nosuid,nodev proc /proc
fi
eend $?
fi

View File

@@ -146,9 +146,10 @@ _status()
fi
}
# Template start / stop / status functions
# These functions select the appropriate function to call from the
# supervisor modules
default_start()
start()
{
local func=ssd_start
case "$supervisor" in
@@ -162,7 +163,7 @@ default_start()
$func
}
default_stop()
stop()
{
local func=ssd_stop
case "$supervisor" in
@@ -176,7 +177,7 @@ default_stop()
$func
}
default_status()
status()
{
local func=ssd_status
case "$supervisor" in
@@ -190,26 +191,6 @@ default_status()
$func
}
# Template start / stop / status functions
# package init scripts may override these, but the bodies are as minimal as
# possible, so that the init scripts can creatively wrap default_*
# functions.
start()
{
default_start
}
stop()
{
default_stop
}
status()
{
default_status
}
# Start debug output
yesno $RC_DEBUG && set -x
# Load configuration settings. First the global ones, then any

View File

@@ -85,40 +85,6 @@ get_bootparam()
return 1
}
get_bootparam_value()
{
local match="$1" which_value="$2" sep="$3" result value
if [ -n "$match" -a -r /proc/cmdline ]; then
set -- $(cat /proc/cmdline)
while [ -n "$1" ]; do
case "$1" in
$match=*)
value="${1##*=}"
case "$which_value" in
all)
[ -z "$sep" ] && sep=' '
if [ -z "$result" ]; then
result="$value"
else
result="${result}${sep}${value}"
fi
;;
last)
result="$value"
;;
*)
result="$value"
break
;;
esac
;;
esac
shift
done
fi
echo $result
}
# Called from openrc-run.sh or gendepends.sh
_get_containers() {
local c

457
sh/tmpfiles.sh.in Normal file
View File

@@ -0,0 +1,457 @@
#!/bin/sh
# This is a reimplementation of the systemd tmpfiles.d code
# Control creation, deletion, and cleaning of volatile and temporary files
#
# Copyright (c) 2012 Gentoo Foundation
# Released under the 2-clause BSD license.
#
# This instance is a pure-POSIX sh version, written by Robin H Johnson
# <robbat2@gentoo.org>, based on the Arch Linux version as of 2012/01/01:
# http://projects.archlinux.org/initscripts.git/tree/arch-tmpfiles
#
# See the tmpfiles.d manpage as well:
# https://www.freedesktop.org/software/systemd/man/tmpfiles.d.html
# This script should match the old manpage
# http://0pointer.de/public/systemd-man/tmpfiles.d.html
# as of 2012/03/12 and also implements some more recent features
#
DRYRUN=0
CHECKPATH="@LIBEXECDIR@/bin/checkpath"
checkprefix() {
n=$1
shift
for x in $@; do
case $n in
${x}*) return 0 ;;
esac
done
return 1
}
warninvalid() {
printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" "$LINENUM" "$FILE"
error=$(( error+1 ))
} >&2
invalid_option() {
printf "tmpfiles: invalid option '%s'\n" "$1" >&2
exit 1
}
dryrun_or_real() {
local dryrun=
[ $DRYRUN -eq 1 ] && dryrun=echo
$dryrun "$@"
}
_chattr() {
local attr="$2"
case $attr in
[+-=]*) : ;;
'') return ;;
*) attr="+$attr" ;;
esac
local IFS=
dryrun_or_real chattr $1 "$attr" -- $3
}
relabel() {
local path
local paths=$1 mode=$2 uid=$3 gid=$4
for path in ${paths}; do
if [ -e "$path" ]; then
[ -x /sbin/restorecon ] && dryrun_or_real restorecon $CHOPTS "$path"
[ $uid != '-' ] && dryrun_or_real chown $CHOPTS "$uid" "$path"
[ $gid != '-' ] && dryrun_or_real chgrp $CHOPTS "$gid" "$path"
[ $mode != '-' ] && dryrun_or_real chmod $CHOPTS "$mode" "$path"
fi
done
}
splitpath() {
local path=$1
while [ -n "$path" ]; do
echo $path
path=${path%/*}
done
}
_restorecon() {
local path=$1
if [ -x /sbin/restorecon ]; then
dryrun_or_real restorecon -F $(splitpath "$path")
fi
}
_b() {
# Create a block device node if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
if [ ! -e "$path" ]; then
dryrun_or_real mknod -m $mode $path b ${arg%:*} ${arg#*:}
_restorecon "$path"
dryrun_or_real chown $uid:$gid $path
fi
}
_c() {
# Create a character device node if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
if [ ! -e "$path" ]; then
dryrun_or_real mknod -m $mode $path c ${arg%:*} ${arg#*:}
_restorecon "$path"
dryrun_or_real chown $uid:$gid $path
fi
}
_C() {
# recursively copy a file or directory
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
if [ ! -e "$path" ]; then
dryrun_or_real cp -r "$arg" "$path"
_restorecon "$path"
[ $uid != '-' ] && dryrun_or_real chown "$uid" "$path"
[ $gid != '-' ] && dryrun_or_real chgrp "$gid" "$path"
[ $mode != '-' ] && dryrun_or_real chmod "$mode" "$path"
fi
}
_f() {
# Create a file if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ $CREATE -gt 0 ] || return 0
if [ ! -e "$path" ]; then
dryrun_or_real $CHECKPATH -fq -m "$mode" -o "$uid:$gid" "$path"
[ -z "$arg" ] || _w "$@"
fi
}
_F() {
# Create or truncate a file
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ $CREATE -gt 0 ] || return 0
dryrun_or_real $CHECKPATH -Fq -m "$mode" -o "$uid:$gid" "$path"
[ -z "$arg" ] || _w "$@"
}
_d() {
# Create a directory if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4
[ $CREATE -gt 0 ] || return 0
if [ ! -d "$path" ]; then
dryrun_or_real mkdir -p "$path" 2>/dev/null
_restorecon "$path"
dryrun_or_real $CHECKPATH -dq -m "$mode" -o "$uid:$gid" "$path"
fi
}
_D() {
# Create or empty a directory
local path=$1 mode=$2 uid=$3 gid=$4
if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then
dryrun_or_real find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} +
_restorecon "$path"
fi
if [ $CREATE -gt 0 ]; then
dryrun_or_real mkdir -p "$path" 2>/dev/null
_restorecon "$path"
dryrun_or_real $CHECKPATH -Dq -m "$mode" -o "$uid:$gid" "$path"
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 "$@"
}
_q() {
# Similar to _v. However, make sure that the subvolume will be assigned
# to the same higher-level quota groups as the subvolume it has
# been created in.
# TODO: Implement btrfs subvol creation.
_d "$@"
}
_Q() {
# Similar to q. However, instead of copying the higher-level quota
# group assignments from the parent as-is, the lowest quota group
# of the parent subvolume is determined that is not the
# leaf quota group.
# TODO: Implement btrfs subvol creation.
_d "$@"
}
_h() {
# Set file/directory attributes. Lines of this type accept
# shell-style globs in place of normal path names.
# The format of the argument field matches chattr
_chattr '' "$6" "$1"
}
_H() {
# Recursively set file/directory attributes. Lines of this type accept
# shell-syle globs in place of normal path names.
# Does not follow symlinks
_chattr -R "$6" "$1"
}
_L() {
# Create a symlink if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ ! -e "$path" ] && dryrun_or_real ln -s "$arg" "$path"
_restorecon "$path"
}
_p() {
# Create a named pipe (FIFO) if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4
[ $CREATE -gt 0 ] || return 0
if [ ! -p "$path" ]; then
dryrun_or_real $CHECKPATH -pq -m $mode -o "$uid:$gid" "$path"
fi
}
_x() {
# Ignore a path during cleaning. Use this type to exclude paths from clean-up as
# controlled with the Age parameter. Note that lines of this type do not
# influence the effect of r or R lines. Lines of this type accept shell-style
# globs in place of of normal path names.
:
# XXX: we don't implement this
}
_X() {
# Ignore a path during cleanup. Use this type to prevent path
# removal as controled with the age parameter. Note that if path is
# a directory, the content of the directory is not excluded from
# clean-up, only the directory itself.
# Lines of this type accept shell-style globs in place of normal path names.
:
# XXX: we don't implement this
}
_r() {
# Remove a file or directory if it exists. This may not be used to remove
# non-empty directories, use R for that. Lines of this type accept shell-style
# globs in place of normal path names.
local path
local paths=$1
[ $REMOVE -gt 0 ] || return 0
for path in ${paths}; do
if [ -f "$path" ]; then
dryrun_or_real rm -f "$path"
elif [ -d "$path" ]; then
dryrun_or_real rmdir "$path"
fi
done
}
_R() {
# Recursively remove a path and all its subdirectories (if it is a directory).
# Lines of this type accept shell-style globs in place of normal path names.
local path
local paths=$1
[ $REMOVE -gt 0 ] || return 0
for path in ${paths}; do
[ -d "$path" ] && dryrun_or_real rm -rf --one-file-system "$path"
done
}
_w() {
# Write the argument parameter to a file, if it exists.
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
if [ -f "$path" ]; then
if [ $DRYRUN -eq 1 ]; then
echo "echo \"$arg\" >>\"$path\""
else
echo "$arg" >>"$path"
fi
fi
}
_z() {
# Set ownership, access mode and relabel security context of a file or
# directory if it exists. Lines of this type accept shell-style globs in
# place of normal path names.
[ $CREATE -gt 0 ] || return 0
relabel "$@"
}
_Z() {
# Recursively set ownership, access mode and relabel security context of a
# path and all its subdirectories (if it is a directory). Lines of this type
# accept shell-style globs in place of normal path names.
[ $CREATE -gt 0 ] || return 0
CHOPTS=-R relabel "$@"
}
BOOT=0 CREATE=0 REMOVE=0 CLEAN=0 VERBOSE=0 DRYRUN=0 error=0 LINENO=0
EXCLUDE=
PREFIX=
FILES=
while [ $# -gt 0 ]; do
case $1 in
--boot) BOOT=1 ;;
--create) CREATE=1 ;;
--remove) REMOVE=1 ;;
--clean) CLEAN=1 ;; # TODO: Not implemented
--verbose) VERBOSE=1 ;;
--dryrun|--dry-run) DRYRUN=1 ;;
--exclude-prefix=*) EXCLUDE="${EXCLUDE}${1##--exclude-prefix=} " ;;
--prefix=*) PREFIX="${PREFIX}${1##--prefix=} " ;;
-*) invalid_option "$1" ;;
*) FILES="${FILES} $1"
esac
shift
done
if [ $(( CLEAN )) -eq 1 ] ; then
printf '%s clean mode is not implemented\n' "${0##*/}"
exit 1
fi
if [ "$CREATE$REMOVE" = '00' ]; then
printf 'usage: %s [--exclude-prefix=path] [--prefix=path] [--boot] [--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}"
exit 1
fi
# XXX: The harcoding of /usr/lib/ is an explicit choice by upstream
tmpfiles_dirs='/usr/lib/tmpfiles.d /run/tmpfiles.d /etc/tmpfiles.d'
tmpfiles_basenames=''
if [ -z "${FILES}" ]; then
# Build a list of sorted unique basenames
# directories declared later in the tmpfiles_d array will override earlier
# directories, on a per file basename basis.
# `/etc/tmpfiles.d/foo.conf' supersedes `/usr/lib/tmpfiles.d/foo.conf'.
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
for d in ${tmpfiles_dirs} ; do
[ -d $d ] && for f in ${d}/*.conf ; do
case "${f##*/}" in
systemd.conf|systemd-*.conf) continue;;
esac
[ -f $f ] && tmpfiles_basenames="${tmpfiles_basenames}\n${f##*/}"
done # for f in ${d}
done # for d in ${tmpfiles_dirs}
FILES="$(printf "${tmpfiles_basenames}\n" | sort -u )"
fi
tmpfiles_d=''
for b in ${FILES} ; do
if [ "${b##*/}" != "${b}" ]; then
# The user specified a path on the command line
# Just pass it through unaltered
tmpfiles_d="${tmpfiles_d} ${b}"
else
real_f=''
for d in $tmpfiles_dirs ; do
f=${d}/${b}
[ -f "${f}" ] && real_f=$f
done
[ -f "${real_f}" ] && tmpfiles_d="${tmpfiles_d} ${real_f}"
fi
done
error=0
# loop through the gathered fragments, sorted globally by filename.
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
FILE=
for FILE in $tmpfiles_d ; do
LINENUM=0
### FILE FORMAT ###
# XXX: We ignore the 'Age' parameter
# 1 2 3 4 5 6 7
# Cmd Path Mode UID GID Age Argument
# d /run/user 0755 root root 10d -
# Mode, UID, GID, Age, Argument may be omitted!
# If Cmd ends with !, the line is only processed if --boot is passed
# XXX: Upstream says whitespace is NOT permitted in the Path argument.
# But IS allowed when globs are expanded for the x/r/R/z/Z types.
while read cmd path mode uid gid age arg; do
LINENUM=$(( LINENUM+1 ))
FORCE=0
# Unless we have both command and path, skip this line.
if [ -z "$cmd" -o -z "$path" ]; then
continue
fi
case $cmd in
\#*) continue ;;
esac
while [ ${#cmd} -gt 1 ]; do
case $cmd in
*!) cmd=${cmd%!}; [ "$BOOT" -eq "1" ] || continue 2 ;;
*+) cmd=${cmd%+}; FORCE=1; ;;
*) warninvalid ; continue 2 ;;
esac
done
# whine about invalid entries
case $cmd in
f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z|q|Q|h|H) ;;
*) warninvalid ; continue ;;
esac
# fall back on defaults when parameters are passed as '-'
if [ "$mode" = '-' -o "$mode" = '' ]; then
case "$cmd" in
p|f|F) mode=0644 ;;
d|D|v) mode=0755 ;;
C|z|Z|x|r|R|L) ;;
esac
fi
[ "$uid" = '-' -o "$uid" = '' ] && uid=0
[ "$gid" = '-' -o "$gid" = '' ] && gid=0
[ "$age" = '-' -o "$age" = '' ] && age=0
[ "$arg" = '-' -o "$arg" = '' ] && arg=''
set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg"
[ -n "$EXCLUDE" ] && checkprefix $path $EXCLUDE && continue
[ -n "$PREFIX" ] && ! checkprefix $path $PREFIX && continue
if [ $FORCE -gt 0 ]; then
case $cmd in
p|L|c|b) [ -f "$path" ] && dryrun_or_real rm -f "$path"
esac
fi
[ "$VERBOSE" -eq "1" ] && echo _$cmd "$@"
_$cmd "$@"
rc=$?
if [ "${DRYRUN}" -eq "0" ]; then
[ $rc -ne 0 ] && error=$((error + 1))
fi
done <$FILE
done
exit $error
# vim: set ts=2 sw=2 sts=2 noet ft=sh:

View File

@@ -3,5 +3,9 @@
SUBDIR= test libeinfo librc rc
ifeq (${MKTOOLS},yes)
SUBDIR+= tools
endif
MK= ../mk
include ${MK}/subdir.mk

View File

@@ -19,7 +19,6 @@
#include "queue.h"
#include "librc.h"
#include "helpers.h"
bool
rc_yesno(const char *value)
@@ -119,7 +118,7 @@ rc_getline(char **line, size_t *len, FILE *fp)
librc_hidden_def(rc_getline)
char *
rc_proc_getent(const char *ent _unused)
rc_proc_getent(const char *ent)
{
#ifdef __linux__
FILE *fp;

View File

@@ -19,7 +19,6 @@ const char librc_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
#include "queue.h"
#include "librc.h"
#include <helpers.h>
#ifdef __FreeBSD__
# include <sys/sysctl.h>
#endif
@@ -233,7 +232,7 @@ detect_prefix(const char *systype)
}
static const char *
detect_container(const char *systype _unused)
detect_container(const char *systype)
{
#ifdef __FreeBSD__
if (systype) {
@@ -297,7 +296,7 @@ detect_container(const char *systype _unused)
}
static const char *
detect_vm(const char *systype _unused)
detect_vm(const char *systype)
{
#ifdef __NetBSD__
if (systype) {
@@ -368,12 +367,11 @@ rc_parse_service_state(RC_SERVICE state)
* specified runlevel in dependency order, including the
* specified runlevel. */
static void
get_runlevel_chain(const char *runlevel, RC_STRINGLIST *level_list, RC_STRINGLIST *ancestor_list)
get_runlevel_chain(const char *runlevel, RC_STRINGLIST *level_list)
{
char path[PATH_MAX];
RC_STRINGLIST *dirs;
RC_STRING *d, *parent;
const char *nextlevel;
RC_STRING *d, *dn;
/*
* If we haven't been passed a runlevel or a level list, or
@@ -397,27 +395,8 @@ get_runlevel_chain(const char *runlevel, RC_STRINGLIST *level_list, RC_STRINGLIS
*/
snprintf(path, sizeof(path), "%s/%s", RC_RUNLEVELDIR, runlevel);
dirs = ls_dir(path, LS_DIR);
TAILQ_FOREACH(d, dirs, entries) {
nextlevel = d->value;
/* Check for loop */
if (rc_stringlist_find(ancestor_list, nextlevel)) {
fprintf(stderr, "Loop detected in stacked runlevels attempting to enter runlevel %s!\n",
nextlevel);
fprintf(stderr, "Ancestors:\n");
TAILQ_FOREACH(parent, ancestor_list, entries)
fprintf(stderr, "\t%s\n", parent->value);
exit(1);
}
/* Add new ancestor */
rc_stringlist_add(ancestor_list, nextlevel);
get_runlevel_chain(nextlevel, level_list, ancestor_list);
rc_stringlist_delete(ancestor_list, nextlevel);
}
rc_stringlist_free(dirs);
TAILQ_FOREACH_SAFE(d, dirs, entries, dn)
get_runlevel_chain(d->value, level_list);
}
bool
@@ -521,12 +500,9 @@ librc_hidden_def(rc_runlevel_unstack)
RC_STRINGLIST *
rc_runlevel_stacks(const char *runlevel)
{
RC_STRINGLIST *stack, *ancestor_list;
RC_STRINGLIST *stack;
stack = rc_stringlist_new();
ancestor_list = rc_stringlist_new();
rc_stringlist_add(ancestor_list, runlevel);
get_runlevel_chain(runlevel, stack, ancestor_list);
rc_stringlist_free(ancestor_list);
get_runlevel_chain(runlevel, stack);
return stack;
}
librc_hidden_def(rc_runlevel_stacks)

View File

@@ -46,7 +46,6 @@
#include "_usage.h"
const char *applet = NULL;
const char *procmounts = "/proc/mounts";
const char *extraopts = "[mount1] [mount2] ...";
const char *getoptstring = "f:F:n:N:o:O:p:P:iste:E:" getoptstring_COMMON;
const struct option longopts[] = {
@@ -324,7 +323,7 @@ find_mounts(struct args *args)
int netdev;
RC_STRINGLIST *list;
if ((fp = fopen(procmounts, "r")) == NULL)
if ((fp = fopen("/proc/self/mounts", "r")) == NULL)
eerrorx("getmntinfo: %s", strerror(errno));
list = rc_stringlist_new();

View File

@@ -334,19 +334,7 @@ void selinux_setup(char **argv)
/* extract the type from the context */
curr_con = context_new(curr_context);
if (!curr_con) {
free(curr_context);
goto out;
}
curr_t = context_type_get(curr_con);
if (!curr_t) {
context_free(curr_con);
free(curr_context);
goto out;
}
curr_t = xstrdup(curr_t);
curr_t = xstrdup(context_type_get(curr_con));
/* dont need them anymore so free() now */
context_free(curr_con);
free(curr_context);

View File

@@ -64,7 +64,6 @@ static struct pam_conv conv = { NULL, NULL};
#include "rc.h"
#include "rc-misc.h"
#include "_usage.h"
#include "helpers.h"
const char *applet = NULL;
const char *extraopts = NULL;
@@ -154,9 +153,7 @@ extern char **environ;
# define SYS_ioprio_set __NR_ioprio_set
#endif
#if !defined(__DragonFly__)
static inline int ioprio_set(int which _unused,
int who _unused,
int ioprio _unused)
static inline int ioprio_set(int which, int who, int ioprio)
{
#ifdef SYS_ioprio_set
return syscall(SYS_ioprio_set, which, who, ioprio);
@@ -197,45 +194,26 @@ parse_signal(const char *sig)
int signal;
} SIGNALPAIR;
#define signalpair_item(name) { #name, SIG##name },
static const SIGNALPAIR signallist[] = {
signalpair_item(HUP)
signalpair_item(INT)
signalpair_item(QUIT)
signalpair_item(ILL)
signalpair_item(TRAP)
signalpair_item(ABRT)
signalpair_item(BUS)
signalpair_item(FPE)
signalpair_item(KILL)
signalpair_item(USR1)
signalpair_item(SEGV)
signalpair_item(USR2)
signalpair_item(PIPE)
signalpair_item(ALRM)
signalpair_item(TERM)
signalpair_item(CHLD)
signalpair_item(CONT)
signalpair_item(STOP)
signalpair_item(TSTP)
signalpair_item(TTIN)
signalpair_item(TTOU)
signalpair_item(URG)
signalpair_item(XCPU)
signalpair_item(XFSZ)
signalpair_item(VTALRM)
signalpair_item(PROF)
#ifdef SIGWINCH
signalpair_item(WINCH)
#endif
#ifdef SIGIO
signalpair_item(IO)
#endif
#ifdef SIGPWR
signalpair_item(PWR)
#endif
signalpair_item(SYS)
{ "ABRT", SIGABRT },
{ "ALRM", SIGALRM },
{ "FPE", SIGFPE },
{ "HUP", SIGHUP },
{ "ILL", SIGILL },
{ "INT", SIGINT },
{ "KILL", SIGKILL },
{ "PIPE", SIGPIPE },
{ "QUIT", SIGQUIT },
{ "SEGV", SIGSEGV },
{ "TERM", SIGTERM },
{ "USR1", SIGUSR1 },
{ "USR2", SIGUSR2 },
{ "CHLD", SIGCHLD },
{ "CONT", SIGCONT },
{ "STOP", SIGSTOP },
{ "TSTP", SIGTSTP },
{ "TTIN", SIGTTIN },
{ "TTOU", SIGTTOU },
{ "NULL", 0 },
};
@@ -490,7 +468,7 @@ run_stop_schedule(const char *exec, const char *const *argv,
if (tkilled == 0) {
if (progressed)
printf("\n");
eerror("%s: no matching processes found", applet);
eerror("%s: no matching processes found", applet);
}
return tkilled;
}
@@ -718,17 +696,17 @@ int main(int argc, char **argv)
if (sscanf(tmp, "%d", &nicelevel) != 1)
eerror("%s: invalid nice level `%s' (SSD_NICELEVEL)",
applet, tmp);
if ((tmp = getenv("SSD_IONICELEVEL"))) {
int n = sscanf(tmp, "%d:%d", &ionicec, &ioniced);
if (n != 1 && n != 2)
eerror("%s: invalid ionice level `%s' (SSD_IONICELEVEL)",
applet, tmp);
if (ionicec == 0)
ioniced = 0;
else if (ionicec == 3)
ioniced = 7;
ionicec <<= 13; /* class shift */
}
if ((tmp = getenv("SSD_IONICELEVEL"))) {
int n = sscanf(tmp, "%d:%d", &ionicec, &ioniced);
if (n != 1 && n != 2)
eerror("%s: invalid ionice level `%s' (SSD_IONICELEVEL)",
applet, tmp);
if (ionicec == 0)
ioniced = 0;
else if (ionicec == 3)
ioniced = 7;
ionicec <<= 13; /* class shift */
}
/* Get our user name and initial dir */
p = getenv("USER");

View File

@@ -62,7 +62,6 @@ static struct pam_conv conv = { NULL, NULL};
#include "rc.h"
#include "rc-misc.h"
#include "_usage.h"
#include "helpers.h"
const char *applet = NULL;
const char *extraopts = NULL;
@@ -125,8 +124,7 @@ extern char **environ;
# define SYS_ioprio_set __NR_ioprio_set
#endif
#if !defined(__DragonFly__)
static inline int ioprio_set(int which _unused, int who _unused,
int ioprio _unused)
static inline int ioprio_set(int which, int who, int ioprio)
{
#ifdef SYS_ioprio_set
return syscall(SYS_ioprio_set, which, who, ioprio);
@@ -664,7 +662,7 @@ int main(int argc, char **argv)
fp = fopen(pidfile, "w");
if (! fp)
eerrorx("%s: fopen `%s': %s", applet, pidfile, strerror(errno));
fclose(fp);
fclose(fp);
child_pid = fork();
if (child_pid == -1)

5
src/tools/Makefile Normal file
View File

@@ -0,0 +1,5 @@
DIR= ${UPREFIX}/bin
BIN= deptree2dot
MK= ../../mk
include ${MK}/scripts.mk

View File

@@ -1,20 +0,0 @@
# Copyright (c) 2017 the OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
#
# This file is part of OpenRC. It is subject to the license terms in
# the LICENSE file found in the top-level directory of this
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.
MK= ../mk
include ${MK}/os.mk
SUBDIR= deptree2dot init.d.examples openvpn
ifeq (${OS},Linux)
SUBDIR+= sysvinit
endif
include ${MK}/subdir.mk

View File

@@ -1,9 +0,0 @@
MK= ../../mk
include ${MK}/os.mk
DIR= ${DATADIR}/support/deptree2dot
BIN= deptree2dot
INC= README.md
include ${MK}/scripts.mk

View File

@@ -1,11 +0,0 @@
# deptree2dot - Graph the OpenRC Dependency Tree
This utility can be used to graph the OpenRC dependency tree. It
requires perl5.x and converts the tree to a .dot file which can be
processed by graphviz.
Example usage:
$ chmod +x deptree2dot
$deptree2dot > deptree.dot
$deptree2dot | dot -Tpng -o deptree.png

View File

@@ -1,3 +0,0 @@
The service scripts in this directory are meant as examples only.
They are not installed by default as the scripts will need tweaking on a
per distro basis. They are also non essential to the operation of the system.

View File

@@ -1,9 +0,0 @@
MK= ../../mk
include ${MK}/os.mk
DIR= ${DATADIR}/support/openvpn
BIN= down.sh up.sh
INC= README.md
include ${MK}/scripts.mk

View File

@@ -1,8 +0,0 @@
MK= ../../mk
include ${MK}/os.mk
DIR= ${DATADIR}/support/sysvinit
INC= inittab README.md
include ${MK}/scripts.mk

View File

@@ -9,10 +9,6 @@ srcdir=${srcdir:-.}
top_builddir=${top_builddir:-${top_srcdir}}
builddir=${builddir:-${srcdir}}
LD_LIBRARY_PATH=${top_builddir}/src/libeinfo:${top_builddir}/src/librc:${LD_LIBRARY_PATH}
PATH=${top_builddir}/src/rc:${PATH}
export LD_LIBRARY_PATH PATH
if [ ! -f ${top_srcdir}/sh/functions.sh ] ; then
echo "functions.sh not yet created !?" 1>&2
exit 1
@@ -21,3 +17,7 @@ elif ! . ${top_srcdir}/sh/functions.sh; then
exit 1
fi
LD_LIBRARY_PATH=${top_builddir}/src/libeinfo:${top_builddir}/src/librc:${LD_LIBRARY_PATH}
PATH=${top_builddir}/src/rc:${PATH}
export LD_LIBRARY_PATH PATH