summaryrefslogtreecommitdiff
path: root/init.d/sysctl.in
blob: 5fdad8dcfa82360292bd043227cffc54fb0e1d63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!@SBINDIR@/openrc-run
# Copyright (c) 2007-2015 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/HEAD/AUTHORS
#
# This file is part of OpenRC. It is subject to the license terms in
# the LICENSE file found in the top-level directory of this
# distribution and at https://github.com/OpenRC/openrc/blob/HEAD/LICENSE
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.

depend()
{
	after clock
	before bootmisc logger
	keyword -prefix -systemd-nspawn -vserver
}

BSD_sysctl()
{
	[ -e /etc/sysctl.conf ] || return 0
	local retval=0 var= comments= conf=
	eindent
	for conf in /etc/sysctl.conf /etc/sysctl.d/*.conf; do
		if [ -r "$conf" ]; then
			vebegin "applying $conf"
			while read var comments; do
				case "$var" in
				""|"#"*) continue;;
				esac
				sysctl -w "$var" >/dev/null || retval=1
			done < "$conf"
			veend $retval
		fi
	done
	eoutdent
	return $retval
}

linux_sysctl()
{
	local quiet
	yesno $rc_verbose || quiet=-q

	# if sysctl supports --system, use it, otherwise implement
	# our own uapi config mechanism with -p.
	# notably, busybox's and toybox's sysctl do not support --system.
	sysctl ${quiet} --system && return 0

	eindent

	local files=
	for f in /lib/sysctl.d/*.conf /usr/lib/sysctl.d/*.conf; do
		if  [ -f /etc/sysctl.d/"${f##*/}" ]; then
			veinfo "Ignoring $f due to /etc/sysctl.d/${f##*/}"
			continue
		fi

		if [ -f /run/sysctl.d/"${f##*/}" ]; then
			veinfo "Ignoring $f due to /run/sysctl.d/${f##*/}"
			continue
		fi

		if [ -f "$f" ]; then
			ebegin "applying $f"
			sysctl $quiet -p "$f"
			# Don't change retval= since we expect some package/distro provided
			# sysctl configurations to break, so just warn when the user wants
			# verbose messages
			ewend $? "Unable to configure kernel parameters from $f"
		fi
	done

	for f in /etc/sysctl.d/*.conf; do
		if [ -f /run/sysctl.d/"${f##*/}" ]; then
			veinfo "Ignoring $f due to /run/sysctl.d/${f##*/}"
			continue
		fi

		files="$files $f"
	done

	[ -f /etc/sysctl.conf ] && files="$files /etc/sysctl.conf"

	for f in /run/sysctl.d/*.conf; do
		[ -f "$f" ] && files="$files $f"
	done

	for f in $files; do
		ebegin "Applying $f"
		sysctl $quiet -p "$f"
		if ! eend $? "Unable to configure kernel parameters from $f"; then
			retval=1
		fi
	done

	eoutdent

	return $retval
}

start()
{
	local rc=0

	ebegin "Configuring kernel parameters"
	case "$RC_UNAME" in
	*BSD|GNU) BSD_sysctl; rc=$? ;;
	Linux) linux_sysctl; rc=$? ;;
	esac
	eend $rc "Unable to configure some kernel parameters"
}