Spec-Zone.ru › Perl 5.28

perlos390

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • СИНОПСИС
  • ОПИСАНИЕ
    • Инструменты
    • Распаковка дистрибутива Perl на OS/390
    • Настройка и утилиты для Perl на OS/390
    • Настройка Perl на OS/390
    • Компиляция, тестирование и установка Perl на OS/390
    • Проблемы при сборке Perl на OS/390
    • Проблемы при тестировании Perl на OS/390
    • Проблемы при установке Perl на OS/390
    • Рекомендации по использованию Perl на OS/390
    • Проблемы с плавающей точкой в Perl на OS/390
    • Модули и расширения для Perl на OS/390
  • АВТОРЫ
  • СМОТРИТЕ ТАКЖЕ
    • Список рассылки для Perl на OS/390
  • ИСТОРИЯ

НАЗВАНИЕ

perlos390 - компиляция и установка Perl для OS/390 и z/OS

СИНОПСИС

Этот документ поможет вам настроить, скомпилировать, протестировать и установить Perl на OS/390 (также известный как z/OS) Unix System Services.

Этот документ нуждается в обновлении, но нам неизвестно, что в нём должно быть. Пожалуйста, отправляйте комментарии на адрес perlbug@perl.org.

ОПИСАНИЕ

Это полностью портированная версия Perl для OS/390, версии 2 выпуск 3, 5, 6, 7, 8 и 9. Она может работать и на других версиях или выпусках, но мы тестировали её именно на этих.

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

Инструменты

Список инструментов и утилит z/OS Unix может оказаться полезным и содержит ссылки на порты большей части программного обеспечения, полезного для компиляции Perl. http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html

Распаковка дистрибутива Perl на OS/390

При использовании ftp не забудьте передать дистрибутив в двоичном формате.

Gunzip/gzip для OS/390 обсуждается по адресу:

http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html

чтобы извлечь архив tar в формате ASCII на OS/390, попробуйте следующее:

pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar

или

zcat latest.tar.Z | pax -o to=IBM-1047,from=ISO8859-1 -r

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

tar: FSUM7171 ...: cannot set uid/gid: EDC5139I Operation not permitted

вы не прочитали вышеизложенное и попытались использовать tar вместо pax, сначала вам нужно удалить (теперь поврежденную) директорию perl

rm -rf perl-...

а затем использовать pax.

Настройка и утилиты для Perl на OS/390

Убедитесь, что установлено ваше приложение yacc, включая все необходимые шаблоны парсеров. Если вы еще этого не сделали, то обязательно:

cp /samples/yyparse.c /etc

Это также может быть хорошим моментом, чтобы убедиться, что ваши файлы /etc/protocol и либо /etc/resolv.conf, либо /etc/hosts находятся на месте. Документ IBM, описывающий такие проблемы с настройкой системы USS, был SC28-1890-07 "Планирование OS/390 UNIX System Services", особенно глава 6 по настройке оболочки OE.

GNU make для OS/390, который рекомендуется для сборки perl (а также для сборки модулей и расширений CPAN), доступен из раздела «Инструменты».

Некоторые пользователи сообщали об ошибках «Недостаточно памяти!» при попытке сборки Perl с помощью GNU make. Если у вас возникли такие проблемы, попробуйте скачать исходный код и собрать GNU make из исходного кода, чтобы устранить такие проблемы. Вы также можете найти GNU make (а также Perl и Apache) в красной книге «Программное обеспечение с открытым исходным кодом для OS/390 UNIX», SG24-5944-00 от IBM.

Если вместо рекомендуемого GNU make вы хотите использовать системную утилиту make, убедитесь, что файл правил по умолчанию установлен должным образом с помощью команды оболочки:

cp /samples/startup.mk /etc

и убедитесь, что также установлена переменная окружения _C89_CCMODE=1 (экспорт _C89_CCMODE=1 также хорошая идея для пользователей GNU make).

Возможно, вам также потребуется установить GNU groff для OS/390 перед выполнением шага «make install» для Perl.

В заголовке файла /usr/include/sys/socket.h, предоставляемом IBM с USS V2R7, V2R8 и, возможно, V2R9, есть синтаксическая ошибка. Проблема с заголовком файла заключается в том, что около определения константы SO_REUSEPORT вне комментария присутствует лишний символ '/', как в следующем примере:

#define SO_REUSEPORT    0x0200    /* allow local address & port
                                     reuse */                    /

Вы можете отредактировать этот заголовок вручную, удалив последний '/', или вы можете заметить, что в Language Environment (LE) APAR PQ39997 описана проблема, а PTF UQ46272 и UQ46271 — это исправления (по крайней мере, для R8) и применить их. Если эту синтаксическую ошибку оставить без внимания, Perl не сможет скомпилировать расширение "Socket".

Для успешного тестирования вам может потребоваться включить бит "sticky" для вашего каталога /tmp, если вы этого еще не сделали (см. man chmod).

Настройка Perl на OS/390

После распаковки дистрибутива запустите «sh Configure» (см. INSTALL для полного обсуждения параметров Configure). Есть файл «подсказок» для os390, который указывает правильные значения для большинства вещей. Некоторые вещи, на которые следует обратить внимание:

  • Сообщение вида:

    (I see you are using the Korn shell.  Some ksh's blow up on
    Configure, mainly on older exotic systems.  If yours does, try the
    Bourne shell instead.)

    не должно вызывать беспокойства.

  • Некоторые шаблоны файлов парсеров в /samples необходимы в /etc. В частности, убедитесь, что вы скопировали /samples/yyparse.c в /etc перед запуском Configure Perl. Этот шаг гарантирует успешное извлечение кодировок EBCDIC таких файлов парсеров, как perly.c и perly.h. Это необходимо сделать перед первым запуском Configure. Если вы этого не сделали, самый простой способ повторной настройки Perl — удалить вашу неправильно настроенную корневую директорию и снова извлечь исходный код из tar-архива. Затем необходимо убедиться, что /etc/yyparse.c корректно находится на месте, прежде чем пытаться повторно запустить Configure.

  • Этот порт поддерживает динамическую загрузку, но она не включена по умолчанию. Если вы хотите экспериментировать с динамической загрузкой, убедитесь, что вы указали -Dusedl в аргументах скрипта Configure. См. комментарии в hints/os390.sh для получения дополнительной информации о динамической загрузке. Если вы собираете с динамической загрузкой, вам необходимо добавить директорию $archlibexp/CORE в переменную среды LIBPATH, чтобы perl работал. См. файл config.sh для значения $archlibexp. Если при попытке использования Perl вы видите сообщение об ошибке, подобное:

    CEE3501S The module libperl.dll was not found.
      From entry point __dllstaticinit at compile unit offset +00000194
      at

    значит, в вашей переменной LIBPATH нет расположения libperl.x и либо libperl.dll, либо libperl.so. Добавьте эту директорию в LIBPATH и продолжайте.

  • Не включайте флаг оптимизации компилятора «-O». В оптимизаторе или perl есть ошибка, из-за которой perl не работает правильно при включенной оптимизации.

  • Некоторые файлы конфигурации в /etc, используемые сетевыми API, отсутствуют или имеют неправильные имена. В частности, убедитесь, что есть либо /etc/resolv.conf, либо /etc/hosts, чтобы gethostbyname() работал, и убедитесь, что файл /etc/proto переименован в /etc/protocol (А НЕ /etc/protocols, как используется в других системах Unix). Возможно, вам придется искать такие вещи, как HOSTNAME и DOMAINORIGIN в члене PDS «//'SYS1.TCPPARMS(TCPDATA)'», чтобы правильно настроить ваши сетевые файлы /etc.

Компиляция, тестирование и установка Perl на OS/390

Проще говоря:

sh Configure
make
make test

если все выглядит нормально (см. следующий раздел для диагностики теста/IVP), то:

make install

последний шаг может потребовать привилегий UID=0 в зависимости от того, как вы ответили на вопросы Configure и есть ли у вас права записи в указанные каталоги.

Проблемы при сборке Perl на OS/390

Сообщения «Недостаточно памяти!» во время сборки Perl чаще всего устраняются путем повторной сборки утилиты GNU make для OS/390 из исходного кода.

Еще одним элементом, ограничивающим память, является параметр MAXASSIZE в вашем наборе данных 'SYS1.PARMLIB(BPXPRMxx)' (обратите внимание также, что начиная с V2R8, лимиты адресного пространства могут быть установлены на основе идентификатора пользователя в сегменте USS профиля RACF). Пользователи сообщали об успешной сборке Perl с параметрами MAXASSIZE, такими как 503316480 (и, возможно, компиляция Perl возможна с MAXASSIZE меньше этого).

В USS ваши файлы /etc/profile или $HOME/.profile могут ограничивать значения ulimit. Проверьте, что следующая команда возвращает разумные значения:

ulimit -a

Чтобы сэкономить память, вы должны загружать модули компилятора в область подгрузки (LPA/ELPA), а не в список или библиотеку.

Если компилятор c89 жалуется на синтаксические ошибки во время сборки расширения Socket, убедитесь, что вы исправили синтаксическую ошибку в системном заголовке /usr/include/sys/socket.h.

Проблемы при тестировании Perl на OS/390

Шаг «make test» запускает процедуру проверки Perl, обычно перед установкой. Вы можете столкнуться с сообщениями STDERR даже при успешном запуске «make test». Вот руководство по некоторым из наиболее распространенных проблем:

  • Сообщение вида:

    io/openpid...........CEE5210S The signal SIGHUP was received.
    CEE5210S The signal SIGHUP was received.
    CEE5210S The signal SIGHUP was received.
    ok

    указывает на то, что тест t/io/openpid.t Perl прошёл, но с дополнительными сообщениями в stderr от CEE.

  • Сообщение вида:

    lib/ftmp-security....File::Temp::_gettemp: Parent directory (/tmp/)
    is not safe (sticky bit not set when world writable?) at
    lib/ftmp-security.t line 100
    File::Temp::_gettemp: Parent directory (/tmp/) is not safe (sticky
    bit not set when world writable?) at lib/ftmp-security.t line 100
    ok

    указывает на проблему с разрешениями на ваш каталог /tmp в HFS. Для исправления этой проблемы выполните команду:

    chmod a+t /tmp

    от имени пользователя с правами записи в запись каталога /tmp.

  • Недостаточно памяти!

    Недавний набор тестов perl довольно прожорлив с точки зрения памяти. В дополнение к комментариям выше о ограничениях памяти стоит также проверить наличие _CEE_RUNOPTS в вашей среде. Теперь perl (в miniperlmain.c) имеет C #pragma для установки параметров выполнения CEE, но переменная среды имеет приоритет.

    C-код запрашивает:

    #pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON))

    Важные части этого — второй аргумент (приращение) для HEAP и возможность размещения стека «выше линии (16M)». Если приращение кучи слишком мало, то когда perl (например, при загрузке unicode/Name.pl) пытается создать «большую» (более 400 КБ) строку, она не помещается в один сегмент, и вы получаете «Недостаточно памяти!» — даже если доступно много памяти.

    Связанная проблема — использование perl's malloc. Perl's malloc использует sbrk() для получения памяти, и sbrk() ограничен первым выделением, поэтому в этом случае нужно:

    HEAP(8M,500K,ANYWHERE,KEEP,8K,4K)

    чтобы пройти набор тестов.

Неисправности при установке Perl на OS/390

Сценарий installman попытается запуститься на OS/390. Количество ошибок уменьшится, если у вас установлен утилита roff. Вы можете получить GNU groff с ftp-сайта Redbook SG24-5944-00.

Рекомендации по использованию Perl на OS/390

При использовании Perl на OS/390 имейте в виду, что наборы символов EBCDIC и ASCII отличаются. Подробнее об этих проблемах с наборами символов см. в perlebcdic.pod. В документе perlport.pod также описаны встроенные функции Perl, поведение которых может отличаться в среде EBCDIC.

Open Edition (UNIX System Services) начиная с версии V2R8 поддерживает вызов скриптов #!/path/to/perl. Для версии V2R7 доступна PTF от IBM, которая позволит оболочке/ядру поддерживать #!. Релизы USS до версии V2R7 не поддерживали вызов скриптов через #!. Если вы работаете с версией V2R6 или более ранней, см.:

head `whence perldoc`

для примера использования трюка «eval exec», чтобы попросить оболочку выполнить ваши скрипты на более старых версиях Unix System Services.

Если у вас возникают проблемы с квадратными скобками, попробуйте поменять свой клиент rlogin или telnet. Старайтесь избегать устаревших эмуляторов 3270 и ISHELL при работе с Perl в USS.

Неисправности с плавающей точкой в Perl на OS/390

По всей видимости, существует ошибка в реализации плавающей точки на системах S/390, в результате которой вызов int() от произведения числа и числа малой величины не эквивалентен вызову int() от частного этого числа и числа большой величины. Например, в следующем коде Perl:

my $x = 100000.0;
my $y = int($x * 1e-5) * 1e5; # '0'
my $z = int($x / 1e+5) * 1e5;  # '100000'
print "\$y is $y and \$z is $z\n"; # $y is 0 and $z is 100000

Хотя можно было бы ожидать, что величины $y и $z будут одинаковыми и равными 100000, они будут отличаться, а вместо этого будут равны 0 и 100000 соответственно.

Проблема может быть дополнительно изучена в примерно эквивалентной программе на C:

#include <stdio.h>
#include <math.h>
main()
{
double r1,r2;
double x = 100000.0;
double y = 0.0;
double z = 0.0;
x = 100000.0 * 1e-5;
r1 = modf (x,&y);
x = 100000.0 / 1e+5;
r2 = modf (x,&z);
printf("y is %e and z is %e\n",y*1e5,z*1e5);
/* y is 0.000000e+00 and z is 1.000000e+05 (with c89) */
}

Модули и расширения для Perl на OS/390

Чистые (то есть не xs) модули могут быть установлены с помощью обычного способа:

perl Makefile.PL
make
make test
make install

Если вы скомпилировали perl с возможностью динамической загрузки, то это также был бы способ сборки расширений на основе xs. Однако, если вы скомпилировали perl с использованием стандартной статической компоновки, вы все равно можете скомпилировать расширения на основе xs для OS/390, но вам нужно будет следовать инструкциям в ExtUtils::MakeMaker для компиляции статически связанных бинарных файлов perl. В простейших конфигурациях сборка статического perl + xs-расширения сводится к:

perl Makefile.PL
make
make perl
make test
make install
make -f Makefile.aperl inst_perl MAP_TARGET=perl

В большинстве случаев пользователи сообщали о лучших результатах с использованием GNU make вместо системной программы /bin/make, будь то для обычных модулей или для расширений на основе xs.

Если процесс make сталкивается с проблемами при компиляции или компоновке, попробуйте установить _C89_CCMODE в 1. Предполагая, что sh является вашей оболочкой входа, выполните:

export _C89_CCMODE=1

Если вашей оболочкой входа является tcsh, используйте команду setenv.

АВТОРЫ

Дэвид Фиандер и Питер Приммер, с благодарностью Деннису Лонгнекеру и Уильяму Рафлоеру за ценные отчеты, обратную связь LPAR и PTF. Благодарность Майку МакАйсаку и Эгону Терведову за SG24-5944-00. Благодарность Игнаси Роке за указание на проблемы с плавающей точкой. Благодарность Джону Гудйеру за помощь с динамической загрузкой.

См. также

УСТАНОВКА, perlport, perlebcdic, ExtUtils::MakeMaker.

http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html

http://www.redbooks.ibm.com/redbooks/SG245944.html

http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html#opensrc

http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/

http://publibz.boulder.ibm.com:80/cgi-bin/bookmgr_OS390/BOOKS/ceea3030/

http://publibz.boulder.ibm.com:80/cgi-bin/bookmgr_OS390/BOOKS/CBCUG030/

Список рассылки для Perl на OS/390

Если вас интересуют порты Perl для z/OS (ранее известный как OS/390) и POSIX-BC (BS2000), посетите список рассылки perl-mvs. Для подписки отправьте пустое сообщение на perl-mvs-subscribe@perl.org.

См. также:

http://lists.perl.org/list/perl-mvs.html

Веб-архивы списка рассылки находятся по адресу:

http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/
http://archive.develooper.com/perl-mvs@perl.org/

ИСТОРИЯ

Этот документ был первоначально написан Дэвидом Фиандером для релиза Perl 5.005.

Этот документ был изменен для релиза Perl 5.005_03 11 марта 1999 года.

Обновлено 28 ноября 2001 года для исправления некорректных ссылок.

Обновлено 12 ноября 2000 года для релиза Perl 5.7.1.

Обновлено 15 января 2001 года для релиза Perl 5.7.1.

Обновлено 24 января 2001 года, чтобы упомянуть динамическую загрузку.

Обновлено 12 марта 2001 года, чтобы упомянуть //'SYS1.TCPPARMS(TCPDATA)'.

© 1993–2020 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.28.3/perlos390

Spec-Zone.ru

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