Compare commits

..

9 Commits

Author SHA1 Message Date
Robin H. Johnson
14b7f0e7fa I flubbed up the merge on the new fixes, releasing a 0.9.8.4 with the actual fixes. 2012-01-30 20:20:24 +00:00
Robin H. Johnson
e45cd15930 Merge branch 'openrc-0.9.8.x' of git+ssh://git.overlays.gentoo.org/proj/openrc into openrc-0.9.8.x 2012-01-30 20:12:32 +00:00
Robin H. Johnson
e4ce98b3b4 Bugfix release, tracker bug #401555. 2012-01-30 19:54:55 +00:00
William Hubbs
8a41537f68 Revert "Net: do not bring down interfaces during shutdown"
This reverts commit 6d5a2d5f9e.
There are interfaces, such as adsl and ppp interfaces which need to be
brought down. Also, the WOL setting is a good case for bringingdown
interfaces.

Reported-by: Miguel Sanjurjo <Miguel.Sanjurjo @gmail.com>
X-Gentoo-Bug: 401269
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=401269
2012-01-30 12:12:58 -06:00
William Hubbs
d8a5d35760 cgroups: make sure /sys/fs/cgroup is a mount point
We need to make sure this directory is a mount point before we add the
control groups.

Reported-by: Andrej Filipcic <andrej.filipcic@ijs.si>
X-Gentoo-Bug: 400903
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=400903
2012-01-30 10:12:08 -06:00
William Hubbs
cc8a9cdab9 Cgroups: do not update mtab when mounting control groups
This is based on a patch submitted by the reporter; however, there was
another mount command which needed -n as well so it was added to the
patch.

Reported-by: Ben Kohler <bkohler@gmail.com>
X-Gentoo-Bug: 400967
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=400967
2012-01-30 09:45:49 -06:00
Robin H. Johnson
04e6696782 Bump minor version. 2012-01-25 10:46:58 -08:00
Robin H. Johnson
85193674da net/bonding: Fix which interface IPs get added to.
The previous bonding change of ensuring interfaces were down to add
slave interfaces, but it clobbered the IFACE variable, because it was
being passed to a bash function rather than a command.

Cherry-picked from master/c92f0ab702.

X-Gentoo-Bug: 400613
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=400613
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-01-25 10:46:25 -08:00
Robin H. Johnson
a73c26a70b net/ethtool: Fix program call.
I missed removing a call to the old ethtool function wrapper that was
made unneeded by commit d02d3af02.

Cherry-picked from master/fdc8849e.

X-Gentoo-Bug: 399037
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=399037
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-01-25 10:38:09 -08:00
97 changed files with 353 additions and 762 deletions

View File

@@ -4,7 +4,7 @@
include Makefile.inc include Makefile.inc
SUBDIR= conf.d doc etc init.d local.d sysctl.d man net scripts sh src SUBDIR= conf.d doc etc init.d local.d man net scripts sh src
# Build pkgconfig or not # Build pkgconfig or not
MKPKGCONFIG?= yes MKPKGCONFIG?= yes

View File

@@ -1,3 +1,3 @@
NAME= openrc NAME= openrc
VERSION= 0.9.9.1 VERSION= 0.9.8.4
PKG= ${NAME}-${VERSION} PKG= ${NAME}-${VERSION}

15
README
View File

@@ -12,6 +12,7 @@ LIBNAME=lib64
DESTDIR=/tmp/openrc-image DESTDIR=/tmp/openrc-image
MKPAM=pam MKPAM=pam
MKPKGCONFIG=no MKPKGCONFIG=no
MKRCSYS=prefix
MKSELINUX=yes MKSELINUX=yes
MKSTATICLIBS=no MKSTATICLIBS=no
MKTERMCAP=ncurses MKTERMCAP=ncurses
@@ -33,6 +34,20 @@ LOCAL_PREFIX should be set when to where user maintained packages are.
Only set LOCAL_PREFIX if different from PKG_PREFIX. Only set LOCAL_PREFIX if different from PKG_PREFIX.
PREFIX should be set when OpenRC is not installed to /. PREFIX should be set when OpenRC is not installed to /.
MKRCSYS should be set only if you need to specify a default system
subtype. The subtype should be set to match the type of environment the
file is installed into, not the virtualization the environment is
capable of handling. Here is a list of subtypes and their meanings.
jail FreeBSD jail
lxc Linux container
openvz Linux OpenVZ
prefix Linux and *BSD prefix system
uml UsermodeLinux
vserver Linux vserver
xen0 Linux and NetBSD xen0 Domain
xenU Linux and NetBSD xenU Domain
If any of the following files exist then we do not overwrite them If any of the following files exist then we do not overwrite them
/etc/devd.conf /etc/devd.conf
/etc/rc /etc/rc

View File

@@ -4,14 +4,18 @@
# you should set it to "local". # you should set it to "local".
clock="UTC" clock="UTC"
# If you want to set the Hardware Clock to the current System Time
# (software clock) during shutdown, then say "YES" here.
# You normally don't need to do this if you run a ntp daemon.
clock_systohc="NO"
# If you want to set the system time to the current hardware clock # If you want to set the system time to the current hardware clock
# during bootup, then say "YES" here. You do not need this if you are # during bootup, then say "YES" here. You do not need this if you are
# running a modern kernel with CONFIG_RTC_HCTOSYS set to y. # running a modern kernel with CONFIG_RTC_HCTOSYS set to y.
#clock_hctosys="YES" # Also, be aware that if you set this to "NO", the system time will
# never be saved to the hardware clock unless you set
# If you do not want to set the hardware clock to the current system # clock_systohc="YES" above.
# time (software clock) during shutdown, set this to no. clock_hctosys="YES"
#clock_systohc="YES"
# If you wish to pass any other arguments to hwclock during bootup, # If you wish to pass any other arguments to hwclock during bootup,
# you may do so here. Alpha users may wish to use --arc or --srm here. # you may do so here. Alpha users may wish to use --arc or --srm here.

View File

@@ -586,15 +586,10 @@
#vlan_start_eth0="no" #vlan_start_eth0="no"
# If you do the above then you may want to depend on eth0 like so # If you do the above then you may want to depend on eth0 like so
# rc_net_vlan1_need="net.eth0" # rc_need_vlan1="net.eth0"
# NOTE: depend functions only work in /etc/conf.d/net # NOTE: depend functions only work in /etc/conf.d/net
# and not in profile configs such as /etc/conf.d/net.foo # and not in profile configs such as /etc/conf.d/net.foo
# Also, you might want to make eth0 not provide net in this case so that
# dependent services will start when the vlan is active instead of the
# physical interface.
# rc_net_eth0_provide="!net"
# MAC-VLAN support # MAC-VLAN support
# The following configuration can be used to create a new interface 'macvlan0' # The following configuration can be used to create a new interface 'macvlan0'
# linked to 'eth0' # linked to 'eth0'
@@ -623,7 +618,7 @@
# If any of the slaves require extra configuration - for example wireless or # If any of the slaves require extra configuration - for example wireless or
# ppp devices - we need to depend function on the bonded interfaces # ppp devices - we need to depend function on the bonded interfaces
#rc_net_bond0_need="net.eth0 net.eth1" #rc_need_bond0="net.eth0 net.eth1"
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
@@ -740,7 +735,7 @@
# If the link require extra configuration - for example wireless or # If the link require extra configuration - for example wireless or
# RFC 268 bridge - we need to depend on the bridge so they get # RFC 268 bridge - we need to depend on the bridge so they get
# configured correctly. # configured correctly.
#rc_net_ppp0_need="net.nas0" #rc_need_ppp0="net.nas0"
#WARNING: if MTU of the PPP interface is less than 1500 and you use this #WARNING: if MTU of the PPP interface is less than 1500 and you use this
#machine as a router, you should add the following rule to your firewall #machine as a router, you should add the following rule to your firewall
@@ -852,7 +847,7 @@
# If any of the ports require extra configuration - for example wireless or # If any of the ports require extra configuration - for example wireless or
# ppp devices - we need to depend on them like so. # ppp devices - we need to depend on them like so.
#rc_net_br0_need="net.eth0 net.eth1" #rc_need_br0="net.eth0 net.eth1"
# Below is an example of configuring the bridge # Below is an example of configuring the bridge
# Consult "man brctl" for more details # Consult "man brctl" for more details
@@ -903,7 +898,7 @@
# link_6to4="eth0" # Interface to base its addresses on # link_6to4="eth0" # Interface to base its addresses on
# config_6to4="ip6to4" # config_6to4="ip6to4"
# You may want to depend on eth0 like so # You may want to depend on eth0 like so
#rc_net_6to4_need="net.eth0" #rc_need_6to4="net.eth0"
# To ensure that eth0 is configured before 6to4. Of course, the tunnel could be # To ensure that eth0 is configured before 6to4. Of course, the tunnel could be
# any name and this also works for any configured interface. # any name and this also works for any configured interface.
# NOTE: If you're not using iproute2 then your 6to4 tunnel has to be called # NOTE: If you're not using iproute2 then your 6to4 tunnel has to be called

View File

@@ -24,5 +24,14 @@ SED_EXTRA= ${SED_EXTRA-${OS}}
include ${MK}/scripts.mk include ${MK}/scripts.mk
# We can't use "ifndef" here because that treats set-but-empty
# as not-set which is not what we want
MKRCSYS ?= automagicplease
ifeq (${MKRCSYS},automagicplease)
# If the user isn't picking a default, then have the
# config go with runtime automagic detection #357247
rc.conf: SED_EXTRA += -e '/^rc_sys=""/s:^:\#:'
MKRCSYS =
endif
rc.conf: rc.conf.in rc.conf.${OS} rc.conf: rc.conf.in rc.conf.${OS}
${SED} ${SED_REPLACE} ${SED_EXTRA} $^ > $@ ${SED} ${SED_REPLACE} ${SED_EXTRA} $^ > $@

View File

@@ -4,9 +4,11 @@
# This is the subsystem type. Valid options on FreeBSD: # This is the subsystem type. Valid options on FreeBSD:
# "" - nothing special # "" - nothing special
# "jail" - FreeBSD jails # "jail" - FreeBSD jails
# If this is commented out, automatic detection will be used. # "prefix" - Prefix
# If this is commented out, automatic detection will be attempted.
# Note that automatic detection does not work in a prefix environment.
# #
# This should be set to the value representing the environment this file is # This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of. # PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys="" rc_sys="@RC_SYS_DEFAULT@"

View File

@@ -5,15 +5,18 @@
# "" - nothing special # "" - nothing special
# "lxc" - Linux Containers # "lxc" - Linux Containers
# "openvz" - Linux OpenVZ # "openvz" - Linux OpenVZ
# "prefix" - Prefix
# "uml" - Usermode Linux # "uml" - Usermode Linux
# "vserver" - Linux vserver # "vserver" - Linux vserver
# "xen0" - Xen0 Domain # "xen0" - Xen0 Domain
# "xenU" - XenU Domain # "xenU" - XenU Domain
# If this is commented out, automatic detection will be used. # If this is commented out, automatic detection will be attempted.
# Note that autodetection will not work in a prefix environment or in a
# linux container.
# #
# This should be set to the value representing the environment this file is # This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of. # PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys="" rc_sys="@RC_SYS_DEFAULT@"
# This is the number of tty's used in most of the rc-scripts (like # This is the number of tty's used in most of the rc-scripts (like
# consolefont, numlock, etc ...) # consolefont, numlock, etc ...)

View File

@@ -3,11 +3,13 @@
# This is the subsystem type. Valid options on NetBSD: # This is the subsystem type. Valid options on NetBSD:
# "" - nothing special # "" - nothing special
# "prefix" - Prefix
# "xen0" - Xen0 Domain # "xen0" - Xen0 Domain
# "xenU" - XenU Domain # "xenU" - XenU Domain
# If this is commented out, automatic detection will be used. # If this is commented out, automatic detection will be attempted.
# Note that automatic detection does not work in a prefix environment.
# #
# This should be set to the value representing the environment this file is # This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of. # PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys="" rc_sys="@RC_SYS_DEFAULT@"

View File

@@ -1,18 +1,8 @@
# Global OpenRC configuration settings # Global OpenRC configuration settings
# Set to "YES" if you want the rc system to try and start services
# in parallel for a slight speed improvement. When running in parallel we
# prefix the service output with its name as the output will get
# jumbled up.
# WARNING: whilst we have improved parallel, it can still potentially lock
# the boot process. Don't file bugs about this unless you can supply
# patches that fix it without breaking other things!
#rc_parallel="NO"
# Set rc_interactive to "YES" and you'll be able to press the I key during # Set rc_interactive to "YES" and you'll be able to press the I key during
# boot so you can choose to start specific services. Set to "NO" to disable # boot so you can choose to start specific services. Set to "NO" to disable
# this feature. This feature is automatically disabled if rc_parallel is # this feature.
# set to YES.
#rc_interactive="YES" #rc_interactive="YES"
# If we need to drop to a shell, you can specify it here. # If we need to drop to a shell, you can specify it here.

1
init.d/.gitignore vendored
View File

@@ -11,7 +11,6 @@ network
root root
savecache savecache
swap swap
swapfiles
sysctl sysctl
urandom urandom
devfs devfs

View File

@@ -1,7 +1,7 @@
DIR= ${INITDIR} DIR= ${INITDIR}
SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \ SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \
network.in root.in savecache.in staticroute.in swap.in swapfiles.in \ network.in root.in savecache.in staticroute.in swap.in swclock.in \
swclock.in sysctl.in urandom.in ${SRCS-${OS}} sysctl.in urandom.in ${SRCS-${OS}}
BIN= ${OBJS} BIN= ${OBJS}
INSTALLAFTER= _installafter_net.lo INSTALLAFTER= _installafter_net.lo

View File

@@ -22,7 +22,7 @@ depend()
[ "$clock" != "UTC" -a ! -e /etc/wall_cmos_clock ]; then [ "$clock" != "UTC" -a ! -e /etc/wall_cmos_clock ]; then
need root need root
fi fi
keyword -jail keyword -jail -prefix
} }
start() start()

View File

@@ -7,7 +7,12 @@ depend()
need localmount need localmount
before logger before logger
after clock sysctl after clock sysctl
keyword -timeout keyword -prefix -timeout
}
dir_writable()
{
mkdir "$1"/.test.$$ 2>/dev/null && rmdir "$1"/.test.$$
} }
: ${wipe_tmp:=${WIPE_TMP:-yes}} : ${wipe_tmp:=${WIPE_TMP:-yes}}
@@ -20,7 +25,7 @@ cleanup_tmp_dir()
if ! [ -d "$dir" ]; then if ! [ -d "$dir" ]; then
mkdir -p "$dir" || return $? mkdir -p "$dir" || return $?
fi fi
checkpath -W "$dir" || return 1 dir_writable "$dir" || return 1
chmod a+rwt "$dir" 2> /dev/null chmod a+rwt "$dir" 2> /dev/null
cd "$dir" || return 1 cd "$dir" || return 1
if yesno $wipe_tmp; then if yesno $wipe_tmp; then
@@ -117,7 +122,7 @@ start()
migrate_to_run /var/run /run migrate_to_run /var/run /run
fi fi
if checkpath -W /var/run; then if dir_writable /var/run; then
ebegin "Creating user login records" ebegin "Creating user login records"
local xtra= local xtra=
[ "$RC_UNAME" = NetBSD ] && xtra=x [ "$RC_UNAME" = NetBSD ] && xtra=x
@@ -159,7 +164,7 @@ start()
cleanup_tmp_dir "$tmp" cleanup_tmp_dir "$tmp"
done done
if checkpath -W /tmp; then if dir_writable /tmp; then
# Make sure our X11 stuff have the correct permissions # Make sure our X11 stuff have the correct permissions
# Omit the chown as bootmisc is run before network is up # Omit the chown as bootmisc is run before network is up
# and users may be using lame LDAP auth #139411 # and users may be using lame LDAP auth #139411
@@ -172,7 +177,7 @@ start()
fi fi
if yesno $log_dmesg; then if yesno $log_dmesg; then
if $logw || checkpath -W /var/log; then if $logw || dir_writable /var/log; then
# Create an 'after-boot' dmesg log # Create an 'after-boot' dmesg log
if [ "$RC_SYS" != VSERVER -a "$RC_SYS" != OPENVZ ]; then if [ "$RC_SYS" != VSERVER -a "$RC_SYS" != OPENVZ ]; then
dmesg > /var/log/dmesg dmesg > /var/log/dmesg
@@ -181,6 +186,7 @@ start()
fi fi
fi fi
[ -w /etc/nologin ] && rm -f /etc/nologin
return 0 return 0
} }

View File

@@ -8,7 +8,7 @@ depend()
{ {
need localmount termencoding need localmount termencoding
after hotplug bootmisc after hotplug bootmisc
keyword -openvz -uml -vserver -xenu -lxc keyword -openvz -prefix -uml -vserver -xenu -lxc
} }
start() start()
@@ -54,7 +54,7 @@ start()
eend $retval eend $retval
# Store the last font so we can use it ASAP on boot # Store the last font so we can use it ASAP on boot
if [ $retval -eq 0 ] && checkpath -W "$RC_LIBEXECDIR"; then if [ $retval -eq 0 -a -w "$RC_LIBEXECDIR" ]; then
mkdir -p "$RC_LIBEXECDIR"/console mkdir -p "$RC_LIBEXECDIR"/console
for font in /usr/share/consolefonts/"$consolefont".*; do for font in /usr/share/consolefonts/"$consolefont".*; do
: :

View File

@@ -10,7 +10,7 @@ depend() {
need localmount need localmount
after bootmisc after bootmisc
before net.lo0 before net.lo0
keyword -jail keyword -jail -prefix
} }
start_pre() { start_pre() {

View File

@@ -6,7 +6,7 @@ description="Mount system critical filesystems in /dev."
depend() { depend() {
use dev use dev
keyword -vserver keyword -prefix -vserver
} }
start() { start() {

View File

@@ -6,7 +6,7 @@ description="Configures a specific kernel dump device."
depend() { depend() {
need swap need swap
keyword -jail keyword -jail -prefix
} }
start() { start() {

View File

@@ -9,7 +9,7 @@ _IFS="
depend() depend()
{ {
use dev clock modules use dev clock modules
keyword -jail -openvz -timeout -vserver -lxc keyword -jail -openvz -prefix -timeout -vserver -lxc
} }
_abort() { _abort() {

View File

@@ -9,7 +9,7 @@ depend()
{ {
use root use root
before devd net before devd net
keyword -jail keyword -jail -prefix
} }
_set() _set()

View File

@@ -5,7 +5,7 @@
description="Sets the hostname of the machine." description="Sets the hostname of the machine."
depend() { depend() {
keyword -lxc keyword -prefix -lxc
} }
start() start()

View File

@@ -28,7 +28,7 @@ depend()
else else
before * before *
fi fi
keyword -openvz -uml -vserver -xenu -lxc keyword -openvz -prefix -uml -vserver -xenu -lxc
} }
setupopts() setupopts()
@@ -94,7 +94,7 @@ start()
"$utc_cmd" != --utc -o \ "$utc_cmd" != --utc -o \
-n "$clock_args" ]; -n "$clock_args" ];
then then
if yesno ${clock_hctosys:-YES}; then if yesno $clock_hctosys; then
_hwclock --hctosys $utc_cmd $clock_args _hwclock --hctosys $utc_cmd $clock_args
else else
_hwclock --systz $utc_cmd $clock_args _hwclock --systz $utc_cmd $clock_args
@@ -111,7 +111,7 @@ stop()
{ {
# Don't tweak the hardware clock on LiveCD halt. # Don't tweak the hardware clock on LiveCD halt.
[ -n "$CDBOOT" ] && return 0 [ -n "$CDBOOT" ] && return 0
yesno ${clock_systohc:-YES} || return 0 yesno $clock_systohc || return 0
local retval=0 errstr="" local retval=0 errstr=""
setupopts setupopts

View File

@@ -8,7 +8,7 @@ depend()
{ {
need localmount termencoding need localmount termencoding
after bootmisc after bootmisc
keyword -openvz -uml -vserver -xenu -lxc keyword -openvz -prefix -uml -vserver -xenu -lxc
} }
start() start()
@@ -63,7 +63,7 @@ start()
fi fi
# Save the keymapping for use immediately at boot # Save the keymapping for use immediately at boot
if checkpath -W "$RC_LIBEXECDIR"; then if [ -w "$RC_LIBEXECDIR" ]; then
mkdir -p "$RC_LIBEXECDIR"/console mkdir -p "$RC_LIBEXECDIR"/console
dumpkeys >"$RC_LIBEXECDIR"/console/keymap dumpkeys >"$RC_LIBEXECDIR"/console/keymap
fi fi

View File

@@ -4,6 +4,11 @@
description="Kill all processes so we can unmount disks cleanly." description="Kill all processes so we can unmount disks cleanly."
depend()
{
keyword -prefix
}
start() start()
{ {
ebegin "Terminating remaining processes" ebegin "Terminating remaining processes"

View File

@@ -9,7 +9,7 @@ depend()
need fsck need fsck
use lvm modules mtab use lvm modules mtab
after lvm modules after lvm modules
keyword -jail -openvz -vserver -lxc keyword -jail -openvz -prefix -vserver -lxc
} }
start() start()

View File

@@ -7,7 +7,7 @@ extra_commands="restore"
depend() depend()
{ {
need localmount need localmount
keyword -jail keyword -jail -prefix
} }
restore() restore()

View File

@@ -7,7 +7,7 @@ description="Loads a user defined list of kernel modules."
depend() depend()
{ {
use isapnp use isapnp
keyword -openvz -vserver -lxc keyword -openvz -prefix -vserver -lxc
} }
start() start()

View File

@@ -7,7 +7,7 @@ description="Re-mount filesytems read-only for a clean reboot."
depend() depend()
{ {
need killprocs savecache need killprocs savecache
keyword -openvz -vserver -lxc keyword -prefix -openvz -vserver -lxc
} }
start() start()

View File

@@ -16,7 +16,7 @@ depend()
{ {
need localmount need localmount
after bootmisc after bootmisc
keyword -jail keyword -jail -prefix
} }
start() start()

View File

@@ -7,6 +7,7 @@ description="Update /etc/mtab to match what the kernel knows about"
depend() depend()
{ {
need root need root
keyword -prefix
} }
start() start()

View File

@@ -20,14 +20,12 @@ depend()
need localmount need localmount
after bootmisc after bootmisc
keyword -jail -vserver provide net
keyword -jail -prefix -vserver
case "${IFACE}" in case "${IFACE}" in
lo|lo0) provide lo;; lo|lo0);;
*) *) after net.lo net.lo0 dbus;;
after net.lo net.lo0 dbus
provide net
;;
esac esac
if [ "$(command -v "depend_${IFVAR}")" = "depend_${IFVAR}" ]; then if [ "$(command -v "depend_${IFVAR}")" = "depend_${IFVAR}" ]; then
@@ -39,8 +37,6 @@ depend()
eval prov=\$rc_${dep}_${IFVAR} eval prov=\$rc_${dep}_${IFVAR}
if [ -n "${prov}" ]; then if [ -n "${prov}" ]; then
${dep} ${prov} ${dep} ${prov}
ewarn "rc_${dep}_${IFVAR} is deprecated."
ewarn "Please use rc_net_${IFVAR}_${dep} instead."
fi fi
done done
} }

View File

@@ -35,7 +35,7 @@ depend()
need net $pmap need net $pmap
use afc-client amd autofs openvpn use afc-client amd autofs openvpn
use dns nfs nfsmount portmap rpcbind rpc.statd rpc.lockd use dns nfs nfsmount portmap rpcbind rpc.statd rpc.lockd
keyword -jail -vserver keyword -jail -prefix -vserver
} }
start() start()

View File

@@ -13,7 +13,7 @@ depend()
need localmount need localmount
after bootmisc after bootmisc
provide net provide net
keyword -jail -vserver keyword -jail -prefix -vserver
} }
uniqify() uniqify()

View File

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

View File

@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend() depend()
{ {
need localmount need localmount
keyword -openvz -vserver -lxc keyword -openvz -prefix -vserver -lxc
} }
_setleds() _setleds()

View File

@@ -11,7 +11,7 @@ extra_started_commands="reload"
depend() { depend() {
need localmount need localmount
keyword -jail keyword -jail -prefix
} }
start() start()

View File

@@ -12,7 +12,7 @@ depend()
need localmount need localmount
use logger use logger
after bootmisc after bootmisc
keyword -jail keyword -jail -prefix
} }
start_pre() start_pre()

View File

@@ -8,7 +8,7 @@ depend()
{ {
use modules devfs use modules devfs
need localmount need localmount
keyword -openvz -vserver -lxc keyword -openvz -prefix -vserver -lxc
} }
start() start()
@@ -20,29 +20,6 @@ start()
[ -e /proc/filesystems ] || return 0 [ -e /proc/filesystems ] || return 0
# Setup Kernel Support for miscellaneous Binary Formats
if [ -d /proc/sys/fs/binfmt_misc -a ! -e /proc/sys/fs/binfmt_misc/register ]; then
if grep -qs binfmt_misc /proc/filesystems; then
ebegin "Mounting misc binary format filesystem"
mount -t binfmt_misc -o nodev,noexec,nosuid \
binfmt_misc /proc/sys/fs/binfmt_misc
if eend $? ; then
local fmts
ebegin "Loading custom binary format handlers"
fmts=$(grep -hsv -e '^[#;]' -e '^[[:space:]]*$' \
/run/binfmt.d/*.conf \
@SYSCONFDIR@/binfmt.d/*.conf \
""/usr/lib/binfmt.d/*.conf)
if [ -n "${fmts}" ]; then
echo "${fmts}" > /proc/sys/fs/binfmt_misc/register
fi
eend $?
fi
fi
fi
[ "$RC_SYS" == "OPENVZ" ] && return 0
# Check what USB fs the kernel support. Currently # Check what USB fs the kernel support. Currently
# 2.5+ kernels, and later 2.4 kernels have 'usbfs', # 2.5+ kernels, and later 2.4 kernels have 'usbfs',
# while older kernels have 'usbdevfs'. # while older kernels have 'usbdevfs'.
@@ -60,6 +37,27 @@ start()
fi fi
fi fi
# Setup Kernel Support for miscellaneous Binary Formats
if [ -d /proc/sys/fs/binfmt_misc -a ! -e /proc/sys/fs/binfmt_misc/register ]; then
if grep -qs binfmt_misc /proc/filesystems; then
ebegin "Mounting misc binary format filesystem"
mount -t binfmt_misc -o nodev,noexec,nosuid \
binfmt_misc /proc/sys/fs/binfmt_misc
if eend $? ; then
local fmts
ebegin "Loading custom binary format handlers"
fmts=$(grep -hsv -e '^[#;]' -e '^[[:space:]]*$' \
/run/binfmt.d/*.conf \
"/etc"/binfmt.d/*.conf \
""/usr/lib/binfmt.d/*.conf)
if [ -n "${fmts}" ]; then
echo "${fmts}" > /proc/sys/fs/binfmt_misc/register
fi
eend $?
fi
fi
fi
# Setup Kernel Support for SELinux # Setup Kernel Support for SELinux
if [ -d /selinux ] && ! mountinfo -q /selinux; then if [ -d /selinux ] && ! mountinfo -q /selinux; then
if grep -qs selinuxfs /proc/filesystems; then if grep -qs selinuxfs /proc/filesystems; then

View File

@@ -7,6 +7,7 @@ depend()
need localmount net need localmount net
after * after *
before local before local
keyword -prefix
} }
start() start()

View File

@@ -7,47 +7,26 @@ description="Mount the root fs read/write"
depend() depend()
{ {
need fsck need fsck
keyword -jail -openvz -vserver -lxc keyword -jail -openvz -prefix -vserver -lxc
} }
start() start()
{ {
case ",$(fstabinfo -o /)," in case ",$(fstabinfo -o /)," in
*,ro,*) *,ro,*) return 0;;
;;
*)
# Check if the rootfs isn't already writable.
if checkpath -W /; then
rm -f /fastboot /forcefsck
else
ebegin "Remounting root filesystem read/write"
case "$RC_UNAME" in
Linux)
mount -n -o remount,rw /
;;
*)
mount -u -o rw /
;;
esac
eend $? "Root filesystem could not be mounted read/write"
if [ $? -eq 0 ]; then
rm -f /fastboot /forcefsck
fi
fi
;;
esac esac
ebegin "Remounting filesystems" if echo 2>/dev/null >/.test.$$; then
local mountpoint rm -f /.test.$$ /fastboot /forcefsck
for mountpoint in $(fstabinfo); do return 0
case "${mountpoint}" in fi
/)
;; ebegin "Remounting root filesystem read/write"
/*) case "$RC_UNAME" in
mountinfo -q "${mountpoint}" && \ Linux) mount -n -o remount,rw /;;
fstabinfo --remount "${mountpoint}" *) mount -u -o rw /;;
;; esac
esac if eend $? "Root filesystem could not be mounted read/write"; then
done rm -f /fastboot /forcefsck
eend 0 fi
} }

View File

@@ -7,7 +7,7 @@ description="Saves a kernel dump."
depend() depend()
{ {
need localmount need localmount
keyword -jail keyword -jail -prefix
} }
start() start()

View File

@@ -12,7 +12,7 @@ depend()
{ {
provide net provide net
use network use network
keyword -jail -vserver keyword -jail -prefix -vserver
} }
pre_flight_checks() pre_flight_checks()

View File

@@ -5,7 +5,7 @@
depend() depend()
{ {
before fsck before fsck
keyword -jail keyword -jail -prefix
} }
start() start()

View File

@@ -4,15 +4,14 @@
depend() depend()
{ {
before localmount need localmount
keyword -jail -openvz -vserver -lxc keyword -jail -openvz -prefix -vserver -lxc
} }
start() start()
{ {
ebegin "Activating swap devices" ebegin "Activating swap devices"
case "$RC_UNAME" in case "$RC_UNAME" in
Linux) swapon -a -e >/dev/null;;
NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;; NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;;
*) swapon -a >/dev/null;; *) swapon -a >/dev/null;;
esac esac
@@ -24,7 +23,7 @@ stop()
ebegin "Deactivating swap devices" ebegin "Deactivating swap devices"
# Try to unmount all tmpfs filesystems not in use, else a deadlock may # Try to unmount all tmpfs filesystems not in use, else a deadlock may
# occur. As $RC_SVCDIR may also be tmpfs we cd to it to lock it # occure. As $RC_SVCDIR may also be tmpfs we cd to it to lock it
cd "$RC_SVCDIR" cd "$RC_SVCDIR"
umount -a -t tmpfs 2>/dev/null umount -a -t tmpfs 2>/dev/null

View File

@@ -1,45 +0,0 @@
#!@PREFIX@/sbin/runscript
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
depend()
{
need localmount
keyword -jail -openvz -prefix -vserver -lxc
}
start()
{
ebegin "Activating additional swap space"
case "$RC_UNAME" in
NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;;
*) swapon -a >/dev/null;;
esac
eend 0 # If swapon has nothing todo it errors, so always return 0
}
stop()
{
ebegin "Deactivating additional swap space"
# Try to unmount all tmpfs filesystems not in use, else a deadlock may
# occur. As $RC_SVCDIR may also be tmpfs we cd to it to lock it
# fixme: Do we need this here since we are only unmounting swap files
# and loopback swap?
cd "$RC_SVCDIR"
umount -a -t tmpfs 2>/dev/null
case "$RC_UNAME" in
Linux)
while read filename type rest; do
case "$type" in
file) swapoff $filename >/dev/null;;
esac
case "$filename" in
/dev/loop*) swapoff $filename >/dev/null;;
esac
done < /proc/swaps
;;
esac
eend 0
}

View File

@@ -8,7 +8,7 @@ depend()
{ {
before * before *
provide clock provide clock
keyword -openvz -uml -vserver -xenu -lxc keyword -openvz -prefix -uml -vserver -xenu -lxc
} }
# swclock is an OpenRC built in # swclock is an OpenRC built in

View File

@@ -4,7 +4,7 @@
depend() { depend() {
need localmount need localmount
keyword -jail keyword -jail -prefix
} }
start() { start() {

View File

@@ -5,6 +5,7 @@
depend() depend()
{ {
before bootmisc logger before bootmisc logger
keyword -prefix
} }
start() start()

View File

@@ -5,7 +5,7 @@
depend() depend()
{ {
before bootmisc logger before bootmisc logger
keyword -vserver keyword -prefix -vserver
} }
start() start()

View File

@@ -6,7 +6,7 @@ description="Mount the sys filesystem."
depend() depend()
{ {
keyword -vserver keyword -prefix -vserver
} }
mount_sys() mount_sys()
@@ -77,12 +77,6 @@ mount_cgroups()
yesno ${rc_cgroups:-YES} && [ -e /proc/cgroups ] && \ yesno ${rc_cgroups:-YES} && [ -e /proc/cgroups ] && \
mountinfo -q /sys/fs/cgroup || return 0 mountinfo -q /sys/fs/cgroup || return 0
local agent="@LIBEXECDIR@/sh/cgroup-release-agent.sh"
mkdir /sys/fs/cgroup/openrc
mount -n -t cgroup \
-o none,nodev,noexec,nosuid,name=openrc,release_agent="$agent" \
openrc /sys/fs/cgroup/openrc
echo 1 > /sys/fs/cgroup/openrc/notify_on_release
while read name hier groups enabled rest; do while read name hier groups enabled rest; do
case "${enabled}" in case "${enabled}" in
1) mkdir /sys/fs/cgroup/${name} 1) mkdir /sys/fs/cgroup/${name}

View File

@@ -16,4 +16,5 @@ depend()
use net newsyslog use net newsyslog
need localmount need localmount
after bootmisc after bootmisc
keyword -prefix
} }

View File

@@ -9,8 +9,8 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend() depend()
{ {
keyword -openvz -uml -vserver -xenu keyword -openvz -prefix -uml -vserver -xenu
use root need root
after bootmisc after bootmisc
} }
@@ -35,7 +35,7 @@ start()
done done
# Save the encoding for use immediately at boot # Save the encoding for use immediately at boot
if checkpath -W "$RC_LIBEXECDIR"; then if [ -w "$RC_LIBEXECDIR" ]; then
mkdir -p "$RC_LIBEXECDIR"/console mkdir -p "$RC_LIBEXECDIR"/console
if yesno ${unicode:-${UNICODE}}; then if yesno ${unicode:-${UNICODE}}; then
echo "" > "$RC_LIBEXECDIR"/console/unicode echo "" > "$RC_LIBEXECDIR"/console/unicode

View File

@@ -5,6 +5,7 @@
depend() depend()
{ {
after fsck after fsck
keyword -prefix
} }
start() start()

View File

@@ -8,7 +8,7 @@ description="Initializes the random number generator."
depend() depend()
{ {
need localmount need localmount
keyword -jail -openvz keyword -jail -openvz -prefix
} }
save_seed() save_seed()

View File

@@ -5,6 +5,7 @@
depend() depend()
{ {
need localmount need localmount
keyword -prefix
} }
start() start()

View File

@@ -32,7 +32,6 @@
.Op Fl D , -nodeps .Op Fl D , -nodeps
.Op Fl d , -debug .Op Fl d , -debug
.Op Fl s , -ifstarted .Op Fl s , -ifstarted
.Op Fl S , -ifstopped
.Op Fl Z , -dry-run .Op Fl Z , -dry-run
.Op Ar command ... .Op Ar command ...
.Sh DESCRIPTION .Sh DESCRIPTION
@@ -77,8 +76,6 @@ Set xtrace on in the shell to assist in debugging.
Ignore all dependency information the service supplies. Ignore all dependency information the service supplies.
.It Fl s , -ifstarted .It Fl s , -ifstarted
Only run the command if the service has been started. Only run the command if the service has been started.
.It Fl S , -ifstopped
Only run the command if the service has been stopped.
.It Fl q , -quiet .It Fl q , -quiet
Turns off all informational output the service generates. Turns off all informational output the service generates.
Output from any non OpenRC commands is not affected. Output from any non OpenRC commands is not affected.
@@ -111,11 +108,6 @@ Daemon to start or stop via
if no start or stop function is defined by the service. if no start or stop function is defined by the service.
.It Ar command_args .It Ar command_args
List of arguments to pass to the daemon when starting. List of arguments to pass to the daemon when starting.
.It Ar command_background
Set this to "true", "yes" or "1" (case-insensitive) to force the daemon into
the background. This implies the "--make-pidfile" and "--pidfile" option of
.Xr start-stop-daemon 8
so the pidfile variable must be set.
.It Ar pidfile .It Ar pidfile
Pidfile to use for the above defined command. Pidfile to use for the above defined command.
.It Ar name .It Ar name
@@ -175,6 +167,8 @@ in
Same as -jail, but for Linux Resource Containers (LXC). Same as -jail, but for Linux Resource Containers (LXC).
.It Dv -openvz .It Dv -openvz
Same as -jail, but for OpenVZ systems. Same as -jail, but for OpenVZ systems.
.It Dv -prefix
Same as -jail, but for Prefix systems.
.It Dv -uml .It Dv -uml
Same as -jail, but for UML systems. Same as -jail, but for UML systems.
.It Dv -vserver .It Dv -vserver
@@ -313,11 +307,6 @@ Mark the service as inactive.
.Xc .Xc
Checks to see if the path exists, is of the right type, owned by the right Checks to see if the path exists, is of the right type, owned by the right
people and has the correct access modes. If not, then it corrects the path. people and has the correct access modes. If not, then it corrects the path.
.It Ic checkpath
.Op Fl W , -writable
.Ar path
.Xc
checks to see if the path is writable.
.It Ic yesno Ar value .It Ic yesno Ar value
If If
.Ar value .Ar value
@@ -330,14 +319,7 @@ sets the following environment variables for use in the service scripts:
.It Va RC_SVCNAME .It Va RC_SVCNAME
Name of the service. Name of the service.
.It Va RC_RUNLEVEL .It Va RC_RUNLEVEL
Current runlevel that rc is in. Note that, in OpenRC, the reboot Current runlevel that rc is in.
runlevel is mapped to the shutdown runlevel. This was done because most
services do not need to know if a system is shutting down or rebooting.
If you are writing a service that does need to know this, see the
RC_REBOOT variable.
.It Va RC_REBOOT
This variable contains YES if the system is rebooting. If your service
needs to know the system is rebooting, you should test this variable.
.It Va RC_BOOTLEVEL .It Va RC_BOOTLEVEL
Boot runlevel chosen. Default is boot. Boot runlevel chosen. Default is boot.
.It Va RC_DEFAULTLEVEL .It Va RC_DEFAULTLEVEL
@@ -383,8 +365,9 @@ rc_provide_tap1="!net"
# To put in in /etc/rc.conf you would do it like this # To put in in /etc/rc.conf you would do it like this
rc_net_tap1_provide="!net" rc_net_tap1_provide="!net"
# It's also possible to negate keywords. # It's also possible to negate keywords. This is mainly useful for prefix
rc_keyword="-keyword" # users testing OpenRC.
rc_keyword="!noprefix"
.Ed .Ed
.Sh EXAMPLES .Sh EXAMPLES
.Pp .Pp

View File

@@ -4,5 +4,5 @@
SFX= .Linux.in SFX= .Linux.in
PKG_PREFIX?= /usr PKG_PREFIX?= /usr
CPPFLAGS+= -D_BSD_SOURCE -D_XOPEN_SOURCE=700 CPPFLAGS+= -D_BSD_SOURCE -D_XOPEN_SOURCE=600
LIBDL= -Wl,-Bdynamic -ldl LIBDL= -Wl,-Bdynamic -ldl

View File

@@ -12,7 +12,7 @@ _PKG_SED:= $(shell ${_PKG_SED_SH})
_LCL_SED_SH= if test "${PREFIX}" = "${LOCAL_PREFIX}"; then echo "-e 's:@LOCAL_PREFIX@::g'"; else echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; fi _LCL_SED_SH= if test "${PREFIX}" = "${LOCAL_PREFIX}"; then echo "-e 's:@LOCAL_PREFIX@::g'"; else echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; fi
_LCL_SED:= $(shell ${_LCL_SED_SH}) _LCL_SED:= $(shell ${_LCL_SED_SH})
SED_REPLACE= -e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' ${_PKG_SED} ${_LCL_SED} SED_REPLACE= -e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' -e 's:@RC_SYS_DEFAULT@:${MKRCSYS}:g' ${_PKG_SED} ${_LCL_SED}
# Tweak our shell scripts # Tweak our shell scripts
%.sh: %.sh.in %.sh: %.sh.in

View File

@@ -22,7 +22,6 @@ SYSCONFDIR?= ${PREFIX}/etc
INITDIR?= ${SYSCONFDIR}/init.d INITDIR?= ${SYSCONFDIR}/init.d
CONFDIR?= ${SYSCONFDIR}/conf.d CONFDIR?= ${SYSCONFDIR}/conf.d
LOCALDIR?= ${SYSCONFDIR}/local.d LOCALDIR?= ${SYSCONFDIR}/local.d
SYSCTLDIR?= ${SYSCONFDIR}/sysctl.d
BINDIR?= ${PREFIX}/sbin BINDIR?= ${PREFIX}/sbin
BINMODE?= 0755 BINMODE?= 0755

View File

@@ -1,168 +0,0 @@
# Copyright (c) 2011 by Gentoo Foundation
# Released under the 2-clause BSD license.
_config_vars="$_config_vars link prefix suffix ipv4mask relay"
ip6rd_depend()
{
program ip
after interface
}
ip6rd_pre_start()
{
# ALL interfaces run pre_start blocks, not just those with something
# assigned, so we must check if we need to run on this interface before we
# do so.
local config
eval config=\$config_${IFVAR}
[ "$config" = "ip6rd" ] || return 0
case "${MODULES}" in
*" ifconfig "*)
eerror "ifconfig is not supported for 6rd"
eerror "Please emerge sys-apps/iproute2"
return 1
;;
esac
local host= suffix= relay= addr= iface=${IFACE} config_ip6rd= localip= ipv4mask=
eval host=\$link_${IFVAR}
if [ -z "${host}" ]; then
eerror "link_${IFVAR} not set"
return 1
fi
eval host=\${link_${IFVAR}}
eval ipv4mask=\${ipv4mask_${IFVAR}:-0}
eval suffix=\${suffix_${IFVAR}:-1}
eval relay=\${relay_${IFVAR}}
eval prefix=\${prefix_${IFVAR}}
IFACE=${host}
addrs=$(_get_inet_addresses)
IFACE=${iface}
if [ -z "${addrs}" ]; then
eerror "${host} is not configured with an IPv4 address"
return 1
fi
# TODO: Get this settings from DHCP (Option 212)
if [ -z "${prefix}" ]; then
eerror "prefix_${IFVAR} not set"
return 1
fi
if [ -z "${relay}" ]; then
eerror "relay_${IFVAR} not set"
return 1
fi
for addr in ${addrs}; do
# Strip the subnet
local ip="${addr%/*}" subnet="${addr#*/}"
# We don't work on private IPv4 addresses
if _ip6rd_inet_is_private_network "${ip}"
then
continue
fi
local ip6= ip6_prefix="${prefix%::/*}" ip6_subnet="${prefix#*/}"
ip6_subnet=$((ip6_subnet + (32-ipv4mask)))
eval ip6="$(printf "${ip6_prefix}:%s::%s" \
$(_ip6rd_prefix_shave_bits ${ip} ${ipv4mask}) ${suffix})"
veinfo "Derived IPv6 address: ${ip6}"
# Now apply our IPv6 address to our config
config_ip6rd="${config_ip6rd}${config_ip6rd:+ }${ip6}/${ip6_subnet}"
if [ -n "${localip}" ]; then
localip="any"
else
localip="${ip}"
fi
done
if [ -z "${config_ip6rd}" ]; then
eerror "No global IPv4 addresses found on interface ${host}"
return 1
fi
ebegin "Creating 6rd tunnel ${IFACE}"
if [ "${IFACE}" != "sit0" ]; then
_tunnel add "${IFACE}" mode sit ttl 255 remote any local "${localip}"
fi
_tunnel 6rd dev "${IFACE}" 6rd-prefix "${prefix}"
eend $? || return 1
_up
routes_ip6rd="2003::/3 via ::${relay} metric 2147483647"
service_set_value "config_ip6rd_$IFVAR" "$config_ip6rd"
service_set_value "routes_ip6rd_$IFVAR" "$routes_ip6rd"
}
ip6rd_start()
{
local config_ip6rd=$(service_get_value "config_ip6rd_$IFVAR")
local routes_ip6rd=$(service_get_value "routes_ip6rd_$IFVAR")
# Now apply our config
eval config_${config_index}=\'"${config_ip6rd}"\'
: $(( config_index -= 1 ))
# Add a route for us, ensuring we don't delete anything else
local routes="$(_get_array "routes_${IFVAR}")
$routes_ip6rd"
eval routes_${IFVAR}=\$routes
}
_ip6rd_inet_atoi()
{
local IFS="${IFS}." ipi=0 j=3
for i in $1 ; do
ipi=$(( ipi | i << 8*j-- ))
done
echo ${ipi}
}
_ip6rd_inet_itoa()
{
local ipi=$1
for i in 0 1 2 3; do
if [ $i != 3 ] ; then
printf "%d." $(( (ipi & ~((1<<24)-1)) >> 24 ))
ipi=$(( (ipi & ((1<<24)-1)) << 8))
else
printf "%d\n" $(( (ipi & ~((1<<24)-1)) >> 24 ))
fi
done
}
_ip6rd_inet_get_network()
{
echo $(_ip6rd_inet_itoa $(( ($(_ip6rd_inet_atoi $1) & ((1<<$2)-1) << (32-$2) ) )) )
}
_ip6rd_inet_is_private_network()
{
if [ "$(_ip6rd_inet_get_network $1 16)" = "192.168.0.0" ]\
|| [ "$(_ip6rd_inet_get_network $1 8)" = "10.0.0.0" ]\
|| [ "$(_ip6rd_inet_get_network $1 12)" = "172.16.0.0" ]\
|| [ "$(_ip6rd_inet_get_network $1 16)" = "169.254.0.0" ]
then
return 0;
fi
return 1;
}
_ip6rd_prefix_shave_bits()
{
local ipi=
ipi=$(( ($(_ip6rd_inet_atoi $1) & (1<<(32-$2))-1) << $2))
if [ $2 -le 16 ]
then
printf "%04x:%0$(( (16-$2>>2)+(($2%4)?1:0) ))x" \
$((ipi >> 16)) $((ipi & (1<<(16-$2))-1))
elif [ $2 -lt 32 ]
then
printf "%0$(( (32-$2>>2)+(($2%4)?1:0) ))x" \
$((ipi >> 16))
fi
}

View File

@@ -1,5 +1,5 @@
BOOT= bootmisc fsck hostname localmount \ BOOT= bootmisc fsck hostname localmount \
root swap swapfiles sysctl urandom ${BOOT-${OS}} root swap sysctl urandom ${BOOT-${OS}}
DEFAULT= local netmount DEFAULT= local netmount
SHUTDOWN= savecache ${SHUTDOWN-${OS}} SHUTDOWN= savecache ${SHUTDOWN-${OS}}
SYSINIT= ${SYSINIT-${OS}} SYSINIT= ${SYSINIT-${OS}}
@@ -41,24 +41,34 @@ install:
if ! test -d "${SYSINITDIR}"; then \ if ! test -d "${SYSINITDIR}"; then \
${INSTALL} -d ${SYSINITDIR} || exit $$?; \ ${INSTALL} -d ${SYSINITDIR} || exit $$?; \
for x in ${SYSINIT}; do \ for x in ${SYSINIT}; do \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${SYSINITDIR}/"$$x" || exit $$?; \ if test -n "${PREFIX}"; then \
done \ grep -q "keyword .*noprefix" ${INITDIR}/"$$x" && continue; \
fi; \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${SYSINITDIR}/"$$x" || exit $$?; done \
fi fi
if ! test -d "${BOOTDIR}"; then \ if ! test -d "${BOOTDIR}"; then \
${INSTALL} -d ${BOOTDIR} || exit $$?; \ ${INSTALL} -d ${BOOTDIR} || exit $$?; \
for x in ${BOOT}; do \ for x in ${BOOT}; do \
if test -n "${PREFIX}"; then \
grep -q "keyword .*noprefix" ${INITDIR}/"$$x" && continue; \
fi; \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${BOOTDIR}/"$$x" || exit $$?; \ ln -snf ${PREFIX}/etc/init.d/"$$x" ${BOOTDIR}/"$$x" || exit $$?; \
done \ done \
fi fi
if ! test -d "${DEFAULTDIR}"; then \ if ! test -d "${DEFAULTDIR}"; then \
${INSTALL} -d ${DEFAULTDIR} || exit $$?; \ ${INSTALL} -d ${DEFAULTDIR} || exit $$?; \
for x in ${DEFAULT}; do \ for x in ${DEFAULT}; do \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; \ if test -n "${PREFIX}"; then \
done \ grep -q "keyword .*noprefix" ${INITDIR}/"$$x" && continue; \
fi; \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; done \
fi fi
if ! test -d "${SHUTDOWNDIR}"; then \ if ! test -d "${SHUTDOWNDIR}"; then \
${INSTALL} -d ${SHUTDOWNDIR} || exit $$?; \ ${INSTALL} -d ${SHUTDOWNDIR} || exit $$?; \
for x in ${SHUTDOWN}; do \ for x in ${SHUTDOWN}; do \
if test -n "${PREFIX}"; then \
grep -q "keyword .*noprefix" ${INITDIR}/"$$x" && continue; \
fi; \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \ ln -snf ${PREFIX}/etc/init.d/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
fi fi

1
sh/.gitignore vendored
View File

@@ -3,7 +3,6 @@ gendepends.sh
init-common-post.sh init-common-post.sh
rc-functions.sh rc-functions.sh
runscript.sh runscript.sh
cgroup-release-agent.sh
init.sh init.sh
init-early.sh init-early.sh
ifwatchd-carrier.sh ifwatchd-carrier.sh

View File

@@ -5,19 +5,6 @@
: ${CONSOLE:=/dev/console} : ${CONSOLE:=/dev/console}
: ${RC_LIBEXECDIR:=@LIBEXECDIR@} : ${RC_LIBEXECDIR:=@LIBEXECDIR@}
service_present()
{
local p="/etc/runlevels/$1/$2"
# fail if the file doesn't exist
[ ! -e "$p" ] && return 1
# succeed if $RC_SYS empty, can't check further, assume script will run
[ -z "$RC_SYS" ] && return 0
# fail if file contains "-$RC_SYS", because then it won't run
egrep -qi "^[[:space:]]*keyword[[:space:]].*-$RC_SYS\>" "$p" && return 1
# succeed otherwise
return 0
}
if [ -e "$RC_LIBEXECDIR"/console/unicode ]; then if [ -e "$RC_LIBEXECDIR"/console/unicode ]; then
termencoding="%G" termencoding="%G"
kmode="-u" kmode="-u"
@@ -27,8 +14,8 @@ else
fi fi
# Try and set a font and as early as we can # Try and set a font and as early as we can
if service_present "$RC_DEFAULTLEVEL" consolefont || if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/consolefont \
service_present "$RC_BOOTLEVEL" consolefont; then -o -e /etc/runlevels/"$RC_BOOTLEVEL"/consolefont ]; then
printf "\033%s" "$termencoding" >"$CONSOLE" 2>/dev/null printf "\033%s" "$termencoding" >"$CONSOLE" 2>/dev/null
if [ -r "$RC_LIBEXECDIR"/console/font -a -x /usr/bin/setfont ]; then if [ -r "$RC_LIBEXECDIR"/console/font -a -x /usr/bin/setfont ]; then
font="$(cat "$RC_LIBEXECDIR"/console/font)" font="$(cat "$RC_LIBEXECDIR"/console/font)"
@@ -38,8 +25,8 @@ if service_present "$RC_DEFAULTLEVEL" consolefont ||
fi fi
# Try and set a keyboard map as early as possible # Try and set a keyboard map as early as possible
if service_present "$RC_DEFAULTLEVEL" keymaps || if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/keymaps \
service_present "$RC_BOOTLEVEL" keymaps; then -o -e /etc/runlevels/"$RC_BOOTLEVEL"/keymaps ]; then
kbd_mode $kmode -C "$CONSOLE" 2>/dev/null kbd_mode $kmode -C "$CONSOLE" 2>/dev/null
if [ -r "$RC_LIBEXECDIR"/console/keymap ]; then if [ -r "$RC_LIBEXECDIR"/console/keymap ]; then
loadkeys -q "$RC_LIBEXECDIR"/console/keymap 2>/dev/null loadkeys -q "$RC_LIBEXECDIR"/console/keymap 2>/dev/null

View File

@@ -124,11 +124,7 @@ start()
local _background= local _background=
ebegin "Starting ${name:-$RC_SVCNAME}" ebegin "Starting ${name:-$RC_SVCNAME}"
if yesno "${command_background}"; then if yesno "${command_background}"; then
if [ -z "${pidfile}" ]; then _background="--background --pidfile"
eend 1 "command_background option used but no pidfile specified"
return 1
fi
_background="--background --make-pidfile"
fi fi
if yesno "$start_inactive"; then if yesno "$start_inactive"; then
local _inactive=false local _inactive=false
@@ -189,14 +185,6 @@ unset _conf_d
# Load any system overrides # Load any system overrides
sourcex -e "@SYSCONFDIR@/rc.conf" sourcex -e "@SYSCONFDIR@/rc.conf"
if [ "$RC_UNAME" = "Linux" -a "$1" = "start" ]; then
if [ -d /sys/fs/cgroup/openrc ]; then
mkdir -p /sys/fs/cgroup/openrc/${RC_SVCNAME}
echo $$ > /sys/fs/cgroup/openrc/${RC_SVCNAME}/tasks
fi
#todo: add processes to cgroups based on settings in conf.d
fi
# Apply any ulimit defined # Apply any ulimit defined
[ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT} [ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT}

View File

@@ -36,7 +36,6 @@
#include <stdbool.h> #include <stdbool.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h>
#define RC_LEVEL_BOOT "boot" #define RC_LEVEL_BOOT "boot"
#define RC_LEVEL_DEFAULT "default" #define RC_LEVEL_DEFAULT "default"
@@ -167,12 +166,6 @@ int svc_lock(const char *);
int svc_unlock(const char *, int); int svc_unlock(const char *, int);
pid_t exec_service(const char *, const char *); pid_t exec_service(const char *, const char *);
/*
* Check whether path is writable or not,
* this also works properly with read-only filesystems
*/
int is_writable(const char *);
#define service_start(service) exec_service(service, "start"); #define service_start(service) exec_service(service, "start");
#define service_stop(service) exec_service(service, "stop"); #define service_stop(service) exec_service(service, "stop");

View File

@@ -29,7 +29,6 @@
*/ */
#include "librc.h" #include "librc.h"
#include "einfo.h"
bool bool
rc_yesno(const char *value) rc_yesno(const char *value)
@@ -128,53 +127,6 @@ rc_getline(char **line, size_t *len, FILE *fp)
} }
librc_hidden_def(rc_getline) librc_hidden_def(rc_getline)
#ifdef __linux__
char *
rc_proc_getent(const char *ent)
{
FILE *fp;
char *proc, *p, *value = NULL;
size_t i, len;
if (!exists("/proc/cmdline"))
return NULL;
if (!(fp = fopen("/proc/cmdline", "r"))) {
eerror("failed to open `/proc/cmdline': %s", strerror(errno));
return NULL;
}
proc = NULL;
i = 0;
if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
eerror("rc_getline: %s", strerror(errno));
if (proc != NULL) {
len = strlen(ent);
while ((p = strsep(&proc, " "))) {
if (strncmp(ent, p, len) == 0 && (p[len] == '\0' || p[len] == ' ' || p[len] == '=')) {
p += len;
if (*p == '=')
p++;
value = xstrdup(p);
}
}
}
if (!value)
errno = ENOENT;
fclose(fp);
free(proc);
return value;
}
librc_hidden_def(rc_proc_getent)
#endif
RC_STRINGLIST * RC_STRINGLIST *
rc_config_list(const char *file) rc_config_list(const char *file)
{ {
@@ -214,64 +166,6 @@ rc_config_list(const char *file)
} }
librc_hidden_def(rc_config_list) librc_hidden_def(rc_config_list)
/*
* Override some specific rc.conf options on the kernel command line
*/
#ifdef __linux__
static RC_STRINGLIST *rc_config_override(RC_STRINGLIST *config)
{
RC_STRINGLIST *overrides;
RC_STRING *cline, *override, *config_np;
char *tmp = NULL;
char *value = NULL;
size_t varlen = 0;
size_t len = 0;
overrides = rc_stringlist_new();
/* A list of variables which may be overridden on the kernel command line */
rc_stringlist_add(overrides, "rc_parallel");
TAILQ_FOREACH(override, overrides, entries) {
varlen = strlen(override->value);
value = rc_proc_getent(override->value);
/* No need to continue if there's nothing to override */
if (!value) {
free(value);
continue;
}
if (value != NULL) {
len = varlen + strlen(value) + 2;
tmp = xmalloc(sizeof(char) * len);
snprintf(tmp, len, "%s=%s", override->value, value);
}
/*
* Whenever necessary remove the old config entry first to prevent
* duplicates
*/
TAILQ_FOREACH_SAFE(cline, config, entries, config_np) {
if (strncmp(override->value, cline->value, varlen) == 0
&& cline->value[varlen] == '=') {
rc_stringlist_delete(config, cline->value);
break;
}
}
/* Add the option (var/value) to the current config */
rc_stringlist_add(config, tmp);
free(tmp);
free(value);
}
rc_stringlist_free(overrides);
return config;
}
#endif
RC_STRINGLIST * RC_STRINGLIST *
rc_config_load(const char *file) rc_config_load(const char *file)
{ {
@@ -345,13 +239,6 @@ rc_config_load(const char *file)
} }
rc_stringlist_free(list); rc_stringlist_free(list);
#ifdef __linux__
/* Only override rc.conf settings */
if (strcmp(file, RC_CONF) == 0) {
config = rc_config_override(config);
}
#endif
return config; return config;
} }
librc_hidden_def(rc_config_load) librc_hidden_def(rc_config_load)
@@ -392,13 +279,10 @@ rc_conf_value(const char *setting)
atexit(_free_rc_conf); atexit(_free_rc_conf);
#endif #endif
/* Support old configs, but complain about it. */ /* Support old configs */
if (exists(RC_CONF_OLD)) { if (exists(RC_CONF_OLD)) {
old = rc_config_load(RC_CONF_OLD); old = rc_config_load(RC_CONF_OLD);
TAILQ_CONCAT(rc_conf, old, entries); TAILQ_CONCAT(rc_conf, old, entries);
ewarn("Your system still has %s", RC_CONF_OLD);
ewarn("Please migrate to the appropriate settings in %s", RC_CONF);
ewarn("and delete %s.", RC_CONF_OLD);
#ifdef DEBUG_MEMORY #ifdef DEBUG_MEMORY
free(old); free(old);
#endif #endif

View File

@@ -216,6 +216,7 @@ rc_sys_v2(void)
} }
/* Now do detection */ /* Now do detection */
__STRING_SWITCH(systype) __STRING_SWITCH(systype)
__STRING_CASE(RC_SYS_PREFIX) { return RC_SYS_PREFIX; }
#ifdef __FreeBSD__ #ifdef __FreeBSD__
__STRING_CASE(RC_SYS_JAIL) { return RC_SYS_JAIL; } __STRING_CASE(RC_SYS_JAIL) { return RC_SYS_JAIL; }
#endif /* __FreeBSD__ */ #endif /* __FreeBSD__ */
@@ -245,6 +246,10 @@ librc_hidden_def(rc_sys_v2)
const char * const char *
rc_sys_v1(void) rc_sys_v1(void)
{ {
#ifdef PREFIX
return RC_SYS_PREFIX;
#else
#ifdef __FreeBSD__ #ifdef __FreeBSD__
int jailed = 0; int jailed = 0;
size_t len = sizeof(jailed); size_t len = sizeof(jailed);
@@ -281,6 +286,7 @@ rc_sys_v1(void)
#endif #endif
return NULL; return NULL;
#endif /* PREFIX */
} }
librc_hidden_def(rc_sys_v1) librc_hidden_def(rc_sys_v1)
@@ -486,7 +492,7 @@ rc_service_exists(const char *service)
{ {
char *file; char *file;
bool retval = false; bool retval = false;
size_t len; int len;
struct stat buf; struct stat buf;
if (!service) { if (!service) {

View File

@@ -87,7 +87,6 @@ librc_hidden_proto(rc_find_pids)
librc_hidden_proto(rc_getfile) librc_hidden_proto(rc_getfile)
librc_hidden_proto(rc_getline) librc_hidden_proto(rc_getline)
librc_hidden_proto(rc_newer_than) librc_hidden_proto(rc_newer_than)
librc_hidden_proto(rc_proc_getent)
librc_hidden_proto(rc_older_than) librc_hidden_proto(rc_older_than)
librc_hidden_proto(rc_runlevel_exists) librc_hidden_proto(rc_runlevel_exists)
librc_hidden_proto(rc_runlevel_get) librc_hidden_proto(rc_runlevel_get)

View File

@@ -276,6 +276,7 @@ bool rc_service_daemons_crashed(const char *);
#define RC_SYS_JAIL "JAIL" #define RC_SYS_JAIL "JAIL"
#define RC_SYS_OPENVZ "OPENVZ" #define RC_SYS_OPENVZ "OPENVZ"
#define RC_SYS_LXC "LXC" #define RC_SYS_LXC "LXC"
#define RC_SYS_PREFIX "PREFIX"
#define RC_SYS_UML "UML" #define RC_SYS_UML "UML"
#define RC_SYS_VSERVER "VSERVER" #define RC_SYS_VSERVER "VSERVER"
#define RC_SYS_XEN0 "XEN0" #define RC_SYS_XEN0 "XEN0"
@@ -360,13 +361,6 @@ bool rc_newer_than(const char *, const char *, time_t *, char *);
* @return true if source is older than target, otherwise false */ * @return true if source is older than target, otherwise false */
bool rc_older_than(const char *, const char *, time_t *, char *); bool rc_older_than(const char *, const char *, time_t *, char *);
#ifdef __linux__
/*! Read variables/values from /proc/cmdline
* @param value
* @return pointer to the value, otherwise NULL */
char *rc_proc_getent(const char *);
#endif
/*! Update the cached dependency tree if it's older than any init script, /*! Update the cached dependency tree if it's older than any init script,
* its configuration file or an external configuration file the init script * its configuration file or an external configuration file the init script
* has specified. * has specified.

View File

@@ -18,7 +18,6 @@ global:
rc_getline; rc_getline;
rc_newer_than; rc_newer_than;
rc_older_than; rc_older_than;
rc_proc_getent;
rc_runlevel_exists; rc_runlevel_exists;
rc_runlevel_get; rc_runlevel_get;
rc_runlevel_list; rc_runlevel_list;

View File

@@ -32,6 +32,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
#include <features.h>
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <getopt.h> #include <getopt.h>
@@ -55,36 +56,24 @@ typedef enum {
extern const char *applet; extern const char *applet;
/* TODO: SELinux
* This needs a LOT of SELinux loving
* See systemd's src/label.c:label_mkdir
*/
static int static int
do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc) do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc)
{ {
struct stat st; struct stat st;
int fd, flags; int fd, flags;
int r;
int u;
if (stat(path, &st) || trunc) { if (stat(path, &st)) {
if (type == inode_file) { if (type == inode_file) {
einfo("%s: creating file", path); einfo("%s: creating file", path);
if (!mode) /* 664 */ if (!mode) /* 664 */
mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH; mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;
flags = O_CREAT|O_NDELAY|O_WRONLY|O_NOCTTY; flags = O_CREAT|O_NDELAY|O_WRONLY|O_NOCTTY;
#ifdef O_CLOEXEC #ifdef __USE_XOPEN2K8
flags |= O_CLOEXEC; flags |= O_CLOEXEC|O_NOFOLLOW;
#endif
#ifdef O_NOFOLLOW
flags |= O_NOFOLLOW;
#endif #endif
if (trunc) if (trunc)
flags |= O_TRUNC; flags |= O_TRUNC;
u = umask(0); if ((fd = open(path, flags, mode)) == -1) {
fd = open(path, flags, mode);
umask(u);
if (fd == -1) {
eerror("%s: open: %s", applet, strerror(errno)); eerror("%s: open: %s", applet, strerror(errno));
return -1; return -1;
} }
@@ -93,11 +82,7 @@ do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc
einfo("%s: creating directory", path); einfo("%s: creating directory", path);
if (!mode) /* 775 */ if (!mode) /* 775 */
mode = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH; mode = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH;
u = umask(0); if (mkdir(path, mode) == -1) {
/* We do not recursively create parents */
r = mkdir(path, mode);
umask(u);
if (r == -1 && errno != EEXIST) {
eerror("%s: mkdir: %s", applet, eerror("%s: mkdir: %s", applet,
strerror (errno)); strerror (errno));
return -1; return -1;
@@ -107,10 +92,7 @@ do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc
einfo("%s: creating fifo", path); einfo("%s: creating fifo", path);
if (!mode) /* 600 */ if (!mode) /* 600 */
mode = S_IRUSR | S_IWUSR; mode = S_IRUSR | S_IWUSR;
u = umask(0); if (mkfifo(path, mode) == -1) {
r = mkfifo(path, mode);
umask(u);
if (r == -1 && errno != EEXIST) {
eerror("%s: mkfifo: %s", applet, eerror("%s: mkfifo: %s", applet,
strerror (errno)); strerror (errno));
return -1; return -1;
@@ -185,8 +167,8 @@ parse_owner(struct passwd **user, struct group **group, const char *owner)
} }
#include "_usage.h" #include "_usage.h"
#define extraopts "path1 [path2] [...]" #define extraopts "path1 path2 ..."
#define getoptstring "dDfFpm:o:W:" getoptstring_COMMON #define getoptstring "dDfFpm:o:" getoptstring_COMMON
static const struct option longopts[] = { static const struct option longopts[] = {
{ "directory", 0, NULL, 'd'}, { "directory", 0, NULL, 'd'},
{ "directory-truncate", 0, NULL, 'D'}, { "directory-truncate", 0, NULL, 'D'},
@@ -195,7 +177,6 @@ static const struct option longopts[] = {
{ "pipe", 0, NULL, 'p'}, { "pipe", 0, NULL, 'p'},
{ "mode", 1, NULL, 'm'}, { "mode", 1, NULL, 'm'},
{ "owner", 1, NULL, 'o'}, { "owner", 1, NULL, 'o'},
{ "writable", 1, NULL, 'W'},
longopts_COMMON longopts_COMMON
}; };
static const char * const longopts_help[] = { static const char * const longopts_help[] = {
@@ -206,7 +187,6 @@ static const char * const longopts_help[] = {
"Create a named pipe (FIFO) if not exists", "Create a named pipe (FIFO) if not exists",
"Mode to check", "Mode to check",
"Owner to check (user:group)", "Owner to check (user:group)",
"Check whether the path is writable or not",
longopts_help_COMMON longopts_help_COMMON
}; };
#include "_usage.c" #include "_usage.c"
@@ -251,11 +231,6 @@ checkpath(int argc, char **argv)
eerrorx("%s: owner `%s' not found", eerrorx("%s: owner `%s' not found",
applet, optarg); applet, optarg);
break; break;
case 'W':
if (argv[optind] != NULL)
ewarn("-W/--writable takes only one path, everything else will be ignored");
exit(!is_writable(optarg));
break;
case_RC_COMMON_GETOPT case_RC_COMMON_GETOPT
} }

View File

@@ -93,9 +93,9 @@ getmntfile(const char *file)
extern const char *applet; extern const char *applet;
static int static int
do_mount(struct ENT *ent, bool remount) do_mount(struct ENT *ent)
{ {
char *argv[10]; char *argv[8];
pid_t pid; pid_t pid;
int status; int status;
@@ -104,24 +104,9 @@ do_mount(struct ENT *ent, bool remount)
argv[2] = ENT_OPTS(*ent); argv[2] = ENT_OPTS(*ent);
argv[3] = UNCONST("-t"); argv[3] = UNCONST("-t");
argv[4] = ENT_TYPE(*ent); argv[4] = ENT_TYPE(*ent);
if (!remount) { argv[5] = ENT_BLOCKDEVICE(*ent);
argv[5] = ENT_BLOCKDEVICE(*ent); argv[6] = ENT_FILE(*ent);
argv[6] = ENT_FILE(*ent); argv[7] = NULL;
argv[7] = NULL;
} else {
#ifdef __linux__
argv[5] = UNCONST("-o");
argv[6] = UNCONST("remount");
argv[7] = ENT_BLOCKDEVICE(*ent);
argv[8] = ENT_FILE(*ent);
argv[9] = NULL;
#else
argv[5] = UNCONST("-u");
argv[6] = ENT_BLOCKDEVICE(*ent);
argv[7] = ENT_FILE(*ent);
argv[8] = NULL;
#endif
}
switch (pid = vfork()) { switch (pid = vfork()) {
case -1: case -1:
eerrorx("%s: vfork: %s", applet, strerror(errno)); eerrorx("%s: vfork: %s", applet, strerror(errno));
@@ -142,10 +127,9 @@ do_mount(struct ENT *ent, bool remount)
} }
#include "_usage.h" #include "_usage.h"
#define getoptstring "MRbmop:t:" getoptstring_COMMON #define getoptstring "Mbmop:t:" getoptstring_COMMON
static const struct option longopts[] = { static const struct option longopts[] = {
{ "mount", 0, NULL, 'M' }, { "mount", 0, NULL, 'M' },
{ "remount", 0, NULL, 'R' },
{ "blockdevice", 0, NULL, 'b' }, { "blockdevice", 0, NULL, 'b' },
{ "mountargs", 0, NULL, 'm' }, { "mountargs", 0, NULL, 'm' },
{ "options", 0, NULL, 'o' }, { "options", 0, NULL, 'o' },
@@ -155,7 +139,6 @@ static const struct option longopts[] = {
}; };
static const char * const longopts_help[] = { static const char * const longopts_help[] = {
"Mounts the filesytem from the mountpoint", "Mounts the filesytem from the mountpoint",
"Remounts the filesystem based on the information in fstab",
"Extract the block device", "Extract the block device",
"Show arguments needed to mount the entry", "Show arguments needed to mount the entry",
"Extract the options field", "Extract the options field",
@@ -171,7 +154,6 @@ static const char * const longopts_help[] = {
#define OUTPUT_PASSNO (1 << 4) #define OUTPUT_PASSNO (1 << 4)
#define OUTPUT_BLOCKDEV (1 << 5) #define OUTPUT_BLOCKDEV (1 << 5)
#define OUTPUT_MOUNT (1 << 6) #define OUTPUT_MOUNT (1 << 6)
#define OUTPUT_REMOUNT (1 << 7)
int int
fstabinfo(int argc, char **argv) fstabinfo(int argc, char **argv)
@@ -200,9 +182,6 @@ fstabinfo(int argc, char **argv)
case 'M': case 'M':
output = OUTPUT_MOUNT; output = OUTPUT_MOUNT;
break; break;
case 'R':
output = OUTPUT_REMOUNT;
break;
case 'b': case 'b':
output = OUTPUT_BLOCKDEV; output = OUTPUT_BLOCKDEV;
break; break;
@@ -308,11 +287,7 @@ fstabinfo(int argc, char **argv)
break; break;
case OUTPUT_MOUNT: case OUTPUT_MOUNT:
result += do_mount(ent, false); result += do_mount(ent);
break;
case OUTPUT_REMOUNT:
result += do_mount(ent, true);
break; break;
case OUTPUT_MOUNTARGS: case OUTPUT_MOUNTARGS:

View File

@@ -280,7 +280,7 @@ rc_logger_open(const char *level)
* logfile or its basedir may be read-only during sysinit and * logfile or its basedir may be read-only during sysinit and
* shutdown so skip the error in this case * shutdown so skip the error in this case
*/ */
if (errno != EROFS && ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0))) { if ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0)) {
log_error = 1; log_error = 1;
eerror("Error: fopen(%s) failed: %s", logfile, strerror(errno)); eerror("Error: fopen(%s) failed: %s", logfile, strerror(errno));
} }
@@ -288,9 +288,8 @@ rc_logger_open(const char *level)
/* Try to keep the temporary log in case of errors */ /* Try to keep the temporary log in case of errors */
if (!log_error) { if (!log_error) {
if (errno != EROFS && ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0))) if (unlink(TMPLOG) == -1)
if (unlink(TMPLOG) == -1) eerror("Error: unlink(%s) failed: %s", TMPLOG, strerror(errno));
eerror("Error: unlink(%s) failed: %s", TMPLOG, strerror(errno));
} else if (exists(TMPLOG)) } else if (exists(TMPLOG))
eerrorx("Warning: temporary logfile left behind: %s", TMPLOG); eerrorx("Warning: temporary logfile left behind: %s", TMPLOG);

View File

@@ -331,12 +331,3 @@ parse_mode(mode_t *mode, char *text)
errno = EINVAL; errno = EINVAL;
return -1; return -1;
} }
int
is_writable(const char *path)
{
if (access(path, W_OK) == 0)
return 1;
return 0;
}

View File

@@ -167,6 +167,52 @@ cleanup(void)
#endif #endif
} }
#ifdef __linux__
static char *
proc_getent(const char *ent)
{
FILE *fp;
char *proc, *p, *value = NULL;
size_t i, len;
if (!exists("/proc/cmdline"))
return NULL;
if (!(fp = fopen("/proc/cmdline", "r"))) {
eerror("failed to open `/proc/cmdline': %s", strerror(errno));
return NULL;
}
proc = NULL;
i = 0;
if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
eerror("rc_getline: %s", strerror(errno));
if (proc != NULL) {
len = strlen(ent);
while ((p = strsep(&proc, " "))) {
if (strncmp(ent, p, len) == 0 && (p[len] == '\0' || p[len] == ' ' || p[len] == '=')) {
p += len;
if (*p == '=')
p++;
value = xstrdup(p);
}
}
}
if (!value)
errno = ENOENT;
fclose(fp);
free(proc);
return value;
}
#endif
static char static char
read_key(bool block) read_key(bool block)
{ {
@@ -306,6 +352,15 @@ open_shell(void)
run_program(shell); run_program(shell);
} }
_dead static void
single_user(void)
{
rc_logger_close();
execl(SHUTDOWN, SHUTDOWN, "now", (char *) NULL);
eerrorx("%s: unable to exec `" SHUTDOWN "': %s",
applet, strerror(errno));
}
static bool static bool
set_krunlevel(const char *level) set_krunlevel(const char *level)
{ {
@@ -333,11 +388,11 @@ set_krunlevel(const char *level)
return true; return true;
} }
static size_t static int
get_krunlevel(char *buffer, int buffer_len) get_krunlevel(char *buffer, int buffer_len)
{ {
FILE *fp; FILE *fp;
size_t i = 0; int i = 0;
if (!exists(RC_KRUNLEVEL)) if (!exists(RC_KRUNLEVEL))
return 0; return 0;
@@ -658,7 +713,6 @@ do_start_services(bool parallel)
interactive = want_interactive(); interactive = want_interactive();
if (interactive) { if (interactive) {
parallel = false;
interactive_retry: interactive_retry:
printf("\n"); printf("\n");
einfo("About to start the service %s", einfo("About to start the service %s",
@@ -826,9 +880,16 @@ main(int argc, char **argv)
eerrorx("%s: %s", applet, strerror(errno)); eerrorx("%s: %s", applet, strerror(errno));
/* NOTREACHED */ /* NOTREACHED */
case 'S': case 'S':
bootlevel = rc_sys(); if (rc_conf_value("rc_sys")) {
if (bootlevel) bootlevel = rc_sys_v2();
printf("%s\n", bootlevel); if (bootlevel)
printf("%s\n", bootlevel);
} else {
ewarn("WARNING: rc_sys not defined in rc.conf. Falling back to automatic detection");
bootlevel = rc_sys_v1();
if (bootlevel)
printf("%s\n", bootlevel);
}
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
/* NOTREACHED */ /* NOTREACHED */
case_RC_COMMON_GETOPT case_RC_COMMON_GETOPT
@@ -908,9 +969,9 @@ main(int argc, char **argv)
#ifdef __linux__ #ifdef __linux__
if (strcmp(newlevel, RC_LEVEL_SYSINIT) == 0) { if (strcmp(newlevel, RC_LEVEL_SYSINIT) == 0) {
/* If we requested a runlevel, save it now */ /* If we requested a runlevel, save it now */
p = rc_proc_getent("rc_runlevel"); p = proc_getent("rc_runlevel");
if (p == NULL) if (p == NULL)
p = rc_proc_getent("softlevel"); p = proc_getent("softlevel");
if (p != NULL) { if (p != NULL) {
set_krunlevel(p); set_krunlevel(p);
free(p); free(p);
@@ -1062,7 +1123,7 @@ main(int argc, char **argv)
#ifdef __linux__ #ifdef __linux__
/* mark any services skipped as started */ /* mark any services skipped as started */
proc = p = rc_proc_getent("noinit"); proc = p = proc_getent("noinit");
if (proc) { if (proc) {
while ((token = strsep(&p, ","))) while ((token = strsep(&p, ",")))
rc_service_mark(token, RC_SERVICE_STARTED); rc_service_mark(token, RC_SERVICE_STARTED);
@@ -1083,7 +1144,7 @@ main(int argc, char **argv)
#ifdef __linux__ #ifdef __linux__
/* mark any services skipped as stopped */ /* mark any services skipped as stopped */
proc = p = rc_proc_getent("noinit"); proc = p = proc_getent("noinit");
if (proc) { if (proc) {
while ((token = strsep(&p, ","))) while ((token = strsep(&p, ",")))
rc_service_mark(token, RC_SERVICE_STOPPED); rc_service_mark(token, RC_SERVICE_STOPPED);

View File

@@ -75,7 +75,7 @@
#define WARN_TIMEOUT 10 /* warn about this every N seconds */ #define WARN_TIMEOUT 10 /* warn about this every N seconds */
static const char *applet; static const char *applet;
static char *service, *runlevel, *ibsave, *prefix; static char *service, *runlevel, *ibsave, *prefix;;
static RC_DEPTREE *deptree; static RC_DEPTREE *deptree;
static RC_STRINGLIST *applet_list, *services, *tmplist; static RC_STRINGLIST *applet_list, *services, *tmplist;
static RC_STRINGLIST *restart_services, *need_services, *use_services; static RC_STRINGLIST *restart_services, *need_services, *use_services;
@@ -288,13 +288,6 @@ cleanup(void)
#endif #endif
} }
/* Buffer and lock all output messages so that we get readable content */
/* FIXME: Use a dynamic lock file that contains the tty/pts as well.
* For example openrc-pts8.lock or openrc-tty1.lock.
* Using a static lock file makes no sense, esp. in multi-user environments.
* Why don't we use (f)printf, as it is thread-safe through POSIX already?
* Bug: 360013
*/
static int static int
write_prefix(const char *buffer, size_t bytes, bool *prefixed) write_prefix(const char *buffer, size_t bytes, bool *prefixed)
{ {
@@ -304,20 +297,14 @@ write_prefix(const char *buffer, size_t bytes, bool *prefixed)
ssize_t ret = 0; ssize_t ret = 0;
int fd = fileno(stdout), lock_fd = -1; int fd = fileno(stdout), lock_fd = -1;
/* /* Spin until we lock the prefix */
* Lock the prefix. for (;;) {
* open() may fail here when running as user, as RC_SVCDIR may not be writable. lock_fd = open(PREFIX_LOCK, O_WRONLY | O_CREAT, 0664);
*/ if (lock_fd != -1)
lock_fd = open(PREFIX_LOCK, O_WRONLY | O_CREAT, 0664); if (flock(lock_fd, LOCK_EX) == 0)
break;
if (lock_fd != -1) { close(lock_fd);
if (flock(lock_fd, LOCK_EX) != 0)
eerror("flock() failed: %s", strerror(errno));
} }
#ifdef RC_DEBUG
else
ewarn("Couldn't open the prefix lock, please make sure you have enough permissions");
#endif
for (i = 0; i < bytes; i++) { for (i = 0; i < bytes; i++) {
/* We don't prefix eend calls (cursor up) */ /* We don't prefix eend calls (cursor up) */
@@ -345,7 +332,6 @@ write_prefix(const char *buffer, size_t bytes, bool *prefixed)
/* Release the lock */ /* Release the lock */
close(lock_fd); close(lock_fd);
return ret; return ret;
} }
@@ -1093,13 +1079,12 @@ service_plugable(void)
} }
#include "_usage.h" #include "_usage.h"
#define getoptstring "dDsSvl:Z" getoptstring_COMMON #define getoptstring "dDsvl:Z" getoptstring_COMMON
#define extraopts "stop | start | restart | describe | zap" #define extraopts "stop | start | restart | describe | zap"
static const struct option longopts[] = { static const struct option longopts[] = {
{ "debug", 0, NULL, 'd'}, { "debug", 0, NULL, 'd'},
{ "dry-run", 0, NULL, 'Z'}, { "dry-run", 0, NULL, 'Z'},
{ "ifstarted", 0, NULL, 's'}, { "ifstarted", 0, NULL, 's'},
{ "ifstopped", 0, NULL, 'S'},
{ "nodeps", 0, NULL, 'D'}, { "nodeps", 0, NULL, 'D'},
{ "lockfd", 1, NULL, 'l'}, { "lockfd", 1, NULL, 'l'},
longopts_COMMON longopts_COMMON
@@ -1108,7 +1093,6 @@ static const char *const longopts_help[] = {
"set xtrace when running the script", "set xtrace when running the script",
"show what would be done", "show what would be done",
"only run commands when started", "only run commands when started",
"only run commands when stopped",
"ignore dependencies", "ignore dependencies",
"fd of the exclusive lock from rc", "fd of the exclusive lock from rc",
longopts_help_COMMON longopts_help_COMMON
@@ -1251,10 +1235,6 @@ runscript(int argc, char **argv)
if (!(rc_service_state(service) & RC_SERVICE_STARTED)) if (!(rc_service_state(service) & RC_SERVICE_STARTED))
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
break; break;
case 'S':
if (!(rc_service_state(service) & RC_SERVICE_STOPPED))
exit(EXIT_FAILURE);
break;
case 'D': case 'D':
deps = false; deps = false;
break; break;

View File

@@ -1178,18 +1178,20 @@ start_stop_daemon(int argc, char **argv)
} }
#ifdef HAVE_PAM #ifdef HAVE_PAM
if (changeuser != NULL) { if (changeuser != NULL)
pamr = pam_start("start-stop-daemon", pamr = pam_start("start-stop-daemon",
changeuser, &conv, &pamh); changeuser, &conv, &pamh);
else
pamr = pam_start("start-stop-daemon",
"nobody", &conv, &pamh);
if (pamr == PAM_SUCCESS) if (pamr == PAM_SUCCESS)
pamr = pam_acct_mgmt(pamh, PAM_SILENT); pamr = pam_acct_mgmt(pamh, PAM_SILENT);
if (pamr == PAM_SUCCESS) if (pamr == PAM_SUCCESS)
pamr = pam_open_session(pamh, PAM_SILENT); pamr = pam_open_session(pamh, PAM_SILENT);
if (pamr != PAM_SUCCESS) if (pamr != PAM_SUCCESS)
eerrorx("%s: pam error: %s", eerrorx("%s: pam error: %s",
applet, pam_strerror(pamh, pamr)); applet, pam_strerror(pamh, pamr));
}
#endif #endif
if (gid && setgid(gid)) if (gid && setgid(gid))
@@ -1217,17 +1219,15 @@ start_stop_daemon(int argc, char **argv)
rc_stringlist_add(env_list, environ[i++]); rc_stringlist_add(env_list, environ[i++]);
#ifdef HAVE_PAM #ifdef HAVE_PAM
if (changeuser != NULL) { pamenv = (const char *const *)pam_getenvlist(pamh);
pamenv = (const char *const *)pam_getenvlist(pamh); if (pamenv) {
if (pamenv) { while (*pamenv) {
while (*pamenv) { /* Don't add strings unless they set a var */
/* Don't add strings unless they set a var */ if (strchr(*pamenv, '='))
if (strchr(*pamenv, '=')) putenv(xstrdup(*pamenv));
putenv(xstrdup(*pamenv)); else
else unsetenv(*pamenv);
unsetenv(*pamenv); pamenv++;
pamenv++;
}
} }
} }
#endif #endif
@@ -1304,7 +1304,7 @@ start_stop_daemon(int argc, char **argv)
setsid(); setsid();
execvp(exec, argv); execvp(exec, argv);
#ifdef HAVE_PAM #ifdef HAVE_PAM
if (changeuser != NULL && pamr == PAM_SUCCESS) if (pamr == PAM_SUCCESS)
pam_close_session(pamh, PAM_SILENT); pam_close_session(pamh, PAM_SILENT);
#endif #endif
eerrorx("%s: failed to exec `%s': %s", eerrorx("%s: failed to exec `%s': %s",

View File

@@ -32,8 +32,6 @@ rc_newer_than
rc_newer_than@@RC_1.0 rc_newer_than@@RC_1.0
rc_older_than rc_older_than
rc_older_than@@RC_1.0 rc_older_than@@RC_1.0
rc_proc_getent
rc_proc_getent@@RC_1.0
rc_runlevel_exists rc_runlevel_exists
rc_runlevel_exists@@RC_1.0 rc_runlevel_exists@@RC_1.0
rc_runlevel_get rc_runlevel_get

View File

@@ -1,6 +0,0 @@
DIR= ${SYSCTLDIR}
CONF= README
MK= ../mk
include ${MK}/os.mk
include ${MK}/scripts.mk

View File

@@ -1,13 +0,0 @@
Kernel system variables configuration files
Files found under the /etc/sysctl.d directory that end with .conf are
parsed within sysctl(8) at boot time. If you want to set kernel variables
you can either edit /etc/sysctl.conf or make a new file.
The filename isn't important, but don't make it a package name as it may clash
with something the package builder needs later. The file name must end
with .conf, or it will not be read.
The recommended location for local system settings is /etc/sysctl.d/local.conf
but as long as you follow the rules for the name of the file, anything will
work. see the sysctl.conf(5) man page for details of the format.