There are a lot of guides and walkthroughs on how to install CentOS on a Raspberry Pi 4, but once you get the OS up and running, it’s pretty useless until you get it set up and configured properly for the Pi. The CentOS 7 image is a pretty barebone image that doesn’t provide a lot in the way of Linux.
Getting the image is a pretty straight forward process; download the image here. One key thing to pay attention to is the version you are downloading. Make sure to download the minimal armv7hl version with “minimal-4” in the name as it is the only image that has the proper configurations Pi4.
Flash the image using Etcher or Raspberry Pi Imager. Make sure you flash to the right drive (the SD card and not your hard drive).
Once you have the image flashed, then boot up your Raspberry Pi. You can log into the Pi with the following credintials:
(I recommend changing these soonest.. but for this, I will be using root the entire time)
Configure the Network
This process is a fairly easy process too. Use the preinstalled network management tool ‘
nmtui‘ to configure your wired or wireless network. Since you have a Raspberry Pi 4 (at least I assume you do since you’re reading this), the wireless configuration process is very easy. Don’t skip this step because you will need internet access to get everything else working. While here, you can assign a hostname if you desire.
Expand the rootfs
One of the weird nuances with CentOS images for the Raspberry Pi is that the file system is fairly small. (you can check the size with ‘
df -l‘. In my case, the image was around 2G. That is obviously not very large. There is a default command that you can run to resize the partition to the full size of the SD card you installed on. Run the following:
and wait a few seconds. The screen will clear, then you will see a script output of two commands;
resize2fs. Once completed, the partition and file system should match the right size of the SD card. (Again, you can check with ‘df -l’).
Disable the annoying kernel messages in console.
This is more of a personal preference over anything else. It becomes really annoying to see kernel messages flood the screen when trying to accomplish anything in a console-only build. If I want to see these messages, I can reenable them later or check
dmesg. Echo the following line to disable the kernel messages. A reboot is
required (the easiest way) for the changes to take effect.
echo kernel.printk = 3 4 1 3 >> /etc/sysctl.conf
No more annoying messages. (if this is your thing, then by all means, keep the messages and… good luck).
Update the system (and enable the EPEL)
Now that the internet is working, the system size is properly set and you aren’t receiving annoying messages, we can now update the system and install some packages. First, update your system.
If you want to install an editor like ‘nano’, now would be the time. If not, ‘vi’ is available be default.
Next, you will probably want the Extra Packages for Enterprise Linux (EPEL) installed and available for your CentOS Raspberry Pi build. You will need to add the repo before you can install it. (Not that it matters, but this is an unofficial repo as it is NOT officially supported by CentOS yet. Some things might be broken).
Add this to the repo folder:
# vi /etc/yum.repos.d/epel.repo
Once you have the repo added, then you can update the system. I highly recommend updating the system with the ‘Continuous Release’ repo as well. This will help with keeping things up-to-date on the Pi. Especially if you want packages like gpio-rpi and snapd.
# yum --enablerepo=cr update
# yum install epel-release
(if you prefer dnf, then this would be the best time to install it).
Install and Enable Snapd
Now that everything is updated and you are running with extra repos, it’s time to install snapd. If you don’t know what snapd is, it’s a daemon for running snapcraft’s snaps on your system. More about snaps here.
# yum install snapd
# systemctl enable snapd
Install Extra Packages
For the final piece, I needed to install gpio-rpi. Snap was the best option. For snap, there are some options required before installing “less-than-secure” packages. Both edge and devmode are required.
# snap install --edge --devmode gpio-rpi