perlos390
СОДЕРЖАНИЕ
- ИМЯ
- СИНОПСИС
- ОПИСАНИЕ
- Инструменты
- Создание 64-разрядного динамического ASCII Perl
- Создание 64-разрядного динамического EBCDIC Perl
- Настройка и утилиты для Perl на OS/390
- Полезные файлы для отладки
- Проблемы сборки Perl на OS/390
- Проблемы тестирования Perl на OS/390
- Рекомендации по использованию 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. Название этого архива будет примерно таким: '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'.
Если вы хотите получить последнюю нестабильную версию разработки, используя native 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 необходимо преобразовать в 1047 EBCDIC. Для этого:
cd perl
Porting/makerel -e Если этап Porting/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-битную, динамическую, native, для разработки, развертывая её в /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 Возможно, перед выполнением шага "make install" для Perl вам потребуется установить GNU groff для OS/390.
Установите Perl в /usr/local/perl/ebcdic:
make install EBCDIC Perl всё ещё находится в стадии разработки. По нашим знаниям, весь основной код работает, но различные модули, которые вы могли бы загрузить с CPAN, не работают. Ошибки варьируются от незначительных до катастрофических. Многие из них просто ошибки в тестах, при этом модуль на самом деле работает правильно. Это происходит, например, потому, что тест написан так, чтобы ожидать определённый код символа ASCII; когда вместо этого он получает значение EBCDIC, он жалуется. Но код на самом деле работал. Другие потенциальные ошибки, которые на самом деле не являются ошибками, возникают из-за того, что контрольные суммы получаются по-разному, так как A, например, имеет разное битовое представление между наборами символов. Тест, ожидающий значение ASCII, покажет ошибку, даже если модуль работает идеально. Также при сортировке прописные буквы идут перед строчными буквами в ASCII-системах; в EBCDIC — наоборот.
Некоторые модули 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 Planning"
Для успешного тестирования вам может потребоваться включить бит "sticky" для каталога /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), а не в список связей или шаг lib.
Если компилятор жалуется на синтаксические ошибки при сборке расширения 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. Perl's malloc использует 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, вам также нужно настроить переменные среды ASCII/EBCDIC, и убедиться, что любой исходный код 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 систем.
Другие сайты
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–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/perlos390