2009-09-02 4 views
4

Мне нужно установить некоторые модули CPAN в окне linux, в котором у меня нет привилегии root.Почему для установки некоторых модулей CPAN требуются привилегии root?

Установка Spreadsheet::WriteExcel идет вполне плавно. Но попытка установить File::Find::Rule не удалось с предупреждением «у вас нет разрешений на установку в .....» и подсказка «вам может потребоваться su для root для установки пакета»

Я озадачен, почему некоторые CPAN установка модуля требует прав root, а других нет? и если я действительно хочу использовать File::Find::Rule в этом Linux-окне, есть ли какое-нибудь решение для работы, которое я могу выбрать?

спасибо.

ответ

13

У вас есть установка CPAN для этого пользователя для установки в каталог, которым вы управляете?

Если да, то вы могли бы быть запущены в различиях между модулями, которые используют Extutils::MakeMaker (самый старый и самый распространенный билд системы/установку), Module::Build и Module::Install. У всех у них мало причуд.

Именно поэтому local::lib был создан. Как только вы его установили и настроите, вам больше не придется беспокоиться об этом (за исключением модулей-изгоев, которые хотят писать вещи в определенные места, даже если им было сказано не).

+2

Чтобы выяснить, механизмы сборки могут быть установлены в локальные каталоги (которые вы сами), а не в системные каталоги (которые доступны только для чтения, поскольку они затрагивают всех пользователей), но механизмы их установки в новом месте различаются. local :: lib знает, как обрабатывать их все, и в качестве дополнительного бонуса обновляет ваш путь включения Perl. – ijw

+1

И ваш исполняемый путь, чтобы вы могли найти сценарии, которые устанавливают некоторые модули (например, Perl :: Tidy). –

-3

Это связано с тем, что некоторые пакеты установлены в местах, где у вашего пользователя нет разрешения на запись.

Моей рекомендацией было бы получить администратора для установки пакетов для вас. Я подозреваю, что нет простого способа обойти это.

+0

@ Gordon: существует ли какое-либо правило, которое направляет писателя модуля, где должен быть деполирован модуль, и есть ли гибкость, которую пользователь может выбрать, где будет установлен модуль? –

+0

Извините, это не то, что я когда-либо пробовал. Если это не удается по этой причине, я просто устанавливаю его с помощью sudo –

+0

. Простые обходы. Вероятно, поэтому этот ответ был отклонен. –

2

Возможно, у вас нет прав на установку модуля в системный каталог, например /usr/lib. Если вы хотите это сделать, вам нужно выполнить шаг make install с разрешениями суперпользователя (su или sudo).

В качестве альтернативы вы можете установить модуль Perl в локальный каталог, для которого у вас есть разрешения, а не для установки в системное местоположение по умолчанию. Вы указываете настраиваемый каталог при создании make-файла.

От perlmodinstall:

gzip -dc yourmodule.tar.gz | tar -xof - 
perl Makefile.PL PREFIX=/my/perl_directory 
make 
make test 
make install 
+0

perlmodinstall является старым (и теперь это в моем списке вещей, чтобы исправить). Вместо PREFIX используйте INSTALL_BASE. –

+0

И это трудоемкий способ сделать это, поскольку он не обрабатывает зависимости для вас. Просто используйте 'cpan .' для установки из текущего каталога, включая все зависимости. –

9

Заканчивать local::lib для установки в других местах.

8

От perlfaq8:


How do I keep my own module/library directory?

При создании модулей скажите Perl, где устанавливать модули.

Для распределений Makefile.PL основы, используйте опцию INSTALL_BASE при создании Makefiles:

perl Makefile.PL INSTALL_BASE=/mydir/perl 

Вы можете установить это в вашей конфигурации CPAN.pm так модули автоматически установить в вашей частной директории библиотеки, когда вы используете CPAN.pm оболочка:

% cpan 
cpan> o conf makepl_arg INSTALL_BASE=/mydir/perl 
cpan> o conf commit 

Для распределений Build.PL основы, используйте --install_base вариант:

perl Build.PL --install_base /mydir/perl 

Вы можете настроить CPAN.pm автоматически использовать этот вариант тоже:

% cpan 
cpan> o conf mbuild_arg --install_base /mydir/perl 
cpan> o conf commit 
0

Это правда, что некоторые пакеты под UNIX требуют, чтобы пользователь «корень». При установке Template :: Toolkit это вызвало AppConfig, который выпрыгнул с:

You may have to su to root to install the package 
    (Or you may want to run something like 
    o conf make_install_make_command 'sudo make' 
    to raise your permissions. 

Cygwin не UNIX. Это всего лишь набор утилит UNIX для Cygwin. Существует нет корень пользователь и нет sudo и нет способа подделать его. Если вы запустили Bash в качестве администратора, это не повлияло на то, чтобы как-то стать root. (На самом деле это может быть опасно.)

Действительная проблема заключалась в том, что /USR/человек/man3 не имеет права:

> ls -ls /usr/share/man 
total 1.2M 
384K d--------- 1 spindlea Domain Users 0 Oct 29 18:55 man1/ 
768K d--------- 1 spindlea Domain Users 0 Oct 29 18:55 man3/ 
8.0K d--------- 1 spindlea Domain Users 0 Oct 29 12:35 man5/ 
12K d--------- 1 spindlea Domain Users 0 Oct 6 16:26 man7/ 
12K d--------- 1 spindlea Domain Users 0 Oct 29 12:35 man8/ 
    0 d--------- 1 spindlea Domain Users 0 Oct 6 16:26 mann/ 

Так люди-страница не может быть установлена. Причина: C:/Cygwin был распакован из архива. В файловых системах NTFS Cygwin по умолчанию реализует разрешения UNIX для ACL Windows (хотя их нельзя увидеть на вкладке «Безопасность»). Они не сохранились в ZIP-архиве.

Для восстановления права использовать что-то вроде:

> chmod -R 755 /usr/bin  # sets -rwxr-xr-x 
> chmod -R 755 /usr/local/bin # sets -rwxr-xr-x 
> find /bin -type d -print -exec chmod 777 {} \; 
> find /etc -type d -print -exec chmod 777 {} \; 
> find /usr -type d -print -exec chmod 777 {} \; 
    . 
    . 

проблема ушла. Установка прошла без проблем. CPAN смог удовлетворить все зависимости.

Нет «Возможно, вам больше не придется устанавливать root для установки пакетов».

Смежные вопросы