В спеке unit есть: %pre checkinstall set -ex # systemd-analyze better works in non-'/'. cd systemd-analyze verify unit.service Голый `cd` без аргументов переходит в $HOME. Если переменная HOME не задана в окружении процесса, выполняющего rpm-транзакцию, скриптлет падает: + cd /tmp/rpm-tmp.zCv9TW: строка 3: cd: Не задана переменная HOME ошибка: %prein(unit-checkinstall-1.35.0-alt2.x86_64) scriptlet failed, exit status 1 Именно это происходит при офлайн-обновлении через PackageKit (pk-offline-update, используется в discover/gnome-software): packagekitd очищает своё окружение (clearenv() в pk-main.c), поэтому HOME в скриптлетах отсутствует. В результате unit-checkinstall не обновляется, а unit обновляется; из-за жёсткой зависимости unit-checkinstall на точный disttag (unit = %EVR c disttag) система остаётся в состоянии "Unmet dependencies", которое не лечится даже apt-get dist-upgrade (только явным apt-get install unit-checkinstall). Воспроизведение без PackageKit: # env -u HOME apt-get install --reinstall -y unit-checkinstall ... + cd /tmp/.private/root/rpm-tmp.XXX: строка 3: cd: Не задана переменная HOME ошибка: %prein(unit-checkinstall-...) scriptlet failed, exit status 1 Проблема присутствует и в p11 (1.35.0-alt2), и в Sisyphus (1.35.0-alt4). Предложение: заменить `cd` на `cd /` (или `cd /tmp`, `cd "$(mktemp -d)"`) — не полагаться на наличие HOME в окружении скриптлета.
(Ответ для Alexander Makeenkov на комментарий #0) > Голый `cd` без аргументов переходит в $HOME Ни в какие ~/ вообще нельзя соваться из-под root. Это баг.