Integricloud gave me access to their infrastructure to track some issues on ppc64 and ppc64le.
Since some of the issues are related to the compilers, I obviously installed Gentoo on it and in the process I started to fix some issues with catalyst to get a working install media, but that’s for another blogpost.
Today I’m just giving a walk-through on how to get a ppc64le (and ppc64 soon) VM up and running.
Preparation
Read this and get your install media available to your instance.
Install Media
I’m using the Gentoo installcd I’m currently refining.
Booting
You have to append console=hvc0
to your boot command, the boot process might figure it out for you on newer install medias (I still have to send patches to update livecd-tools)
Network configuration
You have to manually setup the network.
You can use ifconfig
and route
or ip
as you like, refer to your instance setup for the parameters.
ifconfig enp0s0 ${ip}/16
route add -net default gw ${gw}
echo "nameserver 8.8.8.8" > /etc/resolv.conf
ip a add ${ip}/16 dev enp0s0
ip l set enp0s0 up
ip r add default via ${gw}
echo "nameserver 8.8.8.8" > /etc/resolv.conf
Disk Setup
OpenFirmware seems to like gpt much better:
parted /dev/sda mklabel gpt
You may use fdisk
to create:
– a PowerPC PrEP boot partition of 8M
– root partition with the remaining space
Device Start End Sectors Size Type
/dev/sda1 2048 18431 16384 8M PowerPC PReP boot
/dev/sda2 18432 33554654 33536223 16G Linux filesystem
I’m using btrfs
and zstd-compress /usr/portage
and /usr/src/
.
mkfs.btrfs /dev/sda2
Initial setup
It is pretty much the usual.
mount /dev/sda2 /mnt/gentoo
cd /mnt/gentoo
wget https://dev.gentoo.org/~mattst88/ppc-stages/stage3-ppc64le-20180810.tar.xz
tar -xpf stage3-ppc64le-20180810.tar.xz
mount -o bind /dev dev
mount -t devpts devpts dev/pts
mount -t proc proc proc
mount -t sysfs sys sys
cp /etc/resolv.conf etc
chroot .
You just have to emerge grub
and gentoo-sources
, I diverge from the defconfig by making btrfs
builtin.
My /etc/portage/make.conf
:
CFLAGS="-O3 -mcpu=power9 -pipe"
# WARNING: Changing your CHOST is not something that should be done lightly.
# Please consult https://wiki.gentoo.org/wiki/Changing_the_CHOST_variable beforee
changing.
CHOST="powerpc64le-unknown-linux-gnu"
# NOTE: This stage was built with the bindist Use flag enabled
PORTDIR="/usr/portage"
DISTDIR="/usr/portage/distfiles"
PKGDIR="/usr/portage/packages"
USE="ibm altivec vsx"
# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C
ACCEPT_KEYWORDS=~ppc64
MAKEOPTS="-j4 -l6"
EMERGE_DEFAULT_OPTS="--jobs 10 --load-average 6 "
My minimal set of packages I need before booting:
emerge grub gentoo-sources vim btrfs-progs openssh
NOTE: You want to emerge again
openssh
and make surebindist
is not in yourUSE
.
Kernel & Bootloader
cd /usr/src/linux
make defconfig
make menuconfig # I want btrfs builtin so I can avoid a initrd
make -j 10 all && make install && make modules_install
grub-install /dev/sda1
grub-mkconfig -o /boot/grub/grub.cfg
NOTE: make sure you pass
/dev/sda1
otherwise grub will happily assume OpenFirmware knows aboutbtrfs
and just point it to your directory.
That’s not the case unfortunately.
Networking
I’m using netifrc and I’m using the eth0-naming-convention.
touch /etc/udev/rules.d/80-net-name-slot.rules
ln -sf /etc/init.d/net.{lo,eth0}
echo -e "config_eth0=\"${ip}/16\"\nroutes_eth0="default via ${gw}\"\ndns_servers_eth0=\"8.8.8.8\"" > /etc/conf.d/net
Password and SSH
Even if the mticlient
is quite nice, you would rather use ssh
as much as you could.
passwd
rc-update add sshd default
Finishing touches
Right now sysvinit
does not add the hvc0
console as it should due to a profile quirk, for now check /etc/inittab
and in case add:
echo 'hvc0:2345:respawn:/sbin/agetty -L 9600 hvc0' >> /etc/inittab
Add your user and add your ssh key and you are ready to use your new system!
One thought on “Gentoo on Integricloud”