Spec-Zone.ru › Perl 5.34

perlos390

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • СИНОПСИС
  • ОПИСАНИЕ
    • Инструменты
    • Распаковка дистрибутива Perl на OS/390
    • Настройка и утилиты для Perl на OS/390
    • Настройка Perl на OS/390
      • Оболочка
      • Примеры
      • Динамическая загрузка
      • Оптимизация
      • Файлы конфигурации
    • Компоновка, тестирование и установка Perl на OS/390
    • Аномалии при сборке Perl на OS/390
    • Аномалии при тестировании Perl на OS/390
      • Сигналы
      • File::Temp
      • Ошибка «Недостаточно памяти!»
    • Аномалии при установке 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.

Этот документ необходимо обновить, но мы не знаем, что в нём должно быть. Пожалуйста, отправляйте комментарии на https://github.com/Perl/perl5/issues.

ОПИСАНИЕ

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

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

Инструменты

Список z/OS Unix Tools и Toys может оказаться полезным и содержит ссылки на портированные версии большого количества программного обеспечения, полезного для сборки 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

Для извлечения ASCII-архива tar на 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) в красной книге/книге «Open Source Software for OS/390 UNIX», SG24-5944-00 от IBM.

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

cp /samples/startup.mk /etc

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

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

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

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

Вы можете отредактировать этот заголовочный файл самостоятельно, удалив последний '/', или вы можете отметить, что APAR PQ39997 Language Environment (LE) описывает проблему, а 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.

Динамическая загрузка

Динамическая загрузка необходима, если вы хотите использовать XS-модули из CPAN (например, DBI (и DBD), JSON::XS и Text::CSV_XS) или обновлять CORE-модули из CPAN до более новых версий (например, Encode), не пересобирая весь бинарный файл perl.

Этот порт будет поддерживать динамическую загрузку, но по умолчанию она не выбрана. Если вы хотите поэкспериментировать с динамической загрузкой, убедитесь, что вы указали -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 и продолжайте.

В hints/os390.sh выбор -Dusedl по умолчанию также выбирает -Duseshrplib. Наличие общей библиотеки plib не только требует, чтобы LIBPATH была установлена в правильное местоположение libperl.so, но также делает практически невозможным запуск более чем одной разной версии perl, собранной таким образом, одновременно.

Все объекты, участвующие в сборке с -Dusedl, должны быть скомпилированы для этого, вероятно, путём добавления к всем ccflags

-qexportall -qxplink -qdll -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll

Оптимизация

Не включайте флаг оптимизации компилятора «-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

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

make install

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

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

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

Сборка бинарных файлов с отладкой (с -g или -g3) увеличит вероятность появления этих ошибок. Избегайте -g, если это возможно.

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

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

ulimit -a

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

Если компилятор 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.

File::Temp

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

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 и разрешение стеку быть «выше (16М) линии». Если приращение кучи слишком мало, то при попытке 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», чтобы попросить оболочку запустить ваши скрипты на Perl на этих более старых выпусках 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

Модули чисто на Perl (т. е. не 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. Благодарность Игнаси Роке за указание на проблемы с плавающей точкой. Благодарность Джону Гудйеру за помощь с динамической загрузкой.

См. также

INSTALL, 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.

Также см.:

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

Архивы списка рассылки в веб-формате:

https://www.nntp.perl.org/group/perl.mvs/

История

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

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

Обновлено 12 ноября 2000 года для выпуска Perl 5.7.1.

Обновлено 15 января 2001 года для выпуска Perl 5.7.1.

Обновлено 24 января 2001 года для упоминания динамической загрузки.

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

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

Обновлено 03 октября 2019 года для perl-5.33.3+

© 1993–2021 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.34.0/perlos390

Spec-Zone.ru

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