{"id":12423,"date":"2025-11-05T03:00:00","date_gmt":"2025-11-05T08:00:00","guid":{"rendered":"https:\/\/www.both.org\/?p=12423"},"modified":"2025-11-05T18:37:52","modified_gmt":"2025-11-05T23:37:52","slug":"installing-fedora-43-minimal-on-a-raspberry-pi","status":"publish","type":"post","link":"https:\/\/www.both.org\/?p=12423","title":{"rendered":"Installing Fedora 43 Minimal on a Raspberry Pi"},"content":{"rendered":"<div class=\"pld-like-dislike-wrap pld-template-1\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"\" data-post-id=\"12423\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                        <i class=\"fas fa-thumbs-up\"><\/i>\r\n                <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">4    <\/span>\r\n<\/div><\/div>\n<p>Years ago, I bought an original Raspberry Pi (before it was called the &#8220;1&#8221;) and then later upgraded to a Raspberry Pi 3B. This is a great little device to experiment with, or to set up an in-home micro-server, or to do any number of things.<\/p>\n\n\n\n<p>Fedora 43 was recently released a few weeks ago, so I wanted to upgrade my Raspberry Pi to run Fedora 43. On a desktop machine, I upgrade Fedora by backing up my data, reinstalling a fresh copy of Fedora, and then restoring my data. On the Raspberry Pi, it&#8217;s a bit simpler than that: The Raspberry Pi&#8217;s main storage is on a microSD card, and I bought two of them when I ordered my Raspberry Pi 3B, years ago. That way, I could install Linux on one microSD card, and not risk whatever I was doing on the &#8220;primary&#8221; install, which was safely stored on the other microSD card.<\/p>\n\n\n\n<p>So installing Fedora 43 on my Raspberry Pi 3B is really just a matter of installing to a second microSD card, and booting from that.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"download-and-install\">Download and install<\/h2>\n\n\n\n<p>I already have a desktop system where I run a graphical desktop, so I don&#8217;t need to stretch my Raspberry Pi to run a full desktop. In fact, I prefer to run my Raspberry Pi as an &#8220;old school&#8221; Unix device, with everything at the command line. That means I can download a version of Fedora 43 that doesn&#8217;t include any &#8220;extras.&#8221;<\/p>\n\n\n\n<p>I downloaded the <strong>Fedora-Minimal-43-1.6.aarch64.raw.xz<\/strong> image from the <a href=\"https:\/\/fedoraproject.org\/\">Fedora Project<\/a> website. This is a compressed raw image of the Fedora 43 &#8220;Minimal&#8221; distribution; &#8220;minimal&#8221; means it only contains the packages required to boot a running instance of Fedora, and connect it to a network. Most other packages will need to be installed manually afterwards, and that&#8217;s fine for me.<\/p>\n\n\n\n<p>To install Fedora on a Raspberry Pi, it&#8217;s easiest to write the image from a desktop Linux machine, so you&#8217;ll need the Fedora ARM Image Installer package. This is probably not installed by default on your system, but you can install it by typing this command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo dnf install arm-image-installer<\/code><\/pre>\n\n\n\n<p>My desktop computer doesn&#8217;t have a microSD card slot on it, but I have an SD\/microSD card reader that connects via USB, which I bought for around $10 online. When I connect the microSD in the USB reader, and connect the USB reader to my computer, the microSD is recognized as <code>\/dev\/sdb<\/code>. It&#8217;s important to know <em>where to find your microSD card<\/em> so you don&#8217;t accidentally write the Fedora 43 ARM image to your hard disk. I verified the disk by viewing the last few lines of the kernel messages after connecting the USB reader; the disk it just recognized will be the microSD card:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo dmesg | tail\n&#91; 1831.829956] sd 6:0:0:0: Attached scsi generic sg0 type 0\n&#91; 1831.830686] sd 6:0:0:1: Attached scsi generic sg1 type 0\n&#91; 1831.832446] sd 6:0:0:0: &#91;sda] Media removed, stopped polling\n&#91; 1831.838928] sd 6:0:0:0: &#91;sda] Attached SCSI removable disk\n&#91; 1833.239843] sd 6:0:0:1: &#91;sdb] 124735488 512-byte logical blocks: (63.9 GB\/59.5 GiB)\n&#91; 1833.240713] sd 6:0:0:1: &#91;sdb] Write Protect is off\n&#91; 1833.240726] sd 6:0:0:1: &#91;sdb] Mode Sense: 2f 00 00 00\n&#91; 1833.241440] sd 6:0:0:1: &#91;sdb] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA\n&#91; 1833.258210]  sdb: sdb1 sdb2 sdb3\n&#91; 1833.258702] sd 6:0:0:1: &#91;sdb] Attached SCSI removable disk<\/code><\/pre>\n\n\n\n<p>In this case, I can see the remnants of a much older install I did on this microSD card; remember, I swap out each microSD card every time I install a new version of Linux on this Raspberry Pi. The microSD card has three partitions on it, recognized via the USB card reader as <code>sdb1<\/code>, <code>sdb2<\/code>, and <code>sdb3<\/code>.<\/p>\n\n\n\n<p>The Fedora ARM Image Installer supports a variety of ARM-based devices, but I need to know the device name to use for a Raspberry Pi 3. To list the supported platforms, run the ARM Image Installer with the <code>--supported<\/code> option:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo arm-image-installer --supported\nAllWinner Devices:\na64-olinuxino a64-olinuxino-emmc amarula_a64_relic bananapi_m2_plus_h5 \n bananapi_m64 beelink_gs1 emlid_neutis_n5 emlid_neutis_n5_devboard \n libretech_all_h3_cc_h5 libretech_all_h3_it_h5 libretech_all_h5_cc_h5 \n nanopi_a64 nanopi_neo2 nanopi_neo_air nanopi_neo_plus2 nanopi_r1 \n nanopi_r1s_h5 oceanic_5205_5inmfd orangepi_3 orangepi_lite2 \n orangepi_one_plus orangepi_pc2 orangepi_prime orangepi_win orangepi_zero2 \n orangepi_zero2w orangepi_zero3 orangepi_zero_plus orangepi_zero_plus2 \n pine64-lts pine64_plus pine_h64 pinebook pinephone pinetab sopine_baseboard \n tanix_tx6 teres_i transpeed-8k618-t x96_mate \n\nTI am625 Devices:\nbeagleplay \n\nQCom Devices:\ndragonboard410c dragonboard820c hmibsc qcm6490 qcom \n\nRockchips Devices:\neaidk-610-rk3399 evb-px5 evb-rk3328 evb-rk3399 ficus-rk3399 firefly-rk3399 \n geekbox khadas-edge-captain-rk3399 khadas-edge-rk3399 khadas-edge-v-rk3399 \n leez-rk3399 nanopc-t4-rk3399 nanopi-m4-2gb-rk3399 nanopi-m4-rk3399 \n nanopi-m4b-rk3399 nanopi-neo4-rk3399 nanopi-r2c-plus-rk3328 \n nanopi-r2c-rk3328 nanopi-r2s-rk3328 nanopi-r4s-rk3399 \n orangepi-r1-plus-lts-rk3328 orangepi-r1-plus-rk3328 orangepi-rk3399 \n pinebook-pro-rk3399 pinephone-pro-rk3399 puma-rk3399 roc-cc-rk3328 \n roc-pc-mezzanine-rk3399 roc-pc-rk3399 rock-4c-plus-rk3399 rock-4se-rk3399 \n rock-pi-4-rk3399 rock-pi-4c-rk3399 rock-pi-e-rk3328 rock-pi-e-v3-rk3328 \n rock-pi-n10-rk3399pro rock64-rk3328 rock960-rk3399 rockpro64-rk3399 \n\nOther Devices:\nrpi02w rpi3 rpi4 <\/code><\/pre>\n\n\n\n<p>And that&#8217;s how I remembered that the device name for the Raspberry Pi 3 is <code>rpi3<\/code>.<\/p>\n\n\n\n<p>Now that I knew the <em>media device to write to<\/em> and the <em>Raspberry Pi 3 target name<\/em>, I could finally run the Fedora ARM Image Installer on my desktop Linux system. I added an extra option to let the installer automatically resize the filesystem to fill the rest of the microSD card:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>$ sudo arm-image-installer --image=Fedora-Minimal-43-1.6.aarch64.raw.xz --target=rpi3 --media=\/dev\/sdb --resizefs\n=====================================================\n= Selected Image:                                 \n= Fedora-Minimal-43-1.6.aarch64.raw.xz\n= Selected Media : \/dev\/sdb\n= U-Boot Target : rpi3\n= Root partition will be resized\n= Version: 5.3\n=====================================================\n \n*****************************************************\n*****************************************************\n******** WARNING! ALL DATA WILL BE DESTROYED ********\n*****************************************************\n*****************************************************\n \n Type 'YES' to proceed, anything else to exit now \n \n= Proceed? YES\n= Writing: \n= Fedora-Minimal-43-1.6.aarch64.raw.xz \n= To: \/dev\/sdb ....\n5574230016 bytes (5.6 GB, 5.2 GiB) copied, 191 s, 29.2 MB\/s5596250112 bytes (5.6 GB, 5.2 GiB) copied, 191.753 s, 29.2 MB\/s\n\n1334+1 records in\n1334+1 records out\n5596250112 bytes (5.6 GB, 5.2 GiB) copied, 191.778 s, 29.2 MB\/s\n= Writing image complete!\n= Resizing \/dev\/sdb ....\nChecking that no-one is using this disk right now ... OK\n\nDisk \/dev\/sdb: 59.48 GiB, 63864569856 bytes, 124735488 sectors\nDisk model: USB3.0 CRW   -SD\nUnits: sectors of 1 * 512 = 512 bytes\nSector size (logical\/physical): 512 bytes \/ 512 bytes\nI\/O size (minimum\/optimal): 512 bytes \/ 512 bytes\nDisklabel type: dos\nDisk identifier: 0x599aae61\n\nOld situation:\n\nDevice     Boot   Start      End Sectors  Size Id Type\n\/dev\/sdb1  *      34816   444415  409600  200M  6 FAT16\n\/dev\/sdb2        444416  4638719 4194304    2G 83 Linux\n\/dev\/sdb3       4638720 10930175 6291456    3G 83 Linux\n\n\/dev\/sdb3: \nNew situation:\nDisklabel type: dos\nDisk identifier: 0x599aae61\n\nDevice     Boot   Start       End   Sectors  Size Id Type\n\/dev\/sdb1  *      34816    444415    409600  200M  6 FAT16\n\/dev\/sdb2        444416   4638719   4194304    2G 83 Linux\n\/dev\/sdb3       4638720 124735487 120096768 57.3G 83 Linux\n\nThe partition table has been altered.\nCalling ioctl() to re-read partition table.\nSyncing disks.\ne2fsck 1.47.2 (1-Jan-2025)\nPass 1: Checking inodes, blocks, and sizes\nPass 2: Checking directory structure\nPass 3: Checking directory connectivity\nPass 4: Checking reference counts\nPass 5: Checking group summary information\nroot: 40900\/196608 files (0.1% non-contiguous), 535041\/786432 blocks\nresize2fs 1.47.2 (1-Jan-2025)\nResizing the filesystem on \/dev\/sdb3 to 15012096 (4k) blocks.\nThe filesystem on \/dev\/sdb3 is now 15012096 (4k) blocks long.\n\n= Raspberry Pi 3 Uboot is already in place, no changes needed.\n\n= Installation Complete! Insert into the rpi3 and boot.<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"first-boot\">First boot<\/h2>\n\n\n\n<p>After writing the Fedora Linux image to the microSD card, I only needed to insert the card into the Raspberry Pi to finish the setup. The first time you boot the system, Fedora goes through a text-based &#8220;menu&#8221; where you can define the language, time zone, wired network, root password, and primary user account:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/11\/pi-boot1.jpg\" alt=\"Raspberry Pi console showing the boot-up process, plus the first-boot configuration menu\" class=\"wp-image-12417\"\/><figcaption class=\"wp-element-caption\">Booting Fedora on the Raspberry Pi<\/figcaption><\/figure>\n\n\n\n<p>Respond to each prompt, and you&#8217;ll be good to go. You&#8217;ll know you&#8217;ve finished when the Raspberry Pi boots into a &#8220;login&#8221; prompt:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/11\/pi-login.jpg\" alt=\"Raspberry Pi login prompt, showing &quot;pi login&quot;\" class=\"wp-image-12419\"\/><figcaption class=\"wp-element-caption\">Ready to login on the Raspberry Pi<\/figcaption><\/figure>\n\n\n\n<p>The default font is quite small for me to read comfortably, but fortunately you can use the <strong>setfont<\/strong> command to load a new font. These console fonts are stored in the <em>\/usr\/lib\/kbd\/consolefonts<\/em> directory, and include a &#8220;monospace serif&#8221; font (sun12x22.psfu.gz) that reminds me of Sun Workstations, several variations of a &#8220;DOS&#8221; font (like drdos8x16.psfu.gz), and a version of the &#8220;Terminus&#8221; font. I used the Terminus font (Lat2-Terminus16.psfu.gz), but doubled the text size to make it easier to read. I created a 1-line Bash script to load the font, so I don&#8217;t have to type that long path every time:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\nsetfont --double \/usr\/lib\/kbd\/consolefonts\/Lat2-Terminus16.psfu.gz<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/11\/pi-font.jpg\" alt=\"Raspberry Pi console showing the 'setfont' script\" class=\"wp-image-12418\"\/><figcaption class=\"wp-element-caption\">Set a larger console font to make it easier to read<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"wireless-networking\">Wireless networking<\/h2>\n\n\n\n<p>I only want to run the Raspberry Pi in &#8220;text&#8221; or &#8220;console&#8221; mode, so that means I need to do everything from the command line. I don&#8217;t have a graphical desktop that can configure the network for me.<\/p>\n\n\n\n<p>Fortunately, the <strong>nmcli<\/strong> command (&#8220;Network Manager command line interface&#8221;) isn&#8217;t too difficult to use. First, you can check the status of the network devices with this command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># nmcli dev status<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/11\/pi-wifi1.jpg\" alt=\"Command line output for 'nmcli dev status' with the wireless network shown as disconnected.\" class=\"wp-image-12420\"\/><\/figure>\n\n\n\n<p>In my case, I don&#8217;t have my Raspberry Pi connected to a wired network; I need to use wireless networking instead. My Pi&#8217;s WiFi radio was up and running, but if yours isn&#8217;t activated, you can use this device to turn it on:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># nmcli radio wifi on<\/code><\/pre>\n\n\n\n<p>Then, get a list of the available wireless networks using the <code>list<\/code> command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># nmcli dev wifi list<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/11\/pi-wifi2.jpg\" alt=\"Command line output for 'nmcli dev wifi list' with the available wireless networks shown in green.\" class=\"wp-image-12421\"\/><\/figure>\n\n\n\n<p>You should see a list of all the WiFi access points, and their signal strengths. Connect to the network you prefer with the <code>connect<\/code> command. You can use several variations for this command: you can add the network password with a <code>password<\/code> option, but I prefer to use the <code>--ask<\/code> option so I get prompted for the network password. Prompting is the more secure method anyway; even though I&#8217;m the only person using this device, it&#8217;s good practice to <em>not<\/em> expose a password to anyone who can see the command line using the <strong>ps<\/strong> command.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># nmcli dev wifi connect ________ --ask<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1600\" height=\"900\" src=\"http:\/\/www.both.org\/wp-content\/uploads\/2025\/11\/pi-wifi3.jpg\" alt=\"Command line output for 'nmcli dev status' with the wireless network in green\/connected\" class=\"wp-image-12422\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"linux-from-the-command-line\">Linux from the command line<\/h2>\n\n\n\n<p>And that&#8217;s how I set up Fedora 43 on my Raspberry Pi. I know I&#8217;m doing things &#8220;the hard way&#8221; by doing everything from the command line, but that&#8217;s how I prefer to use this device. I think it&#8217;s a fun way to <a href=\"https:\/\/www.both.org\/?p=10813\">get back to the roots of Unix<\/a> while exploring the command line. Using the Raspberry Pi in text mode, using the command line, is a great throwback experiment to remind us how people used Unix from terminals in an era before computers had enough power to run a graphical desktop.<\/p>\n\n\n\n<p>If you want to try this for yourself, start by downloading a copy of <a href=\"https:\/\/fedoraproject.org\/misc#minimal\">Fedora Minimal 43<\/a> for ARM <code>aarch64<\/code> systems. As Fedora notes on their website, &#8220;Fedora Minimal is the smallest possible Fedora Linux installation. It does not include a desktop environment.&#8221; So be prepared to work entirely from the command line. But that&#8217;s part of the fun of experimenting with Linux.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I prefer running my Pi in text mode. Here&#8217;s how I did it with Fedora 43.<\/p>\n","protected":false},"author":33,"featured_media":3640,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[71,487],"tags":[861,91,211],"class_list":["post-12423","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fedora","category-raspberry-pi","tag-fedora-43","tag-linux","tag-raspberry-pi"],"modified_by":"Jim Hall","_links":{"self":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/12423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/users\/33"}],"replies":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=12423"}],"version-history":[{"count":3,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/12423\/revisions"}],"predecessor-version":[{"id":12462,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/posts\/12423\/revisions\/12462"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=\/wp\/v2\/media\/3640"}],"wp:attachment":[{"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=12423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=12423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.both.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=12423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}