2015-11-10 42 views
8

CentOS 7'yi kullanıyorum ve yeni bir sunucu kuruyorum.Sorunlu Konumda Kurulu CPAN Modülleri

Kök olarak oturum açarken, CPAN aracılığıyla birden fazla perl modülü yükledim. Maalesef, kök dizininin içine yerleştirilmiş gibi görünüyorlar. tüm birimlerinin yüklendiği kadar bu fark etmedi, ama bunların çoğu artık böyle konumlara sahip: Bu kök dışında kullanıcılar için, bu modüller, esasen izinleri olarak var olmayan, yani

/root/perl5/lib/perl5/5.16.3/x86_64-linux-thread-multi 
/root/perl5/lib/perl5/5.16.3 
/root/perl5/lib/perl5/x86_64-linux-thread-multi 
/root/perl5/lib/perl5 /usr/local/lib64/perl5 

Onları bu dizinden kilitle.

Bunu, tüm kullanıcılara/root'a okuma erişimi vererek çözebileceğimi biliyorum, ancak tercih etmemeyi tercih ediyorum.

Yani, sormak için bir kaç spesifik sorular vardır:

  • ben yanlış yaptım

    ? CPAN'da ilk kez koştu mu? (CPAN yapılandırması aşağıya yapıştırılmıştır)
  • Bunu temizlemenin en iyi yolu nedir? Modülleri kaldırmam, yapılandırmamı değiştirmem ve sonra onları yeniden yüklemem gerektiğini mi tahmin ediyorum? Deneyimli tavsiye takdir edilmektedir.
  • CentOS 7 için genel kurulum dizini nedir? Onları nereye taşımak isterim? CPAN'ın bunları ideal bir varsayılan konumuna koyacağını varsaydım.

Tüm öneriler minnetle alındı.

cat MyConfig.pm 

$CPAN::Config = { 
    'applypatch' => q[], 
    'auto_commit' => q[1], 
    'build_cache' => q[100], 
    'build_dir' => q[/root/.cpan/build], 
    'build_dir_reuse' => q[0], 
    'build_requires_install_policy' => q[yes], 
    'bzip2' => q[], 
    'cache_metadata' => q[1], 
    'check_sigs' => q[0], 
    'colorize_output' => q[0], 
    'commandnumber_in_prompt' => q[1], 
    'connect_to_internet_ok' => q[1], 
    'cpan_home' => q[/root/.cpan], 
    'ftp_passive' => q[1], 
    'ftp_proxy' => q[], 
    'getcwd' => q[cwd], 
    'gpg' => q[/bin/gpg], 
    'gzip' => q[/bin/gzip], 
    'halt_on_failure' => q[0], 
    'histfile' => q[/root/.cpan/histfile], 
    'histsize' => q[100], 
    'http_proxy' => q[], 
    'inactivity_timeout' => q[0], 
    'index_expire' => q[1], 
    'inhibit_startup_message' => q[0], 
    'keep_source_where' => q[/root/.cpan/sources], 
    'load_module_verbosity' => q[none], 
    'make' => q[/bin/make], 
    'make_arg' => q[], 
    'make_install_arg' => q[], 
    'make_install_make_command' => q[/bin/make], 
    'makepl_arg' => q[], 
    'mbuild_arg' => q[], 
    'mbuild_install_arg' => q[], 
    'mbuild_install_build_command' => q[./Build], 
    'mbuildpl_arg' => q[], 
    'no_proxy' => q[], 
    'pager' => q[/bin/less], 
    'patch' => q[/bin/patch], 
    'perl5lib_verbosity' => q[none], 
    'prefer_external_tar' => q[1], 
    'prefer_installer' => q[MB], 
    'prefs_dir' => q[/root/.cpan/prefs], 
    'prerequisites_policy' => q[follow], 
    'scan_cache' => q[atstart], 
    'shell' => q[/bin/bash], 
    'show_unparsable_versions' => q[0], 
    'show_upload_date' => q[0], 
    'show_zero_versions' => q[0], 
    'tar' => q[/bin/tar], 
    'tar_verbosity' => q[none], 
    'term_is_latin' => q[1], 
    'term_ornaments' => q[1], 
    'test_report' => q[0], 
    'trust_test_report_history' => q[0], 
    'unzip' => q[], 
    'urllist' => [q[http://mirror.sov.uk.goscomb.net/CPAN/], q[http://ww 
+w.mirrorservice.org/sites/cpan.perl.org/CPAN/], q[http://cpan.mirrors 
+.ovh.net/ftp.cpan.org/]], 
    'use_sqlite' => q[0], 
    'version_timeout' => q[15], 
    'wget' => q[/bin/wget], 
    'yaml_load_code' => q[0], 
    'yaml_module' => q[YAML], 
}; 
1; 
__END__ 
+3

Bu durum, [Bir modülü CPAN ile başarıyla yükledim, ancak perl bunu bulamıyorum. Neden?] (Http://stackoverflow.com/q/32726324/176646) – ThisSuitIsBlackNot

+1

İkinci ve üçüncü sorularınızı yanıtlayabilirim: [perlbrew] (http://perlbrew.pl/). –

+0

Eğer sistem Perl kullanıyorsanız, o zaman 'yum' kullanarak modülleri yüklemeyi denediniz mi? –

cevap

0

Sen root olarak yüklü modülleri, bu yanlış :) Modül kurulumu incelemek asla ve insanlardan bilmiyor ve olmamalıdır anlamına (modül testleri dahil) kod birçok çalışan içerir ne yaptığını bulunuyor güven.

Varsayılan olarak, CPAN.pm modüllerin nereye yerleştirileceğine karar vermek için Perl'inizin kurulumuna bakacaktır. Onları varsayılan @INC'da dizinlerden birine koymak ister.

CentOS kullanıcısı değilim, ancak önerilerim, kullanıcılar için farklı bir perl yüklemektir. Sisteminizin temizlik işlerini yapması gereken perl'u bozmak istemezsiniz.

Ayrıca configure CPAN to install in a particular location da yapabilirsiniz. (Root olarak giriş)

+0

O zaman sudo cpan' kullanmak doğru mu? –

+0

Ben cpan için sudo istemiyorum. Ya Perl dizinleri (farklı bir perl) sahibi olan gruba ait bir kullanıcı var veya distro paket yöneticisi aracılığıyla sistem perl güncelleştirin. –

+0

Kullanıcı, sudo kullanarak veya span komutunu kullanarak sistem çapında paketler kurmak istiyor ya da yerel :: lib'in gereksinimlerini nasıl öldürdüğüyle ilgili hiçbir şey değiştirmiyor. – mikebabcock

2

En basit çözüm

vi ~/.bashrc

açıklama dışarı aşağıdaki satırları:

#export PERL_LOCAL_LIB_ROOT="$PERL_LOCAL_LIB_ROOT:/root/perl5"; 
    #export PERL_MB_OPT="--install_base /root/perl5"; 
    #export PERL_MM_OPT="INSTALL_BASE=/root/perl5"; 
    #export PERL5LIB="/root/perl5/lib/perl5:$PERL5LIB"; 
    #export PATH="/root/perl5/bin:$PATH"; 

Günlüğü dışarı, şimdi kök olarak tekrar giriş ve cpan Doğru sistem dizinlerine yüklenir.

/root/perl5 dizinini siler ve yeniden başlatır.