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
- АВТОРЫ
- СМОТРИТЕ ТАКЖЕ
- ИСТОРИЯ
НАЗВАНИЕ
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 может оказаться полезным и содержит ссылки на порты большей части программного обеспечения, полезного для создания 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 Planning", особенно глава 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 повторно.
Динамическая загрузка
Динамическая загрузка требуется, если вы хотите использовать 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. Наличие shared 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 если всё выглядит нормально (см. следующий раздел для диагностики тестирования/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.
Out of Memory!
Недавний набор тестов 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К+) строку, она не поместится в один сегмент, и вы получите «Out of Memory!» — даже если доступно ещё много памяти.
Связанная проблема связана с использованием 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, который позволит shell/ядру поддерживать #!. Релизы USS до V2R7 не поддерживали #! для вызова скрипта. Если вы используете V2R6 или более раннюю версию, см.:
head `whence perldoc` для примера того, как использовать трюк «eval exec», чтобы попросить shell выполнить ваши скрипты с помощью 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.
АВТОРЫ
David Fiander и Peter Prymmer, с благодарностью Dennis Longnecker и William Raffloer за ценные отчеты, обратную связь по LPAR и PTF. Спасибо Mike MacIsaac и Egon Terwedow за SG24-5944-00. Спасибо Ignasi Roca за указание на проблемы с плавающей запятой. Спасибо John Goodyear за помощь с динамической загрузкой.
См. также
УСТАНОВКА, 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/ ИСТОРИЯ
Этот документ был первоначально написан David Fiander для релиза 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 г. для исправления неработающих ссылок.
Обновлено 3 октября 2019 г. для perl-5.32.0+
© 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.32.0/perlos390