Bug 33749

Summary: systemd-sysv-install ROOT overquoting
Product: Sisyphus Reporter: manowar <manowar>
Component: systemdAssignee: Alexey Shabalin <shaba>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: aen, arseny, manowar, mike, shaba
Version: unstable   
Hardware: all   
OS: Linux   

Description manowar@altlinux.org 2017-08-11 13:04:45 MSK
При обработке аргумент --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'»: Нет такого файла или каталога
Comment 1 Michael Shigorin 2017-08-12 19:14:42 MSK
(В ответ на комментарий №0)
> + chroot ''\''/mnt'\''' /sbin/chkconfig --no-redirect pcscd on
Может, так сразу и делать? (с точностью до кавычек)
Comment 2 manowar@altlinux.org 2017-08-14 01:27:28 MSK
В смысле, отказаться от переменной CHROOT, заменив её на

  chroot "$ROOT" ...

непосредственно там, где она сейчас используется? Раскрывать переменную с путём в самой командной строке? Тогда и защита от пробелов сохранится, и опасный eval не будет нужен.

Но я пока в своей сборке просто убрал одинарные кавычки из CHROOT=...
Comment 3 Repository Robot 2017-08-16 13:35:19 MSK
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).