Đây là lệnh perlos390 có thể chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình giả lập trực tuyến MAC OS
CHƯƠNG TRÌNH:
TÊN
perlos390 - xây dựng và cài đặt Perl cho OS/390 và z/OS
SYNOPSIS
Tài liệu này sẽ giúp bạn Cấu hình, xây dựng, thử nghiệm và cài đặt Perl trên OS/390 (còn gọi là z/OS)
Dịch vụ hệ thống Unix.
T tài liệu nhu cầu đến be cập nhật, nhưng we không Biết gì it nên Nói. Vui lòng e-mail
Bình luận đến [email được bảo vệ] <mailto:[email được bảo vệ]>.
MÔ TẢ
Đây là Perl được chuyển đầy đủ cho OS/390 Phiên bản 2 Phiên bản 3, 5, 6, 7, 8 và 9. Nó có thể
hoạt động trên các phiên bản hoặc bản phát hành khác, nhưng đó là những phiên bản hoặc bản phát hành mà chúng tôi đã thử nghiệm.
Bạn có thể cần thực hiện một số tác vụ cấu hình hệ thống trước khi chạy Cấu hình
kịch bản cho Perl.
CÔNG CỤ
Danh sách Đồ chơi và Công cụ Unix của z/OS có thể hữu ích và chứa các liên kết đến các cổng của phần lớn
phần mềm hữu ích cho việc xây dựng Perl.
http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html
Giải nén Perl phân phối on OS / 390
Nếu sử dụng ftp hãy nhớ chuyển phân phối ở định dạng nhị phân.
Gunzip/gzip cho OS/390 được thảo luận tại:
http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html
để trích xuất kho lưu trữ tar ASCII trên OS/390, hãy thử cách này:
pax -o to=IBM-1047,from=ISO8859-1 -r < mới nhất.tar
or
zcat mới nhất.tar.Z | pax -o tới=IBM-1047,from=ISO8859-1 -r
Nếu bạn gặp nhiều lỗi về biểu mẫu
tar: FSUM7171 ...: không thể đặt uid/gid: EDC5139I Hoạt động không được phép.
bạn đã không đọc phần trên và đã thử sử dụng tar thay vì pax, trước tiên bạn sẽ phải xóa
thư mục Perl (hiện đã bị hỏng)
rm -rf perl-...
và sau đó sử dụng pax.
Thành lập và tiện ích cho Perl on OS / 390
Đảm bảo rằng cài đặt yacc của bạn đã sẵn sàng bao gồm mọi mẫu trình phân tích cú pháp cần thiết
các tập tin. Nếu bạn chưa làm như vậy thì hãy chắc chắn:
cp /samples/yyparse.c / Etc
Đây cũng có thể là thời điểm tốt để đảm bảo rằng tệp /etc/protocol của bạn và
/ Etc / resolv.conf or / Etc / hosts các tập tin đã có sẵn. Tài liệu của IBM mô tả như vậy
Sự cố thiết lập hệ thống USS là SC28-1890-07 "Lập kế hoạch dịch vụ hệ thống UNIX OS/390", trong
cụ thể là Chương 6 về tùy chỉnh vỏ OE.
GNU tạo ra OS/390, được khuyên dùng cho việc xây dựng Perl (cũng như xây dựng CPAN
mô-đun và tiện ích mở rộng), có sẵn trong "Công cụ".
Một số người đã báo cáo gặp phải lỗi "Hết bộ nhớ!" lỗi khi cố gắng xây dựng Perl
sử dụng GNU tạo các tệp nhị phân. Nếu bạn gặp rắc rối như vậy thì hãy thử tải nguồn
bộ mã và xây dựng GNU tạo từ nguồn để loại bỏ mọi rắc rối như vậy. Bạn cũng có thể
tìm GNU make (cũng như Perl và Apache) trong phần/cuốn sách màu đỏ "Phần mềm nguồn mở cho
OS/390 UNIX", SG24-5944-00 của IBM.
Nếu thay vì phiên bản GNU được đề xuất, bạn muốn sử dụng phiên bản do hệ thống cung cấp
chương trình thì hãy đảm bảo cài đặt đúng tệp quy tắc mặc định thông qua lệnh shell:
cp /samples/startup.mk / Etc
và đảm bảo cũng đặt biến môi trường _C89_CCMODE=1 (xuất _C89_CCMODE=1 là
cũng là một ý tưởng hay cho người dùng GNU).
Bạn cũng có thể muốn cài đặt GNU groff cho OS/390 trước khi chạy lệnh "make
bước cài đặt" cho Perl.
Có lỗi cú pháp trong tệp tiêu đề /usr/include/sys/socket.h mà IBM cung cấp
với USS V2R7, V2R8 và có thể cả V2R9. Vấn đề với tệp tiêu đề là ở gần
định nghĩa hằng số SO_REUSEPORT có một ký tự '/' phụ giả bên ngoài
một bình luận như vậy:
#define SO_REUSEPORT 0x0200 /* cho phép địa chỉ và cổng cục bộ
tái sử dụng */ /
Bạn có thể tự mình chỉnh sửa tiêu đề đó để xóa '/' cuối cùng hoặc bạn có thể lưu ý rằng
Môi trường ngôn ngữ (LE) APAR PQ39997 mô tả vấn đề và UQ46272 và UQ46271 của PTF
là các bản sửa lỗi (ít nhất là R8) và áp dụng chúng. Nếu không được chú ý, lỗi cú pháp đó sẽ
tỏ ra Perl không có khả năng xây dựng phần mở rộng "Socket" của nó.
Để thử nghiệm thành công, bạn có thể cần bật bit dính để có thể đọc được thế giới của mình / Tmp
thư mục nếu bạn chưa làm như vậy (xem man chmod).
Thiết lập Perl on OS / 390
Khi bạn đã giải nén bản phân phối, hãy chạy "sh Cấu hình" (xem CÀI ĐẶT để biết đầy đủ
thảo luận về các tùy chọn Cấu hình). Có tệp "gợi ý" cho os390 chỉ định
các giá trị chính xác cho hầu hết mọi thứ. Một số điều cần chú ý bao gồm:
· Tin nhắn có dạng:
(Tôi thấy bạn đang sử dụng Korn shell. Một số ksh xuất hiện trên phần Cấu hình,
chủ yếu trên các hệ thống kỳ lạ cũ hơn. Nếu là của bạn, hãy thử dùng Bourne shell.)
không có gì phải lo lắng cả.
· Cần có một số tệp mẫu mặc định của trình phân tích cú pháp trong /samples trong /etc. TRONG
đặc biệt hãy chắc chắn rằng bạn ít nhất sao chép /samples/yyparse.c vào / Etc trước khi chạy
Cấu hình của Perl. Bước này đảm bảo việc trích xuất thành công các phiên bản EBCDIC của
các tệp phân tích cú pháp như perly.c và perly.h. Việc này phải được thực hiện trước khi chạy
Cấu hình lần đầu tiên. Nếu bạn không làm được thì cách dễ nhất để Cấu hình lại
Perl là xóa gốc bản dựng bị định cấu hình sai của bạn và trích xuất lại nguồn từ tar
quả bóng. Sau đó, bạn phải đảm bảo rằng /etc/yyparse.c được đặt đúng chỗ trước khi thử
để chạy lại Cấu hình.
· Cổng này sẽ hỗ trợ tải động, nhưng nó không được chọn theo mặc định. nếu bạn
muốn thử nghiệm tải động thì hãy nhớ chỉ định -Dusedl trong
đối số cho tập lệnh Cấu hình. Xem nhận xét trong gợi ý/os390.sh để biết thêm
thông tin về tải động. Nếu bạn xây dựng với tải động thì bạn sẽ cần
để thêm thư mục $archlibexp/CORE vào biến môi trường LIBPATH của bạn theo thứ tự
để Perl hoạt động. Xem tệp config.sh để biết giá trị của $archlibexp. Nếu đang cố gắng
để sử dụng Perl bạn sẽ thấy thông báo lỗi tương tự như:
CEE3501S Không tìm thấy mô-đun libperl.dll.
Từ điểm vào __dllstaticinit tại phần bù đơn vị biên dịch +00000194 tại
thì LIBPATH của bạn không có vị trí của libperl.x và libperl.dll hoặc
libperl.so trong đó. Thêm thư mục đó vào LIBPATH của bạn và tiếp tục.
· Không bật cờ tối ưu hóa trình biên dịch "-O". Có một lỗi trong
trình tối ưu hóa hoặc perl khiến Perl không hoạt động chính xác khi bật trình tối ưu hóa.
· Một số file cấu hình trong / Etc được sử dụng bởi các API mạng bị thiếu
hoặc có tên sai. Đặc biệt, hãy đảm bảo rằng có một
/ Etc / resolv.conf hoặc một / Etc / hosts, Do đó gethostbyname () hoạt động và đảm bảo rằng
tệp /etc/proto đã được đổi tên thành /etc/protocol (KHÔNG / etc / protocols, như được sử dụng bởi
các hệ thống Unix khác). Bạn có thể phải tìm kiếm những thứ như HOSTNAME và DOMAINORIGIN
trong thành viên PDS "//'SYS1.TCPPARMS(TCPDATA)'" để thiết lập đúng cách / Etc
các tập tin mạng.
Xây dựng, Kiểm tra, đặt Perl on OS / 390
Chỉ cần đặt:
sh Cấu hình
làm cho
làm bài kiểm tra
nếu mọi thứ đều ổn (xem phần tiếp theo để biết chẩn đoán xét nghiệm/IVP) thì:
thực hiện cài đặt
Bước cuối cùng này có thể yêu cầu hoặc không yêu cầu đặc quyền UID=0 tùy thuộc vào cách bạn trả lời câu hỏi
các câu hỏi mà Cấu hình đã hỏi và bạn có quyền ghi vào thư mục hay không
bạn đã chỉ định.
Xây dựng Bất thường với Perl on OS / 390
"Hết trí nhớ!" các thông báo trong quá trình xây dựng Perl thường được khắc phục bằng cách xây dựng lại
GNU tạo tiện ích cho OS/390 từ bộ mã nguồn.
Một mục giới hạn bộ nhớ khác cần kiểm tra là tham số MAXASSIZE trong
Bộ dữ liệu 'SYS1.PARMLIB(BPXPRMxx)' (cũng lưu ý rằng giới hạn không gian địa chỉ V2R8 có thể là
được đặt trên cơ sở ID mỗi người dùng trong phân đoạn USS của hồ sơ RACF). Người ta đã báo cáo
xây dựng thành công Perl với tham số MAXASSIZE nhỏ tới 503316480 (và có thể
có thể xây dựng Perl với MAXASSIZE nhỏ hơn thế).
Trong USS của bạn / etc / profile hoặc $HOME/.profile có thể giới hạn cài đặt ulimit của bạn. Kiểm tra xem
lệnh sau trả về giá trị hợp lý:
ulimit -a
Để tiết kiệm bộ nhớ, bạn nên tải các mô-đun trình biên dịch của mình vào Khu vực Gói Liên kết
(LPA/ELPA) thay vì trong danh sách liên kết hoặc bước lib.
Nếu trình biên dịch c89 phàn nàn về lỗi cú pháp trong quá trình xây dựng tiện ích mở rộng Ổ cắm
thì hãy nhớ sửa lỗi cú pháp trong tiêu đề hệ thống /usr/include/sys/socket.h.
Kiểm tra Bất thường với Perl on OS / 390
Bước "thực hiện kiểm tra" chạy Quy trình xác minh Perl, thường là trước khi cài đặt. Bạn
có thể gặp các thông báo STDERR ngay cả khi chạy "thực hiện thử nghiệm" thành công. Đây là
hướng dẫn về một số điểm bất thường thường thấy hơn:
· Tin nhắn có dạng:
io/openpid...........CEE5210S Đã nhận được tín hiệu SIGHUP.
CEE5210S Đã nhận được tín hiệu SIGHUP.
CEE5210S Đã nhận được tín hiệu SIGHUP.
ok
chỉ ra rằng bài kiểm tra t/io/openpid.t của Perl đã đạt nhưng được thực hiện với các nội dung không liên quan
tin nhắn trên stderr từ CEE.
· Tin nhắn có dạng:
lib/ftmp-security....File::Temp::_gettemp: Thư mục mẹ (/ tmp /) không an toàn
(bit dính không được đặt khi có thể ghi trên thế giới?) tại lib/ftmp-security.t dòng 100
File::Temp::_gettemp: Thư mục mẹ (/ tmp /) không an toàn (dính chút không
được đặt khi thế giới có thể ghi được?) tại lib/ftmp-security.t dòng 100
ok
cho biết có vấn đề với các quyền trên / Tmp thư mục trong HFS. ĐẾN
khắc phục vấn đề đó ra lệnh:
chmod a+t / Tmp
từ một tài khoản có quyền ghi vào mục nhập thư mục cho /tmp.
· Hết bộ nhớ!
Bộ thử nghiệm Perl gần đây khá ngốn bộ nhớ. Ngoài những ý kiến trên về
hạn chế về bộ nhớ, bạn cũng nên kiểm tra _CEE_RUNOPTS trong môi trường của mình.
Perl hiện có (trong miniperlmain.c) C #pragma để đặt các tùy chọn chạy CEE, nhưng
biến môi trường thắng.
Mã C yêu cầu:
#pragma runopts(HEAP(2M,500K,MỌI ĐÂU,GIỮ,8K,4K) STACK(,,ANY,) ALL31(ON))
Các phần quan trọng trong số đó là đối số thứ hai (gia số) của HEAP và
cho phép ngăn xếp ở mức "Trên dòng (16M)". Nếu mức tăng heap quá nhỏ
sau đó khi Perl (ví dụ: tải unicode/Name.pl) cố gắng tạo một "lớn" (400K+)
chuỗi đó không thể vừa với một phân đoạn duy nhất và bạn nhận được thông báo "Hết bộ nhớ!" - cho dù có
vẫn còn nhiều bộ nhớ trống.
Một vấn đề liên quan là việc sử dụng malloc của Perl. Malloc của Perl sử dụng "sbrk()" để lấy bộ nhớ,
và "sbrk()" được giới hạn ở lần phân bổ đầu tiên, vì vậy trong trường hợp này có nội dung như:
HEAP(8M,500K,MỌI NƠI, GIỮ,8K,4K)
là cần thiết để vượt qua bộ thử nghiệm.
của DINTEK Bất thường với Perl on OS / 390
Tập lệnh trình cài đặt sẽ cố chạy trên OS/390. Sẽ có ít lỗi hơn nếu bạn có một
tiện ích roff được cài đặt. Bạn có thể lấy thông tin GNU từ trang Redbook SG24-5944-00 ftp.
Sử dụng Gợi ý cho Perl on OS / 390
Khi sử dụng Perl trên OS/390 hãy nhớ rằng bộ ký tự EBCDIC và ASCII là
khác biệt. Xem perlebcdic.pod để biết thêm về các vấn đề về bộ ký tự như vậy. Perl dựng sẵn
các chức năng có thể hoạt động khác nhau trong EBCDIC cũng được đề cập trong perlport.pod
tài liệu.
Phiên bản mở (Dịch vụ hệ thống UNIX) từ V2R8 trở đi không hỗ trợ tập lệnh #!/path/to/Perl
lời kêu gọi. Có một PTF có sẵn từ IBM cho V2R7 sẽ cho phép shell/kernel
hỗ trợ cho #!. Các bản phát hành USS trước V2R7 không hỗ trợ #! phương tiện kịch bản
lời kêu gọi. Nếu bạn đang chạy V2R6 hoặc cũ hơn thì hãy xem:
đầu `từ đâu perldoc`
để biết ví dụ về cách sử dụng thủ thuật "eval exec" để yêu cầu shell để Perl chạy
các tập lệnh trên các bản phát hành cũ hơn của Dịch vụ Hệ thống Unix.
Nếu bạn gặp rắc rối với dấu ngoặc vuông thì hãy xem xét chuyển đổi rlogin hoặc
khách hàng telnet. Cố gắng tránh các trình giả lập 3270 cũ hơn và ISHELL để làm việc với Perl trên USS.
Floating Điểm Bất thường với Perl on OS / 390
Dường như có một lỗi trong quá trình triển khai dấu phẩy động trên hệ thống S/390 khiến
gọi NS() trên tích của một số và một số có độ lớn nhỏ không giống với
gọi NS() trên thương của số đó và một số có độ lớn lớn. Ví dụ,
trong mã Perl sau:
của tôi $ x = 100000.0;
$y = int($x * 1e-5) * 1e5 của tôi; # '0'
$z của tôi = int($x / 1e+5) * 1e5; # '100000'
print "\$y là $y và \$z là $z\n"; # $y là 0 và $z là 100000
Mặc dù người ta mong đợi các đại lượng $y và $z giống nhau và bằng 100000 nhưng chúng
sẽ khác nhau và thay vào đó sẽ lần lượt là 0 và 100000.
Vấn đề có thể được xem xét kỹ hơn trong một chương trình C tương đương:
#bao gồm
#bao gồm
chủ yếu()
{
gấp đôi r1,r2;
gấp đôi x = 100000.0;
y gấp đôi = 0.0;
z kép = 0.0;
x = 100000.0 * 1e-5;
r1 = modf(x,&y);
x = 100000.0 / 1e+5;
r2 = modf(x,&z);
printf("y là %e và z là %e\n",y*1e5,z*1e5);
/* y là 0.000000e+00 và z là 1.000000e+05 (với c89) */
}
Modules và Phần mở rộng cho Perl on OS / 390
Các mô-đun thuần khiết (không phải xs) có thể được cài đặt thông qua:
Perl Makefile.PL
làm cho
làm bài kiểm tra
thực hiện cài đặt
Nếu bạn xây dựng Perl với khả năng tải động thì đó cũng là cách để xây dựng
tiện ích mở rộng dựa trên xs. Tuy nhiên, nếu bạn xây dựng Perl với liên kết tĩnh mặc định thì bạn có thể
vẫn xây dựng các tiện ích mở rộng dựa trên xs cho OS/390 nhưng bạn sẽ cần làm theo hướng dẫn trong
ExtUtils::MakeMaker để xây dựng các tệp nhị phân Perl được liên kết tĩnh. Một cách đơn giản nhất
các cấu hình xây dựng phần mở rộng Perl + xs tĩnh có nội dung:
Perl Makefile.PL
làm cho
làm perl
làm bài kiểm tra
thực hiện cài đặt
make -f Makefile.aperl inst_perl MAP_TARGET=perl
Trong hầu hết các trường hợp, mọi người đã báo cáo kết quả tốt hơn với GNU thay vì của hệ thống.
/bin/make chương trình, cho dù dành cho mô-đun đơn giản hay dành cho phần mở rộng dựa trên xs.
Nếu quá trình tạo gặp sự cố với quá trình biên dịch hoặc liên kết thì hãy thử cài đặt
_C89_CCMODE thành 1. Giả sử sh là shell đăng nhập của bạn thì hãy chạy:
xuất _C89_CCMODE=1
Nếu tcsh là shell đăng nhập của bạn thì hãy sử dụng lệnh setenv.
TÁC GIẢ
David Fiander và Peter Prymmer gửi lời cảm ơn đến Dennis Longnecker và William Raffloer vì
báo cáo có giá trị, phản hồi LPAR và PTF. Cảm ơn Mike MacIsaac và Egon Terwedow vì
SG24-5944-00. Cảm ơn Ignasi Roca đã chỉ ra các vấn đề về dấu phẩy động. Cảm ơn
tới John Goodyear để được trợ giúp tải động.
Sử dụng perlos390 trực tuyến bằng các dịch vụ onworks.net