Showing posts with label PRIMERGY. Show all posts
Showing posts with label PRIMERGY. Show all posts

Good Bye, Folks!

As you may have heard, Fujitsu has completely discontinued Data Center Products and Solutions business in North America on April 1st, 2021. Therefore I no longer work for the company. Since I don't have a PRIMERGY server at home, I will not post any new blog entries. I will leave this blog as is, but I may not be able to answer your questions.


Thank you for reading my blog over the past years. I really appreciate it. Although Fujitsu closed the data center business in the US, they still sell PRIMERGY/PRIMEQUEST/PRIMEFLEX/ETERNUS in other regions and support is provided in all regions including North America (for NA via Tech Data/Synnex), so you should be good.


Anyway, if you have or know a job opportunity, please let me know.


Thank you,
Masa

Fujitsu PRIMERGY: Get iRMC Advanced Video Redirection (AVR) Console via CLI

I was asked how to get an iRMC AVR Console window from command line on GitHub. That may be useful for others, so I am sharing the information on my blog.

To get a JNLP file from iRMC S2, S3, and S4, you just need to download avr.jnlp using curl like this

$ curl -s -k -u <iRMC user>:<iRMC password> --digest https://<iRMC address>/avr.jnlp -o avr.jnlp
Example
$ curl -s -k -u admin:admin --digest https://192.168.10.10/avr.jnlp -o avr.jnlp
If you would like to lauch console in one line, you just need to use a pipe to run javaws.
$ curl -s -k -u admin:admin --digest https://192.168.10.10/avr.jnlp -o avr.jnlp |javaws avr.jnlp
For iRMC S5, the above may not work. In that case, get a session token and then download a JNLP file.
$ TOKEN=`curl -i -s -k -u admin:admin -H "Accept: application/json" -H"Content-Type: application/json" https://192.168.10.10/redfish/v1/SessionService/Sessions -d '{"UserName":"admin", "Password":"admin"}' |grep "X-Auth-Token" |awk -F':' '{print $2}'`
$ curl -k -s -H "X-Auth-Token: ${TOKEN}" https://192.168.10.10/avr.jnlp -o avr.jnlp
You can create a small script to automate the above. Here is a sample bash script.
#!/bin/bash

CURL=`which curl`
JAVAWS=`which javaws`

function show_usage() {
    echo ""
    echo "Usage:"
    echo "    $(basename $0) -i  [-u ] [-p ]"
    echo ""
    exit 1
}

function get_irmcs4_console() {
    local irmc=$1
    local user=$2
    local password=$3

    if [ -f avr.jnlp ]; then
        rm -f avr.jnlp
    fi

    ${CURL} -k -s -u ${user}:${password} --digest https://${irmc}/avr.jnlp -o avr.jnlp

    if [ $? -eq 0 -a -f avr.jnlp ]; then
        ${JAVAWS} avr.jnlp
    fi
}

function get_irmcs5_console() {
    local irmc=$1
    local user=$2
    local password=$3

    if [ -f avr.jnlp ]; then
        rm -f avr.jnlp
    fi
    TOKEN=$(${CURL} -i -s -k -u admin:admin -H "Accept: application/json" -H"Content-Type: application/json" https://${irmc}/redfish/v1/SessionService/Sessions -d "{\"UserName\": \"${user}\", \"Password\": \"${password}\"}" |grep "X-Auth-Token" |awk -F':' '{print $2}')

    if [ -z ${TOKEN} ]; then
        echo "ERROR: Could not get the auth token from iRMC"
        exit 1
    else
        ${CURL} -k -s -H "X-Auth-Token: ${TOKEN}" https://${irmc}/avr.jnlp -o avr.jnlp
    fi

    if [ $? -eq 0 -a -f avr.jnlp ]; then
        grep "jnlp" avr.jnlp
        if [ $? -ne 0  ]; then
            echo "ERROR: HTML5 Viewer is used in iRMC"
        else
            ${JAVAWS} avr.jnlp
        fi
    fi
}

while getopts 'i:u:p:h' OPT
do
    case ${OPT} in
        i) iRMC_ADDR=${OPTARG}
            ;;
        u) iRMC_USER=${OPTARG}
            ;;
        p) iRMC_PASS=${OPTARG}
            ;;
        h) show_usage
            ;;
        \?) show_usage
            ;;
    esac
done
shift $((OPTIND - 1))

if [ -z ${iRMC_ADDR} ]; then
    echo "ERROR: iRMC address/name/FQDN is not provided. Please use the '-i' option."
    exit 1
fi

if [ -z ${iRMC_USER} ]; then
    iRMC_USER="admin"
fi

if [ -z ${iRMC_PASS} ]; then
    iRMC_PASS="admin"
fi


${CURL} -s -k https://${iRMC_ADDR}/ | grep "iRMC S5" > /dev/null

if [ $? -eq 0 ]; then
    get_irmcs5_console ${iRMC_ADDR} ${iRMC_USER} ${iRMC_PASS}
    exit
fi

${CURL} -s -k https://${iRMC_ADDR}/ | grep "iRMC S[2-4]" > /dev/null

if [ $? -eq 0 ]; then
    get_irmcs4_console ${iRMC_ADDR} ${iRMC_USER} ${iRMC_PASS}
    exit
fi

echo "ERROR: Could not access the iRMC"
exit 1

Fujitsu PRIMERGY: iRMC Redfish sample Python scripts

In the following Blog post, I showed some Redfish examples using the curl command.

Fujitsu iRMC Redfish Examples

I created some sample Python scripts for iRMC Redfish that perform the following operations:

  • Power on/off/reset
  • Reset iRMC
  • Check the current firmware versions
  • Backup BIOS/iRMC configuration
  • Change boot device
  • Get/Clear SEL/iEL
  • Get/Set iRMC time configuration
  • Get/Set System ID LED status
  • iRMC Auto Discovery

The scripts are available on GitHub.

Fujitsu iRMC Redfish samples scripts

I will add more samples later.

Fujitsu PRIMERGY: Configuring the initial iRMC network using iRMC auto discovery and Redfish

As you probably know, iRMC S5 supports auto discovery. Fujitsu has management software like Infrastructure Manager (ISM) that supports iRMC auto discovery, so when a new iRMC S5 based system like PRIMERGY M4 or M5 is installed in a rack, and power and network cables are attached to the server, management software automatically sees the new server on the network, and you can configure the iRMC network without bringing up BIOS Setup to set the management IP address to iRMC on a crash cart or a KVM.

iRMC S5 auto discovery feature is based on SSDP (Simple Service Discovery Protocol). It's a standard protocol, so you don't have to use proprietary software to use the auto discovery feature in fact.

To show how to use auto discovery feature, I created a sample small script in Python that lists discovered systems on the network using SSDP, and configure iRMC network for a new system. You can get the script on GitHub.

In the 'show' mode, it lists all 'auto discovered' systems on the network. If the address shows '0.0.0.0', it does not have an address yet. It's like the initial state just after it's racked and cabled. In the following example, two RX2540 M5 servers are newly installed in a rack, and both don't have iRMC addresses configured. Others already have iRMC configured, so the IP addresses are shown.

$ python irmc-auto-discovery.py show
Model: PRIMERGY CX2560 M5, S/N: MAAG001111, IPv4: 192.168.71.59
Model: PRIMERGY CX2550 M5, S/N: MAAF002222, IPv4: 192.168.71.63
Model: PRIMERGY RX2540 M5, S/N: MASQ001234, IPv4: 0.0.0.0
Model: PRIMERGY RX2540 M5, S/N: MASQ002345, IPv4: 0.0.0.0
Model: PRIMERGY RX2530 M5, S/N: MALU005432, IPv4: 192.168.71.27
Model: PRIMERGY RX4770 M5, S/N: MATJ006543, IPv4: 192.168.71.37

In the 'configure' mode with the network information specified, the script assigns the supplied address to iRMC. In the example, it assigns 192.168.71.29/24 and gateway 192.168.71.1 to the RX2540 M5 S/N: MASQ001234. After the script completes the configuration, it will take a few minutes for iRMC to update the network settings. Once iRMC completes the update, you can access the iRMC with the IP address you set.

$ python irmc-auto-discovery.py configure -s MASQ001234 -a 192.168.71.29 -m 255.255.255.0 -g 192.168.71.1 
The iRMC network has been configured successfully. Please wait for a few minutes for iRMC to activate the new configuration.

Fujitsu PRIMERGY: Change the boot device via Redfish

This post will explain how to change the boot device with the next boot only option enabled through iRMC Redfish interface. This is equivalent to the IPMI command like "ipmitool chassis bootdev <bootdevice>".
For example, if you want to do a PXE boot to perform an OS installation, you probably execute "ipmitool -H <iRMC address> -U <iRMC username> -P <iRMC password> chassis bootdev pxe". You can request the same to iRMC via Redfish in case you can't use IPMI like for security reasons.

To do this, first you need to check the current settings and the etag information, and then send a request in JSON to iRMC. See below for the steps.

  1. Send a GET request to the "Systems/0/Oem/ts_fujitsu/BootConfig" endpoint to see the current options and the Etag information.
  2. $ curl -s -k -u admin:admin -H"Content-Type: application/json" https://irmc address/redfish/v1/Systems/0/Oem/ts_fujitsu/BootConfig |jq '{BootDevice, BootType, NextBootOnlyEnabled, "@odata.etag"}'
    {
      "BootDevice": "None",
      "BootType": "UEFI",
      "NextBootOnlyEnabled": false,
      "@odata.etag": "1595025885"
    }
    
    As you can see, the BootDevice option shows None, so the system is currently booting from the device that is in the top of the boot device list like a local drive.
    The reason why I displayed the @odata.etag option is that changing the boot device is a PATCH request, so the Etag information needs to be included in the request header. See the next step for details.

  3. Send a PATCH request to the same endpoint. In this example, I use "PXE" as the boot device for the next boot.
    $ curl -s -k -u admin:admin -H"Content-Type: application/json" -H"If-Match: 1595025885" -X PATCH https://irmc address/redfish/v1/Systems/0/Oem/ts_fujitsu/BootConfig -d '{"BootDevice": "Pxe", "BootType": "UEFI", "NextBootOnlyEnabled": true}' |jq .
    {
      "@odata.context": "/redfish/v1/$metadata#Systems/Members/0/Oem/ts_fujitsu/BootConfig(Name,BootDevice,BootType,NextBootOnlyEnabled)",
      "@odata.id": "/redfish/v1/Systems/0/Oem/ts_fujitsu/BootConfig",
      "@odata.type": "http://ts.fujitsu.com/redfish-schemas/v1/FTSSchema.v1_0_0#FTSBootConfig.v1_0_0.FTSBootConfig",
      "Name": "Boot Configuration",
      "BootDevice": "Pxe",
      "BootType": "UEFI",
      "NextBootOnlyEnabled": true,
      "@Redfish.Copyright": "Copyright 2017-2018 FUJITSU LIMITED",
      "@odata.etag": "1595025925"
    }
    
  4. Note that I included the "If-Match: <etag data>" option in the request. iRMC will change the boot device if the etag information in the request matches the current value.
    If you want to change the boot device to CDROM or bring up BIOS Setup during the next boot, you can just use "Cd" or "BiosSetup" respectively for the BootDevice option.

If you would like to use "BootSourceOverrideTarget" in the Systems/0 endpoint instead of "Systems/0/Oem/ts_fujitsu/BootConfig", send a PATCH request with the data like this to Systems/0.

$ curl -s -k -u admin:admin -H"Content-Type: application/json" -H"If-Match: <etag data>" -X PATCH https://irmc address/redfish/v1/Systems/0 -d '{ "Boot": {"BootSourceOverrideTarget": "Pxe",  "BootSourceOverrideEnabled":"Once"}}' |jq '{Boot}'
{
  "Boot": {
    "BootSourceOverrideTarget": "Pxe",
    "BootSourceOverrideTarget@Redfish.AllowableValues": [
      "None",
      "Pxe",
      "Floppy",
      "Cd",
      "Hdd",
      "BiosSetup"
    ],
    "BootSourceOverrideEnabled": "Once",
    "BootSourceOverrideEnabled@Redfish.AllowableValues": [
      "Once",
      "Continuous"
    ],
    "BootSourceOverrideMode": "UEFI"
  }
}

Fujitsu PRIMERGY RX2530 M4 BIOS ASP for Ubuntu (BIOS R1.43.0)

This is related to the iRMC ASP for Ubuntu blog post. I've created RX2530 M4 BIOS R1.43.0 ASP for Ubuntu just to show that it's technically possible to create a BIOS ASP package for Ubuntu if in-band update is required/preferred.

The default package does not support Ubuntu, so you need to run the ASP with the "-nos" option to bypass the OS check.

$ sudo ./RX2530M4_D3383_A1_BiosV50012_R1430.scexe -e -nos

***************** PRIMERGY Autonomous Support Package ***************

Description: Flash BIOS RX2530 M4
VersionMajor: V5.0.0.12
VersionMinor: R1.43.0
VersionBuild: 1.0.0
Software Class - Category: Flash - BIOS
Software Class - Name: (SV) Flash Bios
Vendor: Fujitsu

*********************************************************************

Continue processing this ASP?
Please answer: yes/y or no/n
y
Extracting data into /tmp/sctmpdir6541 ...
done

Like I did for the iRMC ASP, change the shell in the scripts in the package (do_deskflash.sh and do_SelectTool.sh) from sh to bash. For the do_deskflash.sh, some changes are required as this is for RPM-based distributions, so you need to change rpm commands to dpkg, and adjust RPM package names to DEB package names.

You will also need to add Ubuntu statement in the DF_Packages.txt file like this:

$  diff -Nau work_bios_r1.43.0.orig/DF_Packages.txt work_bios_r1.43.0/DF_Packages.txt
--- work_bios_r1.43.0.orig/DF_Packages.txt      2020-05-28 04:22:41.882733700 -0700
+++ work_bios_r1.43.0/DF_Packages.txt   2020-07-06 18:00:37.689422065 -0700
@@ -8,3 +8,4 @@
 RHEL6.10            DeskFlash_Linux_01.75-0064_old.zip
 RHEL7.5%RHEL7.7     DeskFlash_Linux_01.80-0083.zip
 RHEL8.0%RHEL8.1     DeskFlash_Linux_01.80-0083.zip
+UBUN16.04%UBUN20.04 DeskFlash_Linux_01.80-0083.zip

DeskFlash_Linux_01.80-0083.zip is in the DeskFlash_Linux.zip archive. In DeskFlash_Linux_01.80-0083.zip, the deskflash RPM is included, so this needs to be changed to a DEB file (I created deskflash_1.80-0083_amd64.deb), and zip up all files to DeskFlash_Linux.zip.

The startup script does not support Ubuntu, so you need to add Ubuntu to the OS list so that you don't need to run the ASP with the "-nos" option.

diff -Nau RX2530M4_D3383_A1_BiosV50012_R1430.sh.orig RX2530M4_D3383_A1_BiosV50012_R1430.sh
--- RX2530M4_D3383_A1_BiosV50012_R1430.sh.orig  2020-07-10 17:41:00.597159834 -0700
+++ RX2530M4_D3383_A1_BiosV50012_R1430.sh       2020-07-02 12:36:03.151041117 -0700
@@ -152,6 +152,7 @@
 OS_CHECKLIST[4]="RHEL6.10"
 OS_CHECKLIST[5]="RHEL7.5%RHEL7.7"
 OS_CHECKLIST[6]="RHEL8.0%RHEL8.1"
+OS_CHECKLIST[7]="UBUN16.04%UBUN20.04"
 OS_CHECKLIST_END=""

 _EXCLUDE_32BIT_OS=false;

Once all the changes are made, you can package everything up to the SCEXE file, and run it.

Here are the screenshots when I run the modified/hacked BIOS R1.43.0 ASP for RX2530 M4 on Ubuntu.

Once it is run successfully, you need to reboot the server to enable the new BIOS.

Fujitsu PRIMERGY: How to check BIOS Version through IPMI

This is related to the previous post (How to check iRMC Firmware Version through IPMI). In this post, I explain how to check the BIOS version via IPMI.

If you are in the OS, you can easily get the BIOS version information by a command like dmidecode.

$ dmidecode -t0 |grep Version
        Version: V5.0.0.12 R1.42.0 for D3384-A1x
Remotely, you can use SSH or PowerShell to get the BIOS version, but this requires a running OS on the remote machine, so using iRMC to get the BIOS version is good when an OS is not running or an OS is not yet installed.

To retrieve the BIOS version via IPMI, you can use the "0x2e 0xe0 0x80 0x28 0x00 0x01 0x00 0x02 0x02" command. Below is an example from RX2540 M4.

$ ipmitool -I lanplus -H 192.168.10.10 -U admin -P admin raw 0x2e 0xe0 0x80 0x28 0x00 0x01 0x00 0x02 0x02 |tr '\n' ' '
 80 28 00 1f 56 35 2e 30 2e 30 2e 31 32 20 52 31
 2e 34 32 2e 30 20 66 6f 72 20 44 33 33 38 34 2d
 41 31 78
The BIOS version string can be decoded from the 5th byte. In the above case, it's "56 35 2e 30 2e 30 2e 31 32 20 52 31 2e 34 32 2e 30 20 66 6f 72 20 44 33 33 38 34 2d 41 31 78". You just need to convert the hex values to ascii characters to see the actual string.

Here is an example.

$ for c in $(ipmitool -I lanplus -H 192.168.10.10 -U admin -P admin raw 0x2e 0xe0 0x80 0x28 0x00 0x01 0x00 0x02 0x02 |tr '\n' ' ' | cut -d' ' -f6-); do echo -n $c |xxd -r -p; done; echo ""
V5.0.0.12 R1.42.0 for D3383-A1x
In the above example, as you can see, the response shows the BIOS version is "V5.0.0.12 R1.42.0 for D3383-A1x".

Fujitsu PRIMERGY: How to check iRMC Firmware Version through IPMI

You can check what iRMC firmware version is used via standard IPMI commands like "ipmitool mc info".

$ ipmitool mc info
Device ID                 : 5
Device Revision           : 2
Firmware Revision         : 1.00
IPMI Version              : 2.0
Manufacturer ID           : 10368
Manufacturer Name         : Fujitsu Technology Solutions GmbH (formerly 'Fujitsu Siemens Computers')
Product ID                : 1300 (0x0514)
Product Name              : Unknown (0x514)
Device Available          : yes
Provides Device SDRs      : no
Additional Device Support :
    Sensor Device
    SDR Repository Device
    SEL Device
    FRU Inventory Device
    IPMB Event Receiver
    IPMB Event Generator
    Chassis Device
Aux Firmware Rev Info     :
    0x02
    0x31
    0x00
    0x50

To get the information remotely, add "-H <irmc address>", "-U <irmc user>", and "-P <irmc password>" options.

$ ipmitool -H <irmc address> -U <irmc user> -P <irmc password> mc info

You can see 0x02 0x31 0x00 0x50 under "Aux Firmware Rev Info", and you can convert 0x02 0x31 to decimal and you get 2.49. 0x50 is the suffix character, and can be converted to 'P'. Therefore 0x02 0x31 0x00 0x50 means 2.49P.
You can also get the same by sending "0x06 0x01" to iRMC like this:

$ ipmitool -I lanplus -H 192.168.10.10 -U admin -P admin raw 0x06 0x01
 05 02 01 00 02 bf 80 28 00 14 05 02 31 00 50
The last four fields "02 31 00 50" are the firmware version. You can format the response so that you can easily see the version like this.
$ ipmitool -I lanplus -H 192.168.10.10 -U admin -P admin raw 0x06 0x01 |while read line; do printf "%d.%d\x${line[0]:42:2}\n" ${line[0]:33:2} "0x${line[0]:36:2}"; done
2.49P

As you probably know, iRMC has two images, one active and one backup, or high firmware and low firmware, or EEPROM1 and EEPROM2. You can get the firmware version for each image via IPMI.
To get the high firmware image version or the EEPROM1 version, use "0x2e 0xf5 0x80 0x28 0x00 0x12 00". To get the low firmware image or EEPROM2 version, use "0x2e 0xf5 0x80 0x28 0x00 0x12 01".

Here is an example from RX2540 M4.

EEPROM1
$ ipmitool -I lanplus -H 192.168.182.97 -U admin -P admin raw 0x2e 0xf5 0x80 0x28 0x00 0x12 00 |while read line; do printf "%d.%d\x${line[0]:27:2} SDR %d.%d\n" ${line[0]:18:2} "0x${line[0]:21:2}" ${line[0]:30:2} ${line[0]:33:2}; break; done
2.42P SDR 3.80
EEPROM2
$ ipmitool -I lanplus -H 192.168.182.97 -U admin -P admin raw 0x2e 0xf5 0x80 0x28 0x00 0x12 01 |while read line; do printf "%d.%d\x${line[0]:27:2} SDR %d.%d\n" ${line[0]:18:2} "0x${line[0]:21:2}" ${line[0]:30:2} ${line[0]:33:2}; break; done
2.46P SDR 3.82

You can also check which image (high or low, or EEPROM1 or EEPROM2) is active via IPMI. For iRMC S4/S5 (PRIMERGY S8 or later), use "0x2e 0xf5 0x80 0x28 0x00 0x07 0x07". For iRMC S2/S3 (PRIMERGY S7 or earlier), use "0x08 0x05".

Here are examples.

iRMC S4/S5
$  ipmitool -I lanplus -H 192.168.182.97 -U admin -P admin raw 0x2e 0xf5 0x80 0x28 0x00 0x07 0x07
 80 28 00 02
The last field (in the above example, it's "02") indicates high or low (or EEPROM1 or EEPROM2). If it's "01", it's high (EEPROM1), and if it's "02", it's low (EEPROM2). iRMC S2/S3
$  ipmitool -I lanplus -H 192.168.182.175 -U admin -P admin raw 0x08 0x05
 00 01
Same as iRMC S4/S5. The last field (in the above example, it's "01") indicates high or low (or EEPROM1 or EEPROM2). If it's "01", it's high (EEPROM1), and if it's "02", it's low (EEPROM2).

Fujitsu PRIMERGY RX2530 M4 iRMC ASP for Ubuntu

Although Fujitsu does not officially support iRMC Firmware Update ASP for Linux on Ubuntu, you can use ASP to update iRMC firmware. I know some customers prefer using in-band firmware update method over using iRMC (or out-of-band), so having an ASP to update iRMC on Ubuntu would be helpful for those customers.

By default, do_SelectTool.sh in the ASP is using /bin/sh. On Ubuntu, /bin/sh is dash by default, so the script will fail. To avoid this, you just need to change the script shell from /bin/sh to /bin/bash. Then repackage it to scexe.

To extract the contents from an ASP file, use the '-e' option

$ ./RX2530M4_MangtCtr_FW0263P_SDR352.scexe -e

Then modify do_SelectTool.sh, and package it again to scexe. The only difference between the original and the modified is as follows:

$ diff -Naur work_irmc_2.63p_asp.orig/ work_irmc_2.63p_asp/
diff -Naur work_irmc_2.63p_asp.orig/do_SelectTool.sh work_irmc_2.63p_asp/do_SelectTool.sh
--- work_irmc_2.63p_asp.orig/do_SelectTool.sh   2020-07-08 16:33:06.731898828 -0700
+++ work_irmc_2.63p_asp/do_SelectTool.sh        2020-07-08 16:34:18.320056431 -0700
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash

 # ==============================================================================
 # Copyright 2017 FUJITSU LIMITED

I tested iRMC ASP for Linux 2.49P and 2.63P for RX2530 M4 running Ubuntu. Below is an example for RX2530 M4 iRMC ASP 2.63P for Linux on Ubuntu 16.04. The scexe file is a modified version of RX2530M4_MangtCtr_FW0263P_SDR352.scexe.

Fujitsu ServerView Agents 9.20-14 for Ubuntu

I have created ServerView Agents 9.20-14 packages for Ubuntu. I only tested them on Ubuntu 16.04 and 18.04, but I think it will work on 20.04 as well.

Here are the deb packages. I changed the names from serverview-xxxx.deb to srvmagt-xxxx.deb to use the same naming as the original RPM packages.

  • serverview-connectorservice_2.32.00-01_amd64.deb
  • srvmagt-mods-src_9.20-14_amd64.deb
  • srvmagt-eecd_9.20-14_amd64.deb
  • srvmagt-agents_9.20-14_amd64.deb
  • ssmwebui_9.20-14_amd64.deb

Below are some screenshots.

If you need them, please open a support case with your regional Fujitsu support, and ask for the package.

As you may have heard, Fujitsu America will cease the datacenter hardware product business (PRIMERGY/PRIMEQUEST servers, ETERNUS storage, and Fujitsu PSwitch Ethernet switches) including platform product related solutions business like PRIMEFLEX. My job will also be terminated, so this will probably be the last update for ServerView Agents for Ubuntu I create.
Fujitsu will continue to support Fujitsu servers/storage arrays/switches for North American customers, so the remaining support group may create ServerView packages for Ubuntu in the future. Please ask your Fujitsu support to see if they have updated packages when you need them.

Fujitsu ServerView RAID Manager 7.2.6 for Ubuntu

I have created ServerView RAID Manager 7.2.6 package for Ubuntu (serverview-raid-manager_7.2-6_amd64.deb). This is primarily for my Ubuntu 16.04 and 18.04 servers, but I believe it will work in Ubuntu 20.04 too.


If you need it, please open a support case with your regional Fujitsu support, and ask for the package.

As you may have heard, Fujitsu America will cease the datacenter hardware product business (PRIMERGY/PRIMEQUEST servers, ETERNUS storage, and Fujitsu PSwitch Ethernet switches) including platform product related solutions business like PRIMEFLEX. My job will also be terminated, so this will probably be the last update for ServerView RAID Manager for Ubuntu I create.
Fujitsu will continue to support Fujitsu servers/storage arrays/switches for North American customers, so the remaining support group may create ServerView packages for Ubuntu in the future. Please ask your Fujitsu support to see if they have updated packages when you need them.

openSUSE Leap 15.1 on Fujitsu PRIMERGY RX2540 M4/M5

I heard a customer who would like to use openSUSE Leap on PRIMERGY RX2540 M4/M5. Although it's not officially supported, since SUSE Linux Enterprise Server (SLE or SLES) 15 is supported, openSUSE Leap should work.

I quickly tested openSUSE Leap 15.1 on RX2540 M4 with ServerView Suite (ServerView Agent for Linux and ServerView RAID Manager), and everything seems to work ok.
One thing to check is the onboard X722 network port driver (i40e). Fujitsu provides the OEM driver (i40e 2.10.19.30) for SLES 15 SP1 and this is required to use the latest firmware for X722, but this driver cannot be used for openSUSE Leap 15.1 as the driver is not built for the openSUSE kernel. That means you need to build the i40e driver 2.10.19.30 from the source code. You can obtain the source code from the Intel download site, or from Sourceforge (https://sourceforge.net/projects/e1000/files/i40e%20stable/2.10.19.30/).

When compiling the i40e driver, you probably see the following errors:

$ make
expr: non-integer argument
make[1]: Entering directory '/usr/src/linux-4.12.14-lp151.28.48'
make[2]: Entering directory '/usr/src/linux-4.12.14-lp151.28.48-obj/x86_64/default'
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_main.o
In file included from /home/mmurayama/i40e-2.10.19.30/src/i40e.h:33:0,
                 from /home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8:
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h:881:31: error: operator '&&' has no right operand
         SLE_LOCALVERSION_CODE >= KERNEL_VERSION(92,0,0) && \
                               ^~
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h:892:31: error: operator '==' has no left operand
        (SLE_LOCALVERSION_CODE == KERNEL_VERSION(6,33,0) || \
                               ^~
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h:905:31: error: operator '==' has no left operand
        (SLE_LOCALVERSION_CODE == KERNEL_VERSION(94,41,0) || \
                               ^~
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h:911:31: error: operator '==' has no left operand
        (SLE_LOCALVERSION_CODE == KERNEL_VERSION(23,0,0) || \
                               ^~
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h:924:30: error: operator '&&' has no right operand
        SLE_LOCALVERSION_CODE >= KERNEL_VERSION(25,23,0))
                              ^~
In file included from /home/mmurayama/i40e-2.10.19.30/src/i40e.h:33:0,
                 from /home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8:
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h: In function ‘_kc_macvlan_accel_priv’:
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h:6370:18: error: ‘struct macvlan_dev’ has no member named ‘fwd_priv’; did you mean ‘accel_priv’?
  return macvlan->fwd_priv;
                  ^~~~~~~~
                  accel_priv
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h: In function ‘_kc_macvlan_release_l2fw_offload’:
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h:6380:11: error: ‘struct macvlan_dev’ has no member named ‘fwd_priv’; did you mean ‘accel_priv’?
  macvlan->fwd_priv = NULL;
           ^~~~~~~~
           accel_priv
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c: In function ‘i40e_setup_tc’:
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:7565:6: error: ‘tc’ undeclared (first use in this function); did you mean ‘tm’?
  if (tc > i40e_pf_get_num_tc(pf)) {
      ^~
      tm
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:7565:6: note: each undeclared identifier is reported only once for each function it appears in
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c: At top level:
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8150:14: warning: ‘struct tc_to_netdev’ declared inside parameter list will not be visible outside of this definition or declaration
       struct tc_to_netdev *tc)
              ^~~~~~~~~~~~
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c: In function ‘__i40e_setup_tc’:
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8162:36: error: dereferencing pointer to incomplete type ‘struct tc_to_netdev’
  struct tc_mqprio_qopt *mqprio = tc->mqprio;
                                    ^~
In file included from /home/mmurayama/i40e-2.10.19.30/src/i40e.h:33:0,
                 from /home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8:
/home/mmurayama/i40e-2.10.19.30/src/kcompat.h:6258:31: error: ‘TC_SETUP_MQPRIO’ undeclared (first use in this function); did you mean ‘TC_SETUP_QDISC_PRIO’?
 #define TC_SETUP_QDISC_MQPRIO TC_SETUP_MQPRIO
                               ^
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8168:7: note: in expansion of macro ‘TC_SETUP_QDISC_MQPRIO’
  case TC_SETUP_QDISC_MQPRIO:
       ^~~~~~~~~~~~~~~~~~~~~
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8169:32: error: ‘type_data’ undeclared (first use in this function); did you mean ‘node_data’?
   return i40e_setup_tc(netdev, type_data);
                                ^~~~~~~~~
                                node_data
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8171:10: error: implicit declaration of function ‘flow_block_cb_setup_simple’; did you mean ‘flow_block_binder_type’? [-Werror=implicit-function-declaration]
   return flow_block_cb_setup_simple(type_data,
          ^~~~~~~~~~~~~~~~~~~~~~~~~~
          flow_block_binder_type
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:8162:25: warning: unused variable ‘mqprio’ [-Wunused-variable]
  struct tc_mqprio_qopt *mqprio = tc->mqprio;
                         ^~~~~~
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c: At top level:
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:13024:19: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
  .ndo_setup_tc  = __i40e_setup_tc,
                   ^~~~~~~~~~~~~~~
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:13024:19: note: (near initialization for ‘i40e_netdev_ops.ndo_setup_tc’)
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:16322:3: error: ‘const struct pci_error_handlers’ has no member named ‘reset_notify’; did you mean ‘reset_done’?
  .reset_notify = i40e_pci_error_reset_notify,
   ^~~~~~~~~~~~
   reset_done
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:16322:18: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
  .reset_notify = i40e_pci_error_reset_notify,
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/mmurayama/i40e-2.10.19.30/src/i40e_main.c:16322:18: note: (near initialization for ‘i40e_err_handler.reset_prepare’)
cc1: some warnings being treated as errors
make[3]: *** [/usr/src/linux-4.12.14-lp151.28.48/scripts/Makefile.build:325: /home/mmurayama/i40e-2.10.19.30/src/i40e_main.o] Error 1
make[2]: *** [/usr/src/linux-4.12.14-lp151.28.48/Makefile:1569: _module_/home/mmurayama/i40e-2.10.19.30/src] Error 2
make[2]: Leaving directory '/usr/src/linux-4.12.14-lp151.28.48-obj/x86_64/default'
make[1]: *** [Makefile:152: sub-make] Error 2
make[1]: Leaving directory '/usr/src/linux-4.12.14-lp151.28.48'
make: *** [Makefile:69: default] Error 2

To avoid this error, add an openSUSE Leap support to common.mk like this:

$ diff -Naur i40e-2.10.19.30.orig/ i40e-2.10.19.30/
diff -Naur i40e-2.10.19.30.orig/src/common.mk i40e-2.10.19.30/src/common.mk
--- i40e-2.10.19.30.orig/src/common.mk  2019-09-19 08:11:08.000000000 -0700
+++ i40e-2.10.19.30/src/common.mk       2020-07-07 12:40:49.211185781 -0700
@@ -176,6 +176,19 @@
 ifeq (1,$(shell ${CC} -E -dM ${CONFIG_FILE} 2> /dev/null |\
           grep -m 1 CONFIG_SUSE_KERNEL | awk '{ print $$3 }'))

+ifeq (1,$(shell ${CC} -E -dM ${CONFIG_FILE} 2> /dev/null |\
+          grep -m 1 CONFIG_SUSE_PRODUCT_OPENSUSE_LEAP | awk '{ print $$3 }'))
+
+  LOCALVERSION := $(shell ${CC} -E -dM ${CONFIG_FILE} 2> /dev/null |\
+                    grep -m 1 CONFIG_LOCALVERSION | awk '{ print $$3 }' |\
+                    cut -d'-' -f2 | sed 's/\.g[[:xdigit:]]\{7\}//')
+  LOCALVER_A := $(shell echo ${LOCALVERSION} | sed 's/^lp//' | cut -d'.' -f1)
+  LOCALVER_B := $(shell echo ${LOCALVERSION} | cut -s -d'.' -f2)
+  LOCALVER_C := $(shell echo ${LOCALVERSION} | cut -s -d'.' -f3)
+  SLE_LOCALVERSION_CODE := $(shell expr ${LOCALVER_A} \* 65536 + \
+                                        0${LOCALVER_B} \* 256 + 0${LOCALVER_C})
+  EXTRA_CFLAGS += -DSLE_LOCALVERSION_CODE=${SLE_LOCALVERSION_CODE}
+else
 ifneq (10,$(shell ${CC} -E -dM ${CONFIG_FILE} 2> /dev/null |\
          grep -m 1 CONFIG_SLE_VERSION | awk '{ print $$3 }'))

@@ -190,6 +203,7 @@
   EXTRA_CFLAGS += -DSLE_LOCALVERSION_CODE=${SLE_LOCALVERSION_CODE}
 endif
 endif
+endif

 EXTRA_CFLAGS += ${CFLAGS_EXTRA}

Then run "make".

$ make
make[1]: Entering directory '/usr/src/linux-4.12.14-lp151.28.48'
make[2]: Entering directory '/usr/src/linux-4.12.14-lp151.28.48-obj/x86_64/default'
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_main.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_ethtool.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_adminq.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_common.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_hmc.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_lan_hmc.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_nvm.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_debugfs.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_diag.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_txrx.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_ptp.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_filters.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_ddp.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_client.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_virtchnl_pf.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_dcb.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e_dcb_nl.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/kcompat.o
  CC [M]  /home/mmurayama/i40e-2.10.19.30/src/kcompat_vfd.o
  LD [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/mmurayama/i40e-2.10.19.30/src/i40e.mod.o
  LD [M]  /home/mmurayama/i40e-2.10.19.30/src/i40e.ko
make[2]: Leaving directory '/usr/src/linux-4.12.14-lp151.28.48-obj/x86_64/default'
make[1]: Leaving directory '/usr/src/linux-4.12.14-lp151.28.48'
This time, it finishes without errors. You can then install the driver with "make install".
$ sudo make install
make[1]: Entering directory '/usr/src/linux-4.12.14-lp151.28.48'
make[2]: Entering directory '/usr/src/linux-4.12.14-lp151.28.48-obj/x86_64/default'
  Building modules, stage 2.
  MODPOST 1 modules
make[2]: Leaving directory '/usr/src/linux-4.12.14-lp151.28.48-obj/x86_64/default'
make[1]: Leaving directory '/usr/src/linux-4.12.14-lp151.28.48'
Installing modules...
make[1]: Entering directory '/usr/src/linux-4.12.14-lp151.28.48'
make[2]: Entering directory '/usr/src/linux-4.12.14-lp151.28.48-obj/x86_64/default'
  INSTALL /home/mmurayama/i40e-2.10.19.30/src/i40e.ko
  DEPMOD  4.12.14-lp151.28.48-default
make[2]: Leaving directory '/usr/src/linux-4.12.14-lp151.28.48-obj/x86_64/default'
make[1]: Leaving directory '/usr/src/linux-4.12.14-lp151.28.48'
/sbin/depmod -e -F /boot/System.map-4.12.14-lp151.28.48-default  -a 4.12.14-lp151.28.48-default
Updating initramfs...
dracut: Executing: /usr/bin/dracut --force
dracut: *** Including module: bash ***
dracut: *** Including module: systemd ***
dracut: *** Including module: warpclock ***
dracut: *** Including module: systemd-initrd ***
dracut: *** Including module: i18n ***
dracut: Could not find FONT_MAP none!
dracut: *** Including module: drm ***
dracut: *** Including module: plymouth ***
dracut: *** Including module: dm ***
dracut: Skipping udev rule: 64-device-mapper.rules
dracut: Skipping udev rule: 60-persistent-storage-dm.rules
dracut: Skipping udev rule: 55-dm.rules
dracut: *** Including module: kernel-modules ***
dracut: *** Including module: lvm ***
dracut: Skipping udev rule: 64-device-mapper.rules
dracut: Skipping udev rule: 56-lvm.rules
dracut: Skipping udev rule: 60-persistent-storage-lvm.rules
dracut: *** Including module: resume ***
dracut: *** Including module: rootfs-block ***
dracut: *** Including module: suse-btrfs ***
dracut: *** Including module: suse-xfs ***
dracut: *** Including module: terminfo ***
dracut: *** Including module: udev-rules ***
dracut: Skipping udev rule: 40-redhat.rules
dracut: Skipping udev rule: 50-firmware.rules
dracut: Skipping udev rule: 50-udev.rules
dracut: Skipping udev rule: 91-permissions.rules
dracut: Skipping udev rule: 80-drivers-modprobe.rules
dracut: *** Including module: dracut-systemd ***
dracut: *** Including module: haveged ***
dracut: *** Including module: usrmount ***
dracut: *** Including module: base ***
dracut: *** Including module: fs-lib ***
dracut: *** Including module: shutdown ***
dracut: *** Including module: suse ***
dracut: *** Including modules done ***
dracut: *** Installing kernel module dependencies and firmware ***
dracut: *** Installing kernel module dependencies and firmware done ***
dracut: *** Resolving executable dependencies ***
dracut: *** Resolving executable dependencies done***
dracut: *** Hardlinking files ***
dracut: *** Hardlinking files done ***
dracut: *** Stripping files ***
dracut: *** Stripping files done ***
dracut: *** Generating early-microcode cpio image ***
dracut: *** Constructing GenuineIntel.bin ****
dracut: *** Store current command line parameters ***
dracut: Stored kernel commandline:
dracut:  rd.lvm.lv=system/swap
 rd.lvm.lv=system/root
dracut:  resume=/dev/mapper/system-swap
dracut:  root=/dev/mapper/system-root rootfstype=xfs rootflags=rw,relatime,attr2,inode64,noquota
dracut: *** Creating image file '/boot/initrd-4.12.14-lp151.28.48-default' ***
dracut: *** Creating initramfs image file '/boot/initrd-4.12.14-lp151.28.48-default' done ***
make mandocs_install
make[1]: Entering directory '/home/mmurayama/i40e-2.10.19.30/src'
Copying manpages...
make[1]: Leaving directory '/home/mmurayama/i40e-2.10.19.30/src'
Check if the i40e driver is updated.
$ modinfo i40e
filename:       /lib/modules/4.12.14-lp151.28.48-default/updates/drivers/net/ethernet/intel/i40e/i40e.ko
version:        2.10.19.30
license:        GPL
description:    Intel(R) 40-10 Gigabit Ethernet Connection Network Driver
author:         Intel Corporation, 
suserelease:    openSUSE Leap 15.1
srcversion:     9EB781BDF574D047F098566
alias:          pci:v00008086d0000158Bsv*sd*bc*sc*i*
alias:          pci:v00008086d0000158Asv*sd*bc*sc*i*
alias:          pci:v00008086d000037D3sv*sd*bc*sc*i*
alias:          pci:v00008086d000037D2sv*sd*bc*sc*i*
alias:          pci:v00008086d000037D1sv*sd*bc*sc*i*
alias:          pci:v00008086d000037D0sv*sd*bc*sc*i*
alias:          pci:v00008086d000037CFsv*sd*bc*sc*i*
alias:          pci:v00008086d000037CEsv*sd*bc*sc*i*
alias:          pci:v00008086d00000D58sv*sd*bc*sc*i*
alias:          pci:v00008086d00000CF8sv*sd*bc*sc*i*
alias:          pci:v00008086d00001588sv*sd*bc*sc*i*
alias:          pci:v00008086d00001587sv*sd*bc*sc*i*
alias:          pci:v00008086d0000104Fsv*sd*bc*sc*i*
alias:          pci:v00008086d0000104Esv*sd*bc*sc*i*
alias:          pci:v00008086d000015FFsv*sd*bc*sc*i*
alias:          pci:v00008086d00001589sv*sd*bc*sc*i*
alias:          pci:v00008086d00001586sv*sd*bc*sc*i*
alias:          pci:v00008086d00001585sv*sd*bc*sc*i*
alias:          pci:v00008086d00001584sv*sd*bc*sc*i*
alias:          pci:v00008086d00001583sv*sd*bc*sc*i*
alias:          pci:v00008086d00001581sv*sd*bc*sc*i*
alias:          pci:v00008086d00001580sv*sd*bc*sc*i*
alias:          pci:v00008086d00001574sv*sd*bc*sc*i*
alias:          pci:v00008086d00001572sv*sd*bc*sc*i*
depends:        ptp
retpoline:      Y
vermagic:       4.12.14-lp151.28.48-default SMP mod_unload modversions
parm:           debug:Debug level (0=none,...,16=all) (int)
$ sudo ethtool -i eth0
driver: i40e
version: 2.10.19.30
firmware-version: 4.11 0x80001dd7 1.2527.0
expansion-rom-version:
bus-info: 0000:3d:00.0
supports-statistics: yes
supports-test: yes
supports-eeprom-access: yes
supports-register-dump: yes
supports-priv-flags: yes
$ sudo lspci -s 0000:3d:00.0
3d:00.0 Ethernet controller: Intel Corporation Ethernet Connection X722 for 10GbE SFP+ (rev 09)

Fujitsu ServerView RAID Manager 7.1.3 for Ubuntu

I have created ServerView RAID Manager 7.1.3 package for Ubuntu (serverview-raid-manager_7.1-3_amd64.deb). This is mainly for my Ubuntu 16.04 servers, but probably works on 18.04 as well.


I can't distribute the package. If you need it, please ask your regional Fujitsu support. They may have an official one for Ubuntu.
If you are a Fujitsu customer in North America (US or Canada), please open a case with Fujitsu America and request the package. I may be able to provide it. Please understand that Fujitsu does not officially support ServerView for Ubuntu, so this will be provided as-is. Support is on a best-effort basis. If that is fine with you, I will provide the package via your Fujitsu America Service Request.

Configuring logical drives under PRAID CP400i remotely via Fujitsu iRMC REST API

My blog entry, Fujitsu PRIMERGY: Configuring RAID via iRMC REST API, explains how to use iRMC REST API to configure logical drives with the supported RAID cards. The JSON file I showed in my blog post as an example should work for all supported Fujitsu RAID cards. However, in my experience, it may not work with PRAID CP400i.

When I performed a RAID 0 logical drive creation with four HDDs under PRAID CP400i on RX4770 M2 or RX2530 M4 using the following JSON file, it failed with an error ("input parameters are invalid") even though it worked fine with other RAID cards like PRAID EP400i:

{
  "Server":{
    "HWConfigurationIrmc":{
      "@Processing":"execute",
      "Adapters":{
        "RAIDAdapter":[
          {
            "@AdapterId":"RAIDAdapter0",
            "@ConfigurationType":"Addressing",
            "Arrays":{
              "Array":[
                {
                  "@Number":0,
                  "@ConfigurationType":"Setting",
                  "PhysicalDiskRefs":{
                    "PhysicalDiskRef":[
                      {
                        "@Number":"0"
                      },
                      {
                        "@Number":"1"
                      },
                      {
                        "@Number":"2"
                      },
                      {
                        "@Number":"3"
                      }
                    ]
                  }
                }
              ]
            },
            "LogicalDrives":{
              "LogicalDrive":[
                {
                  "@Number":0,
                  "@Action":"Create",
                  "RaidLevel":"0",
                  "ArrayRefs":{
                    "ArrayRef":[
                      {
                        "@Number":0
                      }
                    ]
                  }
                }
              ]
            }
          }
        ]
      },
      "@Version":"1.00"
    },
    "@Version":"1.01"
  }
}

Here is the session log with the error.

{
  "SessionLog":{
    "Id":2,
    "Tag":"",
    "WorkSequence":"applyProfile",
    "Entries":{
      "Entry":[
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"CreateSession: Session 'applyProfile' created with id 2"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"AttachWorkSequence: Attached work sequence 'applyProfile' to session 2"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"LCMScheduler: Launch ApplyProfileParameters"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"ValidateProfile: Profile successfully validated"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"ApplyProfileParameters: Sub profile 'BiosConfig' not found"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"ApplyProfileParameters: Sub profile 'IrmcConfig' not found"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"ApplyProfileParameters: Sub profile 'AdapterConfigIrmc' not found"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"ApplyProfileParameters: Sub profile 'OSInstallation' not found"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"ApplyProfileParameters: Sub profile 'HWConfiguration' not found"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"FindSubProfile: Sub profile 'HWConfigurationIrmc' found"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"LOG-1-HWConfigurationIrmc: Start processing of Sub profile 'HWConfigurationIrmc'"
        },
        {
          "@date":"2018\/11\/26 18:07:20",
          "#text":"createRaidDatabase: System PowerOn by OOB Raid Config"
        },
        {
          "@date":"2018\/11\/26 18:07:25",
          "#text":"createRaidDatabase: PowerOn delay 176 sec"
        },
        {
          "@date":"2018\/11\/26 18:10:21",
          "#text":"createRaidDatabase: Wait for BIOS POST in Progress"
        },
        {
          "@date":"2018\/11\/26 18:10:26",
          "#text":"createRaidDatabase: BIOS POST operation is completed"
        },
        {
          "@date":"2018\/11\/26 18:10:26",
          "#text":"createRaidDatabase: RAID Controller check start"
        },
        {
          "@date":"2018\/11\/26 18:10:46",
          "#text":"createRaidDatabase: Get RAID controller information start [RAID controller count = 1 ]"
        },
        {
          "@date":"2018\/11\/26 18:10:56",
          "#text":"createRaidDatabase: Get RAID controller information complete"
        },
        {
          "@date":"2018\/11\/26 18:10:56",
          "#text":"createLogicalDrive: drv[0] Create Drive [RAID Level = 0]"
        },
        {
          "@date":"2018\/11\/26 18:10:58",
          "#text":"createLogicalDrive: drv[0] Create Drive failed: code = 0x3 : input parameters are invalid"
        },
        {
          "@date":"2018\/11\/26 18:10:58",
          "#text":"LOG-2-HWConfigurationIrmc-Error: Finished processing of Sub profile 'HWConfigurationIrmc' with status 'Error'"
        },
        {
          "@date":"2018\/11\/26 18:10:58",
          "#text":"LCMScheduler: Terminated processing of linked activity list due to execution error"
        },
        {
          "@date":"2018\/11\/26 18:10:58",
          "#text":"LCMScheduler: LCM object is being destroyed as automatic termination was configured"
        },
        {
          "@date":"2018\/11\/26 18:10:58",
          "#text":"TerminateSession: 'applyProfile' is being terminated"
        }
      ]
    }
  }
}

With some trial-and-error experiments, I found out that the Stripe parameter was needed in order for the above mentioned JSON file to work with PRAID CP400i. Below is the one that worked for PRAID CP400i.

{
  "Server":{
    "HWConfigurationIrmc":{
      "@Processing":"execute",
      "Adapters":{
        "RAIDAdapter":[
          {
            "@AdapterId":"RAIDAdapter0",
            "@ConfigurationType":"Addressing",
            "Arrays":{
              "Array":[
                {
                  "@Number":0,
                  "@ConfigurationType":"Setting",
                  "PhysicalDiskRefs":{
                    "PhysicalDiskRef":[
                      {
                        "@Number":"0"
                      },
                      {
                        "@Number":"1"
                      },
                      {
                        "@Number":"2"
                      },
                      {
                        "@Number":"3"
                      }
                    ]
                  }
                }
              ]
            },
            "LogicalDrives":{
              "LogicalDrive":[
                {
                  "@Number":0,
                  "@Action":"Create",
                  "RaidLevel":"0",
                  "ArrayRefs":{
                    "ArrayRef":[
                      {
                        "@Number":0
                      }
                    ]
                  },
                  "Stripe":{
                    "@Unit":"KB",
                    "#text":64
                  }
                }
              ]
            }
          }
        ]
      },
      "@Version":"1.00"
    },
    "@Version":"1.01"
  }
}

As you can see, the only different is the Stripe parameter for the logical drive.

$ diff raid0.json raid0_not_work_with_praid_cp400i.json
46,49d45
<                   },
<                   "Stripe":{
<                     "@Unit":"KB",
<                     "#text":64

Fujitsu ServerView Agents 8.40.12 for Ubuntu

I have ported ServerView Agents 8.40.12 for Linux to Ubuntu.

Here are the packages. eecd and eecd_mods_src are combined into serverveiw-eecd, so it has both.

  • serverview-connectorservice_2.22.00-01_amd64.deb
  • serverview-eecd_8.40-12_amd64.deb
  • serverview-agents_8.40-12_amd64.deb
  • serverview-ssmwebui_8.40-12_all.deb

Below are some screenshots.

As always. I can't distribute the packages. If you need them, please ask your regional Fujitsu support. They may have an official one for Ubuntu.

If you are a North American Fujitsu customer, please open a case with Fujitsu America and request the packages. I may be able to provide them. Please understand that Fujitsu does not officially support ServerView for Ubuntu, so they will be provided as-is. Support is on a best-effort basis. If that is fine with you, I will provide the packages via your Fujitsu America Service Request.

Fujitsu ServerView RAID Manager 6.6.11 for Ubuntu

I have created ServerView RAID Manager 6.6.11 package for Ubuntu (serverview-raid-manager_6.6-11_amd64.deb). This is mainly for my Ubuntu 16.04 servers, but it works on 14.04 and 18.04.

I can't distribute the package. If you need it, please ask your regional Fujitsu support. They may have an official one for Ubuntu.

If you are a North American Fujitsu customer, please open a case with Fujitsu America and request the package. I may be able to provide it. Please understand that Fujitsu does not officially support ServerView for Ubuntu, so this will be provided as-is. Support is on a best-effort basis. If that is fine with you, I will provide the package via your Fujitsu America Service Request.

Fujitsu World Tour 2018 in New York

Fujitsu World Tour 2018 will be held in New York, USA on May 30th, 2018. We will have Keynotes from our CEO and Micosoft, Breakout Sessions on AI, Cloud, Security, etc., Expert Talks, and Exhibitions. I will be there to show our enterprise products like PRIMERGY, PRIMEQUEST, and ETERNUS AF All-flash Storage, and provide demos on ServerView Infrastructure Manager (ISM) software with PRIMERGY and Fujitsu ToR switch.

If you have time, please come see Fujitsu solutions and products, and meet Fujitsu experts. I will be at booth 17.

Fujitsu World Tour 2018 New York

https://www.fujitsu.com/us/microsite/world-tour-2018/index.html

Fujitsu Custom ESXi 6.0 U3e Released

Fujitsu has released the latest ESXi 6.0 custom image (ESXi 6.0 U3e Build 7967664, Fujitsu v382-1). You can download the ISO image and the offline bundle from My VMware.

Fujitsu ServerView RAID Manager 6.6.5 for Ubuntu

I have updated ServerView RAID Manager on my Ubuntu 16.04.4 servers to 6.6.5 (serverview-raid-manager_6.6-5_amd64.deb) that I ported.

I can't distribute the package. If you need it, please ask your regional Fujitsu support. They may have an official one for Ubuntu.

If you are a North American Fujitsu customer, please open a case with Fujitsu America and request the package. I may be able to provide it. Please understand that Fujitsu does not officially support ServerView for Ubuntu, so this will be provided as-is. Support is on a best-effort basis. If that is fine with you, I will provide the package via your Service Request.

Fujitsu iRMC HTML5 Console

Sometimes our customers ask if there is an alternative to Java-based iRMC Advanced Video Redirection (AVR). The answer is YES. iRMC S4 and S5 support HTML5-based remove KVM. To use the HTML5-based console, you just need to enable the HTML5 viewer option

  • iRMC S5
  • Login to iRMC S5 GUI, and go to Settings --> Services --> Advanced Video Redirection (AVR). Check the HTML5 Viewer option, and click Apply.
  • iRMC S4
  • Login to iRMC S4 GUI, and go to Console Redirection --> Video Redirection. Check the HTML5 Viewer Enabled option, and click Apply.

Once the HTML5 console is enable, you can launch iRMC AVR in HTML5 mode.

As always, you can automate the process. To do that, you can use Fujitsu SCCI. The SCCI code for the iRMC AVR mode is "0x1633", so if you want to use HTML5 instead of Java, create the following XML request file:

$ vi irmc_avr_mode.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CMDSEQ>
<!-- 0: Java, 1: HTML5 -->
<CMD Context="SCCI" OC="ConfigSpace" OE="1633" OI="0" Type="SET">
  <DATA Type="xsd::integer">1</DATA>
</CMD>
</CMDSEQ>

Then send the XML file to the iRMC config interface.

$ curl -u admin:admin --data @irmc_avr_mode.xml http://<iRMC IP address>/config
<?xml version="1.0" encoding="UTF-8"?>
<Status>
<Value>0</Value>
<Severity>Information</Severity>
<Message>No Error</Message>
</Status>

Good Bye, Folks!

As you may have heard, Fujitsu has completely discontinued Data Center Products and Solutions business in North America on April 1st, 2021. ...