Perl スクリプトから NFS 共有への権限 tar 抽出

Perl スクリプトから NFS 共有への権限 tar 抽出

ソフトウェアのインストール手順の一部として、以下を使用します。

curl -s <url-to-targz> | tar -p -x -z -C /

Perl スクリプト内で (または を使用しますqx($command)system($command)、どちらでもかまいません。すべてがうまくいき、tar ボールがシステムの / にインストールされましたが、同じことを nfs 共有に対して実行すると、次のようになります。

curl -s <url-to-targz> | tar -p -x -z -C /my-nfs/opt

すると次のことが起こります:

  • プロンプトでこれを実行すると、うまくいきます (つまり、tar ボールに保存したすべての権限がそのまま維持されます)。
  • Perl スクリプト (またはシェル スクリプト) 内からこれを実行すると、権限が変更される状況 (たとえば、実行可能だったものが実行不可能になる) に陥りますqx($command)system($command)

これは umask (私のシステムでは 022) に関係しているのではないかと疑っています。通常は -p フラグで対処できるはずですが、この場合はまだうまくいきません。誰か私に何かアドバイスはありますか (man ページを読む以外に :-))?

のようなものも試してみましたsystem("umask xyz; $command")が、(おそらく が$commandを取得するプロセスのフォークを使用しているためumask 022)、やはりうまくいきませんでした。

編集: 回答の中には、Perl の umask を使用する必要があると示唆しているものがあります。umask 000 でうまくいくと思います (ただし、朝、システムで確認します)。ただし、umask はファイルとディレクトリに異なる影響を及ぼします。プログラムの実行中に umask を完全に無効にする方法はありますか (セキュリティ上の理由が 1000 個あるにもかかわらず)。

関連情報