Compare commits
61 Commits
openrc-0.5
...
openrc-0.5
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e9e37ad798 | ||
|
|
4df8770a90 | ||
|
|
ec38bbbdda | ||
|
|
509e34d425 | ||
|
|
0de1d18d41 | ||
|
|
89a2d76772 | ||
|
|
80d4ce3a11 | ||
|
|
d21177e5c7 | ||
|
|
d29daf3952 | ||
|
|
1d9ce8e9a1 | ||
|
|
bb96dc4e01 | ||
|
|
ebb49805fc | ||
|
|
4a892a23ba | ||
|
|
95ee39ab1c | ||
|
|
3c8ea5896a | ||
|
|
7c5047acfc | ||
|
|
f2f7d0ae6d | ||
|
|
d27655c908 | ||
|
|
9f4a7afd83 | ||
|
|
ac6808a73e | ||
|
|
baeb59cd2e | ||
|
|
a4b03ead79 | ||
|
|
c96a015742 | ||
|
|
fdca530d4f | ||
|
|
da08e3822f | ||
|
|
ac7af85813 | ||
|
|
a8f6a9b654 | ||
|
|
aaa0498bf8 | ||
|
|
0ffe5caf18 | ||
|
|
5e8e38b9cf | ||
|
|
454bd460c4 | ||
|
|
a7fabeef95 | ||
|
|
07f9be7b1c | ||
|
|
42ca23b878 | ||
|
|
3dc712e222 | ||
|
|
44585fea46 | ||
|
|
6e485bde39 | ||
|
|
2ea1df634e | ||
|
|
807e5d7250 | ||
|
|
7012630302 | ||
|
|
51907c7368 | ||
|
|
8da7a49d02 | ||
|
|
29949a5496 | ||
|
|
7fbb6ad427 | ||
|
|
08b5664668 | ||
|
|
7962218dd8 | ||
|
|
889b317ac6 | ||
|
|
9907c90552 | ||
|
|
b4104957b1 | ||
|
|
6abeec7430 | ||
|
|
fbb78022f9 | ||
|
|
79b24f5b79 | ||
|
|
fc6cdefedb | ||
|
|
43f6c2196e | ||
|
|
c568baf8c8 | ||
|
|
aaced3face | ||
|
|
c3e9a7ec14 | ||
|
|
efec0b5012 | ||
|
|
278e65b24a | ||
|
|
1b3a413673 | ||
|
|
a685e4db0a |
12
Makefile
12
Makefile
@@ -2,9 +2,7 @@
|
|||||||
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
||||||
# All rights reserved. Released under the 2-clause BSD license.
|
# All rights reserved. Released under the 2-clause BSD license.
|
||||||
|
|
||||||
NAME= openrc
|
include Makefile.inc
|
||||||
VERSION= 0.4.3
|
|
||||||
PKG= ${NAME}-${VERSION}
|
|
||||||
|
|
||||||
SUBDIR= conf.d etc init.d man sh src
|
SUBDIR= conf.d etc init.d man sh src
|
||||||
|
|
||||||
@@ -16,6 +14,14 @@ _OLDNET_SH= case "${MKOLDNET}" in \
|
|||||||
_OLDNET!= ${_OLDNET_SH}
|
_OLDNET!= ${_OLDNET_SH}
|
||||||
SUBDIR+= ${_OLDNET}$(shell ${_OLDNET_SH})
|
SUBDIR+= ${_OLDNET}$(shell ${_OLDNET_SH})
|
||||||
|
|
||||||
|
# Build pkgconfig or not
|
||||||
|
_PKGCONFIG_SH= case "${MKPKGCONFIG}" in \
|
||||||
|
[Yy][Ee][Ss]|"") echo "pkgconfig";; \
|
||||||
|
*) echo "";; \
|
||||||
|
esac
|
||||||
|
_PKGCONFIG!= ${_PKGCONFIG_SH}
|
||||||
|
SUBDIR+= ${_PKGCONFIG}$(shell ${_PKGCONFIG_SH})
|
||||||
|
|
||||||
# We need to ensure that runlevels is done last
|
# We need to ensure that runlevels is done last
|
||||||
SUBDIR+= runlevels
|
SUBDIR+= runlevels
|
||||||
|
|
||||||
|
|||||||
3
Makefile.inc
Normal file
3
Makefile.inc
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
NAME= openrc
|
||||||
|
VERSION= 0.5.3
|
||||||
|
PKG= ${NAME}-${VERSION}
|
||||||
1
README
1
README
@@ -11,6 +11,7 @@ PROGLDFLAGS=-static
|
|||||||
LIBNAME=lib64
|
LIBNAME=lib64
|
||||||
DESTDIR=/tmp/openrc-image
|
DESTDIR=/tmp/openrc-image
|
||||||
MKPAM=pam
|
MKPAM=pam
|
||||||
|
MKPKGCONFIG=no
|
||||||
MKTERMCAP=ncurses
|
MKTERMCAP=ncurses
|
||||||
MKTERMCAP=termcap
|
MKTERMCAP=termcap
|
||||||
MKOLDNET=yes
|
MKOLDNET=yes
|
||||||
|
|||||||
36
README.net
Normal file
36
README.net
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
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 confguration, including link setup.
|
||||||
|
For dynmaic, 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 publically available.
|
||||||
|
If you have the skills and share the vision then contact me privately and
|
||||||
|
we'll take it from there.
|
||||||
1
conf.d/.gitignore
vendored
1
conf.d/.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
network
|
network
|
||||||
|
staticroute
|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
DIR= ${CONFDIR}
|
DIR= ${CONFDIR}
|
||||||
CONF= bootmisc fsck hostname local localmount network urandom
|
CONF= bootmisc fsck hostname local localmount network staticroute urandom
|
||||||
|
|
||||||
TARGETS+= network
|
TARGETS+= network staticroute
|
||||||
CLEANFILES+= network
|
CLEANFILES+= network staticroute
|
||||||
|
|
||||||
MK= ../mk
|
MK= ../mk
|
||||||
include ${MK}/os.mk
|
include ${MK}/os.mk
|
||||||
include Makefile.${OS}
|
include Makefile.${OS}
|
||||||
include ${MK}/scripts.mk
|
include ${MK}/scripts.mk
|
||||||
|
|
||||||
|
SOS?= BSD
|
||||||
|
|
||||||
network: network.in network.${OS}
|
network: network.in network.${OS}
|
||||||
cp network.in network
|
cp $@.in $@
|
||||||
[ -e network.${OS} ] && cat network.${OS} >> network || true
|
[ -e $@.${OS} ] && cat $@.${OS} >> $@ || true
|
||||||
|
|
||||||
|
staticroute: staticroute.${SOS}
|
||||||
|
cp $@.${SOS} $@
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
CONF+= consolefont dmesg hwclock keymaps modules
|
CONF+= consolefont dmesg hwclock keymaps modules
|
||||||
|
SOS= Linux
|
||||||
|
|||||||
@@ -13,6 +13,11 @@
|
|||||||
#fsck_passno=">1"
|
#fsck_passno=">1"
|
||||||
#fsck_passno="<2"
|
#fsck_passno="<2"
|
||||||
|
|
||||||
|
# Most modern fs's don't require a full fsck on boot, but for those that do
|
||||||
|
# it may be adivisable to skip this when running on battery.
|
||||||
|
# WARNING: Do not turn this off if you have any JFS partitions.
|
||||||
|
fsck_on_battery="YES"
|
||||||
|
|
||||||
# fsck_shutdown causes fsck to trigger during shutdown as well as startup.
|
# fsck_shutdown causes fsck to trigger during shutdown as well as startup.
|
||||||
# The end result of this is that if any periodic non-root filesystem checks are
|
# The end result of this is that if any periodic non-root filesystem checks are
|
||||||
# scheduled, under normal circumstances the actual check will happen during
|
# scheduled, under normal circumstances the actual check will happen during
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
# Set CLOCK to "UTC" if your system clock is set to UTC (also known as
|
# Set CLOCK to "UTC" if your Hardware Clock is set to UTC (also known as
|
||||||
# Greenwich Mean Time). If your clock is set to the local time, then
|
# Greenwich Mean Time). If that clock is set to the local time, then
|
||||||
# set CLOCK to "local". Note that if you dual boot with Windows, then
|
# set CLOCK to "local". Note that if you dual boot with Windows, then
|
||||||
# you should set it to "local".
|
# you should set it to "local".
|
||||||
clock="UTC"
|
clock="UTC"
|
||||||
|
|
||||||
# If you want to set the Hardware Clock to the current System Time
|
# If you want to set the Hardware Clock to the current System Time
|
||||||
# during shutdown, then say "YES" here.
|
# (software clock) during shutdown, then say "YES" here.
|
||||||
# You normally don't need to do this if you run a ntp daemon.
|
# You normally don't need to do this if you run a ntp daemon.
|
||||||
clock_systohc="NO"
|
clock_systohc="NO"
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
# On the other hand, ip (iproute2) is quite powerful and is also supported
|
# On the other hand, ip (iproute2) is quite powerful and is also supported
|
||||||
#ip_eth0="192.168.0.10/24; 192.168.10.10/24"
|
#ip_eth0="192.168.0.10/24; 192.168.10.10/24"
|
||||||
|
|
||||||
|
# ip doesn't handle MTU like ifconfig, but we can do it like so
|
||||||
|
#ifup_eth0="ip link set \$int mtu 1500"
|
||||||
|
|
||||||
# Create a bonded interface
|
# Create a bonded interface
|
||||||
#interfaces="bond0"
|
#interfaces="bond0"
|
||||||
#ifup_bond0="modprobe bonding; ifconfig \$int up; ifenslave \$int bge0"
|
#ifup_bond0="modprobe bonding; ifconfig \$int up; ifenslave \$int bge0"
|
||||||
|
|||||||
@@ -26,3 +26,5 @@
|
|||||||
# If you require DHCP, you should install dhcpcd and it to the boot or
|
# If you require DHCP, you should install dhcpcd and it to the boot or
|
||||||
# default runlevel.
|
# default runlevel.
|
||||||
|
|
||||||
|
# NIS users can set the domain name here
|
||||||
|
#domainname="foobar"
|
||||||
|
|||||||
2
conf.d/staticroute.BSD
Normal file
2
conf.d/staticroute.BSD
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Example static route. See route(8) for syntax.
|
||||||
|
staticroute="net 192.168.0.0 -netmask 255.255.0.0 10.73.1.1"
|
||||||
2
conf.d/staticroute.Linux
Normal file
2
conf.d/staticroute.Linux
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
# Example static route. See route(8) for syntax.
|
||||||
|
staticroute="net 192.168.0.0 netmask 255.255.0.0 gw 10.73.1.1"
|
||||||
1
doc/.gitignore
vendored
Normal file
1
doc/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
net.example
|
||||||
@@ -992,7 +992,7 @@
|
|||||||
# # 'from 24.80.102.112/32 to 192.168.1.0/24 table localnet priority 100' \
|
# # 'from 24.80.102.112/32 to 192.168.1.0/24 table localnet priority 100' \
|
||||||
# # 'from 216.113.223.51/32 to 192.168.1.0/24 table localnet priority 100' \
|
# # 'from 216.113.223.51/32 to 192.168.1.0/24 table localnet priority 100' \
|
||||||
# #"
|
# #"
|
||||||
# eval set -- $\rules_${IFVAR}
|
# eval set -- \$rules_${IFVAR}
|
||||||
# if [ $# != 0 ]; then
|
# if [ $# != 0 ]; then
|
||||||
# einfo "Adding IP policy routing rules"
|
# einfo "Adding IP policy routing rules"
|
||||||
# eindent
|
# eindent
|
||||||
@@ -1003,7 +1003,7 @@
|
|||||||
# else
|
# else
|
||||||
# for x; do
|
# for x; do
|
||||||
# ebegin "${x}"
|
# ebegin "${x}"
|
||||||
# ip rule add ${x} dev "${IFACE}"
|
# ip rule add ${x}
|
||||||
# eend $?
|
# eend $?
|
||||||
# done
|
# done
|
||||||
# fi
|
# fi
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
#unicode="NO"
|
#unicode="NO"
|
||||||
|
|
||||||
# Network fstypes. Below is the default.
|
# Network fstypes. Below is the default.
|
||||||
net_fs_list="afs cifs coda davfs fuse gfs ncpfs nfs nfs4 ocfs2 shfs smbfs"
|
net_fs_list="afs cifs coda davfs fuse fuse.sshfs gfs glusterfs lustre ncpfs nfs nfs4 ocfs2 shfs smbfs"
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
# SERVICE CONFIGURATION VARIABLES
|
# SERVICE CONFIGURATION VARIABLES
|
||||||
|
|||||||
11
init.d.misc/.gitignore
vendored
Normal file
11
init.d.misc/.gitignore
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
avahi-dnsconfd
|
||||||
|
avahid
|
||||||
|
dhcpcd
|
||||||
|
dbus
|
||||||
|
hald
|
||||||
|
named
|
||||||
|
ntpd
|
||||||
|
openvpn
|
||||||
|
polkitd
|
||||||
|
sshd
|
||||||
|
wpa_supplicant
|
||||||
@@ -14,7 +14,7 @@ depend()
|
|||||||
use logger
|
use logger
|
||||||
after bootmisc modules
|
after bootmisc modules
|
||||||
before dns dhcpcd net
|
before dns dhcpcd net
|
||||||
keyword noshutdown
|
keyword -shutdown
|
||||||
}
|
}
|
||||||
|
|
||||||
find_wireless()
|
find_wireless()
|
||||||
@@ -24,7 +24,9 @@ find_wireless()
|
|||||||
case "$RC_UNAME" in
|
case "$RC_UNAME" in
|
||||||
Linux)
|
Linux)
|
||||||
for iface in /sys/class/net/*; do
|
for iface in /sys/class/net/*; do
|
||||||
if [ -e "$iface"/wireless ]; then
|
if [ -e "$iface"/wireless -o \
|
||||||
|
-e "$iface"/phy80211 ]
|
||||||
|
then
|
||||||
echo "${iface##*/}"
|
echo "${iface##*/}"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|||||||
5
init.d/.gitignore
vendored
5
init.d/.gitignore
vendored
@@ -4,6 +4,8 @@ hostname
|
|||||||
local
|
local
|
||||||
localmount
|
localmount
|
||||||
moused
|
moused
|
||||||
|
net.lo
|
||||||
|
net.lo0
|
||||||
netmount
|
netmount
|
||||||
network
|
network
|
||||||
root
|
root
|
||||||
@@ -22,6 +24,7 @@ mount-ro
|
|||||||
mtab
|
mtab
|
||||||
numlock
|
numlock
|
||||||
procfs
|
procfs
|
||||||
|
staticroute
|
||||||
sysfs
|
sysfs
|
||||||
devdb
|
devdb
|
||||||
hostid
|
hostid
|
||||||
@@ -32,6 +35,8 @@ rc-enabled
|
|||||||
rpcbind
|
rpcbind
|
||||||
savecore
|
savecore
|
||||||
swap-blk
|
swap-blk
|
||||||
|
swclock
|
||||||
syslogd
|
syslogd
|
||||||
|
termencoding
|
||||||
ttys
|
ttys
|
||||||
wscons
|
wscons
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
DIR= ${INITDIR}
|
DIR= ${INITDIR}
|
||||||
SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \
|
SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \
|
||||||
network.in root.in savecache.in swap.in sysctl.in urandom.in
|
network.in root.in savecache.in staticroute.in swap.in swclock.in \
|
||||||
|
sysctl.in urandom.in
|
||||||
BIN= ${OBJS}
|
BIN= ${OBJS}
|
||||||
|
|
||||||
# Build our old net foo or not
|
# Build our old net foo or not
|
||||||
|
|||||||
@@ -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 nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
need localmount
|
need localmount
|
||||||
before logger
|
before logger
|
||||||
after clock sysctl
|
after clock sysctl
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
dir_writeable()
|
dir_writeable()
|
||||||
@@ -26,7 +26,7 @@ cleanup_tmp_dir()
|
|||||||
mkdir -p "$dir" || return $?
|
mkdir -p "$dir" || return $?
|
||||||
fi
|
fi
|
||||||
dir_writeable "$dir" || return 1
|
dir_writeable "$dir" || return 1
|
||||||
chmod +t "$dir"
|
chmod a+rwt "$dir"
|
||||||
cd "$dir"
|
cd "$dir"
|
||||||
if yesno $wipe_tmp; then
|
if yesno $wipe_tmp; then
|
||||||
ebegin "Wiping $dir directory"
|
ebegin "Wiping $dir directory"
|
||||||
@@ -76,9 +76,10 @@ start()
|
|||||||
# Remove any added console dirs
|
# Remove any added console dirs
|
||||||
rm -rf "$RC_LIBEXECDIR"/console
|
rm -rf "$RC_LIBEXECDIR"/console
|
||||||
|
|
||||||
local logw=false runw=false
|
local logw=false runw=false extra=
|
||||||
# Ensure that our basic dirs exist
|
# Ensure that our basic dirs exist
|
||||||
for x in /var/log /var/run /tmp; do
|
[ "$RC_UNAME" = Linux ] && extra=/var/lib/misc # Satisfy Linux FHS
|
||||||
|
for x in /var/log /var/run /tmp $extra; do
|
||||||
if ! [ -d $x ]; then
|
if ! [ -d $x ]; then
|
||||||
if ! mkdir -p $x; then
|
if ! mkdir -p $x; then
|
||||||
eend 1 "failed to create needed directory $x"
|
eend 1 "failed to create needed directory $x"
|
||||||
@@ -94,7 +95,7 @@ start()
|
|||||||
for x in "" $xtra; do
|
for x in "" $xtra; do
|
||||||
mkutmp /var/run/utmp$x
|
mkutmp /var/run/utmp$x
|
||||||
done
|
done
|
||||||
[ -e /var/log/wtmp ] && mkutmp /var/log/wtmp
|
[ -e /var/log/wtmp ] || mkutmp /var/log/wtmp
|
||||||
eend 0
|
eend 0
|
||||||
|
|
||||||
ebegin "Cleaning /var/run"
|
ebegin "Cleaning /var/run"
|
||||||
@@ -105,7 +106,7 @@ start()
|
|||||||
# Clean stale sockets
|
# Clean stale sockets
|
||||||
if [ -S "$x" ]; then
|
if [ -S "$x" ]; then
|
||||||
if type fuser >/dev/null 2>&1; then
|
if type fuser >/dev/null 2>&1; then
|
||||||
fuser "$x" 2>/dev/null || rm -- "$x"
|
fuser "$x" >/dev/null 2>&1 || rm -- "$x"
|
||||||
else
|
else
|
||||||
rm -- "$x"
|
rm -- "$x"
|
||||||
fi
|
fi
|
||||||
@@ -149,7 +150,7 @@ start()
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f /etc/nologin
|
[ -w /etc/nologin ] && rm -f /etc/nologin
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
need localmount termencoding
|
need localmount termencoding
|
||||||
after hotplug bootmisc
|
after hotplug bootmisc
|
||||||
keyword noopenvz noprefix nouml novserver noxenu
|
keyword -openvz -prefix -uml -vserver -xenu
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
@@ -45,8 +45,10 @@ start()
|
|||||||
[ -d /dev/vc ] && ttydev=/dev/vc/
|
[ -d /dev/vc ] && ttydev=/dev/vc/
|
||||||
x=1
|
x=1
|
||||||
while [ $x -le $ttyn ]; do
|
while [ $x -le $ttyn ]; do
|
||||||
setfont $consolefont $param -C $ttydev$x >/dev/null
|
if ! setfont $consolefont $param -C $ttydev$x >/dev/null; then
|
||||||
retval=$(($retval + $?))
|
retval=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
x=$(($x + 1))
|
x=$(($x + 1))
|
||||||
done
|
done
|
||||||
eend $retval
|
eend $retval
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ depend() {
|
|||||||
need localmount
|
need localmount
|
||||||
after bootmisc
|
after bootmisc
|
||||||
before net.lo0
|
before net.lo0
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start_pre() {
|
start_pre() {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description="Mount system critical filesystems in /dev."
|
|||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
use dev
|
use dev
|
||||||
keyword noprefix novserver
|
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 novserver
|
keyword -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description="Configures a specific kernel dump device."
|
|||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
need swap
|
need swap
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ _IFS="
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
use dev clock modules
|
use dev clock modules
|
||||||
keyword nojail noopenvz noprefix notimeout novserver
|
keyword -jail -openvz -prefix -timeout -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
_abort() {
|
_abort() {
|
||||||
@@ -32,8 +32,8 @@ _forcefsck()
|
|||||||
|
|
||||||
_on_ac_power()
|
_on_ac_power()
|
||||||
{
|
{
|
||||||
if [ -f /proc/acpi/ac_adapter/AC/state ]; then
|
if [ -f /proc/acpi/ac_adapter/AC*/state ]; then
|
||||||
cat /proc/acpi/ac_adapter/AC/state | while read line; do
|
cat /proc/acpi/ac_adapter/AC*/state | while read line; do
|
||||||
case "$line" in
|
case "$line" in
|
||||||
"state:"*"off-line") return 128;;
|
"state:"*"off-line") return 128;;
|
||||||
esac
|
esac
|
||||||
@@ -51,6 +51,11 @@ _on_ac_power()
|
|||||||
"connected:"*"OFF") return 128;;
|
"connected:"*"OFF") return 128;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
elif sysctl -q hw.acpi.acline >/dev/null 2>/dev/null; then
|
||||||
|
case $(sysctl -n hw.acpi.acline) in
|
||||||
|
0) return 1;;
|
||||||
|
*) return 0;;
|
||||||
|
esac
|
||||||
else
|
else
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
@@ -68,7 +73,7 @@ start()
|
|||||||
if _forcefsck; then
|
if _forcefsck; then
|
||||||
fsck_opts="$fsck_opts -f"
|
fsck_opts="$fsck_opts -f"
|
||||||
check_extra="(check forced)"
|
check_extra="(check forced)"
|
||||||
elif ! _on_ac_power; then
|
elif ! yesno ${fsck_on_battery:-YES} && ! _on_ac_power; then
|
||||||
ewarn "Skipping fsck due to not being on AC power"
|
ewarn "Skipping fsck due to not being on AC power"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ depend()
|
|||||||
{
|
{
|
||||||
use root
|
use root
|
||||||
before devd net
|
before devd net
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
_set()
|
_set()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
description="Sets the hostname of the machine."
|
description="Sets the hostname of the machine."
|
||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ depend()
|
|||||||
else
|
else
|
||||||
before *
|
before *
|
||||||
fi
|
fi
|
||||||
keyword noopenvz noprefix nouml novserver noxenu
|
keyword -openvz -prefix -uml -vserver -xenu -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
setupopts()
|
setupopts()
|
||||||
@@ -118,7 +118,7 @@ stop()
|
|||||||
|
|
||||||
if ! yesno $clock_adjfile; then
|
if ! yesno $clock_adjfile; then
|
||||||
# Some implementations don't handle adjustments
|
# Some implementations don't handle adjustments
|
||||||
if LC_ALL=C hwclock --help | grep -q "\-\-noadjfile"; then
|
if LC_ALL=C hwclock --help 2>&1 | grep -q "\-\-noadjfile"; then
|
||||||
utc_cmd="$utc_cmd --noadjfile"
|
utc_cmd="$utc_cmd --noadjfile"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ opts="panic showstatus"
|
|||||||
depend() {
|
depend() {
|
||||||
before net
|
before net
|
||||||
provide firewall
|
provide firewall
|
||||||
keyword nojail
|
keyword -jail
|
||||||
}
|
}
|
||||||
|
|
||||||
ipfw() {
|
ipfw() {
|
||||||
|
|||||||
@@ -8,14 +8,14 @@ depend()
|
|||||||
{
|
{
|
||||||
need localmount termencoding
|
need localmount termencoding
|
||||||
after bootmisc
|
after bootmisc
|
||||||
keyword noopenvz noprefix nouml novserver noxenu
|
keyword -openvz -prefix -uml -vserver -xenu
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
|
ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
|
||||||
: ${unicode:=$UNICODE}
|
: ${unicode:=$UNICODE}
|
||||||
: =${keymap:=$KEYMAP}
|
: ${keymap:=$KEYMAP}
|
||||||
: ${extended_keymaps:=$EXTENDED_KEYMAPS}
|
: ${extended_keymaps:=$EXTENDED_KEYMAPS}
|
||||||
: ${windowkeys:=$SET_WINDOWSKEYS}
|
: ${windowkeys:=$SET_WINDOWSKEYS}
|
||||||
: ${fix_euro:=$FIX_EURO}
|
: ${fix_euro:=$FIX_EURO}
|
||||||
@@ -34,15 +34,25 @@ start()
|
|||||||
echo 1 > /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes
|
echo 1 > /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes
|
||||||
fi
|
fi
|
||||||
|
|
||||||
ebegin "Loading key mappings [$keymap]"
|
local wkeys= kmode="-a" msg="ASCII"
|
||||||
local loadkeys_uni= wkeys= kmode="-a" msg="ASCII"
|
|
||||||
if yesno $unicode; then
|
if yesno $unicode; then
|
||||||
loadkeys_uni="--unicode"
|
|
||||||
kmode="-u"
|
kmode="-u"
|
||||||
msg="UTF-8"
|
msg="UTF-8"
|
||||||
fi
|
fi
|
||||||
yesno $windowkeys && wkeys="windowkeys"
|
yesno $windowkeys && wkeys="windowkeys"
|
||||||
loadkeys -q $loadkeys_uni $wkeys $keymap $extended_keymaps
|
|
||||||
|
# Set terminal encoding to either ASCII or UNICODE.
|
||||||
|
# See utf-8(7) for more information.
|
||||||
|
ebegin "Setting keyboard mode [$msg]"
|
||||||
|
n=1
|
||||||
|
while [ $n -le $ttyn ]; do
|
||||||
|
kbd_mode $kmode -C $ttydev$n
|
||||||
|
n=$(($n + 1))
|
||||||
|
done
|
||||||
|
eend 0
|
||||||
|
|
||||||
|
ebegin "Loading key mappings [$keymap]"
|
||||||
|
loadkeys -q $wkeys $keymap $extended_keymaps
|
||||||
eend $? "Error loading key mappings" || return $?
|
eend $? "Error loading key mappings" || return $?
|
||||||
|
|
||||||
if yesno $fix_euro; then
|
if yesno $fix_euro; then
|
||||||
@@ -52,20 +62,6 @@ start()
|
|||||||
eend $?
|
eend $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set terminal encoding to either ASCII or UNICODE.
|
|
||||||
# See utf-8(7) for more information.
|
|
||||||
ebegin "Setting keyboard mode [$msg]"
|
|
||||||
if yesno $unicode; then
|
|
||||||
dumpkeys ${dumpkeys_charset:+-c} \
|
|
||||||
$dumpkeys_charset | loadkeys --unicode
|
|
||||||
fi
|
|
||||||
n=1
|
|
||||||
while [ $n -le $ttyn ]; do
|
|
||||||
kbd_mode $kmode -C $ttydev$n
|
|
||||||
n=$(($n + 1))
|
|
||||||
done
|
|
||||||
eend 0
|
|
||||||
|
|
||||||
# Save the keymapping for use immediately at boot
|
# Save the keymapping for use immediately at boot
|
||||||
if [ -w "$RC_LIBEXECDIR" ]; then
|
if [ -w "$RC_LIBEXECDIR" ]; then
|
||||||
mkdir -p "$RC_LIBEXECDIR"/console
|
mkdir -p "$RC_LIBEXECDIR"/console
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description="Kill all processes so we can unmount disks cleanly."
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Executes user commands in /etc/conf.d/local"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
after *
|
after *
|
||||||
keyword notimeout
|
keyword -timeout
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
need fsck
|
need fsck
|
||||||
use lvm modules mtab
|
use lvm modules mtab
|
||||||
keyword nojail noopenvz noprefix novserver
|
keyword -jail -openvz -prefix -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ extra_commands="restore"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
restore()
|
restore()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Loads a user defined list of kernel modules."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
use isapnp
|
use isapnp
|
||||||
keyword noopenvz noprefix novserver
|
keyword -openvz -prefix -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Re-mount filesytems read-only for a clean reboot."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need killprocs savecache
|
need killprocs savecache
|
||||||
keyword noprefix noopenvz novserver
|
keyword -prefix -openvz -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ depend()
|
|||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
after bootmisc
|
after bootmisc
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,11 +7,17 @@ description="Update /etc/mtab to match what the kernel knows about"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need root
|
need root
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
|
# /etc/mtab could be a symlink to /proc/mounts
|
||||||
|
if [ ! -w /etc/mtab -a -L /etc/mtab ]; then
|
||||||
|
eeinfo "Skipping mtab update (non writeable symlink)"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
ebegin "Updating /etc/mtab"
|
ebegin "Updating /etc/mtab"
|
||||||
if ! echo 2>/dev/null >/etc/mtab; then
|
if ! echo 2>/dev/null >/etc/mtab; then
|
||||||
ewend 1 "/etc/mtab is not updateable"
|
ewend 1 "/etc/mtab is not updateable"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!@PREFIX@/sbin/runscript
|
#!@PREFIX@/sbin/runscript
|
||||||
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
|
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
||||||
# All rights reserved. Released under the 2-clause BSD license.
|
# All rights reserved. Released under the 2-clause BSD license.
|
||||||
|
|
||||||
MODULESDIR="${RC_LIBEXECDIR}/net"
|
MODULESDIR="${RC_LIBEXECDIR}/net"
|
||||||
@@ -21,7 +21,7 @@ depend()
|
|||||||
need localmount
|
need localmount
|
||||||
after bootmisc
|
after bootmisc
|
||||||
provide net
|
provide net
|
||||||
keyword nojail noprefix novserver
|
keyword -jail -prefix -vserver
|
||||||
|
|
||||||
case "${IFACE}" in
|
case "${IFACE}" in
|
||||||
lo|lo0);;
|
lo|lo0);;
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ depend()
|
|||||||
need net $pmap
|
need net $pmap
|
||||||
use afc-client amd autofs openvpn
|
use afc-client amd autofs openvpn
|
||||||
use dns nfs nfsmount portmap rpcbind rpc.statd rpc.lockd
|
use dns nfs nfsmount portmap rpcbind rpc.statd rpc.lockd
|
||||||
keyword nojail noprefix novserver
|
keyword -jail -prefix -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ depend()
|
|||||||
need localmount
|
need localmount
|
||||||
after bootmisc
|
after bootmisc
|
||||||
provide net
|
provide net
|
||||||
keyword nojail noprefix novserver
|
keyword -jail -prefix -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
uniqify()
|
uniqify()
|
||||||
@@ -103,13 +103,27 @@ dumpargs()
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
intup=false
|
||||||
runip()
|
runip()
|
||||||
{
|
{
|
||||||
local int="$1" err=
|
local int="$1" err=
|
||||||
|
|
||||||
shift
|
shift
|
||||||
|
|
||||||
|
# Ensure we have a valid broadcast address
|
||||||
|
case "$@" in
|
||||||
|
*" broadcast "*|*" brd "*) ;;
|
||||||
|
*) set -- "$@" brd +;;
|
||||||
|
esac
|
||||||
|
|
||||||
err=$(LC_ALL=C ip address add "$@" dev "$int" 2>&1)
|
err=$(LC_ALL=C ip address add "$@" dev "$int" 2>&1)
|
||||||
[ -z "$err" ] && return 0
|
if [ -z "$err" ]; then
|
||||||
|
# ip does not bring up the interface when adding addresses
|
||||||
|
if ! $intup; then
|
||||||
|
ip link set "$int" up
|
||||||
|
intup=true
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
if [ "$err" = "RTNETLINK answers: File exists" ]; then
|
if [ "$err" = "RTNETLINK answers: File exists" ]; then
|
||||||
ip address del "$@" dev "$int" 2>/dev/null
|
ip address del "$@" dev "$int" 2>/dev/null
|
||||||
fi
|
fi
|
||||||
@@ -165,6 +179,16 @@ runargs()
|
|||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
local cr=0 r= int= intv= cmd= args= upcmd=
|
local cr=0 r= int= intv= cmd= args= upcmd=
|
||||||
|
|
||||||
|
if [ -z "$domainname" -a -s /etc/defaultdomain ]; then
|
||||||
|
domainname=$(cat /etc/defaultdomain)
|
||||||
|
fi
|
||||||
|
if [ -n "$domainname" ]; then
|
||||||
|
ebegin "Setting NIS domainname: $domainname"
|
||||||
|
domainname "$domainname"
|
||||||
|
eend $?
|
||||||
|
fi
|
||||||
|
|
||||||
einfo "Starting network"
|
einfo "Starting network"
|
||||||
routeflush
|
routeflush
|
||||||
if [ "$RC_UNAME" = "Linux" ]; then
|
if [ "$RC_UNAME" = "Linux" ]; then
|
||||||
@@ -194,7 +218,7 @@ start()
|
|||||||
-f /etc/ifup."$int" -o -f "$cf" ] || continue
|
-f /etc/ifup."$int" -o -f "$cf" ] || continue
|
||||||
veinfo "$int"
|
veinfo "$int"
|
||||||
case "$func" in
|
case "$func" in
|
||||||
ip) func=runip;;
|
ip) func=runip; intup=false;;
|
||||||
esac
|
esac
|
||||||
eindent
|
eindent
|
||||||
runargs /etc/ifup."$int" "$upcmd"
|
runargs /etc/ifup."$int" "$upcmd"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ required_files="/etc/newsyslog.conf"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword noopenvz noprefix novserver
|
keyword -openvz -prefix -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
_setleds()
|
_setleds()
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ extra_started_commands="reload"
|
|||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
need localmount
|
need localmount
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ depend()
|
|||||||
need localmount
|
need localmount
|
||||||
use logger
|
use logger
|
||||||
after bootmisc
|
after bootmisc
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start_pre()
|
start_pre()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
use modules devfs
|
use modules devfs
|
||||||
need localmount
|
need localmount
|
||||||
keyword noopenvz noprefix novserver
|
keyword -openvz -prefix -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ depend()
|
|||||||
need localmount net
|
need localmount net
|
||||||
after *
|
after *
|
||||||
before local
|
before local
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Mount the root fs read/write"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need fsck
|
need fsck
|
||||||
keyword nojail noopenvz noprefix novserver
|
keyword -jail -openvz -prefix -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ start()
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
local save=
|
local save=
|
||||||
for x in deptree depconfig softlevel nettree rc.log; do
|
for x in deptree depconfig shutdowntime softlevel nettree rc.log; do
|
||||||
[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
|
[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
|
||||||
done
|
done
|
||||||
if [ -n "$save" ]; then
|
if [ -n "$save" ]; then
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Saves a kernel dump."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
73
init.d/staticroute.in
Normal file
73
init.d/staticroute.in
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
#!@PREFIX@/sbin/runscript
|
||||||
|
# Copyright (c) 2009 Roy Marples <roy@marples.name>
|
||||||
|
# All rights reserved. Released under the 2-clause BSD license.
|
||||||
|
|
||||||
|
# This script was inspired by the equivalent rc.d staticroute from NetBSD.
|
||||||
|
|
||||||
|
description="Configures static routes."
|
||||||
|
__nl="
|
||||||
|
"
|
||||||
|
|
||||||
|
depend()
|
||||||
|
{
|
||||||
|
provide net
|
||||||
|
use network
|
||||||
|
keyword -jail -prefix -vserver
|
||||||
|
}
|
||||||
|
|
||||||
|
dump_args()
|
||||||
|
{
|
||||||
|
if [ -s /etc/route.conf ]; then
|
||||||
|
cat /etc/route.conf
|
||||||
|
else
|
||||||
|
case "$staticroute" in
|
||||||
|
*"$__nl"*)
|
||||||
|
echo "$staticroute"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
(
|
||||||
|
set -o noglob
|
||||||
|
IFS=';'; set -- $staticroute
|
||||||
|
IFS="$__nl"; echo "$*"
|
||||||
|
)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
do_routes()
|
||||||
|
{
|
||||||
|
local xtra=
|
||||||
|
[ "$RC_UNAME" != Linux ] && xtra=-q
|
||||||
|
|
||||||
|
ebegin "$1 static routes"
|
||||||
|
dump_args | while read args; do
|
||||||
|
[ -z "$args" ] && continue
|
||||||
|
case "$args" in
|
||||||
|
"#"*)
|
||||||
|
;;
|
||||||
|
"+"*)
|
||||||
|
[ $2 = "add" ] && eval ${args#*+}
|
||||||
|
;;
|
||||||
|
"-"*)
|
||||||
|
[ $2 = "del" -o $2 = "delete" ] && eval ${args#*-}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
route $xtra $2 -$args
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
eend 0
|
||||||
|
}
|
||||||
|
|
||||||
|
start()
|
||||||
|
{
|
||||||
|
do_routes "Adding" "add"
|
||||||
|
}
|
||||||
|
|
||||||
|
stop()
|
||||||
|
{
|
||||||
|
local cmd="delete"
|
||||||
|
[ "$RC_UNAME" = Linux ] && cmd="del"
|
||||||
|
do_routes "Deleting" "$cmd"
|
||||||
|
}
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
before fsck
|
before fsck
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword nojail noopenvz noprefix novserver
|
keyword -jail -openvz -prefix -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
28
init.d/swclock.in
Normal file
28
init.d/swclock.in
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#!@PREFIX@/sbin/runscript
|
||||||
|
# Copyright (c) 2009 Roy Marples <roy@marples.name>
|
||||||
|
# All rights reserved. Released under the 2-clause BSD license.
|
||||||
|
|
||||||
|
description="Sets the local clock to the mtime of a given file."
|
||||||
|
|
||||||
|
depend()
|
||||||
|
{
|
||||||
|
before *
|
||||||
|
provide clock
|
||||||
|
keyword -openvz -prefix -uml -vserver -xenu -lxc
|
||||||
|
}
|
||||||
|
|
||||||
|
# swclock is an OpenRC built in
|
||||||
|
|
||||||
|
start()
|
||||||
|
{
|
||||||
|
ebegin "Setting the local clock based on last shutdown time"
|
||||||
|
swclock --warn
|
||||||
|
eend $?
|
||||||
|
}
|
||||||
|
|
||||||
|
stop()
|
||||||
|
{
|
||||||
|
ebegin "Saving the shutdown time"
|
||||||
|
swclock --save
|
||||||
|
eend $?
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
need localmount
|
need localmount
|
||||||
keyword nojail noprefix
|
keyword -jail -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start() {
|
start() {
|
||||||
|
|||||||
@@ -6,19 +6,27 @@ depend()
|
|||||||
{
|
{
|
||||||
use hostname
|
use hostname
|
||||||
before bootmisc logger
|
before bootmisc logger
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
[ -e /etc/sysctl.conf ] || return 0
|
[ -e /etc/sysctl.conf ] || return 0
|
||||||
local retval=0 var= comments=
|
local retval=0 var= comments= conf=
|
||||||
ebegin "Configuring kernel parameters"
|
ebegin "Configuring kernel parameters"
|
||||||
while read var comments; do
|
eindent
|
||||||
case "$var" in
|
for conf in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
|
||||||
""|"#"*) continue;;
|
if [ -r "$conf" ]; then
|
||||||
esac
|
vebegin "applying $conf"
|
||||||
sysctl -w "$var" >/dev/null || retval=1
|
while read var comments; do
|
||||||
done < /etc/sysctl.conf
|
case "$var" in
|
||||||
|
""|"#"*) continue;;
|
||||||
|
esac
|
||||||
|
sysctl -w "$var" >/dev/null || retval=1
|
||||||
|
done < "$conf"
|
||||||
|
veend $retval
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
eoutdent
|
||||||
eend $retval "Some errors were encountered"
|
eend $retval "Some errors were encountered"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,21 @@ depend()
|
|||||||
{
|
{
|
||||||
use hostname
|
use hostname
|
||||||
before bootmisc logger
|
before bootmisc logger
|
||||||
keyword noopenvz noprefix novserver
|
keyword -openvz -prefix -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
[ -e /etc/sysctl.conf ] || return 0
|
local conf= retval=0
|
||||||
ebegin "Configuring kernel parameters"
|
ebegin "Configuring kernel parameters"
|
||||||
sysctl -p >/dev/null
|
eindent
|
||||||
eend $? "Some errors were encountered"
|
for conf in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
|
||||||
|
if [ -r "$conf" ]; then
|
||||||
|
vebegin "applying $conf"
|
||||||
|
sysctl -p "$conf" >/dev/null
|
||||||
|
veend $? || retval=1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
eoutdent
|
||||||
|
eend $retval "Some errors were encountered"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description="Mount the sys filesystem."
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
keyword noprefix novserver
|
keyword -prefix -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
mount_sys()
|
mount_sys()
|
||||||
|
|||||||
@@ -16,5 +16,5 @@ depend()
|
|||||||
use net newsyslog
|
use net newsyslog
|
||||||
need localmount
|
need localmount
|
||||||
after bootmisc
|
after bootmisc
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
keyword noopenvz noprefix nouml novserver noxenu
|
keyword -openvz -prefix -uml -vserver -xenu
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
after fsck
|
after fsck
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ description="Initializes the random number generator."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword nojail noprefix
|
keyword -jail -openvz -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
save_seed()
|
save_seed()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword noprefix
|
keyword -prefix
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd April 30, 2009
|
.Dd November 4, 2009
|
||||||
.Dt RUNSCRIPT 8 SMM
|
.Dt RUNSCRIPT 8 SMM
|
||||||
.Os OpenRC
|
.Os OpenRC
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@@ -138,30 +138,32 @@ We should recalculate our dependencies if the listed files have changed.
|
|||||||
.It Ic keyword
|
.It Ic keyword
|
||||||
Tags a service with a keyword. Here's 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 nojail
|
.It Dv -jail
|
||||||
When in a jail, exclude this service from any dependencies. The service can
|
When in a jail, exclude this service from any dependencies. The service can
|
||||||
still be run directly.
|
still be run directly.
|
||||||
.It Dv noopenvz
|
.It Dv -openvz
|
||||||
Same as nojail, but for OpenVZ systems.
|
Same as -jail, but for OpenVZ systems.
|
||||||
.It Dv noshutdown
|
.It Dv -lxc
|
||||||
|
Same as -jail, but for Linux Resource Containers (LXC).
|
||||||
|
.It Dv -shutdown
|
||||||
Don't stop this service when shutting the system down.
|
Don't stop this service when shutting the system down.
|
||||||
This normally quite safe as remaining daemons will be sent a SIGTERM just
|
This normally quite safe as remaining daemons will be sent a SIGTERM just
|
||||||
before final shutdown.
|
before final shutdown.
|
||||||
Network related services such as the network and dhcpcd init scripts normally
|
Network related services such as the network and dhcpcd init scripts normally
|
||||||
have this keyword.
|
have this keyword.
|
||||||
.It Dv nostop
|
.It Dv -stop
|
||||||
Don't stop this service when changing runlevels, even if not present.
|
Don't stop this service when changing runlevels, even if not present.
|
||||||
This includes shutting the system down.
|
This includes shutting the system down.
|
||||||
.It Dv notimeout
|
.It Dv -timeout
|
||||||
Do not time out waiting for that service.
|
Do not time out waiting for that service.
|
||||||
.It Dv nouml
|
.It Dv -uml
|
||||||
Same as nojail, but for UML systems.
|
Same as -jail, but for UML systems.
|
||||||
.It Dv novserver
|
.It Dv -vserver
|
||||||
Same as nojail, but for VServer systems.
|
Same as -jail, but for VServer systems.
|
||||||
.It Dv noxen0
|
.It Dv -xen0
|
||||||
Same as nojail, but for Xen DOM0 systems.
|
Same as -jail, but for Xen DOM0 systems.
|
||||||
.It Dv noxenu
|
.It Dv -xenu
|
||||||
Same as nojail, but for Xen DOMU systems.
|
Same as -jail, but for Xen DOMU systems.
|
||||||
.El
|
.El
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd April 22, 2009
|
.Dd October 14, 2009
|
||||||
.Dt START-STOP-DAEMON 8 SMM
|
.Dt START-STOP-DAEMON 8 SMM
|
||||||
.Os OpenRC
|
.Os OpenRC
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@@ -98,6 +98,8 @@ Print the action(s) that would be taken, but don't actually do anything.
|
|||||||
The return value is set as if the command was taken and worked.
|
The return value is set as if the command was taken and worked.
|
||||||
.It Fl v , -verbose
|
.It Fl v , -verbose
|
||||||
Print the action(s) that are taken just before doing them.
|
Print the action(s) that are taken just before doing them.
|
||||||
|
.It Fl P , -progress
|
||||||
|
Echo a . to the console for each second elapsed whilst waiting.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
These options are only used for starting daemons:
|
These options are only used for starting daemons:
|
||||||
@@ -142,9 +144,9 @@ Redirect the standard output of the process to logfile when started with
|
|||||||
Must be an absolute pathname, but relative to the path optionally given with
|
Must be an absolute pathname, but relative to the path optionally given with
|
||||||
.Fl r , -chroot .
|
.Fl r , -chroot .
|
||||||
The logfile can also be a named pipe.
|
The logfile can also be a named pipe.
|
||||||
.It Fl w , -wait Ar seconds
|
.It Fl w , -wait Ar milliseconds
|
||||||
Wait
|
Wait
|
||||||
.Ar seconds
|
.Ar milliseconds
|
||||||
after starting and check that daemon is still running.
|
after starting and check that daemon is still running.
|
||||||
Useful for daemons that check configuration after forking or stopping race
|
Useful for daemons that check configuration after forking or stopping race
|
||||||
conditions where the pidfile is written out after forking.
|
conditions where the pidfile is written out after forking.
|
||||||
|
|||||||
@@ -56,8 +56,11 @@ dhcpcd_start()
|
|||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
# Add our route metric
|
# Add our route metric if not given
|
||||||
[ "${metric:-0}" != "0" ] && args="${args} -m ${metric}"
|
case " $args " in
|
||||||
|
*" -m "*) ;;
|
||||||
|
*) [ "${metric:-0}" != 0 ] && args="$args -m $metric";;
|
||||||
|
esac
|
||||||
|
|
||||||
# Bring up DHCP for this interface
|
# Bring up DHCP for this interface
|
||||||
ebegin "Running dhcpcd"
|
ebegin "Running dhcpcd"
|
||||||
|
|||||||
@@ -261,6 +261,17 @@ _tunnel()
|
|||||||
|
|
||||||
ifconfig_pre_start()
|
ifconfig_pre_start()
|
||||||
{
|
{
|
||||||
|
local tunnel=
|
||||||
|
eval tunnel=\$iptunnel_${IFVAR}
|
||||||
|
if [ -n "${tunnel}" ]; then
|
||||||
|
# Set our base metric to 1000
|
||||||
|
metric=1000
|
||||||
|
ebegin "Creating tunnel ${IFVAR}"
|
||||||
|
iptunnel add ${tunnel}
|
||||||
|
eend $? || return 1
|
||||||
|
_up
|
||||||
|
fi
|
||||||
|
|
||||||
# MTU support
|
# MTU support
|
||||||
local mtu=
|
local mtu=
|
||||||
eval mtu=\$mtu_${IFVAR}
|
eval mtu=\$mtu_${IFVAR}
|
||||||
@@ -271,17 +282,7 @@ ifconfig_pre_start()
|
|||||||
eval len=\$txqueuelen_${IFVAR}
|
eval len=\$txqueuelen_${IFVAR}
|
||||||
[ -n "${len}" ] && ifconfig "${IFACE}" txqueuelen "${len}"
|
[ -n "${len}" ] && ifconfig "${IFACE}" txqueuelen "${len}"
|
||||||
|
|
||||||
local tunnel=
|
return 0
|
||||||
|
|
||||||
eval tunnel=\$iptunnel_${IFVAR}
|
|
||||||
[ -z "${tunnel}" ] && return 0
|
|
||||||
|
|
||||||
# Set our base metric to 1000
|
|
||||||
metric=1000
|
|
||||||
|
|
||||||
ebegin "Creating tunnel ${IFVAR}"
|
|
||||||
iptunnel add ${tunnel}
|
|
||||||
eend $?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ifconfig_post_stop()
|
ifconfig_post_stop()
|
||||||
|
|||||||
@@ -157,7 +157,10 @@ _add_route()
|
|||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
if ! ${have_metric} && [ -n "${metric}" ]; then
|
# We cannot use a metric if we're using a nexthop
|
||||||
|
if ! ${have_metric} && \
|
||||||
|
[ -n "${metric}" -a -z "${cmd##* nexthop }" ]
|
||||||
|
then
|
||||||
cmd="${cmd} metric ${metric}"
|
cmd="${cmd} metric ${metric}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -187,16 +190,6 @@ _tunnel()
|
|||||||
|
|
||||||
iproute2_pre_start()
|
iproute2_pre_start()
|
||||||
{
|
{
|
||||||
# MTU support
|
|
||||||
local mtu=
|
|
||||||
eval mtu=\$mtu_${IFVAR}
|
|
||||||
[ -n "${mtu}" ] && ip link set "${IFACE}" mtu "${mtu}"
|
|
||||||
|
|
||||||
# TX Queue Length support
|
|
||||||
local len=
|
|
||||||
eval len=\$txqueuelen_${IFVAR}
|
|
||||||
[ -n "${len}" ] && ip link set "${IFACE}" txqueuelen "${len}"
|
|
||||||
|
|
||||||
local tunnel=
|
local tunnel=
|
||||||
eval tunnel=\$iptunnel_${IFVAR}
|
eval tunnel=\$iptunnel_${IFVAR}
|
||||||
if [ -n "${tunnel}" ]; then
|
if [ -n "${tunnel}" ]; then
|
||||||
@@ -209,6 +202,16 @@ iproute2_pre_start()
|
|||||||
_up
|
_up
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# MTU support
|
||||||
|
local mtu=
|
||||||
|
eval mtu=\$mtu_${IFVAR}
|
||||||
|
[ -n "${mtu}" ] && ip link set "${IFACE}" mtu "${mtu}"
|
||||||
|
|
||||||
|
# TX Queue Length support
|
||||||
|
local len=
|
||||||
|
eval len=\$txqueuelen_${IFVAR}
|
||||||
|
[ -n "${len}" ] && ip link set "${IFACE}" txqueuelen "${len}"
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,6 +225,8 @@ _iproute2_ipv6_tentative()
|
|||||||
|
|
||||||
iproute2_post_start()
|
iproute2_post_start()
|
||||||
{
|
{
|
||||||
|
local n=5
|
||||||
|
|
||||||
# Kernel may not have IP built in
|
# Kernel may not have IP built in
|
||||||
if [ -e /proc/net/route ]; then
|
if [ -e /proc/net/route ]; then
|
||||||
ip route flush table cache dev "${IFACE}"
|
ip route flush table cache dev "${IFACE}"
|
||||||
@@ -229,11 +234,16 @@ iproute2_post_start()
|
|||||||
|
|
||||||
if _iproute2_ipv6_tentative; then
|
if _iproute2_ipv6_tentative; then
|
||||||
ebegin "Waiting for IPv6 addresses"
|
ebegin "Waiting for IPv6 addresses"
|
||||||
while true; do
|
while [ $n -ge 0 ]; do
|
||||||
_iproute2_ipv6_tentative || break
|
_iproute2_ipv6_tentative || break
|
||||||
|
sleep 1
|
||||||
|
n=$(($n - 1))
|
||||||
done
|
done
|
||||||
eend 0
|
[ $n -ge 0 ]
|
||||||
|
eend $?
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
iproute2_post_stop()
|
iproute2_post_stop()
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ pppd_pre_start()
|
|||||||
eval passwordset=\$\{password_${IFVAR}-x\}
|
eval passwordset=\$\{password_${IFVAR}-x\}
|
||||||
if [ -n "${username}" ] \
|
if [ -n "${username}" ] \
|
||||||
&& [ -n "${password}" -o -z "${passwordset}" ]; then
|
&& [ -n "${password}" -o -z "${passwordset}" ]; then
|
||||||
opts="${opts} plugin passwordfd.so passwordfd 0"
|
opts="plugin passwordfd.so ${opts} passwordfd 0"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! ${hasdefaultmetric}; then
|
if ! ${hasdefaultmetric}; then
|
||||||
@@ -155,7 +155,7 @@ pppd_pre_start()
|
|||||||
opts="${opts} connect true"
|
opts="${opts} connect true"
|
||||||
set -- "$@" "${link}"
|
set -- "$@" "${link}"
|
||||||
fi
|
fi
|
||||||
opts="${opts} plugin $1.so"
|
opts="plugin $1.so ${opts}"
|
||||||
shift
|
shift
|
||||||
opts="${opts} $@"
|
opts="${opts} $@"
|
||||||
done
|
done
|
||||||
|
|||||||
2
pkgconfig/.gitignore
vendored
Normal file
2
pkgconfig/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
einfo.pc
|
||||||
|
openrc.pc
|
||||||
11
pkgconfig/Makefile
Normal file
11
pkgconfig/Makefile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
DIR= ${LIBDIR}/pkgconfig
|
||||||
|
SRCS= einfo.pc.in openrc.pc.in
|
||||||
|
INC= einfo.pc openrc.pc
|
||||||
|
|
||||||
|
sed -n -e 's/^VERSION=[[:space:]]*\([^[:space:]]*\).*/#define VERSION "\1${GITVER}\"/p' ../../Makefile > version.h
|
||||||
|
|
||||||
|
SED_EXTRA= -e 's:@VERSION@:${VERSION}:g'
|
||||||
|
|
||||||
|
MK= ../mk
|
||||||
|
include ../Makefile.inc
|
||||||
|
include ${MK}/scripts.mk
|
||||||
9
pkgconfig/einfo.pc.in
Normal file
9
pkgconfig/einfo.pc.in
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
prefix=@PREFIX@
|
||||||
|
exec_prefix=${prefix}
|
||||||
|
libdir=${prefix}/@LIB@
|
||||||
|
includedir=/usr/include
|
||||||
|
|
||||||
|
Name: einfo
|
||||||
|
Description: Pretty console informational display
|
||||||
|
Version: @VERSION@
|
||||||
|
Libs: -L${libdir} -leinfo
|
||||||
10
pkgconfig/openrc.pc.in
Normal file
10
pkgconfig/openrc.pc.in
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
prefix=@PREFIX@
|
||||||
|
exec_prefix=${prefix}
|
||||||
|
libdir=${prefix}/@LIB@
|
||||||
|
includedir=/usr/include
|
||||||
|
|
||||||
|
Name: OpenRC
|
||||||
|
Description: Universal init system
|
||||||
|
Version: @VERSION@
|
||||||
|
Cflags: -I${includedir}
|
||||||
|
Libs: -L${libdir} -lrc
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
BOOT= bootmisc fsck hostname localmount network \
|
BOOT= bootmisc fsck hostname localmount network \
|
||||||
root swap sysctl urandom
|
root staticroute swap sysctl urandom
|
||||||
DEFAULT= local netmount
|
DEFAULT= local netmount
|
||||||
SHUTDOWN= savecache
|
SHUTDOWN= savecache
|
||||||
|
|
||||||
|
|||||||
@@ -8,14 +8,19 @@
|
|||||||
# tmpfs and ramfs are easy, so force one or the other.
|
# tmpfs and ramfs are easy, so force one or the other.
|
||||||
mount_svcdir()
|
mount_svcdir()
|
||||||
{
|
{
|
||||||
|
# mount from fstab if we can
|
||||||
|
fstabinfo --mount "$RC_SVCDIR" && return 0
|
||||||
|
|
||||||
local fs= fsopts="-o rw,noexec,nodev,nosuid"
|
local fs= fsopts="-o rw,noexec,nodev,nosuid"
|
||||||
local devdir="rc-svcdir" x=
|
|
||||||
local svcsize=${rc_svcsize:-1024}
|
local svcsize=${rc_svcsize:-1024}
|
||||||
|
|
||||||
|
# Some buggy kernels report tmpfs even when not present :(
|
||||||
if grep -Eq "[[:space:]]+tmpfs$" /proc/filesystems; then
|
if grep -Eq "[[:space:]]+tmpfs$" /proc/filesystems; then
|
||||||
fs="tmpfs"
|
mount -n -t tmpfs $fsopts,mode=755,size=${svcsize}k \
|
||||||
fsopts="$fsopts,mode=0755,size=${svcsize}k"
|
rc-svcdir "$RC_SVCDIR" && return 0
|
||||||
elif grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then
|
fi
|
||||||
|
|
||||||
|
if grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then
|
||||||
fs="ramfs"
|
fs="ramfs"
|
||||||
# ramfs has no special options
|
# ramfs has no special options
|
||||||
elif [ -e /dev/ram0 ] \
|
elif [ -e /dev/ram0 ] \
|
||||||
@@ -32,10 +37,7 @@ mount_svcdir()
|
|||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If we have no entry in fstab for $RC_SVCDIR, provide our own
|
mount -n -t "$fs" $fsopts rc-svcdir "$RC_SVCDIR"
|
||||||
if ! fstabinfo --mount "$RC_SVCDIR"; then
|
|
||||||
mount -n -t "$fs" $fsopts "$devdir" "$RC_SVCDIR"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
. "$RC_LIBEXECDIR"/sh/functions.sh
|
. "$RC_LIBEXECDIR"/sh/functions.sh
|
||||||
|
|||||||
@@ -25,6 +25,29 @@ shift
|
|||||||
# Compat
|
# Compat
|
||||||
export SVCNAME=$RC_SVCNAME
|
export SVCNAME=$RC_SVCNAME
|
||||||
|
|
||||||
|
# Dependency function
|
||||||
|
config() {
|
||||||
|
[ -n "$*" ] && echo "config $*"
|
||||||
|
}
|
||||||
|
need() {
|
||||||
|
[ -n "$*" ] && echo "need $*"
|
||||||
|
}
|
||||||
|
use() {
|
||||||
|
[ -n "$*" ] && echo "use $*"
|
||||||
|
}
|
||||||
|
before() {
|
||||||
|
[ -n "$*" ] && echo "before $*"
|
||||||
|
}
|
||||||
|
after() {
|
||||||
|
[ -n "$*" ] && echo "after $*"
|
||||||
|
}
|
||||||
|
provide() {
|
||||||
|
[ -n "$*" ] && echo "provide $*"
|
||||||
|
}
|
||||||
|
keyword() {
|
||||||
|
[ -n "$*" ] && echo "keyword $*"
|
||||||
|
}
|
||||||
|
|
||||||
# Descript the init script to the user
|
# Descript the init script to the user
|
||||||
describe()
|
describe()
|
||||||
{
|
{
|
||||||
@@ -165,7 +188,7 @@ unset _f
|
|||||||
|
|
||||||
while [ -n "$1" ]; do
|
while [ -n "$1" ]; do
|
||||||
# See if we have the required function and run it
|
# See if we have the required function and run it
|
||||||
for _cmd in describe start stop status ${extra_commands:-$opts} \
|
for _cmd in describe start stop status depend ${extra_commands:-$opts} \
|
||||||
$extra_started_commands
|
$extra_started_commands
|
||||||
do
|
do
|
||||||
if [ "$_cmd" = "$1" ]; then
|
if [ "$_cmd" = "$1" ]; then
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#define RC_LEVEL_BOOT "boot"
|
#define RC_LEVEL_BOOT "boot"
|
||||||
|
|||||||
@@ -346,8 +346,9 @@ get_provided(const RC_DEPINFO *depinfo, const char *runlevel, int options)
|
|||||||
get_provided1(runlevel, providers, dt, bootlevel, false, RC_SERVICE_STOPPED))
|
get_provided1(runlevel, providers, dt, bootlevel, false, RC_SERVICE_STOPPED))
|
||||||
return providers;
|
return providers;
|
||||||
|
|
||||||
/* Still nothing? OK, list all services */
|
/* Still nothing? OK, list our first provided service. */
|
||||||
TAILQ_FOREACH(service, dt->services, entries)
|
service = TAILQ_FIRST(dt->services);
|
||||||
|
if (service != NULL)
|
||||||
rc_stringlist_add(providers, service->value);
|
rc_stringlist_add(providers, service->value);
|
||||||
|
|
||||||
return providers;
|
return providers;
|
||||||
@@ -738,7 +739,7 @@ rc_deptree_update(void)
|
|||||||
RC_STRING *s, *s2, *s2_np, *s3, *s4;
|
RC_STRING *s, *s2, *s2_np, *s3, *s4;
|
||||||
char *line = NULL;
|
char *line = NULL;
|
||||||
size_t len = 0;
|
size_t len = 0;
|
||||||
char *depend, *depends, *service, *type, *nosys;
|
char *depend, *depends, *service, *type, *nosys, *onosys;
|
||||||
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();
|
||||||
@@ -802,6 +803,11 @@ rc_deptree_update(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Don't provide ourself */
|
||||||
|
if (strcmp(type, "iprovide") == 0 &&
|
||||||
|
strcmp(depend, service) == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
/* .sh files are not init scripts */
|
/* .sh files are not init scripts */
|
||||||
l = strlen(depend);
|
l = strlen(depend);
|
||||||
if (l > 2 &&
|
if (l > 2 &&
|
||||||
@@ -841,17 +847,25 @@ rc_deptree_update(void)
|
|||||||
* work for them. This doesn't stop them from being run directly. */
|
* work for them. This doesn't stop them from being run directly. */
|
||||||
if (sys) {
|
if (sys) {
|
||||||
len = strlen(sys);
|
len = strlen(sys);
|
||||||
nosys = xmalloc(len + 3);
|
nosys = xmalloc(len + 1);
|
||||||
nosys[0] = 'n';
|
nosys[0] = '-';
|
||||||
nosys[1] = 'o';
|
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
nosys[i + 2] = (char)tolower((unsigned char)sys[i]);
|
nosys[i + 1] = (char)tolower((unsigned char)sys[i]);
|
||||||
nosys[i + 2] = '\0';
|
nosys[i + 1] = '\0';
|
||||||
|
|
||||||
|
onosys = xmalloc(len + 3);
|
||||||
|
onosys[0] = 'n';
|
||||||
|
onosys[1] = 'o';
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
onosys[i + 2] = (char)tolower((unsigned char)sys[i]);
|
||||||
|
onosys[i + 2] = '\0';
|
||||||
|
|
||||||
TAILQ_FOREACH_SAFE(depinfo, deptree, entries, depinfo_np)
|
TAILQ_FOREACH_SAFE(depinfo, deptree, entries, depinfo_np)
|
||||||
if ((deptype = get_deptype(depinfo, "keyword")))
|
if ((deptype = get_deptype(depinfo, "keyword")))
|
||||||
TAILQ_FOREACH(s, deptype->services, entries)
|
TAILQ_FOREACH(s, deptype->services, entries)
|
||||||
if (strcmp(s->value, nosys) == 0) {
|
if (strcmp(s->value, nosys) == 0 ||
|
||||||
|
strcmp(s->value, onosys) == 0)
|
||||||
|
{
|
||||||
provide = get_deptype(depinfo, "iprovide");
|
provide = get_deptype(depinfo, "iprovide");
|
||||||
TAILQ_REMOVE(deptree, depinfo, entries);
|
TAILQ_REMOVE(deptree, depinfo, entries);
|
||||||
TAILQ_FOREACH(di, deptree, entries) {
|
TAILQ_FOREACH(di, deptree, entries) {
|
||||||
@@ -870,6 +884,7 @@ rc_deptree_update(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(nosys);
|
free(nosys);
|
||||||
|
free(onosys);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Phase 3 - add our providers to the tree */
|
/* Phase 3 - add our providers to the tree */
|
||||||
|
|||||||
@@ -233,6 +233,8 @@ rc_sys(void)
|
|||||||
return RC_SYS_VSERVER;
|
return RC_SYS_VSERVER;
|
||||||
else if (exists("/proc/vz/veinfo") && !exists("/proc/vz/version"))
|
else if (exists("/proc/vz/veinfo") && !exists("/proc/vz/version"))
|
||||||
return RC_SYS_OPENVZ;
|
return RC_SYS_OPENVZ;
|
||||||
|
else if (file_regex("/proc/self/cgroup", ":/.+$"))
|
||||||
|
return RC_SYS_LXC;
|
||||||
else if (file_regex("/proc/self/status",
|
else if (file_regex("/proc/self/status",
|
||||||
"envID:[[:space:]]*[1-9]"))
|
"envID:[[:space:]]*[1-9]"))
|
||||||
return RC_SYS_OPENVZ; /* old test */
|
return RC_SYS_OPENVZ; /* old test */
|
||||||
@@ -468,7 +470,7 @@ rc_service_exists(const char *service)
|
|||||||
}
|
}
|
||||||
librc_hidden_def(rc_service_exists)
|
librc_hidden_def(rc_service_exists)
|
||||||
|
|
||||||
#define OPTSTR ". '%s'; echo \"${opts}\""
|
#define OPTSTR ". '%s'; echo $opts"
|
||||||
RC_STRINGLIST *
|
RC_STRINGLIST *
|
||||||
rc_service_extra_commands(const char *service)
|
rc_service_extra_commands(const char *service)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -72,8 +72,6 @@
|
|||||||
#define librc_hidden_proto(x) hidden_proto(x)
|
#define librc_hidden_proto(x) hidden_proto(x)
|
||||||
#define librc_hidden_def(x) hidden_def(x)
|
#define librc_hidden_def(x) hidden_def(x)
|
||||||
|
|
||||||
ssize_t rc_getline(char **, size_t *, FILE *);
|
|
||||||
|
|
||||||
librc_hidden_proto(rc_config_list)
|
librc_hidden_proto(rc_config_list)
|
||||||
librc_hidden_proto(rc_config_load)
|
librc_hidden_proto(rc_config_load)
|
||||||
librc_hidden_proto(rc_config_value)
|
librc_hidden_proto(rc_config_value)
|
||||||
|
|||||||
@@ -268,6 +268,7 @@ bool rc_service_daemons_crashed(const char *);
|
|||||||
* Some services cannot work in these systems, or we do something else. */
|
* Some services cannot work in these systems, or we do something else. */
|
||||||
#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_PREFIX "PREFIX"
|
#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"
|
||||||
@@ -517,5 +518,9 @@ typedef LIST_HEAD(rc_pidlist, rc_pid) RC_PIDLIST;
|
|||||||
* @return NULL terminated list of pids */
|
* @return NULL terminated list of pids */
|
||||||
RC_PIDLIST *rc_find_pids(const char *, const char *const *, uid_t, pid_t);
|
RC_PIDLIST *rc_find_pids(const char *, const char *const *, uid_t, pid_t);
|
||||||
|
|
||||||
|
/* getline is a handy glibc function that not all libcs have, so
|
||||||
|
* we have our own */
|
||||||
|
ssize_t rc_getline(char **, size_t *, FILE *);
|
||||||
|
|
||||||
__END_DECLS
|
__END_DECLS
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ global:
|
|||||||
rc_deptree_update_needed;
|
rc_deptree_update_needed;
|
||||||
rc_environ_fd;
|
rc_environ_fd;
|
||||||
rc_find_pids;
|
rc_find_pids;
|
||||||
|
rc_getline;
|
||||||
rc_newer_than;
|
rc_newer_than;
|
||||||
rc_older_than;
|
rc_older_than;
|
||||||
rc_runlevel_exists;
|
rc_runlevel_exists;
|
||||||
|
|||||||
2
src/rc/.gitignore
vendored
2
src/rc/.gitignore
vendored
@@ -38,6 +38,7 @@ service_crashed
|
|||||||
checkpath
|
checkpath
|
||||||
fstabinfo
|
fstabinfo
|
||||||
mountinfo
|
mountinfo
|
||||||
|
swclock
|
||||||
rc-depend
|
rc-depend
|
||||||
service_get_value
|
service_get_value
|
||||||
service_set_value
|
service_set_value
|
||||||
@@ -59,6 +60,7 @@ checkpath.o
|
|||||||
fstabinfo.o
|
fstabinfo.o
|
||||||
mountinfo.o
|
mountinfo.o
|
||||||
start-stop-daemon.o
|
start-stop-daemon.o
|
||||||
|
swclock.o
|
||||||
rc-applets.o
|
rc-applets.o
|
||||||
rc-depend.o
|
rc-depend.o
|
||||||
rc-logger.o
|
rc-logger.o
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ PROG= rc
|
|||||||
SRCS= checkpath.c fstabinfo.c mountinfo.c start-stop-daemon.c \
|
SRCS= checkpath.c fstabinfo.c mountinfo.c start-stop-daemon.c \
|
||||||
rc-applets.c rc-depend.c rc-logger.c \
|
rc-applets.c rc-depend.c rc-logger.c \
|
||||||
rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \
|
rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \
|
||||||
runscript.c rc.c
|
runscript.c rc.c swclock.c
|
||||||
|
|
||||||
CLEANFILES= version.h
|
CLEANFILES= version.h
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ RC_SBINLINKS= mark_service_starting mark_service_started \
|
|||||||
mark_service_stopping mark_service_stopped \
|
mark_service_stopping mark_service_stopped \
|
||||||
mark_service_inactive mark_service_wasinactive \
|
mark_service_inactive mark_service_wasinactive \
|
||||||
mark_service_hotplugged mark_service_failed \
|
mark_service_hotplugged mark_service_failed \
|
||||||
rc-abort
|
rc-abort swclock
|
||||||
ALL_LINKS= ${BINLINKS} ${SBINLINKS} ${RC_BINLINKS} ${RC_SBINLINKS}
|
ALL_LINKS= ${BINLINKS} ${SBINLINKS} ${RC_BINLINKS} ${RC_SBINLINKS}
|
||||||
CLEANFILES+= ${ALL_LINKS}
|
CLEANFILES+= ${ALL_LINKS}
|
||||||
|
|
||||||
@@ -34,6 +34,7 @@ CPPFLAGS+= -I../includes -I../librc -I../libeinfo
|
|||||||
LDFLAGS+= -L../librc -L../libeinfo
|
LDFLAGS+= -L../librc -L../libeinfo
|
||||||
LDADD+= -lutil -lrc -leinfo
|
LDADD+= -lutil -lrc -leinfo
|
||||||
|
|
||||||
|
include ../../Makefile.inc
|
||||||
MK= ../../mk
|
MK= ../../mk
|
||||||
include ${MK}/debug.mk
|
include ${MK}/debug.mk
|
||||||
include ${MK}/prog.mk
|
include ${MK}/prog.mk
|
||||||
@@ -45,12 +46,17 @@ LDADD+= ${LIBDL} ${LIBKVM}
|
|||||||
include ${MK}/${MKPAM}.mk
|
include ${MK}/${MKPAM}.mk
|
||||||
|
|
||||||
${SRCS}: version.h
|
${SRCS}: version.h
|
||||||
version.h:
|
|
||||||
sed -n -e 's/^VERSION=[[:space:]]*\([^[:space:]]*\).*/#define VERSION "\1${GITVER}\"/p' ../../Makefile > version.h
|
.PHONY: version.h.tmp
|
||||||
|
version.h.tmp:
|
||||||
|
echo "#define VERSION \"${VERSION}${GITVER}\"" >$@
|
||||||
if test -n "${BRANDING}"; then \
|
if test -n "${BRANDING}"; then \
|
||||||
echo "#define BRANDING \"${BRANDING}\"" >> version.h; \
|
echo "#define BRANDING \"${BRANDING}\"" >> $@; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
version.h: version.h.tmp
|
||||||
|
cmp -s $@.tmp $@ && rm $@.tmp || mv $@.tmp $@
|
||||||
|
|
||||||
install: all
|
install: all
|
||||||
${INSTALL} -d ${DESTDIR}${SBINDIR}
|
${INSTALL} -d ${DESTDIR}${SBINDIR}
|
||||||
${INSTALL} -m ${BINMODE} ${PROG} ${DESTDIR}${SBINDIR}
|
${INSTALL} -m ${BINMODE} ${PROG} ${DESTDIR}${SBINDIR}
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ int rc_status(int, char **);
|
|||||||
int rc_update(int, char **);
|
int rc_update(int, char **);
|
||||||
int runscript(int, char **);
|
int runscript(int, char **);
|
||||||
int start_stop_daemon(int, char **);
|
int start_stop_daemon(int, char **);
|
||||||
|
int swclock(int, char **);
|
||||||
|
|
||||||
void run_applets(int, char **);
|
void run_applets(int, char **);
|
||||||
|
|
||||||
|
|||||||
@@ -449,6 +449,8 @@ run_applets(int argc, char **argv)
|
|||||||
exit(start_stop_daemon(argc, argv));
|
exit(start_stop_daemon(argc, argv));
|
||||||
else if (strcmp (applet, "checkpath") == 0)
|
else if (strcmp (applet, "checkpath") == 0)
|
||||||
exit(checkpath(argc, argv));
|
exit(checkpath(argc, argv));
|
||||||
|
else if (strcmp(applet, "swclock") == 0)
|
||||||
|
exit(swclock(argc, argv));
|
||||||
|
|
||||||
/* These could also be applications in their own right */
|
/* These could also be applications in their own right */
|
||||||
if (strcmp(applet, "shell_var") == 0)
|
if (strcmp(applet, "shell_var") == 0)
|
||||||
|
|||||||
28
src/rc/rc.c
28
src/rc/rc.c
@@ -43,10 +43,6 @@ const char rc_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
|||||||
#include <sys/utsname.h>
|
#include <sys/utsname.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
# include <asm/setup.h> /* for COMMAND_LINE_SIZE */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@@ -177,10 +173,8 @@ static char *
|
|||||||
proc_getent(const char *ent)
|
proc_getent(const char *ent)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char proc[COMMAND_LINE_SIZE];
|
char *proc, *p, *value = NULL;
|
||||||
char *p;
|
size_t i;
|
||||||
char *value = NULL;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!exists("/proc/cmdline"))
|
if (!exists("/proc/cmdline"))
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -190,11 +184,11 @@ proc_getent(const char *ent)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(proc, 0, sizeof(proc));
|
proc = NULL;
|
||||||
p = fgets(proc, sizeof(proc), fp);
|
i = 0;
|
||||||
if (p == NULL)
|
if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
|
||||||
eerror("fgets: %s", strerror(errno));
|
eerror("rc_getline: %s", strerror(errno));
|
||||||
else if (*proc && (p = strstr(proc, ent))) {
|
if (*proc && (p = strstr(proc, ent))) {
|
||||||
i = p - proc;
|
i = p - proc;
|
||||||
if (i == '\0' || proc[i - 1] == ' ') {
|
if (i == '\0' || proc[i - 1] == ' ') {
|
||||||
p += strlen(ent);
|
p += strlen(ent);
|
||||||
@@ -205,6 +199,7 @@ proc_getent(const char *ent)
|
|||||||
} else
|
} else
|
||||||
errno = ENOENT;
|
errno = ENOENT;
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
free(proc);
|
||||||
|
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
@@ -605,8 +600,11 @@ do_stop_services(const char *newlevel, bool parallel, bool going_down)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
kwords = rc_deptree_depend(deptree, service->value, "keyword");
|
kwords = rc_deptree_depend(deptree, service->value, "keyword");
|
||||||
if (rc_stringlist_find(kwords, "nostop") ||
|
if (rc_stringlist_find(kwords, "-stop") ||
|
||||||
(going_down && rc_stringlist_find(kwords, "noshutdown")))
|
rc_stringlist_find(kwords, "nostop") ||
|
||||||
|
(going_down &&
|
||||||
|
(rc_stringlist_find(kwords, "-shutdown") ||
|
||||||
|
rc_stringlist_find(kwords, "noshutdown"))))
|
||||||
nstop = true;
|
nstop = true;
|
||||||
else
|
else
|
||||||
nstop = false;
|
nstop = false;
|
||||||
|
|||||||
@@ -471,7 +471,8 @@ svc_wait(const char *svc)
|
|||||||
|
|
||||||
/* Some services don't have a timeout, like fsck */
|
/* Some services don't have a timeout, like fsck */
|
||||||
keywords = rc_deptree_depend(deptree, svc, "keyword");
|
keywords = rc_deptree_depend(deptree, svc, "keyword");
|
||||||
if (rc_stringlist_find(keywords, "notimeout"))
|
if (rc_stringlist_find(keywords, "-timeout") ||
|
||||||
|
rc_stringlist_find(keywords, "notimeout"))
|
||||||
forever = true;
|
forever = true;
|
||||||
rc_stringlist_free(keywords);
|
rc_stringlist_free(keywords);
|
||||||
|
|
||||||
@@ -755,13 +756,10 @@ static void svc_start_real()
|
|||||||
if (ibsave)
|
if (ibsave)
|
||||||
unsetenv("IN_BACKGROUND");
|
unsetenv("IN_BACKGROUND");
|
||||||
|
|
||||||
if (!started)
|
if (rc_service_state(service) & RC_SERVICE_INACTIVE)
|
||||||
|
ewarnx("WARNING: %s has started, but is inactive", applet);
|
||||||
|
else if (!started)
|
||||||
eerrorx("ERROR: %s failed to start", applet);
|
eerrorx("ERROR: %s failed to start", applet);
|
||||||
else {
|
|
||||||
if (rc_service_state(service) & RC_SERVICE_INACTIVE)
|
|
||||||
ewarnx("WARNING: %s has started, but is inactive",
|
|
||||||
applet);
|
|
||||||
}
|
|
||||||
|
|
||||||
rc_service_mark(service, RC_SERVICE_STARTED);
|
rc_service_mark(service, RC_SERVICE_STARTED);
|
||||||
exclusive_fd = svc_unlock(applet, exclusive_fd);
|
exclusive_fd = svc_unlock(applet, exclusive_fd);
|
||||||
@@ -1275,7 +1273,8 @@ runscript(int argc, char **argv)
|
|||||||
doneone = true;
|
doneone = true;
|
||||||
|
|
||||||
if (strcmp(optarg, "describe") == 0 ||
|
if (strcmp(optarg, "describe") == 0 ||
|
||||||
strcmp(optarg, "help") == 0)
|
strcmp(optarg, "help") == 0 ||
|
||||||
|
strcmp(optarg, "depend") == 0)
|
||||||
{
|
{
|
||||||
save = prefix;
|
save = prefix;
|
||||||
eprefix(NULL);
|
eprefix(NULL);
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
#define POLL_INTERVAL 20000000
|
#define POLL_INTERVAL 20000000
|
||||||
#define WAIT_PIDFILE 500000000
|
#define WAIT_PIDFILE 500000000
|
||||||
#define ONE_SECOND 1000000000
|
#define ONE_SECOND 1000000000
|
||||||
|
#define ONE_MS 1000000
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/ioctl.h>
|
#include <sys/ioctl.h>
|
||||||
@@ -155,7 +156,8 @@ parse_signal(const char *sig)
|
|||||||
{ "STOP", SIGSTOP },
|
{ "STOP", SIGSTOP },
|
||||||
{ "TSTP", SIGTSTP },
|
{ "TSTP", SIGTSTP },
|
||||||
{ "TTIN", SIGTTIN },
|
{ "TTIN", SIGTTIN },
|
||||||
{ "TTOU", SIGTTOU }
|
{ "TTOU", SIGTTOU },
|
||||||
|
{ "NULL", 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int i = 0;
|
unsigned int i = 0;
|
||||||
@@ -165,7 +167,7 @@ parse_signal(const char *sig)
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (sscanf(sig, "%u", &i) == 1) {
|
if (sscanf(sig, "%u", &i) == 1) {
|
||||||
if (i > 0 && i < sizeof(signallist) / sizeof(signallist[0]))
|
if (i < NSIG)
|
||||||
return i;
|
return i;
|
||||||
eerrorx("%s: `%s' is not a valid signal", applet, sig);
|
eerrorx("%s: `%s' is not a valid signal", applet, sig);
|
||||||
}
|
}
|
||||||
@@ -369,16 +371,17 @@ do_stop(const char *exec, const char *const *argv,
|
|||||||
static int
|
static int
|
||||||
run_stop_schedule(const char *exec, const char *const *argv,
|
run_stop_schedule(const char *exec, const char *const *argv,
|
||||||
const char *pidfile, uid_t uid,
|
const char *pidfile, uid_t uid,
|
||||||
bool quiet, bool verbose, bool test)
|
bool quiet, bool verbose, bool test, bool progress)
|
||||||
{
|
{
|
||||||
SCHEDULEITEM *item = TAILQ_FIRST(&schedule);
|
SCHEDULEITEM *item = TAILQ_FIRST(&schedule);
|
||||||
int nkilled = 0;
|
int nkilled = 0;
|
||||||
int tkilled = 0;
|
int tkilled = 0;
|
||||||
int nrunning = 0;
|
int nrunning = 0;
|
||||||
long nloops;
|
long nloops, nsecs;
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
pid_t pid = 0;
|
pid_t pid = 0;
|
||||||
const char *const *p;
|
const char *const *p;
|
||||||
|
bool progressed = false;
|
||||||
|
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
if (exec)
|
if (exec)
|
||||||
@@ -416,6 +419,8 @@ run_stop_schedule(const char *exec, const char *const *argv,
|
|||||||
quiet, verbose, test);
|
quiet, verbose, test);
|
||||||
if (nkilled == 0) {
|
if (nkilled == 0) {
|
||||||
if (tkilled == 0) {
|
if (tkilled == 0) {
|
||||||
|
if (progressed)
|
||||||
|
printf("\n");
|
||||||
if (! quiet)
|
if (! quiet)
|
||||||
eerror("%s: no matching "
|
eerror("%s: no matching "
|
||||||
"processes found", applet);
|
"processes found", applet);
|
||||||
@@ -433,30 +438,47 @@ run_stop_schedule(const char *exec, const char *const *argv,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
nloops = (ONE_SECOND / POLL_INTERVAL) * item->value;
|
|
||||||
ts.tv_sec = 0;
|
ts.tv_sec = 0;
|
||||||
ts.tv_nsec = POLL_INTERVAL;
|
ts.tv_nsec = POLL_INTERVAL;
|
||||||
|
|
||||||
while (nloops) {
|
for (nsecs = 0; nsecs < item->value; nsecs++) {
|
||||||
if ((nrunning = do_stop(exec, argv, pid,
|
for (nloops = 0;
|
||||||
uid, 0, true, false, true)) == 0)
|
nloops < ONE_SECOND / POLL_INTERVAL;
|
||||||
return 0;
|
nloops++)
|
||||||
|
{
|
||||||
if (nanosleep(&ts, NULL) == -1) {
|
if ((nrunning = do_stop(exec, argv,
|
||||||
if (errno == EINTR)
|
pid, uid, 0, true, false,
|
||||||
eerror("%s: caught an"
|
true)) == 0)
|
||||||
" interrupt", applet);
|
|
||||||
else {
|
|
||||||
eerror("%s: nanosleep: %s",
|
|
||||||
applet, strerror(errno));
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
|
if (nanosleep(&ts, NULL) == -1) {
|
||||||
|
if (progressed) {
|
||||||
|
printf("\n");
|
||||||
|
progressed = false;
|
||||||
|
}
|
||||||
|
if (errno == EINTR)
|
||||||
|
eerror("%s: caught an"
|
||||||
|
" interrupt", applet);
|
||||||
|
else {
|
||||||
|
eerror("%s: nanosleep: %s",
|
||||||
|
applet, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
nloops --;
|
if (progress) {
|
||||||
|
printf(".");
|
||||||
|
fflush(stdout);
|
||||||
|
progressed = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
if (progressed) {
|
||||||
|
printf("\n");
|
||||||
|
progressed = false;
|
||||||
|
}
|
||||||
eerror("%s: invalid schedule item `%d'",
|
eerror("%s: invalid schedule item `%d'",
|
||||||
applet, item->type);
|
applet, item->type);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -469,6 +491,8 @@ run_stop_schedule(const char *exec, const char *const *argv,
|
|||||||
if (test || (tkilled > 0 && nrunning == 0))
|
if (test || (tkilled > 0 && nrunning == 0))
|
||||||
return nkilled;
|
return nkilled;
|
||||||
|
|
||||||
|
if (progressed)
|
||||||
|
printf("\n");
|
||||||
if (! quiet) {
|
if (! quiet) {
|
||||||
if (nrunning == 1)
|
if (nrunning == 1)
|
||||||
eerror("%s: %d process refused to stop",
|
eerror("%s: %d process refused to stop",
|
||||||
@@ -549,7 +573,7 @@ expand_home(const char *home, const char *path)
|
|||||||
ppath++;
|
ppath++;
|
||||||
|
|
||||||
if (!home) {
|
if (!home) {
|
||||||
free(opath);
|
free(opath);
|
||||||
return xstrdup(path);
|
return xstrdup(path);
|
||||||
}
|
}
|
||||||
if (!ppath) {
|
if (!ppath) {
|
||||||
@@ -565,7 +589,7 @@ expand_home(const char *home, const char *path)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#include "_usage.h"
|
#include "_usage.h"
|
||||||
#define getoptstring "KN:R:Sbc:d:e:g:ik:mn:op:s:tu:r:w:x:1:2:" getoptstring_COMMON
|
#define getoptstring "KN:PR:Sbc:d:e:g:ik:mn:op:s:tu:r:w:x:1:2:" getoptstring_COMMON
|
||||||
static const struct option longopts[] = {
|
static const struct option longopts[] = {
|
||||||
{ "stop", 0, NULL, 'K'},
|
{ "stop", 0, NULL, 'K'},
|
||||||
{ "nicelevel", 1, NULL, 'N'},
|
{ "nicelevel", 1, NULL, 'N'},
|
||||||
@@ -591,6 +615,7 @@ static const struct option longopts[] = {
|
|||||||
{ "exec", 1, NULL, 'x'},
|
{ "exec", 1, NULL, 'x'},
|
||||||
{ "stdout", 1, NULL, '1'},
|
{ "stdout", 1, NULL, '1'},
|
||||||
{ "stderr", 1, NULL, '2'},
|
{ "stderr", 1, NULL, '2'},
|
||||||
|
{ "progress", 0, NULL, 'P'},
|
||||||
longopts_COMMON
|
longopts_COMMON
|
||||||
};
|
};
|
||||||
static const char * const longopts_help[] = {
|
static const char * const longopts_help[] = {
|
||||||
@@ -614,10 +639,11 @@ static const char * const longopts_help[] = {
|
|||||||
"Test actions, don't do them",
|
"Test actions, don't do them",
|
||||||
"Change the process user",
|
"Change the process user",
|
||||||
"Chroot to this directory",
|
"Chroot to this directory",
|
||||||
"Seconds to wait for daemon start",
|
"Milliseconds to wait for daemon start",
|
||||||
"Binary to start/stop",
|
"Binary to start/stop",
|
||||||
"Redirect stdout to file",
|
"Redirect stdout to file",
|
||||||
"Redirect stderr to file",
|
"Redirect stderr to file",
|
||||||
|
"Print dots each second while waiting",
|
||||||
longopts_help_COMMON
|
longopts_help_COMMON
|
||||||
};
|
};
|
||||||
#include "_usage.c"
|
#include "_usage.c"
|
||||||
@@ -648,11 +674,12 @@ start_stop_daemon(int argc, char **argv)
|
|||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
char *pidfile = NULL;
|
char *pidfile = NULL;
|
||||||
char *retry = NULL;
|
char *retry = NULL;
|
||||||
int sig = 0;
|
int sig = -1;
|
||||||
int nicelevel = 0;
|
int nicelevel = 0;
|
||||||
bool background = false;
|
bool background = false;
|
||||||
bool makepidfile = false;
|
bool makepidfile = false;
|
||||||
bool interpreted = false;
|
bool interpreted = false;
|
||||||
|
bool progress = false;
|
||||||
uid_t uid = 0;
|
uid_t uid = 0;
|
||||||
gid_t gid = 0;
|
gid_t gid = 0;
|
||||||
char *home = NULL;
|
char *home = NULL;
|
||||||
@@ -714,12 +741,17 @@ start_stop_daemon(int argc, char **argv)
|
|||||||
case 'K': /* --stop */
|
case 'K': /* --stop */
|
||||||
stop = true;
|
stop = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'N': /* --nice */
|
case 'N': /* --nice */
|
||||||
if (sscanf(optarg, "%d", &nicelevel) != 1)
|
if (sscanf(optarg, "%d", &nicelevel) != 1)
|
||||||
eerrorx("%s: invalid nice level `%s'",
|
eerrorx("%s: invalid nice level `%s'",
|
||||||
applet, optarg);
|
applet, optarg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'P': /* --progress */
|
||||||
|
progress = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'R': /* --retry <schedule>|<timeout> */
|
case 'R': /* --retry <schedule>|<timeout> */
|
||||||
retry = optarg;
|
retry = optarg;
|
||||||
break;
|
break;
|
||||||
@@ -885,8 +917,8 @@ start_stop_daemon(int argc, char **argv)
|
|||||||
else if (exec)
|
else if (exec)
|
||||||
*--argv = exec;
|
*--argv = exec;
|
||||||
|
|
||||||
if (stop || sig != 0) {
|
if (stop || sig != -1) {
|
||||||
if (sig == 0)
|
if (sig == -1)
|
||||||
sig = SIGTERM;
|
sig = SIGTERM;
|
||||||
if (!*argv && !pidfile && !name && !uid)
|
if (!*argv && !pidfile && !name && !uid)
|
||||||
eerrorx("%s: --stop needs --exec, --pidfile,"
|
eerrorx("%s: --stop needs --exec, --pidfile,"
|
||||||
@@ -989,8 +1021,8 @@ start_stop_daemon(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
margv = nav ? nav : argv;
|
margv = nav ? nav : argv;
|
||||||
|
|
||||||
if (stop || sig) {
|
if (stop || sig != -1) {
|
||||||
if (sig == 0)
|
if (sig == -1)
|
||||||
sig = SIGTERM;
|
sig = SIGTERM;
|
||||||
if (!stop)
|
if (!stop)
|
||||||
oknodo = true;
|
oknodo = true;
|
||||||
@@ -1001,7 +1033,7 @@ start_stop_daemon(int argc, char **argv)
|
|||||||
else
|
else
|
||||||
parse_schedule(NULL, sig);
|
parse_schedule(NULL, sig);
|
||||||
i = run_stop_schedule(exec, (const char *const *)margv,
|
i = run_stop_schedule(exec, (const char *const *)margv,
|
||||||
pidfile, uid, quiet, verbose, test);
|
pidfile, uid, quiet, verbose, test, progress);
|
||||||
|
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
/* We failed to stop something */
|
/* We failed to stop something */
|
||||||
@@ -1280,8 +1312,8 @@ start_stop_daemon(int argc, char **argv)
|
|||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
bool alive = false;
|
bool alive = false;
|
||||||
|
|
||||||
ts.tv_sec = start_wait;
|
ts.tv_sec = start_wait / 1000;
|
||||||
ts.tv_nsec = 0;
|
ts.tv_nsec = (start_wait % 1000) * ONE_MS;
|
||||||
if (nanosleep(&ts, NULL) == -1) {
|
if (nanosleep(&ts, NULL) == -1) {
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
eerror("%s: caught an interrupt", applet);
|
eerror("%s: caught an interrupt", applet);
|
||||||
|
|||||||
120
src/rc/swclock.c
Normal file
120
src/rc/swclock.c
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
/*
|
||||||
|
swclock.c
|
||||||
|
Sets the system time from the mtime of the given file.
|
||||||
|
This is useful for systems who do not have a working RTC and rely on ntp.
|
||||||
|
OpenRC relies on the correct system time for a lot of operations so this is needed
|
||||||
|
quite early.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2009 Roy Marples <roy@marples.name>
|
||||||
|
* All rights reserved
|
||||||
|
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <utime.h>
|
||||||
|
|
||||||
|
#include "builtins.h"
|
||||||
|
#include "einfo.h"
|
||||||
|
#include "rc-misc.h"
|
||||||
|
|
||||||
|
#define RC_SHUTDOWNTIME RC_SVCDIR "/shutdowntime"
|
||||||
|
|
||||||
|
extern const char *applet;
|
||||||
|
|
||||||
|
#include "_usage.h"
|
||||||
|
#define extraopts "file"
|
||||||
|
#define getoptstring "sw" getoptstring_COMMON
|
||||||
|
static const struct option longopts[] = {
|
||||||
|
{ "save", 0, NULL, 's' },
|
||||||
|
{ "warn", 0, NULL, 'w' },
|
||||||
|
longopts_COMMON
|
||||||
|
};
|
||||||
|
static const char * const longopts_help[] = {
|
||||||
|
"saves the time",
|
||||||
|
"no error if no reference file",
|
||||||
|
longopts_help_COMMON
|
||||||
|
};
|
||||||
|
#include "_usage.c"
|
||||||
|
|
||||||
|
int
|
||||||
|
swclock(int argc, char **argv)
|
||||||
|
{
|
||||||
|
int opt, sflag = 0, wflag = 0;
|
||||||
|
const char *file = RC_SHUTDOWNTIME;
|
||||||
|
struct stat sb;
|
||||||
|
struct timeval tv;
|
||||||
|
|
||||||
|
while ((opt = getopt_long(argc, argv, getoptstring,
|
||||||
|
longopts, (int *) 0)) != -1)
|
||||||
|
{
|
||||||
|
switch (opt) {
|
||||||
|
case 's':
|
||||||
|
sflag = 1;
|
||||||
|
break;
|
||||||
|
case 'w':
|
||||||
|
wflag = 1;
|
||||||
|
break;
|
||||||
|
case_RC_COMMON_GETOPT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (optind < argc)
|
||||||
|
file = argv[optind++];
|
||||||
|
|
||||||
|
if (sflag) {
|
||||||
|
if (stat(file, &sb) == -1) {
|
||||||
|
opt = open(file, O_WRONLY | O_CREAT, 0644);
|
||||||
|
if (opt == -1)
|
||||||
|
eerrorx("swclock: open: %s", strerror(errno));
|
||||||
|
close(opt);
|
||||||
|
} else
|
||||||
|
if (utime(file, NULL) == -1)
|
||||||
|
eerrorx("swclock: utime: %s", strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stat(file, &sb) == -1) {
|
||||||
|
if (wflag != 0 && errno == ENOENT)
|
||||||
|
ewarn("swclock: `%s': %s", file, strerror(errno));
|
||||||
|
else
|
||||||
|
eerrorx("swclock: `%s': %s", file, strerror(errno));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
tv.tv_sec = sb.st_mtime;
|
||||||
|
tv.tv_usec = 0;
|
||||||
|
|
||||||
|
if (settimeofday(&tv, NULL) == -1)
|
||||||
|
eerrorx("swclock: settimeofday: %s", strerror(errno));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -20,6 +20,8 @@ rc_deptree_update_needed
|
|||||||
rc_deptree_update_needed@@RC_1.0
|
rc_deptree_update_needed@@RC_1.0
|
||||||
rc_find_pids
|
rc_find_pids
|
||||||
rc_find_pids@@RC_1.0
|
rc_find_pids@@RC_1.0
|
||||||
|
rc_getline
|
||||||
|
rc_getline@@RC_1.0
|
||||||
rc_newer_than
|
rc_newer_than
|
||||||
rc_newer_than@@RC_1.0
|
rc_newer_than@@RC_1.0
|
||||||
rc_older_than
|
rc_older_than
|
||||||
|
|||||||
Reference in New Issue
Block a user