chiark / gitweb /
systemctl: return an error code is status fails
[elogind.git] / TODO
diff --git a/TODO b/TODO
index 51dee2c6ec2f8e60b0504247f84fccaf7908c4c0..db59984bfed3fd68db6f842c5d9f92b56f9d8cb1 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,6 @@
 Bugfixes:
+* Should systemctl status \* work on all unit types, not just .service?
+
 * enabling an instance unit creates a pointless link, and
   the unit will be started with getty@getty.service:
     $ systemctl enable getty@.service
@@ -16,6 +18,9 @@ Bugfixes:
 
 * systemctl --root=container/ set-default ... is totally borked.
 
+* sd_bus_unref() is broken regarding self-references and "pseudo thread-safety".
+  See the comment in sd_bus_unref() for more..
+
 External:
 
 * Fedora: when installing fedora with yum --installroot /var/run is a directory, not a symlink
@@ -27,45 +32,87 @@ External:
 
 Features:
 
-* machined: provide calls GetMachineByAddress() on the manager interface to get the machine for a local IP address, and GetAddress() on the Machine interface to get the Address for a machine. Implement via forking off child process which quickly joins the cotnainer and passes data to parent. Show this in "machinectl status", and use it to implement NSS module to provide automatic name resolution for containers.
+* timesyncd:
+  - hookup with networkd: NTP servers from dhcp
+  - hookup with networkd: listen to online/offline state
 
-* add generator that pulls in systemd-network from containers when CAP_NET_ADMIN is set, more than the loopback device is defined, even when it is otherwise off
+* a way for container managers to turn off getty starting via $container_headless= or so...
 
-* logind: avoid suspending on SW_LID if SW_DOCK is set
+* figure out a nice way how we can let the admin know what child/sibling unit causes cgroup membership for a specific unit
 
-* MessageQueueMessageSize= and RLimitFSIZE= (and suchlike) should use parse_iec_size().
+* add a kernel command line option to enable the debug shell
+
+* journalctl: add the ability to look for the most recent process of a binary. journalctl /usr/bin/X11 --pid=-1 or so...
+
+* set NOTIFY_SOCKET also for control processes
+
+* drop parsing of chkconfig header lines from service.c
+
+* mount_cgroup_controllers(): symlinks need to get the label applied
+
+* For timer units: add some mechanisms so that timer units that trigger immediately on boot do not have the services they run added to the initial transaction and thus confuse Type=idle. Alternatively, split up the boot-up state into two, and make Type=idle only be affected by jobs for the default target, but ignore any further jobs
+
+* Add RPM macros for registering/unregistering binfmt drop-ins
+
+* Add timeout to early-boot, and shut down the system if it is hit. Solves the laptop-in-bag problem and is useful for embedded cases
+
+* sd-resolve: add callback api
+
+* ImmutableSystem=yes/no or so to mount /usr, /boot read-only/invisible, and leave /var and /etc writable
+
+* InaccessibleHome=yes/no or so to hide /home and /run/user from a service
+
+* Run most system services with cgroupfs read-only and procfs with a more secure mode
+
+* sd-event: generate a failure of a default event loop is executed out-of-thread
+
+* add "M" as recursive version of "m" to tmpfiles, then use it for
+  chowning /run/log/journal (but not /var/log/journal), so that we
+  adjust the perms of journal files created before tmpfiles ran.
+
+* expose "Locked" property on logind sesison objects
+
+* add bus api to query unit file's X fields.
+
+* consider adding RuntimeDirectoryUser= + RuntimeDirectoryGroup=
+
+* sd-event: define more intervals where we will shift wakeup intervals around in, 1h, 6h, 24h, ...
+
+* gpt-auto-generator:
+  - Support LUKS for root devices
+  - Define new partition type for encrypted swap? Support probed LUKS for encrypted swap?
+  - Make /home automount rather than mount?
+
+* improve journalctl performance by loading journal files
+  lazily. Encode just enough information in the file name, so that we
+  do not have to open it to know that it is not interesting for us, for
+  the most common operations.
+
+* support transient mount units
+
+* add an "input" group to udev logic and add all input devices to it
 
-* man: move .link, .network and .netdev documentation into their own
-  man pages maybe called "systemd.link(5)", "systemd.network(5)" and
-  "systemd.netdev(5)" or so.
+* machined: provide calls GetMachineByAddress() on the manager
+  interface to get the machine for a local IP address, and
+  GetAddress() on the Machine interface to get the Address for a
+  machine. Implement via forking off child process which quickly joins
+  the cotnainer and passes data to parent. Show this in "machinectl
+  status", and use it to implement NSS module to provide automatic
+  name resolution for containers.
+
+* add generator that pulls in systemd-network from containers when
+  CAP_NET_ADMIN is set, more than the loopback device is defined, even
+  when it is otherwise off
+
+* MessageQueueMessageSize= and RLimitFSIZE= (and suchlike) should use parse_iec_size().
 
 * "busctl status" works only as root on dbus1, since we cannot read
   /proc/$PID/exe
 
-* systemctl (and possibly related tools): support a new switch that
-  allows enumerating units in local containers recursively. "systemctl
-  list-units -R" or so should not only lists on the host, but also the
-  services in all containers in a pretty way, to give an overview of
-  the entire system. Also, maybe add "systemctl list-machines" which
-  works like "machinectl list" but includes information about the
-  health status of each registered machine. For that we should
-  probably implement something that encodes the system health status
-  in a single enum state, i.e. something like a system-wide state
-  starting → running → failed → stopping, that is based on the current
-  job queue and a check for failed services. Maybe then change
-  "systemctl status" without args to output this state along with a
-  selection of other data, such as the uptime or so.
-
-* Add a seccomp-based filter for socket() calls to limit services to
-  specific address families (for example: AF_UNIX), inspired by
-  Android's sandboxing
-
 * implement Distribute= in socket units to allow running multiple
   service instances processing the listening socket, and open this up
   for ReusePort=
 
-* add a timelimit to generator invocation
-
 * socket units: support creating sockets in different namespace,
   opening it up for JoinsNamespaceOf=. This would require to fork off
   a tiny process that joins the namespace and creates/binds the socket
@@ -82,13 +129,9 @@ Features:
   on screen, not unlike how job control works on the shell
 
 * completions:
- - busctl zsh completion is outdated
- - systemd-nspawn -Z/-L/-q is missing for zsh
- - systemd-nspawn completion is missing for bash
  - manager property enumeration was broken when systemd moved to /usr/lib/
 
 * cgroups:
-  - implement system-wide DefaultCPUAccounting=1 switch (and similar for blockio, memory?)
   - implement per-slice CPUFairScheduling=1 switch
   - handle jointly mounted controllers correctly
   - introduce high-level settings for RT budget, swappiness
@@ -120,8 +163,6 @@ Features:
 
 * rfkill,backlight: we probably should run the load tools inside of the udev rules so that the state is properly initialized by the time other software sees it
 
-* move config_parse_path_strv() out of conf-parser.c
-
 * After coming back from hibernation reset hibernation swap partition using the /dev/snapshot ioctl APIs
 
 * If we try to find a unit via a dangling symlink, generate a clean
@@ -136,7 +177,7 @@ Features:
 
 * btrfs raid assembly: some .device jobs stay stuck in the queue
 
-* make sure gdm doesn't use multi-user-x but the new default X configuration file, and then remove multi-user-x from systemd
+* make sure gdm does not use multi-user-x but the new default X configuration file, and then remove multi-user-x from systemd
 
 * man: the documentation of Restart= currently is very misleading and suggests the tools from ExecStartPre= might get restarted.
 
@@ -148,34 +189,32 @@ Features:
   Maybe take a BSD lock at the disk device node and teach udev to
   check for that and suppress event handling.
 
-* something pulls in pcre as shared object dependency into our daemons such as hostnamed.
-
 * allow implementation of InaccessibleDirectories=/ plus
   ReadOnlyDirectories=... for whitelisting files for a service.
 
 * sd-bus:
-  - when kdbus doesn't take our message without memfds, try again with memfds
-  - implement monitor logic
+  - make AddMatch calls on dbus1 transports async
+  - when kdbus does not take our message without memfds, try again with memfds
+  - systemd-bus-proxyd needs to enforce good old XML policy
+  - port exit-on-idle logic to byebye ioctl
+  - allow updating attach flags during runtime
+  - pid1: peek into activating message when activating a service
+  - introduce sd_bus_emit_object_added()/sd_bus_emit_object_removed() that automatically includes the build-in interfaces in the list
+  - constructors for bus messages should probably not be OK with a NULL bus pointer
+  - .busname units should not use get_user_creds()/get_cgroup_creds() but instead do NSS only in temporarily forked off child
   - see if we can drop more message validation on the sending side
   - add API to clone sd_bus_message objects
-  - systemd-bus-proxyd needs to enforce good old XML policy
-  - upload minimal kdbus policy into the kernel at boot
   - kdbus: matches against source or destination pids for an "strace -p"-like feel. Problem: The PID info needs to be available in userspace too...
   - longer term: priority inheritance
-  - check sender of response messages
   - dbus spec updates:
        - kdbus mapping
        - NameLost/NameAcquired obsolete
        - GVariant
        - "const" properties (posted)
-  - port exit-on-idle logic to byebye ioctl
+       - path escaping
   - update systemd.special(7) to mention that dbus.socket is only about the compatibility socket now
-  - allow updating attach flags during runtime
-  - pid1: peek into activating message when activating a service
   - test bloom filter generation indexes
-  - introduce sd_bus_emit_object_added()/sd_bus_emit_object_removed() that automatically includes the build-in interfaces in the list
   - port to sd-resolve for connecting to TCP dbus servers
-  - constructors for bus messages should probably not be OK with a NULL bus pointer
 
 * sd-event
   - allow multiple signal handlers per signal?
@@ -212,7 +251,7 @@ Features:
   file.
 
 * seems that when we follow symlinks to units we prefer the symlink
-  destination path over /etc and /usr. We shouldn't do that. Instead
+  destination path over /etc and /usr. We should not do that. Instead
   /etc should always override /run+/usr and also any symlink
   destination.
 
@@ -224,10 +263,10 @@ Features:
 * after all byte-wise realloc() is slow, even on glibc, so i guess we
   need manual exponential loops after all
 
-* BootLoaderSpec: drop allowing ext234 for $BOOT. Clarify that the
-  kernel has to be in $BOOT. Clarify that the boot loader should be
-  installed to the ESP. Define a way how an installer can figure out
-  whether a BLS compliant boot loader is installed.
+* BootLoaderSpec: Clarify that the kernel has to be in $BOOT. Clarify
+  that the boot loader should be installed to the ESP. Define a way
+  how an installer can figure out whether a BLS compliant boot loader
+  is installed.
 
 * think about requeuing jobs when daemon-reload is issued? usecase:
   the initrd issues a reload after fstab from the host is accessible
@@ -238,7 +277,7 @@ Features:
 
 * journal-or-kmsg is currently broken? See reverted commit 4a01181e460686d8b4a543b1dfa7f77c9e3c5ab8.
 
-* remove any syslog support from log.c -- we probably can't do this before split-off udev is gone for good
+* remove any syslog support from log.c -- we probably cannot do this before split-off udev is gone for good
 
 * shutdown logging: store to EFI var, and store to USB stick?
 
@@ -277,9 +316,7 @@ Features:
   - logind: wakelock/opportunistic suspend support
   - Add pretty name for seats in logind
   - logind: allow showing logout dialog from system?
-  - logind: add equivalent to sd_pid_get_owner_uid() to the D-Bus API
   - we should probably handle SIGTERM/SIGINT to not leave dot files around, just in case
-  - when logging out, remove user-owned sysv and posix IPC objects
   - session scopes/user unit: add RequiresMountsFor for the home directory of the user
   - add Suspend() bus calls which take timestamps to fix double suspend issues when somebody hits suspend and closes laptop quickly.
   - if pam_systemd is invoked by su from a process that is outside of a
@@ -296,7 +333,7 @@ Features:
   - journald: also get thread ID from client, plus thread name
   - journal: when waiting for journal additions in the client always sleep at least 1s or so, in order to minimize wakeups
   - add API to close/reopen/get fd for journal client fd in libsystemd-journal.
-  - fallback to /dev/log based logging in libsystemd-journal, if we can't log natively?
+  - fallback to /dev/log based logging in libsystemd-journal, if we cannot log natively?
   - declare the local journal protocol stable in the wiki interface chart
   - journal: reuse XZ context
   - sd-journal: speed up sd_journal_get_data() with transparent hash table in bg
@@ -332,7 +369,7 @@ Features:
   - journald: make sure ratelimit is actually really per-service with the new cgroup changes
   - change systemd-journal-flush into a service that stays around during
     boot, and causes the journal to be moved back to /run on shutdown,
-    so that we don't keep /var busy. This needs to happen synchronously,
+    so that we do not keep /var busy. This needs to happen synchronously,
     hence doing this via signals is not going to work.
 
 * document:
@@ -360,14 +397,13 @@ Features:
   - print nice message from systemctl --failed if there are no entries shown, and hook that into ExecStartPre of rescue.service/emergency.service
   - add new command to systemctl: "systemctl system-reexec" which reexecs as many daemons as virtually possible
   - systemctl enable: improve the success messages (i.e. more human readable, less shell-like)
-  - systemctl enable: fail if target to alias into doesn't exist? maybe show how many units are enabled afterwards?
+  - systemctl enable: fail if target to alias into does not exist? maybe show how many units are enabled afterwards?
   - systemctl: "Journal has been rotated since unit was started." message is misleading
   - support "systemctl stop foobar@.service" to stop all units matching a certain template
   - Something is wrong with symlink handling of "autovt@.service" in "systemctl list-unit-files"
   - rework wait filter to not require match callback
   - better error message if you run systemctl without systemd running
   - systemctl status output should should include list of triggering units and their status
-  - in systemctl list-timers show time triggering units ran last
 
 * unit install:
   - "systemctl mask" should find all names by which a unit is accessible
@@ -383,15 +419,13 @@ Features:
 * deal with sendmail/postfix exclusivity
 
 * timer units:
-  - timer events with system resume
   - timer units should get the ability to trigger when:
     o CLOCK_REALTIME makes jumps (TFD_TIMER_CANCEL_ON_SET)
     o DST changes
   - Support 2012-02~4 as syntax for specifying the fourth to last day of the month.
   - calendarspec: support value ranges with ".." notation. Example: 2013-4..8-1
-  - when parsing calendar timestamps support the UTC timezone (even if we won't support arbitrary timezone specs, support UTC itself certainly makes sense), also support syntaxes such as +0200
+  - when parsing calendar timestamps support the UTC timezone (even if we will not support arbitrary timezone specs, support UTC itself certainly makes sense), also support syntaxes such as +0200
   - Modulate timer frequency based on battery state
-  - anacron-like feature
 
 * update the kernel's TZ (sys_tz) when DST changes
 
@@ -402,10 +436,6 @@ Features:
   mode, it will never touch the RTC if the no reliable time source is active or the
   user did not request anything like it.
 
-* if booted in "quiet" mode, and an error happens, turn on status
-  output again, so that the emergency mode isn't totally
-  surprising. Also, terminate plymouth.
-
 * libunwind support for coredump pattern hook, and includes this in
   the message for coredumps. After all, libunwind is now capable to
   unwind coredumps since a few weeks ago. This probably requires that
@@ -418,7 +448,7 @@ Features:
 * If we show an error about a unit (such as not showing up) and it has no Description string, then show a description string generated form the reverse of unit_name_mangle().
 
 * fedup: add --unit to systemctl switch-root somehow
-* fedup: don't delete initrd on switch-root
+* fedup: do not delete initrd on switch-root
 * fedup: generator
 
 * timedated: refuse time changes when NTP is on
@@ -439,17 +469,17 @@ Features:
 
 * hostnamed: before returning information from /etc/machine-info.conf check the modification data and reread. Similar for localed, ...
 
-* currently x-systemd.timeout is lost in the initrd, since crypttab is copied into dracut, but fstab isn't
+* currently x-systemd.timeout is lost in the initrd, since crypttab is copied into dracut, but fstab is not
 
 * nspawn:
-  - nspawn: consider changing users for -u with /usr/bin/getent, so that NSS resolving works correctly
   - nspawn: --read-only is not applied recursively to submounts
   - bind mount read-only the cgroup tree higher than nspawn
   - nspawn: make it work for dwalsh and shared /usr containers -- tmpfs mounts as command line parameters
   - refuses to boot containers without /etc/machine-id (OK?), and with empty /etc/machine-id (not OK).
   - support taking a btrfs snapshot at startup and dropping it afterwards
   - maybe: hookup nspawn and PrivateNetwork=yes with "ip netns"
-  - allow booting disk images with a GPT signature using the bootloaderspec partition uuids
+  - generate predictable mac addresses for the netdev we create (host0), maybe based on guest's machine
+    name and machine-id of host (?)
 
 * cryptsetup:
   - cryptsetup-generator: allow specification of passwords in crypttab itself
@@ -485,9 +515,9 @@ Features:
 
 * drop PID 1 reloading, only do reexecing (difficult: Reload()
   currently is properly synchronous, Reexec() is weird, because we
-  can't delay the response properly until we are back, so instead of
+  cannot delay the response properly until we are back, so instead of
   being properly synchronous we just keep open the fd and close it
-  when done. That means clients don't get a successful method reply,
+  when done. That means clients do not get a successful method reply,
   but much rather a disconnect on success.
 
 * properly handle loop back mounts via fstab, especially regards to fsck/passno
@@ -500,10 +530,8 @@ Features:
 
 * rename "userspace" to "core-os"
 
-* syscall filter: optionally don't enforce no new privs?
-
 * load-fragment: when loading a unit file via a chain of symlinks
-  verify that it isn't masked via any of the names traversed.
+  verify that it is not masked via any of the names traversed.
 
 * introduce Type=pid-file
 
@@ -547,7 +575,7 @@ Features:
 
 * support crash reporting operation modes (https://live.gnome.org/GnomeOS/Design/Whiteboards/ProblemReporting)
 
-* default to actual 32bit PIDs, via /proc/sys/kernel/pid_max
+* default to actual 32-bit PIDs, via /proc/sys/kernel/pid_max
 
 * be able to specify a forced restart of service A where service B depends on, in case B
   needs to be auto-respawned?
@@ -558,9 +586,9 @@ Features:
   - check systemd-tmpfiles for selinux context hookup for mknod(), symlink() and similar
   - apply "x" on "D" too (see patch from William Douglas)
 
-* for services: don't set $HOME in services unless requested
+* for services: do not set $HOME in services unless requested
 
-* hide PAM/TCPWrap options in fragment parser when compile time disabled
+* hide PAM options in fragment parser when compile time disabled
 
 * when we automatically restart a service, ensure we restart its rdeps, too.
 
@@ -656,19 +684,29 @@ Features:
    - Make sure ID_PATH is always exported and complete for
      network devices where possible, so we can safely rely
      on Path= matching
+   - check MTUBytes parsing (expecting size_t but we are using unsigned)
 
 * sd-rtnl:
-   - add support for exiting containers without reading them fully first
    - add support for more attribute types
+   - inbuilt piping support (essentially degenerate async)? see loopback-setup.c and other places
 
 * networkd:
    - add more keys to [Route] and [Address] sections
    - add support for more DHCPv4 options (and, longer term, other kinds of dynamic config)
+   - send hostname to DHCP server
    - add proper initrd support (in particular generate .network/.link files based on /proc/cmdline)
    - add reduced [Link] support to .network files
+   - add Scope= parsing option for [Network]
+   - properly handle routerless dhcp leases
+   - set lifetime on the address acquired from dhcp
+   - add veth netdev support (c.f. http://shorewall.net/bridge-Shorewall-perl.html#veth)
 
 External:
 
+* NM: figure out what to do about network-online.target.
+   - maybe pull in the target as dependency for LSB initscripts ordered now after network.target
+   - https://bugzilla.gnome.org/show_bug.cgi?id=728965
+
 * dbus:
    - natively watch for dbus-*.service symlinks (PENDING)
    - teach dbus to activate all services it finds in /etc/systemd/services/org-*.service
@@ -689,7 +727,7 @@ External:
 
 * drop accountsservice's StandardOutput=syslog and Type=dbus fields
 
-* dbus upstream still refers to dbus.target and shouldn't
+* dbus upstream still refers to dbus.target and should not
 
 * dbus: in fedora, make /var/lib/dbus/machine-id a symlink to /etc/machine-id
 
@@ -705,6 +743,8 @@ External:
 
 * fedora: update policy to declare access mode and ownership of unit files to root:root 0644, and add an rpmlint check for it
 
+* register catalog database signature as file magic
+
 Regularly:
 
 * look for close() vs. close_nointr() vs. close_nointr_nofail()
@@ -715,7 +755,7 @@ Regularly:
 
 * pahole
 
-* set_put(), hashmap_put() return values check. i.e. == 0 doesn't free()!
+* set_put(), hashmap_put() return values check. i.e. == 0 does not free()!
 
 * use secure_getenv() instead of getenv() where appropriate