Отсутствует модуль Perl, работающий в Solaris 5.10

Похоже, вы ищете не только фиксированный mtime внутри TAR, но и бит -for -бит идентичный tarball, учитывая, что сами файлы идентичны. На самом деле это сложнее, чем кажется.

В зависимости от вашей ситуации не все пункты могут иметь значение, но я перечисляю их здесь для полноты картины. В GNU tar вы можете сделать следующее:

  • установите mtime с помощью --mtime=. Начиная с версии 1.29 (в Debian 1.28 -1, вы можете использовать --clamp-mtime, чтобы установить реальное mtime файла только для файлов /новее/, чем заданное mtime. Это полезно, когда вы хотите дать сгенерированным файлам общую временную метку, но не трогать другие файлы.
  • Чтобы иметь предсказуемый порядок файлов в архиве, используйте--sort=name(GNU tar 1.28 или более позднюю ). Поведение по умолчанию — --sort=none, при котором файлы хранятся в порядке каталогов.
  • --owner=0 --group=0 --numeric-ownerдля установки владельца (, если вы создаете TAR от разных пользователей ).
  • разрешения могут отличаться из-за разных umask. Используйте chmodперед созданием архива или используйте --mode=, чтобы изменить их, чтобы они были согласованными.

В инициативе Reproducible Builds есть хорошая статья о создании битовых -для -битовых идентичных архивов .

В статье также представлены некоторые обходные пути для старых версий tar, которые могут работать и с другими реализациями TAR. Обходной путь для mtime, в частности, заключается в том, что вы можете использовать touchперед созданием TAR, чтобы установить фиксированное значение mtime для всех файлов старше определенной даты. Для предсказуемого порядка внутри архива используйте findи sort, чтобы передать упорядоченный список файлов -в TAR.

find build -print0 | LC_ALL=C sort -z
  | tar --no-recursion --null -T - -cf product.tar

См. документацию GNU TAR и справочную страницу для получения информации об отдельных параметрах.

0
20.11.2019, 10:59
1 ответ

Да :вам определенно нужен модуль "Date ::Simple " где-то .

Пути, которые ищет ваш perl, упоминаются в сообщении об ошибке:

/usr/perl5/5.8.4/lib/i86pc-solaris-64int
/usr/perl5/5.8.4/lib
/usr/perl5/site_perl/5.8.4/i86pc-solaris-64int 
/usr/perl5/site_perl/5.8.4
/usr/perl5/site_perl
/usr/perl5/vendor_perl/5.8.4/i86pc-solaris-64int
/usr/perl5/vendor_perl/5.8.4
/usr/perl5/vendor_perl
.


Как упоминал Эндрю , было бы лучше просто не добавлять его в ваш /usr, что также означает, что вам придется добавить некоторые use lib '/some/path';в свой сценарий.

Вот несколько способов сделать это:

  • Установка этого модуля старым (и простым )способом, в собственном локальном каталоге скрипта:
    (сначала получите установочный архив модуля с CPAN)

    tar -zxvf Date-Simple-3.03.tar.gz
    cd Date-Simple-3.03
    PREFIX=/your/script/directory perl Makefile.pl
    make && make install
    

    затем измените начало вашего скрипта так, чтобы:

    #!/usr/bin/perl
    use strict;
    use warnings;
    use File::Spec::Functions;
    use FindBin;
    use lib catfile($FindBin::Bin, 'lib');
    ...
    


  • perlbrewтакже может быть решением, так как это довольно простой способ разместить вашу собственную установку Perl вне системных каталогов (вам может понадобиться немного поискать информацию о Solaris):


  • Если вы чувствуете себя достаточно комфортно в своей системе /usr, вы все равно можете использовать системные инструменты perl CPAN для установки этого модуля:

2
28.01.2020, 02:29

Теги

Похожие вопросы