OpenVMS Notes: "Alpha to Itanium" Porting Diaries

edit: 2020-02-04
Executive Summary
  • Booting has changed. Platforms like PDP, VAX, and Alpha presented a firmware-based BIOS where you could boot the system with commands like "b dua0" to boot from disk dua0
  • All Itanium platforms replace the firmware-based BIOS with a software-based EFI (now UEFI) executed by a management processor (some sort of x86 thingy)
  • The rx2600 series machines allow you to enter the ORCA "RAID management utility" upon boot (usually hitting either the F5 of F8 key when prompted). I am not certain if this is firmware U/EFI software.
  • The rx2800-i2 makes it much more difficult (but not impossible) to access the ROM-based "RAID management utility" during boot
    update: I'm not not sure when things changed, but I am now seeing a RAID Setup Prompt on this machine when I boot OpenVMS-8.4 with patch-kit 1200. Since OpenVMS patch kits auto-update EFI/UEFI,  this change could have happened anytime after VMS84I_UPDATE-V1000

The Name Game

  • In 1985, Intel began using the phrase IA-32 (Intel Architecture 32) to market their 32-bit x86 processor chips
  • In 1998, Intel began releasing Xeon variations of IA-32 targeted at the commercial server market
  • In 2001, Intel began using the phrase IA-64 (Intel Architecture 64) to market their 64-bit Itanium processor chips
  • in 2003, HP began using the name HP Integrity to market servers contained Itanium processors (huh?)
    • IMHO, this is one reason why most computer professionals today do not know the name Itanium
  • In 2003, AMD added 64-bit extensions to their 32-bit x86 processors which they marketed as AMD64
  • In 2004, Intel followed AMD's lead by adding 64-bit extensions to their 32-bit x86 architecture which they marketed as INTEL64
  • Now both product lines are collectively known as the x86-64 architecture
    • Because everyone knew that IA-32 meant x86, many people assume IA-64 means x86-64 (this article proves they are mistaken: https://en.wikipedia.org/wiki/IA-64)
    • Things have gotten so bad that most of the Linux community has adopted this informal naming convention for their distributions:
      Code Meaning Notes
      i586 Pentium compatible "i" because Intel developed it first
      i686 Pentium Pro compatible "i" because Intel developed it first
      AMD64 x86-64 compatible because AMD was the first company to release 64-bit extensions to x86
      I64 Itanium "I64" because it is unique
  • on this page I will only use the name Itanium

A very brief history of Itanium

  • Everyone reading this might wish to be familiar with these terms:
    • CISC (complex instruction set computer)
    • RISC (Reduced Instruction Set Computer)
    • VLIW (very long instruction word)
    • EPIC (Explicitly Parallel Instruction Computing)
  • In the 1989, HP was developing a successor to VLIW which would eventually be referred to as EPIC (Explicitly parallel instruction computing)
  • Realizing that this would be too big for one company, HP partnered with Intel in 1994 to develop an EPIC-based chip which would eventually be known as Merced
  • Merced was expected to appear in 1997 but was delayed until 2001. The main reason for the delays are two fold:
    • RISC and VLIW chips kept getting faster but Merced was not able to match them
    • unlike RISC-based compiler enhancements, expected EPIC-based compiler enhancements never occurred
    • I've often wondered if Merced was intended as nothing more that a prototype (much like the 8088 was intended to be a prototype for the 8086) because only a few thousand were ever made. Merced is the only chip officially known as Itanium. All subsequent chips were known as Itanium2
  • Anyway, the economic failure now known as the dot-com crisis left the economy too poor to take advantage of this seemingly experimental chip
  • The first Itanium2 was released in 2002 but was still considered too expensive by many customers (the same thing happened with the initial releases of both VAX and Alpha)
  • Inventing Itanium: How HP Labs Helped Create the Next-Generation Chip Architecture
    http://www.hpl.hp.com/news/2001/apr-jun/itanium.html

Project-01 : HP rx2800-i2

Introduction (my first Itanium)

  • I'm not sure where I am going to go with this web page since moving from Alpha to Itanium should be a whole lot easier than my previous move from VAX to Alpha which involved code renovation (necessary due to sloppy programming in our group which happened during a decade of "no code reviews")
    • 99% of our source code (~ 200 programs: 90% VMS-BASIC; 10% DEC-C) is built from DCL scripts so I suspect we will only need to use DECnet to copy over the source code then generate a master script to invoke the individual build-scripts (when necessary) or just perform a vanilla compile-then-link.
    • 1% of our source code involves special odds-n-ends like gSOAP so would need to be built separately
  • I had previously been involved in buying VAX technology from Digital Equipment Corporation (DEC) as well as Alpha technology from Compaq Computer Corporation but this was my first time buying Itanium technology from Hewlett Packard Corporation
    • OpenVMS software licensing has simplified with each owner. With HP, licensed software under "an active support agreement" has a 100% trade-in value so is transferred to the new platform at no charge. Licensed software not under a current support agreement has a 40% trade-in value. In either case you must supply software authorization numbers.
  • What we purchased:
    • rx2800-i2 rack-mounted Itanium server ( http://www8.hp.com/us/en/products/integrity-servers/product-detail.html?oid=5033573 )
    • one quad-core 9340 Itanium processor (1.60GHz/5.0MB) which means it is from the Tukwila family
      • like Windows, OpenVMS sees eight CPUs due to hyper threading (when they are enabled)
      • rx2800-i4 machines are based upon 9500 series Itaniums which means they are from the Poulson family
    • 64 GB of RAM
    • one DVD drive
    • two 300 GB drives
    • one built-in P410i Smart Array controller (configured for RAID-1)
  • Caveat: what follows are not full days; this was a spare-time project worked outside my normal daily duties

Day 1 (well, just a few hours one afternoon)

  • rx2800i2
    Itanium rx2800-i2
    (drives are horizontal)
    The machine arrived two weeks ago by air from Singapore
  • It was racked and powered-up by an HP field technician yesterday (June-18, 2015). This technician knew nothing about OpenVMS but told us that we could have ordered a machine with a preinstalled OS. We were also told that we could put in a request to have another HP technician install OpenVMS for a fee (we declined).
  • No paper manuals or optical media were found in the box. Just a letter saying that online manuals are available at the HP website. The bad news for me is that this was around the time that HP was preparing to split into two companies: HP and HPE. The first thing they did (pre split) was to begin splitting their website which meant that a lot of documentation I needed was not available at either www.hp.com or www.hpe.com
  • Anyone coming from an Alpha background will be in for a shock because newer Itaniums do not have a traditional console. Almost everything is done via the serial port associated with the iLO (integrated lights out) port. These machines are meant to run in a datacenter and maintained by people off-site.
    • When I first saw this I recalled my introduction to VAX-8550 which employed a DEC-Pro350 (a personal computer based upon the PDP-11 which ran a modified version RSX-11) as a console. Although sometimes a pain, having a smaller computer managing a larger computer offered unexpected advantages; especially during boot (more on this in a moment)
    • As an aside, the PDP-11/44 employed an Intel 8085 to implement a serial console which included bootstrap support. Management Processors have been with us for a very long time

BIOS - EFI - UEFI

  • Personal Computers since the introduction of the IBM-PC in 1981 employed BIOS firmware to bring hardware up to a known state before booting an OS.
    • as PCs scaled up to replace traditional minicomputers, BIOS implementations were leveraged to meet the challenge. Anyone who has ever worked with x86-based commercial servers are already aware of one of the dangers: removing a drive (or rebooting with a dead drive) will cause all the lettered drives after it to move up one position in the alphabet. This causes a real mess if anything boots by, or is mounted by, drive number.
    • Most people reading this will be surprised to learn that BIOS on modern x86 machines still has the original limits: 16-bit processor mode; dealing with memory in 64 KB blocks via segment registers but never accessing more than 1 MB (the actual code limit is 640k); Ad-hoc code is sometimes tacked on to do boot-time memory tests above 1 MB
    • But most important of all, BIOS is almost always was run by the host CPU
  • In the late 1990s, Intel (working with HP on Itanium) began a project named Intel Boot Initiative which published a successor technology in 2002 named EFI (extensible firmware interface). This is best thought of as a tiny OS run on a small Management Processor (or simply MP). This management processor is then used to manage the host environment (see: VAX-8550 comment above)
  • In 2005 Intel transferred control of EFI to the Unified EFI Forum which now consists of over a dozen companies. EFI was then rebranded UEFI
  • To learn more:
  • The Management Processor on the iLO of my rx2800-i2 hosts an x86 CPU
  • Anyone who has ever peeked inside any of the EFI files will see:
    • the phrase "This program cannot be run in DOS mode" starting at byte-79 (if you count from byte one)
    • see https://en.wikipedia.org/wiki/Portable_Executable for more details
    • little endian observations
      • byte-01 and byte-02:
        • x5A4D
      • byte-75 and byte-76
        • x014C: EFI Image: IA32
        • x0200: EFI Image: IA64 (I think this means Itanium)
        • x0EBC: EFI Byte Code (think "Java virtual machine")
rx2660
Itanium rx2650
(drives are vertical; beer is optional)

So what's in your Itanium?

  • Previous generation Itaniums employed EFI (sometimes pronounced "Effie")
    • EFI systems presented a so-called "legacy mode" which is nothing more than yellow text on a black background (used mostly in large data centers)
    • You could switch it into a graphics-based setup display as seen in the rx2650 photo to the right but certain changes (like enabling/disabling threading) must be done in "legacy mode"
      • comment: if you didn't know any better you would swear you are looking at a picture of an ProLiant DL380 or DL385. Notice that these drives are slotted vertically.
    • While the rx2650 pictured to the left has what appears to be a graphical firmware display, all of my rx2660 machines do not
  • Newer Itaniums employ UEFI (sometimes pronounced "you-fie")
    • Although my rx2800-i2 does support VGA graphics, USB-keyboard and USB-mouse, the interface contains no graphics and appears to be totally text-based (proportional spacing). Furthermore, no provision was made for a booting OpenVMS to communicate with this graphical display.
      • from UEFI you issue the boot command
      • your VGA monitor will simply display the phrase: Booting OpenVMS 8.4 followed by a string of more than 80 dots
      • boot messages, including errors and failures, are now only visible on the iLO port or the DB-9 console
      • The VGA monitor, keyboard, and mouse will only become fully operational after OpenVMS is fully up and has started an X-Windows/Motif terminal. It is for this reason that you should divert the output of script sys$manager:systartup_vms.com to a log file in folder sys$manager
  • comment: I recently worked on a newer PC (Compaq ProLiant 500) which had a graphics-based UEFI that looked somewhat similar to the picture to the right.

UEFI over an iLO DB-9 console port

Survival Kit
Data Center Survival Kit
  • Trying to find a functional VT monitor with a DB9 serial port these days is next to impossible so I used my laptop along with a USB-to-DB9 dongle.
  • In my case both serial ports were DTE (electrical male) so I needed an F-F null modem cable. TeraTerm worked like a charm.
  • The default settings for rx2660 are 9600 baud, 8-bits, no-parity
  • Factory Defaults (almost always changed by the equipment installer)
    Machine Serial
    Ports
    Port
    Names
    Console
    User Name
    Console
    Password
    Notes
    rx2660 2 Aux, Console Admin Admin MP access over the Console port
    (password should be modified by the installer)
    rx2800-i2 1 Aux Administrator see pullout tag MP access over the Aux port
    DL385p_gen8 1 Aux Administrator define in BIOS MP access not available over any ports
    (setup the iLO from BIOS then use Ethernet)
  • Do yourself a favor and build a Data Center Survival Kit (you do not want to do this during a "Sunday night emergency" or "a national holiday")
    • You will need:
      • an old-school briefcase (engineers never use knapsacks)
      • one USB-to-DB9 dongle for your laptop (somehow I ended up with two, one of each sex, but only one dongle is shown)
        • the black dongle shown in the photo is better than average and has three indicator LEDs (1-Link, 2-Tx, 3-Rx)
        • after you finish installing the driver software from the supplied optical media, store it behind the document divider in briefcase
      • two null-modem adapters: one Male-to-Male; one Female-to-Female (orange paint in the photo)
      • two straight-through gender changers: one Male-to-Male; one Female-to-Female (yellow paint in the photo)
      • one 3m/10ft straight-through serial cable (Male-to-Female) pictured top-left
      • optional:
        • If you work on storage arrays associated with DL380 and DL385 then you will also need a DB9-to-micro-DB9 serial cable (pictured top-right; one end is gray whilst the other is black). One is usually supplied with each storage array but they tend to "walk away" if you know what I mean
        • Some real VT-320 monitors employ a 25-pin connector on the monitor and come with a 25-pin to 9-pin cable. Don't allow these to walk away
  • caveat: going forward, it might make sense to build an iLo Maintenance Network

Wasted Time (caused by me)

  • to be fair, PDF manual "HP Integrity rx2800 i2 Server User Service Guide" clearly states on that OpenVMS must be installed on Itanium using a serial console but I was certain the HP document was outdated (I was wrong, BTW)
  • surfing around (via Google) will take you to sites claiming that a VGA monitor could be used to do the initial OS install by first reconfiguring the console via the CONCONFIG command from the UEFI shell. Perhaps those sites were installing HP-UX, or perhaps that method works for other Itaniums but it did not work for me.
    • CONCONFIG Experiments:
      1. setting "VGA = primary" and "SERIAL = off"
        • failed; VMS came up part way but then displayed an error message about being unable to continue without  a serial port
      2. setting "VGA = primary" and "SERIAL = secondary"
        • failed; VMS came part way up then prompted for date+time. I was unable to enter it into either keyboard
      3. setting "SERIAL = primary" and "VGA = secondary" (this was the way the machine was delivered)
        • success

Initial Setup

  • optional: connect a VGA compatible monitor, USB-keyboard, USB-mouse
  • power-up the system without any media in the DVD drive
  • if you are watching from a serial terminal connected to the iLO port, you will see your first message within a minute
    • additional messages will be seen within 2 to 5 minutes depending upon whether boot-time device diagnostics are disabled or enabled
  • you will not see startup messages at the VGA monitor so be patient
  • eventually you will see the MP MAIN MENU on both the iLO port as well as the VGA monitor
  • type S to drop into the UEFI shell before the 7-second timer expires (this delay can be adjusted either way; nothing wrong with 15 or 20 seconds)
legend for my examples:
	<sr>	system response (what the system displays)
	<ur>	user response (what you should type or do)
	(text)	some action is described
	<enter>	hit the "enter" key
----------------------------------------------------------
<ur>	(connect a serial line to the iLO port then hit <enter>)
<sr>	MP login:
<ur>	Administrator
<sr>	MP password:
<ur>	******** (this is found on a pullout tag on the front of your processor chassis)
<sr>	Hewlett-Packard Integrated Lights-Out 3 for Integrity
	(C) Copyright 1999-2013 Hewlett-Packard Development Company, L.P.
		MP Host Name: kawc0x
		iLO MP Firmware Revision 01.55.02
	MP MAIN MENU:
		 CO: Console
		VFP: Virtual Front Panel
		 CM: Command Menu
		 CL: Console Log
		 SL: Show Event Logs
		 HE: Main Help Menu
		 X: Exit Connection
	[kawc0x]</> hpiLO->
<ur>	co
<sr>	(iLo system connects to system Itanium console)

	[Use Ctrl-B or ESC-( to return to MP main menu.]

	- - - - - - - - - - Prior Console Output - - - - - - - - - -
	1,0,0,0 5400006301E10000 0000000000000000 EVN_BOOT_START
	***********************************************************
	* ROM Version : 01.95
	* ROM Date    : Fri Feb 01 03:54:28 PST 2013
	***********************************************************
	1,0,0,0 3400083701E10000 000000000002000C EVN_BOOT_CELL_JOINED_PD
	1,0,0,0 340000B101E10000 0000003C0205000C EVN_MEM_DISCOVERY
	1,0,0,0 1400002601E10000 000000000006000C EVN_BOOT_CPU_LATE_TEST_START
	1,0,1,0 1400002605E10000 000000000006000C EVN_BOOT_CPU_LATE_TEST_START
	1,0,2,0 1400002609E10000 000000000006000C EVN_BOOT_CPU_LATE_TEST_START
	1,0,3,0 140000260DE10000 000000000006000C EVN_BOOT_CPU_LATE_TEST_START
	1,0,1,1 1400002607E10000 000000000006000C EVN_BOOT_CPU_LATE_TEST_START
	1,0,2,1 140000260BE10000 000000000006000C EVN_BOOT_CPU_LATE_TEST_START
	1,0,3,1 140000260FE10000 000000000006000C EVN_BOOT_CPU_LATE_TEST_START
	1,0,0,1 1400002603E10000 000000000006000C EVN_BOOT_CPU_LATE_TEST_START
	1,0,0,0 5400020701E10000 000000000011000C EVN_EFI_START

	Press Ctrl-C now to bypass loading option ROM UEFI drivers.

	1,0,0,0 3400008101E10000 000000000007000C EVN_IO_DISCOVERY_START
	1,0,0,0 5400020B01E10000 0000000000000006 EVN_EFI_LAUNCH_BOOT_MANAGER

	(C) Copyright 1996-2010 Hewlett-Packard Development Company, L.P.

	Note, menu interfaces might only display on the primary console device.
	The current primary console device is:
	Serial PcieRoot(0x30304352)/Pci(0x1C,0x5)/Pci(0x0,0x5)
	The primary console can be changed via the 'conconfig' UEFI shell command.

	Press:  ENTER  -  Start boot entry execution
		B / b  -  Launch Boot Manager (menu interface)
		D / d  -  Launch Device Manager (menu interface)
		M / m  -  Launch Boot Maintenance Manager (menu interface)
		S / s  -  Launch UEFI Shell (command line interface)
		I / i  -  Launch iLO Setup Tool (command line interface)

	*** User input can now be provided ***

	Automatic boot entry execution will start in 7 second(s).
<ur>	s
<sr>	Searching for devices.
	HP Smart Array P410i Controller     (version 5.78)  1 Logical Drive
	Currently the controller is in RAID mode
	Launching UEFI Shell.
	UEFI Shell version 2.10 [2.0]
	Current running mode 1.1.2
	Device mapping table
	  fs0    :Removable HardDisk - Alias hd9a0b blk0
		  PcieRoot(0x30304352)/Pci(0x1,0x0)/Pci(0x0,0x0)/Scsi(0x0,0x0)/HD(1459B1241-18EB-11E5-9F2B-AA000400FEFF)
	  fs1    :Removable HardDisk - Alias hd9a0d blk1
		  PcieRoot(0x30304352)/Pci(0x1,0x0)/Pci(0x0,0x0)/Scsi(0x0,0x0)/HD(3459B1240-18EB-11E5-9F2C-AA000400FEFF)
	  blk0   :Removable HardDisk - Alias hd9a0b fs0
		  PcieRoot(0x30304352)/Pci(0x1,0x0)/Pci(0x0,0x0)/Scsi(0x0,0x0)/HD(1459B1241-18EB-11E5-9F2B-AA000400FEFF)
	  blk1   :Removable HardDisk - Alias hd9a0d fs1
		  PcieRoot(0x30304352)/Pci(0x1,0x0)/Pci(0x0,0x0)/Scsi(0x0,0x0)/HD(3459B1240-18EB-11E5-9F2C-AA000400FEFF)
	  blk2   :BlockDevice - Alias (null)
		  PcieRoot(0x30304352)/Pci(0x1F,0x2)/Sata(0x0,0x0,0x0)
	  blk3   :Removable HardDisk - Alias (null)
		  PcieRoot(0x30304352)/Pci(0x1,0x0)/Pci(0x0,0x0)/Scsi(0x0,0x0)/HD(4459B1240-18EB-11E5-9F2B-AA000400FEFF)
	  blk4   :Removable BlockDevice - Alias (null)
		  PcieRoot(0x30304352)/Pci(0x1,0x0)/Pci(0x0,0x0)/Scsi(0x0,0x0)
	Press ESC in 1 seconds to skip startup.nsh, any other key to continue.
	Shell>
-----------------------------------------------------------------------------------------------------------
Caveat: this listing actually shows two initialized volumes (file systems are prefixed with "fs")
and five block structured devices (prefixed with "blk"). On a brand new system (with no optical
media present in the DVD drive) you will likely see one or more "blk" entries and zero "fs" entries.
Notice how fs0 (red) points to blk0 (red) and vice versa.
Also notice the alias names in green and purple.

Booting the OpenVMS ISO DVD from UEFI

<sr>	Shell>
<ur>	map
<sr>	(system will display known devices; initialized media will appear with fs# entries)
<ur>	(insert VMS media into the DVD drive)
	map -r
<sr>	("-r" forces the map command to rescan all the hardware) 
	(the system will display known devices; in my case "fs0:" now refers to the DVD drive)
<ur>	fs0:
<sr>	fs0:>\
<ur>	ls
<sr>	(should get a directory listing)
<ur>	cd efi\boot
<sr>	fs0:\efi\boot>
<ur>	bootia64
<sr>	(OpenVMS boots then displays the familiar 8-line installation menu)
<ur>	(use the menu to install OpenVMS on the desired drive)


	Once OpenVMS is installed, eject the DVD then reboot
	The system will reboot to UEFI but not OpenVMS (what?)


<sr>	Shell>
<ur>	map
<sr>	(system will display known devices; in my case fs0: now refers to the OpenVMS system drive)
<ur>	fs0:
<sr>	fs0:>\
<ur>	bcfg boot add 1 \EFI\VMS\VMS_LOADER.EFI "OpenVMS 8.4"
<sr>	fs0:>\
<ur>	exit
<sr>	system will drop into the UEFI menu
<ur>	B
<sr>	system will display boot menu
<ur>	choose the first entry (if you entered "add 1" above)
<sr>	system will boot OpenVMS
------------------------------------------------------------------------------------------------------
Question: So what just happened?
Answer  : The boot configuration command (BCFG) looked at my currently selected device (fs0) then used
	  associated drive information (1459B1241-18EB-11E5-9F2B-AA000400FEFF in my case) to make an
	  entry into position #1 of the boot configuration table. Previous entries were pushed down by
	  one position. Coles Notes Summary: we now boot by GUID rather than drive letter

Day 2 (Installing OpenVMS)

  • On page 37 of the 2013 manual HP Integrity rx2800 i2 Server User Service Guide we read:
    For OpenVMS installation, see the VMS84I_UPDATE-V0500.RELEASE_NOTES 
    		document
    available in the HP Support Center here: http://www.hp.com/go/hpsc

    which I correctly assumed meant we need to install VMS84I_UPDATE-V0500 right now
  • I incorrectly thought the simpler route would be to register/load the OpenVMS License into the license manager then enable DECnet so I could employ the network to copy the patch from another system. This was a big mistake. Shortly after I loaded the license I encountered a stack dump. Every reboot after that ended in a stack dump
  • At this point I had two choices:
    1. reboot the DVD; drop into DCL; mount the disk; connect to the license manager on that disk to unload the license
    2. reboot the DVD; reinstall OpenVMS
      (I chose this option because, once started, I could walk away to take care of some other pressing matters associated with my daily duties)
  • Once the system was back up, I used a PC to burn the patch onto a CD-ROM then used SneakerNet to get it to the Itanium. I copied the self-extracting patch from the optical drive then used PCSI to install it. Once rebooted, I registered/loaded the OpenVMS license; everything worked like a charm
  • I was previously worried about the RTC (real time clock) because every boot of OpenVMS prompted me to input the DATE + TIME at the serial port console. This stopped as soon as I installed VMS84I_UPDATE-V1000 which happened to be the latest available kit
  • As stated previously, you won't see any console messages from script SYS$MANAGER:SYSTARTUP_VMS.COM on the VGA monitor so it would be wise to modify the startup script then divert SYS$OUTPUT to file SYS$MANAGER:SYSTARTUP_VMS.LOG (remember to close the channel before the script exits)

Day 3

  • installing "DECnet phase IV", "TCPIP for OpenVMS", and "Apache" went without a hitch
  • DECnet makes coping files to-from the old AlphaServer-DS20e child's play 

Day 4

  • installing DEC-BASIC, DEC-C++, and FMS (Forms Management System) went without a hitch
    • we require FMS because we still support a small number of green-screen apps
  • we are still waiting for a DEC-C license which was overlooked during HP's license trade-in program

Day 5 (playing with RAID)

  • When I did the initial OpenVMS install a week ago I noticed that I was writing to both my disks. This machine was delivered with an integrated (built into the motherboard) HP Smart Array P410i controller and someone had already configured both drives as part of a single RAID-1 logical unit (aka disk mirror). Okay so redundancy isn't a bad thing but I needed a second logical volume for files associated with our business (RMS-ISAM databases, MariaDB databases, Apache, photographs, spreadsheets, etc.) but how do I manage the RAID array? More importantly, I just purchased two additional drives and I want to install/configure them without calling HP/HPE
  • Page 145 of the manual HP Integrity rx2800 i2 Server User Service Guide begins by describing utilities not found anywhere on my system. Many web sites will tell you that a kit containing file saupdate.efi can be easily located and downloaded from the HP web site but this was not the case with me
    • did I mention that this was the month HP began extensive changes to their web site as part of their plans to split the company into two? Much stuff at www.hp.com was unavailable during the move to www.hpe.com
  • So as of Friday (2015-06-26), any attempts to search for the phrase "P410i" will yield a lot of information but non of it will be of any use to the OpenVMS community. For example:
surf over to	: http://www.hpe.com	(this whole paragraph was updated on 2016-02-11)
click		: SUPPORT
click		: HPE Servers, Storage and Networking 
click		: Download Drivers
type		: P410i
click		: GO
view results	: notice lots of ProLiant BL + DL products are listed
click on	: HP Smart Array P410i Controller
click		: Get drivers, software & firmware
search drop-down: look for "OpenVMS" or "OVMS" (but you will not find either)
select drop-down: "OS Independent"
result		: ~100 firmware files but nothing of use to OpenVMS or UEFI
		: You will see a lot of Linux stuff here (RPM files, etc.)
  • Now try this:
surf over to	: http://www.hpe.com	(this whole paragraph was updated on 2016-02-11)
click		: SUPPORT
click		: HPE Servers, Storage and Networking
click		: Download Drivers
type		: HP Integrity rx2800 i2
click		: GO
click		: Get drivers, software & firmware
click on	: HP Integrity rx2800 i2 Rack Optimized Server
select drop-down: "OpenVMS v8.4"
result		: 9 firmware files including these 2 in the "Firmware Controller Storage" section:
		  ** CRITICAL ** SAS IO Firmware Update Package (EFI) - HP Integrity rx2800 i2 Servers
			which contains this file: rx2800i2IOSASFW578_EFI.zip
		  ** CRI2TICAL ** SAS IO Firmware Update Package for OVMS - HP Integrity rx2800 i2 Server
			which contains this file: HP-I64VMS-IOCFM_RX2800I2-V0578.ZIPEXE
			(self extracting archive for OpenVMS Itanium)

Day 6 (adding two more drives)

  • I installed an OpenVMS patch to make new firmware available so I could play with the RAID
    • running self-extracting archive: HP-I64VMS-IOCFM_RX2800I2-V0578.ZIPEXE
    • yields these two files:
      • HP-I64VMS-IOCFM_RX2800I2-V0578--1.PCSI$COMPRESSED;1
      • HP-I64VMS-IOCFM_RX2800I2-V0578--1.PCSI$COMPRESSED_HPC;1 
    • which you install from DCL via the PRODUCT command.
      • At this time EFI files (including: SAUPDATE.EFI) will be copied into a root directory of your boot disk
      • you will be able to see them from the UEFI shell accessible from the iLO port
  • Shutdown OpenVMS to play with the RAID (you need to boot into the EFI shell)
<sr>	Shell>
<ur>	fs0:
<sr>	fs0:>\
<ur>	cd efi\tools	(look for SAUPDATE.EFI which may be in a different place on your system)
<sr>	fs0:\efi\tools>
<ur>	saupdate get_mode p410i	(or: "saupdate get_mode all")
<sr>	The controller at 0:1:0:0 is in RAID mode
	fs0:\efi\tools>
<ur>	drivers -b
<sr>	            T   D
	D           Y C I
	R           P F A
	V  VERSION  E G G #D #C DRIVER NAME                         IMAGE NAME
	== ======== = = = == == =================================== ===============
	16 0000000A B - -  1 56 PCI Bus Driver                      PciBusDxe
	1A 00000014 B - -  1  1 Serial 16550 Driver                 Serial
	68 00000001 D - -  1  - ICH Serial ATA Controller Initializ SataControllerD
	6E 0000000A B - -  1  1 AHCI Bus Driver                     AhciDxe
	6F 0000000A D - -  3  - Platform Console Management Driver  ConPlatformDxe
	70 0000000A D - -  2  - Platform Console Management Driver  ConPlatformDxe
	71 0000000A B - -  3  3 Console Splitter Driver             ConSplitterDxe
	72 0000000A B - -  2  2 Console Splitter Driver             ConSplitterDxe
	73 0000000A ? - -  -  - Console Splitter Driver             ConSplitterDxe
	74 0000000A B - -  2  2 Console Splitter Driver             ConSplitterDxe
	75 0000000A ? - -  -  - Console Splitter Driver             ConSplitterDxe
	78 0000000A ? - -  -  - UGA Console Driver                  GraphicsConsole
	79 0000000A B - -  1  1 Serial Terminal Driver              TerminalDxe
	7A 0000000A D - -  1  - VGA Class Driver                    VgaClassDxe
	7B 00000000 D - -  1  - PCI VGA Mini Port Driver            VgaMiniPort
	7C 0000000A D - -  5  - Generic Disk I/O Driver             DiskIoDxe
	7F 0000000A D - -  2  - FAT File System Driver              Fat.efi
	81 0000000A B - -  1  1 SCSI Bus Driver                     ScsiBus
	82 0000000A ? - -  -  - Scsi Disk Driver                    ScsiDisk
	Press ENTER to continue, 'q' to exit:
<ur>	<enter>
<sr>	83 00000030 ? - -  -  - Scsi Tape Driver                    ScsiTape
	84 0000000A B - -  1  3 Partition Driver(MBR/GPT/El Torito) PartitionDxe (think about this)
	85 0000000A B - -  7  4 Usb Bus Driver                      UsbBusDxe
	86 0000000A D - -  2  - Usb Keyboard Driver                 UsbKbDxe
	87 00000011 ? - -  -  - Usb Mass Storage Driver             UsbMassStorageD
	88 0000000A D - -  2  - Usb Mouse Driver                    UsbMouseDxe
	89 00000020 D - -  5  - Usb Uhci Driver                     UhciDxe
	8A 00000030 D - -  2  - Usb Ehci Driver                     EhciDxe
	8C 0000000A D - -  4  - Simple Network Protocol Driver      SnpDxe
	8D 0000000A B - -  4 12 MNP Network Service Driver          MnpDxe
	8E 0000000A B - -  4  4 ARP Network Service Driver          ArpDxe
	8F 0000000A B - -  4 32 IP4 Network Service Driver          Ip4Dxe
	90 0000000A D - -  4  - IP4 CONFIG Network Service Driver   Ip4ConfigDxe
	91 0000000A B - - 24 20 UDP Network Service Driver          Udp4Dxe
	92 0000000A B - -  4  4 DHCP Protocol Driver                Dhcp4Dxe
	93 0000000A B - -  8  4 MTFTP4 Network Service              Mtftp4Dxe
	94 0000000A D - - 24  - UEFI PXE Base Code Driver           UefiPxeBcDxe
	95 0000000A D - -  4  - Tcp Network Service Driver          Tcp4Dxe
	96 0000000A ? - -  -  - iSCSI Driver                        IScsiDxe
	9C 00000350 B X X  1  2 Smart Array SAS Driver v3.50        MemoryMapped(0x
	BF 04030100 B X X  1  1 Intel(R) PRO/1000 4.3.01 PCI-E      MemoryMapped(0x
	C2 04030100 B X X  1  1 Intel(R) PRO/1000 4.3.01 PCI-E      MemoryMapped(0x
	C6 04030100 B X X  1  1 Intel(R) PRO/1000 4.3.01 PCI-E      MemoryMapped(0x
	C9 04030100 B X X  1  1 Intel(R) PRO/1000 4.3.01 PCI-E      MemoryMapped(0x
	Press ENTER to continue, 'q' to exit:
<ur>	q
<ur>	devices -b
<sr>	C  T   D
	T  Y C I
	R  P F A
	L  E G G #P #D #C Device Name
	-- - - - -- -- -- -------------------------------------
	5F R - -  -  1 56 PcieRoot(0x30304352)
	76 D - -  5  -  -<UNKNOWN>
	77 D - -  2  -  -<UNKNOWN>
	98 D - -  1  -  - PcieRoot(0x30304352)/Pci(0x0,0x0)
	99 D - -  1  -  - PcieRoot(0x30304352)/Pci(0x1,0x0)
	9A B X X  1  2  2 Smart Array P410i Controller ---------+
	9D D - -  1  -  - PcieRoot(0x30304352)/Pci(0x3,0x0)	|
	(...snip...)						|
<ur>	drvcfg							|
<sr>	Configurable Components					|
	  Drv[BF]  Ctrl[BD]  Lang[eng]				|
	  Drv[C2]  Ctrl[C0]  Lang[eng]				|
	  Drv[C6]  Ctrl[C4]  Lang[eng]				|
	  Drv[C9]  Ctrl[C7]  Lang[eng]				|
	  Drv[9C]  Ctrl[9A]  Lang[eng] <------------------------+
<ur>	drvcfg -s 9C 9A <---------------------------------------+
<sr>	Set Configuration Options
	  Drv[9C] Ctrl[9A] Lang[eng]

	 Option Rom Configuration for Arrays (ORCA), version 3.50
	 Copyright 2009 Hewlett-Packard Development Company, L.P.
	 Controller: HP Smart Array P410i
		Create Logical Drive
		View Logical Drive
		Delete Logical Drive
  • Next, I physically inserted two new drives into the next two spare slots then used the ORCA utility to include them as part of a RAID-1 set. The whole procedure took less than one minute

 Day 7 (Simplistic Benchmarks)

  • Playing with the VMS-BASIC compiler. I compiled the following demo program on both Alpha and Itanium making sure to get the loop limit from an external prompt in order to foil certain kinds of automatic compiler optimizations. Also, both were compiled with command-line switch "/optim=level=0"
1000	!============================================================
	! title  : neil_100.bas
	! purpose: compare executable sizes between Alpha and Itanium
	!============================================================
	option type=explicit
	set no prompt
	declare string junk$, long i%, j%
	when error in
	     print "number of loops? (default=10) ";
	     input junk$
	     i% = integer(junk$)
	use
	     i% = 0
	end when
	!
	select i%				!
	    case 1 to 100			!
	    case else				! default
		i% = 10				! default
	end select				!
	for j% = 1 to i%			!
	    print "this is test line:";j%	!
	next j%					!
	end					!
  • And here are the resultant file sizes
File NameAlphaItanium
NEIL_100.BAS  1KB  1KB
NEIL_100.EXE  4KB  10KB
NEIL_100.LIS  20KB  34KB
NEIL_100.OBJ  6KB  6KB
  • For the example program shown above, the Itanium executable is 2.5 times larger. What follows is data extracted from the listing files
PROGRAM SECTIONS (Alpha)

    Name                                Bytes Attributes

0   $READ_ONLY$				296     PIC CON REL LCL   SHR NOEXE   RD NOWRT OCTA
1   $CODE$				852     PIC CON REL LCL   SHR   EXE NORD NOWRT OCTA
2   $LINK$				344   NOPIC CON REL LCL NOSHR NOEXE   RD NOWRT OCTA
3   $LITERAL$				54      PIC CON REL LCL   SHR NOEXE   RD NOWRT OCTA
4   $ARRAY				0     NOPIC CON REL LCL NOSHR NOEXE   RD   WRT OCTA
5   $DESC				0     NOPIC CON REL LCL NOSHR NOEXE   RD   WRT OCTA

PROGRAM SECTIONS (Itanium)

    Name                                Bytes Attributes

0   $READ_ONLY$                         296     PIC CON REL LCL   SHR NOEXE   RD NOWRT OCTA
1   $CODE$                              1584    PIC CON REL LCL   SHR   EXE NORD NOWRT OCTA
2   $LINK$                                    NOPIC CON REL LCL NOSHR NOEXE   RD NOWRT OCTA
3   $LITERAL$                           54      PIC CON REL LCL   SHR NOEXE   RD NOWRT OCTA
4   $ARRAY                              0     NOPIC CON REL LCL NOSHR NOEXE   RD   WRT OCTA
5   $DESC                               0     NOPIC CON REL LCL NOSHR NOEXE   RD   WRT OCTA
  • Comparing the listing files:
    1. the total of all program sections is 1.25 times larger on Itanium
    2. the total of the CODE and LINK sections is 1.32 times larger on Itanium
  • Interpretation/Extrapolation (2015-07-xx):
    • The cores in our rx2800-i2 are running at 1.6 GHz:
    • The CPUs in our production AlphaServer DS20e are running at 833 MHz (our development machine runs at 633 MHz)
    • This means the Itanium clock is 1.92 times faster
      • Running 1.92 times faster on code 1.25 times larger means that we should expect an unoptimized BASIC program to run 1.54 times faster
      • Running 1.92 times faster on code 1.32 times larger means that we should expect an unoptimized BASIC program to run 1.46 times faster
      • with twice as many cores (four times if you include hyper threading) I suspect this new box should, at the very least, be able to do six (4 x 1.50) times more work in parallel. It is surprising that these same numbers also reflect the all-in price of a new Itanium being four to six times lower than a new (in 2002) AlphaServer
        • Caveat: these overly simplistic comparisons ignore other important factors like: memory technology, memory size, cache architecture, cache size, disk drive transfer rates, maximum NIC speeds, etc.
  • Real World Update #1 (2015-07-11): compiling a very large (60k lines) BASIC program on this Itanium is 2.1 times faster than our production AlphaServer.
    •  could the faster speed be due to "16 times more more memory" or "better memory technology" (DDR2 which has double the transfer rate of DDR)
  • Real World Update #2 (2016-02-14): something wonderful happened after we installed the SAS Cache Memory Module (see Day20 below). Compiling the large 60k line program now only requires 35 seconds on this Itanium making it 10.3 times faster than Alpha. Since this is a "single process" observation (because the compiler can only engage one CPU core), having twice as many cores means this platform should be able to do 20.6 times more work at the same time. Perhaps even a bit more if you recall that these CPUs are hyper threaded (OpenVMS sees 8 CPUs).
LabelMachineCPU clockCPUsMemory
Type
Memory
Size
Raid60k Line
Compile Time
Single Task Speed Up Total
Speedup?
DVLPAlphaServer-DS20e633 MHz2DDR2 GBMylex 960361 seconds n/a 
PROD1AlphaServer-DS20e833 MHz2 DDR4 GBRA-3000241 seconds n/a 
PROD2Itanium rx2800-i21.6 GHzone quad core
(HT=8)
DDR264 GBP410i35 seconds10.3 times faster than DVLP
  6.9 times faster than PROD1
20.6
13.8

Day 8

  • Today I was provided a new LAN circuit to be used as a permanent iLO LAN connection (you need to use the iLO serial port to do the configuration)
  • This required a reset/reboot of the iLO (Management Processor) and this was all done with OpenVMS running (very cool).
  • By default, connecting to the iLO is done over TCP port 2023 via SSH on port 22 (note the port number; this is not a typo)
  • TeraTerm worked like a charm

Day 9 (Began porting software)

  1. Today I created directories on the Itanium to replicate our development environment on the Alpha (we do not have any commercial source code versioning tools or source code repositories)
    	[dvlp]		- files of the form:	yada.bas	(VMS-BASIC sources)
    						yada.com	(DCL build scripts)
    						yada.c		(DEC-C sources)
    	[dvlp.cxx}	- files of the form:	yada.cxx	(DEC-C++ sources)
    	[dvlp.fil]	- files of the form:	yada.rec	(record maps)
    						yada.opn	(file opens)
    	[dvlp.fdl]	- files of the form:	yada.fdl	(RMS fdl files used in ISAM tuning)
    	[dvlp.flb]	- files of the form:	yada.flb	(FMS form libraries)
    						yada.fms	(FMS forms)
    	[dvlp.fun]	- files of the form:	yada.fun	(VMS-BASIC standalone functions)
    						yada.sub	(VMS-BASIC standalone sub programs)
    	[dvlp.inc]	- files of the form:	yada.inc	(VMS-BASIC standalone includes)
    	[dvlp.mar]	- files of the form:	yada.mar	(macro assembler stuff)
    	[dvlp.sql]	- files of the form:	yada.sql	(SQL files to perform MariaDB maintenance)
    						yada.com	(DCL scripts to perform MariaDB maintenance)
    	[src]		- production copies of everything found in/under [dvlp]
    	[data]		- files of the form:	yada.dat	(RMS/ISAM production data files)
  2. Next, I copied over all our source code from the Alpha then prepared to run the build scripts
     
  3. Some very old (not yet modernized) BASIC programs reference VMS run-time libraries (STARLET.OLB) but the sources do not pick up declarations from BASIC$STARLET.TLB. These programs pickup their external symbols declarations via an include [.inc]vms_external.inc but expect to have symbols resolved at link time where we associate them with "[.mar]symbols.obj" which is created from DCL by invoking the macro assembler like so:
     
            $mac [.mar]symbols.mar

    Even though we are now on a different architecture CPU, this command worked without modification.
    comment: I have got to find the time to get rid of this old crud
     
  4. Many of our smaller programs only contain a few external functions found in [.fun] which are compiled every time we rebuild. Some larger programs (which are continually being rebuilt) expect to find the object files associated with precompiled functions inside our custom library ICSIS_FUNCTIONS.OLB (anyone modifying an external function is responsible for updating the library). We have been using a home-brewed DCL script to create/maintain this OLB for the past 15 years starting with VAX then leading to Alpha. On Itanium this script only works once (library creation) but fails when replacing an individual module upon a subsequent pass. (you will get a weird message about your OLB not being an ELF library).
    •  the fix: modify the library maintenance script replacing "libr/cre ICSIS_FUNCTIONS.OLB" with "libr/cre/obj ICSIS_FUNCTIONS.OLB"
       
  5. I invoked a few scripts which rebuild all 200+ programs. There were ~25 failures all due to poor housekeeping (eg. they also could not be rebuilt this way on Alpha)
    • the fix: minor modifications to ~25 programs which then were rebuilt without incident
       
  6. I have one program which builds with some very strange linker messages on Itanium. This area of the code is a place where I employ sys$cmexec to call a small function which sets/changes a logical name in table LNM$SYSTEM_TABLE (Why do it this way? It is a supervisor-mode logical name which means I must first change over to executive mode; if this stand-alone program used a CLI then I could just use LIB$SET_LOGICAL; in hindsight the CLI-based approach might have been less painful).
    • the fix:
      • modify the called code changing from a BASIC FUNCTION to a BASIC SUB
      • change one declaration in the calling code

Day 10

  • due to an administrative FUBAR when we ordered this new platform, DEC-C was missed. That license arrived today and I was able to build all of our "C" programs and external functions with no problems whatsoever.
    • this excludes some gSOAP apps (haven't installed gSOAP just yet)
    • this excludes some MariaDB apps (haven't installed MariaDB just yet)
    • this excludes some third-party apps dependent upon MMS (haven't installed MMS just yet) 

Day 11 (Apache woes : part 1)

  • Okay so I didn't see this one coming. Today I downloaded a fresh copy of CSWS-2.2-1 from the HP website.
  • It installed without any errors but moving over the served content was pointless because the webserver doesn't appear to work
  • Our home page contains some jQuery which is employed to convert a linked-list into a sliding menu (http://www.dynamicdrive.com/dynamicindex1/ddsmoothmenu.htm) but most other pages at our site also make extensive use of jQuery and AJAX so if the home page has problems then so will everything else.
  • Weird browser behavior
    • IE11 seemed to work properly
    • Firefox-39 rendered a page but there was no sliding menu, just a linked list
    • Chrome-44 didn't render anything at all but further examination with the Developer Tool's (hit F12) showed a problem with incomplete chunked transfers
  • Rather than waste your time telling you all the things I did which did not work, let me say that CSWS-2.2-1 now requires text files to be stored in stream_lf format
  • We were running CSWS-2.2 on the Alpha and it did not require stream_lf format text files so it looks like we're in a jam for a little while. What to do?
    1. load CSWS-2.1 then start applying update patches    -OR-
    2. convert all text files to stream_lf (this includes software generating new static html-based reports as well as interfaces responsible for capturing text-file uploads)

Day 12 (Apache patch)

  • Good news. I requested a "CSWS-2.2-1 patch" from from HP today via my OpenVMS support account. HP responded within an hour by placing the patch in a 24-hour drop box. I installed the patch ( a replacement version of APACHE$HTTPD_SHR.EXE ) and now everything works properly.
  • I downloaded then installed a new version of DDSMOOTH from here: http://www.dynamicdrive.com/dynamicindex1/ddsmoothmenu.htm
    • comment: anyone working with VMS or OpenVMS is probably aware of FTP-induced corruption were some files (like .js) might be saved with a record format of "512-fixed" rather than "variable length". Apparently that was what had happened with the previous version of DDSMOOTH on Alpha but we didn't know it. This time I downloaded the files to my PC, zipped them, then FTP'd the zip to OpenVMS. Unzipping text files on OpenVMS almost always saves them as stream_lf which is not a problem for editors and/or Apache.
  • Installed Mark Berryman's port of MariaDB (an alternate fork of MySQL)

Day 13 (my FTP woes)

I think it is safe to say that most modern systems push messages between them using SFTP (which is based upon SSH) or SOAP. However, older interfaces connected to other non-OpenVMS systems may require FTP transfers and this can be a problem. Why?

  • almost all out-of-the-can software can not make sense of VMS/OpenVMS file listings as viewed from FTP (remote systems expect to see a UNIX display)
    • this is especially true of almost all graphical FTP tools available for PCs (Attachment's Reflection for UNIX and OpenVMS is one notably expception)
  • scripting is virtually identical on all implementations of SFTP
  • scripting is implementation specific with FTP (most remote systems expect to see UNIX)
  • the only things that FTP and SFTP have in common are three letters (this prevents others from using an SFTP client to connect to our FTP server)
  • while FTP supports ASCII-mode transfers, SFTP does not
  • FTP scripting will allow you to include a password in the script, this was removed from SFTP for obvious reasons

Okay so it turns out that we have two separate FTP-related issues which may force us to a third-party stack (MultiNet)

  1. Some foreign systems connect to our OpenVMS system via FTP and expect to see a UNIX-like file listing. These are programmatic transfers written using Microsoft's C# making use of the FTP API built into .NET -AND- we have had no luck getting those programmer's to change their code (they push-pull between various systems of which we are only one of many)
    • both TCPware and MultiNet provide logical names (eg. multinet_ftp_unix_style_by_default is one of many) to adjust the view as seen by connecting clients. This is done on a per-account basis by inserting ftp-specific logical names into the receiving account's LOGIN.COM script.
    • TCPIP Services for OpenVMS does not have anything like this.
      • TCPIP Services does employ a system-wide logical name ( TCPIP$FTPD_ UNIX_DISPLAY ) but it does not do what you might think (it only allows filenames with multiple dots to be displayed that way)
  2. We are required to do programmatic semi-intelligent FTP transfers to other sites so need an FTP API or FTP scripting capabilities. Here is the pseudo code:
    1. prepare to push a message file to a remote system
    2. connect to the remote system via FTP
    3. look to see if file "YADA.txt" exists
      1. If NO, then push our message
      2. If YES, then the remote system has not picked up previous file so don't overwrite it but try again in 60 seconds
      3. If still YES, then raise an alarm
    4. If this interface were rewritten today we would demand to push uniquely named files of the form "YADA-ccyymmddhhmmss.txt" but would still need to deal with problems like: "full destination disk", "unable to connect", and "receiving end not processing their inbound message files"

(our) Alpha Environment

Our existing AlphaServer DS20e employs the TCPware stack

  1. many of our inbound FTP accounts employ special ftp-specific logical names to make our system appear UNIX-like
  2. TCPware provides an "FTP Library" which is an FTP API used by high-level languages (BASIC and C in our case) to do outbound programmatic FTP transfers
  3. Some outbound FTP transfers still employ the programmatic scripting (referred to as a "take" file)

(my) Itanium Options

  1. get a TCPware license for this Itanium
    • minus: extra money
    • plus: very few (perhaps no) changes required in our programs or scripts
    • minus: TCPware is stuck at IPv4 and will never be upgraded to IPv6 according to the vendor (not currently a problem but could be within a year or two)
  2. get a MultiNet license for this Itanium
    • minus: extra money
    • plus: like TCPware, MultiNet supports special logical names to modify how FTP clients see our system
    • plus: supports both IPv4 and IPv6 (unlike TCPware)
    • minus: FTP Library is gone so no FTP API to do FTP from high level languages (which means that any program doing FTP will need to be rewritten using simple scripts)
    • minus: does not support programmatic scripting (a "/take" switch exists but works like the "/input" switch found in TCPIP Services)
      • any solution developed here would need to be really dumb
  3. stay with TCPIP Services for OpenVMS
    • plus: free with OpenVMS license
    • plus: supports both IPv4 and IPv6 (unlike TCPware)
    • minus: no  logical names (per-account or system-wide) to present UNIX-like displays to FTP clients
      • we would probably need to get a second UNIX or WINDOWS box which would be designated as designation for FTP clients. This could get messy
    • minus: no support for programmatic FTP scripting
      • any solution developed here would need to be really dumb:
        1. invoke script to connect to remote system to look for presence of desired file, then exit
        2. make some decision
        3. invoke a different script to do the next step

Day 14 (human-caused problems with SFTP)

  1. Received a trial license from Process Software then downloaded and installed MultiNet
  2. As usual, I was interrupted when configuring SSH which led to some delays in getting SFTP to work properly.
    • I believe this very misleading error message
              Disconnected; protocol error (Protocol error: packet too long
      would have happened with any stack from any vendor which is why I have documented the problem here.
  3. I think I found a problem with FTP UNIX mode. The MultiNet version of the process logicals are supposed to work the same way as they do in TCPware but they don't. So check out this stub from LOGIN.COM script of one of the accounts needing this
    $! logicals for TCPware
    $       DEFINE TCPWARE_FTP_UNIX_STYLE_BY_DEFAULT        TRUE
    $       DEFINE TCPWARE_FTP_DISALLOW_UNIX_STYLE          FALSE
    $       DEFINE TCPWARE_FTP_UNIX_STYLE_CASE_INSENSITIVE  TRUE
    $       DEFINE TCPWARE_FTP_UNIX_YEAR_OLD_FILES          TRUE
    $       DEFINE TCPWARE_FTP_STRIP_VERSION                TRUE
    $! logicals for MultiNet (our Itanium box)
    $       DEFINE MULTINET_FTP_UNIX_STYLE_BY_DEFAULT       TRUE
    $!~~~   DEFINE MULTINET_FTP_DISALLOW_UNIX_STYLE         FALSE   (bug - must be undefined)
    $       DEFINE MULTINET_FTP_UNIX_STYLE_CASE_INSENSITIVE TRUE
    $       DEFINE MULTINET_FTP_UNIX_YEAR_OLD_FILES         TRUE
    $       DEFINE MULTINET_FTP_STRIP_VERSION               TRUE

Day 15 (gSOAP)

  • I found some spare time today to install gSOAP; this took no time at all
  • Next, I used my scripts to build the client and server apps which were written in "C"; this took even less time and was totally uneventful (and the client program needed to link against the OpenSSL libraries)
  • comment: by why should I be surprised?  Bell Labs created the "C" language with portability in mind

Day 16 (problem with the Itanium Linker)

  • Numerous people (including me) have been crabbing that OpenVMS should be more UNIX-like. We all got our wish with the Itanium Linker whose origins begin in UNIX SVR4 as is briefly described here: Executable and Linkable Format (ELF)
  • Our system has several apps which "build properly via the MMK (make) tool on Alpha" but fails on IA64 with the following link error:
        %ILINK-E-INVLDHDR, invalid ELF header; field 'ehdr$q_e_phoff' has invalid value %X0000000000000048
  • My link error was associated with linking against sys$share:libzshr.exe so I located then installed a new version of ZLIB (v1.28) but this did not help
  • Since ZLIB is built using MMK I located then installed a new version of MMK (v5.1) but this did not help
  • At this point browsing for ehdr$q_e_phoff yielded a lot of hits relating to ELF MAGIC NUMBERS which resulted in me doing "$ana/obj libzshr.exe" and "$dump/page libzshr.exe" (where I was able to see "x48" in the correct position)
    • This is one of the new ELF parameters you will see documented in ELFDEF (elfdef.h) along with: ehdr$b_ei_mag0, ehdr$b_ei_mag1, ehdr$b_ei_mag2, ehdr$b_ei_mag3, ehdr$b_ei_class, ehdr$b_ei_data, ehdr$b_ei_version, ehdr$b_ei_osabi, ehdr$b_ei_abiversion
  • Next I performed the previous "$ana" and "$dump" commands on file TCPIP$IPC_SHR.EXE which is a working share on my system but did not see any important differences between this file and libzshr.exe
  • Next I began browsing for documents where people might have experienced problems linking against TCPIP shares on Itanium which led to an ECO with this caveat:
        shares must always appear listed as one-liners after "sys$input/opt"
  • The first example below is the equivalent link command generated by our MMK and does not work
  • The second link below contains the suggested modification and does work without errors or warnings
    • Note: it would have been just as legal to insert "sys$input/opt" just above the last line. However, I have seen different warnings about not sending more than 900 characters to this compiler "on one equivalent line" where example-1 already exceeds 600 bytes. The equivalent line length of example-2 is ~200 bytes which ends just after "sys$input/opt"
$! link-1 does not work on Itanium
$! yields: 1 error and 4 warnings
$ link  /exec=qsrv.exe -
 [dvlpc.qsrv.objs]qsrv.obj, -
 [dvlpc.qsrv.objs]cgi.obj, -
 [dvlpc.qsrv.objs]cdescriptor.obj, -
 [dvlpc.qsrv.objs]cquery.obj, -
 [dvlpc.qsrv.objs]cstatus.obj, -
 csmis$dvlp:ICSIS_FUN_LIBRARY.OLB/library, -
 mysql055_root:[lib.ia64]libclientlib.olb/library, -
 mysql055_root:[lib.ia64]libdbug.olb/library, -
 mysql055_root:[lib.ia64]libmysys.olb/library, -
 mysql055_root:[lib.ia64]libsql.olb/library, -
 mysql055_root:[lib.ia64]libstrings.olb/library, -
 mysql055_root:[lib.ia64]libvio.olb/library, -
 mysql055_root:[lib.ia64]libyassl.olb/library, -
 sys$share:LIBZSHR.EXE/share

 
$! link-2 does work on Itanium
$! yields: 0 errors and 0 warnings
$ link  /exec=qsrv.exe -
 [dvlpc.qsrv.objs]qsrv.obj, -
 [dvlpc.qsrv.objs]cgi.obj, -
 [dvlpc.qsrv.objs]cdescriptor.obj, -
 [dvlpc.qsrv.objs]cquery.obj, -
 [dvlpc.qsrv.objs]cstatus.obj, -
 sys$input/opt
 csmis$dvlp:ICSIS_FUN_LIBRARY.OLB/library
 mysql055_root:[lib.ia64]libclientlib.olb/library
 mysql055_root:[lib.ia64]libdbug.olb/library
 mysql055_root:[lib.ia64]libmysys.olb/library
 mysql055_root:[lib.ia64]libsql.olb/library
 mysql055_root:[lib.ia64]libstrings.olb/library
 mysql055_root:[lib.ia64]libvio.olb/library
 mysql055_root:[lib.ia64]libyassl.olb/library
 sys$share:LIBZSHR.EXE/share

Day 17 (Apache woes : part 2)

Overview

  • For the past three years we have support web-based file uploads to our OpenVMS-8.4 Alpha platform.
    • These files (both text as well as binary) are sent by contractors and can be as large as 500 MB
      • we can go higher but have decided to block anything over 500 MB because we haven't gotten around to buying more drives
    • Anyway, this is all done with a little bit of HTML, CGI and CSWS-2.2 (we employ the HTTP POST method)

New Problem

  • We are currently running CSWS-2.2-1 on the new Itanium and I just learned that we can't upload any file greater than 61 KB
    • Thinking this could be a MultiNet problem, I flopped our stack back to TCPIP Services where the limit jumped to 140 KB
    • Our code was written in VMS-BASIC so I quickly banged out a C-based test-tool just to convince myself this problem had nothing to do with the Basic-RTL
  • Downgrading to CSWS-2.2 fixed the problem (HP was notified on 2015-10-08)
Curiosity Killed The Cat (satisfaction brought it back)
  • I've got an old Alpha junker sitting in the corner with OpenVMS-8.4 installed. Just out of curiosity, I installed the Alpha version of CSWS-2.2-1 and it worked properly.
  • So this problem only affects Itaniums
Quick Fix (2015-11-13)
  • HPE just informed me that the problem has been isolated to module APACHE$APR_SHR.EXE and that the module from 2.2 can be used to make 2.2-1 work properly
Final Fix (2015-11-27)

Day 18 (important miscellaneous stuff)

Third Party Software (we can't live without)
  • DELIVER
  • MUNPACK (ver 1.5)
    • we need this to gracefully extract attachments from MIME-based emails
    • http://www.decuslib.com/DECUS/freewarev50/mpack15/
    • supports VAX, Alpha
    • modify these two files then invoke a make tool like mms or mmk (we use mmk) and a c-compiler
      • link.com
      • descript.mms
    • caveat: other sites offer MPACK/MUNPACK versions 1.6a and 1.6b which do supply Itanium binaries. However, they add new UNIX functionality for all OSs (like not writing out a file if it already exists). This isn't an issue on OpenVMS systems due to the ability of Files-11 to include a file version number. Anyway, if you use 1.6 then you must supply an additional command line switch to disable the new features.
  • ZIP + UNZIP
    • For the time being we will be using BACKUP to create nightly savesets which need to be zipped before sending across a network to our archival platform in another city. Very large savesets can only be zipped by an updated version of zip. Your can get ZIP-3.0 and UNZIP-6.0 here: ftp://ftp.info-zip.org/pub/infozip/vms/ but really large savesets should be compressed using gzip which you can get here: http://antinode.info/dec/sw/gzip.html (gzip is much faster than either bpzip or bzip2)
Other
  • SYSUAF Proxy
    • Our webserver makes proxied DECnet connections to our Alpha (no password is sent across when we do RMS file operations over the DECnet cable) so you only need to remember how to enable the proxy feature in SYSUAF then bang them in

Day 19 (supported drives limitations)

  • We are not going to purchase a tape system (our DRP plan would require at least two) so instead will produce nightly backup save-sets to an independent drive
    • We are going to compress the files then FTP them to a hot-standby system in another city
  • So we ordered two more drives which brings us from 4 to 6 then repeated the UEFI procedures above to run ORCA (Option Rom Configuration for Arrays)
  • ORCA displayed the following message:
     
    You cannot create another logical drive. You have reached
    the maximum number of logical drives on this controller

  • What? The rx2800 manual clearly states that this server can support 1 to 8 drives. Now I haven't seen any official documents from HPE but lots of people are claiming we need to purchase an optional SAS Cache Memory Module

Day 20 (drive limitations removed)

  • we ordered an SAS Cache Memory Module 512 MB  (578882-001) and Cache Super Capacitor and Cable (587324-001)
  • we installed them will little difficulty (experienced computer room techs with more than 30 years experience)
    • contrary to the manual, the capacitor clips onto the PCI riser assembly just above the slot holding the SAS Cache Module
    • the capacitor cable plugs into a little socket on the SAS Cache Module but you won't see it until you remove the module from the anti-static envelope
    • you remembered to wear your anti-static strap, right?
  • after power-up we saw console messages about firmware seeing the cache then charging the capacitor (I think it is the equivalent of one 8 Farad capacitor traditional power supplies would first see as a dead short; hence the need to have software and hardware perform a controlled charging operation)
    • that was not a typo; it is the equivalent of 8,000,000 uF
  • running ORCA from the UEFI Shell (see above) allowed us to configure two new stand-alone drives
    • we now have 6 drives
    • slots 1 + 2 are joined as one RAID-1 volume set
    • slots 3 + 4 are joined as one RAID-1 volume set
    • slot 6 is a backup copy of our system disk which will only be used during emergencies
    • slot 5 is a standalone scratch to be used as the destination for numerous backup operations from DCL
      • Our backup strategy has changed. Since this machine has 4 NICs capable of running 1 Gb/s we grabbed two of them to create:
        1. a private DECnet network which only runs through our computer room
        2. a private TCP/IP network which also runs through our computer room as well as to an adjacent office
          • a Windows-7 PC's in the office is running a server instance of FileZilla and is connected to this network
          • we purchased ten One Terabyte USB drives which will be the destination for unzipped savesets
          • it is someone's job to change the drive every day, update a paper log, then courier the driver to another location across town
      • During an emergency recovery someone only needs a PC to FTP savesets back to the recovery host
  • observations:
    • now all disk operations are noticeably faster but I can't provide you with any before-after benchmarks
    • if you are using the SAS drives for primary storage then install this kit even if you do not need additional storage. The increased performance is worth the price.
    • when I first heard the phrase "super capacitor" I assumed it was just a marketing phrase but I was wrong (click: https://en.wikipedia.org/wiki/Supercapacitor ). Hopefully this change by HP will put an end to the constant reordering of replacement 4.8V MEH Batteries found in their onboard RAID controllers from the mid-2000's

Day 21 (the cutover)

  • The cutover was totally uneventful. A 100% success.
    • Well, perhaps only 99%. We missed a few rinky-dink items caused by lapses in our own documentation. This is an area we intend to improve.
    • The cut-over was done on a Sunday, and the following Monday was a national holiday so only a skeleton staff used the system. Thus means that 99% of the rinky-dink stuff was fixed before before the clients hit the system on Tuesday
    • Most clients only noticed everything was a lot faster (perceived slow-downs are almost always related to the corporate Intranet or client PCs)

What a long strange trip this has been...

  • Hardware
    • this home-grown soup-to-nuts business system started life on a used 32-bit VAX-730 in 1991
    • maintenance being the poor kid in town, our system migrated to computer hardware abandoned by other departments including: VAX-750, uVAX-3500, uVAX-4300, then finally VAX-6430 (while hardware was free we always had to buy software licenses)
    • it was migrated to a used AlphaServer-4100 in 2001 then to a new AlphaServer-DS20e in 2002
    • it was migrated to a new Itanium rx2800-i2 in 2016
  • Software 1991
    • our data was 100% ISAM (RMS)
    • our code was 90% VAX-BASIC linked to FMS (forms management system) with 10% DCL
    • we only employed DECnet with a little XCOM
    • TCP/IP came in 1992 in the form of TCPware (there where no TCP/IP products available from DEC for VAX/VMS in those days)
    • ~200 users employed VT-220 terminals to access the system via serial connections (dialup modems, dedicated modems, limited distance modems, LAT-based terminal servers)
  • Software 2016
    • our data is now 50% ISAM (RMS) and 50% Relational (MySQL/MariaDB)
    • our code is 60% VMS-BASIC, 10% DEC-C/C++, 10% DCL, 20% JavaScript (including jQuery, and AngularJS)
    • ~1400 users employ three major browsers (Chrome, Firefox, IE11) to access the system via TCP/IP
      • they authenticate against a home-brewed application called the ProfileDB which allows us to have longer user names than would be possible with SYSUAF
    • green-screen access is restricted to developers and system admins

Summary (so far)

  • What a neat platform. Upon first blush this rx2800 appears ten times more powerful than our existing AlphaServer DS20e but at one quarter the cost.
    • by cost I mean both HP hardware (rx2800-i2) and licensed HP software (OpenVMS, DEC-C, DEC-C++, VMS-BASIC, FMS-DVLP)
      • production-only platforms will reduce software costs by not including licensed development tools like compilers
      • others might save more by purchasing used hardware from the third-party market
    • OpenVMS boots in 36 seconds from the UFEI shell prompt (includes starting DECnet IV, TCPIP Services, DECwindows/Motif, Apache, and MariaDB)
       
  • I previously remember saying: I didn't think there was any argument (outside of not being in possession of your source code) for not porting "from VAX to Alpha".
  • Now I am forced to say the same thing about porting "from Alpha to Itanium". In fact, I highly recommend it.
     
  • While I have no doubt that our platform will eventually be migrated again to OpenVMS on x86-64 when VSI finishes their OS port, our 13-year-old Alpha was starting to give us some grief so we just couldn't wait any longer.

Project-02 : rx2660

Day 1 (fetch units; initial power up tests)

rx2660
Itanium rx2660
Front Panel LEDs
  • I just acquired two rx2660 servers were about to be junked by another department (periodic harware referesh) so I jumped in the van to retrieve them before they made it to the crusher
    • All the drives had been degaussed then crushed for security reasons so I ordered four new HP SAS 146 GB drives to begin testing
  • After connecting a VGA monitor and USB keyboard, the servers boot to a GUI setup screen which can be flipped to so-called legacy mode
    • GUI mode: white text on a blue background at the top; blue text on a gray windows below
    • Legacy Mode: yellow text on a black background
  • Specs:
    • firmware was published in 2008 (updated to 2014)
    • two dual-core CPU modules
      • 1.65 GHz clock with 9 MB of cache ( Montecito )
    • 16 GB of memory
    • two RJ-45 style 1000 Base-T network connections
    • iLO (integrated lights out module)
      • includes a private LAN port
    • two hot-swappable power supplies
  • What a neat system! It is almost as easy to set up as a new PC (more or less)
  • Like VAX before it, this appears to be the end of DEC Alpha technology in our shop; but OpenVMS still lives here!

Day 2 (installing drives; installing OpenVMS)

  • New drives arrived today so I slotted two of them.
  • After inserting my two I can still only see the DVD from the EFI Shell.
  • You can run "map -r" all day but will not see the new drives until you run the ORCA (Option Rom Configuration for Arrays) Utility to tell the P400 controller that the drives are, or not, part of a RAID set. After that just run "bcfg" (boot configuration).
  • Once this was done, I booted the OpenVMS DVD
  • Like the rx2800 above, on a VGA monitor you will see ~ 120 dots (on one and a half lines) at which point you must continue with a serial connection to the iLO port if you wish to see OpenVMS boot messages as well as any other errors
  • Like the rx2800 above, the real-time-clock will continue to prompt for the date-time at boot until "you install the load an OpenVMS license" -AND- "install OpenVMS-8.4 update 500"
  • Unlike the rx2800-i2 above, this unit will recognize more than four drives without the requirement for optional controller memory (neat!)

Day 3 (updating firmware and other stuff)

  • Our group has an active software support agreement with HP/HPE which allowed me to download the HPOFM (HP Offline Firmware Management) utility. This is an ISO image which you burn to a CD-ROM then boot in your Itanium server. This utility advanced my firmware dates from 2008 to 2013 in ~ 7 minutes. Slick!
  • caveat for anyone who is tempted to work on the CPU:
    • each CPU is installed in a ZIF (zero insertion force) socket. This means you must used the provided wrench to unlock the socket pins before removing the CPU
    • you must also unlock the socket pins before installing a new unit unit then lock the pins afterward.
    • see page 48 of HPE Integrity rx2660 Server User Service Guide for the details
  • well that's all I'm going to post here. This is slick technology and I wished we could have used it to replace our Alpha Servers 5-years ago.

Day 4 (optional: Installing Linux on Itanium)

Common Stuff

Comparing UEFI to EFI

At first blush you might think that the graphics-based setup associated with EFI systems may be of some use to you but you would be wrong.

  • many things can be seen in GUI mode (like whether "CPU threading" is enabled or disabled) but can only be changed from text mode (also called legacy mode).
    • this can be "text mode on a VGA monitor" or "text mode on a character cell terminal over the iLO port"
  • there is a boot command associated with EFI but the only way to boot this UEFI system is via the bcfg (boot configuration) utility.
  • don't waste your time with the VGA monitor unless you are doing a training session; the fastest way to set up any Itanium system is over the iLO port or the 9-pin Async Port

Monitoring RAID disks with MSA

  • During my computer-room walk-through today (2018-11-09), I noticed one failed disk (#5) on scs-node KAWC09
  • This got me thinking: what was the best way to monitor firmware-managed disks from OpenVMS? Perhaps I could write a DCL script that invokes the MSA utility.
  • Anyway, just swapping the disk didn't fix anything so here are some notes to get around that. Notes are in RED and what I typed are in YELLOW
    reminder:
    • (physical) DISKS number from 1 and are associated with slot numbers.
    • (logical) UNITS number from 0 and are composed of one, or more, disks.
    • only UNITS are presented to OpenVMS; if you do not define any units then you will not have any available storage
================================================================================
title   : neil_msa_20181109.txt
purpose : detailed notes from a RAID adventure on 2018-11-09
platform: OpenVMS (Itanium) on an rx2660 hosting a P400 RAID controller
msa-docs: HP OpenVMS System | Management Utilities Reference | Manual: M-Z
          Order Number: BA555-90009
overview: DISK-5 (which is part of logical unit-1 on my RAID) has just been
	    replaced but the new disk needs to be coaxed back into action
facts   : DISK-1 is the only member of UNIT-0 (so no RAID)
	: DISKS 2-to-7 are members of UNIT-1 (RAID-5)
	: DISK-8 is the only member of UNIT-2 (so no RAID) but is currently
	    deslotted so I can perform some hot backups
	: I may reconfig this array sometime in the future so do not take these
	  settings as gospel
notes	1) use the MSA utility if a RAID controller is present; otherwise use the
	   SAS utility
	2) "MSA$UTIL.EXE" is the OpenVMS utility required to do this. So use
	    these DCL statements to create two symbolic DCL commands:
		$ MSA == "$sys$system:msa$util.exe"
			(MSA works with all my machines)
		$ SAS :== $sys$system:sas$util.exe
			(SAS works with my P400 on the rx2600)
			(SAS does not work with my rx2660)
			(SAS does not work with my P410 on the rx2800)
	3) in the MSA utility, physical DISKs begin numbering from "1"
	4) in the MSA utility, logical UNITs begin numbering from "0"
	5) eject the bad disk; wait 10 seconds
	6) insert the new disk; wait up to 30 seconds (I have proved this by
	   continually executing "show disk 5")
================================================================================
KAWC09(DVLP)::Neil>					! this is my DCL prompt
KAWC09(DVLP)::Neil> msa					!
MSA> set cont *
MSA> show unit 1

Unit 1:
In PDLA mode, Unit 1 is Lun 1.
Cache status      : enabled
Max Boot Partition: Unknown
Volume status     : VOLUME using interim recovery mode
 1 Disk(s) Failed or Removed:				<<< whoops
   Disk 5: (SCSI bus 1, SCSI id 3)			<<< whoops
6 Data Disk(s) used by lun 1:
   Disk 7: Partition 0; (SCSI bus 1, SCSI id 1)
   Disk 6: Partition 0; (SCSI bus 1, SCSI id 2)
   Disk 5: Partition 255; (SCSI bus 1, SCSI id 3)
   Disk 4: Partition 0; (SCSI bus 1, SCSI id 4)
   Disk 3: Partition 0; (SCSI bus 1, SCSI id 5)
   Disk 2: Partition 0; (SCSI bus 1, SCSI id 6)
Spare physical drives:
   No spare drives are designated.
Logical Volume Raid Level: RAID 1.  Mirroring
                           stripe_size=128.0KB
Logical Volume Capacity : 410.10 [440.35] GB
MSA>
================================================================
	force the new DISK back into the existing UNIT
================================================================
MSA> scan all
MSA> start recover
Rebuild operation is triggered for Units.
Issue SHOW UNIT command to know the status of the Units.
MSA> show unit 1

Unit 1:
In PDLA mode, Unit 1 is Lun 1.
Cache status      : enabled
Max Boot Partition: Unknown
Volume status     : VOLUME is currently recovering	<<< better
  ( Percentage complete 8 ) 				<<< better
6 Data Disk(s) used by lun 1:
   Disk 7: Partition 0; (SCSI bus 1, SCSI id 1)
   Disk 6: Partition 0; (SCSI bus 1, SCSI id 2)
   Disk 5: Partition 0; (SCSI bus 1, SCSI id 3)	<<< this thing is now back
   Disk 4: Partition 0; (SCSI bus 1, SCSI id 4)
   Disk 3: Partition 0; (SCSI bus 1, SCSI id 5)
   Disk 2: Partition 0; (SCSI bus 1, SCSI id 6)
Spare physical drives:
   No spare drives are designated.
Logical Volume Raid Level: RAID 1.  Mirroring
                           stripe_size=128.0KB
Logical Volume Capacity : 410.10 [440.35] GB
MSA> exit
================================================================
	some time later
================================================================
KAWC09(DVLP)::Neil> msa
MSA> set cont *
MSA> show unit 1

Unit 1:
In PDLA mode, Unit 1 is Lun 1.
Cache status      : enabled
Max Boot Partition: Unknown
Volume status     : VOLUME OK			<<< cool
 6 Data Disk(s) used by lun 1:
   Disk 7: Partition 0; (SCSI bus 1, SCSI id 1)
   Disk 6: Partition 0; (SCSI bus 1, SCSI id 2)
   Disk 5: Partition 0; (SCSI bus 1, SCSI id 3)
   Disk 4: Partition 0; (SCSI bus 1, SCSI id 4)
   Disk 3: Partition 0; (SCSI bus 1, SCSI id 5)
   Disk 2: Partition 0; (SCSI bus 1, SCSI id 6)
Spare physical drives:
   No spare drives are designated.
Logical Volume Raid Level: RAID 1.  Mirroring
                           stripe_size=128.0KB
Logical Volume Capacity : 410.10 [440.35] GB
MSA> 
MSA> exit
KAWC09(DVLP)::Neil>

Reconfiguring a RAID for OpenVMS (P400 on rx2660)

overview:

  1. I am now working on an OpenVMS system where the user data disks are protected by a RAID scheme while the system disk is not (yikes!). Since I intend to retire in three years, I want these systems to be more easily maintainable (swap a bad drive on the fly - then coax with MSA rather than taking the system down)
  2. Up until this year, I was under the impression that bootable OpenVMS system disks were difficult to copy because the UEFI/EFI files where stored in a FAT-32 partition (as they are on most modern UNIX and Linux systems). I was wrong (read on to learn more)
  3. Our current RAID looks like this:
    Disk (physical) 1 2 3 4 5 6 7 8
    Units (logical) 1 2
    Configuration JBOD RAID-1+0 JBOD
    Application SYSTEM USER1  Emergency SYSTEM
    but I want this:
    Disk (physical) 1 2 3 4 5 6 7 8
    Units (logical) 0 hot
    spare
    for unit 0
    1 hot
    spare
    for unit 1
    2 3
    Configuration RAID-1   RAID-1   JBOD JBOD
    Application SYSTEM   USER1   target for
    hot backup
    of USER1
    target for
    hot backup
    of SYSTEM

steps


first copy the data disk (RAID to single drive):
  1. use the $backup utility to copy dka1 to dka2 (either "from DCL after you boot the OpenVMS DVD" -or- "from OpenVMS provided the system is quiescent")
    $ mount dka1:/over=ident
    $ init  dka2: abcdef
    $ mount dka2:/for
    $ backup/image/ignore=(noback,inter) dka1: dka2:
  2. reboot the DVD (or OpenVMS system disk) but be sure to enter ORCA (online raid configuration utility) before the media is accessed.
    1. delete all unit definitions (do not do this unless you have good backups)
    2. move the new USER1 drive from slot 8 to slot 7
    3. move the old SYSTEM drive from slot 1 to slot 8
    4. create UNIT-0
      • assign disks 1 + 2 configured as RAID-1+0
        • I only want RAID-1 but this controller does not offer that choice
        • since we are only using two drives the controller will only implement mirroring (RAID-1)
      • assign disk 3 as a hot spare (type 's' on the disk you want)
    5. create UNIT-1
      • assign disks 4 + 5 configured as RAID-1+0
        • I only want RAID-1 but this controller does not offer that choice
        • since we are only using two drives the controller will only implement mirroring (RAID-1)
      • assign disk 6 as a hot spare
    6. create UNIT-2
      • assign disk 7 as JBOD (just a bunch of drives)
    7. create UNIT-3
      • assign disk 8 as JBOD (just a bunch of drives)

now copy both JBOD drives back to two RAID sets

  1. exit the ORCA utility then allow the DVD to continue to boot
    • you will see dots displayed on the VGA terminal for the next 5-minutes
    • now all output will only be seen on the serial console or iLO port (never on the VGA terminal)
  2. At the menu, press "8" to spawn to a process with a DCL prompt
    $ show device d						! view the disks (show see four)
    $!------------------------------------------------------
    $ mount dka3:/over=ident				! mount the copied SYSTEM volume
    $ init  dka0:/stru=5 abcdef				! init new SYSTEM volume; "/stru=5" is probably not required
    $ mount dka0:/foreign					!
    $ backup/image/ignore=(noback) dka3: dka0:		! "noback" is required for page + swap files
    $ dismount dka0:					!
    $ mount dka0:/over=ident				!
    $ set def dka0:[sys0.syscommon.sysmgr]			!
    $ @ BOOT_OPTIONS					! repair entries in the UEFI/EFI boot manager
    $ dismount dka0:					! this RAID volume is ready for use
    $!------------------------------------------------------
    $ mount dka2:/over=ident				! mount the copied USER1 volume
    $ init  dka1:/stru=5 abcdef				! init new USER1 volume; "/stru=5" is probably not required
    $ mount dka1:/foreign					!
    $ backup/image/ignore=(noback,inter) dka2: dka1:	! "noback" just incase
    $ dismount dka2:					!
    $ mount dka2:/over=ident				!
    $ show dev/full dka2:					! -+- do these appear to be similar in size?
    $ show dev/full dka3:					! -+
    $ dismount dka2:					!
    $ dismount dka3:					!
    $-------------------------------------------------------
    $! caveat: if you want to make disk-8 (unit-3) available for an emergency boot disk,
    $! then you must mount the disk then execute script SYS$MANAGER:BOOT_OPTIONS on that disk
    $! to repair (or create) the boot entry for the emergency disk  
  3. Comment: contrary to popular belief, the OpenVMS system disk is not partitioned. There is no FAT-32 partition to hold the UEFI/EFI boot files. However, this file "SYS$SYSDEVICE:[VMS$COMMON.SYS$LDR]SYS$EFI.SYS" is a special file which can be found then read/executed by the EFI/UEFI boot loader.

Reconfiguring a RAID for OpenVMS (P410i on rx2800-i2)

overview:

  1. I wanted to put my newly acquired MSA skills to good use by hardening our production system (rx2800-i2). That system has two RAID sets and I wanted to add two HOT-SPARES from MSA$UTIL so I would not need to take the system down (it has been running continuously for over 18-month)
  2. Our current RAID looks like this:
    Disk (physical) 1 2 3 4 5 6 7 8
    Units (logical) 0 1 2 2 empty empty
    Configuration RAID-1 RAID-1 JBOD JBOD    
    Application SYSTEM USER1 UTILITY emergency
    SYSTEM
       
    but I want this
    Disk (physical) 1 2 3 4 5 6 7 8
    Units (logical) 0 1 2 3 hot spare
    for unit 0
    hot spare
    for unit 1
    Configuration RAID-1 RAID-1 JBOD JBOD    
    Application SYSTEM USER1 UTILITY emergency
    SYSTEM
       

Steps

  1. I ordered two new 300 GB drives from HP then slotted them (this was done with the system running)
  2. I had no problems assigning disk-7 as a spare to unit-0 like so:
    MSA> set cont *
    MSA> set unit 0 /spare=7
  3. I was not able to assign disk-8 as a spare to unit-1 as the following display will show
    MSA> set cont *
    MSA> set unit 1 /spare=8
    This logical drive has been configured with a later version of
    an Array Configuration Utility.
    It is not safe to use this program to make changes.
    Adding or modification of Raid Unit failed.
    MSA> exit
    $
  4. I know that RAID unit-0 was built by HP in Singapore because that's the way it was delivered to Canada. I know that RAID unit-1 was built from the ORCA (Option Rom Configuration for Arrays) by me three years ago. So why has HP (now HPE) allowed the firmware to get ahead of program MSA$UTIL ???
    update: this alert (for an rx2660) shows that HP is aware of the problem
    https://support.hpe.com/hpsc/doc/public/display?docId=emr_na-c03452640
     
  5. Apparently I only have two ways forward
    1. Reboot the system then use the firmware tool (ORCA) to assign disk-8 to unit-1
    2. Partially shutdown the system (being sure to close all the files on the VMS volume associated with unit-1)
      • use $BACKUP to copy all of unit-1 to disk-8 (temporarily configured as JBOD)
      • use MSA$UTIL to delete the definition of unit-1
      • use MSA$UTIL to recreate unit-1
      • use $BACKUP to copy all of disk-8 to unit-1
      • use MSA$UTIL to add disk-8 to unit-1 as a hot-spare

Building an iLO Maintenance Network

  • first off, iLO is an acronym created by HP which means "integrated Lights Out". Other companies used terms like: IRC (Integrated Remote Console), RMC (Remote Management Console) to only name two of many.
  • this technology was created to support computers installed in large data centers where there was no space (or desire) for a rarely sued dedicated console monitor.
  • one neat feature of the iLO module is the multi-speed Ethernet port which is first configured from the console
    • you need to set the IP address and mask; optionally change the maintenance access password; optionally configure other software
  • in some large corporations you would just requisition an internal IP address but this may cost your department some annual money -AND- possibly expose your console to internal hacking
  • most computers built in the last decade contain four NICs which means for my small organization (inside a large company) it makes more sense to build a private iLO Maintenance Network
  • So this is how things looked last week:
    • All connections marked "primary network" connected to a CISCO thingy
    • All connection marked "mtce-network-1" are connected via an inexpensive 8-port hub. This network is used to certain types of online backups as well as remote maintenance. For example, it is now possible to reconfigure the primary network connection from a remote location provided you can get to one of the other boxes
    • Likewise, all connection marked "mtce-network-2" are connected via an inexpensive 8-port hub.
               One of six units                  One of one units               One of three units
      +------------------------------+ +------------------------------+ +------------------------------+
      | DL385p_gen8 (CentOS-7.7)     | | rx2800-i2 (OpenVMS-8.4)      | | rx2660 (OpenVMS-8.4)         |
      | NIC-1 primary network (IPv4) | | NIC-1 primary network (IPv4) | | NIC-1 primary network (IPv4) |
      | NIC-2 mtce-network-1  (IPv4) | | NIC-2 mtce-network-1  (IPv4) | | NIC-2 DECnet-IV              |
      | NIC-3 mtce-network-2  (IPv6) | | NIC-3 mtce-network-2  (IPv6) | |                              |
      | NIC-4 (proposed iLO Network) | | NIC-4 DECnet-IV              | |                              |
      | iLO   n/c                    | | iLO   n/c                    | | iLO   n/c                    |
      +------------------------------+ +------------------------------+ +------------------------------+
    • But just look at those unconnected iLO ports. They are just begging to be connected to one of the maintenance networks. When this is done, you might never need to drag out a VT220 terminal ever again
  • so I put all the iLO ports on a 192.168 network connected by an 8-port hub which is only available from some unused NICs on my CentOS platforms

External Links


 Back to Home
Neil Rieck
Waterloo, Ontario, Canada.