Можно ли избежать выполнения make и make install с помощью sudo?

Когда это возможно, я стараюсь использовать приложения, библиотеки и плагины, поставляемые через официальный APT Ubuntu. Однако иногда я пытаюсь скомпилировать что-нибудь, например плагин resynthesizer для GIMP. Во многих случаях компиляция требует от меня выполнения sudo make и sudo make install . Без этого сценарии не работают, потому что они пытаются скопировать файлы в папки, у которых есть права доступа root.

Поскольку я не являюсь автором программы, я очень боюсь это делать (выполнять такие сценарии как суперпользователь). Боюсь, что это сломает систему. Можно ли безопасно компилировать программы без использования sudo ?

0
задан 1 December 2020 в 21:37

1 ответ

Всегда можно скомпилировать программное обеспечение "локально" в вашем собственном домашнем каталоге - насколько легко его установить и запустить локально, зависит от разработчиков программного обеспечения.

Для программного обеспечения с открытым исходным кодом, использующего знакомый рецепт automake

./configure
make 
make install

,скрипт configure должен обычно предоставлять параметр --prefix, который устанавливает корень путь установки — например,

./configure --prefix=$HOME

приведет к установке сгенерированных двоичных файлов в ~/bin вызывающего пользователя, библиотек в ~/lib, файлов конфигурации в ~ /etc и так далее. Каталоги будут созданы автоматически, если они еще не существуют.

Однако в конкретном случае с плагином gimp resynthesizer шаг make install, по-видимому, по-прежнему пытается установить пару файлов в $(GIMP_LIBDIR)/plug- ins, где GIMP_LIBDIR = /usr/lib/gimp/2.0 жестко запрограммировано, а не получено из значения --prefix.

Это может быть недосмотр со стороны разработчиков программного обеспечения или может быть связано с совместимостью с самим GIMP. Однако вы можете преодолеть это, изменив рецепт следующим образом:

./configure --prefix=$HOME
make
make GIMP_LIBDIR=$HOME/lib/gimp/2.0/ install

что должно привести к следующей структуре каталогов плагинов:

$ find ~/lib -newermt yesterday
/home/username/lib
/home/username/lib/gimp
/home/username/lib/gimp/2.0
/home/username/lib/gimp/2.0/plug-ins
/home/username/lib/gimp/2.0/plug-ins/plugin-map-style.py
/home/username/lib/gimp/2.0/plug-ins/plugin-heal-transparency.py
/home/username/lib/gimp/2.0/plug-ins/plugin-resynth-enlarge.py
/home/username/lib/gimp/2.0/plug-ins/plugin-render-texture.py
/home/username/lib/gimp/2.0/plug-ins/resynthesizer
/home/username/lib/gimp/2.0/plug-ins/resynthesizer_gui
/home/username/lib/gimp/2.0/plug-ins/plugin-resynth-sharpen.py
/home/username/lib/gimp/2.0/plug-ins/plugin-uncrop.py
/home/username/lib/gimp/2.0/plug-ins/plugin-heal-selection.py
/home/username/lib/gimp/2.0/plug-ins/plugin-resynth-fill-pattern.py
1
ответ дан 2 December 2020 в 00:59

Другие вопросы по тегам:

Похожие вопросы: