跳到内容

将开源软件移植到 OpenVMS

来自 Wikibooks,开放世界中的开放书籍

将开源(UNIX)软件移植到 OpenVMS

[编辑 | 编辑源代码]

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 上的移植环境进行调整。

我们感谢所有以任何形式为本指南做出贡献的人。许多人贡献了材料、想法或内部信息。如果没有他们的贡献,本指南将不会像现在这样有用。

第一部分:开源、Unix 和 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、Linux、开放 Unix 标准

[编辑 | 编辑源代码]

由于大多数开源软件源于某种形式的 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 是惠普拥有和维护的专有操作系统。有一些项目旨在创建 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 上的开源

[编辑 | 编辑源代码]

这里的问题不是我们能否在 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

OpenVMS-UNIX 差异

[编辑 | 编辑源代码]

比较 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 移植系统

[编辑 | 编辑源代码]

移植过程的第一步是让一个合适的 OpenVMS 系统运行起来。虽然 OpenVMS 在三个硬件平台上可用,但只有两个平台装备齐全,可以进行严肃的开源移植:Alpha 和 IA64。VAX 平台缺少独立配置中某些重要功能的支持。例如,VAX OpenVMS 缺少对原生 ODS5 和 GNV 的支持。由于大多数人只能访问 Alpha 系统,并且 IA64 OpenVMS 在很大程度上在功能上等同于 Alpha OpenVMS,因此所有示例均基于 Alpha OpenVMS。在 www.oooovms.dyndns.org 网站的参考部分,提供了构建 OpenVMS 系统所涉及的步骤示例。关于 升级固件OpenVMS 的初始安装首次启动OpenVMS 的初始配置 的文档。

在模拟器上安装 OpenVMS 8.4

[编辑 | 编辑源代码]
   +-------------+    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

[编辑 | 编辑源代码]

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>
        
  • 查找 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 --help
    
    这可能会让您了解您可能需要使用./configure命令指定的额外参数。
  • 检查由 configure 脚本生成的文件config.cache、config.log、config.status、config.h 和 Makefile

如果这没有帮助,您可能需要亲自动手。

GNU 构建系统

[编辑 | 编辑源代码]

我之前不是说过 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/

OpenVMS 推荐

[编辑 | 编辑源代码]

由于 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 命令。

OpenVMS C 运行时库

[编辑 | 编辑源代码]

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 功能可以分为两组

  1. 具有新的和更标准功能的现有函数
  2. 完全新的函数,使 CRTL 更符合标准(X-Open v.6)。

对于第一组中的函数,经典行为是标准的,要使用新功能,您需要设置功能开关(稍后将详细介绍)。第二组中的函数可以进一步细分为两组

  1. 在经典 OpenVMS 环境和新的类 UNIX 环境中应该具有相同功能的函数
  2. 在两种环境中功能不应相同的函数

对于最后一组,请考虑使用或返回路径的函数。对于这组函数,这些函数的行为由前面提到的功能开关决定。

那么这些功能开关是什么,我该如何设置它们呢?

[编辑 | 编辑源代码]

我不会解释有哪些功能开关以及它们的功能,因为您可以在 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 下编译时的默认值。

GCC 包装器

[编辑 | 编辑源代码]

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 代表记录管理系统。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 中找到:已知问题列表。

主题:开源

华夏公益教科书