Compare commits

..

8 Commits

Author SHA1 Message Date
Daniel Robbins
6e6cf26b99 FL-227: add aliases variable for /etc/conf.d/hostname aliases 2012-11-25 19:19:35 +00:00
Daniel Robbins
58425a972c Merge branch '0.10-rebase' of git.funtoo.org:openrc into 0.10-rebase 2012-11-25 19:10:07 +00:00
Daniel Robbins
b9204e97a1 FL-157: check for /etc/hosts existing first before removing entries 2012-11-25 19:05:09 +00:00
Oleg Vinichenko
2cd47b3b4d FL-74: localmount, support filesystem mounting on openvz 2012-08-27 06:40:12 +03:00
Daniel Robbins
f07d8154a9 Add support for setting the NIS domain name. For FL-28 2012-06-12 02:22:03 +00:00
Daniel Robbins
173001713c FL-25: make sysctl shm settings not show up on boot 2012-06-11 17:13:55 +00:00
Daniel Robbins
875ee9529b auto-update /etc/hosts for issue FL-18 2012-06-10 05:10:34 +00:00
Daniel Robbins
b3f70ca20b address FL-25 and attempt to increase sysV shared memory limit to 25% of RAM by default 2012-06-10 02:28:38 +00:00
91 changed files with 341 additions and 708 deletions

View File

@@ -4,12 +4,7 @@
include Makefile.inc include Makefile.inc
SUBDIR= conf.d etc init.d local.d man scripts sh src sysctl.d SUBDIR= conf.d doc etc init.d local.d sysctl.d man net scripts sh src
# Build our old net foo or not
ifeq (${MKNET},oldnet)
SUBDIR+= net doc
endif
# Build pkgconfig or not # Build pkgconfig or not
MKPKGCONFIG?= yes MKPKGCONFIG?= yes
@@ -30,9 +25,7 @@ include ${MK}/dist.mk
include ${MK}/git.mk include ${MK}/git.mk
_installafter: _installafter:
ifeq (${MKPREFIX},yes) ifneq ($(OS),Linux)
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d
else ifneq (${OS},Linux)
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d ${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d
endif endif
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/tmp ${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/tmp

View File

@@ -1,3 +1,3 @@
NAME= openrc NAME= openrc
VERSION= 0.11.8 VERSION= 0.10
PKG= ${NAME}-${VERSION} PKG= ${NAME}-${VERSION}

4
README
View File

@@ -10,9 +10,7 @@ You may wish to tweak the installation with the below arguments
PROGLDFLAGS=-static PROGLDFLAGS=-static
LIBNAME=lib64 LIBNAME=lib64
DESTDIR=/tmp/openrc-image DESTDIR=/tmp/openrc-image
MKNET=oldnet
MKPAM=pam MKPAM=pam
MKPREFIX=yes
MKPKGCONFIG=no MKPKGCONFIG=no
MKSELINUX=yes MKSELINUX=yes
MKSTATICLIBS=no MKSTATICLIBS=no
@@ -26,8 +24,6 @@ We don't support building a static OpenRC with PAM.
You may need to use PROGLDFLAGS=-Wl,-Bstatic on glibc instead of just -static. You may need to use PROGLDFLAGS=-Wl,-Bstatic on glibc instead of just -static.
If you debug memory under valgrind, add -DDEBUG_MEMORY to your CPPFLAGS If you debug memory under valgrind, add -DDEBUG_MEMORY to your CPPFLAGS
so that all malloc memory should be freed at exit. so that all malloc memory should be freed at exit.
If you are building OpenRC for a Gentoo Prefix installation, add
MKPREFIX=yes.
You can also brand OpenRC if you so wish like so You can also brand OpenRC if you so wish like so
BRANDING=\"Gentoo/$(uname -s)\" BRANDING=\"Gentoo/$(uname -s)\"

View File

@@ -1,40 +0,0 @@
The following applies only to the newnet stack, which is not presently
maintained in OpenRC. The oldnet stack is maintained instead.
- Robin H. Johnson <robbat2@gentoo.org>, 2011/02/21
OpenRC Network Ideals
---------------------
The new style networking for OpenRC is very simplistic - provide a basic means
of configuring static interface address and routes whilst allowing the
possibility to run any command at any point.
In a nutshell, init.d/network is a wrapper around ifconfig(8) and
init.d/staticroute is wrapper around route(8).
In the Perfect World (TM) ifconfig should be able to configure everything
about the interface easily * . The BSD family almost get this right and Linux
epically fails.
* Only static configuration, including link setup.
For dynamic, static, IPv4LL, arping and per ssid IPv4 setup dhcpcd-5.x
provides your needs.
It fails because there are many tools to do the same job and often have
vastly different syntax where they could be similar. In other words, there
is no coherence.
OpenRC-0.4.x and older (inc Gentoo baselayout-1) had a collection of scripts
for each tool and allowed a script per interface. Over the years, this design
has proven very hard to maintain as each user has their own idea of how
things should work. Also, there were (and still are) race conditions.
So where do we go from here?
Well, it's possible to use the new network scripts using the tools
currently available. It's just harder as you have to know them and their
documentation can be lacking at times.
The correct end goal is a BSD style ifconfig tool.
I've started work on it, but the project has stalled somewhat.
It's display only right now and the source is not yet publicly available.
If you have the skills and share the vision then contact me privately and
we'll take it from there.

View File

@@ -1,12 +1,9 @@
DIR= ${CONFDIR} DIR= ${CONFDIR}
CONF= bootmisc fsck hostname localmount netmount urandom tmpfiles \ CONF= bootmisc fsck hostname localmount network staticroute urandom \
${CONF-${OS}} ${CONF-${OS}}
ifeq (${MKNET},)
CONF+= network staticroute
TARGETS+= network staticroute TARGETS+= network staticroute
CLEANFILES+= network staticroute CLEANFILES+= network staticroute
endif
MK= ../mk MK= ../mk
include ${MK}/os.mk include ${MK}/os.mk

View File

@@ -1,3 +1,3 @@
# Sets the level at which logging of messages is done to the # Sets the level at which logging of messages is done to the
# console. See dmesg(1) for more info. # console. See dmesg(8) for more info.
dmesg_level="1" dmesg_level="1"

View File

@@ -1,40 +0,0 @@
# You will need to set the dependencies in the netmount script to match
# the network configuration tools you are using. This should be done in
# this file by following the examples below, and not by changing the
# service script itself.
#
# Each of these examples is meant to be used separately. So, for
# example, do not set rc_need to something like "net.eth0 dhcpcd".
#
# If you are using newnet and configuring your interfaces with static
# addresses with the network script, you should use this setting.
#
#rc_need="network"
#
# If you are using oldnet, you must list the specific net.* services you
# need.
#
# This example assumes all of your netmounts can be reached on
# eth0.
#
#rc_need="net.eth0"
#
# This example assumes some of your netmounts are on eth1 and some
# are on eth2.
#
#rc_need="net.eth1 net.eth2"
#
# If you are using a dynamic network management tool like
# networkmanager, dhcpcd in standalone mode, wicd, badvpn-ncd, etc, to
# manage the network interfaces with the routes to your netmounts, you
# should list that tool.
#
#rc_need="networkmanager"
#rc_need="dhcpcd"
#rc_need="wicd"
#
# The default setting is designed to be backward compatible with our
# current setup, but you are highly discouraged from using this. In
# other words, please change it to be more suited to your system.
#
rc_need="net"

View File

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

View File

@@ -80,9 +80,9 @@
# Most drivers that report carrier status function correctly, but some do not # Most drivers that report carrier status function correctly, but some do not
# One of these faulty drivers is for the Intel e1000 network card, but only # One of these faulty drivers is for the Intel e1000 network card, but only
# at boot time. To get around this you may alter the carrier_timeout value for # at boot time. To get around this you may alter the carrier_timeout value for
# the interface. 0 is disable and any other number of seconds is how # the interface. -1 is disable, 0 is infinite and any other number of seconds
# long we wait for carrier. The current default is disabled. # is how long we wait for carrier. The current default is 3 seconds
#carrier_timeout_eth0=0 #carrier_timeout_eth0=-1
# You may wish to disable the interface being brought down when stopping. # You may wish to disable the interface being brought down when stopping.
# This is only of use for WakeOnLan. # This is only of use for WakeOnLan.

View File

@@ -126,13 +126,6 @@
# tables you may have to set a global metric as the due to a simple read of # tables you may have to set a global metric as the due to a simple read of
# the routing table taking over a minute at a time. # the routing table taking over a minute at a time.
# Most drivers that report carrier status function correctly, but some do not
# One of these faulty drivers is for the Intel e1000 network card, but only
# at boot time. To get around this you may alter the carrier_timeout value for
# the interface. 0 is disable and any other number of seconds is how
# long we wait for carrier. The current default is disabled.
#carrier_timeout_eth0=0
# You may wish to disable the interface being brought down when stopping. # You may wish to disable the interface being brought down when stopping.
# This is only of use for WakeOnLan. # This is only of use for WakeOnLan.
#ifdown_eth0="NO" #ifdown_eth0="NO"
@@ -559,34 +552,26 @@
# You can also configure the VLAN - see for ip man page for more details # You can also configure the VLAN - see for ip man page for more details
# To change the vlan interface name. If not set, the standard "iface.vlanid" # To change the vlan interface name. If not set, the standard "iface.vlanid"
# will be used. This is the replacement for the old 'vconfig set_name_type' # will be used. This is the replacement for the old 'vconfig set_name_type'
# functionality. If you previously relied on the DEV_PLUS_VID or # functionality.
# DEV_PLUS_VID_NO_PAD options to have different VLANs with same ID value, on
# different interfaces, please note that you need to use both the interface and
# vlan number in the numbering. This applies for all of the options: name,
# txqueuelen, mac, broadcast, mtu, ingress, egress, flags
#vlan1_name="vlan1" #vlan1_name="vlan1"
#eth0_vlan2_name="eth0.2" #vlan2_name="eth0.2"
#eth1_vlan2_name="eth1.2"
# The following shows the old set_name_type setting and what new option to set: # The following shows the old set_name_type setting and what new option to set:
# Using eth9 & VLAN VID 26 as an example. # Using eth9 & VLAN VID 26 as an example.
# VLAN_PLUS_VID vlan26_name="vlan0026" # VLAN_PLUS_VID vlan26_name="vlan0026"
# VLAN_PLUS_VID_NO_PAD vlan26_name="vlan26" # VLAN_PLUS_VID_NO_PAD vlan26_name="vlan26"
# DEV_PLUS_VID eth9_vlan26_name="eth9.0026" # DEV_PLUS_VID vlan26_name="eth9.0026"
# DEV_PLUS_VID_NO_PAD eth9_vlan26_name="eth9.26" # DEV_PLUS_VID_NO_PAD vlan26_name="eth9.26"
# Set the vlan flags # Set the vlan flags
#vlan1_flags="reorder_hdr off gvrp on loose_binding on" #vlan1_flags="reorder_hdr off gvrp on loose_binding on"
#eth0_vlan1_flags="reorder_hdr off gvrp on loose_binding on"
# Configure in/egress maps # Configure in/egress maps
#vlan1_ingress="2:6 3:5" #vlan1_ingress="2:6 3:5"
#eth0_vlan1_egress="1:2" #vlan1_egress="1:2"
#config_vlan1="172.16.2.1/24" #config_vlan1="172.16.3.1/23"
#config_vlan2="172.16.3.1/24" #config_vlan2="172.16.2.1/23"
#config_eth0_1="172.16.4.1/24"
#config_eth1_1="172.16.5.1/24"
# NOTE: Vlans can be configured with a . in their interface names # NOTE: Vlans can be configured with a . in their interface names
# When configuring vlans with this name type, you need to replace . with a _ # When configuring vlans with this name type, you need to replace . with a _
@@ -653,17 +638,6 @@
# 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_net_bond0_need="net.eth0 net.eth1"
# Bonding subsume support (prevents crashes for root-on-NFS)
# - Only tested in the default bonding mode ('active-backup') with
# IPv4
# - Only subsumes basic interface characteristics (IP, netmask) and
# excludes additional routes, interface properties such as MTU,
# interface-associated netfilter rules, etc.
# In the example below, the (usually kernel-autoconfigured)
# 'eth0' interface is a member of bond0, which subsumes the
# existing interface configuration without upsetting NFS.
#slaves_bond0="eth0 eth1"
#subsume_bond0="eth0"
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# Classical IP over ATM # Classical IP over ATM
@@ -1137,13 +1111,6 @@
# Hypothetical network card that requires a change-eeprom toggle to enable flashing # Hypothetical network card that requires a change-eeprom toggle to enable flashing
#ethtool_order_eth0="change-eeprom flash change pause coalesce ring offload nfc rxfh-indir ntuple" #ethtool_order_eth0="change-eeprom flash change pause coalesce ring offload nfc rxfh-indir ntuple"
#-----------------------------------------------------------------------------
# Firewalld support
# If you are using the firewalld daemon to configure your firewall
# settings and you have specific zones you want to apply to your
# interfaces, you can do this here.
#firewalld_zone_eth0="myzone"
############################################################################## ##############################################################################
# ADVANCED CONFIGURATION # ADVANCED CONFIGURATION
# #

View File

@@ -4,7 +4,6 @@
# 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
# "prefix" - Prefix
# If this is commented out, automatic detection will be used. # If this is commented out, automatic detection will be used.
# #
# 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

View File

@@ -5,7 +5,6 @@
# "" - 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
@@ -19,11 +18,3 @@
# 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 ...)
rc_tty_number=12 rc_tty_number=12
# If you have cgroups turned on in your kernel, this switch controls
# whether or not a group for each controller is mounted under
# /sys/fs/cgroup.
# Support for process management by cgroups is planned in the future,
# so if you turn this off, be aware that you may not be able to use that
# feature.
#rc_controller_cgroups="YES"

View File

@@ -3,7 +3,6 @@
# 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 used.

View File

@@ -94,10 +94,6 @@
# These variables are documented here, but should be configured in # These variables are documented here, but should be configured in
# /etc/conf.d/foo for service foo and NOT enabled here unless you # /etc/conf.d/foo for service foo and NOT enabled here unless you
# really want them to work on a global basis. # really want them to work on a global basis.
# If your service has characters in its name which are not legal in
# shell variable names and you configure the variables for it in this
# file, those characters should be replaced with underscores in the
# variable names as shown below.
# Some daemons are started and stopped via start-stop-daemon. # Some daemons are started and stopped via start-stop-daemon.
# We can set some things on a per service basis, like the nicelevel. # We can set some things on a per service basis, like the nicelevel.
@@ -120,13 +116,6 @@
#rc_foo_need="openvpn" #rc_foo_need="openvpn"
#rc_foo_after="clock" #rc_foo_after="clock"
# Below is an example for service foo-bar. Note that the '-' is illegal
# in a shell variable name, so we convert it to an underscore.
# example for service foo-bar.
#rc_foo_bar_config="/etc/foo-bar"
#rc_foo_bar_need="openvpn"
#rc_foo_bar_after="clock"
# You can also remove dependencies. # You can also remove dependencies.
# This is mainly used for saying which servies do NOT provide net. # This is mainly used for saying which servies do NOT provide net.
#rc_net_tap0_provide="!net" #rc_net_tap0_provide="!net"

1
init.d/.gitignore vendored
View File

@@ -41,4 +41,3 @@ syslogd
termencoding termencoding
ttys ttys
wscons wscons
tmpfiles.setup

View File

@@ -1,18 +1,12 @@
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 \
root.in savecache.in swap.in swapfiles.in \ network.in root.in savecache.in staticroute.in swap.in swapfiles.in \
tmpfiles.setup.in swclock.in sysctl.in urandom.in ${SRCS-${OS}} swclock.in sysctl.in urandom.in ${SRCS-${OS}}
BIN= ${OBJS} BIN= ${OBJS}
# Build our old net foo or not
ifeq (${MKNET},)
SRCS+= network.in staticroute.in
endif
ifeq (${MKNET},oldnet)
INSTALLAFTER= _installafter_net.lo INSTALLAFTER= _installafter_net.lo
SRCS+= net.lo.in CLEANFILES+= net.lo
endif TARGETS+= net.lo
MK= ../mk MK= ../mk
include ${MK}/os.mk include ${MK}/os.mk
@@ -22,8 +16,8 @@ NET_LO-FreeBSD= net.lo0
SRCS-FreeBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \ SRCS-FreeBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
rpcbind.in savecore.in syslogd.in rpcbind.in savecore.in syslogd.in
# These are FreeBSD specific # These are FreeBSD specific
SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \ SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in ipfw.in mixer.in nscd.in \
mixer.in nscd.in powerd.in syscons.in powerd.in syscons.in
NET_LO-Linux= net.lo NET_LO-Linux= net.lo
SRCS-Linux= devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \ SRCS-Linux= devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \

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 -prefix keyword -jail
} }
start() start()

View File

@@ -7,7 +7,7 @@ depend()
need localmount need localmount
before logger before logger
after clock sysctl after clock sysctl
keyword -prefix -timeout keyword -timeout
} }
: ${wipe_tmp:=${WIPE_TMP:-yes}} : ${wipe_tmp:=${WIPE_TMP:-yes}}
@@ -112,7 +112,7 @@ start()
fi fi
done done
if [ "$RC_UNAME" = Linux -a -d /run ]; then if [ "$RC_UNAME" = Linux -a -d /run ] && false; then
migrate_to_run /var/lock /run/lock migrate_to_run /var/lock /run/lock
migrate_to_run /var/run /run migrate_to_run /var/run /run
fi fi
@@ -196,5 +196,3 @@ stop()
return 0 return 0
} }
# vim: ft=sh

View File

@@ -8,7 +8,7 @@ depend()
{ {
need localmount termencoding need localmount termencoding
after hotplug bootmisc after hotplug bootmisc
keyword -openvz -prefix -uml -vserver -xenu -lxc keyword -openvz -uml -vserver -xenu -lxc
} }
start() start()

View File

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

View File

@@ -5,9 +5,8 @@
description="Mount system critical filesystems in /dev." description="Mount system critical filesystems in /dev."
depend() { depend() {
use dev-mount use dev
before dev keyword -vserver
keyword -prefix -vserver
} }
start() { start() {

View File

@@ -7,7 +7,7 @@ description="Set the dmesg level for a cleaner boot"
depend() depend()
{ {
before dev modules before dev modules
keyword -lxc -prefix -vserver keyword -vserver
} }
start() start()

View File

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

View File

@@ -1,43 +0,0 @@
#!@PREFIX@/sbin/runscript
# Copyright 1992-2012 FreeBSD Project
# Released under the 2-clause BSD license
depend() {
before swap
}
start() {
while read device mountpoint type options rest ; do
case ":${device}:${type}:${options}" in
:#*)
;;
*.bde:swap:sw)
passphrase=$(dd if=/dev/random count=1 2>/dev/null | md5 -q)
device="${device%.bde}"
gbde init "${device}" -P "${passphrase}" || return 1
gbde attach "${device}" -p "${passphrase}" || return 1
;;
*.eli:swap:sw)
device="${device%.eli}"
geli onetime ${geli_swap_flags} "${device}" || return 1
;;
esac
done < /etc/fstab
}
stop() {
while read device mountpoint type options rest ; do
case ":${device}:${type}:${options}" in
:#*)
;;
*.bde:swap:sw)
device="${device%.bde}"
gbde detach "${device}"
;;
*.eli:swap:sw)
# Nothing here, because geli swap devices should be
# created with the auto-detach-on-last-close option.
;;
esac
done < /etc/fstab
}

View File

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

View File

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

View File

@@ -5,12 +5,38 @@
description="Sets the hostname of the machine." description="Sets the hostname of the machine."
depend() { depend() {
keyword -prefix -lxc need root
} }
start() start()
{ {
hostname=${hostname-${HOSTNAME-localhost}} hostname=${hostname-${HOSTNAME-localhost}}
out=$hostname
short=${hostname%%.*}
if [ "$short" != "$hostname" ]; then
out="$out $short"
fi
if [ "$nisdomainname" != "" ]; then
ebegin "Setting NIS domain name to $nisdomainname"
nisdomainname $nisdomainname
eend $? "Failed to set the NIS domain name"
fi
if [ "$short" != "localhost" ]; then
out="$out localhost"
fi
if [ "$hostname" != "localhost.localdomain" ]; then
out="$out localhost.localdomain"
fi
[ -n "$aliases" ] && out="$out $aliases"
ebegin "Configuring /etc/hosts"
[ -e /etc/hosts ] && sed -i -e '/[[:space:]]*127.0.0.1[[:space:]]/d' -e '/[[:space:]]*::1[[:space:]]/d' /etc/hosts
cat <<END >> /etc/hosts
127.0.0.1 $out
::1 $out
END
chmod 0644 /etc/hosts
eend $?
[ "$RC_SYS" = "LXC" ] && return 0
ebegin "Setting hostname to $hostname" ebegin "Setting hostname to $hostname"
hostname "$hostname" hostname "$hostname"
eend $? "Failed to set the hostname" eend $? "Failed to set the hostname"

View File

@@ -28,7 +28,7 @@ depend()
else else
before * before *
fi fi
keyword -openvz -prefix -uml -vserver -xenu -lxc keyword -openvz -uml -vserver -xenu -lxc
} }
setupopts() setupopts()

View File

@@ -8,7 +8,7 @@ depend()
{ {
need localmount termencoding need localmount termencoding
after bootmisc after bootmisc
keyword -openvz -prefix -uml -vserver -xenu -lxc keyword -openvz -uml -vserver -xenu -lxc
} }
start() start()

View File

@@ -4,11 +4,6 @@
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 -prefix -vserver -lxc keyword -jail -vserver -lxc
} }
start() start()
@@ -22,9 +22,6 @@ start()
if [ "$RC_UNAME" = Linux ]; then if [ "$RC_UNAME" = Linux ]; then
no_netdev="-O no_netdev" no_netdev="-O no_netdev"
if mountinfo -q /usr; then
touch $RC_SVCDIR/usr_premounted
fi
fi fi
ebegin "Mounting local filesystems" ebegin "Mounting local filesystems"
mount -at "$types" $no_netdev mount -at "$types" $no_netdev
@@ -51,10 +48,7 @@ stop()
done done
if [ "$RC_UNAME" = Linux ]; then if [ "$RC_UNAME" = Linux ]; then
no_umounts_r="$no_umounts_r|/proc|/proc/.*|/run|/sys|/sys/.*" no_umounts_r="$no_umounts_r|/proc|/proc/.*|/run|/sys|/sys/.*|/usr"
if [ -e $rc_svcdir/usr_premounted ]; then
no_umounts_r="$no_umounts_r|/usr"
fi
fi fi
no_umounts_r="^($no_umounts_r)$" no_umounts_r="^($no_umounts_r)$"

View File

@@ -7,7 +7,7 @@ extra_commands="restore"
depend() depend()
{ {
need localmount need localmount
keyword -jail -prefix keyword -jail
} }
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 -prefix -vserver -lxc keyword -openvz -vserver -lxc
} }
start() start()

View File

@@ -7,13 +7,11 @@ description="Re-mount filesytems read-only for a clean reboot."
depend() depend()
{ {
need killprocs savecache need killprocs savecache
keyword -openvz -prefix -vserver -lxc keyword -openvz -vserver -lxc
} }
start() start()
{ {
local ret=0
# Flush all pending disk writes now # Flush all pending disk writes now
sync; sync sync; sync
@@ -41,9 +39,6 @@ start()
do_unmount "umount -r" \ do_unmount "umount -r" \
--skip-point-regex "$m" \ --skip-point-regex "$m" \
"${fs:+--skip-fstype-regex}" $fs --nonetdev "${fs:+--skip-fstype-regex}" $fs --nonetdev
ret=$?
eoutdent eoutdent
eend $?
eend $ret
} }

View File

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

View File

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

View File

@@ -19,14 +19,14 @@ depend()
local IFVAR=$(shell_var "${IFACE}") local IFVAR=$(shell_var "${IFACE}")
need localmount need localmount
if [ "$RC_UNAME" = Linux -a "$IFACE" != lo ]; then if [ "$RC_UNAME" = Linux ]; then
need sysfs need sysfs
fi fi
after bootmisc after bootmisc
keyword -jail -prefix -vserver keyword -jail -vserver
case "${IFACE}" in case "${IFACE}" in
lo|lo0) ;; lo|lo0) provide lo;;
*) *)
after net.lo net.lo0 dbus after net.lo net.lo0 dbus
provide net provide net
@@ -108,7 +108,7 @@ _wait_for_carrier()
_has_carrier && return 0 _has_carrier && return 0
eval timeout=\$carrier_timeout_${IFVAR} eval timeout=\$carrier_timeout_${IFVAR}
timeout=${timeout:-${carrier_timeout:-0}} timeout=${timeout:-${carrier_timeout:-5}}
# Incase users don't want this nice feature ... # Incase users don't want this nice feature ...
[ ${timeout} -le 0 ] && return 0 [ ${timeout} -le 0 ] && return 0

View File

@@ -2,26 +2,62 @@
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name> # Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license. # Released under the 2-clause BSD license.
description="Mounts network shares, other than NFS, according to /etc/fstab." description="Mounts network shares according to /etc/fstab."
# We skip all NFS shares in this script because they require extra
# daemons to be running on the client in order to work correctly. need_portmap()
# It is best to allow nfs-utils to handle all nfs shares. {
local opts=
local IFS="
"
set -- $(fstabinfo --options --fstype nfs,nfs4)
for opts; do
case ,$opts, in
*,noauto,*|*,nolock,*);;
*) return 0;;
esac
done
return 1
}
depend() depend()
{ {
# Only have portmap as a dependency if there is a nfs mount in fstab
# that is set to mount at boot
local pmap=
if need_portmap; then
pmap="rpc.statd"
[ -x @SYSCONFDIR@/init.d/rpcbind ] \
&& pmap="$pmap rpcbind" \
|| pmap="$pmap portmap"
fi
config /etc/fstab config /etc/fstab
need net $pmap
use afc-client amd autofs openvpn use afc-client amd autofs openvpn
use dns use dns nfs nfsmount portmap rpcbind rpc.statd rpc.lockd
keyword -jail -prefix -vserver keyword -jail -vserver
} }
start() start()
{ {
local myneed= myuse= pmap="portmap" nfsmounts=
[ -x @SYSCONFDIR@/init.d/rpcbind ] && pmap="rpcbind"
local x= fs= rc= local x= fs= rc=
for x in $net_fs_list $extra_net_fs_list; do for x in $net_fs_list $extra_net_fs_list; do
case "$x" in case "$x" in
nfs|nfs4) nfs|nfs4)
continue # If the nfsmount script took care of the nfs
# filesystems, then there's no point in trying
# them twice
service_started nfsmount && continue
# Only try to mount NFS filesystems if portmap was
# started. This is to fix "hang" problems for new
# users who do not add portmap to the default runlevel.
if need_portmap && ! service_started "$pmap"; then
continue
fi
;; ;;
esac esac
fs="$fs${fs:+,}$x" fs="$fs${fs:+,}$x"
@@ -46,14 +82,7 @@ stop()
. "$RC_LIBEXECDIR"/sh/rc-mount.sh . "$RC_LIBEXECDIR"/sh/rc-mount.sh
for x in $net_fs_list $extra_net_fs_list; do for x in $net_fs_list $extra_net_fs_list; do
case "$x" in fs="$fs${fs:+,}$x"
nfs|nfs4)
continue
;;
*)
fs="$fs${fs:+,}$x"
;;
esac
done done
if [ -n "$fs" ]; then if [ -n "$fs" ]; then
umount -at $fs || eerror "Failed to simply unmount filesystems" umount -at $fs || eerror "Failed to simply unmount filesystems"
@@ -62,14 +91,7 @@ stop()
eindent eindent
fs= fs=
for x in $net_fs_list $extra_net_fs_list; do for x in $net_fs_list $extra_net_fs_list; do
case "$x" in fs="$fs${fs:+|}$x"
nfs|nfs4)
continue
;;
*)
fs="$fs${fs:+|}$x"
;;
esac
done done
[ -n "$fs" ] && fs="^($fs)$" [ -n "$fs" ] && fs="^($fs)$"
do_unmount umount ${fs:+--fstype-regex} $fs --netdev do_unmount umount ${fs:+--fstype-regex} $fs --netdev

View File

@@ -12,10 +12,8 @@ depend()
{ {
need localmount need localmount
after bootmisc after bootmisc
if [ -n "$(interfaces)" ]; then provide net
provide net keyword -jail -vserver
fi
keyword -jail -prefix -vserver
} }
uniqify() uniqify()
@@ -221,6 +219,12 @@ start()
eend $? eend $?
fi fi
ewarn
ewarn "The $RC_SVCNAME script is deprecated and will be"
ewarn "removed in the future."
ewarn "Please use the net.* scripts to manage your network interfaces."
ewarn
einfo "Starting network" einfo "Starting network"
routeflush routeflush
if [ "$RC_UNAME" = "Linux" ]; then if [ "$RC_UNAME" = "Linux" ]; then

View File

@@ -7,7 +7,6 @@ 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 -prefix -vserver -lxc keyword -openvz -vserver -lxc
} }
_setleds() _setleds()

View File

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

View File

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

View File

@@ -8,7 +8,7 @@ depend()
{ {
use modules devfs use modules devfs
need localmount need localmount
keyword -openvz -prefix -vserver -lxc keyword -openvz -vserver -lxc
} }
start() start()

View File

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

View File

@@ -7,7 +7,7 @@ description="Mount the root fs read/write"
depend() depend()
{ {
need fsck need fsck
keyword -jail -openvz -prefix -vserver -lxc keyword -jail -openvz -vserver -lxc
} }
start() start()

View File

@@ -13,14 +13,6 @@ start()
return 1 return 1
fi fi
fi fi
if ! checkpath -W "$RC_LIBEXECDIR"; then
ewarn "WARNING: ${RC_LIBEXECDIR} is not writable!"
if ! yesno "${RC_GOINGDOWN}"; then
ewarn "Unable to save deptree cache"
return 1
fi
return 0
fi
ebegin "Saving dependency cache" ebegin "Saving dependency cache"
local rc= local rc=
if [ ! -d "$RC_LIBEXECDIR"/cache ]; then if [ ! -d "$RC_LIBEXECDIR"/cache ]; then

View File

@@ -6,9 +6,8 @@ description="Saves a kernel dump."
depend() depend()
{ {
need dumpon localmount need localmount
before encswap keyword -jail
keyword -jail -prefix
} }
start() start()

View File

@@ -12,7 +12,7 @@ depend()
{ {
provide net provide net
use network use network
keyword -jail -prefix -vserver keyword -jail -vserver
} }
pre_flight_checks() pre_flight_checks()
@@ -93,6 +93,11 @@ do_routes()
start() start()
{ {
ewarn
ewarn "The $RC_SVCNAME script is deprecated and will be"
ewarn "removed in the future."
ewarn "Please use the net.* scripts to manage your network interfaces."
ewarn
do_routes "Adding" "add" do_routes "Adding" "add"
} }

View File

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

View File

@@ -5,7 +5,7 @@
depend() depend()
{ {
before localmount before localmount
keyword -jail -openvz -prefix -vserver -lxc keyword -jail -openvz -vserver -lxc
} }
start() start()

View File

@@ -31,16 +31,14 @@ stop()
case "$RC_UNAME" in case "$RC_UNAME" in
Linux) Linux)
if [ -e /proc/swaps ]; then while read filename type rest; do
while read filename type rest; do case "$type" in
case "$type" in file) swapoff $filename >/dev/null;;
file) swapoff $filename >/dev/null;; esac
esac case "$filename" in
case "$filename" in /dev/loop*) swapoff $filename >/dev/null;;
/dev/loop*) swapoff $filename >/dev/null;; esac
esac done < /proc/swaps
done < /proc/swaps
fi
;; ;;
esac esac
eend 0 eend 0

View File

@@ -8,7 +8,7 @@ depend()
{ {
before * before *
provide clock provide clock
keyword -openvz -prefix -uml -vserver -xenu -lxc keyword -openvz -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 -prefix keyword -jail
} }
start() { start() {

View File

@@ -5,7 +5,6 @@
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 -lxc -prefix -vserver keyword -lxc -vserver
} }
start() start()
@@ -15,6 +15,14 @@ start()
ebegin "Configuring kernel parameters" ebegin "Configuring kernel parameters"
eindent eindent
# default sysctl System V max shared memory to 1/4 of RAM:
mem_bytes=`awk '/MemTotal:/ { printf "%0.f",$2 * 1024}' /proc/meminfo`
mem_max=`expr $mem_bytes / 4`
page_size=`getconf PAGE_SIZE`
shmall=`expr $mem_bytes / $page_size`
sysctl kernel.shmmax=$mem_max > /dev/null
sysctl kernel.shmall=$shmall > /dev/null
for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do
if [ -r "$conf" ]; then if [ -r "$conf" ]; then
vebegin "applying $conf" vebegin "applying $conf"

View File

@@ -6,7 +6,7 @@ description="Mount the sys filesystem."
depend() depend()
{ {
keyword -lxc -prefix -vserver keyword -vserver
} }
mount_sys() mount_sys()
@@ -74,6 +74,7 @@ mount_misc()
mount_cgroups() mount_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" local agent="@LIBEXECDIR@/sh/cgroup-release-agent.sh"
@@ -82,8 +83,6 @@ mount_cgroups()
-o none,nodev,noexec,nosuid,name=openrc,release_agent="$agent" \ -o none,nodev,noexec,nosuid,name=openrc,release_agent="$agent" \
openrc /sys/fs/cgroup/openrc openrc /sys/fs/cgroup/openrc
echo 1 > /sys/fs/cgroup/openrc/notify_on_release echo 1 > /sys/fs/cgroup/openrc/notify_on_release
yesno ${rc_controller_cgroups:-YES} && [ -e /proc/cgroups ] || return 0
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,5 +16,4 @@ depend()
use net newsyslog use net newsyslog
need localmount need localmount
after bootmisc after bootmisc
keyword -prefix
} }

View File

@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend() depend()
{ {
keyword -lxc -openvz -prefix -uml -vserver -xenu keyword -lxc -openvz -uml -vserver -xenu
use root use root
after bootmisc after bootmisc
} }

View File

@@ -1,18 +0,0 @@
#!@PREFIX@/sbin/runscript
# 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 --create --remove ${tmpfiles_opts}
eend $?
return 0
}

View File

@@ -5,7 +5,6 @@
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 -lxc -openvz -prefix keyword -jail -openvz
} }
save_seed() save_seed()

View File

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

View File

@@ -46,7 +46,7 @@ Show all runlevels and their services.
List all services that have crashed. List all services that have crashed.
.It Fl l , -list .It Fl l , -list
List all defined runlevels. List all defined runlevels.
.It Fl r , -runlevel .It fl r , -runlevel
Print the current runlevel name. Print the current runlevel name.
.It Fl s , -servicelist .It Fl s , -servicelist
Show all services. Show all services.

View File

@@ -37,7 +37,7 @@
.Op Ar command ... .Op Ar command ...
.Sh DESCRIPTION .Sh DESCRIPTION
.Nm .Nm
is basically an interpreter for shell scripts which provides an easy interface is basically an interpreter for shell scripts which provide an easy interface
to the often complex system commands and daemons. to the often complex system commands and daemons.
When a service runs a command it first loads its multiplexed configuration When a service runs a command it first loads its multiplexed configuration
file, then its master configuration file, then file, then its master configuration file, then
@@ -156,7 +156,7 @@ We provide this virtual service. For example, named provides dns.
.It Ic config .It Ic config
We should recalculate our dependencies if the listed files have changed. We should recalculate our dependencies if the listed files have changed.
.It Ic keyword .It Ic keyword
Tags a service with a keyword. These are the keywords we currently understand: Tags a service with a keyword. Here's the keywords we currently understand:-
.Bl -tag -width indent .Bl -tag -width indent
.It Dv -shutdown .It Dv -shutdown
Don't stop this service when shutting the system down. Don't stop this service when shutting the system down.
@@ -180,8 +180,6 @@ 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
@@ -352,14 +350,8 @@ Default runlevel chosen. Default is default.
.It Va RC_SYS .It Va RC_SYS
A special variable to describe the system more. A special variable to describe the system more.
Possible values are OPENVZ, XENU, XEN0, UML and VSERVER. Possible values are OPENVZ, XENU, XEN0, UML and VSERVER.
.It Va RC_PREFIX
In a Gentoo Prefix installation, this variable contains the prefix
offset. Otherwise it is undefined.
.It Va RC_UNAME .It Va RC_UNAME
The result of `uname -s`. The result of `uname -s`.
.It Va RC_CMD
This contains the name of the command the service script is executing, such
as start, stop, restart etc.
.El .El
.Sh FILES .Sh FILES
.Pp .Pp
@@ -396,9 +388,8 @@ 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. This is mainly useful for prefix # It's also possible to negate keywords.
# users testing OpenRC. rc_keyword="-keyword"
rc_keyword="!-prefix"
.Ed .Ed
.Sh EXAMPLES .Sh EXAMPLES
.Pp .Pp
@@ -447,22 +438,8 @@ depend()
need ${_need} need ${_need}
} }
# This function does any pre-start setup. If it fails, the service will
# not be started.
# If you need this function to behave differently for a restart command,
# you should check the value of RC_CMD for "restart".
# This also applies to start_post, stop_pre and stop_post.
start_pre() start_pre()
{ {
if [ "$RC_CMD" = restart ]; then
# This block will only execute for a restart command. Use a
# structure like this if you need special processing for a
# restart which you do not need for a normal start.
# The function can also fail from here, which will mean that a
# restart can fail.
# This logic can also be used in start_post, stop_pre and
# stop_post.
fi
# Ensure that our dirs are correct # Ensure that our dirs are correct
checkpath --dir --owner foo:foo --mode 0664 \\ checkpath --dir --owner foo:foo --mode 0664 \\
/var/run/foo /var/cache/foo /var/run/foo /var/cache/foo

View File

@@ -1,6 +0,0 @@
# Copyright (c) 2012 William Hubbs <w.d.hubbs@gmail.com>
# Released under the 2-clause BSD license.
ifeq (${MKPREFIX},yes)
CPPFLAGS+= -DPREFIX
endif

View File

@@ -7,6 +7,5 @@ _OS_SH= uname -s
_OS:= $(shell ${_OS_SH}) _OS:= $(shell ${_OS_SH})
OS?= ${_OS} OS?= ${_OS}
include ${MK}/os-${OS}.mk include ${MK}/os-${OS}.mk
include ${MK}/os-prefix.mk
RC_LIB= /$(LIBNAME)/rc RC_LIB= /$(LIBNAME)/rc

View File

@@ -11,14 +11,9 @@ SED?= sed
SH= /bin/sh SH= /bin/sh
PREFIX?= PREFIX?=
ifeq (${PREFIX},) _UPREFIX_SH= case "${PREFIX}" in "") echo /usr;; *) echo "${PREFIX}";; esac
UPREFIX= /usr _UPREFIX:= $(shell ${_UPREFIX_SH})
else UPREFIX= ${_UPREFIX}
UPREFIX= ${PREFIX}
ifeq (${MKPREFIX},yes)
UPREFIX= ${PREFIX}/usr
endif
endif
LOCAL_PREFIX= /usr/local LOCAL_PREFIX= /usr/local
PICFLAG?= -fPIC PICFLAG?= -fPIC

View File

@@ -13,7 +13,7 @@ SRCS-Linux= iwconfig.sh.in
INC-Linux= adsl.sh apipa.sh arping.sh bonding.sh br2684ctl.sh bridge.sh \ INC-Linux= adsl.sh apipa.sh arping.sh bonding.sh br2684ctl.sh bridge.sh \
ccwgroup.sh clip.sh ethtool.sh iproute2.sh ifplugd.sh ip6to4.sh \ ccwgroup.sh clip.sh ethtool.sh iproute2.sh ifplugd.sh ip6to4.sh \
ipppd.sh iwconfig.sh netplugd.sh pppd.sh pump.sh tuntap.sh udhcpc.sh \ ipppd.sh iwconfig.sh netplugd.sh pppd.sh pump.sh tuntap.sh udhcpc.sh \
vlan.sh macvlan.sh ip6rd.sh firewalld.sh vlan.sh macvlan.sh ip6rd.sh
SRCS-NetBSD= SRCS-NetBSD=
INC-NetBSD= ifwatchd.sh INC-NetBSD= ifwatchd.sh

View File

@@ -4,12 +4,6 @@
bonding_depend() bonding_depend()
{ {
before interface macchanger before interface macchanger
program /sbin/ifconfig /bin/ifconfig
# If you do not have sysfs, you MUST have this binary instead for ioctl
# Also you will loose some functionality that cannot be done via sysfs:
if [ ! -d /sys/class/net ]; then
program /sbin/ifenslave
fi
} }
_config_vars="$_config_vars slaves" _config_vars="$_config_vars slaves"
@@ -29,9 +23,6 @@ bonding_pre_start()
eval primary="\$primary_${IFVAR}" eval primary="\$primary_${IFVAR}"
unset primary_${IFVAR} unset primary_${IFVAR}
eval subsume="\$subsume_${IFVAR}"
unset subsume_${IFVAR}
[ -z "${slaves}" ] && return 0 [ -z "${slaves}" ] && return 0
@@ -43,10 +34,6 @@ bonding_pre_start()
fi fi
fi fi
if [ ! -d /sys/class/net ]; then
ewarn "sysfs is not available! You will be unable to create new bonds, or change dynamic parameters!"
fi
# We can create the interface name we like now, but this # We can create the interface name we like now, but this
# requires sysfs # requires sysfs
if ! _exists && [ -d /sys/class/net ]; then if ! _exists && [ -d /sys/class/net ]; then
@@ -64,18 +51,7 @@ bonding_pre_start()
# Configure the bond mode, then we can reloop to ensure we configure # Configure the bond mode, then we can reloop to ensure we configure
# All other options # All other options
[ -d /sys/class/net ] && for x in /sys/class/net/"${IFACE}"/bonding/mode; do for x in /sys/class/net/"${IFACE}"/bonding/mode; do
[ -f "${x}" ] || continue
n=${x##*/}
eval s=\$${n}_${IFVAR}
if [ -n "${s}" ]; then
einfo "Setting ${n}: ${s}"
echo "${s}" >"${x}" || \
eerror "Failed to configure $n (${n}_${IFVAR})"
fi
done
# Configure link monitoring
for x in /sys/class/net/"${IFACE}"/bonding/miimon; do
[ -f "${x}" ] || continue [ -f "${x}" ] || continue
n=${x##*/} n=${x##*/}
eval s=\$${n}_${IFVAR} eval s=\$${n}_${IFVAR}
@@ -86,11 +62,11 @@ bonding_pre_start()
fi fi
done done
# Nice and dynamic for remaining options:) # Nice and dynamic for remaining options:)
[ -d /sys/class/net ] && for x in /sys/class/net/"${IFACE}"/bonding/*; do for x in /sys/class/net/"${IFACE}"/bonding/*; do
[ -f "${x}" ] || continue [ -f "${x}" ] || continue
n=${x##*/} n=${x##*/}
eval s=\$${n}_${IFVAR} eval s=\$${n}_${IFVAR}
[ "${n}" != "mode" -o "${n}" != "miimon" ] || continue [ "${n}" != "mode" ] || continue
if [ -n "${s}" ]; then if [ -n "${s}" ]; then
einfo "Setting ${n}: ${s}" einfo "Setting ${n}: ${s}"
echo "${s}" >"${x}" || \ echo "${s}" >"${x}" || \
@@ -108,44 +84,15 @@ bonding_pre_start()
_exists true || return 1 _exists true || return 1
done done
# Unless we are subsuming an existing interface (NFS root), we down # Must force the slaves to a particular state before adding them
# slave interfaces to work around bugs supposedly in some chipsets for IFACE in ${slaves}; do
# that cause failure to enslave from other states. _delete_addresses
if [ -z "${subsume}" ]; then _down
for IFACE in ${slaves}; do done
_delete_addresses
_down
done
fi
) )
# Now force the master to up # now force the master to up
# - First test for interface subsume request (required for NFS root) _up
if [ -n "${subsume}" ]; then
einfo "Subsuming ${subsume} interface characteristics."
eindent
local oiface=${IFACE}
IFACE=${subsume}
local addr="$(_get_inet_address)"
einfo "address: ${addr}"
IFACE=${oiface}
unset oiface
eoutdent
# subsume (presumably kernel auto-)configured IP
ifconfig ${IFACE} ${addr} up
else
# warn if root on nfs and no subsume interface supplied
local root_fs_type=$(mountinfo -s /)
if [ "${root_fs_type}" == "nfs" ]; then
warn_nfs=1
ewarn "NFS root detected!!!"
ewarn " If your system crashes here, /etc/conf.d/net needs"
ewarn " subsume_${IFACE}=\"<iface>\" ... where <iface> is the"
ewarn " existing, (usually kernel auto-)configured interface."
fi
# up the interface
_up
fi
# finally add in slaves # finally add in slaves
# things needed in the process, and if they are done by ifenslave, openrc, and/or the kernel. # things needed in the process, and if they are done by ifenslave, openrc, and/or the kernel.
@@ -174,7 +121,7 @@ bonding_pre_start()
fi fi
done done
else else
ifenslave "${IFACE}" ${slaves} >/dev/null /sbin/ifenslave "${IFACE}" ${slaves} >/dev/null
fi fi
eend $? eend $?
@@ -185,11 +132,6 @@ bonding_stop()
{ {
_is_bond || return 0 _is_bond || return 0
# Wipe subsumed interface
if [ -n "${subsume}" ]; then
ifconfig ${subsume} 0.0.0.0
fi
local slaves= s= local slaves= s=
slaves=$( \ slaves=$( \
sed -n -e 's/^Slave Interface: //p' "/proc/net/bonding/${IFACE}" \ sed -n -e 's/^Slave Interface: //p' "/proc/net/bonding/${IFACE}" \
@@ -207,7 +149,7 @@ bonding_stop()
echo -"${s}" > /sys/class/net/"${IFACE}"/bonding/slaves echo -"${s}" > /sys/class/net/"${IFACE}"/bonding/slaves
done done
else else
ifenslave -d "${IFACE}" ${slaves} /sbin/ifenslave -d "${IFACE}" ${slaves}
fi fi
# reset all slaves # reset all slaves

View File

@@ -119,8 +119,10 @@ bridge_pre_start()
return 1 return 1
fi fi
# The interface is known to exist now # The interface is known to exist now
_set_flag promisc
_up _up
if ! brctl addif "${BR_IFACE}" "${x}"; then if ! brctl addif "${BR_IFACE}" "${x}"; then
_set_flag -promisc
eend 1 eend 1
return 1 return 1
fi fi
@@ -142,7 +144,6 @@ bridge_pre_start()
) || return 1 ) || return 1
# Bring up the bridge # Bring up the bridge
_set_flag promisc
_up _up
} }

View File

@@ -1,38 +0,0 @@
# Copyright (c) 2012 Doug Goldstein <cardoe@cardoe.com>
# Released under the 2-clause BSD license.
firewalld_depend()
{
after interface
before dhcp
program firewall-cmd
[ "$IFACE" != "lo" ] && need firewalld
}
_config_vars="$_config_vars firewalld_zone"
firewalld_post_start()
{
local firewalld_zone=
eval firewalld_zone=\$firewalld_zone_${IFVAR}
_exists || return 0
if [ "${IFACE}" != "lo" ]; then
firewall-cmd --zone="${firewalld_zone}" \
--change-interface="${IFACE}" > /dev/null 2>&1
fi
return 0
}
firewalld_pre_stop()
{
_exists || return 0
if [ "${IFACE}" != "lo" ]; then
firewall-cmd --remove-interface="${IFACE}" > /dev/null 2>&1
fi
return 0
}

View File

@@ -10,12 +10,12 @@ iproute2_depend()
_up() _up()
{ {
ip link set dev "${IFACE}" up ip link set "${IFACE}" up
} }
_down() _down()
{ {
ip link set dev "${IFACE}" down ip link set "${IFACE}" down
} }
_exists() _exists()
@@ -57,7 +57,7 @@ _set_flag()
flag=${flag#-} flag=${flag#-}
opt="off" opt="off"
fi fi
ip link set dev "${IFACE}" "${flag}" "${opt}" ip link set "${IFACE}" "${flag}" "${opt}"
} }
_get_mac_address() _get_mac_address()
@@ -79,7 +79,7 @@ _get_mac_address()
_set_mac_address() _set_mac_address()
{ {
ip link set dev "${IFACE}" address "$1" ip link set "${IFACE}" address "$1"
} }
_get_inet_addresses() _get_inet_addresses()
@@ -212,7 +212,7 @@ _delete_addresses()
_has_carrier() _has_carrier()
{ {
LC_ALL=C ip link show dev "${IFACE}" | grep -q "LOWER_UP" return 0
} }
_tunnel() _tunnel()
@@ -274,12 +274,12 @@ iproute2_pre_start()
# MTU support # MTU support
local mtu= local mtu=
eval mtu=\$mtu_${IFVAR} eval mtu=\$mtu_${IFVAR}
[ -n "${mtu}" ] && ip link set dev "${IFACE}" mtu "${mtu}" [ -n "${mtu}" ] && ip link set "${IFACE}" mtu "${mtu}"
# TX Queue Length support # TX Queue Length support
local len= local len=
eval len=\$txqueuelen_${IFVAR} eval len=\$txqueuelen_${IFVAR}
[ -n "${len}" ] && ip link set dev "${IFACE}" txqueuelen "${len}" [ -n "${len}" ] && ip link set "${IFACE}" txqueuelen "${len}"
return 0 return 0
} }
@@ -287,7 +287,7 @@ iproute2_pre_start()
_iproute2_ipv6_tentative() _iproute2_ipv6_tentative()
{ {
# Only check tentative when we have a carrier. # Only check tentative when we have a carrier.
_has_carrier || return 1 LC_ALL=C ip link show dev "${IFACE}" | grep -q "NO-CARRIER" && return 1
LC_ALL=C ip addr show dev "${IFACE}" | \ LC_ALL=C ip addr show dev "${IFACE}" | \
grep -q "^[[:space:]]*inet6 .* tentative" grep -q "^[[:space:]]*inet6 .* tentative"
} }

View File

@@ -61,7 +61,7 @@ udhcpc_start()
esac esac
case " ${args} " in case " ${args} " in
*" --hostname="*|*" -h "*|*" -H "*);; *" --hosname="*|*" -h "*|*" -H "*);;
*) *)
if ${sendhost}; then if ${sendhost}; then
local hname="$(hostname)" local hname="$(hostname)"

View File

@@ -66,41 +66,26 @@ vlan_post_start()
einfo "Adding VLAN ${vlan} to ${IFACE}" einfo "Adding VLAN ${vlan} to ${IFACE}"
# We need to gather all interface configuration options # We need to gather all interface configuration options
# 1) naming. Default to the standard "${IFACE}.${vlan}" but it can be anything # 1) naming. Default to the standard "${IFACE}.${vlan}" but it can be anything
eval vname=\$${IFACE}_vlan${vlan}_name eval vname=\$vlan${vlan}_name
[ -z "${vname}" ] && eval vname=\$vlan${vlan}_name
[ -z "${vname}" ] && vname="${IFACE}.${vlan}" [ -z "${vname}" ] && vname="${IFACE}.${vlan}"
# 2) flags # 2) flags
eval vflags=\$${IFACE}_vlan${vlan}_flags eval vflags=\$vlan${vlan}_flags
[ -z "${vname}" ] && eval vflags=\$vlan${vlan}_flags
# 3) ingress/egress map # 3) ingress/egress map
eval vingress=\$${IFACE}_vlan${vlan}_ingress eval vingress=\$vlan${vlan}_ingress
[ -z "${vingress}" ] && eval vingress=\$vlan${vlan}_ingress
[ -z "${vingress}" ] || vingress="ingress-qos-map ${vingress}" [ -z "${vingress}" ] || vingress="ingress-qos-map ${vingress}"
eval vegress=\$${IFACE}_vlan${vlan}_egress eval vegress=\$vlan${vlan}_egress
[ -z "${vegress}" ] && eval vegress=\$vlan${vlan}_egress
[ -z "${vegress}" ] || vegress="egress-qos-map ${vegress}" [ -z "${vegress}" ] || vegress="egress-qos-map ${vegress}"
# txqueue
local txqueuelen= local txqueuelen=
eval txqueuelen=\$txqueuelen_${IFACE}_vlan${vlan} eval txqueuelen=\$txqueuelen_vlan${vlan}
[ -z "${txqueuelen}" ] && eval txqueuelen=\$txqueuelen_vlan${vlan}
# mac
local mac= local mac=
eval mac=\$mac_${IFACE}_vlan${vlan} eval mac=\$mac_vlan${vlan}
[ -z "${mac}" ] && eval mac=\$mac_vlan${vlan}
# broadcast
local broadcast= local broadcast=
eval broadcast=\$broadcast_${IFACE}_vlan${vlan} eval broadcast=\$broadcast_vlan${vlan}
[ -z "${broadcast}" ] && eval broadcast=\$broadcast_vlan${vlan}
# mtu
local mtu= local mtu=
eval mtu=\$mtu_${IFACE}_vlan${vlan} eval mtu=\$mtu_vlan${vlan}
[ -z "${mtu}" ] && eval mtu=\$mtu_vlan${vlan}
# combine it all
local opts="${txqueuelen:+txqueuelen} ${txqueuelen} ${mac:+address} ${mac} ${broadcast:+broadcast} ${broadcast} ${mtu:+mtu} ${mtu}" local opts="${txqueuelen:+txqueuelen} ${txqueuelen} ${mac:+address} ${mac} ${broadcast:+broadcast} ${broadcast} ${mtu:+mtu} ${mtu}"
veinfo "ip link add link \"${IFACE}\" name \"${vname}\" ${opts} type vlan id \"${vlan}\" ${vflags} ${vingress} ${vegress}"
e="$(ip link add link "${IFACE}" name "${vname}" ${opts} type vlan id "${vlan}" ${vflags} ${vingress} ${vegress} 2>&1 1>/dev/null)" e="$(ip link add link "${IFACE}" name "${vname}" ${opts} type vlan id "${vlan}" ${vflags} ${vingress} ${vegress} 2>&1 1>/dev/null)"
if [ -n "${e}" ]; then if [ -n "${e}" ]; then
eend 1 "${e}" eend 1 "${e}"

View File

@@ -10,12 +10,6 @@ BOOTDIR= ${LEVELDIR}/boot
DEFAULTDIR= ${LEVELDIR}/default DEFAULTDIR= ${LEVELDIR}/default
SHUTDOWNDIR= ${LEVELDIR}/shutdown SHUTDOWNDIR= ${LEVELDIR}/shutdown
ifeq (${MKNET},)
BOOT+= network staticroute
endif
INITFILES= ../init.d
MK= ../mk MK= ../mk
include ${MK}/sys.mk include ${MK}/sys.mk
include ${MK}/os.mk include ${MK}/os.mk
@@ -25,25 +19,19 @@ BOOT-${OS}=
SHUTDOWN-${OS}= SHUTDOWN-${OS}=
SYSINIT-${OS}= SYSINIT-${OS}=
ifeq (${MKNET},oldnet)
BOOT-FreeBSD+= net.lo0
BOOT-Linux+= net.lo
BOOT-NetBSD+= net.lo0
endif
BOOT-BSD= hostid newsyslog savecore syslogd swap-blk BOOT-BSD= hostid newsyslog savecore syslogd swap-blk
# Generic BSD stuff # Generic BSD stuff
BOOT-FreeBSD+= hostid newsyslog savecore syslogd BOOT-FreeBSD= hostid net.lo0 newsyslog savecore syslogd
# FreeBSD specific stuff # FreeBSD specific stuff
BOOT-FreeBSD+= adjkerntz dumpon syscons BOOT-FreeBSD+= adjkerntz dumpon syscons
BOOT-Linux+= hwclock keymaps modules mtab procfs termencoding tmpfiles.setup BOOT-Linux= hwclock keymaps modules mtab net.lo procfs termencoding
SHUTDOWN-Linux= killprocs mount-ro SHUTDOWN-Linux= killprocs mount-ro
SYSINIT-Linux= devfs dmesg sysfs SYSINIT-Linux= devfs dmesg
# Generic BSD stuff # Generic BSD stuff
BOOT-NetBSD+= hostid newsyslog savecore syslogd BOOT-NetBSD= hostid net.lo0 newsyslog savecore syslogd
# NetBSD specific stuff # NetBSD specific stuff
BOOT-NetBSD+= devdb swap-blk ttys wscons BOOT-NetBSD+= devdb swap-blk ttys wscons
@@ -53,35 +41,25 @@ 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 \
if test -n "${PREFIX}"; then \ ln -snf ${PREFIX}/etc/init.d/"$$x" ${SYSINITDIR}/"$$x" || exit $$?; \
grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \ done \
fi; \
ln -snf ${INITDIR}/"$$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 \ ln -snf ${PREFIX}/etc/init.d/"$$x" ${BOOTDIR}/"$$x" || exit $$?; \
grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \
fi; \
ln -snf ${INITDIR}/"$$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 \
if test -n "${PREFIX}"; then \ ln -snf ${PREFIX}/etc/init.d/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; \
grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \ done \
fi; \
ln -snf ${INITDIR}/"$$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 \ ln -snf ${PREFIX}/etc/init.d/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \
fi; \
ln -snf ${INITDIR}/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
fi fi
check test:: check test::

View File

@@ -105,7 +105,7 @@ else
# the last ecmd # the last ecmd
for _e in ebegin eend error errorn einfo einfon ewarn ewarnn ewend \ for _e in ebegin eend error errorn einfo einfon ewarn ewarnn ewend \
vebegin veend veinfo vewarn vewend; do vebegin veend veinfo vewarn vewend; do
eval "$_e() { local _r; command $_e \"\$@\"; _r=\$?; \ eval "$_e() { local _r; @LIBEXECDIR@/bin/$_e \"\$@\"; _r=\$?; \
export EINFO_LASTCMD=$_e; return \$_r; }" export EINFO_LASTCMD=$_e; return \$_r; }"
done done
unset _e unset _e

View File

@@ -37,27 +37,14 @@ fi
# /run is a new directory for storing volatile runtime data. # /run is a new directory for storing volatile runtime data.
# Read more about /run at https://lwn.net/Articles/436012 # Read more about /run at https://lwn.net/Articles/436012
sys="$(rc --sys)"
if [ ! -d /run ]; then if [ ! -d /run ]; then
if [ "$sys" = VSERVER ]; then eerror "The /run directory does not exist. Unable to continue."
if [ -e /run ]; then return 1
rm -rf /run
fi
mkdir /run
else
eerror "The /run directory does not exist. Unable to continue."
return 1
fi
fi fi
if [ -L /run/openrc ]; then if mountinfo -q /run; then
rm /run/openrc einfo "/run is already mounted, skipping"
fi else
if [ "$sys" = VSERVER ]; then
rm -rf /run/*
elif ! mountinfo -q /run; then
ebegin "Mounting /run" ebegin "Mounting /run"
rc=0 rc=0
if ! fstabinfo --mount /run; then if ! fstabinfo --mount /run; then

View File

@@ -9,21 +9,41 @@ if ! mountinfo -q -f tmpfs "@LIBEXECDIR@/init.d"; then
exit 0 exit 0
fi fi
if [ ! -d /run ]; then if [ ! -d "@PREFIX@/run" ]; then
eerror "/run is not a directory." eerror "'@PREFIX@/run' is not a directory."
eerror "moving /run to /run.pre-openrc" eerror "This means the OpenRC dependency data cannot be migrated."
mv /run /run.pre-openrc eerror "Please create the '@PREFIX@/run' directory and reboot the system."
mkdir /run exit 1
fi fi
rm -rf /run/openrc if ! mountinfo -q -f tmpfs "@PREFIX@/run"; then
for x in "@PREFIX@/run/."* "@PREFIX@/run/"*; do
case "$x" in
"@PREFIX@/run/."|"@PREFIX@/run/..")
continue
;;
esac
if [ -e "$x" ]; then
eerror "Your '@PREFIX@/run' directory contains files."
eerror "Please reboot the system."
exit 1
fi
done
if ! mountinfo -q -f tmpfs /run; then mount -t tmpfs -o mode=0755,nosuid,nodev \
ln -s "@LIBEXECDIR@"/init.d /run/openrc tmpfs "@PREFIX@/run" 2> /dev/null
else if [ $? != 0 ]; then
cp -a "@LIBEXECDIR@/init.d" /run/openrc eerror "Unable to mount a tmpfs on '@PREFIX@/run'."
rc-update -u eerror "This means the OpenRC dependency data cannot be migrated."
eerror "Please create the '@PREFIX@/run' directory and reboot the system."
exit 1
fi
fi fi
rm -rf "@PREFIX@/run/openrc"
cp -a "@LIBEXECDIR@/init.d" "@PREFIX@/run/openrc"
rc-update -u
rm -rf "@LIBEXECDIR@/init.d"
umount "@LIBEXECDIR@/init.d"
einfo "The OpenRC dependency data was migrated successfully." einfo "The OpenRC dependency data was migrated successfully."
exit 0 exit 0

View File

@@ -13,29 +13,21 @@
# This script should match the manpage as of 2012/03/12 # This script should match the manpage as of 2012/03/12
# #
DRYRUN=0
warninvalid() { warninvalid() {
printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" "$LINENUM" "$FILE" printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" "$LINENUM" "$FILE"
error=$(( error+1 )) error=$(( error+1 ))
} >&2 } >&2
dryrun_or_real() {
local dryrun=
[ $DRYRUN -eq 1 ] && dryrun=echo
$dryrun "$@"
}
relabel() { relabel() {
local path local path
local paths=$1 mode=$2 uid=$3 gid=$4 local paths=$1 mode=$2 uid=$3 gid=$4
for path in ${paths}; do for path in ${paths}; do
if [ -e "$path" ]; then if [ -e "$path" ]; then
[ $uid != '-' ] && dryrun_or_real chown $CHOPTS "$uid" "$path" [ $uid != '-' ] && chown $CHOPTS "$uid" "$path"
[ $gid != '-' ] && dryrun_or_real chgrp $CHOPTS "$gid" "$path" [ $gid != '-' ] && chgrp $CHOPTS "$gid" "$path"
[ $mode != '-' ] && dryrun_or_real chmod $CHOPTS "$mode" "$path" [ $mode != '-' ] && chmod $CHOPTS "$mode" "$path"
[ -x /sbin/restorecon ] && dryrun_or_real restorecon $CHOPTS "$path" [ -x /sbin/restorecon ] && restorecon $CHOPTS "$path"
fi fi
done done
} }
@@ -43,13 +35,13 @@ relabel() {
_b() { _b() {
# Create a block device node if it doesn't exist yet # Create a block device node if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ ! -e "$path" ] && dryrun_or_real mknod $path b ${arg%:*} ${arg#*:} [ ! -e "$path" ] && mknod $path b ${arg%:*} ${arg#*:}
} }
_c() { _c() {
# Create a character device node if it doesn't exist yet # Create a character device node if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ ! -e "$path" ] && dryrun_or_real mknod $path c ${arg%:*} ${arg#*:} [ ! -e "$path" ] && mknod $path c ${arg%:*} ${arg#*:}
} }
@@ -60,8 +52,8 @@ _f() {
[ $CREATE -gt 0 ] || return 0 [ $CREATE -gt 0 ] || return 0
if [ ! -e "$path" ]; then if [ ! -e "$path" ]; then
dryrun_or_real install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path" install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path"
[ -z "$arg" ] || _w "$@" [ -n "$arg" ] && _w "$@"
fi fi
} }
@@ -71,8 +63,8 @@ _F() {
[ $CREATE -gt 0 ] || return 0 [ $CREATE -gt 0 ] || return 0
dryrun_or_real install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path" install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path"
[ -z "$arg" ] || _w "$@" [ -n "$arg" ] && _w "$@"
} }
_d() { _d() {
@@ -82,7 +74,7 @@ _d() {
[ $CREATE -gt 0 ] || return 0 [ $CREATE -gt 0 ] || return 0
if [ ! -d "$path" ]; then if [ ! -d "$path" ]; then
dryrun_or_real install -d -m"$mode" -o"$uid" -g"$gid" "$path" install -d -m"$mode" -o"$uid" -g"$gid" "$path"
fi fi
} }
@@ -91,18 +83,18 @@ _D() {
local path=$1 mode=$2 uid=$3 gid=$4 local path=$1 mode=$2 uid=$3 gid=$4
if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then
dryrun_or_real find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} + find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} +
fi fi
if [ $CREATE -gt 0 ]; then if [ $CREATE -gt 0 ]; then
dryrun_or_real install -d -m"$mode" -o"$uid" -g"$gid" "$path" install -d -m"$mode" -o"$uid" -g"$gid" "$path"
fi fi
} }
_L() { _L() {
# Create a symlink if it doesn't exist yet # Create a symlink if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ ! -e "$path" ] && dryrun_or_real ln -s "$args" "$path" [ ! -e "$path" ] && ln -s "$args" "$path"
} }
_p() { _p() {
@@ -112,8 +104,8 @@ _p() {
[ $CREATE -gt 0 ] || return 0 [ $CREATE -gt 0 ] || return 0
if [ ! -p "$path" ]; then if [ ! -p "$path" ]; then
dryrun_or_real mkfifo -m$mode "$path" mkfifo -m$mode "$path"
dryrun_or_real chown "$uid:$gid" "$path" chown "$uid:$gid" "$path"
fi fi
} }
@@ -137,9 +129,9 @@ _r() {
for path in ${paths}; do for path in ${paths}; do
if [ -f "$path" ]; then if [ -f "$path" ]; then
dryrun_or_real rm -f "$path" rm -f "$path"
elif [ -d "$path" ]; then elif [ -d "$path" ]; then
dryrun_or_real rmdir "$path" rmdir "$path"
fi fi
done done
} }
@@ -153,20 +145,14 @@ _R() {
[ $REMOVE -gt 0 ] || return 0 [ $REMOVE -gt 0 ] || return 0
for path in ${paths}; do for path in ${paths}; do
[ -d "$path" ] && dryrun_or_real rm -rf --one-file-system "$path" [ -d "$path" ] && rm -rf --one-file-system "$path"
done done
} }
_w() { _w() {
# Write the argument parameter to a file, if it exists. # Write the argument parameter to a file, if it exists.
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
if [ -f "$path" ]; then [ -f "$path" ] && echo "$arg" >>"$path"
if [ $DRYRUN -eq 1 ]; then
echo "echo \"$arg\" >>\"$path\""
else
echo "$arg" >>"$path"
fi
fi
} }
_z() { _z() {
@@ -201,7 +187,6 @@ tmpfiles_d=''
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf' # `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
for d in ${tmpfiles_dirs} ; do for d in ${tmpfiles_dirs} ; do
[ -d $d ] && for f in ${d}/*.conf ; do [ -d $d ] && for f in ${d}/*.conf ; do
[ "$f" = "$d/systemd.conf" ] && continue
[ -f $f ] && tmpfiles_basenames="${tmpfiles_basenames}\n${f##*/}" [ -f $f ] && tmpfiles_basenames="${tmpfiles_basenames}\n${f##*/}"
done # for f in ${d} done # for f in ${d}
done # for d in ${tmpfiles_dirs} done # for d in ${tmpfiles_dirs}
@@ -227,12 +212,7 @@ while [ $# -gt 0 ]; do
shift shift
done done
if [ $(( CLEAN )) -eq 1 ] ; then if [ $(( CREATE + REMOVE )) -ne 1 ] ; then
printf '%s clean mode is not implemented\n' "${0##*/}"
exit 1
fi
if [ "$CREATE$REMOVE" = '00' ]; then
printf 'usage: %s [--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}" printf 'usage: %s [--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}"
exit 1 exit 1
fi fi
@@ -253,40 +233,51 @@ for FILE in $tmpfiles_d ; do
# XXX: Upstream says whitespace is NOT permitted in the Path argument. # 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. # 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 while read line; do
LINENUM=$(( LINENUM+1 )) LINENUM=$(( LINENUM+1 ))
# This will skip over comments and empty lines
set -- $line
# Unless we have both command and path, skip this line. # Unless we have both command and path, skip this line.
if [ -z "$cmd" -o -z "$path" ]; then if [ -z "$1" -o -z "$2" ]; then
continue continue
fi fi
# whine about invalid entries # whine about invalid entries
case $cmd in case $1 in
f|F|w|d|D|p|L|c|b|x|r|R|z|Z) ;; f|F|w|d|D|p|L|c|b|x|r|R|z|Z) ;;
\#) continue ;;
*) warninvalid ; continue ;; *) warninvalid ; continue ;;
esac esac
cmd=$1
path=$2
# fall back on defaults when parameters are passed as '-' # fall back on defaults when parameters are passed as '-'
if [ "$mode" = '-' -o "$mode" = '' ]; then if [ "$3" = '-' -o "$3" = '' ]; then
case "$cmd" in case ${1} in
p|f|F) mode=0644 ;; p|f|F) mode=0644 ;;
d|D) mode=0755 ;; d|D) mode=0755 ;;
z|Z|x|r|R|L) ;; z|Z|x|r|R|L) ;;
esac esac
else
mode=$3
fi fi
uid=$4
gid=$5
age=$6
arg=$7
[ "$uid" = '-' -o "$uid" = '' ] && uid=0 [ ${4} = '-' ] && uid=0
[ "$gid" = '-' -o "$gid" = '' ] && gid=0 [ ${5} = '-' ] && gid=0
[ "$age" = '-' -o "$age" = '' ] && age=0 [ ${6} = '-' ] && age=0
[ "$arg" = '-' -o "$arg" = '' ] && arg='' [ ${7} = '-' ] && arg=''
set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg" set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg"
[ "$VERBOSE" -eq "1" ] && echo _$cmd "$@" [ "$VERBOSE" -eq "1" ] && echo _$cmd "$@"
_$cmd "$@"
rc=$?
if [ "${DRYRUN}" -eq "0" ]; then if [ "${DRYRUN}" -eq "0" ]; then
_$cmd "$@"
rc=$?
[ $rc -ne 0 ] && error=$((error + 1)) [ $rc -ne 0 ] && error=$((error + 1))
fi fi
done <$FILE done <$FILE

View File

@@ -28,8 +28,6 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <sys/utsname.h>
#include "librc.h" #include "librc.h"
#define GENDEP RC_LIBEXECDIR "/sh/gendepends.sh" #define GENDEP RC_LIBEXECDIR "/sh/gendepends.sh"
@@ -749,15 +747,12 @@ rc_deptree_update(void)
size_t i, k, l; size_t i, k, l;
bool retval = true; bool retval = true;
const char *sys = rc_sys(); const char *sys = rc_sys();
struct utsname uts;
/* Some init scripts need RC_LIBEXECDIR to source stuff /* Some init scripts need RC_LIBEXECDIR to source stuff
Ideally we should be setting our full env instead */ Ideally we should be setting our full env instead */
if (!getenv("RC_LIBEXECDIR")) if (!getenv("RC_LIBEXECDIR"))
setenv("RC_LIBEXECDIR", RC_LIBEXECDIR, 0); setenv("RC_LIBEXECDIR", RC_LIBEXECDIR, 0);
if (uname(&uts) == 0)
setenv("RC_UNAME", uts.sysname, 1);
/* Phase 1 - source all init scripts and print dependencies */ /* Phase 1 - source all init scripts and print dependencies */
if (!(fp = popen(GENDEP, "r"))) if (!(fp = popen(GENDEP, "r")))
return false; return false;

View File

@@ -216,7 +216,6 @@ 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__ */
@@ -246,10 +245,6 @@ 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);
@@ -286,7 +281,6 @@ rc_sys_v1(void)
#endif #endif
return NULL; return NULL;
#endif /* PREFIX */
} }
librc_hidden_def(rc_sys_v1) librc_hidden_def(rc_sys_v1)

View File

@@ -33,14 +33,11 @@
__BEGIN_DECLS __BEGIN_DECLS
#define RC_PREFIX "@PREFIX@"
#define RC_SYSCONFDIR "@SYSCONFDIR@" #define RC_SYSCONFDIR "@SYSCONFDIR@"
#define RC_LIBDIR "@PREFIX@/@LIB@/rc" #define RC_LIBDIR "@PREFIX@/@LIB@/rc"
#define RC_LIBEXECDIR "@LIBEXECDIR@" #define RC_LIBEXECDIR "@LIBEXECDIR@"
#if defined(PREFIX) #ifdef __linux__
#define RC_SVCDIR RC_LIBEXECDIR "/init.d" #define RC_SVCDIR "@PREFIX@/run/openrc"
#elif defined(__linux__)
#define RC_SVCDIR "/run/openrc"
#else #else
#define RC_SVCDIR RC_LIBEXECDIR "/init.d" #define RC_SVCDIR RC_LIBEXECDIR "/init.d"
#endif #endif
@@ -283,7 +280,6 @@ 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"

View File

@@ -38,7 +38,7 @@
"Disable color output", \ "Disable color output", \
"Display software version", \ "Display software version", \
"Run verbosely", \ "Run verbosely", \
"Run quietly (Does not affect errors)" "Run quietly"
#define case_RC_COMMON_getopt_case_C setenv ("EINFO_COLOR", "NO", 1); #define case_RC_COMMON_getopt_case_C setenv ("EINFO_COLOR", "NO", 1);
#define case_RC_COMMON_getopt_case_h usage (EXIT_SUCCESS); #define case_RC_COMMON_getopt_case_h usage (EXIT_SUCCESS);

View File

@@ -60,8 +60,7 @@ extern const char *applet;
* See systemd's src/label.c:label_mkdir * 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, do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc)
bool trunc, bool chowner)
{ {
struct stat st; struct stat st;
int fd, flags; int fd, flags;
@@ -133,14 +132,14 @@ do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type,
} }
if (mode && (st.st_mode & 0777) != mode) { if (mode && (st.st_mode & 0777) != mode) {
einfo("%s: correcting mode", path); einfo("%s: correcting mode", applet);
if (chmod(path, mode)) { if (chmod(path, mode)) {
eerror("%s: chmod: %s", applet, strerror(errno)); eerror("%s: chmod: %s", applet, strerror(errno));
return -1; return -1;
} }
} }
if (chowner && (st.st_uid != uid || st.st_gid != gid)) { if (st.st_uid != uid || st.st_gid != gid) {
if (st.st_dev || st.st_ino) if (st.st_dev || st.st_ino)
einfo("%s: correcting owner", path); einfo("%s: correcting owner", path);
if (chown(path, uid, gid)) { if (chown(path, uid, gid)) {
@@ -223,20 +222,19 @@ checkpath(int argc, char **argv)
struct group *gr = NULL; struct group *gr = NULL;
inode_t type = inode_unknown; inode_t type = inode_unknown;
int retval = EXIT_SUCCESS; int retval = EXIT_SUCCESS;
bool trunc = false; bool trunc = 0;
bool chowner = false;
while ((opt = getopt_long(argc, argv, getoptstring, while ((opt = getopt_long(argc, argv, getoptstring,
longopts, (int *) 0)) != -1) longopts, (int *) 0)) != -1)
{ {
switch (opt) { switch (opt) {
case 'D': case 'D':
trunc = true; trunc = 1;
case 'd': case 'd':
type = inode_dir; type = inode_dir;
break; break;
case 'F': case 'F':
trunc = true; trunc = 1;
case 'f': case 'f':
type = inode_file; type = inode_file;
break; break;
@@ -249,7 +247,6 @@ checkpath(int argc, char **argv)
applet, optarg); applet, optarg);
break; break;
case 'o': case 'o':
chowner = true;
if (parse_owner(&pw, &gr, optarg) != 0) if (parse_owner(&pw, &gr, optarg) != 0)
eerrorx("%s: owner `%s' not found", eerrorx("%s: owner `%s' not found",
applet, optarg); applet, optarg);
@@ -275,7 +272,7 @@ checkpath(int argc, char **argv)
gid = gr->gr_gid; gid = gr->gr_gid;
while (optind < argc) { while (optind < argc) {
if (do_check(argv[optind], uid, gid, mode, type, trunc, chowner)) if (do_check(argv[optind], uid, gid, mode, type, trunc))
retval = EXIT_FAILURE; retval = EXIT_FAILURE;
optind++; optind++;
} }

View File

@@ -282,7 +282,7 @@ fstabinfo(int argc, char **argv)
END_ENT; END_ENT;
if (!TAILQ_FIRST(files)) if (!TAILQ_FIRST(files))
eerrorx("%s: empty fstab", argv[0]); eerrorx("%s: emtpy fstab", argv[0]);
} }
if (!TAILQ_FIRST(files)) { if (!TAILQ_FIRST(files)) {

View File

@@ -390,8 +390,12 @@ mountinfo(int argc, char **argv)
char real_path[PATH_MAX + 1]; char real_path[PATH_MAX + 1];
int opt; int opt;
int result; int result;
bool quiet;
char *this_path; char *this_path;
/* Ensure that we are only quiet when explicitly told to be */
unsetenv("EINFO_QUIET");
#define DO_REG(_var) \ #define DO_REG(_var) \
if (_var) free(_var); \ if (_var) free(_var); \
_var = get_regex(optarg); _var = get_regex(optarg);
@@ -471,6 +475,7 @@ mountinfo(int argc, char **argv)
REG_FREE(args.skip_options_regex); REG_FREE(args.skip_options_regex);
result = EXIT_FAILURE; result = EXIT_FAILURE;
quiet = rc_yesno(getenv("EINFO_QUIET"));
/* We should report the mounts in reverse order to ease unmounting */ /* We should report the mounts in reverse order to ease unmounting */
TAILQ_FOREACH_REVERSE(s, nodes, rc_stringlist, entries) { TAILQ_FOREACH_REVERSE(s, nodes, rc_stringlist, entries) {
@@ -480,7 +485,7 @@ mountinfo(int argc, char **argv)
if (skip_point_regex && if (skip_point_regex &&
regexec(skip_point_regex, s->value, 0, NULL, 0) == 0) regexec(skip_point_regex, s->value, 0, NULL, 0) == 0)
continue; continue;
if (! rc_yesno(getenv("EINFO_QUIET"))) if (! quiet)
printf("%s\n", s->value); printf("%s\n", s->value);
result = EXIT_SUCCESS; result = EXIT_SUCCESS;
} }

View File

@@ -191,10 +191,6 @@ env_config(void)
if (sys) if (sys)
setenv("RC_SYS", sys, 1); setenv("RC_SYS", sys, 1);
#ifdef PREFIX
setenv("RC_PREFIX", RC_PREFIX, 1);
#endif
/* Some scripts may need to take a different code path if /* Some scripts may need to take a different code path if
Linux/FreeBSD, etc Linux/FreeBSD, etc
To save on calling uname, we store it in an environment variable */ To save on calling uname, we store it in an environment variable */

View File

@@ -315,7 +315,8 @@ get_pid(const char *pidfile, bool quiet)
if ((fp = fopen(pidfile, "r")) == NULL) { if ((fp = fopen(pidfile, "r")) == NULL) {
if (!quiet) if (!quiet)
eerror("%s: fopen `%s': %s", applet, pidfile, strerror(errno)); eerror("%s: fopen `%s': %s",
applet, pidfile, strerror(errno));
return -1; return -1;
} }
@@ -354,7 +355,8 @@ do_stop(const char *exec, const char *const *argv,
LIST_FOREACH_SAFE(pi, pids, entries, np) { LIST_FOREACH_SAFE(pi, pids, entries, np) {
if (test) { if (test) {
if (!quiet) if (!quiet)
einfo("Would send signal %d to PID %d", sig, pi->pid); einfo("Would send signal %d to PID %d",
sig, pi->pid);
nkilled++; nkilled++;
} else { } else {
if (verbose) if (verbose)
@@ -415,7 +417,7 @@ run_stop_schedule(const char *exec, const char *const *argv,
} }
if (pidfile) { if (pidfile) {
pid = get_pid(pidfile, false); pid = get_pid(pidfile, quiet);
if (pid == -1) if (pid == -1)
return 0; return 0;
} }
@@ -434,7 +436,9 @@ run_stop_schedule(const char *exec, const char *const *argv,
if (tkilled == 0) { if (tkilled == 0) {
if (progressed) if (progressed)
printf("\n"); printf("\n");
eerror("%s: no matching processes found", applet); if (! quiet)
eerror("%s: no matching "
"processes found", applet);
} }
return tkilled; return tkilled;
} }
@@ -504,10 +508,14 @@ run_stop_schedule(const char *exec, const char *const *argv,
if (progressed) if (progressed)
printf("\n"); printf("\n");
if (nrunning == 1) if (! quiet) {
eerror("%s: %d process refused to stop", applet, nrunning); if (nrunning == 1)
else eerror("%s: %d process refused to stop",
eerror("%s: %d process(es) refused to stop", applet, nrunning); applet, nrunning);
else
eerror("%s: %d process(es) refused to stop",
applet, nrunning);
}
return -nrunning; return -nrunning;
} }
@@ -1287,7 +1295,7 @@ start_stop_daemon(int argc, char **argv)
/* We don't redirect stdin as some daemons may need it */ /* We don't redirect stdin as some daemons may need it */
if (background || quiet || redirect_stdout) if (background || quiet || redirect_stdout)
dup2(stdout_fd, STDOUT_FILENO); dup2(stdout_fd, STDOUT_FILENO);
if (background || redirect_stderr) if (background || quiet || redirect_stderr)
dup2(stderr_fd, STDERR_FILENO); dup2(stderr_fd, STDERR_FILENO);
for (i = getdtablesize() - 1; i >= 3; --i) for (i = getdtablesize() - 1; i >= 3; --i)
@@ -1318,9 +1326,12 @@ start_stop_daemon(int argc, char **argv)
return -1; return -1;
} }
} while (!WIFEXITED(i) && !WIFSIGNALED(i)); } while (!WIFEXITED(i) && !WIFSIGNALED(i));
if (!WIFEXITED(i) || WEXITSTATUS(i) != 0) if (!WIFEXITED(i) || WEXITSTATUS(i) != 0) {
eerrorx("%s: failed to start `%s'", applet, exec); if (!quiet)
eerrorx("%s: failed to start `%s'",
applet, exec);
exit(EXIT_FAILURE);
}
pid = spid; pid = spid;
} }
@@ -1354,7 +1365,7 @@ start_stop_daemon(int argc, char **argv)
alive = true; alive = true;
} else { } else {
if (pidfile) { if (pidfile) {
pid = get_pid(pidfile, false); pid = get_pid(pidfile, true);
if (pid == -1) { if (pid == -1) {
eerrorx("%s: did not " eerrorx("%s: did not "
"create a valid" "create a valid"

View File

@@ -18,7 +18,7 @@ l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot l6:6:wait:/sbin/rc reboot
l6r:6:wait:/sbin/reboot -d l6r:6:wait:/sbin/reboot -dk
#z6:6:respawn:/sbin/sulogin #z6:6:respawn:/sbin/sulogin
# new-style single-user # new-style single-user

View File

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