При обработке аргумент --root в скрипте systemd-sysv-install одинарные кавычки попадают внутрь значения переменной CHROOT, где затем интерпретируются буквально, как часть пути. Возможно, что я ошибся в описании, и всё происходит иначе, однако оно не работает: [root@host-121 ~]# sh -x /lib/systemd/systemd-sysv-install --root=/mnt enable pcscd + set -e ++ getopt -o r: --long root: -- --root=/mnt enable pcscd + eval set -- ' --root '\''/mnt'\'' -- '\''enable'\'' '\''pcscd'\''' ++ set -- --root /mnt -- enable pcscd + true + case "$1" in + ROOT=/mnt + shift 2 + true + case "$1" in + shift + break + '[' -n /mnt ']' + '[' /mnt '!=' / ']' + CHROOT='chroot '\''/mnt'\''' + NAME=pcscd + '[' -n pcscd ']' + case "$1" in + chroot ''\''/mnt'\''' /sbin/chkconfig --no-redirect pcscd on chroot: не удалось сменить корневой каталог на «'/mnt'»: Нет такого файла или каталога
(В ответ на комментарий №0) > + chroot ''\''/mnt'\''' /sbin/chkconfig --no-redirect pcscd on Может, так сразу и делать? (с точностью до кавычек)
В смысле, отказаться от переменной CHROOT, заменив её на chroot "$ROOT" ... непосредственно там, где она сейчас используется? Раскрывать переменную с путём в самой командной строке? Тогда и защита от пробелов сохранится, и опасный eval не будет нужен. Но я пока в своей сборке просто убрал одинарные кавычки из CHROOT=...
systemd-1:234-alt3 -> sisyphus: Fri Aug 11 2017 Paul Wolneykien <manowar@altlinux.org> 1:234-alt3 - Fix: Make --root option really work (closes: 33749).