Spec-Zone.ru › Perl 5.38

perlsolaris

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • ОПИСАНИЕ
    • Номера версий Solaris.
  • РЕСУРСЫ
  • НАСТРОЙКА
    • Проблемы с извлечением файлов на Solaris.
    • Компилятор и связанные инструменты на Solaris.
      • Включите /usr/ccs/bin/ в ваш PATH.
      • Избегайте использования /usr/ucb/cc.
      • Компилятор C от Sun
      • GCC
      • GNU as и GNU ld
      • Sun и GNU make
      • Избегайте использования libucb.
    • Среда для компиляции perl на Solaris
      • PATH
      • LD_LIBRARY_PATH
  • ВЫПОЛНЕНИЕ CONFIGURE.
    • 64-битный perl на Solaris.
      • Общие проблемы 32-битных и 64-битных систем.
      • Поддержка больших файлов
      • Компиляция LP64 perl
      • Длинные числа с плавающей точкой.
    • Потоки в perl на Solaris.
    • Проблемы с malloc в perl на Solaris.
  • ПРОБЛЕМЫ С MAKE.
  • ТЕСТИРОВАНИЕ MAKE
    • Тест 4 op/stat.t на Solaris
    • Сброс дампов памяти nss_delete из op/pwent или op/grent
  • КРОСС-КОМПИЛЯЦИЯ
  • ПРЕКОМПИЛИРОВАННЫЕ БИНАРИ ДЛЯ PERL НА SOLARIS.
  • ПРОБЛЕМЫ С РАБОТОЙ PERL НА SOLARIS.
    • Пределы на количество открытых файлов на Solaris.
  • МОДУЛИ, СПЕЦИФИЧНЫЕ ДЛЯ SOLARIS.
  • ПРОБЛЕМЫ С МОДУЛЯМИ, СПЕЦИФИЧНЫЕ ДЛЯ SOLARIS.
    • Proc::ProcessTable на Solaris
    • BSD::Resource на Solaris
    • Net::SSLeay на Solaris
  • SunOS 4.x
  • АВТОР

НАЗВАНИЕ

perlsolaris - Perl версия 5 на системах Solaris

ОПИСАНИЕ

Этот документ описывает различные особенности операционной системы Solaris от Sun, которые повлияют на компиляцию и/или выполнение Perl версии 5 (далее просто perl). Также обсуждаются некоторые проблемы, связанные со старыми системами SunOS 4.x, хотя информация может быть устаревшей.

В основном, всё должно работать.

Начиная с Solaris 8, perl5.00503 (или выше) поставляется с операционной системой, поэтому вам может не потребоваться создавать новую версию perl. Версия, поставляемая Sun, установлена в /usr/perl5 с /usr/bin/perl, указывающим на /usr/perl5/bin/perl. Не трогайте эту установку, если вы не знаете, что делаете. Если вы удалите perl, поставляемый с ОС, некоторые части вашей системы станут неработоспособными. Если вы хотите установить более новую версию perl, установите её с другим префиксом, отличным от /usr/perl5. Обычно используются префиксы /usr/local и /opt/perl.

Вы можете добавить вашу версию perl в PATH всех пользователей, изменив ссылку /usr/bin/perl. Скорее всего, это будет правильно, так как большинство скриптов perl, поставляемых с Solaris, используют явный путь. (Есть несколько исключений, таких как /usr/bin/rpm2cpio и /etc/rcm/scripts/README, но они достаточно общие, так что конкретная версия perl, вероятно, не имеет большого значения.)

Solaris поставляется с набором модулей, специфичных для Solaris. Если вы решите установить свою собственную версию perl, вы найдете исходный код многих из этих модулей в CPAN под пространством имён Sun::Solaris::.

Solaris может включать две версии perl, например, Solaris 9 включает как 5.005_03, так и 5.6.1. Это для обеспечения стабильности между версиями Solaris в тех случаях, когда более поздняя версия perl несовместима с версией, включённой в предыдущей версии Solaris. По умолчанию всегда будет использоваться самая последняя версия perl, а старая версия, как правило, сохраняется только на один выпуск Solaris. Обратите также внимание, что по умолчанию perl не будет искать модули в более старой версии, опять же из-за проблем совместимости/стабильности. Вследствие этого, если вы обновите Solaris, вам придётся перекомпилировать/переустановить любые дополнительные модули CPAN, которые вы установили для предыдущей версии Solaris. Обратитесь к справке CPAN по команде 'autobundle', чтобы быстро это сделать.

В качестве временной меры вы можете либо изменить строку #! в ваших скриптах, чтобы явно указать старую версию perl, например, в Solaris 9 используйте #!/usr/perl5/5.00503/bin/perl для использования версии perl, которая была по умолчанию для Solaris 8, или, если у вас много скриптов, удобнее сделать старую версию perl по умолчанию в вашей системе. Вы можете сделать это, изменив соответствующие символические ссылки в /usr/perl5 (пример для Solaris 9):

# cd /usr/perl5
# rm bin man pod
# ln -s ./5.00503/bin
# ln -s ./5.00503/man
# ln -s ./5.00503/lib/pod
# rm /usr/bin/perl
# ln -s ../perl5/5.00503/bin/perl /usr/bin/perl

В обоих случаях это следует рассматривать только как временную меру — вы должны обновить perl до более поздней версии как можно скорее.

Обратите также внимание, что утилиты perl из командной строки (например, perldoc) и любые другие, добавляемые установленными модулями, будут находиться в /usr/perl5/bin, поэтому этот каталог следует добавить в ваш PATH.

Номера версий Solaris.

Для согласованности с общим использованием, скрипт Configure perl выполняет некоторые незначительные преобразования имени и номера версии операционной системы, как сообщается командой uname. Вот частичная таблица преобразований:

         Sun:                      perl's Configure:
uname    uname -r   Name           osname     osvers
SunOS    4.1.3     Solaris 1.1     sunos      4.1.3
SunOS    5.6       Solaris 2.6     solaris    2.6
SunOS    5.8       Solaris 8       solaris    2.8
SunOS    5.9       Solaris 9       solaris    2.9
SunOS    5.10      Solaris 10      solaris    2.10

Полная таблица находится в FAQ Sun Managers ftp://ftp.cs.toronto.edu/pub/jdd/sunmanagers/faq в разделе "9.1) Which Sun models run which versions of SunOS?".

РЕСУРСЫ

Существует множество источников информации о Solaris. Вот несколько важных из них для perl:

Вопросы и ответы по Solaris

Вопросы и ответы по Solaris доступны по адресу http://www.science.uva.nl/pub/solaris/solaris2.html.

Вопросы и ответы Sun Managers доступны по адресу ftp://ftp.cs.toronto.edu/pub/jdd/sunmanagers/faq

Прекомпилированные бинарники

Прекомпилированные бинарники, ссылки на многие сайты и многое другое доступны по адресам http://www.sunfreeware.com/ и http://www.blastwave.org/.

Документация по Solaris

Вся документация по Solaris доступна онлайн по адресу http://docs.sun.com/.

НАСТРОЙКА

Проблемы с извлечением файлов на Solaris.

Убедитесь, что вы используете программу tar, скомпилированную под Solaris (а не SunOS 4.x), для извлечения файла perl-5.x.x.tar.gz. Не используйте GNU tar, скомпилированный для SunOS4 на Solaris. (GNU tar, скомпилированный для Solaris, должен подойти.) При запуске бинарников SunOS4 на Solaris, система выполнения магическим образом изменяет пути, соответствующие шаблону m#lib/locale#, так что когда tar пытается создать lib/locale.pm, вместо этого создаётся файл lib/oldlocale.pm. Если вы обнаружили это руководство слишком поздно и использовали tar, скомпилированный под SunOS4, вам нужно найти неправильно переименованный файл и переместить его обратно в lib/locale.pm.

Компилятор и связанные инструменты на Solaris.

Для компиляции perl необходимо использовать компилятор ANSI C. Perl можно скомпилировать, используя либо компилятор C от Sun, либо gcc. Компилятор C, поставляемый с SunOS4, не подойдёт.

Включите /usr/ccs/bin/ в ваш PATH.

Несколько инструментов, необходимых для компиляции perl, находятся в /usr/ccs/bin/: ar, as, ld и make. Убедитесь, что /usr/ccs/bin/ находится в вашем PATH.

Во всех выпущенных версиях Solaris (8, 9 и 10) необходимо убедиться, что установлены следующие пакеты (информация взята из FAQ Solaris):

для инструментов (sccs, lex, yacc, make, nm, truss, ld, as): SUNWbtool, SUNWsprot, SUNWtoo

для библиотек и заголовочных файлов: SUNWhea, SUNWarc, SUNWlibm, SUNWlibms, SUNWdfbh, SUNWcg6h, SUNWxwinc

Кроме того, в Solaris 8 и 9 также необходимы:

для 64-битной разработки: SUNWarcx, SUNWbtoox, SUNWdplx, SUNWscpux, SUNWsprox, SUNWtoox, SUNWlmsx, SUNWlmx, SUNWlibCx

И только в Solaris 8 также необходимы:

для библиотек и заголовочных файлов: SUNWolinc

Если вы сомневаетесь, какой пакет содержит нужный вам файл, попробуйте найти установку, где этот файл есть. Затем выполните

$ grep /my/missing/file /var/sadm/install/contents

Это отобразит строку вроде этой:

/usr/include/sys/errno.h f none 0644 root bin 7471 37605 956241356 SUNWhea

Последний элемент (SUNWhea в этом примере) — это необходимый вам пакет.

Избегайте использования /usr/ucb/cc.

Для компиляции perl вам не нужно иметь /usr/ucb/ в вашем PATH. Если вы всё-таки хотите иметь /usr/ucb/ в своём PATH, убедитесь, что /usr/ucb/ НЕ находится в вашем PATH перед каталогом, содержащим правильный компилятор C.

Компилятор C от Sun

Если вы используете компилятор C от Sun, убедитесь, что правильный каталог (обычно /opt/SUNWspro/bin/) находится в вашем PATH (перед /usr/ucb/).

GCC

Если вы используете gcc, убедитесь, что ваша установка современная и полная. Версии perl начиная с 5.6.0 успешно компилируются с gcc > 2.8.1 на Solaris >= 2.6.

Вы должны сконфигурировать perl с помощью

$ sh Configure -Dcc=gcc

В противном случае могут возникнуть странные ошибки компиляции.

Если вы обновили свою версию Solaris, вам, возможно, также потребуется обновить gcc. Например, если вы используете Solaris 2.6, а gcc установлен в /usr/local, проверьте в /usr/local/lib/gcc-lib и убедитесь, что у вас есть соответствующий каталог, sparc-sun-solaris2.6/ или i386-pc-solaris2.6/. Если каталог gcc предназначен для другой версии Solaris, чем та, которую вы используете, вам потребуется пересобрать gcc для вашей новой версии Solaris.

Вы можете получить предварительно скомпилированную версию gcc с сайта http://www.sunfreeware.com/ или http://www.blastwave.org/. Убедитесь, что вы выбрали пакет для вашей версии Solaris.

Если вы хотите использовать gcc для построения дополнительных модулей для использования с perl, поставляемым с Solaris, вы должны использовать модуль Solaris::PerlGcc, который доступен на CPAN. Perl, поставляемый с Solaris, сконфигурирован и скомпилирован с помощью компиляторов Sun, и поэтому информация о конфигурации компилятора, хранящаяся в Config.pm, относится только к компиляторам Sun. Модуль Solaris:PerlGcc содержит замену Config.pm, которая корректна для gcc — см. детали в модуле.

GNU as и GNU ld

Следующая информация относится к версии gcc 2. Добровольцы, желающие обновить ее для версии gcc 3, будут оценены.

Версии as и ld, поставляемые с Solaris, прекрасно работают для построения perl. Обычно нет необходимости устанавливать версии GNU для компиляции perl.

Если вы решите игнорировать этот совет и использовать версии GNU, убедитесь, что они относительно новые. Похоже, что версии, более новые, чем 2.7, достаточно новые. Более старые версии могут иметь проблемы с динамической загрузкой.

Если вы хотите использовать GNU ld, вам необходимо передать ему флаг -Wl,-E. Файл hints/solaris_2.sh пытается сделать это автоматически, задав следующие переменные Configure:

ccdlflags="$ccdlflags -Wl,-E"
lddlflags="$lddlflags -Wl,-E -G"

Однако за прошедшие годы изменения в gcc, GNU ld и Solaris ld затруднили автоматическое определение, какой ld в конечном итоге вызывается. Возможно, вам придется вручную отредактировать config.sh и добавить флаги -Wl,-E самостоятельно или же запустить Configure в интерактивном режиме и добавить флаги в соответствующих местах.

Если ваш gcc сконфигурирован для использования GNU as и ld, но вы хотите использовать Solaris-версии вместо них для построения perl, вам нужно добавить -B/usr/ccs/bin/ в командную строку gcc. Один удобный способ сделать это —

$ sh Configure -Dcc='gcc -B/usr/ccs/bin/'

Обратите внимание, что конечный слеш необходим. Это приведет к некоторым безобидным предупреждениям при запуске Configure:

gcc: file path prefix `/usr/ccs/bin/' never used

Эти сообщения можно безопасно игнорировать. (Обратите внимание, что для системы SunOS4 необходимо использовать -B/bin/.)

В качестве альтернативы, вы можете использовать переменную среды GCC_EXEC_PREFIX для обеспечения использования as и ld Sun. Обратитесь к документации gcc для получения дополнительной информации об опции -B и переменной GCC_EXEC_PREFIX.

Sun и GNU make

make в /usr/ccs/bin работает нормально для построения perl. Если у вас есть компиляторы Sun C, у вас также будет параллельная версия make (dmake). Это работает нормально для построения perl, но иногда может создавать проблемы при выполнении 'make test' из-за нечетко определенных зависимостей между различными файлами набора тестов. Та же проблема может также повлиять на построение некоторых дополнительных модулей, поэтому в этих случаях либо укажите '-m serial' в командной строке dmake, либо используйте /usr/ccs/bin/make вместо этого. Если вы хотите использовать GNU make, убедитесь, что бит set-group-id не установлен. Если он установлен, настройте переменную PATH так, чтобы /usr/ccs/bin/make стоял перед GNU make, или же попросите системного администратора отключить бит set-group-id для GNU make.

Избегайте libucb.

Solaris предоставляет некоторые функции совместимости с BSD в /usr/ucblib/libucb.a. Perl не будет правильно компилироваться и работать, если он связан с -lucb, так как он содержит несовместимые со стандартной Solaris libc процедуры. Обычно это не проблема, так как файл подсказок solaris предотвращает Configure от поиска библиотек в /usr/ucblib и также явно опускает -lucb.

Среда для компиляции perl на Solaris

PATH

Убедитесь, что ваш PATH включает компилятор (/opt/SUNWspro/bin/, если вы используете компилятор Sun), а также /usr/ccs/bin/ для получения других инструментов разработки (таких как make, ar, as и ld). Убедитесь, что ваш путь не включает /usr/ucb или что он включает его после компилятора, инструментов компилятора и других стандартных каталогов Solaris. Вам определенно не нужен /usr/ucb/cc.

LD_LIBRARY_PATH

Если у вас установлена переменная среды LD_LIBRARY_PATH, убедитесь, что она НЕ включает /lib или /usr/lib. Если вы будете создавать расширения, которые вызывают сторонние динамические библиотеки (например, Berkeley DB), убедитесь, что переменная среды LD_LIBRARY_PATH включает каталог с этой библиотекой (например, /usr/local/lib).

Если вы получаете сообщение об ошибке

dlopen: stub interception failed

вероятно, это связано с тем, что ваша переменная среды LD_LIBRARY_PATH включает каталог, который является символической ссылкой на /usr/lib (например, /lib). Причина, по которой это вызывает проблему, довольно тонкая. Файл libdl.so.1.0 фактически *только* содержит функции, которые генерируют ошибки 'stub interception failed'! Загрузчик времени выполнения перехватывает ссылки на "/usr/lib/libdl.so.1.0" и вместо этого подключает внутренние реализации этих функций. [Благодарим Тима Банса за это объяснение.]

RUN CONFIGURE.

См. файл INSTALL для общей информации о Configure. Здесь обсуждаются только проблемы, специфичные для Solaris. Обычно значения по умолчанию должны подойти.

64-битный perl на Solaris.

См. файл INSTALL для общей информации о 64-битных компиляциях. В общем, значения по умолчанию должны подойти большинству людей.

По умолчанию perl-5.6.0 (или более поздняя версия) компилируется как 32-битное приложение с поддержкой largefile и long-long.

Общие проблемы 32-битных и 64-битных систем.

Solaris 7 и выше будут работать в 32-битном или 64-битном режиме на процессорах SPARC после перезагрузки. Вы можете создать 64-битные приложения, работая в 32-битном режиме, и наоборот. 32-битные приложения будут работать под Solaris, работающим в 32-битном или 64-битном режиме. 64-битные приложения требуют, чтобы Solaris работал в 64-битном режиме.

Существующие 32-битные приложения правильно называются LP32, т. е. длинные и указатели имеют 32 бита. 64-битные приложения более правильно называются LP64. Отличительной чертой приложения LP64 является возможность использования 64-битного адресного пространства. Совершенно возможно иметь приложение LP32, поддерживающее как 64-битные целые числа (long long), так и largefile (> 2 ГБ), и это значение по умолчанию для perl-5.6.0.

Для более полного объяснения проблем с 64-битными системами см. «Руководство разработчика Solaris 64-bit» по адресу http://docs.sun.com/

Вы можете определить режим ОС, используя "isainfo -v", например:

$ isainfo -v   # Ultra 30 in 64 bit mode
64-bit sparcv9 applications
32-bit sparc applications

По умолчанию perl будет скомпилирован как 32-битное приложение. Если вы не хотите выделять более ~4 ГБ памяти внутри perl или вам не нужно более 255 открытых файлов, вам, вероятно, не нужен 64-битный perl.

Поддержка больших файлов

Для Solaris 2.6 и выше существует два разных способа для 32-битных приложений манипулировать большими файлами (файлами, размер которых превышает 2 ГБ). (64-битное приложение автоматически имеет поддержку largefile по умолчанию.)

Первый — это «переходная среда компиляции», описанная в lfcompile64(5). Согласно странице руководства,

The transitional compilation  environment  exports  all  the
explicit 64-bit functions (xxx64()) and types in addition to
all the regular functions (xxx()) and types. Both xxx()  and
xxx64()  functions  are  available to the program source.  A
32-bit application must use the xxx64() functions in  order
to  access  large  files.  See the lf64(5) manual page for a
complete listing of the 64-bit transitional interfaces.

Переходная среда компиляции получается с помощью следующих флагов компилятора и компоновщика:

getconf LFS64_CFLAGS        -D_LARGEFILE64_SOURCE
getconf LFS64_LDFLAG        # nothing special needed
getconf LFS64_LIBS          # nothing special needed

Второй — «среда компиляции больших файлов», описанная в lfcompile(5). Согласно странице руководства,

Each interface named xxx() that needs to access 64-bit entities
to  access  large  files maps to a xxx64() call in the
resulting binary. All relevant data types are defined to  be
of correct size (for example, off_t has a typedef definition
for a 64-bit entity).

An application compiled in this environment is able  to  use
the  xxx()  source interfaces to access both large and small
files, rather than having to explicitly utilize the  transitional
xxx64()  interface  calls to access large files.

Два исключения — fseek() и ftell(). 32-битные приложения должны использовать fseeko(3C) и ftello(3C). Они будут автоматически отображены в fseeko64() и ftello64().

Среда компиляции больших файлов получается с помощью

getconf LFS_CFLAGS      -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
getconf LFS_LDFLAGS     # nothing special needed
getconf LFS_LIBS        # nothing special needed

По умолчанию perl использует среду компиляции больших файлов и полагается на Solaris для выполнения подлежащего отображения интерфейсов.

Создание 64-битного perl

Для компиляции 64-битного приложения на UltraSparc с помощью недавнего компилятора Sun требуется использовать флаг "-xarch=v9". getconf(1) расскажет вам об этом, например:

$ getconf -a | grep v9
XBS5_LP64_OFF64_CFLAGS:         -xarch=v9
XBS5_LP64_OFF64_LDFLAGS:        -xarch=v9
XBS5_LP64_OFF64_LINTFLAGS:      -xarch=v9
XBS5_LPBIG_OFFBIG_CFLAGS:       -xarch=v9
XBS5_LPBIG_OFFBIG_LDFLAGS:      -xarch=v9
XBS5_LPBIG_OFFBIG_LINTFLAGS:    -xarch=v9
_XBS5_LP64_OFF64_CFLAGS:        -xarch=v9
_XBS5_LP64_OFF64_LDFLAGS:       -xarch=v9
_XBS5_LP64_OFF64_LINTFLAGS:     -xarch=v9
_XBS5_LPBIG_OFFBIG_CFLAGS:      -xarch=v9
_XBS5_LPBIG_OFFBIG_LDFLAGS:     -xarch=v9
_XBS5_LPBIG_OFFBIG_LINTFLAGS:   -xarch=v9

Этот флаг поддерживается компиляторами Sun WorkShop 5.0 и новее (сейчас известные как Forte) при использовании на системах Solaris 7 или новее на системах UltraSparc.

Если вы используете gcc, вам потребуется использовать -mcpu=v9 -m64 вместо этого. Эта опция пока не поддерживается в gcc 2.95.2; из install/SPECIFIC в этом выпуске:

GCC version 2.95 is not able to compile code correctly for sparc64
targets. Users of the Linux kernel, at least, can use the sparc32
program to start up a new shell invocation with an environment that
causes configure to recognize (via uname -a) the system as sparc-*-*
instead.

Все это должно обрабатываться автоматически файлом подсказок, если это запрошено.

Длинные числа с плавающей точкой.

Начиная с 5.8.1, длинные числа с плавающей точкой работают, если вы используете компиляторы Sun (необходимые для дополнительных математических функций, не включенных в libm).

Потоки в perl на Solaris.

Возможна компиляция многопоточного perl на Solaris. Однако вся реализация потоков perl все еще является экспериментальной, так что будьте осторожны.

Проблемы с malloc в perl на Solaris.

Начиная с perl 5.7.1 perl использует Solaris malloc, так как perl malloc выходит из строя при работе с более чем 2 ГБ памяти, а Solaris malloc также, похоже, быстрее.

Если по какой-либо причине (например, для обеспечения обратной совместимости с бинарными файлами) вам действительно нужно использовать perl's malloc, вы можете пересобрать perl из исходных кодов и сконфигурировать сборку с помощью

$ sh Configure -Dusemymalloc

Не следует использовать perl's malloc, если вы компилируете с gcc. Существуют сообщения о выходе ядра, особенно в модуле PDL. Похоже, проблема исчезает с -DDEBUGGING, поэтому ее было сложно отследить. Похоже, компилятор Sun может работать с или без perl's malloc. [XXX здесь необходимы дальнейшие исследования.]

Проблемы с MAKE.

Проблемы динамической загрузки с GNU as и GNU ld

Если у вас возникают проблемы с динамической загрузкой с использованием gcc на SunOS или Solaris, и вы используете GNU as и GNU ld, обратитесь к разделу «GNU as и GNU ld» выше.

ld.so.1: ./perl: fatal: ошибка перемещения:

Если вы получаете это сообщение на SunOS или Solaris, и вы используете gcc, это, вероятно, проблема с GNU as или GNU ld в предыдущем пункте «GNU as и GNU ld».

dlopen: неудалось перехватить заглушку

Основной причиной сообщения 'dlopen: stub interception failed' является то, что переменная окружения LD_LIBRARY_PATH содержит каталог, являющийся символической ссылкой на /usr/lib (например, /lib). См. «LD_LIBRARY_PATH» выше.

#ошибка "Не указан DATAMODEL_NATIVE"

Это распространенная ошибка при попытке сборки perl на Solaris 2.6 с установкой gcc с Solaris 2.5 или 2.5.1. Заголовки Solaris изменились, поэтому необходимо обновить вашу установку gcc. Вы можете либо повторно запустить скрипт fixincludes из gcc, либо воспользоваться возможностью обновить свою установку gcc.

sh: ar: не найдено

Это сообщение от вашей оболочки, сообщая вам, что команда 'ar' не найдена. Вам необходимо проверить переменную окружения PATH, чтобы убедиться, что она включает каталог с командой 'ar'. Это распространенная проблема на Solaris, где 'ar' находится в каталоге /usr/ccs/bin/.

ТЕСТ MAKE

Тест 4 op/stat.t в Solaris

Тест op/stat.t 4 может завершиться неудачно, если вы используете tmpfs. Сборка в /tmp иногда демонстрирует это поведение. Тестовый набор определяет, собираете ли вы в /tmp, но он может не обнаруживать все ситуации с tmpfs.

nss_delete сброс ядра из op/pwent или op/grent

См. «nss_delete сброс ядра из op/pwent или op/grent» в perlhpux.

КРОСС-КОМПИЛЯЦИЯ

Здесь ничего необычного. Вы можете легко это сделать, если у вас доступен кросс-компилятор; обычное вызов Configure при нацеливании на Solaris x86 выглядит примерно так:

sh ./Configure -des -Dusecrosscompile \
    -Dcc=i386-pc-solaris2.11-gcc      \
    -Dsysroot=$SYSROOT                \
    -Alddlflags=" -Wl,-z,notext"      \
    -Dtargethost=... # The usual cross-compilation options

Добавление lddlflags — единственная необычная часть.

ПРЕДОБРАБОТАННЫЕ БИНАРИ ДЛЯ PERL ДЛЯ SOLARIS.

Вы можете получить предобработанные бинарные файлы для Solaris на http://www.sunfreeware.com/, http://www.blastwave.org, ActiveState http://www.activestate.com/ и http://www.perl.com/ в списке «Бинарные файлы» в верхней части страницы. Возможно, существуют и другие источники. Обратите внимание, что эти сайты находятся под контролем их соответствующих владельцев, а не разработчиков perl.

ПРОБЛЕМЫ ВО ВРЕМЯ ВЫПОЛНЕНИЯ ДЛЯ PERL НА SOLARIS.

Ограничения на количество открытых файлов в Solaris.

В руководстве stdio(3C) указано, что для LP32-приложений можно открыть только 255 файлов с помощью fopen(), и использовать только дескрипторы файлов с 0 по 255 в потоке. Поскольку perl вызывает open(), а затем fdopen(3C) с полученным дескриптором файла, perl ограничен 255 одновременными открытыми файлами, даже если используется sysopen(). Если эта проблема окажется непреодолимой, вы можете скомпилировать perl как LP64-приложение, см. «Сборка LP64 perl» для получения подробностей. Обратите также внимание, что значение по умолчанию для ограничения ресурсов на количество открытых дескрипторов файлов в Solaris составляет 255, поэтому вам потребуется соответствующим образом изменить ulimit или rctl (Solaris 9 и выше).

МОДУЛИ, СПЕЦИФИЧНЫЕ ДЛЯ SOLARIS.

См. модули в пространствах имен Solaris:: и Sun::Solaris в CPAN, см. http://www.cpan.org/modules/by-module/Solaris/ и http://www.cpan.org/modules/by-module/Sun/.

ПРОБЛЕМЫ, СВЯЗАННЫЕ С МОДУЛЯМИ, СПЕЦИФИЧНЫЕ ДЛЯ SOLARIS.

Proc::ProcessTable в Solaris

Proc::ProcessTable не компилируется в Solaris с perl5.6.0 и выше, если определен LARGEFILES. Поскольку поддержка largefile включена по умолчанию в 5.6.0 и более поздних версиях, необходимо предпринять особые шаги для использования этого модуля.

Проблема в том, что различные структуры, видимые через procfs, используют off_t, и при компиляции с поддержкой largefile они меняются с 32 бит на 64 бита. Таким образом, возвращаемое значение из procfs не соответствует структурам в perl, что приводит к мусору. Дополнительные сведения см. в proc(4).

Исправление для Proc::ProcessTable заключается в редактировании Makefile, чтобы явно удалить флаги largefile из тех, которые MakeMaker выбирает из Config.pm. Это приведет к сборке Proc::ProcessTable в правильной среде. Все должно быть в порядке, если Proc::ProcessTable не пытается совместно использовать off_t со всем остальным perl, или если это делается, они должны быть явно указаны как off64_t.

BSD::Resource в Solaris

Версии BSD::Resource, предшествующие 1.09, не компилируются в Solaris с perl 5.6.0 и выше по тем же причинам, что и Proc::ProcessTable. Версии BSD::Resource, начиная с 1.09, имеют обходной путь для решения проблемы.

Net::SSLeay в Solaris

Net::SSLeay требует наличия /dev/urandom. Этот девайс доступен начиная с Solaris 9. Для более ранних версий Solaris вы можете получить пакет SUNWski (входящий в состав ряда программных продуктов Sun, например, Sun WebServer, который является частью Solaris Server Intranet Extension, или Sun Directory Services, входящий в состав Solaris для ISP) или загрузить пакет ANDIrand с http://www.cosy.sbg.ac.at/~andi/. Если вы используете SUNWski, создайте символическую ссылку /dev/urandom, указывающую на /dev/random. Дополнительные сведения см. в документе с идентификатором 27606 под названием «Различные требования к поддержке /dev/random в средах Solaris[TM]», доступном на http://sunsolve.sun.com .

Возможно, можно использовать демон сбора энтропии (написанный на Perl!), доступный с http://www.lothar.com/tech/crypto/.

SunOS 4.x

В SunOS 4.x вы, скорее всего, захотите использовать SunOS ld, /usr/bin/ld, так как более поздние версии GNU ld (например, 2.13) больше не работают для сборки Perl. При линковке расширений GNU ld сильно недовольны и выводят много ошибок, похожих на эту

... relocation truncated to fit: BASE13 ...

и завершают работу. Поэтому в файлах подсказок SunOS 4.1 явно устанавливается ld в /usr/bin/ld.

Начиная с Perl 5.8.1, динамическая загрузка библиотек (DynaLoader, XSLoader) также, похоже, сломалась в SunOS 4.x. Поэтому по умолчанию perl собирается статически.

Запуск набора тестов в SunOS 4.1 немного сложен, так как тест dist/Tie-File/t/09_gen_rs.t зависает (подтест № 51, к слову) по неизвестной причине. Просто остановите тест и завершите этот процесс perl.

Есть и другие сбои, которые, как на SunOS 4.1.4 и gcc 3.2.2, очень похожи на ошибки gcc. Многие сбои происходят в тестах Encode, где, например, когда тест ожидает «0», вы получаете «0», что после небольшого прищуривания должно выглядеть очень странно. Другой пример — ранее в t/run/fresh_perl, где ожидается chr(0xff), но тест завершается неудачей, поскольку результат — chr(0xff). Точно.

Результат «make test» из этой комбинации:

Failed 27 test scripts out of 745, 96.38% okay.

Запуск harness болезнен из-за множества не удачных тестов, связанных с Unicode, выведет мегабайты сообщений об ошибках, но если терпеливо подождать, будут получены эти результаты:

Failed Test                     Stat Wstat Total Fail  Failed  List of Failed
-----------------------------------------------------------------------------
...
../ext/Encode/t/at-cn.t            4  1024    29    4  13.79%  14-17
../ext/Encode/t/at-tw.t           10  2560    17   10  58.82%  2 4 6 8 10 12
                                                               14-17
../ext/Encode/t/enc_data.t        29  7424    ??   ??       %  ??
../ext/Encode/t/enc_eucjp.t       29  7424    ??   ??       %  ??
../ext/Encode/t/enc_module.t      29  7424    ??   ??       %  ??
../ext/Encode/t/encoding.t        29  7424    ??   ??       %  ??
../ext/Encode/t/grow.t            12  3072    24   12  50.00%  2 4 6 8 10 12 14
                                                               16 18 20 22 24
 Failed Test                     Stat Wstat Total Fail  Failed  List of Failed
------------------------------------------------------------------------------
../ext/Encode/t/guess.t          255 65280    29   40 137.93%  10-29
../ext/Encode/t/jperl.t           29  7424    15   30 200.00%  1-15
../ext/Encode/t/mime-header.t      2   512    10    2  20.00%  2-3
../ext/Encode/t/perlio.t          22  5632    38   22  57.89%  1-4 9-16 19-20
                                                               23-24 27-32
../ext/List/Util/t/shuffle.t       0   139    ??   ??       %  ??
../ext/PerlIO/t/encoding.t                    14    1   7.14%  11
../ext/PerlIO/t/fallback.t                     9    2  22.22%  3 5
../ext/Socket/t/socketpair.t       0     2    45   70 155.56%  11-45
../lib/CPAN/t/vcmp.t                          30    1   3.33%  25
../lib/Tie/File/t/09_gen_rs.t      0    15    ??   ??       %  ??
../lib/Unicode/Collate/t/test.t              199   30  15.08%  7 26-27 71-75
                                                               81-88 95 101
                                                               103-104 106 108-
                                                               109 122 124 161
                                                               169-172
../lib/sort.t                      0   139   119   26  21.85%  107-119
op/alarm.t                                     4    1  25.00%  4
op/utfhash.t                                  97    1   1.03%  31
run/fresh_perl.t                              91    1   1.10%  32
uni/tr_7jis.t                                 ??   ??       %  ??
uni/tr_eucjp.t                    29  7424     6   12 200.00%  1-6
uni/tr_sjis.t                     29  7424     6   12 200.00%  1-6
56 tests and 467 subtests skipped.
Failed 27/811 test scripts, 96.67% okay. 1383/75399 subtests failed,
  98.17% okay.

Сбой теста alarm() вызван блокировкой alarm() в system(). Это, вероятно, ошибка libc, и, учитывая, что SunOS 4.x уже прекратил поддержку, не стоит ждать исправления. Кроме того, не пробуйте ничего слишком сложного, особенно с Encode, и всё должно быть хорошо в SunOS 4.x.

АВТОР

Исходный код написан Энди Даффери doughera@lafayette.edu, с использованием советов Алана Берлисона, Ника Инг-Симмонса, Тима Банса и многих других пользователей Solaris на протяжении многих лет.

Пожалуйста, сообщайте о любых ошибках, обновлениях или предложениях по адресу https://github.com/Perl/perl5/issues.

© 1993–2023 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.38.0/perlsolaris

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API