X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=TODO;h=57c057227b51573fbfec0ebd4994bbcb60d5cad0;hp=8dc8f63a1897d2ae6541d7213b3ba9049fc5b900;hb=0bc8e31b358a872ec2631874bd2109ba4e009ccf;hpb=08cd15525450ff2c2ac814a58930f6d82284a1ba diff --git a/TODO b/TODO index 8dc8f63a1..57c057227 100644 --- a/TODO +++ b/TODO @@ -10,16 +10,13 @@ Bugfixes: * properly handle .mount unit state tracking when two mount points are stacked one on top of another on the exact same mount point. -* When we detect invalid UTF-8, we cannot use it in an error message: - log...("Path is not UTF-8 clean, ignoring assignment: %s", rvalue); - * shorten the message to sane length: 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. -External: +* systemctl --root=container/ set-default ... is totally borked. -* ps should gain colums for slice +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 @@ -28,8 +25,42 @@ External: * Fedora: post FPC ticket to move add %tmpfiles_create to the packaging guidelines +Preparation for 209: + +* Review new libraries + +* libsystemd-journal returns the object created as first param in sd_journal_new(), sd_bus_new() and suchlike as last... + Features: +* 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 + and passes this back to PID1 via SCM_RIGHTS. This also could be used + to allow Chown/chgrp on sockets without requiring NSS in PID 1. + +* New service property: maximum CPU and wallclock runtime for a service + +* introduce bus call FreezeUnit(s, b), as well as "systemctl freeze + $UNIT" and "systemctl thaw $UNIT" as wrappers around this. The calls + should SIGSTOP all unit processes in a loop until all processes of + it are fully stopped. This can later be used for app management by + desktop UIs such as gnome-shell to freeze apps that are not visible + on screen, not unlike how job control works on the shell + +* machinectl bash completion is missing +* busctl bash and zsh completions are outdated + * cgroups: - implement system-wide DefaultCPUAccounting=1 switch (and similar for blockio, memory?) - implement per-slice CPUFairScheduling=1 switch @@ -45,16 +76,10 @@ Features: - add field to transient units that indicate whether systemd or somebody else saves/restores its settings, for integration with libvirt - ensure scope units may be started only a single time -* code cleanup - - get rid of readdir_r/dirent_storage stuff, it's unnecessary on Linux - - we probably should replace the left-over uses of strv_append() and replace them by strv_push() or strv_extend() - -* switch to SipHash for hashmaps/sets? +* Automatically configure swap partition to use for hibernation by looking for largest swap partition on the root disk? * when we detect low battery and no AC on boot, show pretty splash and refuse boot -* move libasyncns into systemd as libsystemd-asyncns - * machined, localed: when we try to kill an empty cgroup, generate an ESRCH error over the bus * libsystemd-journal, libsystemd-login, libudev: add calls to easily attach these objects to sd-event event loops @@ -65,14 +90,10 @@ Features: * Automatically configure swap partition to use for hibernation by looking for largest swap partition on the root disk? -* remove NSS usage from PID 1 (notably the specifiers) - -* socket-proxyd:Use a nonblocking alternative to getaddrinfo +* socket-proxyd: Use sd-resolve to resolve the server address * 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 -* Add a new Distribute=$NUMBER key to socket units that makes use of SO_REUSEPORT to distribute network traffic on $NUMBER instances - * 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 @@ -81,14 +102,11 @@ Features: error. Currently, we just ignore it and read the unit from the search path anyway. -* When a Type=forking service fails and needed another service, that - service is not cleaned up again when it has StopWhenUnneeded=yes - http://lists.freedesktop.org/archives/systemd-devel/2013-July/012141.html - * refuse boot if /etc/os-release is missing or /etc/machine-id cannot be set up -* given that logind/machined now let PID 1 do all nasty work, we can - probably reduce the capability set they retain substantially. +* given that logind now lets PID 1 do all nasty work, we can + probably reduce the capability set it retains substantially. + (we need CAP_SYS_ADMIN for drmSetMaster(), so maybe not worth it) * btrfs raid assembly: some .device jobs stay stuck in the queue @@ -104,50 +122,42 @@ Features: Maybe take a BSD lock at the disk device node and teach udev to check for that and suppress event handling. -* document logic of auto/noauto and fail/nofail in fstab in systemd.mount or systemd-fstab-generator man page - * 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. -* libsystemd-bus: +* sd-bus: - when kdbus doesn't take our message without memfds, try again with memfds - - implement translator service - implement monitor logic - - properly map matches with well-known names against messages with unique names - - when triggering property change events, allow a NULL strv indicate that all properties listed as such are send out as changed - see if we can drop more message validation on the sending side - - support "const" properties as flag - add API to clone sd_bus_message objects - - SD_BUS_COMMENT() macro for inclusion in vtables, syntax inspired by gdbus - - make sd_bus_open_system_container() kdbus aware - - longer term: - * priority queues - * priority inheritance - - sort out error codes for sd_bus_release_name(), distuingish: successful removal from foreign name, from non-existing name - - bug in kdbus: nameownerchange is not generated for names, only ids. + - 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... - - kdbus: we need a way to distuingish messages we got due to monitoring from normal messages, since we want to bind methods only to the latter - - figure out what to do when fields in the kdbus header and in the payload header do not match + - 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 + - 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 - - when a handler returns an error, just turn off its event source, - but do not return anything up to the event loop caller. Instead - add parameter to sd_event_request_quit() to take retval. This way - errors rippling upwards are the option, not the default - - native support for watchdog stuff + - allow multiple signal handlers per signal? * in the final killing spree, detect processes from the root directory, and complain loudly if they have argv[0][0] == '@' set. https://bugzilla.redhat.com/show_bug.cgi?id=961044 -* Introduce a way how we can kill the main process of a service with KillSignal, but all processes with SIGKILL later on - https://bugzilla.redhat.com/show_bug.cgi?id=952634 - -* maybe add a warning to the unit file parses where the access mode of unit files is nonsensical. - * investigate endianness issues of UUID vs. GUID * dbus: when a unit failed to load (i.e. is in UNIT_ERROR state), we @@ -161,6 +171,8 @@ Features: * timedatctl, localectl: possibly make some commands work without the daemon, for chroot situations... +* timedatectl: print a nicer message when enabling ntp fails because ntpd/chrony are not installed + * cgtop: make cgtop useful in a container * test/: @@ -185,11 +197,6 @@ Features: * teach ConditionKernelCommandLine= globs or regexes (in order to match foobar={no,0,off}) -* Support SO_REUSEPORT with socket activation: - - Let systemd maintain a pool of servers. - - Use for seamless upgrades, by running the new server before stopping the - old. - * after all byte-wise realloc() is slow, even on glibc, so i guess we need manual exponential loops after all @@ -251,9 +258,7 @@ Features: - logind: wakelock/opportunistic suspend support - Add pretty name for seats in logind - logind: allow showing logout dialog from system? - - logind: non-local X11 server handling - logind: add equivalent to sd_pid_get_owner_uid() to the D-Bus API - - pam: when leaving a session explicitly exclude the ReleaseSession() caller process from the killing spree - 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 @@ -299,7 +304,6 @@ Features: - journal: sanely deal with entries which are larger than the individual file size, but where the components would fit - Replace utmp, wtmp, btmp, and lastlog completely with journal - journalctl: instead --after-cursor= maybe have a --cursor=XYZ+1 syntax? - - journalctl: support -M to read journal of containers and determine journal directory from root directory of container - tmpfiles: when applying ownership to /run/log/journal, also do this for the journal fails contained in it - when a kernel driver logs in a tight loop, we should ratelimit that too. - journald: optionally, log debug messages to /run but everything else to /var @@ -313,11 +317,9 @@ Features: hence doing this via signals is not going to work. * document: - - document that deps in [Unit] sections ignore Alias= fileds in + - document that deps in [Unit] sections ignore Alias= fields in [Install] units of other units, unless those units are disabled - man: clarify that time-sync.target is not only sysv compat but also useful otherwise. Same for similar targets - - Document word splitting syntax for ExecStart= and friends - - document that units from /etc override those from /usr and /run - document the exit codes when services fail before they are exec()ed - document that service reload may be implemented as service reexec - document in wiki how to map ical recurrence events to systemd timer unit calendar specifications @@ -347,7 +349,7 @@ Features: - 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 trggering units ran last + - in systemctl list-timers show time triggering units ran last * unit install: - "systemctl mask" should find all names by which a unit is accessible @@ -422,22 +424,16 @@ Features: * currently x-systemd.timeout is lost in the initrd, since crypttab is copied into dracut, but fstab isn't * nspawn: - - nspawn: consider changing users for -u with su, so that NSS resolving works correctly + - nspawn: consider changing users for -u with /usr/bin/getent, so that NSS resolving works correctly - nspawn: implement personality changes a la linux32(8) - nspawn: --read-only is not applied recursively to submounts - nspawn: make use of device cgroup controller by default - bind mount read-only the cgroup tree higher than nspawn - - nspawn: investigate whether we can support the same as LXC's - lxc.network.type=phys mode, and pass through entire network - interfaces to the container - - nspawn: maybe add a way to drop additional caps, in addition to add additional caps - - nspawn: maybe explicitly reset loginuid? - nspawn: make it work for dwalsh and shared /usr containers -- tmpfs mounts as command line parameters, selinux exec context - refuses to boot containers without /etc/machine-id (OK?), and with empty /etc/machine-id (not OK). - - add an option to nspawn that uses seccomp to make socket(AF_NETLINK, - SOCK_RAW, NETLINK_AUDIT) fail the the appropriate error code that - makes the audit userspace to think auditing is not available in the - kernel. + - 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 @@ -467,8 +463,6 @@ Features: * explore multiple service instances per listening socket idea -* shutdown: don't read-only mount anything when running in container - * MountFlags=shared acts as MountFlags=slave right now. * ReadOnlyDirectories= is not applied recursively to submounts @@ -490,12 +484,7 @@ Features: * rename "userspace" to "core-os" -* syscall filter: - - syscall filter: add knowledge about compat syscalls - - syscall filter: don't enforce no new privs? - - syscall filter: option to return EPERM rather than SIGSYS? - - syscall filter: port to libseccomp - - system-wide seccomp filter +* 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. @@ -525,12 +514,8 @@ Features: - kill scsi_id - add trigger --subsystem-match=usb/usb_device device -* cleanup syslog 'priority' vs. 'level' wording - * when a service has the same env var set twice we actually store it twice and return that in systemctl show -p... We should only show the last setting -* support container_ttys= - * introduce mix of BindTo and Requisite * add DeleteSocketsOnStop=yes|no option to socket units @@ -633,13 +618,6 @@ Features: * dot output for --test showing the 'initial transaction' -* port over to LISTEN_FDS/LISTEN_PID: - - postfix, saslauthd - - apache/samba - - libvirtd (/var/run/libvirt/libvirt-sock-ro) - - bluetoothd (/var/run/sdp! @/org/bluez/audio!) - - distccd - * fingerprint.target, wireless.target, gps.target, netdevice.target * io priority during initialization @@ -661,18 +639,14 @@ Features: - Make sure ID_PATH is always exported and complete for network devices where possible, so we can safely rely on Path= matching - - Check if Driver= is broken, or just my driver (bcma) * sd-rtnl: - - replace sd_rtnl_message_append() by type-safe versions - - improve container support, and add support for entering containers when reading + - add support for exiting containers without reading them fully first - add support for more attribute types * networkd: - - unify and clarify logging, also use proper structured log messages - - add [Route] sections - - add more keys to [Address] sections - - add DHCPv4 support (and, longer term, other kinds of dynamic config) + - add more keys to [Route] and [Address] sections + - add support for more DHCPv4 options (and, longer term, other kinds of dynamic config) - add proper initrd support (in particular generate .network/.link files based on /proc/cmdline) External: