Skip to content
Beta v0.5 · powerpc64le · PowerVM · 359 MB

FreeBSD, on IBM Power

FreeBSD 15 on a PowerVM LPAR, with a matching pkg repo for ppc64le.

sha256 5de43314fe04ad4b393fb47017c8a3c5e180f441b4b8463fb0897cd66d154c36
What this is

FreeBSD 15 on PowerVM, with pkg on ppc64le.

FreeBSD ships powerpc64le releases. On a PowerVM LPAR they fail before the kernel loads. This image carries the missing boot patches and ships a matching pkg repo for the arch.

powerpc64le PowerVM LPAR pkg on ppc64le ZFS on ppc64le
Boot capture

First boot on a PowerVM LPAR.

Handoff from platform firmware into the patched FreeBSD kernel, then userland up.

console · freebsd@pi-workspace
FreeBSD on IBM Power booting on a PowerVM LPAR — terminal capture

mad02 workspace · s1022 shared partition · SSH from a laptop.

Deploy

Deploy on PowerVS.

Before you start

Four things, same region.

  • WorkspaceWhere your partitions live. Created once, under Power Virtual Server.
  • SubnetAttached to the workspace. Public if you want SSH from your laptop.
  • COS bucketMust be in us-south, even from a Madrid workspace. Import reads from here.
  • HMAC credentialsService credential with HMAC option ticked, else keys come back empty.
$ ibmcloud login
$ ibmcloud plugin install power-iaas
$ ibmcloud plugin install cloud-object-storage
Put the bucket in us-south, even if your workspace is in Madrid. Bucket in eu-es fails at imageDownload in under 30 seconds with a message that never mentions the region. Bucket in us-south imports in ~4 minutes.
1

Verify the download

No OK, no continue.

$ sha256sum -c librepower-freebsd-beta_v0.5.ova.gz.sha256
2

Upload to COS

$ ibmcloud cos upload \
    --bucket       <bucket> \
    --key          librepower-freebsd-beta_v0.5.ova.gz \
    --file         librepower-freebsd-beta_v0.5.ova.gz \
    --region       <region> \
    --content-type application/gzip
3

Target the workspace

Use the CRN. The console short id won't work.

$ ibmcloud pi workspace list
$ ibmcloud pi workspace target <CRN>
4

Import the image

Returns a job id. Poll it.

$ ibmcloud pi image import freebsd-beta \
    --image-file-name librepower-freebsd-beta_v0.5.ova.gz \
    --bucket       <bucket> \
    --region       <region> \
    --access-key   <hmac-key> \
    --secret-key   <hmac-secret> \
    --storage-tier tier3

$ ibmcloud pi job get <job-id>
5

Create the partition FOOTGUN

Read the storage pool from the image you imported. A wrong pool returns a rejection with no useful message.

$ ibmcloud pi image get <image-id>          # note the storage pool

$ ibmcloud pi instance create freebsd-1 \
    --image          <image-id> \
    --subnets        <subnet-id> \
    --memory         <GB> \
    --processors     <count> \
    --processor-type shared \
    --sys-type       <system type> \
    --storage-tier   tier3 \
    --storage-pool   <pool from image get>

$ ibmcloud pi instance get <instance-id>   # wait for ACTIVE
Two addresses come back: internal (for the console) and external (for SSH). External only appears on a public subnet.
6

Open the console

Log in as root / freebsd (password expired, choose a new one), then configure the network by hand.

$ ibmcloud pi instance console get <instance-id>
Networking

The IP is in the panel. Not on the wire.

PowerVS assigns an address to each LPAR but never serves it over DHCP. Waiting for a lease hangs forever.

Configure the interface once from the console with the values in the partition's network panel — IP with prefix, gateway, MAC. Persist with sysrc(8).

MTU 1450, not 1500. The subnet runs at 1450; if the interface stays at 1500, small packets pass but TLS handshakes hang silently. If HTTPS looks broken on a working network, check the MTU first.
Two interfaces show up (llan0/llan1). Only one faces the platform network — the one whose MAC matches the panel. Confirm with ifconfig | grep -B3 ether.
platform console · root
# Match the MAC to pick the interface
# ifconfig | grep -B3 ether
 
# Bring it up (MTU 1450 is critical)
# ifconfig llan1 inet 192.168.239.13/29 mtu 1450
# route add default 192.168.239.9
 
# Persist across reboots
# sysrc ifconfig_llan1="inet 192.168.239.13/29 mtu 1450"
# sysrc defaultrouter="192.168.239.9"
 
fetch -o /dev/null https://librepower.org
First boot

The daemon says hi.

pkg is on ppc64le already. Upstream repo off — it would only error.

# pkg update
# pkg install htop vim
login · librepower-freebsd
FreeBSD 15.1-RELEASE welcome screen on IBM POWER10 — ZFS, jails, pf
Inside the image

Userland on ppc64le.

ZFS

Root on a ZFS pool. Datasets, snapshots, send/recv, mirror and raidz vdevs. Pool grows to your volume; vdev remove where the topology supports it.

pkg on ppc64le

LibrePower repo enabled by default. Upstream disabled — it doesn't build for this arch. Repo grows as we build; request what's missing.

pf firewall

Loaded and rate-limiting new SSH by default. Small ruleset, meant to be extended with your policy.

FAQ

Short answers.

Why doesn't the upstream image work?
Boot-path patches aren't in tree yet. FreeBSD publishes powerpc64le releases; the PowerVM LPAR changes are carried in this image.
Production ready?
v0.5 beta, tested end to end in mad02 and mad04. Reboot works cleanly (fixed since v0.1). Fine for eval, lab and pre-production. Production case-by-case — email us.
Which repo does pkg use?
LibrePower repo for powerpc64le. Upstream disabled — it doesn't build for this arch.
Missing a package?
Repo grows as we build. Ask at hello@librepower.org. Community requests jump the queue.
Need enterprise support?
The image is free and self-contained. Commercial support (SLA, hardening, custom ports, compliance docs) is available on top — email hello@librepower.org.
Report a bug?
Email hello@librepower.org with uname -a, ibmcloud pi instance get, and what you saw vs what you expected.

Feed the daemon.

Beta v0.5 · 359 MB. What you break decides what v0.6 fixes.

hello@librepower.org