Compare commits
4 Commits
openrc-0.1
...
openrc-0.9
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba457f1fed | ||
|
|
722871c0ae | ||
|
|
d670dbddf7 | ||
|
|
f1a19aed78 |
11
Makefile
11
Makefile
@@ -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,10 +25,6 @@ include ${MK}/dist.mk
|
|||||||
include ${MK}/git.mk
|
include ${MK}/git.mk
|
||||||
|
|
||||||
_installafter:
|
_installafter:
|
||||||
ifeq (${MKPREFIX},yes)
|
|
||||||
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d
|
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d
|
||||||
else ifneq (${OS},Linux)
|
|
||||||
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d
|
|
||||||
endif
|
|
||||||
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/tmp
|
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/tmp
|
||||||
${ECHO} "${VERSION}${GITVER}" > ${DESTDIR}/${LIBEXECDIR}/version
|
${ECHO} "${VERSION}${GITVER}" > ${DESTDIR}/${LIBEXECDIR}/version
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
NAME= openrc
|
NAME= openrc
|
||||||
VERSION= 0.11.5
|
VERSION= 0.9.9.2
|
||||||
PKG= ${NAME}-${VERSION}
|
PKG= ${NAME}-${VERSION}
|
||||||
|
|||||||
4
README
4
README
@@ -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)\"
|
||||||
|
|||||||
@@ -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.
|
|
||||||
14
TODO
14
TODO
@@ -5,17 +5,3 @@
|
|||||||
- oldnet[bridging]: Review setting of bridge configuration on dynamic interface add
|
- oldnet[bridging]: Review setting of bridge configuration on dynamic interface add
|
||||||
|
|
||||||
- Document rc-depend binary.
|
- Document rc-depend binary.
|
||||||
|
|
||||||
- _ifindex is not a reliable means of calculating metrics:
|
|
||||||
_ifindex is used for calculating metrics for new devices but has a major
|
|
||||||
problem: Since it's only the nth entry in /proc/net/dev
|
|
||||||
And devices may be removed from that file, and reordered, you won't always
|
|
||||||
get the same result.
|
|
||||||
If you do:
|
|
||||||
- add eth0 - _ifindex (eth0=0)
|
|
||||||
- add vlan1 - _ifindex (eth0=0,vlan1=1)
|
|
||||||
- add vlan2 - _ifindex (eth0=0,vlan1=1,vlan2=2)
|
|
||||||
- rem vlan1 - _ifindex (eth0=0,vlan2=1)
|
|
||||||
- add vlan3 - _ifindex (eth0=0,vlan2=1,vlan3=2)
|
|
||||||
Now your routing table has entries for both vlan2 and vlan3 with a metric of 2.
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
# The consolefont service is not activated by default. If you need to
|
|
||||||
# use it, you should run "rc-update add consolefont boot" as root.
|
|
||||||
#
|
|
||||||
# consolefont specifies the default font that you'd like Linux to use on the
|
# consolefont specifies the default font that you'd like Linux to use on the
|
||||||
# console. You can find a good selection of fonts in /usr/share/consolefonts;
|
# console. You can find a good selection of fonts in /usr/share/consolefonts;
|
||||||
# you shouldn't specify the trailing ".psf.gz", just the font name below.
|
# 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.
|
# 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).
|
||||||
consolefont="default8x16"
|
consolefont="default8x16"
|
||||||
|
|
||||||
# consoletranslation is the charset map file to use. Leave commented to use
|
# consoletranslation is the charset map file to use. Leave commented to use
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -4,11 +4,9 @@
|
|||||||
# you should set it to "local".
|
# you should set it to "local".
|
||||||
clock="UTC"
|
clock="UTC"
|
||||||
|
|
||||||
# If you want the hwclock script to set the system time (software clock)
|
# If you want to set the system time to the current hardware clock
|
||||||
# to match the current hardware clock during bootup, leave this
|
# during bootup, then say "YES" here. You do not need this if you are
|
||||||
# commented out.
|
# running a modern kernel with CONFIG_RTC_HCTOSYS set to y.
|
||||||
# However, you can set this to "NO" ifyou are running a modern kernel
|
|
||||||
# with CONFIG_RTC_HCTOSYS set to y and your hardware clock set to UTC.
|
|
||||||
#clock_hctosys="YES"
|
#clock_hctosys="YES"
|
||||||
|
|
||||||
# If you do not want to set the hardware clock to the current system
|
# If you do not want to set the hardware clock to the current system
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
# Depending on how mounting your network file systems behaves when your
|
|
||||||
# network interfaces are down, you may need to set the netmount script to
|
|
||||||
# require specific network interfaces to be active. This file gives
|
|
||||||
# examples of how to do this:
|
|
||||||
#
|
|
||||||
# If you are using newnet and configuring the interface with a static
|
|
||||||
# address with the network script:
|
|
||||||
# rc_need="network"
|
|
||||||
#
|
|
||||||
# If you are using oldnet, you must list the specific net.* services you
|
|
||||||
# need:
|
|
||||||
#
|
|
||||||
# rc_need="net.eth0"
|
|
||||||
# rc_need="net.eth1 net.eth2"
|
|
||||||
#
|
|
||||||
# If you are using a dynamic network management tool like
|
|
||||||
# networkmanager, dhcpcd, etc, you should list that tool here.
|
|
||||||
#
|
|
||||||
# rc_need="networkmanager"
|
|
||||||
# rc_need="dhcpcd"
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
# Extra options for tmpfiles.sh
|
|
||||||
#tmpfiles_opts="--verbose"
|
|
||||||
tmpfiles_opts=""
|
|
||||||
@@ -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.
|
||||||
|
|||||||
@@ -34,7 +34,7 @@
|
|||||||
# In other words, you probably should DO NOTHING HERE...
|
# In other words, you probably should DO NOTHING HERE...
|
||||||
|
|
||||||
# Prefer ifconfig over iproute2
|
# Prefer ifconfig over iproute2
|
||||||
#modules="!iproute2"
|
#modules="ifconfig"
|
||||||
|
|
||||||
# You can also specify other modules for an interface
|
# You can also specify other modules for an interface
|
||||||
# In this case we prefer udhcpc over dhcpcd
|
# In this case we prefer udhcpc over dhcpcd
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
|
|
||||||
# If you don't specify an interface then we prefer iproute2 if it's installed
|
# If you don't specify an interface then we prefer iproute2 if it's installed
|
||||||
# To prefer ifconfig over iproute2
|
# To prefer ifconfig over iproute2
|
||||||
#modules="!iproute2"
|
#modules="ifconfig"
|
||||||
|
|
||||||
# For a static configuration, use something like this
|
# For a static configuration, use something like this
|
||||||
# (They all do exactly the same thing btw)
|
# (They all do exactly the same thing btw)
|
||||||
@@ -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 _
|
||||||
@@ -631,39 +616,15 @@
|
|||||||
#slaves_bond0="eth0 eth1 eth2"
|
#slaves_bond0="eth0 eth1 eth2"
|
||||||
#config_bond0="null" # You may not want to assign an IP the the bond
|
#config_bond0="null" # You may not want to assign an IP the the bond
|
||||||
|
|
||||||
# Please note, that you should generally NOT try to change the MAC addresses of
|
# You can also configure the bond here, which must be done via sysfs on 2.6
|
||||||
# a bond interface yourself. If you do so, the kernel and your network switches
|
# kernels or newer. See the kernel bonding documentation for a description of
|
||||||
# may not work quite right. It is permissible to set the MAC addresses of bond
|
# these options.
|
||||||
# slaves BEFORE the bond comes up, but not after the bond is up (it will change
|
|
||||||
# MAC addresses of the slaves on it's own).
|
|
||||||
|
|
||||||
# You can also configure the parameters of the bond here, which must be done
|
|
||||||
# via sysfs on 2.6 kernels or newer. The description of all the options can be
|
|
||||||
# found in the kernel: /usr/src/linux-*/Documentation/networking/bonding.txt
|
|
||||||
# You will probably want the 'mode' option at the least.
|
|
||||||
# Some possible parameters: mode fail_over_mac arp_validate arp_interval
|
|
||||||
# arp_ip_target downdelay updelay lacp_rate ad_select xmit_hash_policy
|
|
||||||
# num_grat_arp num_unsol_na miimon primary primary_reselect use_carrier
|
|
||||||
# active_slave queue_id all_slaves_active resend_igmp min_links
|
|
||||||
#mode_bond0="round-robin"
|
|
||||||
#miimon_bond0="100"
|
|
||||||
#arp_ip_target_bond0="+26.0.0.0"
|
#arp_ip_target_bond0="+26.0.0.0"
|
||||||
|
|
||||||
# If any of the slaves require extra configuration - for example wireless or
|
# If any of the slaves require extra configuration - for example wireless or
|
||||||
# ppp devices - we need to depend function on the bonded interfaces
|
# ppp devices - we need to depend function on the bonded interfaces
|
||||||
#rc_net_bond0_need="net.eth0 net.eth1"
|
#rc_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
|
||||||
@@ -819,8 +780,6 @@
|
|||||||
|
|
||||||
#-----------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------
|
||||||
# MAC changer
|
# MAC changer
|
||||||
# Warning: Do NOT use this on bonding interfaces! Bonding changes MACs itself.
|
|
||||||
#
|
|
||||||
# To set a specific MAC address
|
# To set a specific MAC address
|
||||||
#mac_eth0="00:11:22:33:44:55"
|
#mac_eth0="00:11:22:33:44:55"
|
||||||
|
|
||||||
@@ -1137,13 +1096,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
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 controler 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"
|
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
1
init.d/.gitignore
vendored
@@ -41,4 +41,3 @@ syslogd
|
|||||||
termencoding
|
termencoding
|
||||||
ttys
|
ttys
|
||||||
wscons
|
wscons
|
||||||
tmpfiles.setup
|
|
||||||
|
|||||||
@@ -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 \
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description="Configures a specific kernel dump device."
|
|||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
need swap
|
need swap
|
||||||
keyword -jail -prefix
|
keyword -jail
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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() {
|
||||||
@@ -71,12 +71,7 @@ start()
|
|||||||
done
|
done
|
||||||
|
|
||||||
if [ "$RC_UNAME" = Linux ]; then
|
if [ "$RC_UNAME" = Linux ]; then
|
||||||
local skiptypes x
|
fsck_opts="$fsck_opts -C0 -T"
|
||||||
for x in $net_fs_list $extra_net_fs_list; do
|
|
||||||
skiptypes="${skiptypes}no${x},"
|
|
||||||
done
|
|
||||||
skiptypes="${skiptypes}noopts=_netdev"
|
|
||||||
fsck_opts="$fsck_opts -C0 -T -t $skiptypes"
|
|
||||||
if [ -z "$fsck_passno" -a -z "$fsck_mnt" ]; then
|
if [ -z "$fsck_passno" -a -z "$fsck_mnt" ]; then
|
||||||
fsck_args=${fsck_args--A -p}
|
fsck_args=${fsck_args--A -p}
|
||||||
if echo 2>/dev/null >/.test.$$; then
|
if echo 2>/dev/null >/.test.$$; then
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ depend()
|
|||||||
{
|
{
|
||||||
use root
|
use root
|
||||||
before devd net
|
before devd net
|
||||||
keyword -jail -prefix
|
keyword -jail
|
||||||
}
|
}
|
||||||
|
|
||||||
_set()
|
_set()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
description="Sets the hostname of the machine."
|
description="Sets the hostname of the machine."
|
||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
keyword -prefix -lxc
|
keyword -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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 -openvz -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
@@ -33,7 +33,6 @@ start()
|
|||||||
|
|
||||||
stop()
|
stop()
|
||||||
{
|
{
|
||||||
yesno $RC_GOINGDOWN || return 0
|
|
||||||
# We never unmount / or /dev or $RC_SVCDIR
|
# We never unmount / or /dev or $RC_SVCDIR
|
||||||
|
|
||||||
# Bug 381783
|
# Bug 381783
|
||||||
@@ -48,7 +47,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/.*|/usr"
|
no_umounts_r="$no_umounts_r|/proc|/proc/.*|/run|/sys|/sys/.*"
|
||||||
fi
|
fi
|
||||||
no_umounts_r="^($no_umounts_r)$"
|
no_umounts_r="^($no_umounts_r)$"
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ extra_commands="restore"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword -jail -prefix
|
keyword -jail
|
||||||
}
|
}
|
||||||
|
|
||||||
restore()
|
restore()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
@@ -25,7 +23,7 @@ start()
|
|||||||
# Bug 381783
|
# Bug 381783
|
||||||
local rc_svcdir=$(echo $RC_SVCDIR | sed 's:/lib\(32\|64\)\?/:/lib(32|64)?/:g')
|
local rc_svcdir=$(echo $RC_SVCDIR | sed 's:/lib\(32\|64\)\?/:/lib(32|64)?/:g')
|
||||||
|
|
||||||
local m="/dev|/dev/.*|/proc|/proc.*|/sys|/sys/.*|/run|${rc_svcdir}" x= fs=
|
local m="/dev|/dev/.*|/proc|/proc.*|/sys|/sys/.*|${rc_svcdir}" x= fs=
|
||||||
m="$m|/bin|/sbin|/lib(32|64)?|/libexec"
|
m="$m|/bin|/sbin|/lib(32|64)?|/libexec"
|
||||||
# RC_NO_UMOUNTS is an env var that can be set by plugins
|
# RC_NO_UMOUNTS is an env var that can be set by plugins
|
||||||
local IFS="$IFS:"
|
local IFS="$IFS:"
|
||||||
@@ -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
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ depend()
|
|||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
after bootmisc
|
after bootmisc
|
||||||
keyword -jail -prefix
|
keyword -jail
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -19,14 +19,11 @@ depend()
|
|||||||
local IFVAR=$(shell_var "${IFACE}")
|
local IFVAR=$(shell_var "${IFACE}")
|
||||||
|
|
||||||
need localmount
|
need localmount
|
||||||
if [ "$RC_UNAME" = Linux -a "$IFACE" != lo ]; then
|
|
||||||
need sysfs
|
|
||||||
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 +105,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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ required_files="/etc/newsyslog.conf"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword -prefix
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ extra_started_commands="reload"
|
|||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
need localmount
|
need localmount
|
||||||
keyword -jail -prefix
|
keyword -jail
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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()
|
||||||
@@ -41,7 +41,7 @@ start()
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ "$RC_SYS" = "OPENVZ" ] && return 0
|
[ "$RC_SYS" == "OPENVZ" ] && return 0
|
||||||
|
|
||||||
# Check what USB fs the kernel support. Currently
|
# Check what USB fs the kernel support. Currently
|
||||||
# 2.5+ kernels, and later 2.4 kernels have 'usbfs',
|
# 2.5+ kernels, and later 2.4 kernels have 'usbfs',
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ depend()
|
|||||||
need localmount net
|
need localmount net
|
||||||
after *
|
after *
|
||||||
before local
|
before local
|
||||||
keyword -prefix
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
before fsck
|
before fsck
|
||||||
keyword -jail -prefix
|
keyword -jail
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
before localmount
|
before localmount
|
||||||
keyword -jail -openvz -prefix -vserver -lxc
|
keyword -jail -openvz -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
need localmount
|
need localmount
|
||||||
keyword -jail -prefix
|
keyword -jail
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
before bootmisc logger
|
before bootmisc logger
|
||||||
keyword -prefix
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
@@ -14,7 +13,7 @@ start()
|
|||||||
local retval=0 var= comments= conf=
|
local retval=0 var= comments= conf=
|
||||||
ebegin "Configuring kernel parameters"
|
ebegin "Configuring kernel parameters"
|
||||||
eindent
|
eindent
|
||||||
for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do
|
for conf in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
|
||||||
if [ -r "$conf" ]; then
|
if [ -r "$conf" ]; then
|
||||||
vebegin "applying $conf"
|
vebegin "applying $conf"
|
||||||
while read var comments; do
|
while read var comments; do
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
before bootmisc logger
|
before bootmisc logger
|
||||||
keyword -lxc -prefix -vserver
|
keyword -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
@@ -15,12 +15,12 @@ start()
|
|||||||
ebegin "Configuring kernel parameters"
|
ebegin "Configuring kernel parameters"
|
||||||
eindent
|
eindent
|
||||||
|
|
||||||
for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do
|
for conf in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
|
||||||
if [ -r "$conf" ]; then
|
if [ -r "$conf" ]; then
|
||||||
vebegin "applying $conf"
|
vebegin "applying $conf"
|
||||||
if ! err=$(sysctl -p "$conf" 2>&1 >/dev/null) ; then
|
if ! err=$(sysctl -q -p "$conf" 2>&1) ; then
|
||||||
errs="${errs} ${err}"
|
errs="${errs} ${err}"
|
||||||
sysctl -e -p "${conf}" >/dev/null
|
sysctl -q -e -p "${conf}"
|
||||||
fi
|
fi
|
||||||
veend $? || retval=1
|
veend $? || retval=1
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -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}
|
||||||
|
|||||||
@@ -16,5 +16,4 @@ depend()
|
|||||||
use net newsyslog
|
use net newsyslog
|
||||||
need localmount
|
need localmount
|
||||||
after bootmisc
|
after bootmisc
|
||||||
keyword -prefix
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
keyword -lxc -openvz -prefix -uml -vserver -xenu
|
keyword -openvz -uml -vserver -xenu
|
||||||
use root
|
use root
|
||||||
after bootmisc
|
after bootmisc
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
after fsck
|
after fsck
|
||||||
keyword -prefix
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword -prefix
|
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -92,8 +92,7 @@ or stopping them.
|
|||||||
The following variables affect the service script:
|
The following variables affect the service script:
|
||||||
.Bl -tag -width "RC_DEFAULTLEVEL"
|
.Bl -tag -width "RC_DEFAULTLEVEL"
|
||||||
.It Ar extra_commands
|
.It Ar extra_commands
|
||||||
Space separated list of extra commands the service defines. These should
|
Space separated list of extra commands the service defines.
|
||||||
not depend on the service being stopped or started.
|
|
||||||
.It Ar extra_started_commands
|
.It Ar extra_started_commands
|
||||||
Space separated list of extra commands the service defines. These only work if
|
Space separated list of extra commands the service defines. These only work if
|
||||||
the service has already been started.
|
the service has already been started.
|
||||||
@@ -124,10 +123,6 @@ Display name used for the above defined command.
|
|||||||
.It Ar retry
|
.It Ar retry
|
||||||
Retry schedule to use when stopping the daemon. It can either be a
|
Retry schedule to use when stopping the daemon. It can either be a
|
||||||
timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5).
|
timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5).
|
||||||
.It Ar required_dirs
|
|
||||||
A list of directories which must exist for the service to start.
|
|
||||||
.It Ar required_files
|
|
||||||
A list of files which must exist for the service to start.
|
|
||||||
.El
|
.El
|
||||||
.Sh DEPENDENCIES
|
.Sh DEPENDENCIES
|
||||||
You should define a
|
You should define a
|
||||||
@@ -156,7 +151,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 +175,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 +345,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 +383,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 +433,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
|
||||||
|
|||||||
@@ -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
|
|
||||||
1
mk/os.mk
1
mk/os.mk
@@ -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
|
||||||
|
|||||||
11
mk/sys.mk
11
mk/sys.mk
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
SRCS-NetBSD=
|
SRCS-NetBSD=
|
||||||
INC-NetBSD= ifwatchd.sh
|
INC-NetBSD= ifwatchd.sh
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
ifconfig_depend()
|
ifconfig_depend()
|
||||||
{
|
{
|
||||||
program /sbin/ifconfig /bin/ifconfig
|
program /sbin/ifconfig
|
||||||
provide interface
|
provide interface
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,24 +19,24 @@ _down()
|
|||||||
|
|
||||||
_exists()
|
_exists()
|
||||||
{
|
{
|
||||||
[ -e /sys/class/net/"$IFACE" ]
|
grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/dev
|
||||||
}
|
}
|
||||||
|
|
||||||
_ifindex()
|
_ifindex()
|
||||||
{
|
{
|
||||||
local index=-1
|
local line= i=-2
|
||||||
local f v
|
while read line; do
|
||||||
if [ -e /sys/class/net/"${IFACE}"/ifindex ]; then
|
: $(( i += 1 ))
|
||||||
index=$(cat /sys/class/net/"${IFACE}"/ifindex)
|
[ ${i} -lt 1 ] && continue
|
||||||
else
|
case "${line}" in
|
||||||
for f in /sys/class/net/*/ifindex ; do
|
"${IFACE}:"*) echo "${i}"; return 0;;
|
||||||
v=$(cat $f)
|
esac
|
||||||
[ $v -gt $index ] && index=$v
|
done < /proc/net/dev
|
||||||
done
|
|
||||||
: $(( index += 1 ))
|
# Return the next available index
|
||||||
fi
|
: $(( i += 1 ))
|
||||||
echo "${index}"
|
echo "${i}"
|
||||||
return 0
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
_is_wireless()
|
_is_wireless()
|
||||||
|
|||||||
@@ -10,34 +10,34 @@ 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()
|
||||||
{
|
{
|
||||||
[ -e /sys/class/net/"$IFACE" ]
|
grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/dev
|
||||||
}
|
}
|
||||||
|
|
||||||
_ifindex()
|
_ifindex()
|
||||||
{
|
{
|
||||||
local index=-1
|
local line= i=-2
|
||||||
local f v
|
while read line; do
|
||||||
if [ -e /sys/class/net/"${IFACE}"/ifindex ]; then
|
: $(( i += 1 ))
|
||||||
index=$(cat /sys/class/net/"${IFACE}"/ifindex)
|
[ ${i} -lt 1 ] && continue
|
||||||
else
|
case "${line}" in
|
||||||
for f in /sys/class/net/*/ifindex ; do
|
"${IFACE}:"*) echo "${i}"; return 0;;
|
||||||
v=$(cat $f)
|
esac
|
||||||
[ $v -gt $index ] && index=$v
|
done < /proc/net/dev
|
||||||
done
|
|
||||||
: $(( index += 1 ))
|
# Return the next available index
|
||||||
fi
|
: $(( i += 1 ))
|
||||||
echo "${index}"
|
echo "${i}"
|
||||||
return 0
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
_is_wireless()
|
_is_wireless()
|
||||||
@@ -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"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,12 +61,12 @@ 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)"
|
||||||
if [ "${hname}" != "(none)" ] && [ "${hname}" != "localhost" ]; then
|
if [ "${hname}" != "(none)" ] && [ "${hname}" != "localhost" ]; then
|
||||||
args="${args} -x hostname:'${hname}'"
|
args="${args} --hostname='${hname}'"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
|
|||||||
31
net/vlan.sh
31
net/vlan.sh
@@ -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}"
|
||||||
|
|||||||
@@ -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::
|
||||||
|
|||||||
2
sh/.gitignore
vendored
2
sh/.gitignore
vendored
@@ -9,5 +9,3 @@ init-early.sh
|
|||||||
ifwatchd-carrier.sh
|
ifwatchd-carrier.sh
|
||||||
ifwatchd-nocarrier.sh
|
ifwatchd-nocarrier.sh
|
||||||
udhcpc-hook.sh
|
udhcpc-hook.sh
|
||||||
tmpfiles.sh
|
|
||||||
migrate-to-run.sh
|
|
||||||
|
|||||||
10
sh/Makefile
10
sh/Makefile
@@ -1,8 +1,8 @@
|
|||||||
DIR= ${LIBEXECDIR}/sh
|
DIR= ${LIBEXECDIR}/sh
|
||||||
SRCS= init.sh.in functions.sh.in gendepends.sh.in init-common-post.sh.in \
|
SRCS= init.sh.in functions.sh.in gendepends.sh.in init-common-post.sh.in \
|
||||||
rc-functions.sh.in runscript.sh.in tmpfiles.sh.in ${SRCS-${OS}}
|
rc-functions.sh.in runscript.sh.in ${SRCS-${OS}}
|
||||||
INC= init-common-post.sh rc-mount.sh functions.sh rc-functions.sh
|
INC= init-common-post.sh rc-mount.sh functions.sh rc-functions.sh
|
||||||
BIN= gendepends.sh init.sh runscript.sh tmpfiles.sh ${BIN-${OS}}
|
BIN= gendepends.sh init.sh runscript.sh ${BIN-${OS}}
|
||||||
|
|
||||||
INSTALLAFTER= _installafter
|
INSTALLAFTER= _installafter
|
||||||
|
|
||||||
@@ -12,10 +12,8 @@ include ${MK}/os.mk
|
|||||||
SRCS-FreeBSD=
|
SRCS-FreeBSD=
|
||||||
BIN-FreeBSD=
|
BIN-FreeBSD=
|
||||||
|
|
||||||
SRCS-Linux= cgroup-release-agent.sh.in init-early.sh.in migrate-to-run.sh.in \
|
SRCS-Linux= cgroup-release-agent.sh.in init-early.sh.in udhcpc-hook.sh.in
|
||||||
udhcpc-hook.sh.in
|
BIN-Linux= cgroup-release-agent.sh init-early.sh udhcpc-hook.sh
|
||||||
BIN-Linux= cgroup-release-agent.sh init-early.sh migrate-to-run.sh \
|
|
||||||
udhcpc-hook.sh
|
|
||||||
|
|
||||||
SRCS-NetBSD= ifwatchd-carrier.sh.in ifwatchd-nocarrier.sh.in
|
SRCS-NetBSD= ifwatchd-carrier.sh.in ifwatchd-nocarrier.sh.in
|
||||||
BIN-NetBSD= ifwatchd-carrier.sh ifwatchd-nocarrier.sh
|
BIN-NetBSD= ifwatchd-carrier.sh ifwatchd-nocarrier.sh
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
# 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.
|
||||||
|
|
||||||
. @LIBEXECDIR@/sh/functions.sh
|
. @SYSCONFDIR@/init.d/functions.sh
|
||||||
. @LIBEXECDIR@/sh/rc-functions.sh
|
. @LIBEXECDIR@/sh/rc-functions.sh
|
||||||
|
|
||||||
config() {
|
config() {
|
||||||
|
|||||||
@@ -3,6 +3,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.
|
||||||
|
|
||||||
|
# This basically mounts $RC_SVCDIR as a ramdisk.
|
||||||
|
# The tricky part is finding something our kernel supports
|
||||||
|
# tmpfs and ramfs are easy, so force one or the other.
|
||||||
|
svcdir_restorecon()
|
||||||
|
{
|
||||||
|
local rc=0
|
||||||
|
if [ -x /usr/sbin/selinuxenabled -a -c /selinux/null ] &&
|
||||||
|
selinuxenabled; then
|
||||||
|
restorecon $RC_SVCDIR
|
||||||
|
rc=$?
|
||||||
|
fi
|
||||||
|
return $rc
|
||||||
|
}
|
||||||
|
|
||||||
|
mount_svcdir()
|
||||||
|
{
|
||||||
|
# mount from fstab if we can
|
||||||
|
fstabinfo --mount "$RC_SVCDIR" && return 0
|
||||||
|
|
||||||
|
local fs= fsopts="-o rw,noexec,nodev,nosuid"
|
||||||
|
local svcsize=${rc_svcsize:-1024}
|
||||||
|
|
||||||
|
# Some buggy kernels report tmpfs even when not present :(
|
||||||
|
if grep -Eq "[[:space:]]+tmpfs$" /proc/filesystems; then
|
||||||
|
local tmpfsopts="${fsopts},mode=755,size=${svcsize}k"
|
||||||
|
mount -n -t tmpfs $tmpfsopts rc-svcdir "$RC_SVCDIR"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
svcdir_restorecon
|
||||||
|
[ $? -eq 0 ] && return 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then
|
||||||
|
fs="ramfs"
|
||||||
|
# ramfs has no special options
|
||||||
|
elif [ -e /dev/ram0 ] \
|
||||||
|
&& grep -Eq "[[:space:]]+ext2$" /proc/filesystems; then
|
||||||
|
devdir="/dev/ram0"
|
||||||
|
fs="ext2"
|
||||||
|
dd if=/dev/zero of="$devdir" bs=1k count="$svcsize"
|
||||||
|
mkfs -t "$fs" -i 1024 -vm0 "$devdir" "$svcsize"
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
eerror "OpenRC requires tmpfs, ramfs or a ramdisk + ext2"
|
||||||
|
eerror "compiled into the kernel"
|
||||||
|
echo
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mount -n -t "$fs" $fsopts rc-svcdir "$RC_SVCDIR"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
svcdir_restorecon
|
||||||
|
[ $? -eq 0 ] && return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
. "$RC_LIBEXECDIR"/sh/functions.sh
|
. "$RC_LIBEXECDIR"/sh/functions.sh
|
||||||
[ -r /etc/rc.conf ] && . /etc/rc.conf
|
[ -r /etc/rc.conf ] && . /etc/rc.conf
|
||||||
|
|
||||||
@@ -19,7 +75,7 @@ if [ -e $f ]; then
|
|||||||
if [ "$(VAR=a cat $f)" = "$(VAR=b cat $f)" ]; then
|
if [ "$(VAR=a cat $f)" = "$(VAR=b cat $f)" ]; then
|
||||||
eerror "You have cruft in /proc that should be deleted"
|
eerror "You have cruft in /proc that should be deleted"
|
||||||
else
|
else
|
||||||
einfo "/proc is already mounted"
|
einfo "/proc is already mounted, skipping"
|
||||||
mountproc=false
|
mountproc=false
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -35,41 +91,24 @@ if $mountproc; then
|
|||||||
eend $?
|
eend $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Mount tmpfs on /run when directory exists.
|
||||||
# /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 mountinfo -q /run; then
|
||||||
if [ ! -d /run ]; then
|
einfo "/run is already mounted, skipping"
|
||||||
if [ "$sys" = VSERVER ]; then
|
|
||||||
if [ -e /run ]; then
|
|
||||||
rm -rf /run
|
|
||||||
fi
|
|
||||||
mkdir /run
|
|
||||||
else
|
else
|
||||||
eerror "The /run directory does not exist. Unable to continue."
|
ebegin "Mounting /run"
|
||||||
return 1
|
if ! fstabinfo --mount /run; then
|
||||||
|
mount -t tmpfs -o mode=0755,nosuid,nodev tmpfs /run
|
||||||
|
fi
|
||||||
|
eend $?
|
||||||
fi
|
fi
|
||||||
|
checkpath -d -m 0775 -o root:uucp /run/lock
|
||||||
|
elif [ -e /run ]; then
|
||||||
|
einfo "Unable to mount /run since it is not a directory"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$sys" = VSERVER ]; then
|
|
||||||
rm -rf /run/*
|
|
||||||
elif ! mountinfo -q /run; then
|
|
||||||
ebegin "Mounting /run"
|
|
||||||
rc=0
|
|
||||||
if ! fstabinfo --mount /run; then
|
|
||||||
mount -t tmpfs -o mode=0755,nosuid,nodev tmpfs /run
|
|
||||||
rc=$?
|
|
||||||
fi
|
|
||||||
if [ $rc != 0 ]; then
|
|
||||||
eerror "Unable to mount tmpfs on /run."
|
|
||||||
eerror "Can't continue."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
checkpath -d $RC_SVCDIR
|
|
||||||
checkpath -d -m 0775 -o root:uucp /run/lock
|
|
||||||
|
|
||||||
# Try to mount xenfs as early as possible, otherwise rc_sys() will always
|
# 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.
|
# 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
|
if grep -Eq "[[:space:]]+xenfs$" /proc/filesystems; then
|
||||||
@@ -80,9 +119,4 @@ if grep -Eq "[[:space:]]+xenfs$" /proc/filesystems; then
|
|||||||
eend $?
|
eend $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -e "$RC_LIBEXECDIR"/cache/deptree ]; then
|
. "$RC_LIBEXECDIR"/sh/init-common-post.sh
|
||||||
cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo sysinit >"$RC_SVCDIR"/softlevel
|
|
||||||
exit 0
|
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
#!@SHELL@
|
|
||||||
# Copyright (c) 2012 William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
# Released under the 2-clause BSD license.
|
|
||||||
|
|
||||||
. "@LIBEXECDIR@/sh/functions.sh"
|
|
||||||
|
|
||||||
if ! mountinfo -q -f tmpfs "@LIBEXECDIR@/init.d"; then
|
|
||||||
einfo "The OpenRC dependency data has already been migrated."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d "@PREFIX@/run" ]; then
|
|
||||||
eerror "'@PREFIX@/run' is not a directory."
|
|
||||||
eerror "This means the OpenRC dependency data cannot be migrated."
|
|
||||||
eerror "Please create the '@PREFIX@/run' directory and reboot the system."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
mount -t tmpfs -o mode=0755,nosuid,nodev \
|
|
||||||
tmpfs "@PREFIX@/run" 2> /dev/null
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
eerror "Unable to mount a tmpfs on '@PREFIX@/run'."
|
|
||||||
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
|
|
||||||
|
|
||||||
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."
|
|
||||||
exit 0
|
|
||||||
@@ -4,22 +4,6 @@
|
|||||||
# 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.
|
||||||
|
|
||||||
verify_boot()
|
|
||||||
{
|
|
||||||
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
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
sourcex()
|
sourcex()
|
||||||
{
|
{
|
||||||
if [ "$1" = "-e" ]; then
|
if [ "$1" = "-e" ]; then
|
||||||
@@ -32,7 +16,7 @@ sourcex()
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
sourcex "@LIBEXECDIR@/sh/functions.sh"
|
sourcex "@SYSCONFDIR@/init.d/functions.sh"
|
||||||
sourcex "@LIBEXECDIR@/sh/rc-functions.sh"
|
sourcex "@LIBEXECDIR@/sh/rc-functions.sh"
|
||||||
|
|
||||||
# Support LiveCD foo
|
# Support LiveCD foo
|
||||||
@@ -40,6 +24,18 @@ if sourcex -e "/sbin/livecd-functions.sh"; then
|
|||||||
livecd_read_commandline
|
livecd_read_commandline
|
||||||
fi
|
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
|
||||||
|
|
||||||
if [ -z "$1" -o -z "$2" ]; then
|
if [ -z "$1" -o -z "$2" ]; then
|
||||||
eerror "$RC_SVCNAME: not enough arguments"
|
eerror "$RC_SVCNAME: not enough arguments"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -233,12 +229,7 @@ while [ -n "$1" ]; do
|
|||||||
# Special case depend
|
# Special case depend
|
||||||
if [ "$1" = depend ]; then
|
if [ "$1" = depend ]; then
|
||||||
shift
|
shift
|
||||||
|
|
||||||
# Enter the dir of the init script to fix the globbing
|
|
||||||
# bug 412677
|
|
||||||
cd ${RC_SERVICE%/*}
|
|
||||||
_depend
|
_depend
|
||||||
cd /
|
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
# See if we have the required function and run it
|
# See if we have the required function and run it
|
||||||
@@ -265,7 +256,7 @@ while [ -n "$1" ]; do
|
|||||||
# we can run this command
|
# we can run this command
|
||||||
for _cmd in $extra_started_commands; do
|
for _cmd in $extra_started_commands; do
|
||||||
if [ "$_cmd" = "$1" ]; then
|
if [ "$_cmd" = "$1" ]; then
|
||||||
if verify_boot && ! service_started; then
|
if ! service_started; then
|
||||||
eerror "$RC_SVCNAME: cannot \`$1' as it has not been started"
|
eerror "$RC_SVCNAME: cannot \`$1' as it has not been started"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
@@ -275,16 +266,13 @@ while [ -n "$1" ]; do
|
|||||||
# we can run this command
|
# we can run this command
|
||||||
for _cmd in $extra_stopped_commands; do
|
for _cmd in $extra_stopped_commands; do
|
||||||
if [ "$_cmd" = "$1" ]; then
|
if [ "$_cmd" = "$1" ]; then
|
||||||
if verify_boot && ! service_stopped; then
|
if ! service_stopped; then
|
||||||
eerror "$RC_SVCNAME: cannot \`$1' as it has not been stopped"
|
eerror "$RC_SVCNAME: cannot \`$1' as it has not been stopped"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
unset _cmd
|
unset _cmd
|
||||||
case $1 in
|
|
||||||
start|stop|status) verify_boot;;
|
|
||||||
esac
|
|
||||||
if [ "$(command -v "$1_pre")" = "$1_pre" ]
|
if [ "$(command -v "$1_pre")" = "$1_pre" ]
|
||||||
then
|
then
|
||||||
"$1"_pre || exit $?
|
"$1"_pre || exit $?
|
||||||
|
|||||||
@@ -1,297 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# This is a reimplementation of the systemd tmpfiles.d code
|
|
||||||
# Control creation, deletion, and cleaning of volatile and temporary files
|
|
||||||
#
|
|
||||||
# Copyright (c) 2012 Gentoo Foundation
|
|
||||||
#
|
|
||||||
# This instance based on the Arch Linux version:
|
|
||||||
# http://projects.archlinux.org/initscripts.git/tree/arch-tmpfiles
|
|
||||||
# As of 2012/01/01
|
|
||||||
#
|
|
||||||
# See the tmpfiles.d manpage as well:
|
|
||||||
# http://0pointer.de/public/systemd-man/tmpfiles.d.html
|
|
||||||
# This script should match the manpage as of 2012/03/12
|
|
||||||
#
|
|
||||||
|
|
||||||
DRYRUN=0
|
|
||||||
|
|
||||||
warninvalid() {
|
|
||||||
printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" "$LINENUM" "$FILE"
|
|
||||||
error=$(( error+1 ))
|
|
||||||
} >&2
|
|
||||||
|
|
||||||
dryrun_or_real() {
|
|
||||||
local dryrun=
|
|
||||||
[ $DRYRUN -eq 1 ] && dryrun=echo
|
|
||||||
$dryrun "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
relabel() {
|
|
||||||
local path
|
|
||||||
local paths=$1 mode=$2 uid=$3 gid=$4
|
|
||||||
|
|
||||||
for path in ${paths}; do
|
|
||||||
if [ -e "$path" ]; then
|
|
||||||
[ $uid != '-' ] && dryrun_or_real chown $CHOPTS "$uid" "$path"
|
|
||||||
[ $gid != '-' ] && dryrun_or_real chgrp $CHOPTS "$gid" "$path"
|
|
||||||
[ $mode != '-' ] && dryrun_or_real chmod $CHOPTS "$mode" "$path"
|
|
||||||
[ -x /sbin/restorecon ] && dryrun_or_real restorecon $CHOPTS "$path"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
_b() {
|
|
||||||
# Create a block device node if it doesn't exist yet
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
|
||||||
[ ! -e "$path" ] && dryrun_or_real mknod $path b ${arg%:*} ${arg#*:}
|
|
||||||
}
|
|
||||||
|
|
||||||
_c() {
|
|
||||||
# Create a character device node if it doesn't exist yet
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
|
||||||
[ ! -e "$path" ] && dryrun_or_real mknod $path c ${arg%:*} ${arg#*:}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
_f() {
|
|
||||||
# Create a file if it doesn't exist yet
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
|
||||||
|
|
||||||
[ $CREATE -gt 0 ] || return 0
|
|
||||||
|
|
||||||
if [ ! -e "$path" ]; then
|
|
||||||
dryrun_or_real install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path"
|
|
||||||
[ -z "$arg" ] || _w "$@"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_F() {
|
|
||||||
# Create or truncate a file
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
|
||||||
|
|
||||||
[ $CREATE -gt 0 ] || return 0
|
|
||||||
|
|
||||||
dryrun_or_real install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path"
|
|
||||||
[ -z "$arg" ] || _w "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
_d() {
|
|
||||||
# Create a directory if it doesn't exist yet
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4
|
|
||||||
|
|
||||||
[ $CREATE -gt 0 ] || return 0
|
|
||||||
|
|
||||||
if [ ! -d "$path" ]; then
|
|
||||||
dryrun_or_real install -d -m"$mode" -o"$uid" -g"$gid" "$path"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_D() {
|
|
||||||
# Create or empty a directory
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4
|
|
||||||
|
|
||||||
if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then
|
|
||||||
dryrun_or_real find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} +
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $CREATE -gt 0 ]; then
|
|
||||||
dryrun_or_real install -d -m"$mode" -o"$uid" -g"$gid" "$path"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_L() {
|
|
||||||
# Create a symlink if it doesn't exist yet
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
|
||||||
[ ! -e "$path" ] && dryrun_or_real ln -s "$args" "$path"
|
|
||||||
}
|
|
||||||
|
|
||||||
_p() {
|
|
||||||
# Create a named pipe (FIFO) if it doesn't exist yet
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4
|
|
||||||
|
|
||||||
[ $CREATE -gt 0 ] || return 0
|
|
||||||
|
|
||||||
if [ ! -p "$path" ]; then
|
|
||||||
dryrun_or_real mkfifo -m$mode "$path"
|
|
||||||
dryrun_or_real chown "$uid:$gid" "$path"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_x() {
|
|
||||||
# Ignore a path during cleaning. Use this type to exclude paths from clean-up as
|
|
||||||
# controlled with the Age parameter. Note that lines of this type do not
|
|
||||||
# influence the effect of r or R lines. Lines of this type accept shell-style
|
|
||||||
# globs in place of of normal path names.
|
|
||||||
:
|
|
||||||
# XXX: we don't implement this
|
|
||||||
}
|
|
||||||
|
|
||||||
_r() {
|
|
||||||
# Remove a file or directory if it exists. This may not be used to remove
|
|
||||||
# non-empty directories, use R for that. Lines of this type accept shell-style
|
|
||||||
# globs in place of normal path names.
|
|
||||||
local path
|
|
||||||
local paths=$1
|
|
||||||
|
|
||||||
[ $REMOVE -gt 0 ] || return 0
|
|
||||||
|
|
||||||
for path in ${paths}; do
|
|
||||||
if [ -f "$path" ]; then
|
|
||||||
dryrun_or_real rm -f "$path"
|
|
||||||
elif [ -d "$path" ]; then
|
|
||||||
dryrun_or_real rmdir "$path"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
_R() {
|
|
||||||
# Recursively remove a path and all its subdirectories (if it is a directory).
|
|
||||||
# Lines of this type accept shell-style globs in place of normal path names.
|
|
||||||
local path
|
|
||||||
local paths=$1
|
|
||||||
|
|
||||||
[ $REMOVE -gt 0 ] || return 0
|
|
||||||
|
|
||||||
for path in ${paths}; do
|
|
||||||
[ -d "$path" ] && dryrun_or_real rm -rf --one-file-system "$path"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
_w() {
|
|
||||||
# Write the argument parameter to a file, if it exists.
|
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
|
||||||
if [ -f "$path" ]; then
|
|
||||||
if [ $DRYRUN -eq 1 ]; then
|
|
||||||
echo "echo \"$arg\" >>\"$path\""
|
|
||||||
else
|
|
||||||
echo "$arg" >>"$path"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
_z() {
|
|
||||||
# Set ownership, access mode and relabel security context of a file or
|
|
||||||
# directory if it exists. Lines of this type accept shell-style globs in
|
|
||||||
# place of normal path names.
|
|
||||||
[ $CREATE -gt 0 ] || return 0
|
|
||||||
|
|
||||||
relabel "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
_Z() {
|
|
||||||
# Recursively set ownership, access mode and relabel security context of a
|
|
||||||
# path and all its subdirectories (if it is a directory). Lines of this type
|
|
||||||
# accept shell-style globs in place of normal path names.
|
|
||||||
[ $CREATE -gt 0 ] || return 0
|
|
||||||
|
|
||||||
CHOPTS=-R relabel "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
CREATE=0 REMOVE=0 CLEAN=0 VERBOSE=0 DRYRUN=0 error=0 LINENO=0
|
|
||||||
FILE=
|
|
||||||
fragments=
|
|
||||||
# XXX: The harcoding of /usr/lib/ is an explicit choice by upstream
|
|
||||||
tmpfiles_dirs='/usr/lib/tmpfiles.d/ /etc/tmpfiles.d/ /run/tmpfiles.d/'
|
|
||||||
tmpfiles_basenames=''
|
|
||||||
tmpfiles_d=''
|
|
||||||
# Build a list of sorted unique basenames
|
|
||||||
# directories declared later in the tmpfiles_d array will override earlier
|
|
||||||
# directories, on a per file basename basis.
|
|
||||||
# `/etc/tmpfiles.d/foo.conf' supersedes `/usr/lib/tmpfiles.d/foo.conf'.
|
|
||||||
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
|
|
||||||
for d in ${tmpfiles_dirs} ; do
|
|
||||||
[ -d $d ] && for f in ${d}/*.conf ; do
|
|
||||||
[ "$f" = "$d/systemd.conf" ] && continue
|
|
||||||
[ -f $f ] && tmpfiles_basenames="${tmpfiles_basenames}\n${f##*/}"
|
|
||||||
done # for f in ${d}
|
|
||||||
done # for d in ${tmpfiles_dirs}
|
|
||||||
tmpfiles_basenames="`printf "${tmpfiles_basenames}\n" | sort | uniq`"
|
|
||||||
|
|
||||||
for b in $tmpfiles_basenames ; do
|
|
||||||
real_f=''
|
|
||||||
for d in $tmpfiles_dirs ; do
|
|
||||||
f=${d}/${b}
|
|
||||||
[ -f "${f}" ] && real_f=$f
|
|
||||||
done
|
|
||||||
[ -f "${real_f}" ] && tmpfiles_d="${tmpfiles_d} ${real_f}"
|
|
||||||
done
|
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case $1 in
|
|
||||||
--create) CREATE=1 ;;
|
|
||||||
--remove) REMOVE=1 ;;
|
|
||||||
--clean) CLEAN=1 ;; # TODO: Not implemented
|
|
||||||
--verbose) VERBOSE=1 ;;
|
|
||||||
--dryrun|--dry-run) DRYRUN=1 ;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ $(( CLEAN )) -eq 1 ] ; then
|
|
||||||
printf '%s clean mode is not implemented\n' "${0##*/}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$CREATE$REMOVE" = '00' ]; then
|
|
||||||
printf 'usage: %s [--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
error=0
|
|
||||||
|
|
||||||
# loop through the gathered fragments, sorted globally by filename.
|
|
||||||
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
|
|
||||||
for FILE in $tmpfiles_d ; do
|
|
||||||
LINENUM=0
|
|
||||||
|
|
||||||
### FILE FORMAT ###
|
|
||||||
# XXX: We ignore the 'Age' parameter
|
|
||||||
# 1 2 3 4 5 6 7
|
|
||||||
# Cmd Path Mode UID GID Age Argument
|
|
||||||
# d /run/user 0755 root root 10d -
|
|
||||||
# Mode, UID, GID, Age, Argument may be omitted!
|
|
||||||
|
|
||||||
# XXX: Upstream says whitespace is NOT permitted in the Path argument.
|
|
||||||
# But IS allowed when globs are expanded for the x/r/R/z/Z types.
|
|
||||||
while read cmd path mode uid gid age arg; do
|
|
||||||
LINENUM=$(( LINENUM+1 ))
|
|
||||||
|
|
||||||
# Unless we have both command and path, skip this line.
|
|
||||||
if [ -z "$cmd" -o -z "$path" ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
# whine about invalid entries
|
|
||||||
case $cmd in
|
|
||||||
f|F|w|d|D|p|L|c|b|x|r|R|z|Z) ;;
|
|
||||||
\#) continue ;;
|
|
||||||
*) warninvalid ; continue ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# fall back on defaults when parameters are passed as '-'
|
|
||||||
if [ "$mode" = '-' -o "$mode" = '' ]; then
|
|
||||||
case "$cmd" in
|
|
||||||
p|f|F) mode=0644 ;;
|
|
||||||
d|D) mode=0755 ;;
|
|
||||||
z|Z|x|r|R|L) ;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ "$uid" = '-' -o "$uid" = '' ] && uid=0
|
|
||||||
[ "$gid" = '-' -o "$gid" = '' ] && gid=0
|
|
||||||
[ "$age" = '-' -o "$age" = '' ] && age=0
|
|
||||||
[ "$arg" = '-' -o "$arg" = '' ] && arg=''
|
|
||||||
set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg"
|
|
||||||
|
|
||||||
[ "$VERBOSE" -eq "1" ] && echo _$cmd "$@"
|
|
||||||
_$cmd "$@"
|
|
||||||
rc=$?
|
|
||||||
if [ "${DRYRUN}" -eq "0" ]; then
|
|
||||||
[ $rc -ne 0 ] && error=$((error + 1))
|
|
||||||
fi
|
|
||||||
done <$FILE
|
|
||||||
done
|
|
||||||
|
|
||||||
exit $error
|
|
||||||
|
|
||||||
# vim: set ts=2 sw=2 sts=2 noet ft=sh:
|
|
||||||
@@ -1,139 +0,0 @@
|
|||||||
/*
|
|
||||||
helpers.h
|
|
||||||
This is private to us and not for user consumption
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
||||||
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
||||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
* SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __HELPERS_H__
|
|
||||||
#define __HELPERS_H__
|
|
||||||
|
|
||||||
#define ERRX fprintf (stderr, "out of memory\n"); exit (1)
|
|
||||||
|
|
||||||
#define UNCONST(a) ((void *)(unsigned long)(const void *)(a))
|
|
||||||
|
|
||||||
#ifdef lint
|
|
||||||
# define _unused
|
|
||||||
#endif
|
|
||||||
#if __GNUC__ > 2 || defined(__INTEL_COMPILER)
|
|
||||||
# define _dead __attribute__((__noreturn__))
|
|
||||||
# define _unused __attribute__((__unused__))
|
|
||||||
#else
|
|
||||||
# define _dead
|
|
||||||
# define _unused
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
|
|
||||||
|
|
||||||
/* Some libc implemntations don't have these */
|
|
||||||
#ifndef TAILQ_CONCAT
|
|
||||||
#define TAILQ_CONCAT(head1, head2, field) do { \
|
|
||||||
if (!TAILQ_EMPTY(head2)) { \
|
|
||||||
*(head1)->tqh_last = (head2)->tqh_first; \
|
|
||||||
(head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
|
|
||||||
(head1)->tqh_last = (head2)->tqh_last; \
|
|
||||||
TAILQ_INIT((head2)); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef TAILQ_FOREACH_SAFE
|
|
||||||
#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
|
||||||
for ((var) = TAILQ_FIRST((head)); \
|
|
||||||
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
|
|
||||||
(var) = (tvar))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __GLIBC__
|
|
||||||
# if ! defined (__UCLIBC__) && ! defined (__dietlibc__)
|
|
||||||
# define strlcpy(dst, src, size) snprintf(dst, size, "%s", src)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef timespecsub
|
|
||||||
#define timespecsub(tsp, usp, vsp) \
|
|
||||||
do { \
|
|
||||||
(vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
|
|
||||||
(vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
|
|
||||||
if ((vsp)->tv_nsec < 0) { \
|
|
||||||
(vsp)->tv_sec--; \
|
|
||||||
(vsp)->tv_nsec += 1000000000L; \
|
|
||||||
} \
|
|
||||||
} while (/* CONSTCOND */ 0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_unused static void *xmalloc (size_t size)
|
|
||||||
{
|
|
||||||
void *value = malloc(size);
|
|
||||||
|
|
||||||
if (value)
|
|
||||||
return (value);
|
|
||||||
|
|
||||||
ERRX;
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
|
||||||
|
|
||||||
_unused static void *xrealloc(void *ptr, size_t size)
|
|
||||||
{
|
|
||||||
void *value = realloc(ptr, size);
|
|
||||||
|
|
||||||
if (value)
|
|
||||||
return (value);
|
|
||||||
|
|
||||||
ERRX;
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
|
||||||
|
|
||||||
_unused static char *xstrdup(const char *str)
|
|
||||||
{
|
|
||||||
char *value;
|
|
||||||
|
|
||||||
if (! str)
|
|
||||||
return (NULL);
|
|
||||||
|
|
||||||
value = strdup(str);
|
|
||||||
|
|
||||||
if (value)
|
|
||||||
return (value);
|
|
||||||
|
|
||||||
ERRX;
|
|
||||||
/* NOTREACHED */
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef ERRX
|
|
||||||
|
|
||||||
/* basename_c never modifies the argument. As such, if there is a trailing
|
|
||||||
* slash then an empty string is returned. */
|
|
||||||
_unused static const char *basename_c(const char *path)
|
|
||||||
{
|
|
||||||
const char *slash = strrchr(path, '/');
|
|
||||||
|
|
||||||
if (slash)
|
|
||||||
return (++slash);
|
|
||||||
return (path);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -38,8 +38,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "helpers.h"
|
|
||||||
|
|
||||||
#define RC_LEVEL_BOOT "boot"
|
#define RC_LEVEL_BOOT "boot"
|
||||||
#define RC_LEVEL_DEFAULT "default"
|
#define RC_LEVEL_DEFAULT "default"
|
||||||
|
|
||||||
@@ -54,6 +52,98 @@
|
|||||||
#define RC_SVCDIR_STARTED RC_SVCDIR "/started"
|
#define RC_SVCDIR_STARTED RC_SVCDIR "/started"
|
||||||
#define RC_SVCDIR_COLDPLUGGED RC_SVCDIR "/coldplugged"
|
#define RC_SVCDIR_COLDPLUGGED RC_SVCDIR "/coldplugged"
|
||||||
|
|
||||||
|
#define ERRX fprintf (stderr, "out of memory\n"); exit (1)
|
||||||
|
|
||||||
|
#define UNCONST(a) ((void *)(unsigned long)(const void *)(a))
|
||||||
|
|
||||||
|
#ifdef lint
|
||||||
|
# define _unused
|
||||||
|
#endif
|
||||||
|
#if __GNUC__ > 2 || defined(__INTEL_COMPILER)
|
||||||
|
# define _dead __attribute__((__noreturn__))
|
||||||
|
# define _unused __attribute__((__unused__))
|
||||||
|
#else
|
||||||
|
# define _dead
|
||||||
|
# define _unused
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Some libc implemntations don't have these */
|
||||||
|
#ifndef TAILQ_CONCAT
|
||||||
|
#define TAILQ_CONCAT(head1, head2, field) do { \
|
||||||
|
if (!TAILQ_EMPTY(head2)) { \
|
||||||
|
*(head1)->tqh_last = (head2)->tqh_first; \
|
||||||
|
(head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \
|
||||||
|
(head1)->tqh_last = (head2)->tqh_last; \
|
||||||
|
TAILQ_INIT((head2)); \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef TAILQ_FOREACH_SAFE
|
||||||
|
#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
|
||||||
|
for ((var) = TAILQ_FIRST((head)); \
|
||||||
|
(var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
|
||||||
|
(var) = (tvar))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __GLIBC__
|
||||||
|
# if ! defined (__UCLIBC__) && ! defined (__dietlibc__)
|
||||||
|
# define strlcpy(dst, src, size) snprintf(dst, size, "%s", src)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef timespecsub
|
||||||
|
#define timespecsub(tsp, usp, vsp) \
|
||||||
|
do { \
|
||||||
|
(vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \
|
||||||
|
(vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \
|
||||||
|
if ((vsp)->tv_nsec < 0) { \
|
||||||
|
(vsp)->tv_sec--; \
|
||||||
|
(vsp)->tv_nsec += 1000000000L; \
|
||||||
|
} \
|
||||||
|
} while (/* CONSTCOND */ 0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_unused static void *xmalloc (size_t size)
|
||||||
|
{
|
||||||
|
void *value = malloc(size);
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
return (value);
|
||||||
|
|
||||||
|
ERRX;
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
|
||||||
|
_unused static void *xrealloc(void *ptr, size_t size)
|
||||||
|
{
|
||||||
|
void *value = realloc(ptr, size);
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
return (value);
|
||||||
|
|
||||||
|
ERRX;
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
|
||||||
|
_unused static char *xstrdup(const char *str)
|
||||||
|
{
|
||||||
|
char *value;
|
||||||
|
|
||||||
|
if (! str)
|
||||||
|
return (NULL);
|
||||||
|
|
||||||
|
value = strdup(str);
|
||||||
|
|
||||||
|
if (value)
|
||||||
|
return (value);
|
||||||
|
|
||||||
|
ERRX;
|
||||||
|
/* NOTREACHED */
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef ERRX
|
||||||
|
|
||||||
_unused static bool exists(const char *pathname)
|
_unused static bool exists(const char *pathname)
|
||||||
{
|
{
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
@@ -86,5 +176,16 @@ int is_writable(const char *);
|
|||||||
#define service_start(service) exec_service(service, "start");
|
#define service_start(service) exec_service(service, "start");
|
||||||
#define service_stop(service) exec_service(service, "stop");
|
#define service_stop(service) exec_service(service, "stop");
|
||||||
|
|
||||||
|
/* basename_c never modifies the argument. As such, if there is a trailing
|
||||||
|
* slash then an empty string is returned. */
|
||||||
|
_unused static const char *basename_c(const char *path)
|
||||||
|
{
|
||||||
|
const char *slash = strrchr(path, '/');
|
||||||
|
|
||||||
|
if (slash)
|
||||||
|
return (++slash);
|
||||||
|
return (path);
|
||||||
|
}
|
||||||
|
|
||||||
int parse_mode(mode_t *, char *);
|
int parse_mode(mode_t *, char *);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ const char libeinfo_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "einfo.h"
|
#include "einfo.h"
|
||||||
#include "helpers.h"
|
|
||||||
#include "hidden-visibility.h"
|
#include "hidden-visibility.h"
|
||||||
|
|
||||||
hidden_proto(ecolor)
|
hidden_proto(ecolor)
|
||||||
@@ -135,7 +134,7 @@ static const struct ecolor ecolors[] = {
|
|||||||
{ ECOLOR_BRACKET, BRACKET, "bracket" },
|
{ ECOLOR_BRACKET, BRACKET, "bracket" },
|
||||||
{ ECOLOR_NORMAL, 0, NULL },
|
{ ECOLOR_NORMAL, 0, NULL },
|
||||||
};
|
};
|
||||||
static const char *ecolors_str[ARRAY_SIZE(ecolors)];
|
static const char *ecolors_str[sizeof(ecolors)/sizeof(ecolors[0])];
|
||||||
|
|
||||||
static char *flush = NULL;
|
static char *flush = NULL;
|
||||||
static char *up = NULL;
|
static char *up = NULL;
|
||||||
@@ -226,6 +225,27 @@ strlcat(char *dst, const char *src, size_t size)
|
|||||||
|
|
||||||
return dst_n + (s - src);
|
return dst_n + (s - src);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
strlcpy(char *dst, const char *src, size_t size)
|
||||||
|
{
|
||||||
|
const char *s = src;
|
||||||
|
size_t n = size;
|
||||||
|
|
||||||
|
if (n && --n)
|
||||||
|
do {
|
||||||
|
if (!(*dst++ = *src++))
|
||||||
|
break;
|
||||||
|
} while (--n);
|
||||||
|
|
||||||
|
if (!n) {
|
||||||
|
if (size)
|
||||||
|
*dst = '\0';
|
||||||
|
while (*src++);
|
||||||
|
}
|
||||||
|
|
||||||
|
return src - s - 1;
|
||||||
|
}
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -442,7 +462,7 @@ colour_terminal(FILE * EINFO_RESTRICT f)
|
|||||||
|
|
||||||
/* Now setup our colours */
|
/* Now setup our colours */
|
||||||
p = ebuffer;
|
p = ebuffer;
|
||||||
for (i = 0; i < ARRAY_SIZE(ecolors); ++i) {
|
for (i = 0; i < sizeof(ecolors) / sizeof(ecolors[0]); i++) {
|
||||||
tmp[0] = '\0';
|
tmp[0] = '\0';
|
||||||
if (ecolors[i].name) {
|
if (ecolors[i].name) {
|
||||||
bold = _md;
|
bold = _md;
|
||||||
@@ -578,7 +598,7 @@ _ecolor(FILE * EINFO_RESTRICT f, ECOLOR color)
|
|||||||
if (!colour_terminal(f))
|
if (!colour_terminal(f))
|
||||||
return "";
|
return "";
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(ecolors); ++i)
|
for (i = 0; i < sizeof(ecolors) / sizeof(ecolors[0]); i++)
|
||||||
if (ecolors[i].color == color)
|
if (ecolors[i].color == color)
|
||||||
return ecolors_str[i];
|
return ecolors_str[i];
|
||||||
return "";
|
return "";
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -689,27 +687,27 @@ rc_deptree_update_needed(time_t *newest, char *file)
|
|||||||
if (!existss(RC_DEPTREE_CACHE))
|
if (!existss(RC_DEPTREE_CACHE))
|
||||||
return true;
|
return true;
|
||||||
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_INITDIR, newest, file))
|
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_INITDIR, newest, file))
|
||||||
return true;
|
newer = true;
|
||||||
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_CONFDIR, newest, file))
|
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_CONFDIR, newest, file))
|
||||||
return true;
|
newer = true;
|
||||||
#ifdef RC_PKG_INITDIR
|
#ifdef RC_PKG_INITDIR
|
||||||
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_PKG_INITDIR, newest, file))
|
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_PKG_INITDIR, newest, file))
|
||||||
return true;
|
newer = true;
|
||||||
#endif
|
#endif
|
||||||
#ifdef RC_PKG_CONFDIR
|
#ifdef RC_PKG_CONFDIR
|
||||||
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_PKG_CONFDIR, newest, file))
|
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_PKG_CONFDIR, newest, file))
|
||||||
return true;
|
newer = true;
|
||||||
#endif
|
#endif
|
||||||
#ifdef RC_LOCAL_INITDIR
|
#ifdef RC_LOCAL_INITDIR
|
||||||
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_LOCAL_INITDIR, newest, file))
|
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_LOCAL_INITDIR, newest, file))
|
||||||
return true;
|
newer = true;
|
||||||
#endif
|
#endif
|
||||||
#ifdef RC_LOCAL_CONFDIR
|
#ifdef RC_LOCAL_CONFDIR
|
||||||
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_LOCAL_CONFDIR, newest, file))
|
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_LOCAL_CONFDIR, newest, file))
|
||||||
return true;
|
newer = true;
|
||||||
#endif
|
#endif
|
||||||
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_CONF, newest, file))
|
if (!rc_newer_than(RC_DEPTREE_CACHE, RC_CONF, newest, file))
|
||||||
return true;
|
newer = true;
|
||||||
|
|
||||||
/* Some init scripts dependencies change depending on config files
|
/* Some init scripts dependencies change depending on config files
|
||||||
* outside of baselayout, like syslog-ng, so we check those too. */
|
* outside of baselayout, like syslog-ng, so we check those too. */
|
||||||
@@ -717,7 +715,8 @@ rc_deptree_update_needed(time_t *newest, char *file)
|
|||||||
TAILQ_FOREACH(s, config, entries) {
|
TAILQ_FOREACH(s, config, entries) {
|
||||||
if (!rc_newer_than(RC_DEPTREE_CACHE, s->value, newest, file)) {
|
if (!rc_newer_than(RC_DEPTREE_CACHE, s->value, newest, file)) {
|
||||||
newer = true;
|
newer = true;
|
||||||
break;
|
if (newest == NULL)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rc_stringlist_free(config);
|
rc_stringlist_free(config);
|
||||||
@@ -749,15 +748,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;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "librc.h"
|
#include "librc.h"
|
||||||
|
#include "einfo.h"
|
||||||
|
|
||||||
bool
|
bool
|
||||||
rc_yesno(const char *value)
|
rc_yesno(const char *value)
|
||||||
@@ -138,13 +139,15 @@ rc_proc_getent(const char *ent)
|
|||||||
if (!exists("/proc/cmdline"))
|
if (!exists("/proc/cmdline"))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (!(fp = fopen("/proc/cmdline", "r")))
|
if (!(fp = fopen("/proc/cmdline", "r"))) {
|
||||||
|
eerror("failed to open `/proc/cmdline': %s", strerror(errno));
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
proc = NULL;
|
proc = NULL;
|
||||||
i = 0;
|
i = 0;
|
||||||
if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
|
if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
|
||||||
return NULL;
|
eerror("rc_getline: %s", strerror(errno));
|
||||||
|
|
||||||
if (proc != NULL) {
|
if (proc != NULL) {
|
||||||
len = strlen(ent);
|
len = strlen(ent);
|
||||||
@@ -391,10 +394,13 @@ rc_conf_value(const char *setting)
|
|||||||
atexit(_free_rc_conf);
|
atexit(_free_rc_conf);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Support old configs. */
|
/* Support old configs, but complain about it. */
|
||||||
if (exists(RC_CONF_OLD)) {
|
if (exists(RC_CONF_OLD)) {
|
||||||
old = rc_config_load(RC_CONF_OLD);
|
old = rc_config_load(RC_CONF_OLD);
|
||||||
TAILQ_CONCAT(rc_conf, old, entries);
|
TAILQ_CONCAT(rc_conf, old, entries);
|
||||||
|
ewarn("Your system still has %s", RC_CONF_OLD);
|
||||||
|
ewarn("Please migrate to the appropriate settings in %s", RC_CONF);
|
||||||
|
ewarn("and delete %s.", RC_CONF_OLD);
|
||||||
#ifdef DEBUG_MEMORY
|
#ifdef DEBUG_MEMORY
|
||||||
free(old);
|
free(old);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -33,17 +33,10 @@
|
|||||||
|
|
||||||
__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)
|
|
||||||
#define RC_SVCDIR RC_LIBEXECDIR "/init.d"
|
#define RC_SVCDIR RC_LIBEXECDIR "/init.d"
|
||||||
#elif defined(__linux__)
|
|
||||||
#define RC_SVCDIR "@PREFIX@/run/openrc"
|
|
||||||
#else
|
|
||||||
#define RC_SVCDIR RC_LIBEXECDIR "/init.d"
|
|
||||||
#endif
|
|
||||||
#define RC_RUNLEVELDIR RC_SYSCONFDIR "/runlevels"
|
#define RC_RUNLEVELDIR RC_SYSCONFDIR "/runlevels"
|
||||||
#define RC_INITDIR RC_SYSCONFDIR "/init.d"
|
#define RC_INITDIR RC_SYSCONFDIR "/init.d"
|
||||||
#define RC_CONFDIR RC_SYSCONFDIR "/conf.d"
|
#define RC_CONFDIR RC_SYSCONFDIR "/conf.d"
|
||||||
@@ -283,7 +276,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"
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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++;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)) {
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -253,38 +253,13 @@ do_e(int argc, char **argv)
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct {
|
|
||||||
const char * const name;
|
|
||||||
RC_SERVICE bit;
|
|
||||||
} service_bits[] = {
|
|
||||||
{ "service_started", RC_SERVICE_STARTED, },
|
|
||||||
{ "service_stopped", RC_SERVICE_STOPPED, },
|
|
||||||
{ "service_inactive", RC_SERVICE_INACTIVE, },
|
|
||||||
{ "service_starting", RC_SERVICE_STARTING, },
|
|
||||||
{ "service_stopping", RC_SERVICE_STOPPING, },
|
|
||||||
{ "service_hotplugged", RC_SERVICE_HOTPLUGGED, },
|
|
||||||
{ "service_wasinactive", RC_SERVICE_WASINACTIVE, },
|
|
||||||
{ "service_failed", RC_SERVICE_FAILED, },
|
|
||||||
};
|
|
||||||
|
|
||||||
static RC_SERVICE
|
|
||||||
lookup_service_state(const char *service)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
for (i = 0; i < ARRAY_SIZE(service_bits); ++i)
|
|
||||||
if (!strcmp(service, service_bits[i].name))
|
|
||||||
return service_bits[i].bit;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
do_service(int argc, char **argv)
|
do_service(int argc, char **argv)
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
char *service;
|
char *service;
|
||||||
char *exec;
|
char *exec;
|
||||||
int idx;
|
int idx = 0;
|
||||||
RC_SERVICE state, bit;
|
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
service = argv[1];
|
service = argv[1];
|
||||||
@@ -294,11 +269,21 @@ do_service(int argc, char **argv)
|
|||||||
if (service == NULL || *service == '\0')
|
if (service == NULL || *service == '\0')
|
||||||
eerrorx("%s: no service specified", applet);
|
eerrorx("%s: no service specified", applet);
|
||||||
|
|
||||||
state = rc_service_state(service);
|
if (strcmp(applet, "service_started") == 0)
|
||||||
bit = lookup_service_state(applet);
|
ok = (rc_service_state(service) & RC_SERVICE_STARTED);
|
||||||
if (bit) {
|
else if (strcmp(applet, "service_stopped") == 0)
|
||||||
ok = (state & bit);
|
ok = (rc_service_state(service) & RC_SERVICE_STOPPED);
|
||||||
} else if (strcmp(applet, "service_started_daemon") == 0) {
|
else if (strcmp(applet, "service_inactive") == 0)
|
||||||
|
ok = (rc_service_state(service) & RC_SERVICE_INACTIVE);
|
||||||
|
else if (strcmp(applet, "service_starting") == 0)
|
||||||
|
ok = (rc_service_state(service) & RC_SERVICE_STARTING);
|
||||||
|
else if (strcmp(applet, "service_stopping") == 0)
|
||||||
|
ok = (rc_service_state(service) & RC_SERVICE_STOPPING);
|
||||||
|
else if (strcmp(applet, "service_hotplugged") == 0)
|
||||||
|
ok = (rc_service_state(service) & RC_SERVICE_HOTPLUGGED);
|
||||||
|
else if (strcmp(applet, "service_wasinactive") == 0)
|
||||||
|
ok = (rc_service_state(service) & RC_SERVICE_WASINACTIVE);
|
||||||
|
else if (strcmp(applet, "service_started_daemon") == 0) {
|
||||||
service = getenv("RC_SVCNAME");
|
service = getenv("RC_SVCNAME");
|
||||||
exec = argv[1];
|
exec = argv[1];
|
||||||
if (argc > 3) {
|
if (argc > 3) {
|
||||||
@@ -330,34 +315,37 @@ do_mark_service(int argc, char **argv)
|
|||||||
char *svcname = getenv("RC_SVCNAME");
|
char *svcname = getenv("RC_SVCNAME");
|
||||||
char *service = NULL;
|
char *service = NULL;
|
||||||
char *runscript_pid;
|
char *runscript_pid;
|
||||||
/* char *mtime; */
|
char *mtime;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
RC_SERVICE bit;
|
size_t l;
|
||||||
/* size_t l; */
|
|
||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
service = argv[1];
|
service = argv[1];
|
||||||
else
|
else
|
||||||
service = svcname;
|
service = getenv("RC_SVCNAME");
|
||||||
|
|
||||||
if (service == NULL || *service == '\0')
|
if (service == NULL || *service == '\0')
|
||||||
eerrorx("%s: no service specified", applet);
|
eerrorx("%s: no service specified", applet);
|
||||||
|
|
||||||
if (!strncmp(applet, "mark_", 5) &&
|
if (strcmp(applet, "mark_service_started") == 0)
|
||||||
(bit = lookup_service_state(applet + 5)))
|
ok = rc_service_mark(service, RC_SERVICE_STARTED);
|
||||||
ok = rc_service_mark(service, bit);
|
else if (strcmp(applet, "mark_service_stopped") == 0)
|
||||||
|
ok = rc_service_mark(service, RC_SERVICE_STOPPED);
|
||||||
|
else if (strcmp(applet, "mark_service_inactive") == 0)
|
||||||
|
ok = rc_service_mark(service, RC_SERVICE_INACTIVE);
|
||||||
|
else if (strcmp(applet, "mark_service_starting") == 0)
|
||||||
|
ok = rc_service_mark(service, RC_SERVICE_STARTING);
|
||||||
|
else if (strcmp(applet, "mark_service_stopping") == 0)
|
||||||
|
ok = rc_service_mark(service, RC_SERVICE_STOPPING);
|
||||||
|
else if (strcmp(applet, "mark_service_hotplugged") == 0)
|
||||||
|
ok = rc_service_mark(service, RC_SERVICE_HOTPLUGGED);
|
||||||
|
else if (strcmp(applet, "mark_service_failed") == 0)
|
||||||
|
ok = rc_service_mark(service, RC_SERVICE_FAILED);
|
||||||
else
|
else
|
||||||
eerrorx("%s: unknown applet", applet);
|
eerrorx("%s: unknown applet", applet);
|
||||||
|
|
||||||
/* If we're marking ourselves then we need to inform our parent
|
/* If we're marking ourselves then we need to inform our parent
|
||||||
runscript process so they do not mark us based on our exit code */
|
runscript process so they do not mark us based on our exit code */
|
||||||
/*
|
|
||||||
* FIXME: svcname and service are almost always equal except called from a
|
|
||||||
* shell with just argv[1] - So that doesn't seem to do what Roy initially
|
|
||||||
* expected.
|
|
||||||
* See 20120424041423.GA23657@odin.qasl.de (Tue, 24 Apr 2012 06:14:23 +0200,
|
|
||||||
* openrc@gentoo.org).
|
|
||||||
*/
|
|
||||||
if (ok && svcname && strcmp(svcname, service) == 0) {
|
if (ok && svcname && strcmp(svcname, service) == 0) {
|
||||||
runscript_pid = getenv("RC_RUNSCRIPT_PID");
|
runscript_pid = getenv("RC_RUNSCRIPT_PID");
|
||||||
if (runscript_pid && sscanf(runscript_pid, "%d", &pid) == 1)
|
if (runscript_pid && sscanf(runscript_pid, "%d", &pid) == 1)
|
||||||
@@ -367,7 +355,6 @@ do_mark_service(int argc, char **argv)
|
|||||||
|
|
||||||
/* Remove the exclusive time test. This ensures that it's not
|
/* Remove the exclusive time test. This ensures that it's not
|
||||||
in control as well */
|
in control as well */
|
||||||
/*
|
|
||||||
l = strlen(RC_SVCDIR "/exclusive") + strlen(svcname) +
|
l = strlen(RC_SVCDIR "/exclusive") + strlen(svcname) +
|
||||||
strlen(runscript_pid) + 4;
|
strlen(runscript_pid) + 4;
|
||||||
mtime = xmalloc(l);
|
mtime = xmalloc(l);
|
||||||
@@ -376,7 +363,6 @@ do_mark_service(int argc, char **argv)
|
|||||||
if (exists(mtime) && unlink(mtime) != 0)
|
if (exists(mtime) && unlink(mtime) != 0)
|
||||||
eerror("%s: unlink: %s", applet, strerror(errno));
|
eerror("%s: unlink: %s", applet, strerror(errno));
|
||||||
free(mtime);
|
free(mtime);
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ok ? EXIT_SUCCESS : EXIT_FAILURE;
|
return ok ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
@@ -414,7 +400,7 @@ do_value(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
shell_var(int argc, char **argv)
|
do_shell_var(int argc, char **argv)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
char *p;
|
char *p;
|
||||||
@@ -435,127 +421,106 @@ shell_var(int argc, char **argv)
|
|||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
is_older_than(int argc, char **argv)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (argc < 3)
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
|
|
||||||
/* This test is perverted - historically the baselayout function
|
|
||||||
* returns 0 on *failure*, which is plain wrong */
|
|
||||||
for (i = 2; i < argc; ++i)
|
|
||||||
if (!rc_newer_than(argv[1], argv[i], NULL, NULL))
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
is_newer_than(int argc, char **argv)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (argc < 3)
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
|
|
||||||
/* This test is correct as it's not present in baselayout */
|
|
||||||
for (i = 2; i < argc; ++i)
|
|
||||||
if (!rc_newer_than(argv[1], argv[i], NULL, NULL))
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
is_runlevel_start(_unused int argc, _unused char **argv)
|
|
||||||
{
|
|
||||||
return rc_runlevel_starting() ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
is_runlevel_stop(_unused int argc, _unused char **argv)
|
|
||||||
{
|
|
||||||
return rc_runlevel_stopping() ? 0 : 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
rc_abort(_unused int argc, _unused char **argv)
|
|
||||||
{
|
|
||||||
const char *p = getenv("RC_PID");
|
|
||||||
int pid;
|
|
||||||
|
|
||||||
if (p && sscanf(p, "%d", &pid) == 1) {
|
|
||||||
if (kill(pid, SIGUSR1) != 0)
|
|
||||||
eerrorx("rc-abort: failed to signal parent %d: %s",
|
|
||||||
pid, strerror(errno));
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct {
|
|
||||||
const char * const name;
|
|
||||||
int (* const applet)(int argc, char **argv);
|
|
||||||
} applets[] = {
|
|
||||||
#define A(a) { #a, a }
|
|
||||||
A(fstabinfo),
|
|
||||||
A(mountinfo),
|
|
||||||
{ "rc-depend", rc_depend, },
|
|
||||||
{ "rc-service", rc_service, },
|
|
||||||
{ "rc-status", rc_status, },
|
|
||||||
{ "rc-update", rc_update, },
|
|
||||||
{ "update-rc", rc_update, },
|
|
||||||
A(runscript),
|
|
||||||
{ "start-stop-daemon", start_stop_daemon, },
|
|
||||||
A(checkpath),
|
|
||||||
A(swclock),
|
|
||||||
A(shell_var),
|
|
||||||
A(is_older_than),
|
|
||||||
A(is_newer_than),
|
|
||||||
A(is_runlevel_start),
|
|
||||||
A(is_runlevel_stop),
|
|
||||||
{ "rc-abort", rc_abort, },
|
|
||||||
/* These are purely for init scripts and do not make sense as
|
|
||||||
* anything else */
|
|
||||||
{ "service_get_value", do_value, },
|
|
||||||
{ "service_set_value", do_value, },
|
|
||||||
{ "get_options", do_value, },
|
|
||||||
{ "save_options", do_value, },
|
|
||||||
#undef A
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
void
|
||||||
run_applets(int argc, char **argv)
|
run_applets(int argc, char **argv)
|
||||||
{
|
{
|
||||||
size_t i;
|
int i = 2;
|
||||||
|
char *p;
|
||||||
|
pid_t pid = 0;
|
||||||
|
|
||||||
/* Bug 351712: We need an extra way to explicitly select an applet OTHER
|
/* 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
|
* 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
|
* 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. */
|
* 'rc --applet APPLET', and shift ALL of argv down by two array items. */
|
||||||
if (strcmp(applet, "rc") == 0 && argc >= 3 &&
|
if (strcmp(applet, "rc") == 0 && argc >= 3 &&
|
||||||
(strcmp(argv[1],"--applet") == 0 || strcmp(argv[1], "-a") == 0)) {
|
(strcmp(argv[1],"--applet") == 0 || strcmp(argv[1], "-a") == 0)) {
|
||||||
applet = argv[2];
|
applet = argv[2];
|
||||||
argv += 2;
|
argv += 2;
|
||||||
argc -= 2;
|
argc -= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(applets); ++i)
|
/* These are designed to be applications in their own right */
|
||||||
if (!strcmp(applet, applets[i].name))
|
if (strcmp(applet, "fstabinfo") == 0)
|
||||||
exit(applets[i].applet(argc, argv));
|
exit(fstabinfo(argc, argv));
|
||||||
|
else if (strcmp(applet, "mountinfo") == 0)
|
||||||
|
exit(mountinfo(argc, argv));
|
||||||
|
else if (strcmp(applet, "rc-depend") == 0)
|
||||||
|
exit(rc_depend(argc, argv));
|
||||||
|
else if (strcmp(applet, "rc-service") == 0)
|
||||||
|
exit(rc_service(argc, argv));
|
||||||
|
else if (strcmp(applet, "rc-status") == 0)
|
||||||
|
exit(rc_status(argc, argv));
|
||||||
|
else if (strcmp(applet, "rc-update") == 0 ||
|
||||||
|
strcmp(applet, "update-rc") == 0)
|
||||||
|
exit(rc_update(argc, argv));
|
||||||
|
else if (strcmp(applet, "runscript") == 0)
|
||||||
|
exit(runscript(argc, argv));
|
||||||
|
else if (strcmp(applet, "start-stop-daemon") == 0)
|
||||||
|
exit(start_stop_daemon(argc, argv));
|
||||||
|
else if (strcmp (applet, "checkpath") == 0)
|
||||||
|
exit(checkpath(argc, argv));
|
||||||
|
else if (strcmp(applet, "swclock") == 0)
|
||||||
|
exit(swclock(argc, argv));
|
||||||
|
|
||||||
|
/* These could also be applications in their own right */
|
||||||
|
if (strcmp(applet, "shell_var") == 0)
|
||||||
|
exit(do_shell_var(argc, argv));
|
||||||
|
|
||||||
|
/* This test is perverted - historically the baselayout function
|
||||||
|
* returns 0 on *failure*, which is plain wrong */
|
||||||
|
if (strcmp(applet, "is_older_than") == 0) {
|
||||||
|
if (argc < 3)
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
while (i < argc) {
|
||||||
|
if (!rc_newer_than(argv[1], argv[i++], NULL, NULL))
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
};
|
||||||
|
/* This test is correct as it's not present in baselayout */
|
||||||
|
if (strcmp(applet, "is_newer_than") == 0) {
|
||||||
|
if (argc < 3)
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
while (i < argc) {
|
||||||
|
if (!rc_newer_than(argv[1], argv[i++], NULL, NULL))
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
};
|
||||||
|
|
||||||
if (applet[0] == 'e' || (applet[0] == 'v' && applet[1] == 'e'))
|
if (applet[0] == 'e' || (applet[0] == 'v' && applet[1] == 'e'))
|
||||||
exit(do_e(argc, argv));
|
exit(do_e(argc, argv));
|
||||||
|
|
||||||
|
/* These are purely for init scripts and do not make sense as
|
||||||
|
* anything else */
|
||||||
|
if (strcmp(applet, "service_get_value") == 0 ||
|
||||||
|
strcmp(applet, "service_set_value") == 0 ||
|
||||||
|
strcmp(applet, "get_options") == 0 ||
|
||||||
|
strcmp(applet, "save_options") == 0)
|
||||||
|
exit(do_value(argc, argv));
|
||||||
|
|
||||||
if (strncmp(applet, "service_", strlen("service_")) == 0)
|
if (strncmp(applet, "service_", strlen("service_")) == 0)
|
||||||
exit(do_service(argc, argv));
|
exit(do_service(argc, argv));
|
||||||
|
|
||||||
if (strncmp(applet, "mark_service_", strlen("mark_service_")) == 0)
|
if (strncmp(applet, "mark_service_", strlen("mark_service_")) == 0)
|
||||||
exit(do_mark_service(argc, argv));
|
exit(do_mark_service(argc, argv));
|
||||||
|
|
||||||
|
if (strcmp(applet, "is_runlevel_start") == 0)
|
||||||
|
exit(rc_runlevel_starting() ? 0 : 1);
|
||||||
|
else if (strcmp (applet, "is_runlevel_stop") == 0)
|
||||||
|
exit(rc_runlevel_stopping() ? 0 : 1);
|
||||||
|
|
||||||
|
if (strcmp(applet, "rc-abort") == 0) {
|
||||||
|
p = getenv("RC_PID");
|
||||||
|
if (p && sscanf(p, "%d", &pid) == 1) {
|
||||||
|
if (kill(pid, SIGUSR1) != 0)
|
||||||
|
eerrorx("rc-abort: failed to signal parent %d: %s",
|
||||||
|
pid, strerror(errno));
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(applet, "rc") != 0)
|
if (strcmp(applet, "rc") != 0)
|
||||||
eerrorx("%s: unknown applet", applet);
|
eerrorx("%s: unknown applet", applet);
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user