In this tutorial, we are going to use a Debian 8 (Jessie) ppc64le as a host for our sysroot build environment. You can get a free POWER virtual machine at MiniCloud to reproduce the steps described here 🙂
step #1: create a disk image
dd if=/dev/zero of=debian-ppc64le.img seek=10240M bs=1 count=0
- /dev/zero is a special file in Unix-like operating systems that provides as many null characters (ASCII NUL, 0x00) as are read from it.
- seek = n, skip n blocks (using the specified output block size) from the beginning of the output file before copying.
- bs = BYTES, read and write up to BYTES bytes at a time.
- count = N, copy only N input blocks.
step #2: create a new file system
/sbin/mke2fs -t ext4 -i 1024 -b 1024 -m 5 -F -v ./debian-ppc64le.img
- mke2fs: create an ext2/ext3/ext4 filesystem.
- -t: specify the filesystem type (i.e., ext2, ext3, ext4, etc.) that is to be created.
- -i: specify the bytes/inode ratio. mke2fs creates an inode for every bytes-per-inode bytes of space on the disk. The larger the bytes-per-inode ratio, the fewer inodes will be created.
- -b: specify the size of blocks in bytes. Valid block-size values are 1024, 2048 and 4096 bytes per block.
- -m: specify the percentage of the filesystem blocks reserved for the super-user.
- -F: force mke2fs to create a filesystem.
- -v: verbose execution.
step #3: create a temporary mount point
step #4: mount the .img
sudo mount -o loop ./debian-ppc64le.img ./tmp/
- mount: all files accessible in a Unix system are arranged in one big tree, the file hierarchy, rooted at /. These files can be spread out over several devices. The mount command serves to attach the filesystem found on some device to the big file tree.
- -o: allow specifying a comma separated string of options.
- loop: loop device is a pseudo device (a file) that acts as a block-based device.
step #5: deboostrap a new Debian
sudo apt-get install debootstrap sudo debootstrap jessie ./tmp/
step #6: chroot into your new image
A chroot is a way of isolating applications from the rest of your computer, by putting them in a jail. It is basically a special directory on your computer which prevents applications, if run from inside that directory, from accessing files outside the directory. In many ways, a chroot is like installing another operating system inside your existing operating system.
sudo chroot ./tmp
step #7: customize your image
Once you chrooted your image you can install or modify anything you desire. For example, execute update and upgrade:
apt-get update apt-get upgrade
Configure the network:
vi /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet dhcp
vi /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.122.10 netmask 255.255.255.0 gateway 192.168.122.1
If you intend to boot this system, you probably want a Linux kernel and a boot loader.
apt-cache search linux-image
Install the kernel package using its package name:
apt-get install linux-image-*
To make your system bootable, set up your boot loader to load the installed kernel with your new root partition:
apt-get install grub2 grub-install /dev/sda2 update-grub
You have now a basic system configured. If you would like to make the system a bit more mature:
tasksel install standard
step #8: umount
step #9: compress your new image
bzip2 -9 -z -f -v ./debian-ppc64le.img
- bzip2 a block-sorting file compressor which compresses files using the Burrows-Wheeler block sorting text compression algorithm, and Huffman coding.
- -9 (or –best) set the block size to 900 k when compressing.
- -z forces compression, regardless of the invocation name.
- -f force overwrite of output files. Normally, bzip2 will not overwrite existing output files. Also forces bzip2 to break hard links to files, which it otherwise wouldn’t do.
- -v show the compression ratio for each file processed.
And that’s all. You now have a brand new Debian Jessie ppc64le image to used wherever you want.
Some good references: