Compare commits

..

81 Commits

Author SHA1 Message Date
Daniel Robbins
7146e99855 Revert "Unprivileged users (such as services for example) should not be able view who is logged into system."
This reverts commit 62bd337494.

It's a bit too restrictive for a default install, as it also prevents "who" from working on user accounts.
2011-06-20 22:14:53 -06:00
Daniel Robbins
e65ce9e301 Merge remote-tracking branch 'gentoo/master' 2011-06-04 17:04:04 -06:00
Mike Frysinger
7ca74d7636 fix underquoting of wrapped color stubs of exit status
X-Gentoo-Bug: 369911
X-Gentoo-Bug-URL: http://bugs.gentoo.org/369911
Reported-by: Steve Dibb <beandog@gentoo.org>
Reported-by: Christian Ruppert <idl0r@gentoo.org>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-06-03 20:41:43 -04:00
Mike Frysinger
e49da2af91 clean up gitignore files
Rather than listing explicit object files, ignore all of them in
the whole tree.

Also ignore patch/gdb related files throughout.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-06-03 17:07:22 -04:00
Diego Elio Pettenò
a2c8e5ce50 Don't set hostname on containers.
LXC already provides a means to set the utsname/hostname of the system, so
avoid overriding the user's configuration through hostname here.

Signed-off-by: Diego Elio Pettenò <flameeyes@gmail.com>
2011-06-02 11:34:13 -05:00
Mike Frysinger
11d8b70d74 rc-update: sort "show" output
X-Gentoo-Bug: 367305
X-Gentoo-Bug-URL: http://bugs.gentoo.org/367305
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-05-28 12:11:37 -04:00
Mike Frysinger
227f831639 cc.mk: move debug.mk out of end Makefiles
Since we always want debug.mk whenever we include cc.mk, move the include
out of the Makefiles and into cc.mk itself.  This also fixes an include
order bug in rc/Makefile where debug.mk is included before cc.mk and
breaks the default CFLAGS setup in cc.mk.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-05-28 12:00:34 -04:00
Mike Frysinger
98d3b407fe cc.mk: enable -g by default
Can do no harm!

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-05-28 12:00:13 -04:00
Mike Frysinger
fe18c7bb63 librc: tweak style: foo () -> foo()
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-05-28 11:53:29 -04:00
Mike Frysinger
f8ff4a86a3 rc: delete now unused local "i" variable
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-05-28 11:42:49 -04:00
Christian Ruppert
d59e245bc7 Fix dirname calls in runscript
runscript will try to get the dir and basename of a file/link in case it
contains at least one slash. This patch gives a temporary copy of the path to
the dirname() function since dirname() can modify its argument.
2011-05-23 14:23:15 -05:00
William Hubbs
74c8667497 fix keymaps config file to show the correct variable name
X-Gentoo-Bug: 367283
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=367283
2011-05-17 13:06:55 -05:00
Mike Frysinger
3d56124ed1 only warn about /run if it exists
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-05-16 18:49:21 -04:00
Mike Frysinger
bb34ea886a drop rc_sys funcs from removal schedule
The automagic detection isn't really problematic, and we allow people to
easily override this when detection isn't possible.  On the other hand,
if people haven't configured rc_sys in their rc.conf, the lack of auto
detection can easily lead to an unbootable system.

Further, we're attempting to have a stable shared library ABI, which
dropping funcs from is not feasible.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-05-16 18:00:18 -04:00
William Hubbs
fd48bc09ff net:bonding small style change for readability 2011-05-16 14:57:46 -05:00
Kfir Lavi
db1daa5857 Do not add slaves to bond interface if they are already added
X-Gentoo-Bug: 366653
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=366653
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
2011-05-16 09:21:18 -04:00
Mike Frysinger
2493a1f32e net: ccwgroup: forward port changes from baselayout-1
Quite a bit of work happened in baselayout-1 on the ccwgroup module, but
seems it didn't make it into openrc.  So forward port all the existing
code so we can work with more than just qeth and layer2 options.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-05-16 01:22:32 -04:00
William Hubbs
40341fcd7e do not run services if openrc did not boot the system
X-Gentoo-Bug: 364159
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=364159
2011-05-11 14:54:41 -05:00
James Le Cuirot
8fcaba9a22 fix rc_service_extra_commands return value
If there were no extra commands, rc_service_extra_commands returned a
list containing a single empty string. This changes that to return an
empty list, which is more consistent with what you would expect.

X-Gentoo-Bug: 360013
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=360013
2011-04-27 15:27:16 -05:00
William Hubbs
04e256e3b8 fix list returned by rc_service_extra_commands
This function was returning the setting of the variable $opts, which is
not correct. $opts was used in baselayout-1, but it is replaced by
$extra_commands and $extra_started_commands in openrc.

This does not appear to break backward compatibility since this function
does not appear to be used anywhere in the openrc code.

Thanks to James Le Cuirot for the original patch.

X-Gentoo-Bug: 360013
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=360013
2011-04-27 14:46:59 -05:00
William Hubbs
b712a9161f change udhcpc support to busybox udhcpc
This updates the udhcpc support to use busybox's udhcpc instead of the
stand alone version.

I would like to thank jackieku <kjackie@gmail.com> for assisting with
this update.

X-Gentoo-Bug: 205286
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=205286
2011-04-26 15:25:08 -05:00
William Hubbs
8202e7dce4 add back the eend command in start/stop for local service
This was added back due to a user request. It will always be on a line
of its ownbecause I'm considering adding more verbose info messages to
local that show when each service is run if local is run with the -v
option.

X-Gentoo-Bug: 363343
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=363343
2011-04-21 13:02:49 -05:00
Robin H. Johnson
2d197357ef [oldnet] Bug #363959: Improve plug_timeout ifplugd/netplugd code.
- Add support for a global plug_timeout setting to match the
  documentation.
- Update the documentation to also show per-interface configuration.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2011-04-19 17:49:20 +00:00
William Hubbs
b6409feaac fix permissions for /run/lock
If /run/lock is a directory, set the ownership and permissions for it,
whether or not we created the directory.
2011-04-19 10:56:14 -05:00
Lars Wendler
ede4d1cd60 Don't unmount /run on shutdown
This is needed so that udev will stop properly on shutdown.

X-Gentoo-Bug: 363971
X-Gentoo-Bug-Url: http://bugs.gentoo.org/show_bug.cgi?id=363971
2011-04-18 15:26:19 -05:00
Amadeusz Żołnowski
64ef51ab09 Add support for /run directory
This is a new directory for storing volatile runtime data.
See https://lwn.net/Articles/436012

X-Gentoo-Bug: 363971
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=363971
2011-04-18 15:26:13 -05:00
William Hubbs
372bae3213 make rc_sys system specific
This rearranges the configuration files so it is more clear that the
rc_sys setting is system specific.

X-Gentoo-Bug: 363957
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=363957
2011-04-18 14:42:02 -05:00
Anthony G. Basile
ac56ab7f6d Check for /sys/module/usbcore before modprobe usbcore
The use of /proc/bus/usb to mount usbfs has been deprecated, but
the option is still available in the kernel.  The new approach is
to use /sys.  We should not modprobe usbcore if either /proc/bus/usb
or /sys/module/usbcore exist.

X-Gentoo-Bug: 363551
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=363551
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
2011-04-17 09:12:20 -04:00
William Hubbs
ad8f455726 release openrc-0.8.2 2011-04-15 19:48:30 -05:00
William Hubbs
de0ded4ed0 revert changes for bug #292894
This is being done because these dependency changes caused a regression.
We will need to revisit the previously mentioned bug.

X-Gentoo-Bug: 363693
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=363693
2011-04-15 19:21:20 -05:00
Sebastian Thorarensen
75722dac4e termencoding should run after bootmisc
This change is necessary so that the unicode flag is not erased by
bootmisc.

X-Gentoo-Bug: 363611
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=363611
2011-04-14 15:21:02 -05:00
William Hubbs
2d14b172fa release openrc 0.8.1 2011-04-12 08:47:03 -05:00
William Hubbs
03cd55aa19 start loopback interface before mtab
X-Gentoo-Bug: 292894
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=292894
2011-04-11 15:33:41 -05:00
William Hubbs
85827d474c remove "after bootmisc" dependency from loopback interface 2011-04-10 17:24:44 -05:00
William Hubbs
8e925368b7 bring up the loopback interface earlier
For most situations, the loopback interface can depend on root instead
of localmount, so this patch makes that happen. It also adds comments to
the net.example files explaining when a user might want to change this
and giving an example.

I would like to thank Robin Johnson for the original patch and suggested
examples.

X-Gentoo-Bug: 292894
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=292894

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2011-04-10 16:10:47 -05:00
William Hubbs
15660dbbfc add fallback_routes support to network scripts
Add support for optional fallback_routes_* variables in the network scripts.
This is similar to the fallback_route_* support in baselayout-1.
However, if you do not have fallback_routes set for an interface but you
do have routes set, that setting will be used, so you do not need this
variable unless you want the fallback routes to be different from the
primary routes.

X-Gentoo-Bug: 250978
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=250978
2011-04-09 13:54:01 -05:00
William Hubbs
07db27d220 typo fix
X-Gentoo-Bug: 217999
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=217999
2011-04-09 13:00:44 -05:00
William Hubbs
16f7e90c6c clarify documentation for -timeout keyword 2011-04-08 14:08:29 -05:00
William Hubbs
c7c278dfd4 do not timeout waiting for bootmisc to complete
It is possible for bootmisc to take longer than 60 seconds to complete
and services should not time out waiting for it.

X-Gentoo-Bug: 360405
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=360405
2011-04-08 14:01:13 -05:00
William Hubbs
73c862b792 fix typo in ethtool.sh
This was causing the ethtool interface to not work.

X-Gentoo-Bug: 360481
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=360481
2011-04-07 07:48:56 -05:00
William Hubbs
46e67badd2 fix typo in staticroute
X-Gentoo-Bug: 362205
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=362205
2011-04-07 07:19:53 -05:00
William Hubbs
67640d2d97 remove hard coded directory paths from link flags
Currently, we do not see a reason for these, and it causes an issue for
cross compilation.

X-Gentoo-Bug: 361465
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=361465
2011-04-01 17:32:12 -05:00
Robin H. Johnson
8a45d5e24e Bug #360963: Improve interface naming/set_name_type documentation on new vlan code.
This is primarily for users with set_name_type settings from previous
sysadmins can easily see what changes to make.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2011-03-29 07:54:50 +00:00
Marc Joliet
6e1239795f remove bashism from ethtool module
X-Gentoo-Bug: 360367
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=360367
2011-03-27 15:45:45 -05:00
Mike Frysinger
7c1a2defb6 bootmisc: clean up tmpdir cleaning
Make sure that the `cd` into the $dir actually happened.  This we don't
have to worry about relative paths deleting stuff it shouldn't.  This
step shouldn't fail, but who knows, and better to be sane than to wipe
out someone's valuables.

When wiping, automatically fall back to a dedicated `find` if the initial
`rm` failed on us.  This should help with the speed issues related to the
later `find`.

Have the later find only search the top level allowing `rm` to walk the
directory contents.  This means that -xdev no longer applies, but since
the earlier `rm` wasn't doing -xdev either and no one has complained thus
far, let's assume it isn't an issue.  Also convert to the -exec...+ form
so that we don't have to worry about long argument lists, and add -- to
the `rm` that was previously missing.  In practice, this shouldn't matter
as we've already deleted all those files, but better safe than sorry.

When cleaning, since we've already done a `cd` into the $dir, no point in
prefixing all the paths with $dir too.  Go with the relative loving.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
X-Gentoo-Bug: 359831
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=359831
2011-03-25 11:25:25 -05:00
William Hubbs
1d63e85794 rework test for mounted /proc
The previous test assumed that we could always rely on the minor fault
counter to change between reads of /proc/self/stat, but we found that
this is not the case.

The new test compares two reads of /proc/self/environ for which we have
set the same environment variable to two different values.
If the comparison shows the two reads have the same contents, we know
that /proc is not working.

I would like to thank Robin Johnson and Mike Frysinger for their input
for this patch.

X-Gentoo-Bug: 348416
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=348416
2011-03-24 19:14:16 -05:00
William Hubbs
25049d3e80 termencoding needs root to be mounted read/write
X-Gentoo-Bug: 360215
X-Gentoo-Bug-URL: http://bugs.gentoo.org/360215
2011-03-23 22:41:03 -05:00
William Hubbs
b875abd1a5 release openrc-0.8.0 2011-03-22 00:46:24 -05:00
William Hubbs
c020454c84 update documentation for windowkeys variable
The documentation makes a recommendation for the setting but does not
state the purpose of the variable.

X-Gentoo-Bug: 357869
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=357869
2011-03-22 00:34:50 -05:00
Ed Wildgoose
60d8d4f5bb do not delete addresses when stopping a ppp interface.
This is important in situations where ppp is being used in a demand
dialing setup.

X-Gentoo-Bug: 359069
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=359069
2011-03-21 23:55:55 -05:00
William Hubbs
c9912942f0 update documentation for rc_sys
Originally the plan was to deprecate this code, but this will not be
happening. There are some subsystems which can still be autodetected, so
we are keeping this code and allowing users to override the automatic
detection with this variable as well as set it to other subtypes we
cannot autodetect.

X-Gentoo-Bug: 357247
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=357247
2011-03-21 23:04:08 -05:00
Mike Frysinger
9f5eb03e5e net: bonding: avoid using bash string replace
X-Gentoo-Bug: 359311
X-Gentoo-Bug-URL: http://bugs.gentoo.org/359311
Reported-by: Raffaello D. Di Napoli <fastijum@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-03-18 14:24:18 -04:00
Mike Frysinger
d7e48fe643 rc_sys: let default behavior be automagic
The default rc_sys behavior was changed to always require manual
intervention by users.  This pretty much breaks all of the diff
system variants out there if people don't explicitly edit their
rc.conf file ahead of time.  We should have things work "out of
the box" as much as possible and reasonable.

X-Gentoo-Bug: 357247
X-Gentoo-Bug-URL: http://bugs.gentoo.org/357247
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-03-14 20:35:08 -05:00
William Hubbs
87302487d2 savecache should not fail if we are shutting down
Since mount-ro needs to run unconditionally, we need to have savecache
report that it ran successfully when the system is shutting down.

X-Gentoo-Bug: 356393
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=356393
2011-03-06 11:50:06 -06:00
William Hubbs
0f3d6a01c7 remove references to the migration guide
The openrc code base is not gentoo specific, so I feel that we should
not refer to the migration guide in the comments inside the configuration
files.
2011-03-05 00:11:24 -06:00
William Hubbs
3fca6bd027 allow default rc_sys value to be set at build time
This allows the default value of rc_sys to be set when openrc is
compiled. This will allow openrc to be installed, e.g. on vserver guests
and will allow them to be rebooted without the need to edit rc.conf.

This patch is a combined effort between myself and Robin Johnson.

X-Gentoo-Bug: 357247
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=357247
2011-03-05 00:04:06 -06:00
William Hubbs
202fa20cbc fix typo 2011-03-03 15:06:39 -06:00
Robin H. Johnson
dfd42d1393 net/ethtool: official interface for changing ethtool params (bug #195479)
Implement a consistent interface for changing ethtool parameters, as
suggested in bug 195479. All variable names are based on the long option
to ethtool to set each group of parameters. Multiple entries seperated
by newlines are permitted for variable values.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Gentoo-Bug: 195479
2011-02-22 02:59:38 +00:00
Robin H. Johnson
22918ccf51 Update README.net to note that it represents newnet only. 2011-02-22 01:27:31 +00:00
Robin H. Johnson
20480048ca net/iproute2: Pass required explicit -6 for IPv6 tunnels (#347657)
Tunnel modes ipip6 and ip6ip6 require an explicit family selection for
the ip tunnel call.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Gentoo-Bug: 347657
2011-02-21 09:55:47 +00:00
Robin H. Johnson
683a21b0a0 net/vlan: update to use modern iproute2 interface
This replaces the vlan setup code that previously used the old vconfig
binary with a new implementation using the iproute2 interface.

vconfig does not handle many of the newer setups. No automatic migration
path is provided, as altering the configuration is non-trivial.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
Written-by: Guillaume Castagnino <casta@xwing.info>
X-Gentoo-Bug: 346365
2011-02-21 09:41:48 +00:00
William Hubbs
b512d0db98 new implementation of applet option
This reworks the implementation of the --applet option so that it is
processed in run_applets() and does not require two calls to the
getopts_long() function. It is based on code by Robin Johnson and Chris
Richards.

X-Gentoo-Bug: 351712
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=351712
2011-02-16 09:00:38 -06:00
William Hubbs
73d1a8698e make version option common
This reworks the code for the version option so that it is part of the
parser loop and is a common option to all applets.
2011-02-14 18:40:05 -06:00
Sebastian Thorarensen
bae0a693a9 Set unicode mode immediately at boot without consolefont
X-Gentoo-Bug: 354793
X-Gentoo-Bug-URL: http://bugs.gentoo.org/354793
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
2011-02-14 18:54:35 -05:00
Mike Frysinger
35d38c3561 local: quote script names to handle spaces
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-02-14 12:06:58 -05:00
Mike Frysinger
c0aa27ef32 tests: filter valid parisc relocs
Parisc generates a few relocs against internal symbols which are OK.

X-Gentoo-Bug: 258913
X-Gentoo-Bug-URL: http://bugs.gentoo.org/258913
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-02-14 12:06:58 -05:00
Mike Frysinger
11fcb0217e hwclock: fix typo from an earlier style commit
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-02-14 12:06:58 -05:00
Anthony G. Basile
c8b5078660 Fix bug #354805 2011-02-14 04:41:08 -05:00
Christian Wetzig
7bc920ab56 fix typo in iproute2 module
X-Gentoo-Bug: 354511
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=354511
2011-02-12 13:34:46 -06:00
William Hubbs
ebd79394a3 set timezone if RC_HCTOSYS is not set
We need to set the timezone for the system clock even when we allow the
kernel to set the time.

X-Gentoo-Bug: 248131
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=248131
2011-02-09 23:15:24 -06:00
William Hubbs
04379b2de9 fix symlink target
The target for the symlinks in ${SBINDIR} (the same directory as the rc
binary) was "rc". This is not correct; the target should be
${SBINDIR}/rc instead.
2011-02-07 02:25:00 -06:00
Christian
43678fd2c4 bridge.sh: use correct POSIX test, = not ==
X-Gentoo-Bug: 353124
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=353124
2011-02-05 07:24:11 -06:00
William Hubbs
db6d680765 rework pam, ncurses and termcap include files
This allows error checking inside the included files instead of either
including the appropriate file or a blank file.

Also the blank file named .mk gets removed by this change.
2011-02-04 22:30:30 -06:00
William Hubbs
a2e9cde737 remove BSD make code to handle including .depend 2011-02-04 22:28:57 -06:00
William Hubbs
aaaea44d22 use make conditional for -cstd flag
cc.mk was using ashell call to determine the value of the cstd variable.
This reworks that code so it uses a make conditional.
2011-02-04 22:26:23 -06:00
William Hubbs
19037cbd83 remove unnecessary shell calls
The main makefile, init.d/Makefile and src/librc/Makefile all contain
several shell calls which can be handled as make conditionals. This
switches them to conditionals.
2011-02-04 17:46:57 -06:00
Chris Richards
21c5a022af selinux: replace symlinks with wrapper scripts
This needs to be done on selinux systems so the proper context can be
set for each rc applet.

X-Gentoo-Bug: 351712
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=351712
2011-01-31 14:54:02 -06:00
William Hubbs
cca7e9f7e1 use immediate evaluation for shell calls
This reworks the shell calls in the makefiles to use immediate
evaluation and should improve parallel building.

X-Gentoo-Bug: 289264
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=289264
2011-01-31 14:05:57 -06:00
William Hubbs
c2529c1ed6 only support building with GNU Make
Update the documentation to state that openrc only works with gnu make.
This needs to be done in order to address the parallel build issue.

X-Gentoo-Bug: 289264
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=289264
2011-01-31 14:03:45 -06:00
William Hubbs
fa1fefb2bc add option to disable setting the system clock on boot for linux systems
This commit adds the clock_hctosys option which is used to skip setting
the system clock on boot and can be used with a modern linux kernel
which has the CONFIG_RTC_HCTOSYS option set to y.
I would like to thank Dimitris Mandalidis for the report and for the
patch to baselayout-1 on which my changes to openrc are based.

X-Gentoo-Bug: 248131
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=248131
2011-01-24 21:37:51 -06:00
William Hubbs
10ce67886d change local to run programs
This changes the local service so that it will run programs located in
@sysconfdir@/local.d instead of the local_start and local_stop functions
from @sysconfdir@/conf.d/local.

The advantage for the user is that these programs are not part
of the openrc package, so the user does not have to worry about them
being overwritten when openrc is upgraded.

X-Gentoo-Bug: 351465
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=351465
2011-01-20 12:50:29 -06:00
81 changed files with 825 additions and 412 deletions

15
.gitignore vendored
View File

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

View File

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

View File

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

View File

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

18
README
View File

@@ -5,7 +5,7 @@ Installation
------------
make install
Yup, that simple. Works with GNU make and BSD make.
Yup, that simple. Works with GNU make.
You may wish to tweak the installation with the below arguments
PROGLDFLAGS=-static
@@ -13,6 +13,8 @@ LIBNAME=lib64
DESTDIR=/tmp/openrc-image
MKPAM=pam
MKPKGCONFIG=no
MKRCSYS=prefix
MKSELINUX=yes
MKTERMCAP=ncurses
MKTERMCAP=termcap
MKOLDNET=yes
@@ -33,6 +35,20 @@ LOCAL_PREFIX should be set when to where user maintained packages are.
Only set LOCAL_PREFIX if different from PKG_PREFIX.
PREFIX should be set when OpenRC is not installed to /.
MKRCSYS should be set only if you need to specify a default system
subtype. The subtype should be set to match the type of environment the
file is installed into, not the virtualization the environment is
capable of handling. Here is a list of subtypes and their meanings.
jail FreeBSD jail
lxc Linux container
openvz Linux OpenVZ
prefix Linux and *BSD prefix system
uml UsermodeLinux
vserver Linux vserver
xen0 Linux and NetBSD xen0 Domain
xenU Linux and NetBSD xenU Domain
If any of the following files exist then we do not overwrite them
/etc/devd.conf
/etc/rc

View File

@@ -1,3 +1,7 @@
The following applies only to the newnet stack, which is not presently
maintained in OpenRC. The oldnet stack is maintained instead.
- Robin H. Johnson <robbat2@gentoo.org>, 2011/02/21
OpenRC Network Ideals
---------------------

View File

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

View File

@@ -9,6 +9,14 @@ clock="UTC"
# You normally don't need to do this if you run a ntp daemon.
clock_systohc="NO"
# If you want to set the system time to the current hardware clock
# during bootup, then say "YES" here. You do not need this if you are
# running a modern kernel with CONFIG_RTC_HCTOSYS set to y.
# Also, be aware that if you set this to "NO", the system time will
# never be saved to the hardware clock unless you set
# clock_systohc="YES" above.
clock_hctosys="YES"
# If you wish to pass any other arguments to hwclock during bootup,
# you may do so here. Alpha users may wish to use --arc or --srm here.
clock_args=""

View File

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

View File

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

View File

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

View File

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

View File

@@ -8,5 +8,14 @@ include ${MK}/os.mk
include Makefile.${OS}
include ${MK}/scripts.mk
# We can't use "ifndef" here because that treats set-but-empty
# as not-set which is not what we want
MKRCSYS ?= automagicplease
ifeq ($(MKRCSYS),automagicplease)
# If the user isn't picking a default, then have the
# config go with runtime automagic detection #357247
rc.conf: SED_EXTRA += -e '/^rc_sys=""/s:^:\#:'
MKRCSYS =
endif
rc.conf: rc.conf.in rc.conf.${OS}
${SED} ${SED_REPLACE} ${SED_EXTRA} $^ > $@

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

6
local.d/Makefile Normal file
View File

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

9
local.d/README Normal file
View File

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

View File

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

0
mk/.mk
View File

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -8,11 +8,11 @@ include ${MK}/os.mk
OBJS+= ${SRCS:.in=}
_PKG_SED_SH= if test "${PREFIX}" = "${PKG_PREFIX}"; then echo "-e 's:@PKG_PREFIX@::g'"; else echo "-e 's:@PKG_PREFIX@:${PKG_PREFIX}:g'"; fi
_PKG_SED!= ${_PKG_SED_SH}
_PKG_SED:= $(shell ${_PKG_SED_SH})
_LCL_SED_SH= if test "${PREFIX}" = "${LOCAL_PREFIX}"; then echo "-e 's:@LOCAL_PREFIX@::g'"; else echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; fi
_LCL_SED!= ${_LCL_SED_SH}
_LCL_SED:= $(shell ${_LCL_SED_SH})
SED_REPLACE= -e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' ${_PKG_SED}$(shell ${_PKG_SED_SH}) ${_LCL_SED}$(shell ${_LCL_SED_SH})
SED_REPLACE= -e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' -e 's:@RC_SYS_DEFAULT@:${MKRCSYS}:g' ${_PKG_SED} ${_LCL_SED}
# Tweak our shell scripts
.SUFFIXES: .sh.in .in

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

54
net/ethtool.sh Normal file
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

1
sh/.gitignore vendored
View File

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

View File

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

View File

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

View File

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

View File

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

117
sh/udhcpc-hook.sh.in Normal file
View File

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

View File

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

View File

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

14
src/librc/.gitignore vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

17
src/rc/.gitignore vendored
View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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