CentOS 7 on Raspberry Pi 4

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:

username: root
password: centos

(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:

# rootfs-expand

and wait a few seconds. The screen will clear, then you will see a script output of two commands; growpart and 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.

# yum update

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

[epel]
name=Epel Repo
baseurl=https://armv7.dev.centos.org/repodir/epel-pass-1/
enabled=1
gpgcheck=0

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

Envoi Project Progress

There has been a substantial amount of progress made on the Envoi Project.  The setup page is now completely functional and requires users to complete the setup prior to using the platform.  Other things included are:

  • Password encryption using Argon2i (requires PHP 7.2)
  • Proper password verification for sessions
  • Upgrade to Bootstrap 5 (alpha)
  • User settings manipulation
  • Dynamic HTML class for page creation (work in progress, but functional)
  • Admin panel functionality
  • CRUD model for posts (Create, Remove, Update, and Delete)
  • All posts are sorted and posted on the main page

While there is a long road ahead, the baseline is coming together very nicely.  My goal is to clean up the backend, get the admin panel completed, and begin the API integration very soon.

Add posts pageAdd Content

Setup page

Setup

View posts page

View Posts

Envoi Project

I have started working on something that I think is interesting.  There aren’t enough flat-file blogging platforms around that support full integration with social media.  I have decided to create my own version of this with the Envoi Project.  This project is currently hosted on GitHub, but will soon have its own website.

The Envoi Project is planned to be a flat-file blog that simultaneously shares your content across all of your social media.  I am also attempting to keep a simple approach to requirements and languages.  I have opted to stick with PHP, JavaScript, and Bootstrap’s CSS.  The only requirement so far is an Apache webserver.  As for the content, Envoi will categorize your posts into 6 different types (text, photo, video, link, quote, file).  I felt that these are the core reasons that people blog, so by creating types, this will help narrow down the social media sharing experience and focus on getting the right content onto the right platform.

The idea is to focus on centralized content sharing.  No matter what type of team or group you are trying to share, you will be able to reach everyone with a single post.

Another huge topic I want to focus on is security.  Since you will be syncing your social media with Envoi, securely storing your credentials is very important.

The project is in an infancy stage at the moment, but I am hoping to gain some traction soon and get a working project released before the end of the year.

If you are interested, follow the project at GitHub.

Envoi Screenshot