Dit is de opdracht perlos390 die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
perlos390 - Perl bouwen en installeren voor OS/390 en z/OS
KORTE INHOUD
Dit document helpt u bij het configureren, bouwen, testen en installeren van Perl op OS/390 (ook bekend als z/OS)
Unix-systeemservices.
In deze document behoeften naar be bijgewerkt, maar we niet om te weten wat wat it moet zeggen. Alstublieft email
opmerkingen naar [e-mail beveiligd] <mailto:[e-mail beveiligd]>.
PRODUCTBESCHRIJVING
Dit is een volledig geporteerde Perl voor OS/390 versie 2, release 3, 5, 6, 7, 8 en 9. Het kan
werken aan andere versies of releases, maar dat zijn de versies waarop we het hebben getest.
Mogelijk moet u enkele systeemconfiguratietaken uitvoeren voordat u Configure uitvoert
script voor Perl.
Tools
De z/OS Unix Tools and Toys-lijst kan nuttig zijn en bevat links naar ports van veel van
de software die nuttig is voor het bouwen van Perl.
http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html
uitpakken Perl distributie on OS / 390
Als u ftp gebruikt, vergeet dan niet om de distributie in binair formaat over te dragen.
Gunzip/gzip voor OS/390 wordt besproken op:
http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html
Om een ASCII tar-archief uit te pakken op OS/390, probeer dit:
pax -o to=IBM-1047,from=ISO8859-1 -r < nieuwste.tar
or
zcat nieuwste.tar.Z | pax -o naar=IBM-1047,van=ISO8859-1 -r
Als u veel fouten in het formulier krijgt
tar: FSUM7171 ...: kan uid/gid niet instellen: EDC5139I Bewerking niet toegestaan.
Als je het bovenstaande niet hebt gelezen en teer hebt geprobeerd in plaats van pax, moet je dit eerst verwijderen
de (nu corrupte) perl-map
rm -rf perl-...
en dan pax gebruiken.
Setup en utilities voor Perl on OS / 390
Zorg ervoor dat uw yacc-installatie aanwezig is, inclusief de benodigde parser-sjabloon
bestanden. Als u dit nog niet heeft gedaan, zorg er dan voor dat u:
cp /samples/yyparse.c / Etc
Dit kan ook een goed moment zijn om ervoor te zorgen dat uw /etc/protocol-bestand en uw
/ Etc / resolv.conf or / Etc / hosts bestanden zijn aanwezig. Het IBM-document waarin dit wordt beschreven
Problemen met de USS-systeeminstallatie waren SC28-1890-07 "OS/390 UNIX System Services Planning", in
met name hoofdstuk 6 over het aanpassen van de OE-shell.
GNU maakt voor OS/390, wat wordt aanbevolen voor het bouwen van perl (evenals het bouwen van CPAN
modules en uitbreidingen), is beschikbaar via "Extra".
Sommige mensen hebben gemeld dat ze "Uit geheugen!" fouten tijdens het bouwen van Perl
gebruik GNU om binaire bestanden te maken. Als u dergelijke problemen tegenkomt, probeer dan de broncode te downloaden
codekit en build GNU maken vanaf de bron om dergelijke problemen te elimineren. Jij misschien ook
vind GNU-make (evenals Perl en Apache) in het rode stuk/boek "Open Source Software for
OS/390 UNIX", SG24-5944-00 van IBM.
Als u in plaats van het aanbevolen GNU-merk het door het systeem geleverde merk wilt gebruiken
programma, zorg er dan voor dat u het standaardregelbestand correct installeert via de shell-opdracht:
cp /samples/startup.mk / Etc
en zorg ervoor dat u ook de omgevingsvariabele _C89_CCMODE=1 instelt (exporteren van _C89_CCMODE=1 is
ook een goed idee voor gebruikers van GNU-make).
Mogelijk wilt u ook GNU groff voor OS/390 geïnstalleerd hebben voordat u het programma "make
install" stap voor Perl.
Er is een syntaxisfout in het headerbestand /usr/include/sys/socket.h dat IBM levert
met USS V2R7, V2R8 en mogelijk V2R9. Het probleem met het headerbestand is dat in de buurt van de
definitie van de constante SO_REUSEPORT, er staat een vals extra teken '/' buiten
een opmerking als volgt:
#define SO_REUSEPORT 0x0200 /* laat lokaal adres en poort toe
hergebruik */ /
Je zou die header zelf kunnen bewerken om die laatste '/' te verwijderen, of je zou dat kunnen noteren
Taalomgeving (LE) APAR PQ39997 beschrijft het probleem en PTF's UQ46272 en UQ46271
zijn de (minstens R8) oplossingen en pas deze toe. Als er niets aan wordt gedaan, zal de syntaxisfout optreden
komt naar voren als een onvermogen voor Perl om zijn "Socket" -extensie te bouwen.
Voor succesvol testen moet u mogelijk het plakkerige bit inschakelen zodat uw wereld leesbaar is / tmp
directory als je dat nog niet hebt gedaan (zie man chmod).
Configure Perl on OS / 390
Zodra u de distributie heeft uitgepakt, voert u "sh Configure" uit (zie INSTALL voor een volledig
bespreking van de configuratieopties). Er is een "hints"-bestand voor os390 dat dit specificeert
de juiste waarden voor de meeste dingen. Enkele dingen waar u op moet letten zijn onder meer:
· Een bericht van het formulier:
(Ik zie dat je de Korn-shell gebruikt. Sommige ksh's zijn opgeblazen in Configure,
voornamelijk op oudere exotische systemen. Als de jouwe dat doet, probeer dan de Bourne-shell.)
is helemaal niets om je zorgen over te maken.
· Sommige standaardsjabloonbestanden van de parser in /samples zijn nodig in /etc. In
Zorg er in het bijzonder voor dat u op zijn minst /samples/yyparse.c kopieert / Etc voordat je gaat hardlopen
Perl's configuratie. Deze stap zorgt voor een succesvolle extractie van EBCDIC-versies van
parserbestanden zoals perly.c en perly.h. Dit moet vóór het hardlopen worden gedaan
Configureer de eerste keer. Als u dit niet hebt gedaan, kunt u dit het gemakkelijkst opnieuw configureren
Perl is om uw verkeerd geconfigureerde build-root te verwijderen en de broncode opnieuw uit de tar te extraheren
bal. Vervolgens moet u ervoor zorgen dat /etc/yyparse.c op de juiste plaats staat voordat u dit probeert
om Configure opnieuw uit te voeren.
· Deze poort ondersteunt dynamisch laden, maar is niet standaard geselecteerd. als jij
zou willen experimenteren met dynamisch laden, zorg er dan voor dat u -Dusedl specificeert in het
argumenten voor het Configure-script. Zie de opmerkingen in hints/os390.sh voor meer informatie
informatie over dynamische belasting. Als je bouwt met dynamisch laden, dan heb je dit nodig
om de map $archlibexp/CORE op volgorde toe te voegen aan uw LIBPATH-omgevingsvariabele
zodat perl werkt. Zie het bestand config.sh voor de waarde van $archlibexp. Als je het probeert
om Perl te gebruiken, ziet u een foutmelding die lijkt op:
CEE3501S De module libperl.dll is niet gevonden.
Vanaf toegangspunt __dllstaticinit bij compilatie-eenheid offset +00000194 bij
dan heeft uw LIBPATH niet de locatie van libperl.x en libperl.dll of
libperl.so erin. Voeg die map toe aan uw LIBPATH en ga verder.
· Schakel de compileroptimalisatievlag "-O" niet in. Er zit een bug in beide
optimizer of perl waardoor perl niet correct werkt als de optimizer is ingeschakeld.
· Sommige configuratiebestanden in / Etc die door de netwerk-API's worden gebruikt, ontbreken
of de verkeerde namen hebben. Zorg er in het bijzonder voor dat er een
/ Etc / resolv.conf of / Etc / hosts, Zodat gethostbijnaam() werkt, en zorg ervoor dat
het bestand /etc/proto is hernoemd naar /etc/protocol (NIET / Etc / protocols, zoals gebruikt door
andere Unix-systemen). Mogelijk moet u zoeken naar zaken als HOSTNAME en DOMAINORIGIN
in het "//'SYS1.TCPPARMS(TCPDATA)'" PDS-lid om uw / Etc
netwerkbestanden.
Bouwen, Toets, Install Perl on OS / 390
Simpel gezegd:
sh Configureren
maken
test maken
als alles er goed uitziet (zie het volgende gedeelte voor test/IVP-diagnose), dan:
make install
Voor deze laatste stap zijn mogelijk UID=0-rechten vereist, afhankelijk van hoe u de vraag hebt beantwoord
vragen die Configure heeft gesteld en of u wel of geen schrijftoegang heeft tot de mappen
jij hebt opgegeven.
Bouw Afwijkingen with Perl on OS / 390
"Uit het geheugen!" berichten tijdens het bouwen van Perl worden meestal opgelost door het
GNU maakt een hulpprogramma voor OS/390 vanuit een broncodekit.
Een ander geheugenbeperkend item dat u moet controleren, is uw MAXASSIZE-parameter in uw
'SYS1.PARMLIB(BPXPRMxx)' dataset (merk ook op dat vanaf V2R8 adresruimtelimieten kunnen worden gewijzigd
ingesteld per gebruikers-ID in het USS-segment van een RACF-profiel). Mensen hebben zich gemeld
succesvolle builds van Perl met MAXASSIZE-parameters zo klein als 503316480 (en het kan zijn
mogelijk om Perl te bouwen met een MAXASSIZE kleiner dan dat).
Binnen USS uw / etc / profile of $HOME/.profile kan uw ulimit-instellingen beperken. Check dat
de volgende opdracht retourneert redelijke waarden:
ulimit -a
Om geheugen te besparen, moet u uw compilermodules in het Link Pack Area laden
(LPA/ELPA) in plaats van in een linkslijst of staplib.
Als de c89-compiler klaagt over syntaxisfouten tijdens het bouwen van de Socket-extensie
zorg er dan voor dat u de syntaxisfout in de systeemheader /usr/include/sys/socket.h herstelt.
Testen Afwijkingen with Perl on OS / 390
De stap "make test" voert een Perl-verificatieprocedure uit, meestal vóór de installatie. Jij
kunnen STDERR-berichten tegenkomen, zelfs tijdens een succesvolle uitvoering van "make test". Hier is een
gids voor enkele van de meest voorkomende afwijkingen:
· Een bericht van het formulier:
io/openpid...........CEE5210S Het signaal SIGHUP is ontvangen.
CEE5210S Het signaal SIGHUP is ontvangen.
CEE5210S Het signaal SIGHUP is ontvangen.
ok
geeft aan dat de t/io/openpid.t-test van Perl is geslaagd, maar dit is gedaan met externe
berichten op stderr van CEE.
· Een bericht van het formulier:
lib/ftmp-security....Bestand::Temp::_gettemp: Bovenliggende map (/ Tmp /) is niet veilig
(sticky bit niet ingesteld als wereldschrijfbaar?) op lib/ftmp-security.t regel 100
Bestand::Temp::_gettemp: Bovenliggende map (/ Tmp /) is niet veilig (plakkerig bit niet
ingesteld wanneer wereldschrijfbaar?) op lib/ftmp-security.t regel 100
ok
geeft aan dat er een probleem is met de machtigingen op uw / tmp map binnen de HFS. Naar
corrigeer dat probleem, voer het commando uit:
chmod a+t / tmp
van een account met schrijftoegang tot de mapvermelding voor /tmp.
· Geen geheugen meer!
De recente perl-testsuite heeft behoorlijk veel geheugen nodig. Als aanvulling op de reacties hierboven op
geheugenbeperkingen is het ook de moeite waard om te controleren op _CEE_RUNOPTS in uw omgeving.
Perl heeft nu (in miniperlmain.c) een C #pragma om CEE-runopties in te stellen, maar de
omgevingsvariabele wint.
De C-code vraagt om:
#pragma runopts(HEAP(2M,500K,OVERAL,HOUDEN,8K,4K) STACK(,,ELKE,) ALL31(AAN))
De belangrijke onderdelen daarvan zijn het tweede argument (de verhoging) voor HEAP, en
waardoor de stapel "Boven de (16M) lijn" kan zijn. Als de heap-stapgrootte te klein is
wanneer perl (bijvoorbeeld door Unicode/Name.pl te laden) een "grote" (400K+) probeert te maken
string het past niet in een enkel segment en je krijgt "Onvoldoende geheugen!" - zelfs als die er is
er is nog voldoende geheugen beschikbaar.
Een verwant probleem is het gebruik met malloc van perl. Malloc van Perl gebruikt "sbrk()" om geheugen op te halen,
en "sbrk()" is beperkt tot de eerste toewijzing, dus in dit geval zoiets als:
HOOP(8M,500K,OVERAL,HOUDEN,8K,4K)
is nodig om door de testsuite te komen.
Installatie Afwijkingen with Perl on OS / 390
Het installman-script zal proberen te draaien op OS/390. Er zullen minder fouten optreden als u een
roff-hulpprogramma geïnstalleerd. Je kunt GNU groff verkrijgen van de Redbook SG24-5944-00 ftp-site.
Gebruik Hints voor Perl on OS / 390
Wanneer u perl op OS/390 gebruikt, houd er dan rekening mee dat de tekensets EBCDIC en ASCII dat wel zijn
verschillend. Zie perlebcdic.pod voor meer informatie over dergelijke problemen met tekensets. Perl ingebouwd
functies die zich mogelijk anders gedragen onder EBCDIC worden ook vermeld in de perlport.pod
document.
Open Edition (UNIX System Services) vanaf V2R8 ondersteunt het #!/path/to/perl-script
aanroeping. Er is een PTF beschikbaar bij IBM voor V2R7 die shell/kernel mogelijk maakt
ondersteuning voor #!. USS-releases vóór V2R7 ondersteunden de #! middel van schrift
aanroeping. Als u V2R6 of eerder gebruikt, zie dan:
hoofd `vanwaar perldoc`
voor een voorbeeld van hoe je de "eval exec"-truc kunt gebruiken om de shell te vragen Perl je
scripts op die oudere versies van Unix System Services.
Als je problemen hebt met vierkante haakjes, overweeg dan om je rlogin of
Telnet-klant. Probeer oudere 3270-emulators en ISHELL te vermijden voor het werken met Perl op USS.
Drijvend punt Afwijkingen with Perl on OS / 390
Er lijkt een bug te zitten in de floating point-implementatie op S/390-systemen
bellen int () op het product van een getal en een klein getal is niet hetzelfde als
bellen int () op het quotiënt van dat getal en een groot getal. Bijvoorbeeld,
in de volgende Perl-code:
mijn $x = 100000.0;
mijn $y = int($x * 1e-5) * 1e5; # '0'
mijn $z = int($x / 1e+5) * 1e5; # '100000'
print "\$y is $y en \$z is $z\n"; # $y is 0 en $z is 100000
Hoewel men zou verwachten dat de hoeveelheden $y en $z hetzelfde zijn en gelijk zijn aan 100000,
zal verschillen en in plaats daarvan respectievelijk 0 en 100000 zijn.
Het probleem kan verder worden onderzocht in een ongeveer gelijkwaardig C-programma:
# omvat
# omvatten
hoofd()
{
dubbel r1,r2;
dubbel x = 100000.0;
dubbel y = 0.0;
dubbele 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 en z is %e\n",y*1e5,z*1e5);
/* y is 0.000000e+00 en z is 1.000000e+05 (met c89) */
}
Modules en uitbreidingen voor Perl on OS / 390
Pure pure (dat wil zeggen niet xs) modules kunnen worden geïnstalleerd via de gebruikelijke:
perl Makefile.PL
maken
test maken
make install
Als je perl zou bouwen met dynamische laadmogelijkheden, dan zou dat ook de manier zijn om te bouwen
xs-gebaseerde extensies. Als u echter perl hebt gebouwd met de standaard statische koppeling, kunt u dat wel
bouw nog steeds xs-gebaseerde extensies voor OS/390, maar je zult de instructies in
ExtUtils::MakeMaker voor het bouwen van statisch gekoppelde perl-binaire bestanden. Op de eenvoudigste manier
configuraties Het bouwen van een statische perl + xs-extensie komt neer op:
perl Makefile.PL
maken
perl maken
test maken
make install
make -f Makefile.aperl inst_perl MAP_TARGET=perl
In de meeste gevallen hebben mensen betere resultaten gemeld met GNU-makelij dan met het systeem
/bin/make programma, zowel voor gewone modules als voor op xs gebaseerde extensies.
Als het make-proces problemen ondervindt bij het compileren of koppelen, probeer dan setting
de _C89_CCMODE naar 1. Ervan uitgaande dat sh uw login-shell is, voer dan uit:
exporteer _C89_CCMODE=1
Als tcsh uw login-shell is, gebruik dan de opdracht setenv.
AUTEURS
David Fiander en Peter Prymmer met dank aan Dennis Longnecker en William Raffloer voor
waardevolle rapporten, LPAR- en PTF-feedback. Met dank aan Mike MacIsaac en Egon Terwedow voor
SG24-5944-00. Dank aan Ignasi Roca voor het wijzen op de drijvende-kommaproblemen. Bedankt
aan John Goodyear voor hulp bij dynamisch laden.
Gebruik perlos390 online met de services van onworks.net