The Funtoo Linux project has transitioned to "Hobby Mode" and this wiki is now read-only.
User:Pnoecker/Raspberry Pi 4
This guide draws heavily on Raspberry_Pi_2
What you need
- Raspberry PI 4
- An existing Linux install Undead_USB_Install built with fchroot is a solid choice if you do not have funtoo installed on a hard drive.
- A suitable SD card for your PI.
- An HDMI cable
- A USB keyboard
- A cat 5 network cable to connect the PI to your router
Prepare your SD card
Formatting
Insert your SD card into your Linux system. To find out which device it is, issue the following command:
root # lsblk -o name,size,label,partlabel
You should see some output identify the device. In my case is was /dev/sdc. In your case, it's quite possibly something different (maybe something like /dev/mmcblk0, e.g.), so please take care to identify the correct device.
Now we need to format the SD card to suit our purposes. The following example uses fdisk. If you're more comfortable with a different utility for formatting your drives/cards, you can use that instead.
First, we run cgdisk against our SD card to create boot, and root partitions.
root # cgdisk /dev/sdc Welcome to fdisk (util-linux 2.25.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): o Created a new DOS disklabel with disk identifier 0x7bc6906d. 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-31326207, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-31326207, default 31326207): +50M Created a new partition 1 of type 'Linux' and of size 50 MiB. Command (m for help): t Selected partition 1 Hex code (type L to list all codes): c If you have created or modified any DOS 6.x partitions, please see the fdisk documentation for additional information. 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): p Partition number (2-4, default 2): First sector (104448-31326207, default 104448): Last sector, +sectors or +size{K,M,G,T,P} (104448-31326207, default 31326207): +256M Created a new partition 2 of type 'Linux' and of size 256 MiB. Command (m for help): t Partition number (1,2, default 2): 2 Hex code (type L to list all codes): 82 Changed type of partition 'Linux' to 'Linux swap / Solaris'. Command (m for help): n Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (3,4, default 3): First sector (628736-31326207, default 628736): Last sector, +sectors or +size{K,M,G,T,P} (628736-31326207, default 31326207): Created a new partition 3 of type 'Linux' and of size 14.7 GiB. Command (m for help): w
Create File Systems
Next, we need to create file systems on the partitions:
root # mkfs.vfat -F 32 /dev/sdc2 root # fatlabel /dev/sdc2 "BOOT" root # mkfs.ext4 /dev/sdc3 root # e2label /dev/sdc3 "FUNTOO"
Prepare Your Boot Partition
Make mount points for your boot and root partitions on the SD card:
root # mkdir /mnt/funtoo
Mount your SD card:
root # mount /dev/sdc3 /mnt/funtoo root # mkdir /mnt/funtoo/boot root # mount /dev/sdc2 /mnt/funtoo/boot
Get the Funtoo Files Onto the SD Card
Download the Necessary Files
The next step is to get the kernel, and boot firmware for the Raspberry Pi 4 from funtoo.
Grab the stage 3 files and latest portage snapshot: Subarches
root # wget https://build.funtoo.org/1.4-release-std/arm-64bit/arm64_generic/2020-09-07/stage3-arm64_generic-1.4-release-std-2020-09-07.tar.xz
Next you need to get the Funtoo files onto the root partion of the rpi.
root # cd /mnt/funtoo root # wget https://code.funtoo.org/bitbucket/users/pnoecker/repos/666/commits/60afaf321f09988fe531d2695627ba9521666b2a#pi-boot.tar.gz root # tar -xf pi-boot.tar.gz
Extract the stage 3 files to your rpi root partition:
root # tar xf stage3*
Pre-boot Configuration
Edit your make.conf file to enable fchroot to compile:
~/piroot/etc/portage/make.conf
FEATURES="-pid-sandbox"
Edit your fstab file so everything mounts correctly on boot:
root # nano /mnt/funtoo/etc/fstab
~/piroot/etc/fstab
proc /proc proc defaults 0 0
LABEL=BOOT /boot vfat noauto,noatime 1 2
LABEL=FUNTOO / ext4 noatime 0 1
Set a password for root on your Rapsberry Pi by generating the password hash and modifying the shadow file on the SD card.
Generate the password hash:
root # openssl passwd -1
Copy the output hash (e.g.: 1z/p4HaT6$QrIaz/RTpBEIorIkzW4Ac.) and paste it into ~/piroot/etc/shadow Remove the asterisk (*) after "root" and replace it with the hash output.
In ~/piroot/etc/inittab search for s0 and disable the line by commeting it out
~/piroot/etc/inittab
---snip---
#s0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt100
---snip---
Chrooting into your new installation
for a good time install Package:Fchroot
Chrooting
First, copy the newly installed file qemu-arm to the Raspberry Pi's filesystem:
root # cp -v /usr/bin/qemu-arm /mnt/funtoo/usr/bin/ root # cp -v /usr/bin/qemu-aarch64 /mnt/funtoo/usr/bin/
Next, as root, start the binfmt service:
root # /etc/init.d/binfmt restart
Finally perform the usually chroot routine (as described in detail in the Funtoo Linux Installation Guide):
root # cd /mnt/funtoo root # mount --rbind /run run root # fchroot .
At this point, it is advised to perform a world update. This will spare you some headache later on. Furthermore, to enable ssh login, don't forget to adjust the sshd_config to your needs.
Clean unmount
Make sure all buffers have been flushed and unmount the temp directories:
root # exit root # cd .. && sync root # umount -lR funtoo
You could remove the directories and files you've used during the install if you want, but it's probably a good idea to leave them there just in case something isn't working right and you need to come back and check/reconfigure things on the SD card.
Booting the Raspberry Pi 2
Now for the fun part!
Insert the SD card into Rpi. Connect your keyboard, monitor and network card, then power it on. It should boot into Funtoo very quickly. If it doesn't work, go back through the guide and make sure you've got everything configured correctly - in particular the cmdline.txt file on the boot partition.
Log in using the password you created earlier. The first thing you'll want to do is fix the clock, set your time zone and sync your portage tree.
Because the Raspberry Pi does not have a hardware clock, you'll need to set the date and time right away. Later on we'll make sure we can get the correct time at boot via NTP, but for now we need to do it manually
root # date MMDDHHMMCCYY
Next, set your timezone:
root # ln -sf /usr/share/zoneinfo/YOURTIMEZONE /etc/localtime
Now we need make sure we can connect to the internet:
root # rc-update add dhcpcd default root # rc
The next step is to initialise our portage tree so we can start installing additional packages to our system (the emerge --sync is optional):
root # cd /usr/portage root # git checkout funtoo.org root # emerge --sync
Set your profile with epro:
Depending on what you'll be using your RPi2 for, use epro to set your profile:
root # epro subarch armv7a_hardfp root # epro flavor server
Now is a good time to enable swclock NTP so we can be sure to set the correct time the next time we boot:
root # emerge -av chrony
Once this finishes building, use rc-update to add it to the default run-level, and start the service with rc:
root # rc-update add chronyd default root # rc root # rc-update add swclock boot
Since the RPi2 doesn't have a hardware clock, remove the hwclock startup script from bootup:
root # rc-update del hwclock boot
Now you can follow the Funtoo Install documentation to continue configuring your system. You'll definitely want to look into No results if you are going to be adding lots of software to your system.