Commit graph

181 commits

Author SHA1 Message Date
Kay Sievers b30e2f4c18 move libsystemd_core.la sources into core/ 2012-04-11 16:03:51 +02:00
Lennart Poettering 71ecc858fa main: drop container/initrd env vars from inherited set
Leave the env vars used in the container/initrd logic set for PID1, but
don't inherit them to any children.
2012-04-11 13:20:34 +02:00
Kay Sievers 49e942b2bc rename basic.la to shared.la and put selinux deps in shared-selinx.la
Only 34 of 74 tools need libselinux linked, and libselinux is a pain
with its unconditional library constructor.
2012-04-10 22:43:05 +02:00
Lennart Poettering e96d6be763 systemd: add hardware watchdog support
This adds minimal hardware watchdog support to PID 1. The idea is that
PID 1 supervises and watchdogs system services, while the hardware
watchdog is used to supervise PID 1.

This adds two hardware watchdog configuration options, for the runtime
watchdog and for a shutdown watchdog. The former is active during normal
operation, the latter only at reboots to ensure that if a clean reboot
times out we reboot nonetheless.

If the runtime watchdog is enabled PID 1 will automatically wake up at
half the configured interval and write to the watchdog daemon.

By default we enable the shutdown watchdog, but leave the runtime
watchdog disabled in order not to break independent hardware watchdog
daemons people might be using.

This is only the most basic hookup. If necessary we can later on hook
up the watchdog ping more closely with services deemed crucial.
2012-04-05 22:15:29 +02:00
Michal Schmidt bacbccb78c manager: tell correctly if the manager is booting
The assumption that the initial job is the job with id==1 is incorrect.
Some jobs may be enqueued before the job that starts the default unit as
in this example:

 -.mount changed dead -> mounted
 Trying to enqueue job quotacheck.service/start/fail
 Installed new job quotacheck.service/start as 1
 Installed new job systemd-stdout-syslog-bridge.socket/start as 2
 Enqueued job quotacheck.service/start as 1
 Trying to enqueue job quotaon.service/start/fail
 Installed new job quotaon.service/start as 5
 Enqueued job quotaon.service/start as 5
 Activating default unit: default.target
 Trying to enqueue job graphical.target/start/replace

This fixes a bug where displaying of boot status messages was turned off
too early.
2012-02-02 13:39:15 +01:00
Lennart Poettering 88f0664562 manager: don't place units in the 'cpu' group when run as user instance, for now 2012-01-18 15:41:21 +01:00
Michal Schmidt 595ed347a8 unit: use safe downcasts, remove pointless casts
Always use the macros for downcasting.
Remove a few obviously pointless casts.
2012-01-16 13:34:42 +01:00
Michal Schmidt ac155bb885 unit: remove union Unit
Now that objects of all unit types are allocated the exact amount of
memory they need, the Unit union has lost its purpose. Remove it.

"Unit" is a more natural name for the base unit class than "Meta", so
rename Meta to Unit.

Access to members of the base class gets simplified.
2012-01-16 13:34:42 +01:00
Michal Schmidt 7d17cfbc46 unit: reduce heap usage for unit objects
The storage of the unit objects on the heap is currently not very
efficient. For every unit object we allocate a chunk of memory as large
as the biggest unit type, although there are significant differences in
the units' real requirements.
pahole shows the following sizes of structs:
488  Target
496  Snapshot
512  Device
528  Path
560  Timer
576  Automount
1080 Socket
1160 Swap
1168 Service
1280 Mount

Usually there aren't many targets or snapshots in the system, but Device
is one of the most common unit types and for every one we waste
1280 - 512 = 768 bytes.

Fix it by allocating only the right amount for the given unit type.
On my machine (x86_64, with 39 LVM volumes) this decreases systemd's
USS (unique set size) by more than 300 KB.
2012-01-16 13:34:42 +01:00
Lennart Poettering 4cfa2c999d core: switch all log targets to go directly to the journal, instead via syslog 2012-01-12 05:09:06 +01:00
Lennart Poettering 731a676c20 systemd: reconnect to syslog as soon as the journal is fully up 2012-01-11 03:16:24 +01:00
Lennart Poettering 4dcc1cb415 unit: implement new PropagateReloadTo=/PropagateReloadFrom= operations 2012-01-11 02:52:34 +01:00
Lennart Poettering 81527be142 build-sys: move public header files into a dir of their own 2012-01-05 16:01:58 +01:00
Lennart Poettering dc1ecd78e9 Merge branch 'journal' 2011-12-31 00:59:37 +01:00
Michal Schmidt cbd37330bc dbus: register to DBus asynchronously
Chen Jie observed and analyzed a deadlock. Assuming systemd-kmsg-syslogd
is already stopped, but rsyslogd is not started yet:
 1. systemd makes a synchronous call to dbus-daemon.
 2. dbus-daemon wants to write something to syslog.
 3. syslog needs to be started by systemd.
   ... but cannot be, because systemd is waiting in 1.

Solve this by avoiding synchronous D-Bus calls. I had to write an async
bus registration call. Interestingly, D-Bus authors anticipated this, in
documentation to dbus_bus_set_unique_name():
> The only reason to use this function is to re-implement the equivalent
> of dbus_bus_register() yourself. One (probably unusual) reason to do
> that might be to do the bus registration call asynchronously instead
> of synchronously.

Lennart's comments from IRC:
> though I think this doesn't fix the problem in its entirety
> simply because dbus_connection_open_private() itself is still synchronous
> i.e. the connect() call behind it is not async
> I think I listed that issue actually on some D-Bus todo list
> i.e. to make dbus_connection_get() fully async
> but that's going to be hard
> so your patch looks good

So it may not be perfect, but it's clearly an improvement.
I did not manage to reproduce the original deadlock with the patch.
2011-12-20 00:17:14 +01:00
Lennart Poettering 1e2579fdeb Merge branch 'master' into journal 2011-11-08 19:44:16 +01:00
Jonathan Nieder 5a8d081c58 audit: do not complain if kernel lacks audit
When running on a kernel without audit support, systemd currently
writes a mysterious-sounding error to its log:

	systemd[1]: Failed to connect to audit log: Protocol not supported

Better to suppress the audit_open() failure message when (and only
when) it is due to running on a kernel without audit support, since in
this case the admin probably does not mind systemd not writing to the
audit log.  This way, more serious errors like ENOMEM and EACCES will
stand out more.
2011-10-17 21:04:59 +02:00
Michal Schmidt 563ba9ea6e manager: fix a crash in isolating
HASHMAP_FOREACH is safe against the removal of the current entry, but
not against the removal of other entries. job_finish_and_invalidate()
can recursively remove other entries.

It triggered an assertion failure:
  Assertion 'j->installed' failed at src/manager.c:1218, function
  transaction_apply(). Aborting.

Fix the crash by iterating from the beginning when there is a
possibility that the iterator could be invalid.

It is O(n^2) in the worst case, but that's better than a crash.

https://bugzilla.redhat.com/show_bug.cgi?id=717325
2011-10-17 11:29:27 +02:00
Lennart Poettering 87d2c1ff6a journal: add preliminary incomplete implementation 2011-10-07 22:02:05 +02:00
Lennart Poettering 5dc4c17fd5 virt: add missing header inclusion 2011-09-23 17:20:45 +02:00
Michal Schmidt 4e240ab0c9 util: improve signal_to_string, signal_from_string
signal_to_string:
 Produce names for SIGRTMIN+n.
 Never give an "n/a" result. In the worst case give the number itself as
 a string.

signal_from_string:
 Parse "RTMIN+n".
 Parse any valid signal number.
2011-09-23 10:30:19 +02:00
Michal Schmidt 764e9b5f07 manager: fix job mode for SIGRTMIN+1, +2
The test did not work as intended and always resulted in JOB_REPLACE.
2011-09-23 10:18:07 +02:00
Lennart Poettering 27d340c772 fsck: show progress while fscking at boot 2011-09-01 21:05:06 +02:00
Lennart Poettering ad293f5a94 cgroup: honour sticky bit when trimming cgroup trees 2011-08-21 20:07:46 +02:00
Lennart Poettering 1d6702e8d3 umask: set umask of a number of sockets by default, even though we check creds on connections 2011-08-01 22:42:07 +02:00
Lennart Poettering 07f8a4aa49 manager: call generators with umask 0022 2011-08-01 20:51:18 +02:00
Lennart Poettering 44d9105692 util: use join() instead of asprintf() as an optimization 2011-08-01 02:39:22 +02:00
Lennart Poettering 253ee27a0c manager: add log control via RT signals 2011-07-23 04:15:38 +02:00
Lennart Poettering c800e48374 path-lookup: make inclusion of user private units optional 2011-07-22 04:31:20 +02:00
Lennart Poettering a755605296 manager: merge serialization and desrialization counter into one, and increase it when reexecuting
Instead of having individual counters n_serializing and n_deserializing
have a single one n_reloading, which should be sufficient.

Set n_reloading when we are about to go down for reexecution to avoid
cgroup trimming when we free the units for reexecution.
2011-07-06 00:47:42 +02:00
Lennart Poettering ccaa61498c add a few O_CLOEXEC where missing 2011-07-05 03:29:24 +02:00
Michal Schmidt 1b562e4604 manager: consider the active job when merging
In some cases systemd forgets to start enabled services, e.g. in this scenario:
1. The job "sendmail.service/start" is installed.
2. Before systemd proceeds with this job, a process requests a reload of
   sendmail. The job "sendmail.service/reload" is enqueued.
3. The original job is silently discarded. The service is not started.
   The reload job proceeds by doing nothing.

The fix is to allow merging transaction jobs with the active job.
With the fix the resulting merged job "sendmail.service/reload-or-start" is
installed and the service works as expected.

https://bugzilla.redhat.com/show_bug.cgi?id=633774
2011-07-02 17:32:05 +02:00
Lennart Poettering 530345e782 manager: use sd_notify() to notify parent systemd that we have finished startup 2011-06-30 02:15:41 +02:00
Lennart Poettering 18fa6b2705 dbus: send our finished signal when we are finished booting 2011-06-27 13:47:03 +02:00
Lennart Poettering 3df5bf6123 dbus: make bus_flags_to_events() and friends generally useful 2011-06-21 19:29:43 +02:00
Lennart Poettering 3661ac04b4 manager: include full systemctl status command line in error message 2011-06-20 21:39:28 +02:00
Lennart Poettering b23de6af89 dbus: make daemon reexecution synchronous
We simply keep open copies of the dbus connections across the
reexecution and close them as last step of it. A client can thus simply
wait until its connection is dropped to know when the reexecution is
finished.

https://bugzilla.redhat.com/show_bug.cgi?id=698198
2011-04-28 22:07:01 +02:00
Lennart Poettering 2121dcdded manager: fix serialization counter 2011-04-27 15:54:34 +02:00
Lennart Poettering 38c52d4606 cgroup: don't accidentaly trim on reload
https://bugzilla.redhat.com/show_bug.cgi?id=678555
2011-04-20 03:53:12 +02:00
Lennart Poettering a08dab55f2 manager: when running in test mode, do not write generated unit files to /run/systemd/generator 2011-04-19 22:17:54 +02:00
Lennart Poettering 4fe60156fc manager: drop all pending jobs when isolating 2011-04-16 02:03:34 +02:00
Lennart Poettering c8f4d7642b manager: introduce IgnoreOnIsolate flag so that we can keep systemd-logger around when isolating 2011-04-16 02:03:34 +02:00
Lennart Poettering d718bbb51b manager: downgrade a few log messages 2011-04-16 02:03:34 +02:00
Lennart Poettering f1d19aa412 manager: no need to use randomized generator dir when running as system manager 2011-04-07 21:22:41 +02:00
Lennart Poettering 20c03b7be2 don't make up buffer sizes, use standard LINE_MAX instead 2011-04-07 18:48:50 +02:00
Lennart Poettering 01d67b43b0 manager: serialize/deserialize max job id and /usr taint flag 2011-04-07 18:46:39 +02:00
Lennart Poettering a8049b7a7c manager: don't garbage collect jobs when isolating, to change global state 2011-04-07 18:45:34 +02:00
Lennart Poettering cebe0d41e4 job: fix deserialization of jobs: do not ignore ordering 2011-04-06 19:09:33 +02:00
Lennart Poettering 67370238b5 manager: don't show PID for incoming signals if it is 0 2011-04-06 01:33:34 +02:00
Michal Schmidt 4466ee6a71 manager: fd must be int, not char
This should fix the crash reported by Dan Horak on s390x which
does not have VTs.
2011-04-04 15:34:53 +02:00