Kinoite: Workaround missing (g)shadow entries for plasmalogin

The `/etc/shadow` and `/etc/gshadow` files are currently not properly
updated on rpm-ostree/bootc systems when new system users are added
using systemd-sysusers configs in the image.

Workaround that issue for the `plasmalogin` user specifically.

See: https://forge.fedoraproject.org/kde/tickets/issues/684

For more details why this happens and the likely proper fix, see:
- https://github.com/bootc-dev/bootc/issues/1179
- https://github.com/coreos/fedora-coreos-tracker/issues/1599
- https://github.com/coreos/rpm-ostree/issues/49
This commit is contained in:
Timothée Ravier 2026-03-02 17:43:01 +01:00
parent 37f53894b4
commit 84104fc1ca

View file

@ -51,3 +51,66 @@ postprocess:
UseUnattendedUpdates=true
RequiredNotificationInterval=604800
EOF
# Workaroud for missing shadow & gshadow entries for plasmalogin. See:
# https://forge.fedoraproject.org/kde/tickets/issues/684
# For more details why this happens and a potential proper fix, see:
# - https://github.com/bootc-dev/bootc/issues/1179
# - https://github.com/coreos/fedora-coreos-tracker/issues/1599
# - https://github.com/coreos/rpm-ostree/issues/49
- |
#!/bin/bash
set -xeuo pipefail
cat > /usr/lib/systemd/system/fedora-kinoite-plasmalogin-workaround.service << 'EOF'
[Unit]
Description=Workaround for missing plasmalogin entries in /etc/shadow & /etc/gshadow on Kinoite
Documentation=https://forge.fedoraproject.org/kde/SIG/issues/684
ConditionPathIsReadWrite=/etc
ConditionPathExists=/run/ostree-booted
ConditionPathExists=!/etc/.fedora-kinoite-plasmalogin-workaround
Before=plasmalogin.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/libexec/fedora-kinoite-plasmalogin-workaround
[Install]
WantedBy=multi-user.target
EOF
cat > /usr/libexec/fedora-kinoite-plasmalogin-workaround << 'EOF'
#!/bin/bash
# See: https://forge.fedoraproject.org/kde/tickets/issues/684
set -euo pipefail
echo "Checking plasmalogin entries in /etc/shadow & /etc/gshadow"
if [[ $(grep -c "plasmalogin" "/etc/shadow") -eq 0 ]]; then
echo "plasmalogin:!*:::::::" >> "/etc/shadow"
echo "Added missing plasmalogin entry to /etc/shadow"
else
echo "Nothing to do for /etc/shadow"
fi
if [[ $(grep -c "plasmalogin" "/etc/gshadow") -eq 0 ]]; then
echo "plasmalogin:!*::" >> "/etc/gshadow"
echo "Added missing plasmalogin entry to /etc/gshadow"
else
echo "Nothing to do for /etc/gshadow"
fi
echo "Writing stamp file: /etc/.fedora-kinoite-plasmalogin-workaround"
touch /etc/.fedora-kinoite-plasmalogin-workaround
EOF
chmod a+x /usr/libexec/fedora-kinoite-plasmalogin-workaround
cat > /usr/lib/systemd/system-preset/82-kinoite.preset << 'EOF'
# See: https://forge.fedoraproject.org/kde/tickets/issues/684
enable fedora-kinoite-plasmalogin-workaround.service
EOF
systemctl preset fedora-kinoite-plasmalogin-workaround.service