Spec-Zone.ru › Perl 5.36

perlos390

СОДЕРЖАНИЕ

  • НАЗВАНИЕ
  • СИНОПСИС
  • ОПИСАНИЕ
    • Инструменты
    • Создание 64-битного динамического ASCII Perl
    • Создание 64-битного динамического EBCDIC Perl
    • Настройка и утилиты для Perl на OS/390
    • Полезные файлы для устранения неполадок
      • Оболочка
      • Динамическая загрузка
      • Оптимизация
    • Проблемы при сборке Perl на OS/390
    • Проблемы при тестировании Perl на OS/390
      • Недостаточно памяти (только 31-битный)
    • Рекомендации по использованию Perl на z/OS
    • Модули и расширения для Perl на z/OS (только статические)
    • Запуск Perl на z/OS
  • АВТОРЫ
  • ДРУГИЕ САЙТЫ
  • ИСТОРИЯ

НАЗВАНИЕ

perlos390 — создание и установка Perl для z/OS (ранее OS/390)

СИНОПСИС

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

ОПИСАНИЕ

Это портированная версия Perl для z/OS. Она была протестирована на z/OS 2.4 и должна работать с z/OS 2.5. Она может работать и на других версиях, но именно на этих она была протестирована.

Нативный набор символов для z/OS — EBCDIC, но он также может работать в режиме ASCII. Perl поддерживает оба, но вы должны явно скомпилировать его для одного из них. На одном компьютере могут быть как ASCII Perl, так и EBCDIC Perl. Если вы используете ASCII-режим и ASCII-Perl, модуль Encode, входящий в состав Perl, можно использовать для преобразования файлов из различных кодовых страниц EBCDIC для обработки Perl, а затем обратно при выводе.

В этом документе описывается, как создать 64-битный динамический Perl, как ASCII, так и EBCDIC. Вы можете интерактивно выбрать другие конфигурации, а также многие другие параметры в скрипте Configure, который выполняется в ходе процесса сборки. Возможно, перед запуском Configure потребуется выполнить некоторые задачи по настройке системы, как подробно описано ниже.

Инструменты

Вам потребуется GNU make версии 4.1 или выше. GNU make можно загрузить с порта, предоставленного Rocket Software. Вам потребуется компилятор z/OS c99 от IBM (хотя xlc в режиме c99 без включенной оптимизации работает в EBCDIC).

Если вам нужна последняя версия разработки Perl, вам понадобится git. Вы можете использовать git на другой платформе и передать результат через sftp или ftp на z/OS. Но существует и порт z/OS-ориентированного клиента git, доступный через Rocket Software.

Вам также может понадобиться порт клиента gunzip, предоставляемый Rocket Software, для распаковки любого сжатого tar-архива, который вы загружаете на z/OS.

Создание 64-битного динамического ASCII Perl

Для сборки из официальной стабильной версии Perl перейдите на https://www.perl.org/get.html и выберите любую кнопку «Скачать последнюю стабильную исходную версию». Это даст вам tar-архив. Имя этого tar-архива будет что-то вроде 'perl-V.R.M.tar.gz', где V.R.M — версия/релиз/модификация загружаемого Perl. Сделайте

gunzip perl-V.R.M.tar.gz

Затем один из:

tar -xvf perl-V.R.M.tar

pax -r -f perl-V.R.M.tar

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

Если вам нужна последняя предварительная версия разработки, используя нативный git на z/OS, клонируйте Perl:

git clone https://github.com/Perl/perl5.git perl

В любом случае, после того, как у вас есть каталог 'perl', содержащий исходный код, перейдите в него и пометьте весь код как ASCII:

cd perl
chtag -R -h -t -cISO8859-1 *

Настройте среду сборки как 64-битную, динамическую, ASCII, для разработки, размещая её в /usr/local/perl/ascii:

export PATH=$PWD:$PATH
export LIBPATH=$PWD:$PATH
./Configure -Dprefix=/usr/local/perl/ascii -des -Dusedevel \
      -Duse64bitall -Dusedl

Если вы собираете из стабильной версии, вам не нужен "-Dusedevel". (Если вы запустите Configure без параметров, он интерактивно спросит вас обо всех возможных параметрах на основе обнаружения того, что доступно на вашем конкретном компьютере, поэтому вы можете выбирать по ходу дела.)

Запустите GNU make для сборки Perl

make

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

make test_harness

Установите Perl в /usr/local/perl/ascii:

make install

Создание 64-битного динамического EBCDIC Perl

Вам понадобится работающая версия Perl на каком-то компьютере с подключением к целевой машине. На z/OS это может быть ASCII-Perl или предыдущая версия EBCDIC. Многие машины уже имеют предварительно собранный Perl или его легко можно скачать с https://www.perl.org/get.html.

Следуйте инструкциям выше в разделе «Создание 64-битного динамического ASCII Perl», чтобы получить каталог 'perl'. Затем вернитесь сюда, чтобы продолжить.

Загруженный Perl необходимо преобразовать в EBCDIC 1047. Для этого:

cd perl
Porting/makerel -e

Если шаг Портирования/makerel завершается ошибкой, что он не может выполнить команду tar, выполните команду интерактивно, где V.R.M — версия/релиз/модификация Perl, которую вы загружаете:

cd ../
tar cf -  --format=ustar perl-V.R.M | gzip --best > perl-V.R.M.tar.gz

Используйте sftp для загрузки сжатого tar-файла на z/OS:

sftp <your system>
cd /tmp
put perl-V.R.M.tar.gz

Распакуйте и распакуйте сжатый tar-файл на z/OS:

cd /tmp
gunzip perl-V.R.M.tar.gz

Затем один из:

tar -xvf perl-V.R.M.tar

pax -r -f perl-V.R.M.tar

Теперь у вас есть исходный код EBCDIC Perl на z/OS, и вы можете приступить к его сборке. Это аналогично тому, как вы собирали код для ASCII, но обратите внимание: вы **не должны** помечать код, а вместо этого оставить его без метки.

Настройте среду сборки как 64-битную, динамическую, нативную, для разработки, размещая её в /usr/local/perl/ebcdic:

export PATH=$PWD:$PATH
export LIBPATH=$PWD:$PATH
./Configure -Dprefix=/usr/local/perl/ebcdic -des -Dusedevel \
      -Duse64bitall -Dusedl

Если вы собираете из стабильной версии, вам не нужен "-Dusedevel". (Если вы запустите Configure без параметров, он интерактивно спросит вас обо всех возможных параметрах на основе обнаружения того, что доступно на вашем конкретном компьютере, поэтому вы можете выбирать по ходу дела.)

Запустите GNU make для сборки Perl

make

Запустите тесты, чтобы убедиться, что Perl работает правильно.

make test_harness

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

Установите Perl в /usr/local/perl/ebcdic:

make install

EBCDIC Perl все еще находится в разработке. По нашим данным, весь основной код работает, но различные модули, которые вы могли бы загрузить с CPAN (например, DBI (и DBD), JSON::XS и Text::CSV_XS), или обновить модули CORE с CPAN до новых версий (например, Encode), без перекомпиляции всего двоичного файла Perl не работают.

Некоторые модули CPAN поставляются с загружаемым Perl. И некоторые из них еще не были исправлены, чтобы пройти проверку на платформах EBCDIC. В результате они пропускаются при запуске «make test». Текущий список:

Archive::Tar
Config::Perl::V
CPAN::Meta
CPAN::Meta::YAML
Digest::MD5
Digest::SHA
Encode
ExtUtils::MakeMaker
ExtUtils::Manifest
HTTP::Tiny
IO::Compress
IPC::Cmd
JSON::PP
libnet
MIME::Base64
Module::Metadata
PerlIO::via-QuotedPrint
Pod::Checker
podlators
Pod::Simple
Socket
Test::Harness

См. также hints/os390.sh для других потенциальных проблем.

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

Возможно, сейчас будет хорошей идеей убедиться, что ваш файл /etc/protocol и либо ваш файл /etc/resolv.conf, либо /etc/hosts файлы на месте. Документ IBM, который описывает такие проблемы с настройкой USS, называется «Планирование z/OS UNIX System Services»

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

Полезные файлы для устранения неполадок

Если ваша конфигурация терпит неудачу, прочтите hints/os390.sh. Этот файл предоставляет специфичные для z/OS параметры для направления процесса сборки.

Оболочка

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

(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.)

ни о чем не беспокоится.

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

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

Приведенные выше инструкции создадут динамический Perl. Если вы не хотите использовать динамическую загрузку, удалите параметр -Dusedl. См. комментарии в hints/os390.sh для получения дополнительной информации о динамической загрузке.

Оптимизация

Оптимизация еще не включена. Могут возникнуть проблемы, если Perl оптимизирован.

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

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

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

ulimit -a

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

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

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

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

Недостаточно памяти (только 31-битный)

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

Если вы _действительно_ собираете 31-битный Perl, ограниченная среда может означать, что вам необходимо изменить параметры памяти для Perl. Кроме комментариев выше о ограничениях памяти, также стоит проверить _CEE_RUNOPTS в вашей среде. Perl теперь имеет (в miniperlmain.c) C #pragma для 31-битной только для установки параметров выполнения CEE, но переменная среды побеждает.

31-битный C-код запрашивает:

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

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

Связанная проблема — использование функции malloc Perl. Функция malloc Perl использует sbrk(), а sbrk() ограничено первой выделенной областью памяти, поэтому в этом случае требуется что-то вроде:

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

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

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

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

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

Модули и расширения для Perl на z/OS (только статическая компиляция)

Модули чистого Perl (то есть не XS) могут быть установлены стандартным способом:

perl Makefile.PL
make
make test
make install

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

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

Запуск Perl на z/OS

Чтобы запустить 64-битную динамическую среду Perl, обновите PATH и LIBPATH, включив в них место установки Perl, а затем запустите установленный Perl как perlV.R.M, где V/R/M — это Уровень версии/Релиза/Модификации текущего уровня разработки. Если вы работаете со средой Perl ASCII/EBCDIC Bi-Modal, вам также необходимо настроить переменные среды ASCII/EBCDIC Bi-Modal и убедиться, что любой код Perl, который вы запускаете, помечен как ASCII или EBCDIC с помощью «chtag -t -c<CCSID>»:

Для ASCII-только:
export _BPXK_AUTOCVT=ON
export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG),POSIX(ON)"
export _TAG_REDIR_ERR="txt"
export _TAG_REDIR_IN="txt"
export _TAG_REDIR_OUT="txt"
Для ASCII или EBCDIC:
export PATH=/usr/local/perl/ascii:$PATH
export LIBPATH=/usr/local/perl/ascii/lib:$LIBPATH
perlV.R.M args

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

АВТОРЫ

David Fiander и Peter Prymmer с благодарностью Dennis Longnecker и William Raffloer за ценные отчёты, обратную связь по LPAR и PTF. Благодарим Mike MacIsaac и Egon Terwedow за SG24-5944-00. Благодарим Ignasi Roca за указание на проблемы с плавающей точкой. Благодарим John Goodyear за помощь с динамической загрузкой.

Mike Fulton и Karl Williamson внесли обновления для поддержки UTF8, DLL, 64-разрядных систем и ASCII/EBCDIC Bi-Modal.

ДРУГИЕ САЙТЫ

https://github.com/ZOSOpenTools/perlport/ предоставляет документацию и инструменты для создания различных конфигураций Perl для z/OS и содержит полезные инструменты в каталоге 'bin', которые вы можете использовать для самостоятельного создания Perl для z/OS.

ИСТОРИЯ

Обновлено 24 декабря 2021 года для включения начальной поддержки ASCII.

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

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

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

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

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

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

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

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

© 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.36.0/perlos390

Spec-Zone.ru

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