Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

romed8ctl

Remote control for the ASRock Rack ROMED8-2T and ROMED8-2T/BCM — including changing BIOS settings without a browser, a Java/HTML5 KVM, or a physical keyboard.

$ romed8ctl bios enter
reset issued; waiting for the Aptio Setup screen ...
in BIOS Setup

$ romed8ctl bios show link-speed
PCIE1 Link Speed             GEN4
PCIE2 Link Speed             GEN4
PCIE3 Link Speed             GEN4
...

$ romed8ctl bios set link-speed PCIE3=GEN3 PCIE4=GEN3 PCIE5=GEN3 --save
PCIE3 -> GEN3
PCIE4 -> GEN3
PCIE5 -> GEN3
saving (host will reboot) ...

Why this exists

The obvious ways to script BIOS changes on this board do not work:

Approach Result on BMC 2.08.00 / BIOS P4.10
Redfish PATCH /Systems/Self/Bios/SD 404 — resource not found (also with X-Auth-Token session auth)
Redfish PATCH /Systems/Self/Bios 405 — method not allowed
GET /Registries/BiosAttributeRegistry… 404 — the registry the BIOS resource advertises isn't served
Legacy /api/* web endpoints no BIOS endpoints at all
ipmitool sol to reach a shell host has no serial getty
SSH to the BMC drops into a crippled "SMASHLITE" console
H5Viewer via a minted kvmtoken /api/viewerlogin401 unless the token was minted by that browser session

What does work: the BIOS Setup screen is rendered over IPMI Serial-over-LAN. romed8ctl opens a SOL session, parses the ANSI stream into an 80×25 screen, and sends keystrokes — so Setup becomes fully scriptable.

Reads still go over Redfish (fast, and exposes all 743 BIOS attributes), writes go over SOL.

Install

pipx install git+https://github.com/felkru/romed8ctl
# or
git clone https://github.com/felkru/romed8ctl && cd romed8ctl && pip install -e .

Requires ipmitool and script on your PATH (both standard):

sudo apt install ipmitool bsdutils     # Debian/Ubuntu
brew install ipmitool                  # macOS

Configuring BMC access

1. Create/prepare a BMC user

In the BMC web UI: Settings → User Management → click a user slot. The profile form has these fields:

  • Username / Password — an account with Administrator privilege.
  • Network Privilege: Administrator (required for IPMI-over-LAN and SOL).
  • SNMP Access — optional; only tick it if you actually want SNMP. romed8ctl does not use SNMP. If you enable it, SHA256 + AES are the sane choices.
  • Upload SSH Key — optional. It gives you ssh admin@<bmc>, but on this firmware that lands in a SMASHLITE console that can't do anything useful. romed8ctl does not need it.

The only thing that actually matters is an Administrator account whose credentials you can hand to ipmitool.

2. Enable IPMI over LAN and SOL

Settings → Services — make sure IPMI (and Redfish, for the read-only commands) are enabled and not restricted to an interface you can't reach.

SOL is on by default; confirm with:

ipmitool -I lanplus -H <bmc-ip> -U admin -P '<pass>' sol info

You want Enabled : true and Payload Channel : 1.

3. Enable BIOS console redirection ← the important one

Without this the BIOS never writes to the serial port and every bios command returns a blank screen. It is on by default on most ROMED8-2T units; verify once using the physical console or the H5Viewer:

BIOS → Advanced → Serial Port Console Redirection

  • Console RedirectionEnabled (for the SOL/COM port)
  • Terminal TypeVT100+ or ANSI
  • Bits per second115200
  • Flow ControlNone

These match romed8ctl's defaults (115200 8N1, 80×25).

4. Store credentials

Keep the password out of your shell history and out of ps:

mkdir -p ~/.config/romed8ctl
printf 'machine 10.0.0.5 login admin password SECRET\n' > ~/.config/romed8ctl/netrc
chmod 600 ~/.config/romed8ctl/netrc

Then either pass --host 10.0.0.5 or export ROMED8_BMC_HOST=10.0.0.5. $ROMED8_BMC_USER / $ROMED8_BMC_PASS also work if you prefer environment variables.

Usage

romed8ctl info                     board / BIOS / BMC versions and power state
romed8ctl pages                    list known BIOS pages, their settings and legal values
romed8ctl power status|on|off|shutdown|reset|reboot|cycle
romed8ctl sol [--seconds N]        capture the serial console (POST messages, etc.)

romed8ctl bios enter               reboot into Setup and wait for it
romed8ctl bios screen              render the current Setup screen
romed8ctl bios show <page>         print one settings page
romed8ctl bios set <page> SLOT=VALUE... [--save]
romed8ctl bios send "right;down;enter" [--show]     raw keystrokes
romed8ctl bios save                F10, confirm, reboot
romed8ctl bios dump [--filter RE]  all BIOS attributes (Redfish, read-only)

Pages

page BIOS location settings values
link-speed Advanced → Chipset Configuration → AMD PCIE Link Speed PCIE1PCIE7, OCU1, OCU2, M2_1, M2_2 Auto GEN4 GEN3 GEN2 GEN1
link-width Advanced → Chipset Configuration → AMD PCIE Link Width PCIE1, PCIE2/M2_1, PCIE3PCIE7 x16 x8x8 x8x4x4 x4x4x8 x4x4x4x4
hotplug Advanced → Chipset Configuration → AMD PCIE Hotplug PCIE1PCIE7, OCU1, OCU2 Disabled Enabled
csm Boot → CSM CSM, per-slot OpROM Disabled Enabled Auto

Typical session:

romed8ctl bios enter
romed8ctl bios show link-width
romed8ctl bios set link-width PCIE3=x16 PCIE4=x16
romed8ctl bios set hotplug PCIE3=Enabled --save

Values are changed by cycling with + and re-reading the screen until the target value appears, so it stays correct even if option ordering differs on another BIOS revision.

Things worth knowing about this board

Collected the hard way while debugging a 6-GPU build:

  • Physical slot order is the reverse of the BIOS names. Counting from the CPU outward, the first slot is PCIE7 and the last is PCIE1.
  • nvidia-smi showing Gen1 at idle is normal. NVIDIA GPUs downshift the link to save power. Always measure pcie.link.gen.current under load before concluding you have a signal-integrity problem.
  • AER CAP ships disabled, so PCIe errors are never logged — "no AER errors in dmesg" proves nothing until you enable it (Advanced → AMD CBS → NBIO Common Options).
  • A warm reboot may not reset cabled-PCIe retimers. Use power cycle (a real S5 power-down with a hold) when a retimered link comes up wrong.
  • Don't set bifurcation you don't need. x8x8 on slots that carry a single x16 link can hang POST at PCIe enumeration once the board is densely populated.
  • Slots report In Use with bus address 0000:ff:1f.7 when the presence pin is asserted but the link never trained — i.e. the card is physically connected but its far end isn't responding (frequently: no aux power to the card).
  • One SOL session at a time. romed8ctl deactivates stale sessions on connect; if you also have the H5Viewer open, expect fights.

Safety

romed8ctl never prints your password, never passes it on a command line you didn't write, and only ever changes the settings you name. bios set refuses to run unless the host is actually in Setup. There is no "load defaults" command on purpose.

Changing BIOS settings on a remote machine can leave it unbootable. Make sure you have a way to clear CMOS before you script anything adventurous.

Compatibility

Developed against ROMED8-2T/BCM, BIOS P4.10, BMC 2.08.00. The menu maps in romed8ctl/bios.py are BIOS-revision-specific; if a page has moved, bios send lets you navigate manually and PAGES is a two-line fix. Other ASRock Rack AMI boards will likely work with adjusted paths.

License

MIT

About

Remote control for ASRock Rack ROMED8-2T / ROMED8-2T-BCM: scripted BIOS changes over IPMI Serial-over-LAN, plus power and Redfish diagnostics

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages