LINUX.ORG.RU
решено ФорумAdmin

Где должен быть mkdir?

 , , ,


1

1

Тестовый debian11 сервер, на котором в виду издевательств на системой как-то оказалось

root@debian:~# which mkdir
/usr/bin/mkdir
root@debian:~# dpkg -S /usr/bin/mkdir
dpkg-query: не найден путь, подходящий под шаблон /usr/bin/mkdir
root@debian:~# dpkg -L coreutils | grep mkdir
/bin/mkdir
/usr/share/man/man1/mkdir.1.gz
root@debian:~# cat /etc/debian_version 
11.4
root@debian:~# ls -lha /usr/bin/mkdir
-rwxr-xr-x 1 root root 84K сен 24  2020 /usr/bin/mkdir
root@debian:~# md5sum /usr/bin/mkdir /bin/mkdir 
e70b34a37b294e638e63fbff22632a90  /usr/bin/mkdir
e70b34a37b294e638e63fbff22632a90  /bin/mkdir

И продакт сервер

root@h398:~# which mkdir
/bin/mkdir
root@h398:~# dpkg -S /bin/mkdir
coreutils: /bin/mkdir
root@h398:~# dpkg -L coreutils | grep mkdir
/bin/mkdir
/usr/share/man/man1/mkdir.1.gz
root@h398:~# cat /etc/debian_version 
11.3

А теперь мне потребовалось сделать /opt/puppetlabs/puppet/bin/gem install ruby-lxc

На тестовом сервере всё ок, а вот на продакт я вижу такую картину

make: /usr/bin/mkdir: No such file or directory
make: *** [Makefile:202: .sitearchdir.-.lxc.time] Error 127

make install failed, exit code 2

Раскопал makefile, да, там явно указано MAKEDIRS = /usr/bin/mkdir -p

Покопался в интернет с похожей ошибкой.

Посмотрел на своей системе(manjaro) $ which mkdir -> /usr/bin/mkdir

Я понимаю, что вроде бы разработчики ожидают что mkdir будет в /usr/bin и что решение ln -s напрашивается. Но в debian это не сделано, в ubuntu судя по всему тоже.

Мне интересно правильнее ли будет править makefile под свою систему? Может я отстал от жизни и надо просто apt upgrade сделать или какой особый пакет доустановить?

PS утащите в talks, если кажется, что там оно более к месту.

★★

Я не очень понимаю, к чему тут всякие выводы dpkg. В 11 дебиане, при новой установке, /bin является символической ссылкой на /usr/bin. Естественно, что при установке пакета coreutils всё, что пакет захочет положить в /bin, окажется в /usr/bin. В пакете написано одно, which покажет другое, оба по своему правы. В данном случае продакт, скорее всего, не чистая установка, а обновление с предыдущего релиза (а может и с более раннего, я не помню, был ли симлинк /bin→/usr/bin в 10 дебиане, может уже тогда при чистой установке был).

gremlin_the_red ★★★★★
()
Последнее исправление: gremlin_the_red (всего исправлений: 1)
Ответ на: комментарий от gremlin_the_red

/bin является символической ссылкой на /usr/bin

О, вот чего я не заметил.

да, это верно для тестового сервера, но не верно для продакта.

продакт, скорее всего, не чистая установка

Продакт сервер был сделан силами debootstrap.

Вот так # debootstrap --arch amd64 stable /mnt https://deb.debian.org/debian в начале месяца.

И что мне теперь только ln -s точечно делать остаётся? Я более чем уверен, что сломаю систему, если сейчас или в RescueCD сделаю ln -s /usr/bin /bin

Flotsky ★★
() автор топика

mkdir должен быть в $PATH. Любые другие предположения неправильны.

Если по какой-то причине твоя утилита не умеет использовать $PATH, используй /bin/mkdir. Он должен работать почти везде.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 1)