将开源软件移植到 OpenVMS
此页面已从另一个项目移植,需要进行书籍化. 此页面需要更改为书籍的首页,或者更改为符合其要包含的书籍的“本地风格指南”。 书籍化后,请删除 {{bookify}} 。 |
OpenVMS 和开源软件都从一段时间前开始使用 Open 前缀。在此之前,我们只有很多操作系统,其中一个是 VAX VMS。每个操作系统都有自己的功能、优点和缺点。如果你想要一个应用程序在你的计算机上运行,你就会购买或自己构建应用程序。让应用程序在你的计算机上运行所需的努力往往非常大,人们会寻找方法来简化应用程序在不同平台上的实现过程(即移植)。特别是那些旨在在许多不同平台上实现的软件,以及那些为尚未已知的平台开发的软件,都需要采取措施来尽可能地简化实现过程。符合开放标准或行业标准非常有用。如果软件在交付时包括源代码,以便客户可以根据自己的(不断变化的)需求修改软件,并有义务将修改后的代码提供给其他软件用户,那么就会想到开源软件的概念。尽管开源软件和开放标准在严格意义上并不一定相关,但它们通常会被一起提及,因为当两者都能最优地使用时,人们将获益最多:轻松(因此廉价)地部署应用程序。OpenVMS 中的 open 仅仅意味着人们可以依赖 OpenVMS 操作系统对开放标准的符合性。OpenVMS 不仅可以在 VAX 硬件上运行,也可以在 Alpha 上运行,并且从 2004 年开始也可以在行业标准的 IA64 硬件上运行。
本指南将解释如何使用 OpenVMS DII COE 版本(7.2-6C1 和 7.2-6C2)中引入的功能将开源软件移植到 OpenVMS。本指南并非专门针对这些 OpenVMS 版本,但它们是第一个公开发布的包含一些新 UNIX 功能的 OpenVMS 版本。更具体地说,OpenVMS 版本 7.3 7.3- 1、7.3-2 及更高版本。最新的 OpenVMS 版本(OpenVMS 8.4)拥有这些新功能中的大部分。由于移植工具的开发正在快速进展,并且未来将在 OpenVMS 中添加更多可移植性功能,因此我们将定期更新本指南。许多开源项目使用 UNIX shell 脚本进行构建和安装。我们将探讨如何使用 GNV 套件提供的 UNIX 命令和实用程序在 OpenVMS 上执行相同的操作。我们将不讨论将开源软件移植到较早版本的 OpenVMS,尽管这些较早版本仍然受支持。移植到这些较早版本的 OpenVMS 可以完成,但难度要大得多。
目标受众基本上是所有对开源软件感兴趣的人。如果一切都完美,这将是唯一的需求,但可惜的是,事情并不完美。在当前版本的开源软件中,OpenVMS 很少被识别或考虑为目标平台。我们认为(并希望)这种情况很快会改变。在此期间,移植人员将从一些编程经验中受益。在 OpenVMS 或 UNIX 系统上拥有 C 和/或 C++ 经验是一个很大的优势。开源世界中常用的其他语言包括 bash、make 和 perl。系统管理经验更多地是需求,因为移植可能需要对 OpenVMS 上的移植环境进行调整。
我们感谢所有以任何形式为本指南做出贡献的人。许多人贡献了材料、想法或内部信息。如果没有他们的贡献,本指南将不会像现在这样有用。
本指南不会从对开源、免费软件、共享软件和专有软件之间差异的深入哲学讨论开始。相反,我们更愿意遵循以下出版物中的定义
Title: The BUSINESS and ECONOMICS of LINUX and OPEN SOURCE Written by: Martin Fink Printed by: Prentice Hall ISBN: 0-13-047677-3
对于我们的目的,这些定义以及各种许可协议带来的法律含义并不相关。我们将专注于将开源软件移植到 OpenVMS 过程的技术方面。
由于大多数开源软件源于某种形式的 UNIX,因此我们需要了解此类平台的特点以及这些平台与目标平台 OpenVMS 之间的差异。说起来容易做起来难,因为 UNIX 的实现数量与硬件和操作系统软件供应商的数量一样多。从 UNIX 的早期开始,当大学不仅可以访问 UNIX,还可以访问操作系统的源代码时,各种针对常见问题的解决方案就出现了。这导致了通常称为 UNIX 的相关操作系统家族的出现。UNIX 品牌名称的所有权几经易手,情况变得相当混乱。谁拥有真正的 UNIX?因此,人们开始定义标准(虽然不是一个标准……),通过这些标准可以识别“真正的”UNIX。在 <reference> 中,我们将比较以下 UNIX 标准与 OpenVMS 功能:XSI、POSIX Base、Unix 98、Unix 95、P96 P92、C99、C89、SVID3、BSD、LSB 1.3
LINUX 是一个非常流行的类似 UNIX 的操作系统,它有许多不同的发行版,每个发行版都有略微不同的特性。为如此多样的环境制作软件是一场噩梦。但极具创造力的软件开发人员找到了解决方案。解决方案有两方面:
- 通过标准化来定义和实施最小功能集,类似于 TCP/IP 的 RFC。
- 使用一套能够找到平台差异并做出反应(适应)的工具来自动化构建过程。这导致了 autoconf、automake 和 libtool 的开发。这些工具也称为 GNU autotools 环境 (http://sources.redhat.com/autobook/)
另一方面,OpenVMS 是惠普拥有和维护的专有操作系统。有一些项目旨在创建 OpenVMS 克隆版(例如 freeVMS (http://www.freevms.net)),但本指南将重点介绍惠普的 OpenVMS 操作系统。如 SPD(软件产品说明)中所述,OpenVMS 符合一组开放标准。在这方面,开放标准意味着标准化组织负责标准的确切文本。我们认为,完全符合该标准意味着产品将在发现差异时适应该标准,而不是相反(将标准适应产品的行为,就像所谓的行业标准通常所做的那样)。对于将开源移植到 OpenVMS 的开发人员来说,最有趣的开放标准是
- 分布式计算环境 (DCE) 支持
- 对 OSF/Motif 和 X 窗口系统标准的支持(X11R6 服务器和 X11R5 客户端)
- ANSI X3.4-1986:美国信息交换标准代码
- ANSI X3.41-1974:用于 7 位 ASCII 的代码扩展技术
- FIPS 1-2:信息交换代码、其表示形式、子集和扩展
- ISO 646:ISO 7 位信息交换编码字符集
- ISO 2022:用于 ISO 646 的代码扩展技术
- ISO 3307:一天时间的表示
- ISO 4873:8 位信息交换代码 - 结构和实施规则
- ISO 9660:信息处理 - 用于信息交换的 CD-ROM 的卷和文件结构
这里的问题不是我们能否在 OpenVMS 上使用开源软件,因为你已经在使用一些开源软件。CDSA 是一个开源安全框架,现在已用于 OpenVMS。没有它,你就无法安装当前版本的 OpenVMS。CDSA 有两个附加组件,SSL 和 Kerberos。两者都是开源的。在 TCP/IP 包中,你会发现来自互联网软件联盟的 BIND 和 DHCP。那么 SMTP、POP、IMAP、SSH 呢…… 这些只是标准 OpenVMS 发行版中包含的一些软件包。但还有更多,还有 Apache、Mozilla、Samba、MySQL、Tomcat、Perl、Python。然后是开源的商业理由。你或你的公司为什么要使用开源软件?这不像许多人想的那样简单。开源软件免费并不一定意味着它对你或你的公司来说运行成本更低。由于主题的复杂性,我们想向你推荐一本关于该主题的好书
Title: The BUSINESS and ECONOMICS of LINUX and OPEN SOURCE Written by: Martin Fink Printed by: Prentice Hall ISBN: 0-13-047677-3
比较 UNIX 和 OpenVMS 的最佳方法可能是通过一张表格,并排比较有趣的方面。<reference> 就是这样的表格。这只是一个部分列表。可能最好是推荐一些关于该主题的好书。来自 John Wisniewski 的著作,他推动了 OpenVMS 爱好者计划,这是一本优秀的书籍
Title: Linux and OpenVMS Interoperability Written by: John Wisniewski Printed by: Digital Press ISBN: 1-55558-267-2
以下书籍旨在让熟悉 OpenVMS 的人更容易地学习 UNIX 环境
Title: UNIX for VMS Users Written by: Philip E. Bourne Printed by: Digital Press ISBN: 1-55558-034-3
移植过程的第一步是让一个合适的 OpenVMS 系统运行起来。虽然 OpenVMS 在三个硬件平台上可用,但只有两个平台装备齐全,可以进行严肃的开源移植:Alpha 和 IA64。VAX 平台缺少独立配置中某些重要功能的支持。例如,VAX OpenVMS 缺少对原生 ODS5 和 GNV 的支持。由于大多数人只能访问 Alpha 系统,并且 IA64 OpenVMS 在很大程度上在功能上等同于 Alpha OpenVMS,因此所有示例均基于 Alpha OpenVMS。在 www.oooovms.dyndns.org 网站的参考部分,提供了构建 OpenVMS 系统所涉及的步骤示例。关于 升级固件、OpenVMS 的初始安装、首次启动 和 OpenVMS 的初始配置 的文档。
+-------------+ V i r t u a l serial0 |F|r|e|e|A|X|P| A l p h a on emulator workshop (128 MB) +-------------+ x64 version 2.4.3.533 ff.fe.fd.fc.fb.fa.f9.f8.f7. ERROR: ISA table corrupt! Initializing table to defaults type >>>init to use these changes f6.f5. ef.df.ee.ed.ec.f4.eb.ea. TIMER_TPS environment variable invalid Defaulting to 1mS per tick e9.e8.e7.e6.....e5. V7.0-9, built on Mar 18 1999 at 13:25:37 >>>b dka100 (boot dka100.1.0.6.0 -flags 0) block 0 of dka100.1.0.6.0 is a valid boot block reading 1230 blocks from dka100.1.0.6.0 bootstrap code read in base = 1f2000, image_start = 0, image_bytes = 99c00 initializing HWRPB at 2000 initializing page table at 1e4000 initializing machine state setting affinity to the primary CPU jumping to bootstrap code OpenVMS (TM) Alpha Operating System, Version V8.4 © Copyright 1976-2010 Hewlett-Packard Development Company, L.P. Installing required known files... Configuring devices... %EWA0, Twisted-Pair mode set by console %EWA0, Link state: UP **************************************************************** You can install or upgrade the OpenVMS ALPHA operating system or you can install or upgrade layered products that are included on the OpenVMS ALPHA distribution media (CD/DVD). You can also execute DCL commands and procedures to perform "standalone" tasks, such as backing up the system disk. Please choose one of the following: 1) Upgrade, install or reconfigure OpenVMS ALPHA Version V8.4 2) Display layered products that this procedure can install 3) Install or upgrade layered products 4) Show installed products 5) Reconfigure installed products 6) Remove installed products 7) Find, Install or Undo patches; Show or Delete Recovery Data 8) Execute DCL commands and procedures 9) Shut down this system Enter CHOICE or ? for help: (1/2/3/4/5/6/7/8/9/?) 1 *********************************************************** This procedure will ask a series of questions. () - encloses acceptable answers [] - encloses default answers Type your response and press the <Return> key. Type: ? - to repeat an explanation ^ - to change prior input (not always possible) Ctrl/Y - to exit the installation procedure There are two choices for installation/upgrade: Initialize - Removes all software and data files that were previously on the target disk and installs OpenVMS ALPHA. Preserve -- Installs or Upgrades OpenVMS ALPHA on the target disk and retains all other contents of the target disk. * Note: You cannot use preserve to install OpenVMS ALPHA on a disk on which any other operating system is installed. This includes implementations of OpenVMS for other architectures. Do you want to INITIALIZE or to PRESERVE? [PRESERVE] initialize You must enter the device name for the target disk on which OpenVMS ALPHA will be installed. Enter device name for target disk: (? for choices) ? Device Device Error Volume Free Trans Mnt Name Status Count Label Blocks Count Cnt DKA0: Online 0 DKA100: Mounted wrtlck 2 ALPHA084 137373 83 1 DVA0: Offline 0 DAD0: Online 0 Enter device name for target disk: (? for choices) dka0 Enter volume label for target system disk: [ALPHASYS] The target system disk can be initialized with On-Disk Structure Level 2 (ODS-2) or Level 5 (ODS-5). (? for more information) Do you want to initialize with ODS-2 or ODS-5? (2/5/?) 5 Hard links can be enabled on ODS-5 disks. (? for more information) Do you want to enable hard links? (Yes/No/?) yes You have chosen to install OpenVMS ALPHA on a new disk. The target system disk, DKA0:, will be initialized with structure level 5 (ODS-5). Hard links WILL be enabled. The disk will be labeled ALPHASYS. Any data currently on the target system disk will be lost. Is this OK? (Yes/No) yes Initializing and mounting target.... Creating page and swap files.... You must enter a password for the SYSTEM account. The password must be a minimum of 8 characters in length, and may not exceed 31 characters. It will be checked and verified. The system will not accept passwords that can be guessed easily. The password will not be displayed as you enter it. Password for SYSTEM account: password not echoed Re-enter SYSTEM password for verification: password not echoed Will this system be a member of an OpenVMS Cluster? (Yes/No) no Will this system be an instance in an OpenVMS Galaxy? (Yes/No) no For your system to operate properly, you must set two parameters: SCSNODE and SCSSYSTEMID. SCSNODE can be from 1 to 6 letters or numbers. It must contain at least one letter. If you plan to use DECnet, SCSNODE must be the DECnet Phase IV node name, or the DECnet-Plus (Phase V) node synonym. If you have multiple OpenVMS systems, the SCSNODE on each system must be unique. Enter SCSNODE: star If you plan to use DECnet, SCSSYSTEMID must be set based on the DECnet Phase IV address. Do you plan to use DECnet? (Yes/No) [Yes] no Please choose an SCSSYSTEMID between 1 and 65535. If you have multiple OpenVMS systems, the SCSSYSTEMID on each system must be unique. Enter SCSSYSTEMID: [65534] Configuring the Local Time Zone TIME ZONE SPECIFICATION -- MAIN Time Zone Menu "*" indicates a menu 0* GMT 1* AFRICA 17) EST 33) IRAN 49) PORTUGAL 2* AMERICA 18) EST5EDT 34) ISRAEL 50) PRC 3* ANTARCTICA 19* ETC 35) JAMAICA 51) PST8PDT 4* ARCTIC 20* EUROPE 36) JAPAN 52) ROC 5* ASIA 21) FACTORY 37) KWAJALEIN 53) ROK 6* ATLANTIC 22) GB-EIRE 38) LIBYA 54) SINGAPORE 7* AUSTRALIA 23) GB 39) MET 55) TURKEY 8* BRAZIL 24) GMT-0 40* MEXICO 56) UCT 9* CANADA 25) GMT 41* MIDEAST 57) UNIVERSAL 10) CET 26) GMT0 42) MST 58* US 11* CHILE 27) GMTPLUS0 43) MST7MDT 59) UTC 12) CST6CDT 28) GREENWICH 44) NAVAJO 60) W-SU 13) CUBA 29) HONGKONG 45) NZ-CHAT 61) WET 14) EET 30) HST 46) NZ 62) ZULU 15) EGYPT 31) ICELAND 47* PACIFIC 16) EIRE 32* INDIAN 48) POLAND Press "Return" to redisplay, enter "=" to search or "?" for help, or Select the number above that best represents the desired time zone: 20 EUROPE Time Zone Menu "*" indicates a menu 0* RETURN TO MAIN TIME ZONE MENU 1) AMSTERDAM 16) HELSINKI 31) MOSCOW 46) SOFIA 2) ANDORRA 17) ISLE_OF_MAN 32) NICOSIA 47) STOCKHOLM 3) ATHENS 18) ISTANBUL 33) OSLO 48) TALLINN 4) BELFAST 19) JERSEY 34) PARIS 49) TIRANE 5) BELGRADE 20) KALININGRAD 35) PODGORICA 50) TIRASPOL 6) BERLIN 21) KIEV 36) POLAND 51) UZHGOROD 7) BRATISLAVA 22) LISBON 37) PORTUGAL 52) VADUZ 8) BRUSSELS 23) LJUBLJANA 38) PRAGUE 53) VATICAN 9) BUCHAREST 24) LONDON 39) RIGA 54) VIENNA 10) BUDAPEST 25) LUXEMBOURG 40) ROME 55) VILNIUS 11) CHISINAU 26) MADRID 41) SAMARA 56) VOLGOGRAD 12) COPENHAGEN 27) MALTA 42) SAN_MARINO 57) WARSAW 13) DUBLIN 28) MARIEHAMN 43) SARAJEVO 58) ZAGREB 14) GIBRALTAR 29) MINSK 44) SIMFEROPOL 59) ZAPOROZHYE 15) GUERNSEY 30) MONACO 45) SKOPJE 60) ZURICH Press "Return" to redisplay, enter "=" to search or "?" for help, or Select the number above that best represents the desired time zone: 1 You selected EUROPE / AMSTERDAM as your time zone. Is this correct? (Yes/No) [YES]: yes Configuring the Time Differential Factor (TDF) Default Time Differential Factor for standard time is 1:00. Default Time Differential Factor for daylight saving time is 2:00. The Time Differential Factor (TDF) is the difference between your system time and Coordinated Universal Time (UTC). UTC is similar in most respects to Greenwich Mean Time (GMT). The TDF is expressed as hours and minutes, and should be entered in the hh:mm format. TDFs for the Americas will be negative (-3:00, -4:00, etc.); TDFs for Europe, Africa, Asia and Australia will be positive (1:00, 2:00, etc.). This time zone supports daylight saving time. Is this time zone currently on daylight saving time? (Yes/No): no Enter the Time Differential Factor [1:00]: 1:00 NEW SYSTEM TIME DIFFERENTIAL FACTOR = 1:00 Is this correct? [Y]: y If you have Product Authorization Keys (PAKs) to register, you can register them now. Do you want to register any Product Authorization Keys? (Yes/No) [Yes] no The following products are part of the OpenVMS installation; they will be installed along with the OpenVMS operating system: o Availability Manager (base) for OpenVMS Alpha o CDSA for OpenVMS Alpha o KERBEROS for OpenVMS Alpha o SSL for OpenVMS Alpha o Performance Data Collector (base) for OpenVMS Alpha o HP Binary Checker for OpenVMS Alpha You can also install the following optional products along with the OpenVMS operating system: o DECwindows Motif for OpenVMS Alpha o DECnet-Plus for OpenVMS Alpha o DECnet Phase IV for OpenVMS Alpha o HP TCP/IP Services for OpenVMS If you want to change your selections, you can do so later in the installation by answering "NO" to the following question: "Do you want the defaults for all options?" Do you want to install DECwindows Motif for OpenVMS Alpha V1.7? (Yes/No) [Yes] yes Beginning with OpenVMS V7.1, the DECnet-Plus kit is provided with the OpenVMS operating system kit. HP strongly recommends that DECnet users install DECnet-Plus. DECnet Phase IV applications are supported by DECnet-Plus. DECnet Phase IV is also provided as an option. If you install DECnet-Plus and TCP/IP you can run DECnet applications over a TCP/IP network. Please see the OpenVMS Management Guide for information on running DECnet over TCP/IP. Do you want to install DECnet-Plus for OpenVMS Alpha V8.4? (Yes/No) [Yes] no Do you want to install DECnet Phase IV for OpenVMS Alpha V8.4? (Yes/No) [Yes] no Do you want to install HP TCP/IP Services for OpenVMS V5.7-13? (Yes/No) [Yes] yes The installation operation can provide brief or detailed descriptions. In either case, you can request the detailed descriptions by typing ?. Do you always want detailed descriptions? (Yes/No) [No] yes The system was booted from a device containing the OpenVMS Alpha distribution. Validation of signed kits is not supported in this restricted environment. The following product has been selected: DEC AXPVMS OPENVMS V8.4 Platform (product suite) Configuration phase starting ... You will be asked to choose options, if any, for each selected product and for any products that may be installed to satisfy software dependency requirements. Configuring DEC AXPVMS OPENVMS V8.4: OPENVMS and related products Platform This is a PLATFORM kit which installs OpenVMS Alpha, and, optionally the following related products: DECwindows Motif for OpenVMS Alpha DECnet-Plus for OpenVMS Alpha HP TCP/IP Services for OpenVMS Alpha COPYRIGHT 1976, 21-APR-2010 HP Registered in U.S. Patent and Trademark Office. in the United States and/or other countries. Confidential computer software. Valid license from HP required for possession, use or copying. Consistent with FAR 12.211 and 12.212, Commercial Computer Software, Computer Software Documentation, and Technical Data for Commercial Items are licensed to the U.S. Government under vendor's standard commercial license. HP shall not be liable for technical or editorial errors or omissions contained herein. The information contained herein is subject to change without notice. Hewlett-Packard Development Company, L.P. Houston Texas Do you want the defaults for all options? [YES] Availability Manager (base) for OpenVMS Alpha This part installs the Data Collector files needed for the Availability Manager (formerly DECamds). CDSA for OpenVMS Alpha This part installs CDSA for OpenVMS Alpha, which is the Common Data Security Architecture. KERBEROS for OpenVMS Alpha This part installs KERBEROS for OpenVMS Alpha, which is a network authentication protocol that provides authentication for applications using secret-key cryptography. SSL for OpenVMS Alpha SSL (Secure Socket Layer) is a protocol that provides encryption and authentication of TCP/IP data communications between a client and a server. Performance Data Collector (base) for OpenVMS Alpha This part installs the run time portion of the Performance Data Collector for OpenVMS Alpha. HP Binary Checker for OpenVMS Alpha This part installs the run time portion of the HP Binary Checker. Alpha Do you want to review the options? [NO] yes DEC AXPVMS OPENVMS V8.4: OPENVMS and related products Platform DEC AXPVMS VMS V8.4: OpenVMS Operating System DECdtm Distributed Transaction Manager: YES Support for DECnet-Plus or DECnet (Phase IV) for OpenVMS: YES Programming Support: YES Debugger Utility: YES Image Dump Utility: YES Macro libraries: YES Macro-32 Migration Compiler: YES TLB intermediary form of STARLET: YES C Object Libraries: YES C Header Files: YES VMS text libraries of Ada declarations: YES RMS Journaling Recovery Utility: YES System Programming Support: YES Delta Debugger: YES System Dump Analyzer Utility: YES Miscellaneous Symbol Table Files: YES OpenVMS Management Station Software -- PC files: YES Utilities: YES Phone Utility: YES Error Log Generator Utility: YES XPG4 Internationalization Utilities: YES World Wide PostScript Printing Subsystem: YES Bliss Require Files: YES Example Files: YES Message Facility Files (HELP/MESSAGE): YES Translated Image Support: YES UETP Files: YES DECwindows Server Support: YES DEC AXPVMS DWMOTIF_SUPPORT V8.4: DECwindows Server Support DECwindows workstation files: YES video fonts: YES 100 dots-per-inch video fonts: YES Euro base support: YES Euro 100 dots-per-inch video fonts: YES Delete any obsolete OpenVMS files: YES Delete files archived by OpenVMS remedial kits: YES Availability Manager (base) for OpenVMS Alpha HP AXPVMS AVAIL_MAN_BASE V8.4: hp Availability Manager Base OS Drivers CDSA for OpenVMS Alpha CPQ AXPVMS CDSA V2.4-320 KERBEROS for OpenVMS Alpha HP AXPVMS KERBEROS V3.1-152 SSL for OpenVMS Alpha HP AXPVMS SSL V1.4-331: SSL for OpenVMS Alpha V1.4 (Based on OpenSSL 0.9.8h) Run the installation verification procedure (IVP)?: YES Performance Data Collector (base) for OpenVMS Alpha HP AXPVMS TDC_RT V2.3-20: The Performance Data Collector (base) for OpenVMS HP Binary Checker for OpenVMS Alpha HP AXPVMS HPBINARYCHECKER V1.1: HP Binary Checker DECwindows Motif for OpenVMS Alpha: YES DEC AXPVMS DWMOTIF V1.7: DECwindows Motif Install Low Bandwidth X (LBX) Support: YES Install the DECwindows Motif Version 1.7 client software: YES Install New Desktop: YES Install Manual (reference) pages for the New Desktop: YES Make the New Desktop the default desktop: YES Install traditional DECwindows Desktop: YES Programming Support for the C Language: YES Programming Support for the Pascal Language: YES Programming Support for the FORTRAN Language: YES Programming Support for the New Desktop: YES Programming examples: YES Sound example files: YES Programming examples for DECwindows: YES Programming examples for the New Desktop: YES Translated Image Support: YES DECnet-Plus for OpenVMS Alpha: NO DECnet Phase IV for OpenVMS Alpha: NO HP TCP/IP Services for OpenVMS: YES DEC AXPVMS TCPIP V5.7-13: HP TCP/IP Services for OpenVMS. Applications: YES Are you satisfied with these options? [YES] yes Execution phase starting ... The following products will be installed to destinations: CPQ AXPVMS CDSA V2.4-320 DISK$ALPHASYS:[VMS$COMMON.] DEC AXPVMS DWMOTIF V1.7 DISK$ALPHASYS:[VMS$COMMON.] DEC AXPVMS DWMOTIF_SUPPORT V8.4 DISK$ALPHASYS:[VMS$COMMON.] DEC AXPVMS OPENVMS V8.4 DISK$ALPHASYS:[VMS$COMMON.] DEC AXPVMS TCPIP V5.7-13 DISK$ALPHASYS:[VMS$COMMON.] DEC AXPVMS VMS V8.4 DISK$ALPHASYS:[VMS$COMMON.] HP AXPVMS AVAIL_MAN_BASE V8.4 DISK$ALPHASYS:[VMS$COMMON.] HP AXPVMS HPBINARYCHECKER V1.1 DISK$ALPHASYS:[VMS$COMMON.] HP AXPVMS KERBEROS V3.1-152 DISK$ALPHASYS:[VMS$COMMON.] HP AXPVMS SSL V1.4-331 DISK$ALPHASYS:[VMS$COMMON.] HP AXPVMS TDC_RT V2.3-20 DISK$ALPHASYS:[VMS$COMMON.] Portion done: 0%...10%...20%...30%...40%...50%...60%...70%...80%...90% %PCSI-I-PRCOUTPUT, output from subprocess follows ... % - Execute SYS$MANAGER:TCPIP$CONFIG.COM to proceed with configuration of % HP TCP/IP Services for OpenVMS. % Portion done: 100% The following products have been installed: CPQ AXPVMS CDSA V2.4-320 Layered Product DEC AXPVMS DWMOTIF V1.7 Layered Product DEC AXPVMS DWMOTIF_SUPPORT V8.4 Layered Product DEC AXPVMS OPENVMS V8.4 Platform (product suite) DEC AXPVMS TCPIP V5.7-13 Layered Product DEC AXPVMS VMS V8.4 Operating System HP AXPVMS AVAIL_MAN_BASE V8.4 Layered Product HP AXPVMS HPBINARYCHECKER V1.1 Layered Product HP AXPVMS KERBEROS V3.1-152 Layered Product HP AXPVMS SSL V1.4-331 Layered Product HP AXPVMS TDC_RT V2.3-20 Layered Product DEC AXPVMS OPENVMS V8.4: OPENVMS and related products Platform HP AXPVMS KERBEROS V3.1-152 Configure and set up Kerberos If Kerberos will be run on this system, but has not been used previously, you need to perform the following steps. o Run the Kerberos configuration procedure: @SYS$STARTUP:KRB$CONFIGURE.COM o Add the following line to SYS$MANAGER:SYSTARTUP_VMS.COM: $ @SYS$STARTUP:KRB$STARTUP o Add the following line to SYS$MANAGER:SYLOGIN.COM: $ @SYS$MANAGER:KRB$SYMBOLS Press RETURN to continue: HP AXPVMS SSL V1.4-331: SSL for OpenVMS Alpha V1.4 (Based on OpenSSL 0.9.8h) There are post installation tasks that you must complete including the following items that are described in detail: - ensuring SSL startup and logical names creation files are executed - updating or copying the necessary startup, shutdown and configuration files from the installed template files - running the Installation Verification Program (IVP) Refer to the SSL release notes and the OpenVMS SSL documentation for more information about activities that should be performed once the installation has finished. SSL has created the following directory structure and files in PCSI$DESTINATION (which defaults to SYS$SYSDEVICE:[VMS$COMMON]): [SSL] Top-level SSL directory [SSL.ALPHA_EXE] Contains the images for the Alpha platform [SSL.COM] Directory to hold the various command procedures [SSL.DEMOCA] Directory structure to demo SSL's CA features [SSL.DEMOCA.CERTS] Directory to hold the certificates and keys [SSL.DEMOCA.CONF] Contains the configuration files [SSL.DEMOCA.CRL] Contains revoked certificates and CRLs [SSL.DEMOCA.PRIVATE] Directory for private keys and random data [SSL.DOC] OpenSSL.org provided documentation & information [SSL.INCLUDE] Contains the C Header (.H) files [SSL.TEST] Contains the files used during the IVP [SYS$STARTUP] Startup and shutdown templates and files [SYSHLP] Release notes [SYSHLP.EXAMPLES.SSL] SSL crypto and secure session examples [SYSLIB] SSL shareable image files [SYSTEST] SSL$IVP.COM test files after upgrading from previous SSL versions The SSL release notes provide information to verify the SSL startup, shutdown, and configuration template files. Template files provide the user with new features or changes, but do not overwrite existing command procedures and configuration files. A product upgrade or re-installation will not overwrite or create a new file version if the file has been modified. It will only create the template files. It is suggested that you review these files for any changes. For more information, refer to the SSL Release Notes and other SSL files using the system logical name definitions, or the subdirectory of the PCSI destination device and directory. including verifying startup command procedures and logical names. Once the installation is complete, verify that SSL$STARTUP.COM is located in SYS$MANAGER:SYSTARTUP_VMS.COM file. This will define the SSL$ executive mode logical names in the SYSTEM logical name table, and install the SSL shareable images in memory that reside in the [SYSLIB] directory. Also, add SSL$SHUTDOWN.COM to the SYS$MANAGER:SYSHUTDWN.COM file to remove the installed images and deassign the SSL$ logical name definitions. If you have customized the SSL command files for the site, it is suggested that you compare the SSL provided template files with your existing command procedures and take the appropriate action to update your files. A product upgrade or re-installation will not overwrite these files. By default SYS$STARTUP: logical can be used to locate the SSL provided startup files. System managers should modify site-specific requirements in SSL files: SSL$COM:SSL$SYSTARTUP.COM SSL$COM:SSL$SYSHUTDOWN.COM HP recommends that these site-specific SSL command procedures are utilized to tailor the SSL installation specific to the reqirements of the system or site. These files are located in the SSL$COM: directory. Refer to SYS$HELP:SSL014.RELEASE_NOTES for more information. The SSL product release notes contain up to date information regarding bug fixes, known problems, and general installation information. HP AXPVMS TDC_RT V2.3-20: The Performance Data Collector (base) for OpenVMS Users of this product require the following privileges: (CMKRNL,LOG_IO,WORLD,PHY_IO,SYSPRV,SYSLCK) Users of this product require the following process resource limits: WSQUO minimum 6000 A read-me file is available in SYS$COMMON:[TDC]TDC_README.TXT Release notes are available in SYS$COMMON:[TDC]TDC_RELEASE_NOTES.TXT or use PRODUCT EXTRACT RELEASE_NOTES ------------------------------------------------------------------------------- HP AXPVMS HPBINARYCHECKER V1.1: HP Binary Checker Release notes for HP Binary Checker available The release notes for the OpenVMS HP Binary Checker are available in the file SYS$HELP:HPBINARYCHECKER.RELEASE_NOTES. DEC AXPVMS TCPIP V5.7-13: HP TCP/IP Services for OpenVMS. Check the release notes for current status of the product. The release notes for TCPIP Services for OpenVMS are available in the file SYS$HELP:TCPIP*.RELEASE_NOTES. The installation is now complete. When the newly installed system is first booted, a special startup procedure will be run. This procedure will: o Configure the system for standalone or OpenVMS Cluster operation. o Run AUTOGEN to set system parameters. o Reboot the system with the newly set parameters. You may shut down now or continue with other operations. Process AXPVMS_INSTALL logged out at 23-DEC-2013 14:31:30.23 Press Return to continue... **************************************************************** You can install or upgrade the OpenVMS ALPHA operating system or you can install or upgrade layered products that are included on the OpenVMS ALPHA distribution media (CD/DVD). You can also execute DCL commands and procedures to perform "standalone" tasks, such as backing up the system disk. Please choose one of the following: 1) Upgrade, install or reconfigure OpenVMS ALPHA Version V8.4 2) Display layered products that this procedure can install 3) Install or upgrade layered products 4) Show installed products 5) Reconfigure installed products 6) Remove installed products 7) Find, Install or Undo patches; Show or Delete Recovery Data 8) Execute DCL commands and procedures 9) Shut down this system Enter CHOICE or ? for help: (1/2/3/4/5/6/7/8/9/?) 8 WARNING -- The normal OpenVMS startup procedure has not executed. Some commands and utilities will not work as documented. HP does not support PRODUCT INSTALL and other PRODUCT operations in this environment. Enter DCL commands -- Enter "LOGOUT" when done. When you enter "LOGOUT" a message will be displayed saying "Process SA_STARTUP_DCL logged out at <date> <time>", and you will be returned to the menu. $$$ show device d Device Device Error Volume Free Trans Mnt Name Status Count Label Blocks Count Cnt DKA0: Mounted alloc 0 ALPHASYS 16143120 1 1 DKA100: Mounted wrtlck 2 ALPHA084 137373 83 1 DVA0: Offline 0 DAD0: Online 0 $$$ show device dka0/full Disk DKA0:, device type DEC RZ1DF-CB, is online, allocated, deallocate on dismount, mounted, file-oriented device, shareable, available to cluster, error logging is enabled. Error count 0 Operations completed 113331 Owner process "SA_STARTUP" Owner UIC [1,4] Owner process ID 00000024 Dev Prot S:RWPL,O:RWPL,G:R,W Reference count 2 Default buffer size 512 Total blocks 17713920 Sectors per track 128 Total cylinders 659 Tracks per cylinder 210 Logical Volume Size 17713920 Expansion Size Limit 4261348350 Volume label "ALPHASYS" Relative volume number 0 Cluster size 16 Transaction count 1 Free blocks 16143120 Maximum files allowed 16711679 Extend quantity 5 Mount count 1 Mount status Process Cache name "_DKA100:XQPCACHE" Extent cache size 64 Max blocks in extent cache 1614312 File ID cache size 64 Blocks in extent cache 403152 Quota cache size 0 Maximum buffers in FCP cache 2935 Volume owner UIC [1,1] Vol Prot S:RWCD,O:RWCD,G:RWCD,W:RWCD Volume Status: ODS-5, subject to mount verification, file high-water marking, write-through XFC caching enabled, write-back XQP caching enabled, hard links enabled, special files enabled. $$$ set volume/nohigh dka0 $$$ show device dka0/full Disk DKA0:, device type DEC RZ1DF-CB, is online, allocated, deallocate on dismount, mounted, file-oriented device, shareable, available to cluster, error logging is enabled. Error count 0 Operations completed 113430 Owner process "SA_STARTUP" Owner UIC [1,4] Owner process ID 00000024 Dev Prot S:RWPL,O:RWPL,G:R,W Reference count 2 Default buffer size 512 Total blocks 17713920 Sectors per track 128 Total cylinders 659 Tracks per cylinder 210 Logical Volume Size 17713920 Expansion Size Limit 4261348350 Volume label "ALPHASYS" Relative volume number 0 Cluster size 16 Transaction count 1 Free blocks 16143120 Maximum files allowed 16711679 Extend quantity 5 Mount count 1 Mount status Process Cache name "_DKA100:XQPCACHE" Extent cache size 64 Max blocks in extent cache 1614312 File ID cache size 64 Blocks in extent cache 403152 Quota cache size 0 Maximum buffers in FCP cache 2935 Volume owner UIC [1,1] Vol Prot S:RWCD,O:RWCD,G:RWCD,W:RWCD Volume Status: ODS-5, subject to mount verification, write-through XFC caching enabled, write-back XQP caching enabled, hard links enabled, special files enabled. $$$ logout Process SA_STARTUP_DCL logged out at 23-DEC-2013 14:41:28.17 **************************************************************** You can install or upgrade the OpenVMS ALPHA operating system or you can install or upgrade layered products that are included on the OpenVMS ALPHA distribution media (CD/DVD). You can also execute DCL commands and procedures to perform "standalone" tasks, such as backing up the system disk. Please choose one of the following: 1) Upgrade, install or reconfigure OpenVMS ALPHA Version V8.4 2) Display layered products that this procedure can install 3) Install or upgrade layered products 4) Show installed products 5) Reconfigure installed products 6) Remove installed products 7) Find, Install or Undo patches; Show or Delete Recovery Data 8) Execute DCL commands and procedures 9) Shut down this system Enter CHOICE or ? for help: (1/2/3/4/5/6/7/8/9/?) 9 Shutting down the system SYSTEM SHUTDOWN COMPLETE halted CPU 0 halt code = 5 HALT instruction executed PC = ffffffff80089a84 >>>
为了创建一个最佳环境,我们需要关注系统参数、一些系统文件大小以及进程配额和设置。让我们从系统参数开始。
OpenVMS 系统参数非常类似于 UNIX 内核参数。系统参数在系统启动时生效,尽管有一些系统参数可以在运行系统中更改并立即生效。因此,除非你想要经常重启,否则你应该花些时间将系统参数设置为适合你的系统的正确值。系统参数的新值应该在 sys$system:modparams.dat 中进行编辑。此文件是节点特定的,应包含你希望在下一次系统启动时生效的所有更改。此文件由 autogen 过程读取。我们建议你对该文件中的所有更改进行注释。CHANNELCNT 应该设置为不小于 UAF FILLM 值的值。一个好的做法是将该值设置为以下值中的最大值:当前值、最大的 UAF FILLM 值以及 4096。请注意,SDK 进程将具有 UAF 配额 FILLM 或 SYSGEN 参数 CHANNELCNT 的较低值。
modparams.dat 的一部分
. . ! Created during installation of OpenVMS AXP V7.3-1 26-JAN-2003 16:05:09.28 MIN_GBLSECTIONS=1000 ! ALLOCLASS=1 SHADOWING=2 SHADOW_SYS_DISK=1 SHADOW_SYS_UNIT=0 SHADOW_MAX_COPY=4 ! CHANNELCNT=8192 ! MAXPROCESSCNT=128 ! MIN_CTLPAGES=1536 ! SWAPFILE=0 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ . .
在对 sys$system:modparams.dat 进行必要的更改后,调用 autogen 过程
$ @sys$update:autogen savparams setparams feedback
你可以按如下方式检查该过程的结果
$ set terminal/width=132 $ differences/parallel sys$system:setparams.dat ---------------------------------------------------------------------------------------- File SYS$SYSROOT:[SYSEXE]SETPARAMS.DAT;7 | File SYS$SYSROOT:[SYSEXE]SETPARAMS.DAT;6 -------------------- 11 ----------------------------------------- 11 ------------------- set SYSMWCNT 2102 set WSMAX 262144 set NPAGEDYN 4349952 set NPAGEVIR 19169280 set PAGEDYN 1794048 -------------------- 58 ----------------------------------------- 58 ------------------- set GBLPAGES 1118016 | set GBLPAGES 1105978 ---------------------------------------------------------------------------------------- Number of difference sections found: 2 Number of difference records found: 6 DIFFERENCES /IGNORE=()/PARALLEL SYS$SYSROOT:[SYSEXE]SETPARAMS.DAT;7 SYS$SYSROOT:[SYSEXE]SETPARAMS.DAT;6
如果你对生成的或更改后的系统参数满意,请在方便时重启系统
$ @sys$update:autogen reboot
PAGEFILESIZE 当你增加 PGFLQUO UAF 参数时,你也应该根据需要增加系统的页面文件大小,以适应新的 PGFLQUO 参数。Autogen(参见系统参数部分)也会计算交换文件、页面文件和系统转储文件的新的值,除非在 sys$system:modparams.dat 中指定指令不这样做,或者不指定 genfiles 阶段。你也可以使用 sys$update:swapfiles.com 过程手动设置页面文件大小
$ @sys$update:swapfiles To leave a file size at its current value type a carriage return in response to its size prompt. Current file sizes are: Directory SYS$SPECIFIC:[SYSEXE] PAGEFILE.SYS;2 1056800 SYSDUMP.DMP;4 208583 SWAPFILE.SYS;3 16400 Total of 4 files, 1682393 blocks. There are 10110396 available blocks on SYS$SYSDEVICE. Enter new size for paging file: Enter new size for system dump file: Enter new size for swapping file: $
GNV 代表 GNU is not VMS。它是一组移植到 OpenVMS 的开源命令和实用程序。GNV 工具包包含 bash shell 的移植版、gnu diff 实用程序、gnu 文件实用程序、gnu find 实用程序、gawk、grep、gzip、less、gnu make、man、sed、gnu shell 实用程序、gnu 文本实用程序、(un)zip、tpu 的 vi 包装器、vms(un)tar 以及 ar、cc、gcc 和 cpp 的包装器。此列表并不完整,随着 GNV 工具包的每个新版本,更多 UNIX 实用程序将变得可用。GNV 是一个开源项目,有一个网页 http://gnv.sourceforge.net 和几个邮件列表。如果你打算将工具添加到 GNV,请加入 gnv 开发者列表。
首先,从 OpenVMS 开源页面 http://www.openvms.compaq.com/opensource 或 GNV 项目页面 http://gnv.sourceforge.net 下载最新的工具包。打印安装说明,并使用它们来安装工具包。请仔细阅读,因为它包含一些重要信息。安装和使用 GNV 的要求是
- 必须安装在 ODS-5 磁盘上
- 必须使用 ODS-5 磁盘
要检查安装磁盘,请使用以下命令
$ SHOW DEVICE DSA0: /FULL Disk DSA0:, device type COMPAQ BB00911CA0, is online, mounted, file-oriented device, shareable, available to cluster, error logging is enabled, device supports bitmaps (no bitmaps active). Error count 0 Operations completed 11118695 Owner process "" Owner UIC [SYSTEM] Owner process ID 00000000 Dev Prot S:RWPL,O:RWPL,G:R,W Reference count 1204 Default buffer size 512 Total blocks 17773524 Sectors per track 168 Total cylinders 5290 Tracks per cylinder 20 Logical Volume Size 17773524 Expansion Size Limit 17793024 Volume label "ALPHASYS" Relative volume number 0 Cluster size 3 Transaction count 1249 Free blocks 10110408 Maximum files allowed 2221690 Extend quantity 5 Mount count 1 Mount status System Cache name "_DSA0:XQPCACHE" Extent cache size 64 Maximum blocks in extent cache 1011040 File ID cache size 64 Blocks in extent cache 237132 Quota cache size 0 Maximum buffers in FCP cache 630 Volume owner UIC [1,1] Vol Prot S:RWCD,O:RWCD,G:RWCD,W:RWCD Volume Status: ODS-5, subject to mount verification, protected subsystems enabled, write-through caching enabled, access dates enabled, hard links enabled. Disk $1$DKA600:, device type COMPAQ BB00911CA0, is online, member of shadow set DSA0:, error logging is enabled. Error count 0 Shadow member operation count 10118018 Allocation class 1
这并非所有信息,但最重要的部分在示例文本的底部。在“卷状态:”标题之后,它显示为 ODS-5。因此,此磁盘应该可以使用。还要注意,硬链接已启用。为了 UNIX 的可移植性,通常建议启用它。启用卷上的访问日期也是一个好主意,因为这是 POSIX 要求。我们还建议使用多成员影子集。首先,影子集更安全,也就是说,当磁盘出现故障时,您不会丢失所有数据,而且因为影子集名称中没有“$”符号。“$”符号在 UNIX shell 脚本中具有特殊含义。要在名称中使用“$”符号,您需要使用“\”符号对“$”符号进行转义。顺便说一句,您至少可以使用单成员影子集来防止这种情况。要使磁盘与 ODS-5 兼容,请使用以下命令
$ SET VOLUME <device>: /STRUCTURE=5
要启用硬链接和访问日期,请使用以下命令
$ SET VOLUME <device>: /VOLUME_CHARACTERISTICS=(HARDLINKS, ACCESS_DATES)
请注意,启用硬链接可能需要相当长的时间!您想了解有关影子和如何将磁盘装载为影子集的所有信息,请参阅 OpenVMS 文档:HP OpenVMS 卷影子。 “help” 命令也可以帮助您。
我要在这里注意的另一件事是高水位标记。这是另一个典型的 OpenVMS 安全功能,默认情况下处于启用状态。高水位标记保证用户无法读取用户未写入的数据,方法是在 EOF 标记之后销毁磁盘块中的所有数据。这样做会带来很小的性能损失。虽然这种损失现在只是微不足道的,但很多人会建议您将其关闭。您可以通过以下命令来实现
$ SET VOLUME <device>: /NOHIGHWATER_MARKING
禁用高水位标记对于安装 GNV 或 UNIX 可移植性不是必需的。
要进行当前 GNV 软件的默认安装,请按照文档中描述的步骤进行
- 登录到 SYSTEM 帐户(在登录提示符下,输入用户名 SYSTEM 和相应的密码),或具有等效权限的帐户。
- 在 DCL 提示符 ($) 下,转到您将从 Internet 下载的可执行文件保存的目录,并通过运行可执行文件来提取 PCSI 套件
$ RUN DEC-AXPVMS-GNV-V0106-002-1.PCSI_SFX_AXPEXE
- 输入以下命令,如所示
$ PRODUCT INSTALL GNV
- 当您输入 PRODUCT INSTALL 命令时,系统将响应类似于以下内容的显示:
The following product has been selected:DEC AXPVMS GNV V1.6 Layered Product Do you want to continue? [YES]
继续该过程,按 ENTER 键以使用默认答案(YES)。该过程可能需要几分钟,并且屏幕上可能会显示许多消息。对于系统显示的每个提示,请通过按 ENTER 键选择默认答案。
- 要使用 GNV,我们需要进行一些系统范围的设置。为此,我们启动以下 DCL 命令过程
$ @SYS$STARTUP:GNV$STARTUP.COM
要每次启动系统时都进行此设置,我们需要将上述命令添加到系统启动过程 SYS$MANAGER:SYSTARTUP_VMS.COM 中。因此,启动编辑器
$ EDIT SYS$MANAGER:SYSTARTUP_VMS.COM
转到文件末尾(DO bottom),并在 $ EXIT 之前输入以下行
$! $! GNV $! $ file := SYS$STARTUP:GNV$STARTUP.COM $ IF F$SEARCH(file) .NES. "" THEN @'file' $!
然后使用 <Crtl>Z 退出编辑器。注意:GNV$STARTUP.COM 过程使用 sys$common:[sys$startup]gnv_destination.com 过程来定义安装 GNV 的位置。如果您手动将 GNV 移动到其他位置,则需要修改此过程。
- 我们还需要进行一些用户设置。对于我们当前的登录会话,请执行以下操作
$ IF F$TRNLNM(“GNU”,"LNM$SYSTEM_TABLE") .NES. “” THEN @GNU:[LIB]GNV_SETUP.COM
如果我们希望此用户设置在您登录时发生,我们必须将上述行添加到我们的 SYS$LOGIN:LOGIN.COM 中。这适用于系统上想要使用 GNV 工具的每个用户。如果我们希望这适用于系统上的每个用户,我们可以将该行添加到系统范围的登录过程 SYS$MANAGER:SYLOGIN.COM ($ EDIT 'F$TRNLNM(“SYS$SYLOGIN”)'.COM) 中。只需记住在 EXIT 语句之前添加该行(登录脚本通常根据当前模式登录 (F$MODE) 来执行操作,请注意,如果您计划在命令行上使用 gnv 设置过程,则必须使其在交互模式下工作)。当然,不需要重新启动。
进程配额
[edit | edit source]管理进程配额是另一个 OpenVMS 优势。它允许系统管理系统资源并为系统上的所有进程维持可接受的性能。以下建议来自 2003 年 7 月出版的“优化 HP OpenVMS 上 Java 技术软件性能”一文。您可以在 HP OpenVMS 电子商务技术页面 http://www.openvms.compaq.com/ebusiness/technology.html. 上找到此文档。请注意,建议的配额是 UNIX 兼容性的最低要求。这些配额是为运行 JAVA 应用程序的用户帐户指定的,但通常建议为移植人员和运行移植的开源软件的用户提供相同的配额。OpenVMS 上的外观和感觉(性能)将更接近其他平台上的外观和感觉。
帐户配额
[edit | edit source]以用户 SYSTEM 的身份登录并转到 SYS$SYSTEM 目录
$ SET DEFAULT SYS$SYSTEM:
启动帐户管理程序
$ MCR AUTHORIZE
显示您的帐户设置(在下面的示例中,显示了 DEFAULT 帐户,这是一个用于帐户创建的特殊帐户)
UAF> sho default Username: DEFAULT Owner: Account: UIC: [200,200] ([DEFAULT]) CLI: DCL Tables: DCLTABLES Default: [USER] LGICMD: Flags: DisUser Primary days: Mon Tue Wed Thu Fri Secondary days: Sat Sun No access restrictions Expiration: (none) Pwdminimum: 6 Login Fails: 0 Pwdlifetime: 90 00:00 Pwdchange: (pre-expired) Last Login: (none) (interactive), (none) (non-interactive) Maxjobs: 0 Fillm: 100 Bytlm: 64000 Maxacctjobs: 0 Shrfillm: 0 Pbytlm: 0 Maxdetach: 0 BIOlm: 150 JTquota: 4096 Prclm: 8 DIOlm: 150 WSdef: 2000 Prio: 4 ASTlm: 250 WSquo: 4000 Queprio: 4 TQElm: 10 WSextent: 16384 CPU: (none) Enqlm: 2000 Pgflquo: 50000 Authorized Privileges: NETMBX TMPMBX Default Privileges: NETMBX TMPMBX UAF>
我们将更改以下最小帐户配额
名称 | 值 |
---|---|
Fillm | 4096 |
Wsdef | 2048 |
Wsquo | 4096 |
Wsextent | 16384 |
Wsmax | 16384 |
Pgflquo | 2097152* |
bytlm | 400000 |
biolm | 150 |
diolm | 150 |
tqelm | 100 |
* Indicates the appropriate number for Pgflquo (2 x heap-size). For example, 128 MB (2*128*1024*1024)/512 = 524288. When you increase the Pgflquo parameter, you should always increase the system's page file size to accommodate the new Pgflquo parameter, if required.
要更改参数的值,请执行以下操作
UAF> MODIFY <account> /<parameter>=<value>
您可以在同一个命令中更改多个参数,只需为每个需要更改的值添加另一个 /= 即可。要更改 DEFAULT 帐户的 WSDEF、WSQUO 和 WSEXTENT,您将输入以下命令
UAF> MODIFY DEFAULT /WSDEF=2048 /WSQUO=4096 /WSEXTENT=16384
您可以通过键入 EXIT 或
<Ctrl>Z
(您使用的终端仿真器可能将 EXIT 函数正确映射到 F10 功能键)退出 AUTHORIZE 实用程序。如前所述,DEFAULT 帐户用作创建新帐户的模板。如果您想提高系统上创建的所有新帐户的默认配额,修改 DEFAULT 帐户可能是个好主意。更改默认帐户不会更改现有帐户的任何设置。根据需要检查和修改现有帐户。
设置移植帐户
[edit | edit source]到目前为止,我们已经为移植尝试设置了正确的环境。让我们总结一下涉及的步骤。要创建移植帐户,必须遵循以下几个步骤
- 使用正确的系统参数设置 OpenVMS 移植系统
- 安装并启动 GNV、编译器和其他移植工具
- 设置默认 UAF 帐户
- 创建其他移植帐户和/或修改现有帐户。
- 为移植人员创建和修改主目录。
之后,要使用更改后的帐户设置,您必须注销并重新登录。
创建其他帐户
[edit | edit source]要创建其他移植帐户,您可以使用以下命令
$ mcr authorize
UAF> add 'user' /uic=['group','member'] /device='userdevice': /directory=['user'] /passw='secret'/flag=nodisuser/nopwdexp
UAF> exit
$ create/dir 'userdevice':['user'] /owner='user'
$ create/dir 'userdevice':['user'.temp]/owner='user'
$
$ create 'userdevice':['user']login.com
$! login.com for OpenOffice portingroup member
$
$ set term/dev=vt300
$ set term/line/insert
$! start gnv
$ @GNU:[lib]GNV_SETUP.COM
$!
$! setup tools
$ set proc/parse_style=extended
$ set process /case_lookup=(blind)
$ define/job decc$pipe_buffer_size 65000
$
$
$ scratch = f$trnlnm("sys$login") - "]" + ".temp]"
$ define/job sys$scratch 'scratch' $!
$ exit
<Ctrl>Z
$ create 'userdevice':['user'].bashrc
# .bashrc
#
PATH=$PATH:/usr/bin:/usr/local/bin
export PATH
export GNV_DISABLE_DCL_FALLBACK=1
<Ctrl>Z
$
可以在附录 3 中找到创建多个移植用户(包括示例运行)的过程
第三部分:使用移植环境和 GNV 工具的提示和技巧
[edit | edit source]使用 GNV
[edit | edit source]如果正确安装了 GNV,您应该能够直接从 DCL 中使用 UNIX 命令(如 ls)。但是,如果您安装了 LSE,ls 命令将启动 LSE 编辑器。当您在 DCL 提示符下键入 bash 时,bash shell 将启动,从那时起,一切都会像您使用 UNIX 机器一样工作。但是,有一些细微但重要的区别。您可能知道 UNIX 系统使用层次文件系统,而 OpenVMS 没有。但是,OpenVMS 下会模拟一些重要的层次结构。默认情况下,/ 目录指向 OpenVMSGNU:[000000]目录。/bin 目录指向 OpenVMSGNU:[bin]目录。等等。简而言之,/ 目录不是磁盘的根目录!您可以通过键入 /设备名称或隐藏的设备逻辑/目录来访问其他位置。例如DSA50:[kits.gnu]变为/dsa50/kits/gnu. 在 bash 中,您可以输入大多数 DCL 命令,除非存在名称冲突,例如 ls - LSE 问题。在这种情况下,您可以输入 bash dcl 命令并在其后面输入 DCL 命令。例如,DCL LS Readme 命令在 bash 中变为 dcl “ls Readme”,并在 LSE 中打开 Readme 文件。如果您不希望 bash “回退”到 DCL 以执行命令,请在 BASH 中执行以下操作
bash$ export GNV_DISABLE_DCL_FALLBACK=1
我们建议将此命令放在登录目录中的 .bashrc 过程中。请参阅“创建其他帐户”部分中的示例过程。顺便说一句,您始终可以使用 BASH dcl 命令来执行任何 DCL 命令!
提示
[edit | edit source]- 始终在 ODS-5 磁盘上工作
$ SET VOLUME <device>: /STRUCTURE=5
- 始终启用 ODS-5 扩展文件名解析
$ SET PROCESS /PARSE_STYLE=EXTENDED
(您可以将此行放在您的 LOGIN.COM 中)
- 由于 bash 当前处理管道的 方式,我们需要执行以下操作
$ DEFINE/JOB DECC$PIPE_BUFFER_SIZE=65000
(您可以将此行放在您的 LOGIN.COM 中)
- 处理 UNIX 符号链接的最佳方法是在您正在使用的磁盘上使用硬链接
$ SET VOLUME <device>: /VOLUME_CHARACTERISTICS=(HARDLINKS)
请注意,这可能需要相当长的时间。
- 可能需要支持 POSIX 样式的访问日期
$ SET VOLUME <device>: /VOLUME_CHARACTERISTICS=(ACCESS_DATES)
- 运行 configure 脚本时,最好禁用 DCL 回退
bash$ export GNV_DISABLE_DCL_FALLBACK=1
(您可以将其放在您的 .bashrc 中)
如果您想了解更多关于使用 UNIX 或 bash 的知识,Internet 上有很多信息。如果您更喜欢书籍,请查看 O'Reilly 的作品 http://www.oreilly.com/。我建议您花一些时间学习 UNIX 环境,然后再继续。
大多数人可能知道开源意味着软件通常以源代码形式分发。要在您的系统上使用该软件,您需要自己构建它。为了使构建更加容易,GNU 社区开发了 GNU 构建工具。这些工具不仅使您的生活更轻松,而且还使开源开发人员的生活更轻松。现在让我们看一下如何在 UNIX 或 Linux 机器上构建一些开源软件。
- 从互联网下载源代码发行版。大多数情况下,这将是一个 .tar.gz 文件,但您也会发现 .tgz、.tar.Z .tar.bzip2 或 .zip 文件。
- 创建一个目录
% mkdir <name>
- 转到您刚刚创建的目录
% cd <name>
- 解压缩文件(某些选项可能尚未在 OpenVMS 上运行)
- .tar.gz
- 或
% zcat <filename> | tar xvf
- 或
% tar xvzf <filename>
- 以及
% gunzip <filename>
% tar xvf <filename - .gz>
- .tgz查看.tar.gz
- .tar.Z查看.tar.gz或
- 以及
% uncompress <filename>
% tar xvf <filename - .Z>
- .tar.bz2
- 或
% bz2cat <filename> | tar xvf -
- 以及
% bunzip2 <filename>
% tar xvf <filename - .bz2>
- .zip
% unzip <filename>
- .tar.gz
- 查找 configure 脚本。该脚本可能位于您所在的目录中,但也可能位于解压缩发行版文件创建的目录中。例如,如果您从互联网下载的文件名为tar-1.2.4.tar.gz您可能现在拥有一个名为tar-1.2.4的目录,位于您的当前目录中。进入该目录以查找 configure 文件。如果找不到,请查找具有大写名称的文件,例如 README 或 INSTALL。
- 找到 configure 脚本后,运行它
% ./configure
- 如果一切顺利,您可以构建可执行文件
% make
- 并安装包(通常您必须先成为 root 用户才能安装任何东西)
% make install
就是这样。
好吧,如果一切按预期工作,那就这样。即使在 UNIX 机器上,事情也可能出错。要分析问题所在,请执行以下操作
- 阅读具有大写名称的文件,了解您是否满足先决条件,了解您是否需要为您的 UNIX(OpenVMS)版本执行一些特殊操作(毕竟 UNIX(OpenVMS)≠ UNIX)
- 尝试这可能会让您了解您可能需要使用./configure命令指定的额外参数。
./configure --help
- 检查由 configure 脚本生成的文件config.cache、config.log、config.status、config.h 和 Makefile
如果这没有帮助,您可能需要亲自动手。
我之前不是说过 GNU 构建系统会让您的生活更轻松吗?确实是这样的。但我先解释一下在最后一个示例中可能出现的问题。configure 脚本和 Makefile.in 文件可能是在您的 UNIX(OpenVMS!)系统或系统版本存在之前创建的,因此它不知道您的系统特定情况。考虑一下 OpenVMS,可能那里没有一个 configure 脚本和 make 文件了解我们 OpenVMS 上的 GNV 环境。但让我们回到眼前的问题。为了让 configure 脚本和 Makefile.in 文件了解我们系统的特定情况,我们需要在构建示例中添加一些步骤。以下步骤位于步骤 5 和 6 之间
a.
% aclocal
b.
% autoconf
c.
% automake -a
为了使此操作正常工作,您的系统应该具有这些软件包以及GNU make、m4、texinfo以及GNU tar已安装。对于大多数开源 UNIX 克隆(如 Linux、FreeBSD、NetBSD 和 MacOS X)来说,这是真的。但对于许多商业 UNIX 系统来说,情况并非如此。至于 OpenVMS,只有GNU make目前可用。对于大多数商业 UNIX 系统来说,最好的办法是检查您的 UNIX 系统制造商是否发布了缺少的工具供下载。如果没有,请从 GNU 网站查看最新版本的缺少的工具。如果什么都没用,您将与我们一样,面临我们 OpenVMS 上的 GNV 环境问题。此时我认为我们应该清楚地认识到,我们尽快需要所有这些工具。如果您想详细了解 gnu 构建系统,请查看以下网站GNU Autoconf、Automake以及Libtool: http://sources.redhat.com/autobook/
由于 GNV 不断更新,我们建议您从 CVS 存储库获取最新的 GNV 源代码,并自行构建 GNV 工具包。请参阅 http://www.4ovms.dyndns.org 上的构建说明。不要忘记提高管道缓冲区大小。
bash$ dcl “define/job DECC\$PIPE_BUFFER_SIZE 65000”
另外,不要忘记禁用 DCL 回退。
bash$ export GNV_DISABLE_DCL_FALLBACK=1
始终检查 configure 脚本中的 conftest.dir。将此文件名更改为类似 conftest.ddd 的名称
bash$ mv configure configure.org bash$ sed 's/conftest\.dir/conftest\.ddd/g' configure.org > configure
使用 configure 选项--build=. 对于 OpenVMS Alpha,configure 选项为--build=alpha-hp-vms. 由于 GNV bash 版本有些过时,因此某些 shell 脚本无法正常工作。其中一个脚本称为 depcomp。该脚本用于在编译期间确定依赖关系。要消除此依赖关系检查,您可以添加--disable-dependency-tracking选项到 configure 命令。
C 运行时库或 CRTL 是 OpenVMS 共享库,其中包含大多数“标准”C 函数。我加引号是因为 a) 标准有很多,我没有说哪一个。b) 每个标准都是不断变化的。自 DII COE 计划以来,HP 旨在使 CRTL 符合最新的 X-Open 标准。由于 OpenVMS 和 UNIX 之间的架构差异,这是一项艰巨的任务,特别是如果您还想维护向后兼容性。OpenVMS CRTL 开发人员决定随着每个新的 OpenVMS 和 CRTL 版本逐步添加这些新功能。HP 还决定这些新功能将在 Alpha 和新的 Itanium 架构上提供。某些功能也可能在 VAX 上提供,但由于 VAX 上没有 ODS-5 扩展文件名支持,因此对开源移植至关重要的功能可能永远不会在 VAX 上提供。新的 CRTL 功能可以分为两组
- 具有新的和更标准功能的现有函数
- 完全新的函数,使 CRTL 更符合标准(X-Open v.6)。
对于第一组中的函数,经典行为是标准的,要使用新功能,您需要设置功能开关(稍后将详细介绍)。第二组中的函数可以进一步细分为两组
- 在经典 OpenVMS 环境和新的类 UNIX 环境中应该具有相同功能的函数
- 在两种环境中功能不应相同的函数
对于最后一组,请考虑使用或返回路径的函数。对于这组函数,这些函数的行为由前面提到的功能开关决定。
我不会解释有哪些功能开关以及它们的功能,因为您可以在 CRTL 帮助、CRTL 发行说明和 CRTL 参考手册中找到所有相关信息。但我将向您展示 OpenVMS 8.4 中一些有趣的新功能开关。我还将向您展示如何更改它们的值。因此,让我们先看看最有趣的新功能开关,特别是当您刚开始移植时。它是 DECC$UNIX_LEVEL。以下文本摘自 CRTL 参考手册(CRTL 1-36)
使用 DECC$UNIX_LEVEL 逻辑名,您可以一次管理多个 C RTL 功能逻辑名。通过为 DECC$UNIX_LEVEL 设置从 1 到 100 的值,您可以确定一组功能逻辑名的默认值。您设置的值具有累加效果:值越高,受影响的组越多。例如,设置值为 20 将启用与 DECC$UNIX_LEVEL 为 20、10 和 1 关联的所有功能逻辑。
影响类 UNIX 行为的主要逻辑名按以下方式分组
1 General corrections 10 Enhancements 20 UNIX style filenames 30 UNIX style file attributes 90 Full UNIX behavior - No concessions to OpenVMS
级别 30 适用于类 UNIX 程序,例如 BASH 和 GNV。
DECC$UNIX_LEVEL 值和受影响的功能逻辑名组如下
General Corrections (DECC$UNIX_LEVEL 1) DECC$FIXED_LENGTH_SEEK_TO_EOF 1 DECC$POSIX_SEEK_STREAM_FILE 1 DECC$SELECT_IGNORES_INVALID_FD 1 DECC$STRTOL_ERANGE 1 DECC$VALIDATE_SIGNAL_IN_KILL 1 General Enhancements (DECC$UNIX_LEVEL 10) DECC$ARGV_PARSE_STYLE 1 DECC$EFS_CASE_PRESERVE 1 DECC$STDIO_CTX_EOL 1 DECC$PIPE_BUFFER_SIZE 4096 DECC$USE_RAB64 1 UNIX style filenames (DECC$UNIX_LEVEL 20) DECC$DISABLE_TO_VMS_LOGNAME_TRANSLATION 1 DECC$EFS_CHARSET 1 DECC$FILENAME_UNIX_NO_VERSION 1 DECC$FILENAME_UNIX_REPORT 1 DECC$READDIR_DROPDOTNOTYPE 1 DECC$RENAME_NO_INHERIT 1 DECC$GLOB_UNIX_STYLE UNIX like file attributes (DECC$UNIX_LEVEL 30) DECC$EFS_FILE_TIMESTAMPS 1 DECC$EXEC_FILEATTR_INHERITANCE 1 DECC$FILE_OWNER_UNIX 1 DECC$FILE_PERMISSION_UNIX 1 DECC$FILE_SHARING 1 UNIX compliant behavior (DECC$UNIX_LEVEL 90) DECC$FILENAME_UNIX_ONLY 1 DECC$POSIX_STYLE_UID 1 DECC$USE_JPI$_CREATOR 1 DECC$DETACHED_CHILD_PROCESS 1
注意
- 为单个功能逻辑定义逻辑名将取代 DECC$UNIX_LEVEL 为该功能建立的默认值。
- 将来修订的 C RTL 可能会在给定的 DECC$UNIX_LEVEL 中添加新的功能逻辑。对于指定该 UNIX 级别值的应用程序,效果是默认启用这些功能。
请注意,引文中没有列出所有可用的功能开关。未列出的开关不属于任何 UNIX 级别!请阅读 CRTL 帮助、发行说明和文档,以了解支持的功能开关的完整列表及其预期用途。您可能已经注意到设置这些功能开关的一种方法。您可以使用相同名称和适当值定义逻辑名。由于功能开关在运行时更改行为,因此您不必在使用开关时重新编译。但当您完成确定开关的适当值后,您可能希望从程序内部设置它们的值。当然,您可以通过从程序内部设置逻辑名来实现这一点,但还有更好的方法。CRTL 函数decc$feature_get_index、decc$feature_get_name、decc$feature_get_value、以及decc$feature_set_value专门为执行此任务而设计。
下面是一个小型示例程序
static int set_feature_default(char *name, int value)
{
int index = decc$feature_get_index(name);
if (index == -1 || decc$feature_set_value(index, 0, value) == -1)
{
perror(name);
return -1;
}
return 0;
}
static void my_init( void)
{
set_feature_default("DECC$POSIX_SEEK_STREAM_FILE" , TRUE);
set_feature_default("DECC$ARGV_CASE_PARSE_STYLE" , TRUE);
set_feature_default("DECC$EFS_CASE_PRESERVE" , TRUE);
set_feature_default("DECC$FILE_SHARING" , TRUE);
}
将这样的代码添加到程序中并不困难,但有一个问题。像DECC$ARGV_PARSE_STYLE这样的功能开关需要在解析参数之前设置,这发生在图像激活和调用程序主函数之间的某个地方。程序启动前发生的事情的流程在《OpenVMS 编程概念手册》中有所说明。在第 18 章中,您将找到一个完整的流程,说明发生了什么以及何时发生(见下图)。
'插入图片'
这里需要注意的是LIB$INITIALIZE函数。我们要做的是创建一个源文件,该文件定义一个LIB$INITIALIZE指向将功能开关设置为其适当值的函数的函数。现在让我们回到上面我使用的示例。下面给出了该示例的增强版本。
#pragma extern_model save
#pragma extern_model strict_refdef "LIB$INITIALIZE" nowrt, long
#if __INITIAL_POINTER_SIZE
# pragma __pointer_size __save
# pragma __pointer_size 32
#else
# pragma __required_pointer_size __save
# pragma __required_pointer_size 32
#endif
/* Set our contribution to the LIB$INITIALIZE array */
void (* const iniarray[])() = {my_init, } ;
#if __INITIAL_POINTER_SIZE
# pragma __pointer_size __restore
#else
# pragma __required_pointer_size __restore
#endif
#pragma extern_model restore
/*
** Force a reference to LIB$INITIALIZE to ensure it
** exists in the image.
*/
int LIB$INITIALIZE();
globaldef int (*lib_init_ref)() = LIB$INITIALIZE;
将示例的两部分放在一个源文件中。与您的程序一起编译和链接以使其工作。它的优点是您不必更改要移植的程序来设置功能开关!如果你想看更完整的例子,请查看GNU:[src.GNV.CRTLSUP.SRC]]VMS_CRTL_INIT.C文件。此文件由一些 GNV 工具使用。
一个好的起点是 UNIX 级别 30,但不要使用 DECC$UNIX_LEVEL 功能开关。设置构成 UNIX 级别 30 的各个功能开关,并将 DECC$PIPE_BUFFER_SIZE 增加到至少 8192。不使用 DECC$UNIX_LEVEL 功能开关的原因是与 OpenVMS 7.3-1 兼容,以及一个简单的事实,即您可能不需要组成级别 30 的所有功能开关,或者您想使用不同的值(请参见 DECC$PIPE_BUFFER_SIZE 的建议)。
以下列表是使用标准 DECC C 编译器版本 6.5 在 OpenVMS 7.3-2 Alpha 上的预定义宏列表。
These macros are in effect at the start of the compilation. ----- ------ --- -- ------ -- --- ----- -- --- ------------ __G_FLOAT=1 __DECC=1 vms=1 VMS=1 __32BITS=1 __PRAGMA_ENVIRONMENT=1 __CRTL_VER=70320000 __vms_version="V7.3-2 " CC$gfloat=1 __X_FLOAT=1 vms_version="V7.3-2 " __DATE__="Feb 7 2004" __STDC_VERSION__=199901L __DECC_MODE_RELAXED=1 __DECC_VER=60590001 __VMS=1 __ALPHA=1 VMS_VERSION="V7.3-2 " __IEEE_FLOAT=0 __VMS_VERSION="V7.3-2 " __STDC_HOSTED__=1 __TIME__="13:54:21" __Alpha_AXP=1 __VMS_VER=70320022 __BIASED_FLT_ROUNDS=2 __INITIAL_POINTER_SIZE=0 __STDC__=1 __LANGUAGE_C__=1 __vms=1 __alpha=1 __D_FLOAT=0
以下宏对于移植很重要
宏 | 备注 |
---|---|
VMS, vms | 是我们可用于一般 OpenVMS 特定内容的宏 |
ALPHA, Alpha_AXP, __alpha | 可用于 Alpha 特定内容 |
VAXC, VAX11C, vaxc, vax11c | 可用于 VAX 特定内容 |
IA64, ia64 | 可用于 Itanium (ia64) 特定内容 |
__VMS_VER | 可用于 OpenVMS 版本特定内容(请使用 __CRTL_VER 代替 |
__DECC_VER | 可用于编译器版本特定内容 |
__CRTL_VER | 可用于 CRTL 版本特定内容 |
请注意,我只包含宏的首选格式,大多数宏也存在没有前面两个破折号的情况。
还有许多其他宏可以更改一个或多个 CRTL 函数的行为。
宏 | 备注 |
---|---|
_XOPEN_SOURCE_EXTENDED | 使 XPG4 扩展功能可见,包括以前未被 X/Open 采用的传统基于 UNIX 的接口。选定标准:XPG4 V2。其他隐含标准:XPG4、ISO POSIX-2、ISO POSIX-1、ANSI C |
_XOPEN_SOURCE | 使 XPG4 标准符号可见,并在未定义 _POSIX_C_SOURCE 或其值大于 2 的情况下将其设置为 2。选定标准:XPG4。其他隐含标准:XPG4、ISO POSIX-2、ISO POSIX-1、ANSI C |
_POSIX_C_SOURCE==199506 | 由 ANSI C 定义的头文件使 IEEE 1003.1c-1995 要求的那些符号可见。选定标准:IEEE 1003.1c-1995。其他隐含标准:ISO POSIX-2、ISO POSIX-1、ANSI C |
_POSIX_C_SOURCE==2 | 由 ANSI C 定义的头文件使 ISO POSIX-2 要求的那些符号可见,以及 ISO POSIX-1 要求的那些符号可见。选定标准:ISO POSIX-2。其他隐含标准:ISO POSIX-1、ANSI C |
_POSIX_C_SOURCE==1 | 由 ANSI C 定义的头文件使 ISO POSIX-1 要求的那些符号可见。选定标准:ISO POSIX-1。其他隐含标准:ANSI C |
STDC_VERSION__==199409 | 使 ISO C Amendment 1 符号可见。选定标准:ISO C Amendment 1。其他隐含标准:ANSI C |
_ANSI_C_SOURCE | 使 ANSI C 标准符号可见。选定标准:ANSI C。其他隐含标准:无。 |
_POSIX_EXIT | 启用与 ISO POSIX-1 兼容的退出函数。 |
_BSD44_CURSES | 此宏从 4.4BSD Berkeley 软件发行版中选择 Curses 包。 |
_VMS_CURSES | 此宏选择基于 VAX C 编译器的 Curses 包。这是默认的 Curses 包。 |
_SOCKADDR_LEN | 此宏用于选择与 4.4BSD 兼容和与 XPG4 V2 兼容的套接字接口。这些接口需要底层 TCP/IP 软件中的支持。请联系您的 TCP/IP 供应商以询问您运行的 TCP/IP 软件版本是否支持 4.4BSD 套接字。(据我所知,HP TCP/IP 支持此功能,Prosess Softwares Multinet 和 TCPware 不支持) |
_LARGEFILE | C RTL 提供了编译应用程序以使用 2 GB(千兆字节)或更大的文件大小和偏移量。这是通过允许 64 位整数的文件偏移量来实现的。 |
__USE_LONG_GID_T | 编译应用程序以支持 32 位 UID/GID。 |
_DECC_SHORT_GID_T | 编译应用程序以支持 16 位 UID/GID |
有关更多信息,请阅读 CRTL 帮助和/或 CRTL 参考手册。
请不要使用 VMS、vms 或 __vms 这样的通用宏。请改用 CRTL_VER。C 运行时库在每个新版本的 CRTL 中都变得更加“标准”。在 CRTL 的新版本中,修复可能不再是必需的。在某些情况下,程序功能已被#ifndef VMS以不再必要的方式削弱。使用 CRTL_VER 将使我们能够更精确地控制需要为 CRTL 的许多不同版本进行哪些更改。当宏 CRTL_VER 不存在时,请使用 __VMS_VER 的值来定义它。
# if defined(__VMS_VER) && !defined(__CRTL_VER)
# define __CRTL_VER __VMS_VER
# endif
在 DCL 中编译开源程序时,请将/DEFINE=_POSIX_EXIT添加到您的 CC 命令中!这是在 bash 下编译时的默认值。
GNV 套件不附带 gcc,而是附带了一个包装器,该包装器使用 HP C 和 C++ 编译器来完成其编译工作,并使用标准 OpenVMS 链接器来代替 ld。顺便说一下,还有一个 ar 包装器使用标准 OpenVMS 库管理员。GCC 包装器做得相当好,但它并不完美。还要注意 HP 编译器非常严格。我的意思是,当某些东西可能不完全正确时,它们会立即发出抱怨。因此,在编译开源软件时,我们会看到很多警告。您可以使用 -h 或 -help 选项查看 gcc 包装器支持的所有选项。我想注意一下 GCC 包装器行为的以下几点,包装器默认将 /DEFINE=_POSIX_EXIT 添加到编译语句中。如果您想在 gcc 命令行中添加一个 HP CC、CPP 或 LINK 选项,而该选项似乎没有实现,则 -Wc 和 -Wl gcc 选项可能很有用。您有时需要的一个 gcc 选项是 -names_as_is_short。这将使编译器区分大小写,并允许函数名包含超过 32 个字符。您可能会在配置脚本中使用 gcc -g 选项遇到麻烦。许多配置脚本默认使用此选项。此选项用于编译和/或链接包含在程序中的调试信息。问题是,在 UNIX 系统上,使用调试信息编译和链接的程序在执行时不会启动调试器。这与我们 OpenVMS 人员习惯使用的完全不同。如果您在运行配置脚本时看到调试器提示弹出,请从配置脚本中删除 -g 选项,或使用 CFLAGS=”” 启动配置。
fork 问题在问题列表中排名很高,因为它在开源程序中非常常见,而我们在 OpenVMS 上没有此函数。我们在 OpenVMS 上确实有 vfork(),但 OpenVMS 上的 vfork() 的实现也不符合标准。但是,我们可以使用它来解决开源软件中的大多数 fork() 调用。在我们深入研究解决方法之前,让我们首先确定 fork() 应该做什么。fork() 函数是 UNIX 标准的创建新进程的方式。新(子)进程是调用(父)进程的精确副本,除了
- 子进程具有唯一的进程 ID
- 子进程 ID 与任何活动进程组 ID 不匹配
- 子进程具有不同的父进程 ID
- 子进程拥有其父进程打开的文件描述符的副本
- 子进程拥有其父进程打开的目录流的副本
- 子进程可能拥有父进程消息目录描述符的副本。
- 子进程的 tms_utime、tms_stime、tms_cutime 和 tms_cstime 值被设置为 0。
- 到闹钟信号的时间被重置为 0。
- 所有 semadj 值都被清除。
- 父进程设置的文件锁不会被子进程继承。
- 子进程的待处理信号集被初始化为空集。
- 子进程中的间隔计时器被重置。
在 fork() 之后,父进程和子进程都可以在任何一个终止之前独立执行。fork() 函数向子进程返回 0,向父进程返回子进程的进程 ID。否则,父进程将返回 -1,不会创建子进程,并且 errno 被设置为指示错误。在大多数系统上,vfork() 函数与 fork() 函数相同。在某些系统上,使用 vfork() 创建的子进程可以与父进程共享数据或代码段。在 OpenVMS 上,vfork() 函数只提供后续调用 exec 函数所需的设置。vfork 调用不会创建子进程!当调用 vfork 时
- 它将返回地址(vfork 调用的地址)保存起来,以便稍后用作对 exec 函数调用的返回地址。
- 它保存当前上下文。
- 它在第一次被调用时(在调用 exec 函数之前)返回整数 0。在执行 exec 调用后,exec 函数将控制权返回给父进程,在 vfork() 调用点,并将子进程的进程 ID 作为返回值返回。
你们中的一些人可能已经看到了 fork() 和 OpenVMS vfork() 之间的一些相似之处。如果 fork() 紧随其后的是一个 exec 调用,我们可以使用 OpenVMS vfork() 并进行一些操作。如果 fork() 单独存在,我们仍然无法解决。
示例 1(来自 GNU tar 1.15.1 lib/rmdir.c)
#ifndef __VMS
cpid = fork ();
#else /* VMS */
cpid = vfork ();
#endif /* VMS */
switch (cpid)
{
case -1: /* cannot fork */
return -1; /* errno already set */
case 0: /* child process */
execl ("/bin/rmdir", "rmdir", dpath, (char *) 0);
_exit (1);
default: /* parent process */
.
.
.
return 0;
}
示例 2(来自 GNU tar 1.15.1 lib/rtapelib.c)
#ifndef __VMS
status = fork ();
#else /* VMS */
status = vfork ();
#endif /* VMS */
if (status == -1)
{
int e = errno;
free (file_name_copy);
errno = e;
return -1;
}
if (status == 0)
{
/* Child. */
#ifdef __VMS
save_stdin = dup (STDIN_FILENO);
save_stdout = dup (STDOUT_FILENO);
#endif /* VMS */
close (STDIN_FILENO);
dup (to_remote[remote_pipe_number][PREAD]);
close (to_remote[remote_pipe_number][PREAD]);
#ifndef __VMS
close (to_remote[remote_pipe_number][PWRITE]);
#endif /* VMS */
close (STDOUT_FILENO);
dup (from_remote[remote_pipe_number][PWRITE]);
#ifndef __VMS
close (from_remote[remote_pipe_number][PREAD]);
#endif /* VMS */
close (from_remote[remote_pipe_number][PWRITE]);
sys_reset_uid_gid ();
if (remote_user)
execl (remote_shell, remote_shell_basename, remote_host,
"-l", remote_user, rmt_command, (char *) 0);
else
execl (remote_shell, remote_shell_basename, remote_host,
rmt_command, (char *) 0);
/* Bad problems if we get here. */
/* In a previous version, _exit was used here instead of exit. */
error (EXIT_ON_EXEC_ERROR, errno, _("Cannot execute remote shell"));
}
/* Parent. */
#ifdef __VMS
{
int status;
status = dup2 (save_stdin, STDIN_FILENO);
if (status < 0)
{
error (EXIT_ON_EXEC_ERROR, errno, _("Error restoring stdin"));
}
status = dup2 (save_stdout, STDOUT_FILENO);
if (status < 0)
{
error (EXIT_ON_EXEC_ERROR, errno, _("Error restoring stdout"));
}
}
#endif /* VMS */
close (from_remote[remote_pipe_number][PWRITE]);
close (to_remote[remote_pipe_number][PREAD]);
第二个示例可能看起来有点吓人,但请记住,在 OpenVMS 上,“子进程”代码实际上是由父进程执行的。 “子进程”是由execl()函数调用创建,而不是由vfork()函数调用创建。
注意 1:默认情况下,OpenVMS exec 调用使用LIB$SPAWN创建子进程。在大多数情况下,这是你想要的,但是,在某些情况下,你可能希望子进程成为一个分离的进程。要实现这一点,你可以启用DECC$DETACHED_CHILD_PROCESS功能开关。这有一些影响。请参见 CRTL 参考指南第 5 章。
注意 2:在 OpenVMS 上,execlp()以及execvp()函数搜索VAXC$PATH而不是PATH环境变量来获取要执行的文件的位置。这可能很麻烦。
RMS
[edit | edit source]RMS 代表记录管理系统。OpenVMS 文件系统构建在 RMS 之上,OpenVMS 系统上的所有文件都是 RMS 文件。RMS 文件是面向记录的,可以包含用于键值访问的键(RMS 索引文件)。RMS 中有许多不同类型的记录和无数的记录属性。与大多数面向记录的系统一样,文件和记录的锁定是需要特别注意的。UNIX 没有这些特性,在 UNIX 系统上,两个程序可以在文件的相同位置打开相同的文件进行写入。在 OpenVMS 上,这是不可能的,当遇到这种情况时,你需要处理这个问题。另一个问题是流-lf 文件和可变长度记录之间的区别。两种文件都包含可变长度的记录,但从 UNIX 程序的角度来看,流-lf 文件最类似于 UNIX 文件。但是,很少有 OpenVMS 程序知道如何处理流-lf 文件。OpenVMS 程序通常处理具有可变长度记录类型的文件。
已知移植问题
[edit | edit source]许多 CRTL 函数仍然不能完全像其 UNIX 对应物那样工作,并且一些函数仍然缺失。举几个例子:vfork 函数的行为与它的 UNIX 对应物不完全相同(请阅读 CRTL 参考手册中的 vfork 部分)。如果一个程序使用 vfork,它可能会在配置期间检查 vfork 的存在,这也是配置会挂起的情况。解决挂起问题的方法很简单。使用不同的会话登录,并查找之前会话的子进程。杀死它,配置脚本将继续。虽然我们已经谈论到这一点,但不幸的是,OpenVMS 还没有 fork 函数,但是有很多已知的变通方法可用,只要我们知道在哪里。这不是关于如何将开源代码移植到 OpenVMS 的权威指南。事物正在迅速变化。我们应该继续用 OpenVMS 和 GNV 套件的当前状态更新此文档。我们在 comp.os.vms 上找到了一份已知移植问题列表,从 UNIX 移植到 OpenVMS 时会出现兼容性问题。该列表是我们维护的列表的基础。该列表可以在附录 2 中找到:已知问题列表。