Perl не распознает модуль / путь к модулю для пользователя root

Я новичок в Perl, так что терпите меня. Спасибо за помощь.

У меня есть машина Ubuntu с Perl. Я выполнил руководство по начальной загрузке local :: lib

Я использовал cpanm для установки DBI и других модулей в свою систему. Я обеспокоен тем, что в моей системе могут быть другие модули DBI, которые могут быть частью проблемы. Это результат find / -name 'DBI.pm' 2>/dev/null:

/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/blib/lib/Bundle/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/DBI.pm
/home/ubuntu/.cpanm/work/16125643.6178/DBI-1.643/lib/Bundle/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/DBI.pm
/home/ubuntu/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/Bundle/DBI.pm

Я добавил 2 строки в свой файл .bashrc. (Я добавил вторую строку, потому что я сломал что-то для пользователя без полномочий root, и это исправило; может быть, я что-то сломал с помощью local :: lib?)

eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"
PERL5LIB="/home/ubuntu/perl5/lib/perl5"

Я могу запустить свой Perl-скрипт как пользователь без полномочий root. Если я запускаю с sudo perlScript.pl, я получаю эту ошибку: Can't locate DBI.pm in @INC (you may need to install the DBI module)

Я уже какое-то время занимаюсь устранением неполадок @INC и не могу понять, как настроить его для пользователя root. Я пробовал разные вещи, включая добавление PERL5LIB в .profile и вызов моего скрипта следующим образом: sudo sh -c '. ~/.profile; perl ~/perlScripts/perlScript.pl "argForScript"' (я подтвердил, что PERL5LIB устанавливается с sudo sh -c '. ~/.profile; echo $PERL5LIB')

Однако я всегда получаю сообщение об ошибке @INC. Самая очевидная вещь, которую я заметил, - это сравнение sudo perl -V и perl -V. Вызов sudo не показывает никаких переменных ENV, а @INC не включает желаемое расположение PERL5LIB. Не-sudo вызов действительно показывает желаемые переменные ENV и @INC.

Я подумываю о том, чтобы стереть данные и выполнить новую установку с привилегиями root для local :: lib и cpan. Не совсем уверен, что еще попробовать на этом этапе.


person Bix    schedule 09.02.2021    source источник
comment
По какой причине вы создаете локальную библиотеку для пользователя ubuntu и не устанавливаете ли модули Perl глобально, когда в конце ваши сценарии должны запускаться от имени пользователя root?   -  person Tekki    schedule 09.02.2021
comment
Если я буду работать с sudo ... Зачем вам запускать его с sudo? Когда вы установили local::lib, вы установили его для пользователя ubuntu, поэтому он не будет работать для другого пользователя, такого как root   -  person Håkon Hægland    schedule 09.02.2021
comment
Re Я подумываю о том, чтобы стереть данные и выполнить новую установку с правами root для local :: lib и cpan. Не совсем уверен, что еще попробовать на этом этапе., это не помешает sudo не передать PERL5LIB. Настройка PERL5LIB внутри sudo поможет.   -  person ikegami    schedule 09.02.2021
comment
Я предпочитаю устанавливать свой собственный Perl, а не использовать local :: lib. perlbrew может помочь с этим.   -  person ikegami    schedule 09.02.2021
comment
Если вы устанавливаете модули для /, принадлежащие пользователю ubuntu, а затем позволяете использовать их пользователю root, теперь у вас есть дыра в безопасности, с помощью которой пользователь ubuntu может перейти к привилегиям root. Материал, выполняемый root, должен принадлежать root.   -  person Dave Mitchell    schedule 09.02.2021
comment
Спасибо за ваши Коментарии. Мне нужно запустить sudo для доступа к определенным файлам, поэтому я собираюсь попробовать новую установку с sudo. Я опасаюсь использовать sudo для установки вещей, поэтому изначально я устанавливаю local :: lib. Я также взгляну на Perlbrew.   -  person Bix    schedule 10.02.2021


Ответы (1)


Вот те команды, которые у меня сработали. Я испортил свою первую среду установкой local :: lib / non-sudo cpan, поэтому установил новую виртуальную машину.

sudo apt install make
sudo apt install build-essential
sudo apt install libmysqlclient-dev
sudo cpan App::cpanminus
cpanm --sudo DBI
cpanm --sudo Array::Utils
cpanm --sudo DBD::mysql
person Bix    schedule 12.02.2021