2017-04-05 20 views
3

我有一個setuid程序,然後代表用戶以root身份調用cpan。這適用於像yum這樣的命令,但cpan失敗。我的問題是,用戶的主目錄是NFS裝入共享,並使用root-squash選項,因此root無權訪問用戶的主目錄。cpan對.local目錄的使用可以重定向嗎?

Cpan嘗試在用戶家中創建一個.local目錄,該目錄由於根部壁球而失敗。

有沒有一種方法來配置cpan,以便它將使用另一個路徑作爲其基礎來構建包?或者,有沒有辦法將root設置爲記錄的用戶標識,以便cpan試圖在那裏創建.local文件?

輸出示例:

./cloudSoftware CPAN foobar的 的mkdir /home/auto/ts00086/.local:權限被拒絕在/usr/share/perl5/CPAN/HandleConfig.pm線589

回答

3

cpan_home_dir_candidates生成一個目錄列表。

  1. 在包含CPAN/MyConfig.pm使用列表中的第一個目錄。
  2. 否則,將使用列表中第一個存在的目錄。
  3. 否則,將使用列表中的第一個目錄。

那麼列表如何構建?

if ($CPAN::META->has_usable('File::HomeDir')) { 
    if ($^O ne 'darwin') { 
     push @dirs, File::HomeDir->my_data; 
     # my_data is ~/Library/Application Support on darwin, 
     # which causes issues in the toolchain. 
    } 
    push @dirs, File::HomeDir->my_home; 
} 
# Windows might not have HOME, so check it first 
push @dirs, $ENV{HOME} if $ENV{HOME}; 
... 

選項包括:

  • 更改HOME的環境變量(如果沒有安裝文件::主目錄)。
  • 編輯cpan_home_dir_candidatesCPAN/HandleConfig.pm添加push @dirs, "/alt/dir";
  • ...
+0

我能跑 「HOME = '/ tmp目錄' CPAN的Net :: foobar的」,和它的工作。謝謝! –

相關問題