Compare commits
1 Commits
0.18.4
...
new-netmou
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8591a0ea73 |
@@ -1,3 +1,3 @@
|
|||||||
NAME= openrc
|
NAME= openrc
|
||||||
VERSION= 0.18.4
|
VERSION= 0.18
|
||||||
PKG= ${NAME}-${VERSION}
|
PKG= ${NAME}-${VERSION}
|
||||||
|
|||||||
34
NEWS.md
34
NEWS.md
@@ -3,40 +3,6 @@
|
|||||||
This file will contain a list of notable changes for each release. Note
|
This file will contain a list of notable changes for each release. Note
|
||||||
the information in this file is in reverse order.
|
the information in this file is in reverse order.
|
||||||
|
|
||||||
## OpenRC-0.18.3
|
|
||||||
|
|
||||||
Modern Linux systems expect /etc/mtab to be a symbolic link to
|
|
||||||
/proc/self/mounts. Reasons for this change include support for mount
|
|
||||||
namespaces, which will not work if /etc/mtab is a file.
|
|
||||||
By default, the mtab service enforces this on each reboot.
|
|
||||||
|
|
||||||
If you find that this breaks your system in some way, please do the
|
|
||||||
following:
|
|
||||||
|
|
||||||
- Set mtab_is_file=yes in /etc/conf.d/mtab.
|
|
||||||
|
|
||||||
- Restart mtab. This will recreate the /etc/mtab file.
|
|
||||||
|
|
||||||
- Check for an issue on https://github.com/openrc/openrc/issues
|
|
||||||
explaining why you need /etc/mtab to be a file. If there isn't one,
|
|
||||||
please open one and explain in detail why you need this to be a file.
|
|
||||||
If there is one, please add your comments to it. Please give concrete
|
|
||||||
examples of why it is important that /etc/mtab be a file instead of a
|
|
||||||
symbolic link. Those comments will be taken into consideration for how
|
|
||||||
long to keep supporting mtab as a file or when the support can be
|
|
||||||
removed.
|
|
||||||
|
|
||||||
## OpenRC-0.18
|
|
||||||
|
|
||||||
The behaviour of localmount and netmount in this version is changing. In
|
|
||||||
the past, these services always started successfully. In this version,
|
|
||||||
they will be able to fail if file systems they mount fail to mount. If
|
|
||||||
you have file systems listed in fstab which should not be mounted at
|
|
||||||
boot time, make sure to add noauto to the mount options. If you have
|
|
||||||
file systems that you want to attempt to mount at boot time but failure
|
|
||||||
should be allowed, add nofail to the mount options for these file
|
|
||||||
systems in fstab.
|
|
||||||
|
|
||||||
## OpenRC-0.14
|
## OpenRC-0.14
|
||||||
|
|
||||||
The binfmt service, which registers misc binary formats with the Linux
|
The binfmt service, which registers misc binary formats with the Linux
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ include ${MK}/os.mk
|
|||||||
|
|
||||||
CONF-FreeBSD= ipfw moused powerd rarpd savecore syscons
|
CONF-FreeBSD= ipfw moused powerd rarpd savecore syscons
|
||||||
|
|
||||||
CONF-Linux= consolefont devfs dmesg hwclock keymaps killprocs modules mtab
|
CONF-Linux= consolefont devfs dmesg hwclock keymaps killprocs modules
|
||||||
|
|
||||||
CONF-NetBSD= moused rarpd savecore
|
CONF-NetBSD= moused rarpd savecore
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
# This setting controls whether /etc/mtab is a file or symbolic link.
|
|
||||||
# Most of the time, you shouldn't touch this. However, if the default
|
|
||||||
# breaks your system in some way, please see the NEWS.md file that comes
|
|
||||||
# with OpenRC for the actions to take.
|
|
||||||
# mtab_is_file=no
|
|
||||||
@@ -62,21 +62,12 @@ rc_tty_number=12
|
|||||||
# Set the devices controller settings for this service.
|
# Set the devices controller settings for this service.
|
||||||
#rc_cgroup_devices=""
|
#rc_cgroup_devices=""
|
||||||
|
|
||||||
# Set the hugetlb controller settings for this service.
|
|
||||||
#rc_cgroup_hugetlb=""
|
|
||||||
|
|
||||||
# Set the memory controller settings for this service.
|
# Set the memory controller settings for this service.
|
||||||
#rc_cgroup_memory=""
|
#rc_cgroup_memory=""
|
||||||
|
|
||||||
# Set the net_cls controller settings for this service.
|
|
||||||
#rc_cgroup_net_cls=""
|
|
||||||
|
|
||||||
# Set the net_prio controller settings for this service.
|
# Set the net_prio controller settings for this service.
|
||||||
#rc_cgroup_net_prio=""
|
#rc_cgroup_net_prio=""
|
||||||
|
|
||||||
# Set the pids controller settings for this service.
|
|
||||||
#rc_cgroup_pids=""
|
|
||||||
|
|
||||||
# Set this to YES if yu want all of the processes in a service's cgroup
|
# Set this to YES if yu want all of the processes in a service's cgroup
|
||||||
# killed when the service is stopped or restarted.
|
# killed when the service is stopped or restarted.
|
||||||
# This should not be set globally because it kills all of the service's
|
# This should not be set globally because it kills all of the service's
|
||||||
|
|||||||
@@ -16,5 +16,5 @@ start()
|
|||||||
ebegin "Loading custom binary format handlers"
|
ebegin "Loading custom binary format handlers"
|
||||||
"$RC_LIBEXECDIR"/sh/binfmt.sh
|
"$RC_LIBEXECDIR"/sh/binfmt.sh
|
||||||
eend $?
|
eend $?
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -121,11 +121,11 @@ clean_run()
|
|||||||
local dir
|
local dir
|
||||||
# If / is still read-only due to a problem, this will fail!
|
# If / is still read-only due to a problem, this will fail!
|
||||||
if ! checkpath -W /; then
|
if ! checkpath -W /; then
|
||||||
ewarn "/ is not writable; unable to clean up underlying /run"
|
eerror "/ is not writable; unable to clean up underlying /run"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
if ! checkpath -W /tmp; then
|
if ! checkpath -W /tmp; then
|
||||||
ewarn "/tmp is not writable; unable to clean up underlying /run"
|
eerror "/tmp is not writable; unable to clean up underlying /run"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
# Now we know that we can modify /tmp and /
|
# Now we know that we can modify /tmp and /
|
||||||
@@ -136,12 +136,13 @@ clean_run()
|
|||||||
dir=$(mktemp -d)
|
dir=$(mktemp -d)
|
||||||
if [ -n "$dir" -a -d $dir -a -w $dir ]; then
|
if [ -n "$dir" -a -d $dir -a -w $dir ]; then
|
||||||
mount --bind / $dir && rm -rf $dir/run/* || rc=1
|
mount --bind / $dir && rm -rf $dir/run/* || rc=1
|
||||||
umount $dir && rmdir $dir
|
umount $dir
|
||||||
|
rm -rf $dir
|
||||||
else
|
else
|
||||||
rc=1
|
rc=1
|
||||||
fi
|
fi
|
||||||
if [ $rc -ne 0 ]; then
|
if [ $rc -ne 0 ]; then
|
||||||
ewarn "Could not clean up underlying /run on /"
|
eerror "Could not clean up underlying /run on /"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Sets a font for the consoles."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount termencoding
|
need localmount termencoding
|
||||||
after hotplug bootmisc modules
|
after hotplug bootmisc
|
||||||
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
|
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ depend()
|
|||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
# Mount local filesystems in /etc/fstab.
|
# Mount local filesystems in /etc/fstab.
|
||||||
local types="noproc" x= no_netdev= rc=
|
local types="noproc" x= no_netdev=
|
||||||
for x in $net_fs_list $extra_net_fs_list; do
|
for x in $net_fs_list $extra_net_fs_list; do
|
||||||
types="${types},no${x}"
|
types="${types},no${x}"
|
||||||
done
|
done
|
||||||
@@ -29,11 +29,9 @@ start()
|
|||||||
ebegin "Mounting local filesystems"
|
ebegin "Mounting local filesystems"
|
||||||
mount -at "$types" $no_netdev
|
mount -at "$types" $no_netdev
|
||||||
eend $? "Some local filesystem failed to mount"
|
eend $? "Some local filesystem failed to mount"
|
||||||
rc=$?
|
|
||||||
if [ "$RC_UNAME" != Linux ]; then
|
# Always return 0 - some local mounts may not be critical for boot
|
||||||
rc=0
|
return 0
|
||||||
fi
|
|
||||||
return $rc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stop()
|
stop()
|
||||||
@@ -72,14 +70,12 @@ stop()
|
|||||||
sync
|
sync
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local aufs_branch aufs_mount_point aufs_si_id aufs_br_id branches
|
local aufs_branch aufs_mount_dir aufs_mount_point aufs_si_dir aufs_si_id
|
||||||
for aufs_si_dir in /sys/fs/aufs/si*; do
|
for aufs_si_dir in /sys/fs/aufs/*; do
|
||||||
[ -d "${aufs_si_dir}" ] || continue
|
aufs_mount_dir=${aufs_si_dir#/sys/fs/aufs/}
|
||||||
aufs_si_id="si=${aufs_si_dir#/sys/fs/aufs/si_}"
|
aufs_si_id="$(printf "%s" $aufs_mount_dir | sed 's/_/=/g')"
|
||||||
aufs_mount_point="$(mountinfo -o ${aufs_si_id})"
|
aufs_mount_point="$(mountinfo -o ${aufs_si_id})"
|
||||||
branches="$aufs_si_dir/br[0-9] $aufs_si_dir/br[0-9][0-9] $aufs_si_dir/br[0-9][0-9][0-9]"
|
for x in $aufs_si_dir/br[0-9][0-9][0-9]; do
|
||||||
for x in $branches; do
|
|
||||||
[ -e "${x}" ] || continue
|
|
||||||
aufs_branch=$(sed 's/=.*//g' $x)
|
aufs_branch=$(sed 's/=.*//g' $x)
|
||||||
eindent
|
eindent
|
||||||
if ! mount -o "remount,del:$aufs_branch" "$aufs_mount_point" > /dev/null 2>&1; then
|
if ! mount -o "remount,del:$aufs_branch" "$aufs_mount_point" > /dev/null 2>&1; then
|
||||||
|
|||||||
@@ -12,19 +12,21 @@ depend()
|
|||||||
|
|
||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
|
[ -L /etc/mtab ] && return 0
|
||||||
local rc=0
|
local rc=0
|
||||||
ebegin "Updating /etc/mtab"
|
ebegin "Updating /etc/mtab"
|
||||||
if ! checkpath -W /etc; then
|
if ! checkpath -W /etc; then
|
||||||
rc=1
|
rc=1
|
||||||
elif ! yesno ${mtab_is_file:-no}; then
|
elif [ ! -e /etc/mtab ]; then
|
||||||
[ ! -L /etc/mtab ] && [ -f /etc/mtab ] &&
|
|
||||||
ewarn "Removing /etc/mtab file"
|
|
||||||
einfo "Creating mtab symbolic link"
|
|
||||||
ln -snf /proc/self/mounts /etc/mtab
|
ln -snf /proc/self/mounts /etc/mtab
|
||||||
else
|
else
|
||||||
[ -L /etc/mtab ] && ewarn "Removing /etc/mtab symbolic link"
|
ewarn "The support for updating /etc/mtab as a file is"
|
||||||
rm -f /etc/mtab
|
ewarn "deprecated and will be removed in the future."
|
||||||
einfo "Creating mtab file"
|
ewarn "Please run the following command as root on your system."
|
||||||
|
ewarn
|
||||||
|
ewarn "ln -snf /proc/self/mounts /etc/mtab"
|
||||||
|
ewarn
|
||||||
|
|
||||||
# With / as tmpfs we cannot umount -at tmpfs in localmount as that
|
# With / as tmpfs we cannot umount -at tmpfs in localmount as that
|
||||||
# makes / readonly and dismounts all tmpfs even if in use which is
|
# makes / readonly and dismounts all tmpfs even if in use which is
|
||||||
# not good. Luckily, umount uses /etc/mtab instead of /proc/mounts
|
# not good. Luckily, umount uses /etc/mtab instead of /proc/mounts
|
||||||
|
|||||||
@@ -4,11 +4,24 @@
|
|||||||
|
|
||||||
description="Mounts network shares according to /etc/fstab."
|
description="Mounts network shares according to /etc/fstab."
|
||||||
|
|
||||||
|
get_fs_services()
|
||||||
|
{
|
||||||
|
local fsclient fstype list=$(ls $RC_LIBEXECDIR/netfs/*) services
|
||||||
|
local x
|
||||||
|
for x in $list; do
|
||||||
|
fstype=${x##*/}
|
||||||
|
fstabinfo -q -t ${fstype} && services="${services} $(cat x)"
|
||||||
|
done
|
||||||
|
printf "%s\n" $services
|
||||||
|
}
|
||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
config /etc/fstab
|
config /etc/fstab
|
||||||
use afc-client amd nfsclient autofs openvpn
|
use afc-client amd nfsclient autofs openvpn
|
||||||
use dns
|
use dns
|
||||||
|
local fs_services ="$(get_fs_services)"
|
||||||
|
[ -n "$fs_services" ] && use $fs_services
|
||||||
keyword -jail -prefix -systemd-nspawn -vserver -lxc
|
keyword -jail -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,10 +40,7 @@ start()
|
|||||||
rc=$?
|
rc=$?
|
||||||
fi
|
fi
|
||||||
ewend $rc "Could not mount all network filesystems"
|
ewend $rc "Could not mount all network filesystems"
|
||||||
if [ "$RC_UNAME" != Linux ]; then
|
return 0
|
||||||
rc=0
|
|
||||||
fi
|
|
||||||
return $rc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stop()
|
stop()
|
||||||
|
|||||||
@@ -7,53 +7,43 @@ description="Saves the caches OpenRC uses to non volatile storage"
|
|||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
if [ -e "$RC_SVCDIR"/clock-skewed ]; then
|
if [ -e "$RC_SVCDIR"/clock-skewed ]; then
|
||||||
ewarn "Clock skew detected!"
|
ewarn "WARNING: clock skew detected!"
|
||||||
if ! yesno "${RC_GOINGDOWN}"; then
|
if ! yesno "${RC_GOINGDOWN}"; then
|
||||||
eerror "Not saving deptree cache"
|
eerror "Not saving deptree cache"
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ ! -d "$RC_LIBEXECDIR"/cache ]; then
|
|
||||||
if ! checkpath -W "$RC_LIBEXECDIR"; then
|
if ! checkpath -W "$RC_LIBEXECDIR"; then
|
||||||
eerror "${RC_LIBEXECDIR} is not writable!"
|
ewarn "WARNING: ${RC_LIBEXECDIR} is not writable!"
|
||||||
eerror "Unable to save dependency cache"
|
if ! yesno "${RC_GOINGDOWN}"; then
|
||||||
if yesno "${RC_GOINGDOWN}"; then
|
ewarn "Unable to save deptree cache"
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
rm -rf "$RC_LIBEXECDIR"/cache
|
|
||||||
if ! mkdir -p "$RC_LIBEXECDIR"/cache; then
|
|
||||||
eerror "Unable to create $RC_LIBEXECDIR/cache"
|
|
||||||
eerror "Unable to save dependency cache"
|
|
||||||
if yesno "${RC_GOINGDOWN}"; then
|
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if ! checkpath -W "$RC_LIBEXECDIR"/cache; then
|
|
||||||
eerror "${RC_LIBEXECDIR}/cache is not writable!"
|
|
||||||
eerror "Unable to save dependency cache"
|
|
||||||
if yesno "${RC_GOINGDOWN}"; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
ebegin "Saving dependency cache"
|
ebegin "Saving dependency cache"
|
||||||
local rc=0 save=
|
local rc=
|
||||||
|
if [ ! -d "$RC_LIBEXECDIR"/cache ]; then
|
||||||
|
rm -rf "$RC_LIBEXECDIR"/cache
|
||||||
|
if ! mkdir -p "$RC_LIBEXECDIR"/cache; then
|
||||||
|
rc=$?
|
||||||
|
if yesno "${RC_GOINGDOWN}"; then
|
||||||
|
rc=0
|
||||||
|
fi
|
||||||
|
eend $rc "Unable to create $RC_LIBEXECDIR/cache"
|
||||||
|
return $rc
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
local save=
|
||||||
for x in deptree depconfig shutdowntime 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
|
||||||
cp -p $save "$RC_LIBEXECDIR"/cache
|
cp -p $save "$RC_LIBEXECDIR"/cache 2>/dev/null
|
||||||
|
fi
|
||||||
rc=$?
|
rc=$?
|
||||||
fi
|
|
||||||
if yesno "${RC_GOINGDOWN}"; then
|
if yesno "${RC_GOINGDOWN}"; then
|
||||||
if [ $rc -ne 0 ]; then
|
rc=0
|
||||||
eerror "Unable to save dependency cache"
|
|
||||||
fi
|
fi
|
||||||
eend 0
|
eend $rc
|
||||||
fi
|
|
||||||
eend $rc "Unable to save dependency cache"
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ mount_cgroups()
|
|||||||
mount -n -t cgroup \
|
mount -n -t cgroup \
|
||||||
-o none,${sysfs_opts},name=openrc,release_agent="$agent" \
|
-o none,${sysfs_opts},name=openrc,release_agent="$agent" \
|
||||||
openrc /sys/fs/cgroup/openrc
|
openrc /sys/fs/cgroup/openrc
|
||||||
printf 1 > /sys/fs/cgroup/openrc/notify_on_release
|
echo 1 > /sys/fs/cgroup/openrc/notify_on_release
|
||||||
fi
|
fi
|
||||||
|
|
||||||
yesno ${rc_controller_cgroups:-YES} && [ -e /proc/cgroups ] || return 0
|
yesno ${rc_controller_cgroups:-YES} && [ -e /proc/cgroups ] || return 0
|
||||||
|
|||||||
@@ -221,22 +221,20 @@ done
|
|||||||
# Load our script
|
# Load our script
|
||||||
sourcex "$RC_SERVICE"
|
sourcex "$RC_SERVICE"
|
||||||
|
|
||||||
eval "printf '%s\n' $required_dirs" | while read _d; do
|
for _d in $required_dirs; do
|
||||||
if [ -n "$_d" ] && [ ! -d "$_d" ]; then
|
if [ ! -d $_d ]; then
|
||||||
eerror "$RC_SVCNAME: \`$_d' is not a directory"
|
eerror "$RC_SVCNAME: \`$_d' is not a directory"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
[ $? -ne 0 ] && exit 1
|
|
||||||
unset _d
|
unset _d
|
||||||
|
|
||||||
eval "printf '%s\n' $required_files" | while read _f; do
|
for _f in $required_files; do
|
||||||
if [ -n "$_f" ] && [ ! -r "$_f" ]; then
|
if [ ! -r $_f ]; then
|
||||||
eerror "$RC_SVCNAME: \`$_f' is not readable"
|
eerror "$RC_SVCNAME: \`$_f' is not readable"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
[ $? -ne 0 ] && exit 1
|
|
||||||
unset _f
|
unset _f
|
||||||
|
|
||||||
if [ -n "$opts" ]; then
|
if [ -n "$opts" ]; then
|
||||||
|
|||||||
@@ -54,9 +54,7 @@ cgroup_set_values()
|
|||||||
val=
|
val=
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
[ -n "$val" ] &&
|
val="$val $1"
|
||||||
val="$val $1" ||
|
|
||||||
val="$1"
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
shift
|
shift
|
||||||
@@ -109,21 +107,12 @@ cgroup_set_limits()
|
|||||||
local devices="${rc_cgroup_devices:-$RC_CGROUP_DEVICES}"
|
local devices="${rc_cgroup_devices:-$RC_CGROUP_DEVICES}"
|
||||||
[ -n "$devices" ] && cgroup_set_values devices "$devices"
|
[ -n "$devices" ] && cgroup_set_values devices "$devices"
|
||||||
|
|
||||||
local hugetlb="${rc_cgroup_hugetlb:-$RC_CGROUP_HUGETLB}"
|
|
||||||
[ -n "$hugetlb" ] && cgroup_set_values hugetlb "$hugetlb"
|
|
||||||
|
|
||||||
local memory="${rc_cgroup_memory:-$RC_CGROUP_MEMORY}"
|
local memory="${rc_cgroup_memory:-$RC_CGROUP_MEMORY}"
|
||||||
[ -n "$memory" ] && cgroup_set_values memory "$memory"
|
[ -n "$memory" ] && cgroup_set_values memory "$memory"
|
||||||
|
|
||||||
local net_cls="${rc_cgroup_net_cls:-$RC_CGROUP_NET_CLS}"
|
|
||||||
[ -n "$net_cls" ] && cgroup_set_values net_cls "$net_cls"
|
|
||||||
|
|
||||||
local net_prio="${rc_cgroup_net_prio:-$RC_CGROUP_NET_PRIO}"
|
local net_prio="${rc_cgroup_net_prio:-$RC_CGROUP_NET_PRIO}"
|
||||||
[ -n "$net_prio" ] && cgroup_set_values net_prio "$net_prio"
|
[ -n "$net_prio" ] && cgroup_set_values net_prio "$net_prio"
|
||||||
|
|
||||||
local pids="${rc_cgroup_pids:-$RC_CGROUP_PIDS}"
|
|
||||||
[ -n "$pids" ] && cgroup_set_values pids "$pids"
|
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,13 +4,7 @@
|
|||||||
|
|
||||||
ssd_start()
|
ssd_start()
|
||||||
{
|
{
|
||||||
if [ -z "$command" ]; then
|
[ -n "$command" ] || return 0
|
||||||
ewarn "The command variable is undefined."
|
|
||||||
ewarn "There is nothing for ${name:-$RC_SVCNAME} to start."
|
|
||||||
ewarn "If this is what you intend, please write a start function."
|
|
||||||
ewarn "This will become a failure in a future release."
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
local _background=
|
local _background=
|
||||||
ebegin "Starting ${name:-$RC_SVCNAME}"
|
ebegin "Starting ${name:-$RC_SVCNAME}"
|
||||||
|
|||||||
@@ -298,7 +298,7 @@ find_mounts(struct args *args)
|
|||||||
int netdev;
|
int netdev;
|
||||||
RC_STRINGLIST *list;
|
RC_STRINGLIST *list;
|
||||||
|
|
||||||
if ((fp = fopen("/proc/self/mounts", "r")) == NULL)
|
if ((fp = fopen("/proc/mounts", "r")) == NULL)
|
||||||
eerrorx("getmntinfo: %s", strerror(errno));
|
eerrorx("getmntinfo: %s", strerror(errno));
|
||||||
|
|
||||||
list = rc_stringlist_new();
|
list = rc_stringlist_new();
|
||||||
@@ -315,8 +315,6 @@ find_mounts(struct args *args)
|
|||||||
if ((ent = getmntfile(to))) {
|
if ((ent = getmntfile(to))) {
|
||||||
if (strstr(ent->mnt_opts, "_netdev"))
|
if (strstr(ent->mnt_opts, "_netdev"))
|
||||||
netdev = 0;
|
netdev = 0;
|
||||||
else
|
|
||||||
netdev = 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
process_mount(list, args, from, to, fst, opts, netdev);
|
process_mount(list, args, from, to, fst, opts, netdev);
|
||||||
|
|||||||
@@ -85,12 +85,8 @@ static bool sighup, in_background, deps, dry_run;
|
|||||||
static pid_t service_pid;
|
static pid_t service_pid;
|
||||||
static int signal_pipe[2] = { -1, -1 };
|
static int signal_pipe[2] = { -1, -1 };
|
||||||
|
|
||||||
static RC_STRINGLIST *deptypes_b;
|
static RC_STRINGLIST *types_b, *types_n, *types_nu, *types_nua, *types_m;
|
||||||
static RC_STRINGLIST *deptypes_n;
|
static RC_STRINGLIST *types_mua = NULL;
|
||||||
static RC_STRINGLIST *deptypes_nu;
|
|
||||||
static RC_STRINGLIST *deptypes_nua;
|
|
||||||
static RC_STRINGLIST *deptypes_m;
|
|
||||||
static RC_STRINGLIST *deptypes_mua;
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
handle_signal(int sig)
|
handle_signal(int sig)
|
||||||
@@ -235,12 +231,12 @@ cleanup(void)
|
|||||||
rc_plugin_unload();
|
rc_plugin_unload();
|
||||||
|
|
||||||
#ifdef DEBUG_MEMORY
|
#ifdef DEBUG_MEMORY
|
||||||
rc_stringlist_free(deptypes_b);
|
rc_stringlist_free(types_b);
|
||||||
rc_stringlist_free(deptypes_n);
|
rc_stringlist_free(types_n);
|
||||||
rc_stringlist_free(deptypes_nu);
|
rc_stringlist_free(types_nu);
|
||||||
rc_stringlist_free(deptypes_nua);
|
rc_stringlist_free(types_nua);
|
||||||
rc_stringlist_free(deptypes_m);
|
rc_stringlist_free(types_m);
|
||||||
rc_stringlist_free(deptypes_mua);
|
rc_stringlist_free(types_mua);
|
||||||
rc_deptree_free(deptree);
|
rc_deptree_free(deptree);
|
||||||
rc_stringlist_free(restart_services);
|
rc_stringlist_free(restart_services);
|
||||||
rc_stringlist_free(need_services);
|
rc_stringlist_free(need_services);
|
||||||
@@ -522,30 +518,30 @@ get_started_services(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setup_deptypes(void)
|
setup_types(void)
|
||||||
{
|
{
|
||||||
deptypes_b = rc_stringlist_new();
|
types_b = rc_stringlist_new();
|
||||||
rc_stringlist_add(deptypes_b, "broken");
|
rc_stringlist_add(types_b, "broken");
|
||||||
|
|
||||||
deptypes_n = rc_stringlist_new();
|
types_n = rc_stringlist_new();
|
||||||
rc_stringlist_add(deptypes_n, "ineed");
|
rc_stringlist_add(types_n, "ineed");
|
||||||
|
|
||||||
deptypes_nu = rc_stringlist_new();
|
types_nu = rc_stringlist_new();
|
||||||
rc_stringlist_add(deptypes_nu, "ineed");
|
rc_stringlist_add(types_nu, "ineed");
|
||||||
rc_stringlist_add(deptypes_nu, "iuse");
|
rc_stringlist_add(types_nu, "iuse");
|
||||||
|
|
||||||
deptypes_nua = rc_stringlist_new();
|
types_nua = rc_stringlist_new();
|
||||||
rc_stringlist_add(deptypes_nua, "ineed");
|
rc_stringlist_add(types_nua, "ineed");
|
||||||
rc_stringlist_add(deptypes_nua, "iuse");
|
rc_stringlist_add(types_nua, "iuse");
|
||||||
rc_stringlist_add(deptypes_nua, "iafter");
|
rc_stringlist_add(types_nua, "iafter");
|
||||||
|
|
||||||
deptypes_m = rc_stringlist_new();
|
types_m = rc_stringlist_new();
|
||||||
rc_stringlist_add(deptypes_m, "needsme");
|
rc_stringlist_add(types_m, "needsme");
|
||||||
|
|
||||||
deptypes_mua = rc_stringlist_new();
|
types_mua = rc_stringlist_new();
|
||||||
rc_stringlist_add(deptypes_mua, "needsme");
|
rc_stringlist_add(types_mua, "needsme");
|
||||||
rc_stringlist_add(deptypes_mua, "usesme");
|
rc_stringlist_add(types_mua, "usesme");
|
||||||
rc_stringlist_add(deptypes_mua, "beforeme");
|
rc_stringlist_add(types_mua, "beforeme");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -608,10 +604,10 @@ svc_start_deps(void)
|
|||||||
|
|
||||||
if (!deptree && ((deptree = _rc_deptree_load(0, NULL)) == NULL))
|
if (!deptree && ((deptree = _rc_deptree_load(0, NULL)) == NULL))
|
||||||
eerrorx("failed to load deptree");
|
eerrorx("failed to load deptree");
|
||||||
if (!deptypes_b)
|
if (!types_b)
|
||||||
setup_deptypes();
|
setup_types();
|
||||||
|
|
||||||
services = rc_deptree_depends(deptree, deptypes_b, applet_list,
|
services = rc_deptree_depends(deptree, types_b, applet_list,
|
||||||
runlevel, 0);
|
runlevel, 0);
|
||||||
if (TAILQ_FIRST(services)) {
|
if (TAILQ_FIRST(services)) {
|
||||||
eerrorn("ERROR: %s needs service(s) ", applet);
|
eerrorn("ERROR: %s needs service(s) ", applet);
|
||||||
@@ -629,9 +625,9 @@ svc_start_deps(void)
|
|||||||
rc_stringlist_free(services);
|
rc_stringlist_free(services);
|
||||||
services = NULL;
|
services = NULL;
|
||||||
|
|
||||||
need_services = rc_deptree_depends(deptree, deptypes_n,
|
need_services = rc_deptree_depends(deptree, types_n,
|
||||||
applet_list, runlevel, depoptions);
|
applet_list, runlevel, depoptions);
|
||||||
use_services = rc_deptree_depends(deptree, deptypes_nu,
|
use_services = rc_deptree_depends(deptree, types_nu,
|
||||||
applet_list, runlevel, depoptions);
|
applet_list, runlevel, depoptions);
|
||||||
|
|
||||||
if (!rc_runlevel_starting()) {
|
if (!rc_runlevel_starting()) {
|
||||||
@@ -659,7 +655,7 @@ svc_start_deps(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Now wait for them to start */
|
/* Now wait for them to start */
|
||||||
services = rc_deptree_depends(deptree, deptypes_nua, applet_list,
|
services = rc_deptree_depends(deptree, types_nua, applet_list,
|
||||||
runlevel, depoptions);
|
runlevel, depoptions);
|
||||||
/* We use tmplist to hold our scheduled by list */
|
/* We use tmplist to hold our scheduled by list */
|
||||||
tmplist = rc_stringlist_new();
|
tmplist = rc_stringlist_new();
|
||||||
@@ -864,10 +860,10 @@ svc_stop_deps(RC_SERVICE state)
|
|||||||
if (!deptree && ((deptree = _rc_deptree_load(0, NULL)) == NULL))
|
if (!deptree && ((deptree = _rc_deptree_load(0, NULL)) == NULL))
|
||||||
eerrorx("failed to load deptree");
|
eerrorx("failed to load deptree");
|
||||||
|
|
||||||
if (!deptypes_m)
|
if (!types_m)
|
||||||
setup_deptypes();
|
setup_types();
|
||||||
|
|
||||||
services = rc_deptree_depends(deptree, deptypes_m, applet_list,
|
services = rc_deptree_depends(deptree, types_m, applet_list,
|
||||||
runlevel, depoptions);
|
runlevel, depoptions);
|
||||||
tmplist = rc_stringlist_new();
|
tmplist = rc_stringlist_new();
|
||||||
TAILQ_FOREACH_REVERSE(svc, services, rc_stringlist, entries) {
|
TAILQ_FOREACH_REVERSE(svc, services, rc_stringlist, entries) {
|
||||||
@@ -927,7 +923,7 @@ svc_stop_deps(RC_SERVICE state)
|
|||||||
|
|
||||||
/* We now wait for other services that may use us and are
|
/* We now wait for other services that may use us and are
|
||||||
* stopping. This is important when a runlevel stops */
|
* stopping. This is important when a runlevel stops */
|
||||||
services = rc_deptree_depends(deptree, deptypes_mua, applet_list,
|
services = rc_deptree_depends(deptree, types_mua, applet_list,
|
||||||
runlevel, depoptions);
|
runlevel, depoptions);
|
||||||
TAILQ_FOREACH(svc, services, entries) {
|
TAILQ_FOREACH(svc, services, entries) {
|
||||||
if (rc_service_state(svc->value) & RC_SERVICE_STOPPED)
|
if (rc_service_state(svc->value) & RC_SERVICE_STOPPED)
|
||||||
|
|||||||
Reference in New Issue
Block a user