Gentoo Linux Quick Installation on Raspberry Pi

In this post, I will show you how to quickly install Gentoo Linux on the Raspberry Pi.

After this, you’ll get a bootable Gentoo Linux on your Raspberry Pi.

Preparation

Installation

Note: Do not enter “↵”, simply press ENTER.

First of all, you should identify what’s your disk device name. Typically, it should be /dev/mmcblkN, but in some Linux distribution, it would be /dev/sdX. In this post, I suppose your device name is /dev/mmcblk0.

Partition Disk

Raspberry Pi can only boot from the first partition on your disk, and need a vfat (aka FAT32 in Windows) file system, Linux doesn’t care which partition, but, NOT vfat. So we must provide at least 2 partitions to place boot files and system files.

Now let’s partition your disk to 2 partitions like this:

Device Size Id Type
/dev/mmcblk0p1 128 MB c W95 FAT32 (LBA)
/dev/mmcblk0p2 10 GB or all rest size 83 Linux

This is my terminal include operate steps:

raspberrypi3 ~ # fdisk /dev/mmcblk0

Welcome to fdisk (util-linux 2.30.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p↵
Disk /dev/mmcblk0: 29.1 GiB, 31268519936 bytes, 61071328 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xa03cfbd1

Device         Boot  Start      End  Sectors  Size Id Type
/dev/mmcblk0p1        2048 61069311 61067264 29.1G  7 HPFS/NTFS/exFAT

Command (m for help): d↵
Selected partition 1
Partition 1 has been deleted.

Command (m for help): n↵
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): ↵

Using default response p.
Partition number (1-4, default 1): ↵
First sector (2048-61071327, default 2048): ↵
Last sector, +sectors or +size{K,M,G,T,P} (2048-61071327, default 61071327): +128M↵

Created a new partition 1 of type 'Linux' and of size 128 MiB.

Command (m for help): t↵
Selected partition 1
Hex code (type L to list all codes): c↵
Changed type of partition 'Linux' to 'W95 FAT32 (LBA)'.

Command (m for help): n↵
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): ↵

Using default response p.
Partition number (2-4, default 2): ↵
First sector (264192-61071327, default 264192): ↵
Last sector, +sectors or +size{K,M,G,T,P} (264192-61071327, default 61071327): +10G↵

Created a new partition 2 of type 'Linux' and of size 10 GiB.

Command (m for help): p↵
Disk /dev/mmcblk0: 29.1 GiB, 31268519936 bytes, 61071328 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xa03cfbd1

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1         2048   264191   262144  128M  c W95 FAT32 (LBA)
/dev/mmcblk0p2       264192 21235711 20971520   10G 83 Linux

Command (m for help): w↵
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

Please following the Using fdisk to partition the disk on Gentoo Handbook now to learn how to using fdisk, maybe sometime later, I’ll write a post about this.

Make File Systems

After partition, we should make file systems on each partitions:

mkfs.vfat /dev/mmcblk0p1
mkfs.ext4 /dev/mmcblk0p2

Place Files on Disk

At the moment, let’s mount the root partition (the largest one) to /mnt/gentoo/:

mount /dev/mmcblk0p2 /mnt/gentoo/

Extract the latest stage3 file (here suppose stage3-armv7a_hardfp-20161129.tar.bz2) to /mnt/gentoo/:

tar xvpf stage3-armv7a_hardfp-20161129.tar.bz2 --xattrs --numeric-owner -C /mnt/gentoo/

After this, you should see several directories under /mnt/gentoo/.

Next, mount the boot partition (the 128M one) to /mnt/gentoo/boot/:

mount /dev/mmcblk0p1 /mnt/gentoo/boot/

Copy or move files under GitHub repo’s boot directory to /mnt/gentoo/boot/, and you will find start.elf and other files under /mnt/gentoo/boot/.

Copy or move the GitHub repo’s modules directory to /mnt/gentoo/lib/, and you will get /mnt/gentoo/lib/modules/ directory.

Edit the Key Files

Now, we have the whole file structure on your disk (MicroSD card), but we still have a little works to do:

  • /etc/fstab:
    The /mnt/gentoo/etc/fstab file records how do partitions mount to directory, make sure only have these 2 lines uncommented:

    /dev/mmcblk0p1          /boot           vfat            noauto,noatime  1 2
    /dev/mmcblk0p2          /               ext4            noatime         0 1
  • /etc/shadow:
    The /mnt/gentoo/etc/shadow file records each users password and active state, let’s make a password shadow first:

    openssl passwd -1

    Follow the prompting, you will get an shadow string like $1$fGkSoMqH$177SR4upLdOJWuSTIsiBd/, place it in the root line in the /mnt/gentoo/etc/shadow file like this:

    root:$1$fGkSoMqH$177SR4upLdOJWuSTIsiBd/:17210:0:::::
  • /boot/cmdline.txt:
    Create a new file /mnt/gentoo/boot/cmdline.txt and only write root=/dev/mmcblk0p2 rootdelay=10 in it, to make sure we can boot from MicroSD card.

Boot Up

The remaining works are eject the MicroSD card, insert it into the Raspberry Pi’s card slot, connecting the Raspberry Pi to a HDTV or monitor via HDMI cable, plug the power cord, and boot up your Gentoo Linux on your Raspberry Pi!

If you are lucky, you should see a rainbow block on your screen, after it, with some text rolling, at the end, you see a login prompt.

Congratulations, that’s your Gentoo!

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *