software:fedora:fedora_on_raspi4
Table of Contents
Installing Fedora 35 on Raspberry Pi 4
Overall, you have these options:
- Howto setup Fedora on a micro-sdcard, without RaspiOS, uses the RaspiOS kernel and the Fedora32 aarch64 userland
- This document, recommended: Install Fedora36 or rawhide, with native Fedora kernel
Some pieces are borrowed from the Nintendo Switch Fed32 setup. The generic raspi4 notes are here.
Outline:
- Step 1: write the image
- Step 2: Fedora setup
- Step 3: boot Fedora, finalize setup
Step 1: Writing image
These steps can be done on an x86_64 Fedora system with a micro-sdcard reader/writer. I recommend the Fedora37 image.
- Fedora37: fetch Fedora-Minimal* from https://kojipkgs.fedoraproject.org/compose/37/latest-Fedora-37/compose/Spins/aarch64/images/
dnf install -y arm-image-installer # Our directory for storing images etc. WORKDIR="/home/chris/Downloads/raspi" # Our microsd-card device OUTDEV="/dev/mmcblk0" cd $WORKDIR fedora-arm-image-installer \ --image <the image file we just fetched> \ --target=rpi4 --media $OUTDEV --resizefs
Step 2: Fedora setup
### Mount the card mkdir -p $WORKDIR/mnt mount ${OUTDEV}p3 $WORKDIR/mnt mount ${OUTDEV}p2 $WORKDIR/mnt/boot mount ${OUTDEV}p1 $WORKDIR/mnt/boot/efi cd $WORKDIR/mnt # set your root-password to 'fedora' sed -ie 's,^root.*,root:$6$g1sdJY/CulQKzQmS$heAUJV60eTr1HQtTTR188WlA/vOTj6LPuKA7JB1wKEgPiW1qX2gPJHU8lLhSL8KeKgx.hGgUvQ4uzW6JQ68u40:18388:0:99999:7:::,' etc/shadow # As an alternative, execute 'vi etc/shadow' and manually # change the password hash to something else. echo 'PermitRootLogin yes' >>etc/ssh/sshd_config echo pi4.local >etc/hostname echo '127.0.0.1 pi4.local pi4' >>etc/hosts rm -f etc/localtime ln -s /usr/share/zoneinfo/Asia/Tokyo etc/localtime ### Let's set a static IP # I use the ifcfg-profiles, so these steps are also compatible # with older Fedora images. Nowadays, like RHEL9, primarily # /etc/NetworkManager/system-connections is used. mkdir -p etc/NetworkManager/system-connections cat >etc/NetworkManager/system-connections/tokyo-lan.nmconnection<<EOT [connection] id=tokyo-lan uuid=0c57b8fc-843e-48eb-811c-b55fe5d87fa0 type=ethernet interface-name=eth0 [ethernet] [ipv4] address1=192.168.0.20/24,192.168.0.1 dns=192.168.0.1; method=manual [ipv6] addr-gen-mode=stable-privacy method=auto [proxy] EOT chcon system_u:object_r:NetworkManager_etc_rw_t:s0 \ etc/NetworkManager/system-connections/tokyo-lan.nmconnection chmod 600 etc/NetworkManager/system-connections/tokyo-lan.nmconnection # Disable the initial-setup and other unneeded services rm -f etc/systemd/system/multi-user.target.wants/initial-setup.service rm -f etc/systemd/system/multi-user.target.wants/abrtd.service rm -f etc/systemd/system/multi-user.target.wants/abrt-journal-core.service rm -f etc/systemd/system/multi-user.target.wants/abrt-oops.service rm -f etc/systemd/system/multi-user.target.wants/abrt-vmcore.service rm -f etc/systemd/system/multi-user.target.wants/abrt-xorg.service rm -f etc/systemd/system/multi-user.target.wants/cups.service rm -f etc/systemd/system/multi-user.target.wants/nfs-client.service rm -f etc/systemd/system/multi-user.target.wants/vboxservice.service rm -f etc/systemd/system/multi-user.target.wants/vmtoolsd.service rm -f etc/systemd/system/multi-user.target.wants/ModemManager.service rm -f etc/systemd/system/multi-user.target.wants/rngd.service rm -f etc/systemd/system/multi-user.target.wants/avahi-daemon.service rm -f etc/systemd/system/multi-user.target.wants/auditd.service rm -f etc/systemd/system/multi-user.target.wants/smartd.service rm -f etc/systemd/system/multi-user.target.wants/libvirtd.service rm -f etc/systemd/system/multi-user.target.wants/remote-fs.service rm -f etc/systemd/system/sysinit.target.wants/multipathd.service rm -f etc/systemd/system/sockets.target.wants/multipathd.socket cd .. umount $WORKDIR/mnt/boot/efi umount $WORKDIR/mnt/boot umount $WORKDIR/mnt
You should now be able to boot the Pi4 with the sdcard into Fedora, it takes some time. Login via ssh should then be possible.
Step 3: First steps on the Fedora installation
cat >>~/.bashrc<<EOT # extend prompt to have temperature export PS1='[\u@\h \$(cut -b 1,2 /sys/devices/virtual/thermal/thermal_zone0/temp)°C \W]\$ ' # colored iostat output export S_COLORS=always export EDITOR=vi EOT ### tuning cat >/etc/rc.local<<EOT #!/usr/bin/bash # VM writeback timeout echo '1500' > '/proc/sys/vm/dirty_writeback_centisecs' # power saving for wlan and usb chips echo 'auto' > '/sys/bus/pci/devices/0000:01:00.0/power/control' echo 'auto' > '/sys/bus/pci/devices/0000:00:00.0/power/control' EOT chmod +x /etc/rc.local /etc/rc.local ln -s /etc/rc.local /etc/rc.d/rc.local # To get further ideas about services we do not need systemd-analyze plot >file.svg # For my use cases: systemctl disable lmsensors firewalld # If required for debugging: # vi /etc/default/grub # GRUB_CMDLINE_LINUX="console=tty0 audit=0 selinux=0" # grub2-mkconfig -o /boot/grub2/grub.cfg # update dnf -y update
software/fedora/fedora_on_raspi4.txt · Last modified: 2023/04/11 01:45 by chris