2017-04-05 1 views
3

Ich habe ein Setuid-Programm, das dann im Namen des Benutzers cpan als root aufruft. Dies funktioniert für Befehle wie yum, scheitert aber für cpan. Mein Problem ist, dass die Home-Verzeichnisse der Benutzer NFS-gemountete Freigaben sind und die Root-Squash-Option verwenden, so dass Root keinen Zugriff auf das Home-Verzeichnis des Benutzers hat.Kann cpan das .local-Verzeichnis umleiten?

Cpan versucht, ein lokales Verzeichnis im Heim des Benutzers zu erstellen, das aufgrund des Root-Squash fehlschlägt.

Gibt es eine Möglichkeit, cpan so zu konfigurieren, dass es einen anderen Pfad als Grundlage für das Erstellen des Pakets verwendet? Oder gibt es eine Möglichkeit, root als Benutzer-ID des Datensatzes einzurichten, so dass cpan versuchen würde, dort die .local-Datei zu erstellen?

Beispielausgabe:

./cloudSoftware cpan foobar mkdir /home/auto/ts00086/.local: Erlaubnis bei /usr/share/perl5/CPAN/HandleConfig.pm Linie verweigert 589.

Antwort

3

cpan_home_dir_candidates generiert eine Liste von Verzeichnissen.

  1. Das erste Verzeichnis in der Liste, das CPAN/MyConfig.pm enthält, wird verwendet. Ansonsten
  2. , das erste Verzeichnis in der Liste, die verwendet wird, vorhanden ist. Ansonsten
  3. , das erste Verzeichnis in der Liste verwendet wird.

Wie wird die Liste erstellt?

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}; 
... 

Optionen sind:

  • die HOME env var ändern (wenn File :: HomeDir nicht installiert ist).
  • Schnitt cpan_home_dir_candidates in CPAN/HandleConfig.pmpush @dirs, "/alt/dir";
  • hinzufügen ...
+0

konnte ich "HOME = '/ tmp' cpan Net :: foobar", und es funktionierte laufen. Vielen Dank! –