chiark / gitweb /
initctl: move /dev/initctl fifo into /run, replace it by symlink
[elogind.git] / TODO
diff --git a/TODO b/TODO
index 51dee2c6ec2f8e60b0504247f84fccaf7908c4c0..fb118f155028d32d6012f61f8dca0484be7a4a5a 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,9 @@
 Bugfixes:
+* Re-enable "fsck -l" when it is ready:
+   https://bugs.freedesktop.org/show_bug.cgi?id=79576#c5
+
+* 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
@@ -14,10 +19,10 @@ Bugfixes:
 
   Cannot add dependency job for unit display-manager.service, ignoring: Unit display-manager.service failed to load: No such file or directory. See system logs and 'systemctl status display-manager.service' for details.
 
-* 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
    https://bugzilla.redhat.com/show_bug.cgi?id=975864
 
@@ -27,45 +32,89 @@ 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.
+* generator that automatically discovers btrfs subvolumes, identifies their purpose based on some xattr on them.
 
-* 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
+* support setting empty environment variables with Environment= and EnvironmentFile=
 
-* logind: avoid suspending on SW_LID if SW_DOCK is set
+* tmpfiles: figure out relation between Z and m?
 
-* MessageQueueMessageSize= and RLimitFSIZE= (and suchlike) should use parse_iec_size().
+* systemd-notify: fake ucred of msg to PID of parent, if that works, with fallback to our own if it doesn't.
+
+* machined/machinectl: sort IP addresses we return by scope and protocol
+* machined: write NSS module for looking up IP addresses for machines
+
+* timer units: actually add extra delays to timer units with high AccuracySec values, don't start them already when we are awake...
+
+* timesyncd:
+  - hookup with networkd: NTP servers from dhcp
+
+* a way for container managers to turn off getty starting via $container_headless= or so...
+
+* figure out a nice way how we can let the admin know what child/sibling unit causes cgroup membership for a specific unit
+
+* 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.
+
+* 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
+
+* 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.
 
-* 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.
+* support transient mount units
+
+* add an "input" group to udev logic and add all input devices to it
+
+* 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 +131,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 +165,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,46 +179,38 @@ 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.
 
 * load .d/*.conf dropins for device units
 
-* gparted needs to disable auto-activation of mount units somehow, or
-  maybe we should stop doing auto-activation of this after boot
-  entirely. https://bugzilla.gnome.org/show_bug.cgi?id=701676
-  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 +247,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 +259,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 +273,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?
 
@@ -255,7 +290,6 @@ Features:
 * introduce ExecCondition= in services
 
 * EFI:
-  - write man page for efi boot generator
   - honor language efi variables for default language selection (if there are any?)
   - honor timezone efi variables for default timezone selection (if there are any?)
   - change bootctl to be backed by systemd-bootd to control temporary and persistent default boot goal plus efi variables
@@ -277,9 +311,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 +328,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 +364,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 +392,12 @@ 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
@@ -378,20 +408,16 @@ Features:
   - systemctl list-unit-files should list generated files (and probably with a new state "generated" for them, or so)
   - systemctl: maybe add "systemctl add-wants" or so...
 
-* introduce ntp.service (or suchlike) as symlink that is used to arbitrate between various NTP implementations
-
 * 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 +428,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 +440,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
@@ -427,7 +449,7 @@ Features:
 
 * on shutdown: move utmp, wall, audit logic all into PID 1 (or logind?), get rid of systemd-update-utmp-runlevel
 
-* add "provisioning" instructions to setup an empty /etc + /var
+* add "factory" instructions to setup an empty /etc + /var
     - used to setup a new container from a shared /usr
     - superset of tmpfiles model
     - instructions shipped by packages and stored in /usr/lib/
@@ -439,17 +461,14 @@ 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
 
 * cryptsetup:
   - cryptsetup-generator: allow specification of passwords in crypttab itself
@@ -485,9 +504,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 +519,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 +564,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 +575,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.
 
@@ -637,8 +654,6 @@ Features:
 
 * fingerprint.target, wireless.target, gps.target, netdevice.target
 
-* io priority during initialization
-
 * drop cap bounding set in readahead and other services
 
 * systemd-python:
@@ -656,16 +671,34 @@ 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
+   - patch kernel to support module alias for tunnel device (ipip/sit/gre),
+     then remove remove libkmod dependency and CAP_SYS_MODULE
+   - add veth netdev support (c.f. http://shorewall.net/bridge-Shorewall-perl.html#veth)
+   - add tun/tap netdev support
+   - add more attribute support for SIT tunnel
+
+* networkd-wait-online:
+   - make operstates to wait for configurable?
+
+* dhcp:
+   - figure out how much we can increase Maximum Message Size
+   - export timezone information
+   - FORCERENEW
 
 External:
 
@@ -679,17 +712,11 @@ External:
 
 * patch kernel for xattr support in /dev, /proc/, /sys?
 
-* NTP: the kernel's 11-minutes-mode syncs the system time to the RTC, but only
-  in an ~30 minutes window. It does not adjust larger differences. Find a way
-  to tell the kernel, to always do a full time sync when the RTC is in UTC and
-  we are in 11-minutes-mode. When we trust the system time to NTP we also want
-  the RTC to sync up.
-
 * kernel: add device_type = "fb", "fbcon" to class "graphics"
 
 * 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 +732,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 +744,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