Разрешения на извлечение tar в общий ресурс nfs из скрипта Perl

Разрешения на извлечение tar в общий ресурс nfs из скрипта Perl

В рамках процедуры установки программного обеспечения я использую:

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): тоже никакой радости.

Редактировать: Некоторые ответы указывают, что мне следует использовать umask Perl. Я думаю, что umask 000 сработает (но я увижу это утром, когда буду в системе). Однако umask по-другому влияет на файлы и каталоги. Есть ли способ полностью отключить umask во время работы моей программы (несмотря на тысячу соображений безопасности против этого).

Связанный контент