Debian ppc64el Installation

From an iso or tftp

This method is the classical one used to install Debian.

You can install by booting a dailymini.iso.

You can also put the kernel and initrd on a tftp server and boot from the network (vmlinux and initrd.gz are available here).

On a Power VM guest, you can use both methods. The installation from the network can be done from the SLOF or from a grub with network support.

On a Power host, both can be used too, but installation with vmlinux/initrd.gz maybe easier if you don't have physical access and a cdrom drive. With the kernel/initrd.gz, you just need to boot the kernel with the initrd from petitboot, either by downloading them temporarly in petitboot from its shell and kexec or by setting your dhcp server to provide a petitboot configuration file with all what is needed (most powerfull if you need install often/many machines) and this will be auto detected by petitboot menu.


This method is rarely useful (here only for reference). It should be used in Debian ppc64el.

For official repository

debootstrap  --arch=ppc64el --variant=buildd  sid  debootstrap-ppc64el

debootstrap for QEMU/KVM

This method is useful for most people. It can be used in other Debian ports and even other distros.

For KVM acceleration (i.e., not full-emulation) this must be run on a POWER8 system (or POWER7/7+ with special help from IBM).


  1. Create an image file (i.e., virtual disk) for the root filesystem
  2. Populate the image with debootstrap --foreign (i..e, can be run on other architectures)

  3. Boot the image with QEMU and run debootstrap --second-stage (i.e., must be run on the POWER architecture -- or with QEMU full-emulation)

Thanks to Alistair Popple, Jeremy Kerr.

Image details
$ image_size_g=8 
$ image_file='rootfs.ext4'
$ image_mountpoint='rootfs'

Create image and filesystem
$ dd if=/dev/zero of=$image_file bs=1 count=0 seek=$((image_size_g * 1024 ** 3))
$ mkfs.ext4 -F $image_file

Mount image
$ mkdir -p $image_mountpoint
$ sudo mount -o loop $image_file $image_mountpoint

Populate image
(note for non-Debian distros: see how to get/run debootstrap in the next section)
$ archive_url=''
$ sudo debootstrap --foreign --arch ppc64el --variant=buildd unstable $image_mountpoint $archive_url

Configure image for booting into 'debootstrap --second-stage'

$ cat <<EOF | sudo tee $image_mountpoint/etc/inittab

$ cat <<EOF | sudo tee $image_mountpoint/debootstrap/boot
#!/bin/bash -ex

mount -t proc  none /proc
mount -o remount,rw /
cp /proc/mounts /etc/mtab

rm /etc/inittab
/debootstrap/debootstrap --second-stage

sed -e '/^1:/ s/tty1/hvc0/' -i /etc/inittab
echo root:abc123 | chpasswd


$ sudo chmod a+x $image_mountpoint/debootstrap/boot

Unmount image
$ sudo umount $image_mountpoint

Get a kernel (watch for changes in version/filename)
$ kernel_url="$archive_url/pool/main/l/linux/linux-image-3.13-1-powerpc64le_3.13.4-1_ppc64el.deb"
$ mkdir kernel && cd kernel && wget $kernel_url && ar x linux-image-*.deb && tar xf data.tar.* && cd .. && ln -s kernel/boot/vmlinux-* vmlinux

Boot the image into 'debootstrap --second-stage'
$ qemu-system-ppc64 \
    -enable-kvm \
    -M pseries -smp cores=1,threads=1 -m 2G \
    -nographic -nodefaults -monitor pty -serial stdio \
    -device spapr-vscsi -drive file=$image_file \
    -kernel vmlinux -append 'root=/dev/sda devtmpfs.mount=1'
    -initrd initrd

Done! ;-)
The image is ready for further usage on QEMU/KVM.
(login: root, password: abc123)

Optionally, convert image to qcow2 (for disk space savings)
$ qemu-img convert -O qcow2 $image_file $image_file.qcow2 && rm -f $image_file

Note for non-Debian distros: how to get/run debootstrap

Debootstrap: binary package URL 
(watch for version/filenames changes in
$ debootstrap_url=''

$ mkdir debootstrap && cd debootstrap && wget $debootstrap_url && ar x debootstrap_*.deb && tar xf data.tar.* && cd ..
$ DEBOOTSTRAP_DIR="$(pwd)/debootstrap/usr/share/debootstrap"
$ DEBOOTSTRAP="$(pwd)/debootstrap/usr/sbin/debootstrap"

Run debootstrap as:

You will see this warning:
  W: Cannot check Release signature; keyring file not available /usr/share/keyrings/debian-archive-keyring.gpg