Compare commits

..

19 Commits

Author SHA1 Message Date
Daniel Robbins
6a5e6f1ee0 openrc-0.7.0 upstream merge 2011-01-20 14:00:29 -07:00
Piotr Karbowski
d8ce5dccb2 openrc-0.6.8 2010-12-16 11:17:34 +01:00
Piotr Karbowski
62bd337494 Unprivileged users (such as services for example) should not be able view who is logged into system. 2010-12-16 10:04:46 +01:00
Jory A. Pratt
06c8bd0156 Fix for make-3.82 breakage. 2010-12-03 20:06:34 -07:00
Daniel Robbins
33803219d4 openrc-0.6.5 2010-11-26 17:02:16 -07:00
Jory A. Pratt
18c08a9d4d remove 'use hostname' bug 340991, Thanks Diego 2010-11-26 16:59:28 -07:00
William Hubbs
2406dc4f3e allow net_fs_list to be extended but not replaced
This fixes bug #342825.
2010-11-26 16:59:18 -07:00
Diego Elio Pettenò
8e6d461a7f Allow cleaning up of pam_mktemp-based temporary directories.
This was blacklisted before, so the .private directories never had their
content cleaned up, even if WIPE_TMP was set to yes.
2010-11-26 16:57:37 -07:00
William Hubbs
472a3bb99c remove support for local.start and local.stop for bug #343709
The openrc ebuild now migrates these files to /etc/conf.d/local, so we
do not need to support them.
2010-11-26 16:53:54 -07:00
William Hubbs
c9a2085699 add warnings about local.start and local.stop for bug #343709
We need to warn users that they should be using /etc/conf.d/local
instead of /etc/conf.d/local.start and /etc/conf.d/local.stop. This adds
those warnings.
2010-11-26 16:53:50 -07:00
William Hubbs
69169b7e95 update documentation for rc_interactive
rc_interactive is automatically disabled if rc_parallel is set to YES.
Update the documentation in rc.conf to reflect this.
This fixes bug #327305.
2010-11-26 16:53:37 -07:00
William Hubbs
3a11f8af34 remove "use hostname" from sysctl for bsd systems 2010-11-26 16:51:42 -07:00
William Hubbs
e2e5b27d85 do not mount local file systems with the _netdev option in fstab
This fixes #344947.
2010-11-26 16:51:20 -07:00
Daniel Robbins
f343360741 0.6.4 release 2010-10-27 23:43:30 -06:00
Brant Gurganus
694fd2027f correction for unmounting volumes with weird characters 2010-10-24 13:08:38 -04:00
Daniel Robbins
ca76764743 Merge branch 'master' of github.com:funtoo/openrc 2010-10-20 19:21:48 -06:00
Jory A. Pratt
19bd9923d7 surpress output of loadkeys, fix setfont path check 2010-10-20 19:21:02 -06:00
Brant Gurganus
2a844e1122 corrected a typo 2010-10-20 16:26:01 -04:00
Daniel Robbins
5135412978 fixing history, one step at a time 2010-08-16 19:09:26 -06:00
84 changed files with 463 additions and 868 deletions

15
.gitignore vendored
View File

@@ -1,16 +1 @@
*.bz2
*.diff
*.patch
*.orig
*.rej
core
.gdb_history
.gdbinit
.depend
*.a
*.o
*.So
lib*.so

View File

@@ -5,6 +5,27 @@ removed, it should also be removed from this file.
---------------------------
What: rc_sys automatic detection code
- Functions for removal: rc_sys_v1, rc_sys_v2
When: 2011/03/01
Why: The original automatic sub-system detection is flawed in that it cannot
safely detect some variables (Using cgroups confused it to think you were
using LXC, and Prefix cannot be detect by definition). Also, almost all of
the detection requires that /proc is available and readable. During early
boot, /proc may not be mounted yet, leading to mis-detection. The readable
condition can also fail under some hardened kernels when running as an
unprivileged user.
The new rc_sys_v2 function uses the rc_sys variable from rc.conf. After
the removal, the contents of the rc_sys_v2 function will move into the
rc_sys function.
Who: Robin H. Johnson <robbat2@gentoo.org>
---------------------------
What: oldnet ADSL rp-pppoe mode
When: undecided

View File

@@ -4,18 +4,23 @@
include Makefile.inc
SUBDIR= conf.d etc init.d local.d man scripts sh src
SUBDIR= conf.d etc init.d man scripts sh src
# Build our old net foo or not
ifeq (${MKOLDNET},yes)
SUBDIR+= net doc
endif
_OLDNET_SH= case "${MKOLDNET}" in \
[Yy][Ee][Ss]) echo "net doc";; \
*) echo "";; \
esac
_OLDNET!= ${_OLDNET_SH}
SUBDIR+= ${_OLDNET}$(shell ${_OLDNET_SH})
# Build pkgconfig or not
MKPKGCONFIG?= yes
ifeq (${MKPKGCONFIG},yes)
SUBDIR+= pkgconfig
endif
_PKGCONFIG_SH= case "${MKPKGCONFIG}" in \
[Yy][Ee][Ss]|"") echo "pkgconfig";; \
*) echo "";; \
esac
_PKGCONFIG!= ${_PKGCONFIG_SH}
SUBDIR+= ${_PKGCONFIG}$(shell ${_PKGCONFIG_SH})
# We need to ensure that runlevels is done last
SUBDIR+= runlevels

View File

@@ -1,3 +1,3 @@
NAME= openrc
VERSION= 0.8.3
VERSION= 0.7.0
PKG= ${NAME}-${VERSION}

90
README
View File

@@ -1,10 +1,11 @@
OpenRC README
=============
Installation
------------
make install
Yup, that simple. Works with GNU make.
Yup, that simple. Works with GNU make and BSD make.
You may wish to tweak the installation with the below arguments
PROGLDFLAGS=-static
@@ -12,8 +13,6 @@ LIBNAME=lib64
DESTDIR=/tmp/openrc-image
MKPAM=pam
MKPKGCONFIG=no
MKRCSYS=prefix
MKSELINUX=yes
MKTERMCAP=ncurses
MKTERMCAP=termcap
MKOLDNET=yes
@@ -34,20 +33,6 @@ LOCAL_PREFIX should be set when to where user maintained packages are.
Only set LOCAL_PREFIX if different from PKG_PREFIX.
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
/etc/devd.conf
/etc/rc
@@ -67,31 +52,54 @@ init.d.misc is not installed by default as the scripts will need
tweaking on a per distro basis. They are also non essential to the operation
of the system.
Reporting Bugs
--------------
Bugs should go to the Gentoo Bugzilla:
http://bugs.gentoo.org/
You'll want the "Gentoo Linux" product and the "baselayout" component.
If you installed OpenRC from your chosen distribution, you should report
bugs directly to them. For example, if you use Gentoo and emerged OpenRC
then you should reports bugs to http://bugs.gentoo.org.
History - by Roy Marples
------------------------
I became a Gentoo/Linux developer in 2004 and wrote the modular network
scripts for the Gentoo baselayout package. baselayout is a collection of
bash scripts to bring up your computer and its services.
Then towards the end of 2005 I found myself as the primary maintainer
for baselayout.
History - by Daniel Robbins
---------------------------
At the start of 2007, baselayout-2 is announced to the world, re-writing the
core of baselayout in C and allowing POSIX sh init scripts instead of
forcing the use of bash. By Mid 2007 I have re-written everything, including
init scripts, and alpha and pre baselayout-2 snapshots where put into Gentoo.
Towards the end of 2007 I retired as a Gentoo developer for reasons I won't
go into here. baselayout-2 was still in the pre stage, and aside from the
fbsd users, it was masked everywhere. However, I also desired to keep the
baselayout-2 project alive, but outside of Gentoo and into other projects
such as FreeBSD.
The Gentoo modular network scripts were created by Daniel Robbins for
Gentoo Linux 1.0_rc6, in development during most of 2001 and released
in September 2001. After their development, the dependency-based initscript
system was maintained by a number of senior developers (add names here....
need to look at baselayout cvs logs.)
As such, the Gentoo Council have allowed the creation of OpenRC under the
2 clause BSD license, managed by me as an external project.
excerpt from http://www.gentoo.org/news/en/gwn/20040426-newsletter.xml
by Grant Goodyear:
"My recollection is that one of woodchip's more impressive early feats was the
complete replacement of all of the init scripts in Portage for Gentoo Linux
1.0_rc6. Through 1.0_rc5 Gentoo had used fairly standard rc scripts modified
from Stampede Linux, but for 1.0_rc6 Daniel Robbins (drobbins) and Martin
Schlemmer (azarah) had created a new dependency-based init script system that
is still used today. Within a span of days Donny rewrote every single init
script in the Portage tree and committed new masked packages to await the
release of 1.0_rc6. Thanks to woodchip (and drobbins and azarah, of course) the
transition to the new init scripts was nearly painless."
Roy Marples became a Gentoo/Linux developer in 2004 and maintained the modular
network scripts for the Gentoo baselayout package. Then towards the end of
2005, he became the the primary maintainer for baselayout.
At the start of 2007, Roy Marples announced the ongoing development of
baselayout-2, containing a rewritten initscript code in C and allowing POSIX sh
init scripts instead of forcing the use of bash. By Mid 2007 Roy Marples had
re-implemented the Gentoo initscript design created by Daniel Robbins, using an
entirely new code base. Alpha and pre-release baselayout-2 snapshots were
added to Gentoo's Portage tree as an optional component.
Towards the end of 2007, Roy Marples retired as a Gentoo developer Baselayout-2
was still in the pre stage, and aside from the fbsd users, it was masked
everywhere. However, Roy Marples desired to keep the baselayout-2 project
alive, but outside of Gentoo and into other projects such as FreeBSD.
As such, the Gentoo Council permitted Roy Marples to release OpenRC under the 2
clause BSD license, managed by him as an external project. Around mid-2010, Roy
Marples decided to no longer maintain OpenRC. At this point, he transferred
development back to Gentoo, which continues to maintain the scripts. In
addition, Daniel Robbins continues to maintain an independent version OpenRC
for Funtoo Linux, which includes a Funtoo-specific network configuration
system.

View File

@@ -1,7 +1,3 @@
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
---------------------

View File

@@ -1,5 +1,5 @@
DIR= ${CONFDIR}
CONF= bootmisc fsck hostname localmount network staticroute urandom
CONF= bootmisc fsck hostname local localmount network staticroute urandom
TARGETS+= network staticroute
CLEANFILES+= network staticroute

View File

@@ -3,7 +3,7 @@
# you shouldn't specify the trailing ".psf.gz", just the font name below.
# To use the default console font, comment out the CONSOLEFONT setting below.
# This setting is used by the /etc/init.d/consolefont script (NOTE: if you do
# not want to use it, run "rc-update del consolefont boot" as root).
# not want to use it, run "rc-update del consolefont" as root).
consolefont="default8x16"
# consoletranslation is the charset map file to use. Leave commented to use

View File

@@ -9,14 +9,6 @@ clock="UTC"
# 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
# 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.
# Also, be aware that if you set this to "NO", the system time will
# never be saved to the hardware clock unless you set
# clock_systohc="YES" above.
clock_hctosys="YES"
# 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.
clock_args=""

View File

@@ -1,11 +1,9 @@
# Use keymap to specify the default console keymap. There is a complete tree
# Use KEYMAP to specify the default console keymap. There is a complete tree
# of keymaps in /usr/share/keymaps to choose from.
keymap="us"
# Should we first load the 'windowkeys' console keymap? Most x86 users will
# say "yes" here. Note that non-x86 users should leave it as "no".
# Loading this keymap will enable VT switching (like ALT+Left/Right)
# using the special windows keys on the linux console.
windowkeys="NO"
# The maps to load for extended keyboards. Most users will leave this as is.

18
conf.d/local Normal file
View File

@@ -0,0 +1,18 @@
# Here is where you can put anything you need to start
# that there is not an init script for.
local_start() {
# This is a good place to load any misc programs
# on startup (use &>/dev/null to hide output)
# We should always return 0
return 0
}
local_stop() {
# This is a good place to unload any misc.
# programs you started above.
# We should always return 0
return 0
}

View File

@@ -67,12 +67,10 @@
# If a specified module fails (like dhcp - see below), you can specify a
# fallback like so
#fallback_eth0="192.168.0.2 netmask 255.255.255.0"
#fallback_routes_eth0="default via 192.168.0.1"
#fallback_route_eth0="default via 192.168.0.1"
# NOTE: fallback entry must match the entry location in config_eth0
# As such you can only have one fallback route.
# Also, if you do not set a fallback_routes entry for an interface, the
# routes entry will be used if that is set.
# Some users may need to alter the MTU - here's how
#mtu_eth0="1500"

View File

@@ -94,12 +94,10 @@
# If a specified module fails (like dhcp - see below), you can specify a
# fallback like so
#fallback_eth0="192.168.0.2/24"
#fallback_routes_eth0="default via 192.168.0.1"
#fallback_route_eth0="default via 192.168.0.1"
# NOTE: fallback entry must match the entry location in config_eth0
# As such you can only have one fallback route.
# Also, if you do not set a fallback_routes entry for an interface, the
# routes entry will be used if that is set.
# Some users may need to alter the MTU - here's how
#mtu_eth0="1500"
@@ -414,7 +412,7 @@
# dhclient: emerge net-misc/dhcp
# dhcpcd: emerge net-misc/dhcpcd
# pump: emerge net-misc/pump
# udhcpc: emerge sys-apps/busybox
# udhcpc: emerge net-misc/udhcp
# If you have more than one DHCP client installed, you need to specify which
# one to use - otherwise we default to dhcpcd if available.
@@ -529,8 +527,7 @@
#-----------------------------------------------------------------------------
# VLAN (802.1q support)
# For VLAN support, emerge sys-apps/iproute2
# The old vconfig based VLAN support is no longer available.
# For VLAN support, emerge net-misc/vconfig
# Specify the VLAN numbers for the interface like so
# Please ensure your VLAN IDs are NOT zero-padded
@@ -540,27 +537,10 @@
# need it up.
#config_eth0="null"
# 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"
# will be used. This is the replacement for the old 'vconfig set_name_type'
# functionality.
#vlan1_name="vlan1"
#vlan2_name="eth0.2"
# The following shows the old set_name_type setting and what new option to set:
# Using eth9 & VLAN VID 26 as an example.
# VLAN_PLUS_VID vlan26_name="vlan0026"
# VLAN_PLUS_VID_NO_PAD vlan26_name="vlan26"
# DEV_PLUS_VID vlan26_name="eth9.0026"
# DEV_PLUS_VID_NO_PAD vlan26_name="eth9.26"
# Set the vlan flags
#vlan1_flags="reorder_hdr off gvrp on loose_binding on"
# Configure in/egress maps
#vlan1_ingress="2:6 3:5"
#vlan1_egress="1:2"
# You can also configure the VLAN - see for vconfig man page for more details
#vconfig_eth0="set_name_type VLAN_PLUS_VID_NO_PAD"
#vconfig_vlan1="set_flag 1
#set_egress_map 2 6"
#config_vlan1="172.16.3.1/23"
#config_vlan2="172.16.2.1/23"
@@ -573,7 +553,8 @@
# This means you do not need to create init scripts in /etc/init.d for each
# vlan, you must need to create one for the physical interface.
# If you wish to control the configuration of each vlan through a separate
# script then you need to do this.
# script, or wish to rename the vlan interface to something that vconfig
# cannot then you need to do this.
#vlan_start_eth0="no"
# If you do the above then you may want to depend on eth0 like so
@@ -975,12 +956,10 @@
# and you're done :)
# By default we don't wait for netplug/ifplugd to configure the interface.
# If you would like it to wait so that other services know that network is
# up then you can specify a timeout here. A value of 0 means wait forever,
# and a negative value means never wait.
#plug_timeout_eth0="10"
# If you want to set it for all interfaces:
# If you would like it to wait so that other services know that network is up
# then you can specify a timeout here.
#plug_timeout="10"
# A value of 0 means wait forever.
# If you don't want to use netplug on a specific interface but you have it
# installed, you can disable it for that interface via the modules statement
@@ -994,72 +973,6 @@
#ifplugd_eth0="--api-mode=wlan"
# man ifplugd for more options
#-----------------------------------------------------------------------------
# Interface hardware tuning & configuration via ethtool
# If you need to change explicit hardware settings on your network card prior
# to bringing the interface up, the following is available.
#
# For a full listing of settings, please consulting ethtool(8) and the output
# of "ethtool --help".
#
# Multiple entries (seperated by newlines) are supported in all of the
# variables as some settings cannot be changed at the same time.
#
# Valid variable name fragments: change pause coalesce ring offload
# change_eeprom identify nfc flash rxfh_indir ntuple
# Set Wake-On-Lan to listen for SecureOn MagicPacket(tm), the message level to
# notify us of WOL changes, and the SecureOn password to 'DE:AD:BE:EF:CA:FE'.
#ethtool_change_eth0="wol gs
#msglvl wol on
#sopass DE:AD:BE:EF:CA:FE"
# Disable pause auto-negotiation and explicitly enable RX and TX pause.
#ethtool_pause_eth0="autoneg off
#rx on tx on"
# Enasble adaptive RX and TX coalescing
#ethtool_coalesce_eth0="adaptive-rx on adaptive-tx on"
# Change ring buffer settings
#ethtool_ring_eth0=""
# Enable all offload settings
#ethtool_offload_eth0="rx on tx on sg on tso on ufo on gso on gro on lro on"
# Change specific bytes in the EEPROM
#ethtool_change_eeprom_eth0=""
# Run the identify sequence on the interface for 1 second (does not return until completion)
#ethtool_identify_eth0="1"
# Configure receive network flow classification
#ethtool_nfc_eth0="
#rx-flow-hash tcp4 f
#rx-flow-hash udp4 s"
# Flash firmware to all regions
#ethtool_flash_eth0="/some/path/firmware1 0"
# Flash firmware to region 1
#ethtool_flash_eth0="/some/path/firmware2 1"
# Set receive flow hash indirection table for even balancing between N receive queues
#ethtool_rxfh_indir_eth0="equal 4"
# Configure Rx ntuple filters and actions
#ethtool_ntuple_eth0=""
# Additionally, there is a special control variable, if you need to change the
# order of option processing. The default order is:
# flash change-eeprom change pause coalesce ring offload identify nfc rxfh-indir ntuple
# Set global order to default
#ethtool_order="flash change-eeprom change pause coalesce ring offload identify nfc rxfh-indir ntuple"
# 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"
##############################################################################
# ADVANCED CONFIGURATION
#

View File

@@ -8,14 +8,5 @@ include ${MK}/os.mk
include Makefile.${OS}
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}
${SED} ${SED_REPLACE} ${SED_EXTRA} $^ > $@

View File

@@ -1,14 +1,12 @@
##############################################################################
# FreeBSD SPECIFIC OPTIONS
# This is the subsystem type. Valid options on FreeBSD:
# "" - nothing special
# "jail" - FreeBSD jails
# "prefix" - Prefix
# If this is commented out, automatic detection will be attempted.
# Note that automatic detection does not work in a prefix environment.
# If unset, the old automagic detection code will be triggered. Said old code
# is deprecated and will be removed not later than 2011/03/01.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
rc_sys="@RC_SYS_DEFAULT@"
# This should be set to the value representing what environment this file is
# PRESENTLY in, not what virtualization the environment is capable of.
# See the OpenRC migration guide for more details.
rc_sys=""

View File

@@ -1,6 +1,3 @@
##############################################################################
# LINUX SPECIFIC OPTIONS
# This is the subsystem type. Valid options on Linux:
# "" - nothing special
# "lxc" - Linux Containers
@@ -10,13 +7,16 @@
# "vserver" - Linux vserver
# "xen0" - Xen0 Domain
# "xenU" - XenU Domain
# 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.
# If unset, the old automagic detection code will be triggered. Said old code
# is deprecated and will be removed not later than 2011/03/01.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
rc_sys="@RC_SYS_DEFAULT@"
# This should be set to the value representing what environment this file is
# PRESENTLY in, not what virtualization the environment is capable of.
# See the OpenRC migration guide for more details.
rc_sys=""
##############################################################################
# LINUX SPECIFIC OPTIONS
# This is the number of tty's used in most of the rc-scripts (like
# consolefont, numlock, etc ...)

View File

@@ -1,15 +1,13 @@
##############################################################################
# NetBSD SPECIFIC OPTIONS
# This is the subsystem type. Valid options on NetBSD:
# "" - nothing special
# "prefix" - Prefix
# "xen0" - Xen0 Domain
# "xenU" - XenU Domain
# If this is commented out, automatic detection will be attempted.
# Note that automatic detection does not work in a prefix environment.
# If unset, the old automagic detection code will be triggered. Said old code
# is deprecated and will be removed not later than 2011/03/01.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
rc_sys="@RC_SYS_DEFAULT@"
# This should be set to the value representing what environment this file is
# PRESENTLY in, not what virtualization the environment is capable of.
# See the OpenRC migration guide for more details.
rc_sys=""

View File

@@ -21,7 +21,7 @@
# Linux users could specify /sbin/sulogin
#rc_shell=/bin/sh
# Do we allow any started service in the runlevel to satisfy the dependency
# Do we allow any started service in the runlevel to satisfy the depedency
# or do we want all of them regardless of state? For example, if net.eth0
# and net.eth1 are in the default runlevel then with rc_depend_strict="NO"
# both will be started, but services that depend on 'net' will work if either

View File

@@ -5,10 +5,12 @@ SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \
BIN= ${OBJS}
# Build our old net foo or not
ifeq (${MKOLDNET},yes)
_OLDNET= net.lo
endif
_NET_LO= ${_OLDNET}
_OLDNET_SH= case "${MKOLDNET}" in \
[Yy][Ee][Ss]) echo "net.lo";; \
*) echo "";; \
esac
_OLDNET!= ${_OLDNET_SH}
_NET_LO= ${_OLDNET}$(shell ${_OLDNET_SH})
INSTALLAFTER= _installafter_${_NET_LO}
CLEANFILES+= ${_NET_LO}

View File

@@ -7,7 +7,7 @@ depend()
need localmount
before logger
after clock sysctl
keyword -prefix -timeout
keyword -prefix
}
dir_writeable()
@@ -26,15 +26,14 @@ cleanup_tmp_dir()
fi
dir_writeable "$dir" || return 1
chmod a+rwt "$dir" 2> /dev/null
cd "$dir" || return 1
cd "$dir"
if yesno $wipe_tmp; then
ebegin "Wiping $dir directory"
local startopts="-x . -depth"
[ "$RC_UNAME" = Linux ] && startopts=". -xdev -depth"
# Faster than raw find
if ! rm -rf -- [^ajlq\.]* 2>/dev/null ; then
# Blah, too many files
find . -maxdepth 1 -name '[^ajlq\.]*' -exec rm -rf -- {} +
fi
# Faster than find
rm -rf -- [^ajlq\.]*
# pam_mktemp creates a .private directory within which
# each user gets a private directory with immutable
@@ -42,23 +41,27 @@ cleanup_tmp_dir()
# remove it.
[ -d /tmp/.private ] && chattr -R -a /tmp/.private 2> /dev/null
# Prune the paths that are left
find . -maxdepth 1 \
! -name . \
! -name lost+found \
! -name quota.user \
! -name aquota.user \
! -name quota.group \
! -name aquota.group \
! -name journal \
-exec rm -rf -- {} +
find $startopts ! -name . \
! -path "./lost+found" \
! -path "./lost+found/*" \
! -path "./quota.user" \
! -path "./quota.user/*" \
! -path "./aquota.user" \
! -path "./aquota.user/*" \
! -path "./quota.group" \
! -path "./quota.group/*" \
! -path "./aquota.group" \
! -path "./aquota.group/*" \
! -path "./journal" \
! -path "./journal/*" \
-exec rm -rf {} \;
eend 0
else
ebegin "Cleaning $dir directory"
rm -rf -- .X*-lock esrv* kio* \
jpsock.* .fam* .esd* \
orbit-* ssh-* ksocket-* \
.*-unix
rm -rf -- "$dir"/.X*-lock "$dir"/esrv* "$dir"/kio* \
"$dir"/jpsock.* "$dir"/.fam* "$dir"/.esd* \
"$dir"/orbit-* "$dir"/ssh-* "$dir"/ksocket-* \
"$dir"/.*-unix
eend 0
fi
}
@@ -68,7 +71,7 @@ mkutmp()
: >"$1"
# Not all systems have the utmp group
chgrp utmp "$1" 2>/dev/null
chmod 0664 "$1"
chmod 0660 "$1"
}
start()

View File

@@ -61,6 +61,12 @@ start()
done
cp "$font" "$RC_LIBEXECDIR"/console
echo "${font##*/}" >"$RC_LIBEXECDIR"/console/font
if yesno ${unicode:-${UNICODE}}; then
echo "" > "$RC_LIBEXECDIR"/console/unicode
else
rm -f "$RC_LIBEXECDIR"/console/unicode
fi
fi
return $retval

View File

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

View File

@@ -91,14 +91,10 @@ start()
# If setting UTC, don't bother to run hwclock when first booting
# as that's the default
if [ "$PREVLEVEL" != N -o \
"$utc_cmd" != --utc -o \
"$utc_cmd}" != --utc -o \
-n "$clock_args" ];
then
if yesno $clock_hctosys; then
_hwclock --hctosys $utc_cmd $clock_args
else
_hwclock --systz $utc_cmd $clock_args
fi
_hwclock --hctosys $utc_cmd $clock_args
retval=$(($retval + $?))
fi

View File

@@ -2,7 +2,7 @@
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
# All rights reserved. Released under the 2-clause BSD license.
description="Executes user programs in @SYSCONFDIR@/local.d"
description="Executes user commands in /etc/conf.d/local"
depend()
{
@@ -12,40 +12,22 @@ depend()
start()
{
einfo "Starting local"
local file
for file in @SYSCONFDIR@/local.d/*.start ; do
[ -x "$file" ] && "$file"
done
ebegin "Starting local"
if type local_start >/dev/null 2>&1; then
ewarn "@SYSCONFDIR@/conf.d/local should be removed."
ewarn "Please move the code from the local_start function"
ewarn "to scripts with an .start extension"
ewarn "in @SYSCONFDIR@/local.d"
local_start
fi
eend 0
eend $? "Failed to start local"
}
stop()
{
einfo "Stopping local"
local file
for file in @SYSCONFDIR@/local.d/*.stop; do
[ -x "$file" ] && "$file"
done
ebegin "Stopping local"
if type local_start >/dev/null 2>&1; then
ewarn "@SYSCONFDIR@/conf.d/local should be removed."
ewarn "Please move the code from the local_stop function"
ewarn "to scripts with an .stop extension"
ewarn "in @SYSCONFDIR@/local.d"
local_stop
fi
eend 0
eend $? "Failed to stop local"
}

View File

@@ -49,7 +49,7 @@ stop()
fi
if [ "$RC_UNAME" = Linux ]; then
no_umounts_r="$no_umounts_r|/proc|/proc/.*|/run|/sys|/sys/.*"
no_umounts_r="$no_umounts_r|/proc|/proc/.*|/sys|/sys/.*"
fi
no_umounts_r="^($no_umounts_r)$"
@@ -58,8 +58,8 @@ stop()
. "$RC_LIBEXECDIR"/sh/rc-mount.sh
# Umount loop devices
einfo "Unmounting loop devices"
# Umount loopback devices
einfo "Unmounting loopback devices"
eindent
do_unmount "umount -d" --skip-point-regex "$no_umounts_r" \
--node-regex "^/dev/loop"

View File

@@ -476,7 +476,7 @@ interface_down()
start()
{
local IFACE=${RC_SVCNAME#*.} oneworked=false fallback=false module=
local IFACE=${RC_SVCNAME#*.} oneworked=false module=
local IFVAR=$(shell_var "${IFACE}") cmd= our_metric=
local metric=0
@@ -563,7 +563,6 @@ start()
else
eval config=\$fallback_${config_index}
if [ -n "${config}" ]; then
fallback=true
eoutdent
ewarn "Trying fallback configuration ${config}"
eindent
@@ -586,13 +585,8 @@ start()
return 1
fi
local hidefirstroute=false first=true routes=
if ${fallback}; then
routes="$(_get_array "fallback_routes_${IFVAR}")"
fi
if [ -z "${routes}" ]; then
routes="$(_get_array "routes_${IFVAR}")"
fi
local hidefirstroute=false first=true
local routes="$(_get_array "routes_${IFVAR}")"
if [ "${IFACE}" = "lo" -o "${IFACE}" = "lo0" ]; then
if [ "${config_0}" != "null" ]; then
routes="127.0.0.0/8 via 127.0.0.1
@@ -690,11 +684,7 @@ stop()
# Only delete addresses for interfaces that exist
if _exists; then
# PPP can manage it's own addresses when IN_BACKGROUND
# Important in case "demand" set on the ppp link
if ! (yesno ${IN_BACKGROUND} && is_ppp) ; then
_delete_addresses "${IFACE}"
fi
_delete_addresses "${IFACE}"
fi
for module in ${MODULES}; do

View File

@@ -14,7 +14,7 @@ depend()
start()
{
# Make sure we insert usbcore if it's a module
if [ -f /proc/modules -a ! -d /sys/module/usbcore -a ! -d /proc/bus/usb ]; then
if [ -f /proc/modules -a ! -d /proc/bus/usb ]; then
modprobe -q usbcore
fi

View File

@@ -8,22 +8,17 @@ start()
{
if [ -e "$RC_SVCDIR"/clock-skewed ]; then
ewarn "WARNING: clock skew detected!"
if ! yesno "${RC_GOINGDOWN}"; then
if ! yesno "savecache_skewed"; then
eerror "Not saving deptree cache"
return 1
fi
fi
ebegin "Saving dependency cache"
local rc=
if [ ! -d "$RC_LIBEXECDIR"/cache ]; then
rm -rf "$RC_LIBEXECDIR"/cache
if ! mkdir "$RC_LIBEXECDIR"/cache; then
rc=$?
if yesno "${RC_GOINGDOWN}"; then
rc=0
fi
eend $rc
return $rc
eend $?
return $?
fi
fi
local save=
@@ -33,9 +28,5 @@ start()
if [ -n "$save" ]; then
cp -p $save "$RC_LIBEXECDIR"/cache 2>/dev/null
fi
rc=$?
if yesno "${RC_GOINGDOWN}"; then
rc=0
fi
eend $rc
eend $?
}

View File

@@ -81,7 +81,7 @@ do_routes()
*) family=;;
esac
fi
route $family $xtra $2 -$args
route $famly $xtra $2 -$args
;;
esac
veend $?

View File

@@ -10,25 +10,16 @@ depend()
start()
{
local conf= retval=0 err errs
local conf= retval=0
ebegin "Configuring kernel parameters"
eindent
for conf in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
if [ -r "$conf" ]; then
vebegin "applying $conf"
if ! err=$(sysctl -q -p "$conf" 2>&1) ; then
errs="${errs} ${err}"
sysctl -q -e -p "${conf}"
fi
sysctl -p "$conf" >/dev/null
veend $? || retval=1
fi
done
eoutdent
if [ ${retval} -eq 0 ] && [ -n "${errs}" ] ; then
ewarn "Unknown keys:${errs}"
fi
eend $retval "Some errors were encountered: ${errs}"
eend $retval "Some errors were encountered"
}

View File

@@ -10,8 +10,6 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend()
{
keyword -openvz -prefix -uml -vserver -xenu
need root
after bootmisc
}
start()
@@ -33,16 +31,5 @@ start()
printf "\033%s" "$termencoding" >$ttydev$n
n=$(($n + 1))
done
# Save the encoding for use immediately at boot
if [ -w "$RC_LIBEXECDIR" ]; then
mkdir -p "$RC_LIBEXECDIR"/console
if yesno ${unicode:-${UNICODE}}; then
echo "" > "$RC_LIBEXECDIR"/console/unicode
else
rm -f "$RC_LIBEXECDIR"/console/unicode
fi
fi
eend 0
}

View File

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

View File

@@ -1,9 +0,0 @@
This directory should contain programs or scripts which are to be run
when the local service is started or stopped.
If a file in this directory is executable and it has a .start extension,
it will be run when the local service is started. If a file is
executable and it has a .stop extension, it will be run when the local
service is stopped.
All files are processed in lexical order.

View File

@@ -148,8 +148,7 @@ have this keyword.
Don't stop this service when changing runlevels, even if not present.
This includes shutting the system down.
.It Dv -timeout
Other services should wait indefinitely for this service to start. Use
this keyword if your service may take longer than 60 seconds to start.
Do not time out waiting for that service.
.It Dv -jail
When in a jail, exclude this service from any dependencies. The service can
still be run directly. Set via

0
mk/.mk Normal file
View File

View File

@@ -1,13 +1,13 @@
# Copyright (c) 2008 Roy Marples <roy@marples.name>
# Setup some good default CFLAGS
CFLAGS?= -O2 -g
CFLAGS?= -O2
# Default to using the C99 standard
CSTD?= c99
ifneq (${CSTD},)
CFLAGS+= -std=${CSTD}
endif
_CSTD_SH= if test -n "${CSTD}"; then echo "-std=${CSTD}"; else echo ""; fi
_CSTD!= ${_CSTD_SH}
CFLAGS+= ${_CSTD}$(shell ${_CSTD_SH})
# Try and use some good cc flags if we're building from git
# We don't use -pedantic as it will warn about our perfectly valid
@@ -29,7 +29,5 @@ _CC_FLAGS_SH= for f in ${_CCFLAGS}; do \
${CC} $$f -S -xc -o /dev/null - ; \
then printf "%s" "$$f "; fi \
done;
_CC_FLAGS:= $(shell ${_CC_FLAGS_SH})
CFLAGS+= ${_CC_FLAGS}
include ${MK}/debug.mk
_CC_FLAGS!= ${_CC_FLAGS_SH}
CFLAGS+= ${_CC_FLAGS}$(shell ${_CC_FLAGS_SH})

View File

@@ -3,14 +3,14 @@
# All rights reserved. Released under the 2-clause BSD license.
_RC_DEBUG_SH= case "${DEBUG}" in "") echo "";; *) echo "-DRC_DEBUG";; esac
_RC_DEBUG:= $(shell ${_RC_DEBUG_SH})
CPPFLAGS+= ${_RC_DEBUG}
_RC_DEBUG!= ${_RC_DEBUG_SH}
CPPFLAGS+= ${_RC_DEBUG}$(shell ${_RC_DEBUG_SH})
# Should we enable this with a different flag?
_LD_DEBUG_SH= case "${DEBUG}" in "") echo "";; *) echo "-Wl,--rpath=../librc -Wl,--rpath=../libeinfo";; esac
_LD_DEBUG:= $(shell ${_LD_DEBUG_SH})
LDFLAGS+= ${_LD_DEBUG}
_LD_DEBUG!= ${_LD_DEBUG_SH}
LDFLAGS+= ${_LD_DEBUG}$(shell ${_LD_DEBUG_SH})
_GGDB_SH= case "${DEBUG}" in "") echo "";; *) echo "-ggdb";; esac
_GGDB:= $(shell ${_GGDB_SH})
CFLAGS+= ${_GGDB}
_GGDB!= ${_GGDB_SH}
CFLAGS+= ${_GGDB}$(shell ${_GGDB_SH})

2
mk/depend-.mk Normal file
View File

@@ -0,0 +1,2 @@
# This space left intentionally blank because gmake does not load .depend
# by default

3
mk/depend-gmake.mk Normal file
View File

@@ -0,0 +1,3 @@
# Tell gmake to include the optional dependency file.
# This sucks, but I don't know any other way of portably making this work.
-include .depend

View File

@@ -10,4 +10,9 @@ IGNOREFILES+= .depend
depend: .depend extra_depend
-include .depend
# Nasty hack. depend-.mk is a blank file, depend-gmake.mk has a gmake specific
# command to optionally include .depend.
# Someone should patch gmake to optionally include .depend if it exists.
_INC_DEP= $(shell if ${MAKE} --version | grep -q "^GNU "; then \
echo "gmake"; else echo ""; fi)
include ${MK}/depend-${_INC_DEP}.mk

View File

@@ -9,8 +9,8 @@ DISTFILE?= ${DISTPREFIX}.tar.bz2
CLEANFILES+= ${NAME}-*.tar.bz2
_SNAP_SH= date -u +%Y%m%d%H%M
_SNAP:= $(shell ${_SNAP_SH})
SNAP= ${_SNAP}
_SNAP!= ${_SNAP_SH}
SNAP= ${_SNAP}$(shell ${_SNAP_SH})
SNAPDIR= ${DISTPREFIX}-${SNAP}
SNAPFILE= ${SNAPDIR}.tar.bz2

View File

@@ -4,5 +4,5 @@ _GITVER_SH= if git rev-parse --short HEAD >/dev/null 2>&1; then \
else \
echo ""; \
fi
_GITVER:= $(shell ${_GITVER_SH})
GITVER= ${_GITVER}
_GITVER!= ${_GITVER_SH}
GITVER= ${_GITVER}$(shell ${_GITVER_SH})

View File

@@ -31,6 +31,8 @@ lib${LIB}.a: ${OBJS} ${STATICOBJS}
${SHLIB_NAME}: ${VERSION_MAP}
LDFLAGS+= -Wl,--version-script=${VERSION_MAP}
# We need to ensure we use libraries in /lib
LDFLAGS+= -L/${LIBNAME} -Wl,-rpath=/${LIBNAME}
${SHLIB_NAME}: ${SOBJS}
@${ECHO} building shared library $@

3
mk/ncurses.mk Normal file
View File

@@ -0,0 +1,3 @@
LIBTERMCAP?= -lncurses
CPPFLAGS+= -DHAVE_TERMCAP
LDADD+= ${LIBTERMCAP}

View File

@@ -4,8 +4,8 @@
# Generic definitions
_OS_SH= uname -s
_OS:= $(shell ${_OS_SH})
OS?= ${_OS}
_OS!= ${_OS_SH}
OS?= ${_OS}$(shell ${_OS_SH})
include ${MK}/os-${OS}.mk
RC_LIB= /$(LIBNAME)/rc

View File

@@ -1,10 +1,6 @@
ifeq (${MKPAM},pam)
LIBPAM?= -lpam
CPPFLAGS+= -DHAVE_PAM
LDADD+= ${LIBPAM}
PAMDIR?= /etc/pam.d
PAMMODE?= 0644
else ifneq (${MKPAM},)
$(error if MKPAM is defined, it must be "pam")
endif

View File

@@ -15,8 +15,8 @@ _DYNLINK_SH= if test "${PREFIX}" = "" && test -e /libexec/ld.elf_so; then \
else \
echo ""; \
fi
_DYNLINK:= $(shell ${_DYNLINK_SH})
LDFLAGS+= ${_DYNLINK}
_DYNLINK!= ${_DYNLINK_SH}
LDFLAGS+= ${_DYNLINK}$(shell ${_DYNLINK_SH})
LDFLAGS+= -Wl,-rpath=${PREFIX}/${LIBNAME}
LDFLAGS+= ${PROGLDFLAGS}

View File

@@ -8,11 +8,11 @@ include ${MK}/os.mk
OBJS+= ${SRCS:.in=}
_PKG_SED_SH= if test "${PREFIX}" = "${PKG_PREFIX}"; then echo "-e 's:@PKG_PREFIX@::g'"; else echo "-e 's:@PKG_PREFIX@:${PKG_PREFIX}:g'"; fi
_PKG_SED:= $(shell ${_PKG_SED_SH})
_PKG_SED!= ${_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:= $(shell ${_LCL_SED_SH})
_LCL_SED!= ${_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' -e 's:@RC_SYS_DEFAULT@:${MKRCSYS}: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' ${_PKG_SED}$(shell ${_PKG_SED_SH}) ${_LCL_SED}$(shell ${_LCL_SED_SH})
# Tweak our shell scripts
.SUFFIXES: .sh.in .in

View File

@@ -12,8 +12,8 @@ SH= /bin/sh
PREFIX?=
_UPREFIX_SH= case "${PREFIX}" in "") echo /usr;; *) echo "${PREFIX}";; esac
_UPREFIX:= $(shell ${_UPREFIX_SH})
UPREFIX= ${_UPREFIX}
_UPREFIX!= ${_UPREFIX_SH}
UPREFIX= ${_UPREFIX}$(shell ${_UPREFIX_SH})
LOCAL_PREFIX= /usr/local
PICFLAG?= -fPIC
@@ -21,7 +21,6 @@ PICFLAG?= -fPIC
SYSCONFDIR?= ${PREFIX}/etc
INITDIR?= ${SYSCONFDIR}/init.d
CONFDIR?= ${SYSCONFDIR}/conf.d
LOCALDIR?= ${SYSCONFDIR}/local.d
BINDIR?= ${PREFIX}/sbin
BINMODE?= 0755
@@ -30,8 +29,8 @@ INCDIR?= ${UPREFIX}/include
INCMODE?= 0444
_LIBNAME_SH= case `readlink /lib` in /lib64|lib64) echo "lib64";; *) echo "lib";; esac
_LIBNAME:= $(shell ${_LIBNAME_SH})
LIBNAME?= ${_LIBNAME}
_LIBNAME!= ${_LIBNAME_SH}
LIBNAME?= ${_LIBNAME}$(shell ${_LIBNAME_SH})
LIBDIR?= ${UPREFIX}/${LIBNAME}
LIBMODE?= 0444
SHLIBDIR?= ${PREFIX}/${LIBNAME}

View File

@@ -1,11 +1,3 @@
ifeq (${MKTERMCAP},ncurses)
LIBTERMCAP?= -lncurses
CPPFLAGS+= -DHAVE_TERMCAP
LDADD+= ${LIBTERMCAP}
else ifeq (${MKTERMCAP},termcap)
LIBTERMCAP?= -ltermcap
CPPFLAGS+= -DHAVE_TERMCAP
LDADD+= ${LIBTERMCAP}
else ifneq (${MKTERMCAP},)
$(error If MKTERMCAP is defined, it must be ncurses or termcap)
endif

View File

@@ -1,7 +1,7 @@
SRCS+= iwconfig.sh.in
INC+= adsl.sh apipa.sh arping.sh bonding.sh br2684ctl.sh bridge.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 \
ccwgroup.sh clip.sh iproute2.sh ifplugd.sh ip6to4.sh ipppd.sh \
iwconfig.sh netplugd.sh pppd.sh pump.sh tuntap.sh udhcpc.sh \
vlan.sh
.SUFFIXES: .sh.Linux.in

View File

@@ -97,16 +97,13 @@ bonding_pre_start()
# finally add in slaves
eoutdent
if [ -d /sys/class/net ]; then
sys_bonding_path=/sys/class/net/"${IFACE}"/bonding
if [ -n "${primary}" ]; then
echo "+${primary}" >$sys_bonding_path/slaves
echo "${primary}" >$sys_bonding_path/primary
echo "+${primary}" >/sys/class/net/"${IFACE}"/bonding/slaves
echo "${primary}" >/sys/class/net/"${IFACE}"/bonding/primary
slaves="${slaves/${primary}/}"
fi
for s in ${slaves}; do
[ "${s}" = "${primary}" ] && continue
if ! grep -q ${s} $sys_bonding_path/slaves; then
echo "+${s}" >$sys_bonding_path/slaves
fi
echo "+${s}" >/sys/class/net/"${IFACE}"/bonding/slaves
done
else
/sbin/ifenslave "${IFACE}" ${slaves} >/dev/null

View File

@@ -45,8 +45,8 @@ bridge_pre_start()
eval bridge_unset=\${bridge_${IFVAR}-y\}
eval brctl_unset=\${brctl_${IFVAR}-y\}
if [ -z "${brif}" -a "${brctl_unset}" = 'y' ]; then
if [ -z "${ports}" -a "${bridge_unset}" = "y" ]; then
if [ -z "${brif}" -a "${brctl_unset}" == 'y' ]; then
if [ -z "${ports}" -a "${bridge_unset}" == "y" ]; then
#eerror "Misconfigured static bridge detected (see net.example)"
return 0
fi

View File

@@ -8,89 +8,60 @@ ccwgroup_depend()
before interface
}
ccwgroup_load_modules()
{
# make sure we have ccwgroup support or this is a crap shoot
if [ ! -d /sys/bus/ccwgroup ] ; then
modprobe -q ccwgroup
if [ ! -d /sys/bus/ccwgroup ] ; then
eerror "ccwgroup support missing in kernel"
return 1
fi
fi
# verify the specific interface is supported
if [ ! -d /sys/bus/ccwgroup/drivers/$1 ] ; then
modprobe $1 >& /dev/null
if [ ! -d /sys/bus/ccwgroup/drivers/$1 ] ; then
eerror "$1 support missing in kernel"
return 1
fi
fi
return 0
}
ccwgroup_pre_start()
{
local ccwgroup="$(_get_array "ccwgroup_${IFVAR}")"
[ -z "${ccwgroup}" ] && return 0
local ccw_type
eval ccw_type=\${ccwgroup_type_${IFVAR}:-qeth}
ccwgroup_load_modules ${ccw_type} || return 1
einfo "Enabling ccwgroup/${ccw_type} on ${IFACE}"
set -- ${ccwgroup}
local first=$1; shift
if [ -e /sys/devices/${ccw_type}/${first}/online ]; then
echo "0" >/sys/devices/${ccw_type}/${first}/online
else
echo "${first}$(printf ',%s' "$@")" >/sys/bus/ccwgroup/drivers/${ccw_type}/group
if [ ! -d /sys/bus/ccwgroup ]; then
modprobe qeth
if [ ! -d /sys/bus/ccwgroup ]; then
eerror "ccwgroup support missing in kernel"
return 1
fi
fi
local var val
for var in $(_get_array "ccwgroup_opts_${IFVAR}") online=1 ; do
val=${var#*=}
var=${var%%=*}
echo "${val}" > /sys/devices/${ccw_type}/${first}/${var}
einfo "Enabling ccwgroup on ${IFACE}"
local x= ccw= first= layer2=
for x in ${ccwgroup}; do
[ -z "${first}" ] && first=${x}
ccw="${ccw}${ccw:+,}${x}"
done
if [ -e /sys/devices/qeth/"${first}" ]; then
echo "0" >/sys/devices/qeth/"${first}"/online
else
echo "${ccw}" >/sys/bus/ccwgroup/drivers/qeth/group
fi
eval layer2=\$qeth_layer2_${IFVAR}
echo "${layer2:-0}" > /sys/devices/qeth/"${first}"/layer2
echo "1" >/sys/devices/qeth/"${first}"/online
eend $?
}
ccwgroup_pre_stop()
{
local path="/sys/class/net/${IFACE}"
# Erase any existing ccwgroup to be safe
service_set_value ccwgroup_device ""
service_set_value ccwgroup_type ""
[ ! -L "${path}"/device/driver ] && return 0
case "$(readlink "${path}"/device/driver)" in
*/bus/ccwgroup/*) ;;
[ ! -L /sys/class/net/"${FACE}"/driver ] && return 0
local driver="$(readlink /sys/class/net/"${IFACE}"/driver)"
case "${diver}" in
*/bus/ccwgroup/*);;
*) return 0;;
esac
local device
device="$(readlink "${path}"/device)"
local device="$(readlink /sys/class/net/"${IFACE}"/device)"
device=${device##*/}
service_set_value ccwgroup_device "${device}"
device="$(readlink "${path}"/device/driver)"
device=${device##*/}
service_set_value ccwgroup_type "${device}"
}
ccwgroup_post_stop()
{
local device="$(service_get_value ccwgroup_device)"
[ -z "${device}" ] && return 0
local ccw_type="$(service_get_value ccwgroup_type)"
einfo "Disabling ccwgroup/${ccw_type} on ${IFACE}"
echo "0" >/sys/devices/${ccw_type}/"${device}"/online
echo "1" >/sys/devices/${ccw_type}/"${device}"/ungroup
einfo "Disabling ccwgroup on ${iface}"
echo "0" >/sys/devices/qeth/"${device}"/online
echo "1" >/sys/devices/qeth/"${device}"/ungroup
eend $?
}

View File

@@ -1,54 +0,0 @@
# Copyright (c) 2011 by Gentoo Foundation
# All rights reserved. Released under the 2-clause BSD license.
_ethtool() {
echo /usr/sbin/ethtool
}
ethtool_depend()
{
program $(_ethtool)
before interface
}
# This is just to trim whitespace, do not add any quoting!
_trim() {
echo $*
}
ethtool_pre_start() {
local order opt OFS="${OIFS}"
eval order=\$ethtool_order_${IFVAR}
[ -z "${order}" ] && eval order=\$ethtool_order
[ -z "${order}" ] && order="flash change-eeprom change pause coalesce ring offload identify nfc rxfh-indir ntuple"
# ethtool options not used: --driver, --register-dump, --eeprom-dump, --negotiate, --test, --statistics
eindent
for opt in ${order} ; do
local args
eval args=\$ethtool_$(echo $opt | tr - _)_${IFVAR}
# Skip everything if no arguments
[ -z "${args}" ] && continue
# Split on \n
local IFS="$__IFS"
for p in ${args} ; do
IFS="${OIFS}"
local args_pretty="$(_trim "${p}")"
# Do nothing if empty
[ -z "${args_pretty}" ] && continue
args_pretty="--${opt} $IFACE ${args_pretty}"
args="--${opt} $IFACE ${args}"
ebegin "ethtool ${args_pretty}"
$(_ethtool) ${args}
rc=$?
eend $rc "ethtool exit code $rc"
# TODO: ethtool has MANY different exit codes, with no
# documentation as to which ones are fatal or not. For now we
# simply print the exit code and don't stop the start sequence.
done
IFS="${OIFS}"
done
eoutdent
}

View File

@@ -51,9 +51,7 @@ ifplugd_pre_start()
eindent
# IFACE-specific, then global, then default
eval timeout=\$plug_timeout_${IFVAR}
[ -z "${timeout}" ] && timeout=$plug_timeout
[ -z "${timeout}" ] && timeout=-1
if [ ${timeout} -eq 0 ]; then
ewarn "WARNING: infinite timeout set for ${IFACE} to come up"

View File

@@ -221,7 +221,7 @@ _ip_rule_runner() {
local IFS="$__IFS"
for ru in $rules ; do
unset IFS
ruN="$(_trim "${ru}")"
ruN="$(trim "${ru}")"
[ -z "${ruN}" ] && continue
vebegin "${cmd} ${ruN}"
ip rule ${cmd} ${ru}
@@ -239,14 +239,9 @@ iproute2_pre_start()
if [ -n "${tunnel}" ]; then
# Set our base metric to 1000
metric=1000
# Bug#347657: If the mode is 'ipip6' or 'ip6ip6', the -6 must be passed
# to iproute2 during tunnel creation.
local ipproto=''
[ "${tunnel##mode ipip6}" != "${tunnel}" ] && ipproto='-6'
[ "${tunnel##mode ip6ip6}" != "${tunnel}" ] && ipproto='-6'
ebegin "Creating tunnel ${IFVAR}"
ip ${ipproto} tunnel add ${tunnel} name "${IFACE}"
ip tunnel add ${tunnel} name "${IFACE}"
eend $? || return 1
_up
fi

View File

@@ -53,9 +53,7 @@ netplugd_pre_start()
eindent
# IFACE-specific, then global, then default
eval timeout=\$plug_timeout_${IFVAR}
[ -z "${timeout}" ] && timeout=$plug_timeout
[ -z "${timeout}" ] && timeout=-1
if [ ${timeout} -eq 0 ]; then
ewarn "WARNING: infinite timeout set for ${IFACE} to come up"

View File

@@ -3,13 +3,14 @@
udhcpc_depend()
{
program start /bin/busybox
program start /sbin/udhcpc
after interface
provide dhcp
}
_config_vars="$_config_vars dhcp udhcpc"
# WARNING:- The relies heavily on Gentoo patches and scripts for udhcpc
udhcpc_start()
{
local args= opt= opts= pidfile="/var/run/udhcpc-${IFACE}.pid"
@@ -21,22 +22,17 @@ udhcpc_start()
eval opts=\$dhcp_${IFVAR}
[ -z "${opts}" ] && opts=${dhcp}
# This omits the Gentoo specific patch to busybox,
# but it creates temporary files.
# We can move this stuff to udhcpc hook script to avoid that, should we do?
local conf="/var/run/udhcpc-${IFACE}.conf"
echo -n >"$conf"
# Map some generic options to dhcpcd
for opt in ${opts}; do
case "${opt}" in
nodns) echo "PEER_DNS=no" >>"$conf" ;;
nontp) echo "PEER_NTP=no" >>"$conf" ;;
nogateway) echo "PEER_ROUTERS=no" >>"$conf" ;;
nodns) args="${args} --env PEER_DNS=no";;
nontp) args="${args} --env PEER_NTP=no";;
nogateway) args="${args} --env PEER_ROUTERS=no";;
nosendhost) sendhost=false;
esac
done
[ "${metric:-0}" != "0" ] && echo "IF_METRIC=${metric}" >>"$conf"
[ "${metric:-0}" != "0" ] && args="${args} --env IF_METRIC=${metric}"
ebegin "Running udhcpc"
@@ -55,9 +51,9 @@ udhcpc_start()
fi
case " ${args} " in
*" --quit "*|*" -q "*) x="/bin/busybox udhcpc";;
*) x="start-stop-daemon --start --exec /bin/busybox \
--pidfile \"${pidfile}\" -- udhcpc";;
*" --quit "*|*" -q "*) x="/sbin/udhcpc";;
*) x="start-stop-daemon --start --exec /sbin/udhcpc \
--pidfile \"${pidfile}\" --";;
esac
case " ${args} " in
@@ -72,8 +68,11 @@ udhcpc_start()
;;
esac
local script="${RC_LIBEXECDIR}"/sh/udhcpc.h
[ -x "${script}" ] || script=/lib/rcscripts/sh/udhcpc.sh
eval "${x}" "${args}" --interface="${IFACE}" --now \
--script="${RC_LIBEXECDIR}/sh/udhcpc-hook.sh" \
--script="${script}" \
--pidfile="${pidfile}" >/dev/null
eend $? || return 1
@@ -93,18 +92,14 @@ udhcpc_stop()
ebegin "Stopping udhcpc on ${IFACE}"
case " ${opts} " in
*" release "*)
start-stop-daemon --stop --quiet --signal USR2 \
--exec /bin/busybox --pidfile "${pidfile}"
start-stop-daemon --stop --quiet --oknodo --signal USR2 \
--exec /sbin/udhcpc --pidfile "${pidfile}"
if [ -f /var/cache/udhcpc-"${IFACE}".lease ]; then
rm -f /var/cache/udhcpc-"${IFACE}".lease
fi
;;
esac
start-stop-daemon --stop --exec /bin/busybox --pidfile "${pidfile}"
start-stop-daemon --stop --exec /sbin/udhcpc --pidfile "${pidfile}"
eend $?
if [ -e "/var/run/udhcpc-${IFACE}.conf" ]; then
rm -f "/var/run/udhcpc-${IFACE}.conf"
fi
}

View File

@@ -1,18 +1,9 @@
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
# All rights reserved. Released under the 2-clause BSD license.
_ip()
{
if [ -x /bin/ip ]; then
echo /bin/ip
else
echo /sbin/ip
fi
}
vlan_depend()
{
program $(_ip)
program /sbin/vconfig
after interface
before dhcp
}
@@ -45,12 +36,31 @@ _check_vlan()
vlan_pre_start()
{
local vconfig
eval vconfig=\$vconfig_${IFVAR}
if [ -n "${vconfig}" ]; then
eerror "You must convert your vconfig_ VLAN entries to vlan${N} entries."
local vc="$(_get_array "vconfig_${IFVAR}")"
[ -z "${vc}" ] && return 0
_check_vlan || return 1
_exists || return 1
local v= x= e=
local IFS="$__IFS"
for v in ${vc}; do
unset IFS
case "${v}" in
set_name_type" "*) x=${v};;
*)
set -- ${v}
x="$1 ${IFACE}"
shift
x="${x} $@"
;;
esac
e="$(vconfig ${x} 2>&1 1>/dev/null)"
[ -z "${e}" ] && continue
eerror "${e}"
return 1
fi
done
}
vlan_post_start()
@@ -62,22 +72,10 @@ vlan_post_start()
_check_vlan || return 1
_exists || return 1
local vlan= e= s= vname= vflags= vingress= vegress=
local vlan= e= s=
for vlan in ${vlans}; do
einfo "Adding VLAN ${vlan} to ${IFACE}"
# We need to gather all interface configuration options
# 1) naming. Default to the standard "${IFACE}.${vlan}" but it can be anything
eval vname=\$vlan${vlan}_name
[ -z "${vname}" ] && vname="${IFACE}.${vlan}"
# 2) flags
eval vflags=\$vlan${vlan}_flags
# 3) ingress/egress map
eval vingress=\$vlan${vlan}_ingress
[ -z "${vingress}" ] || vingress="ingress-qos-map ${vingress}"
eval vegress=\$vlan${vlan}_egress
[ -z "${vegress}" ] || vegress="egress-qos-map ${vegress}"
e="$(ip link add link "${IFACE}" name "${vname}" type vlan id "${vlan}" ${vflags} ${vingress} ${vegress} 2>&1 1>/dev/null)"
e="$(vconfig add "${IFACE}" "${vlan}" 2>&1 1>/dev/null)"
if [ -n "${e}" ]; then
eend 1 "${e}"
continue
@@ -112,7 +110,7 @@ vlan_post_stop()
stop
) && {
mark_service_stopped "net.${vlan}"
ip link delete "${vlan}" type vlan >/dev/null
vconfig rem "${vlan}" >/dev/null
}
done

1
sh/.gitignore vendored
View File

@@ -7,4 +7,3 @@ init.sh
init-early.sh
ifwatchd-carrier.sh
ifwatchd-nocarrier.sh
udhcpc-hook.sh

View File

@@ -1,5 +1,5 @@
SRCS+= init.sh.in init-early.sh.in udhcpc-hook.sh.in
BIN+= init-early.sh udhcpc-hook.sh
SRCS+= init.sh.in init-early.sh.in
BIN+= init-early.sh
.SUFFIXES: .sh.Linux.in
.sh.Linux.in.sh:

View File

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

View File

@@ -65,21 +65,27 @@ mount_svcdir()
# By default VServer already has /proc mounted, but OpenVZ does not!
# However, some of our users have an old proc image in /proc
# NFC how they managed that, but the end result means we have to test if
# /proc actually works or not. We do this by comparing two reads of
# /proc/self/environ for which we have set the variable VAR to two
# different values. If the comparison comes back equal, we know that
# /proc is not working.
# /proc actually works or not. We to this by comparing two reads of
# /proc/self/stat. They will not match, because at least the minor fault count
# field (field 10) should have changed.
#
# We can use any file here that fills the following requirements:
# - changes between sequential reads
# - is world-readable (not blocked in hardened kernel)
# - Is only a single line (ergo entire check is doable with no forks)
mountproc=true
f=/proc/self/environ
f=/proc/self/stat
if [ -e $f ]; then
if [ "$(VAR=a cat $f)" = "$(VAR=b cat $f)" ]; then
exec 9<$f ; read a <&9 ; exec 9<&-
exec 9<$f ; read b <&9 ; exec 9<&-
if [ "$a" = "$b" ]; then
eerror "You have cruft in /proc that should be deleted"
else
einfo "/proc is already mounted, skipping"
mountproc=false
fi
fi
unset f
unset a b f
if $mountproc; then
procfs="proc"
@@ -91,30 +97,6 @@ if $mountproc; then
eend $?
fi
# Mount tmpfs on /run when directory exists.
# /run is a new directory for storing volatile runtime data.
# Read more about /run at https://lwn.net/Articles/436012
if [ -d /run ]; then
if mountinfo -q /run; then
einfo "/run is already mounted, skipping"
else
ebegin "Mounting /run"
if ! fstabinfo --mount /run; then
mount -t tmpfs -o mode=0755,nosuid,nodev tmpfs /run
fi
eend $?
fi
if [ ! -d /run/lock ]; then
mkdir /run/lock
fi
if [ -d /run/lock ]; then
chown root:uucp /run/lock
chmod 0775 /run/lock
fi
elif [ -e /run ]; then
einfo "Unable to mount /run since it is not a directory"
fi
# Try to mount xenfs as early as possible, otherwise rc_sys() will always
# return RC_SYS_XENU and will think that we are in a domU while it's not.
if grep -Eq "[[:space:]]+xenfs$" /proc/filesystems; then

View File

@@ -16,18 +16,6 @@ sourcex()
fi
}
if [ ! -e ${RC_SVCDIR}/softlevel ]; then
eerror "You are attempting to run an openrc service on a"
eerror "system which openrc did not boot."
eerror "You may be inside a chroot or you may have used"
eerror "another initialization system to boot this system."
eerror "In this situation, you will get unpredictable results!"
eerror
eerror "If you really want to do this, issue the following command:"
eerror "touch ${RC_SVCDIR}/softlevel"
exit 1
fi
sourcex "@SYSCONFDIR@/init.d/functions.sh"
sourcex "@LIBEXECDIR@/sh/rc-functions.sh"

View File

@@ -1,117 +0,0 @@
#!@SHELL@
# busybox udhcp setup script
PATH=/bin:/usr/bin:/sbin:/usr/sbin
peer_var()
{
[ -n "$1" ] && [ "$1" != "yes" ]
}
update_dns()
{
peer_var "${PEER_DNS}" && return
[ -z "${domain}" ] && [ -z "${dns}" ] && return
conf="# Generated by udhcpc for ${interface}\n"
[ -n "${domain}" ] && conf="${conf}search ${domain}\n"
for i in ${dns} ; do
conf="${conf}nameserver ${i}\n"
done
if [ -x /sbin/resolvconf ] ; then
printf "${conf}" | resolvconf -a ${interface}
else
printf "${conf}" > /etc/resolv.conf
chmod 644 /etc/resolv.conf
fi
}
update_ntp()
{
peer_var "${PEER_NTP}" && return
[ -z "${ntpsrv}" ] && return
conf="# Generated by udhcpc for interface ${interface}\n"
conf="${conf}restrict default noquery notrust nomodify\n"
conf="${conf}restrict 127.0.0.1\n"
for i in ${ntpsrv} ; do
conf="${conf}restrict ${i} nomodify notrap noquery\n"
conf="${conf}server ${i}\n"
done
conf="${conf}driftfile /var/lib/ntp/ntp.drift\n"
conf="${conf}logfile /var/log/ntp.log\n"
printf "${conf}" > /etc/ntp.conf
chmod 644 /etc/ntp.conf
}
update_hostname()
{
peer_var "${PEER_HOSTNAME}" && return
[ -z "${hostname}" ] && return
myhost="$(hostname)"
[ -z "${myhost}" ] || [ "${myhost}" = "(none)" ] && hostname "${hostname}"
}
update_interface()
{
[ -n "${broadcast}" ] && broadcast="broadcast ${broadcast}"
[ -n "${subnet}" ] && netmask="netmask ${subnet}"
[ -n "${mtu}" ] && mtu="mtu ${mtu}"
ifconfig "${interface}" ${ip} ${broadcast} ${netmask} ${mtu}
}
update_routes()
{
peer_var "${PEER_ROUTERS}" && return
if [ -n "${router}" ] ; then
metric=
[ -n "${IF_METRIC}" ] && metric="metric ${IF_METRIC}"
for i in ${router} ; do
route add default gw "${i}" ${metric} dev "${interface}"
done
fi
}
deconfig()
{
ifconfig "${interface}" 0.0.0.0
if ! peer_var "${PEER_ROUTERS}" ; then
while route del default dev "${interface}" >& /dev/null; do
:
done
fi
if ! peer_var "${PEER_DNS}" ; then
[ -x /sbin/resolvconf ] && resolvconf -d "${interface}"
fi
}
if [ -r "/var/run/udhcpc-${interface}.conf" ]; then
. "/var/run/udhcpc-${interface}.conf"
fi
case "$1" in
bound|renew)
update_hostname
update_interface
update_routes
update_dns
update_ntp
;;
deconfig|leasefail)
deconfig
;;
nak)
echo "nak: ${message}"
;;
*)
echo "unknown option $1" >&2
echo "Usage: $0 {bound|deconfig|leasefail|nak|renew}" >&2
exit 1
;;
esac
exit 0

View File

@@ -1 +1,7 @@
.depend
libeinfo.o
libeinfo.So
libeinfo.a
libeinfo.so.1
libeinfo.so
.depend

View File

@@ -9,4 +9,5 @@ CPPFLAGS+= -I../includes
MK= ../../mk
include ${MK}/lib.mk
include ${MK}/cc.mk
include ${MK}/termcap.mk
include ${MK}/debug.mk
include ${MK}/${MKTERMCAP}.mk

14
src/librc/.gitignore vendored
View File

@@ -1,2 +1,16 @@
.depend
librc.o
librc-daemon.o
librc-depend.o
librc-misc.o
librc-stringlist.o
librc.So
librc-daemon.So
librc-depend.So
librc-misc.So
librc-stringlist.So
librc.a
librc.so.1
librc.so
.depend
rc.h

View File

@@ -12,32 +12,28 @@ CPPFLAGS+= -I../includes
MK= ../../mk
include ${MK}/lib.mk
include ${MK}/cc.mk
include ${MK}/debug.mk
# Massage our header file for our dirs
SED_CMD= -e 's:@PREFIX@:${PREFIX}:g'
SED_CMD+= -e 's:@LIB@:${LIBNAME}:g'
SED_CMD+= -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g'
SED_CMD+= -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g'
_PKG_PREFIX_SH= if test -n "${PKG_PREFIX}" && test "${PKG_PREFIX}" != "/" && test "${PKG_PREFIX}" != "${PREFIX}"; then \
echo "-e 's:@PKG_PREFIX@:${PKG_PREFIX}:g'"; \
else \
echo "-e 's:.*@PKG_PREFIX@.*:\#undef RC_PKG_PREFIX:g'"; \
fi
_PKG_PREFIX!= ${_PKG_PREFIX_SH}
SED_CMD+= ${_PKG_PREFIX}$(shell ${_PKG_PREFIX_SH})
_PKG_PREFIX= -e 's:.*@PKG_PREFIX@.*:\#undef RC_PKG_PREFIX:g'
ifneq (${PKG_PREFIX},)
ifneq (${PKG_PREFIX},/)
ifneq (${PKG_PREFIX},${PREFIX})
_PKG_PREFIX= -e 's:@PKG_PREFIX@:${PKG_PREFIX}:g'
endif
endif
endif
SED_CMD+= ${_PKG_PREFIX}
_LCL_PREFIX= -e 's:@LOCAL_PREFIX@::g'
ifneq (${LOCAL_PREFIX},)
ifneq (${LOCAL_PREFIX},/)
ifneq (${LOCAL_PREFIX},${PREFIX})
_LCL_PREFIX= -e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'
endif
endif
endif
SED_CMD+= ${_LCL_PREFIX}
_LCL_PREFIX_SH= if test -n "${LOCAL_PREFIX}" && test "${LOCAL_PREFIX}" != "/" && test "${LOCAL_PREFIX}" != "${PREFIX}"; then \
echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; \
else \
echo "-e 's:@LOCAL_PREFIX@::g'"; \
fi
_LCL_PREFIX!= ${_LCL_PREFIX_SH}
SED_CMD+= ${_LCL_PREFIX}$(shell ${_LCL_PREFIX_SH})
.SUFFIXES: .h.in .h
.h.in.h:

View File

@@ -308,10 +308,10 @@ _match_list(const char *exec, const char *const *argv, const char *pidfile)
if (pidfile) {
l = strlen(pidfile) + 9;
m = xmalloc(sizeof(char) * l);
m = xmalloc(sizeof (char) * l);
snprintf(m, l, "pidfile=%s", pidfile);
rc_stringlist_add(match, m);
free(m);
free (m);
}
return match;
@@ -508,7 +508,7 @@ rc_service_daemons_crashed(const char *service)
if ((fp = fopen(pidfile, "r"))) {
if (fscanf(fp, "%d", &pid) == 1)
retval = false;
fclose(fp);
fclose (fp);
}
free(pidfile);
pidfile = NULL;

View File

@@ -144,7 +144,7 @@ rc_deptree_load_file(const char *deptree_file)
e = strsep(&p, "_");
if (!e || strcmp(e, "depinfo") != 0)
continue;
e = strsep(&p, "_");
e = strsep (&p, "_");
if (!e || sscanf(e, "%d", &i) != 1)
continue;
if (!(type = strsep(&p, "_=")))
@@ -425,8 +425,8 @@ visit_service(const RC_DEPTREE *deptree,
continue;
provided = get_provided(di, runlevel, options);
TAILQ_FOREACH(p, provided, entries)
if (strcmp(p->value, depinfo->service) == 0) {
visit_service(deptree, types, sorted, visited, di,
if (strcmp (p->value, depinfo->service) == 0) {
visit_service (deptree, types, sorted, visited, di,
runlevel, options | RC_DEP_TRACE);
break;
}
@@ -681,7 +681,7 @@ rc_deptree_update_needed(time_t *newest, char *file)
/* Create base directories if needed */
for (i = 0; depdirs[i]; i++)
if (mkdir(depdirs[i], 0755) != 0 && errno != EEXIST)
fprintf(stderr, "mkdir `%s': %s\n", depdirs[i], strerror(errno));
fprintf(stderr, "mkdir `%s': %s\n", depdirs[i], strerror (errno));
/* Quick test to see if anything we use has changed and we have
* data in our deptree */
@@ -922,9 +922,9 @@ rc_deptree_update(void)
di = get_depinfo(deptree, s->value);
if (!di) {
if (strcmp(deptype->type, "ineed") == 0) {
fprintf(stderr,
fprintf (stderr,
"Service `%s' needs non"
" existent service `%s'\n",
" existant service `%s'\n",
depinfo->service, s->value);
dt = get_deptype(depinfo, "broken");
if (!dt) {
@@ -1032,7 +1032,7 @@ rc_deptree_update(void)
if (TAILQ_FIRST(config)) {
if ((fp = fopen(RC_DEPCONFIG, "w"))) {
TAILQ_FOREACH(s, config, entries)
fprintf(fp, "%s\n", s->value);
fprintf (fp, "%s\n", s->value);
fclose(fp);
} else {
fprintf(stderr, "fopen `%s': %s\n",

View File

@@ -41,7 +41,7 @@ rc_stringlist_new(void)
librc_hidden_def(rc_stringlist_new)
RC_STRING *
rc_stringlist_add(RC_STRINGLIST *list, const char *value)
rc_stringlist_add (RC_STRINGLIST *list, const char *value)
{
RC_STRING *s = xmalloc(sizeof(*s));
@@ -52,7 +52,7 @@ rc_stringlist_add(RC_STRINGLIST *list, const char *value)
librc_hidden_def(rc_stringlist_add)
RC_STRING *
rc_stringlist_addu(RC_STRINGLIST *list, const char *value)
rc_stringlist_addu (RC_STRINGLIST *list, const char *value)
{
RC_STRING *s;
@@ -74,8 +74,8 @@ rc_stringlist_delete(RC_STRINGLIST *list, const char *value)
TAILQ_FOREACH(s, list, entries)
if (strcmp(s->value, value) == 0) {
TAILQ_REMOVE(list, s, entries);
free(s->value);
free(s);
free (s->value);
free (s);
return true;
}
@@ -127,7 +127,7 @@ rc_stringlist_sort(RC_STRINGLIST **list)
TAILQ_REMOVE(l, s, entries);
last = NULL;
TAILQ_FOREACH(n, new, entries) {
if (strcmp(s->value, n->value) < 0)
if (strcmp (s->value, n->value) < 0)
break;
last = n;
}

View File

@@ -525,7 +525,7 @@ rc_service_exists(const char *service)
}
librc_hidden_def(rc_service_exists)
#define OPTSTR ". '%s'; echo $extra_commands $extra_started_commands"
#define OPTSTR ". '%s'; echo $opts"
RC_STRINGLIST *
rc_service_extra_commands(const char *service)
{
@@ -550,16 +550,14 @@ rc_service_extra_commands(const char *service)
if ((fp = popen(cmd, "r"))) {
rc_getline(&buffer, &len, fp);
p = buffer;
commands = rc_stringlist_new();
while ((token = strsep(&p, " ")))
if (token[0] != '\0')
rc_stringlist_add(commands, token);
while ((token = strsep(&p, " "))) {
if (!commands)
commands = rc_stringlist_new();
rc_stringlist_add(commands, token);
}
pclose(fp);
free(buffer);
}
free(cmd);
return commands;
}
@@ -749,7 +747,7 @@ rc_service_state(const char *service)
if (state & RC_SERVICE_STOPPED) {
dirs = ls_dir(RC_SVCDIR "/scheduled", 0);
TAILQ_FOREACH(dir, dirs, entries) {
TAILQ_FOREACH (dir, dirs, entries) {
snprintf(file, sizeof(file),
RC_SVCDIR "/scheduled/%s/%s",
dir->value, service);
@@ -892,7 +890,7 @@ rc_services_in_runlevel_stacked(const char *runlevel)
list = rc_services_in_runlevel(runlevel);
stacks = rc_runlevel_stacks(runlevel);
TAILQ_FOREACH(stack, stacks, entries) {
TAILQ_FOREACH (stack, stacks, entries) {
sl = rc_services_in_runlevel(stack->value);
if (list != NULL) {
TAILQ_CONCAT(list, sl, entries);
@@ -1008,7 +1006,7 @@ rc_services_scheduled_by(const char *service)
RC_STRING *dir;
char file[PATH_MAX];
TAILQ_FOREACH(dir, dirs, entries) {
TAILQ_FOREACH (dir, dirs, entries) {
snprintf(file, sizeof(file), RC_SVCDIR "/scheduled/%s/%s",
dir->value, service);
if (exists(file))

17
src/rc/.gitignore vendored
View File

@@ -1,3 +1,4 @@
.depend
version.h
rc-status
rc-service
@@ -55,4 +56,20 @@ mark_service_wasinactive
mark_service_hotplugged
mark_service_failed
rc-abort
checkpath.o
fstabinfo.o
mountinfo.o
start-stop-daemon.o
swclock.o
rc-applets.o
rc-depend.o
rc-logger.o
rc-misc.o
rc-plugin.o
rc-service.o
rc-status.o
rc-update.o
runscript.o
rc.o
rc
.depend

View File

@@ -36,29 +36,14 @@ LDADD+= -lutil -lrc -leinfo
include ../../Makefile.inc
MK= ../../mk
include ${MK}/debug.mk
include ${MK}/prog.mk
include ${MK}/git.mk
include ${MK}/cc.mk
include ${MK}/termcap.mk
include ${MK}/${MKTERMCAP}.mk
LDADD+= ${LIBDL} ${LIBKVM}
include ${MK}/pam.mk
# create symlinks to rc if not an SELINUX system, otherwise create a wrapper
# script to call rc with the proper name of the applet to execute.
# $1 is a list of the links
# $2 is the path+name of the target to link to (usually 'rc' or '/sbin/rc')
# $3 is the path where the links are created
define make-links
for x in $(1); do \
if test -n "${MKSELINUX}"; then \
printf '#!/bin/sh\nexec ${2} --applet %s "$$@"\n' $$x >${3}/$$x; \
chmod ${BINMODE} ${3}/$$x; \
else \
ln -sf ${2} ${3}/$$x; \
fi; \
done;
endef
include ${MK}/${MKPAM}.mk
${SRCS}: version.h
@@ -76,13 +61,13 @@ install: all
${INSTALL} -d ${DESTDIR}${SBINDIR}
${INSTALL} -m ${BINMODE} ${PROG} ${DESTDIR}${SBINDIR}
${INSTALL} -d ${DESTDIR}${BINDIR}
$(call make-links,${BINLINKS},${SBINDIR}/${PROG},${DESTDIR}${BINDIR})
for x in ${BINLINKS}; do ln -fs ${SBINDIR}/${PROG} ${DESTDIR}${BINDIR}/$$x; done
${INSTALL} -d ${DESTDIR}${SBINDIR}
$(call make-links,${SBINLINKS},${SBINDIR}/${PROG},${DESTDIR}${SBINDIR})
for x in ${SBINLINKS}; do ln -fs ${PROG} ${DESTDIR}${SBINDIR}/$$x; done
${INSTALL} -d ${DESTDIR}${LINKDIR}/bin
$(call make-links,${RC_BINLINKS},${SBINDIR}/${PROG},${DESTDIR}${LINKDIR}/bin)
for x in $(RC_BINLINKS); do ln -fs ${SBINDIR}/${PROG} ${DESTDIR}${LINKDIR}/bin/$$x; done
${INSTALL} -d ${DESTDIR}${LINKDIR}/sbin
$(call make-links, ${RC_SBINLINKS},${SBINDIR}/${PROG},${DESTDIR}${LINKDIR}/sbin)
for x in ${RC_SBINLINKS}; do ln -fs ${SBINDIR}/${PROG} ${DESTDIR}${LINKDIR}/sbin/$$x; done
if test "${MKPAM}" = pam; then \
${INSTALL} -d ${DESTDIR}${PAMDIR}; \
${INSTALL} -m ${PAMMODE} start-stop-daemon.pam ${DESTDIR}${PAMDIR}/start-stop-daemon; \
@@ -91,4 +76,4 @@ install: all
check test::
links: rc
$(call make-links,${ALL_LINKS},rc,.)
for l in ${ALL_LINKS}; do ln -sf rc $$l || exit $$? ; done

View File

@@ -1,7 +1,7 @@
/*
* Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
* All rights reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -24,8 +24,6 @@
* SUCH DAMAGE.
*/
#include "version.h"
#if lint
# define _noreturn
#endif
@@ -35,22 +33,6 @@
# define _noreturn
#endif
_noreturn static void
show_version(void)
{
const char *bootlevel = NULL;
printf("%s (OpenRC", applet);
if ((bootlevel = rc_sys()))
printf(" [%s]", bootlevel);
printf(") %s", VERSION);
#ifdef BRANDING
printf(" (%s)", BRANDING);
#endif
printf("\n");
exit(EXIT_SUCCESS);
}
_noreturn static void
usage(int exit_status)
{

View File

@@ -1,7 +1,7 @@
/*
* Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
* All rights reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -24,12 +24,11 @@
* SUCH DAMAGE.
*/
#define getoptstring_COMMON "ChqVv"
#define getoptstring_COMMON "Chqv"
#define longopts_COMMON \
{ "help", 0, NULL, 'h'}, \
{ "nocolor", 0, NULL, 'C'}, \
{ "version", 0, NULL, 'V'}, \
{ "verbose", 0, NULL, 'v'}, \
{ "quiet", 0, NULL, 'q'}, \
{ NULL, 0, NULL, 0 }
@@ -37,13 +36,11 @@
#define longopts_help_COMMON \
"Display this help output", \
"Disable color output", \
"Display software version", \
"Run verbosely", \
"Run quietly"
#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_V if (argc == 2) show_version();
#define case_RC_COMMON_getopt_case_v setenv ("EINFO_VERBOSE", "YES", 1);
#define case_RC_COMMON_getopt_case_q setenv ("EINFO_QUIET", "YES", 1);
#define case_RC_COMMON_getopt_default usage (EXIT_FAILURE);
@@ -51,7 +48,6 @@
#define case_RC_COMMON_GETOPT \
case 'C': case_RC_COMMON_getopt_case_C; break; \
case 'h': case_RC_COMMON_getopt_case_h; break; \
case 'V': case_RC_COMMON_getopt_case_V; break; \
case 'v': case_RC_COMMON_getopt_case_v; break; \
case 'q': case_RC_COMMON_getopt_case_q; break; \
default: case_RC_COMMON_getopt_default; break;

View File

@@ -429,17 +429,6 @@ run_applets(int argc, char **argv)
char *p;
pid_t pid = 0;
/* Bug 351712: We need an extra way to explicitly select an applet OTHER
* than trusting argv[0], as argv[0] is not going to be the applet value if
* we are doing SELinux context switching. For this, we allow calls such as
* 'rc --applet APPLET', and shift ALL of argv down by two array items. */
if (strcmp(applet, "rc") == 0 && argc >= 3 &&
(strcmp(argv[1],"--applet") == 0 || strcmp(argv[1], "-a") == 0)) {
applet = argv[2];
argv += 2;
argc -= 2;
}
/* These are designed to be applications in their own right */
if (strcmp(applet, "fstabinfo") == 0)
exit(fstabinfo(argc, argv));

View File

@@ -164,7 +164,6 @@ show(RC_STRINGLIST *runlevels, bool verbose)
char buffer[PATH_MAX];
size_t l;
rc_stringlist_sort(&services);
TAILQ_FOREACH(service, services, entries) {
in = rc_stringlist_new();
inone = false;
@@ -300,7 +299,6 @@ rc_update(int argc, char **argv)
runlevels = rc_runlevel_list();
}
rc_stringlist_sort(&runlevels);
show (runlevels, verbose);
} else {
if (!service)

View File

@@ -773,16 +773,14 @@ handle_bad_signal(int sig)
#endif
#include "_usage.h"
#define getoptstring "a:o:s:S" getoptstring_COMMON
#define getoptstring "o:s:S" getoptstring_COMMON
static const struct option longopts[] = {
{ "applet", 1, NULL, 'a' },
{ "override", 1, NULL, 'o' },
{ "service", 1, NULL, 's' },
{ "sys", 0, NULL, 'S' },
longopts_COMMON
};
static const char * const longopts_help[] = {
"runs the applet specified by the next argument",
"override the next runlevel to change into\n"
"when leaving single user or boot runlevels",
"runs the service specified with the rest\nof the arguments",
@@ -806,6 +804,7 @@ main(int argc, char **argv)
int opt;
bool parallel;
int regen = 0;
int i;
#ifdef __linux__
char *proc;
char *p;
@@ -818,12 +817,38 @@ main(int argc, char **argv)
signal_setup(SIGSEGV, handle_bad_signal);
#endif
/* Bug 351712: We need an extra way to explicitly select an applet OTHER
* than trusting argv[0], as argv[0] is not going to be the applet value if
* we are doing SELinux context switching. For this, we allow calls such as
* 'rc --applet APPLET', and shift ALL of argv down by two array items. */
if (strcmp(basename_c(argv[0]), "rc") == 0 && argc > 1 && strcmp(argv[1], "--applet") == 0) {
if (argc == 2)
eerrorx("applet argument required");
for (i = 2; i < argc; i++)
argv[i - 2] = argv[i];
argv[argc - 2] = NULL;
argv[argc - 1] = NULL;
argc -= 2;
}
/* Now we can trust our applet value in argv[0] */
applet = basename_c(argv[0]);
LIST_INIT(&service_pids);
atexit(cleanup);
if (!applet)
eerrorx("arguments required");
if (argc > 1 && (strcmp(argv[1], "--version") == 0)) {
printf("%s (OpenRC", applet);
if ((bootlevel = rc_sys()))
printf(" [%s]", bootlevel);
printf(") " VERSION
#ifdef BRANDING
" (" BRANDING ")"
#endif
"\n");
exit(EXIT_SUCCESS);
}
/* Run our built in applets. If we ran one, we don't return. */
run_applets(argc, argv);
@@ -845,10 +870,6 @@ main(int argc, char **argv)
longopts, (int *) 0)) != -1)
{
switch (opt) {
case 'a':
/* Do nothing, actual logic in run_applets, this
* is a placeholder */
break;
case 'o':
if (*optarg == '\0')
optarg = NULL;
@@ -884,8 +905,8 @@ main(int argc, char **argv)
}
exit(EXIT_SUCCESS);
/* NOTREACHED */
case_RC_COMMON_GETOPT
}
case_RC_COMMON_GETOPT
}
}
newlevel = argv[optind++];

View File

@@ -1101,8 +1101,7 @@ runscript(int argc, char **argv)
bool doneone = false;
int retval, opt, depoptions = RC_DEP_TRACE;
RC_STRING *svc;
char path[PATH_MAX], lnk[PATH_MAX], *dir, *save = NULL, *save2 = NULL;
char pidstr[10];
char path[PATH_MAX], lnk[PATH_MAX], *dir, *save = NULL, pidstr[10];
size_t l = 0, ll;
const char *file;
struct stat stbuf;
@@ -1134,8 +1133,7 @@ runscript(int argc, char **argv)
dir = dirname(path);
if (strchr(lnk, '/')) {
save = xstrdup(dir);
save2 = xstrdup(lnk);
dir = dirname(save2);
dir = dirname(lnk);
if (strcmp(dir, save) == 0)
file = basename_c(argv[1]);
else
@@ -1151,7 +1149,6 @@ runscript(int argc, char **argv)
service = xstrdup(lnk);
}
free(save);
free(save2);
}
if (!service)
service = xstrdup(path);

View File

@@ -791,9 +791,6 @@ start_stop_daemon(int argc, char **argv)
case 'u': /* --user <username>|<uid> */
case 'c': /* --chuid <username>|<uid> */
{
/* DEPRECATED */
ewarn("WARNING: -c/--chuid is deprecated and will be removed in the future, please use -u/--user instead");
p = optarg;
tmp = strsep(&p, ":");
changeuser = xstrdup(tmp);
@@ -870,8 +867,6 @@ start_stop_daemon(int argc, char **argv)
break;
case 'o': /* --oknodo */
/* DEPRECATED */
ewarn("WARNING: -o/--oknodo is deprecated and will be removed in the future");
oknodo = true;
break;
@@ -892,8 +887,6 @@ start_stop_daemon(int argc, char **argv)
break;
case 'a': /* --startas <name> */
/* DEPRECATED */
ewarn("WARNING: -a/--startas is deprecated and will be removed in the future, please use -x/--exec or -n/--name instead");
startas = optarg;
break;
case 'w':

View File

@@ -57,7 +57,6 @@ sed -n '/^librc_hidden_proto/s:.*(\(.*\))$:\1:p' ${librc_srcdir}/librc.h \
| LC_ALL=C sort -u \
> librc.funcs.hidden.list
readelf -Wr $(grep -l '#include[[:space:]]"librc\.h"' ${librc_srcdir}/*.c | sed 's:\.c$:.o:') \
| egrep -v -e 'R_PARISC_(DP|SEG)REL' \
| awk '$5 ~ /^rc_/ {print $5}' \
| LC_ALL=C sort -u \
| egrep -v '^rc_environ_fd$' \