Bug 60494
| Summary: | %pre checkinstall падает при незаданном HOME: голый cd в скриптлете | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Alexander Makeenkov <amakeenk> |
| Component: | unit | Assignee: | Andrew Vasilyev <andy> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | andy, rider, vt, zerg |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
| See Also: | https://bugzilla.altlinux.org/show_bug.cgi?id=60495 | ||
(Ответ для Alexander Makeenkov на комментарий #0) > Голый `cd` без аргументов переходит в $HOME Ни в какие ~/ вообще нельзя соваться из-под root. Это баг. |

Description
Alexander Makeenkov 2026-09-11 12:05:09 MSKВ спеке 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 в окружении скриптлета.