From Fedora Project Wiki
m (Remove pointers to stage4 BBL)
(Update for 20250224 image)
 
(41 intermediate revisions by 9 users not shown)
Line 1: Line 1:
= Download the latest disk image =
This page explains how to get Fedora running on either physical or virtual RISC-V hardware.


<!-- http://fedora-riscv.tranquillity.se/koji/tasks?state=closed&view=flat&method=createAppliance&order=-id -->
= Disclaimer =
Go [http://185.97.32.145/koji/tasks?state=closed&view=flat&method=createAppliance&order=-id to this link for the nightly builds] and select the most recent (top) build.  Look for the <code>-sda.raw.xz</code> file and download it.  It will usually be quite large, around 500-1000 MB.


Uncompress it:
riscv64 is currently '''not''' an officially supported Fedora architecture.


<pre>
Most packages are built from unmodified Fedora sources, but in several cases architecture-specific patches are necessary. There is an ongoing effort to reduce (and eventually eliminate) this delta. Check out the [https://abologna.gitlab.io/fedora-riscv-tracker/ tracker] to see the current status.
$ unxz Fedora-Developer-Rawhide-xxxx.n.0-sda.raw.xz
</pre>


== Tested disk images ==
Hardware support is limited to what mainline Linux provides, and that usually doesn't include the SoC's integrated GPU. Fedora RISC-V is primarily intended to be used as a headless build host / server environment for now. 


You can find them here: https://dl.fedoraproject.org/pub/alt/risc-v/disk-images/fedora/
= Generic instructions =


These disk images:
The following installation steps are applicable to most hardware.
* use "naked" filesystem (<code>/dev/vda</code>, not <code>/dev/vda1</code>);
* have SELinux set to enforcing=1
* have restored default SELinux security context (<code>restorecon -Rv /</code>);
* kernel, initramfs, config and BBL copied out from <code>/boot</code> directory;
* disk mage is compressed with <code>xz</code> using 16MiB block size;
* have been booted in QEMU/libvirt a few times to verify;


== Root password ==
If your machine is listed in the [[#Machine-specific instructions|machine-specific instructions]] section below, make sure you check out the corresponding page first, as it might contain important information that (partially or completely) supersedes what's written here.


<code>riscv</code>
== Requirements ==


== Getting kernel, config, initramfs, BBL ==
=== Serial console access ===


Fedora/RISCV does not support BLS (Boot Loader Specification) [https://fedoraproject.org/wiki/Changes/BootLoaderSpecByDefault More details]. The new disk images contain <code>/boot</code> directory from where you can copy out kernel, config, initramfs, BBL (contains embedded kernel). Example:
While <code>ssh</code> is likely going to be the primary way you'll interact with the machine, it's useful to have serial console access as a fallback. Moreover, it is '''required''' for the initial setup.


<pre>
The process of connecting the USB to serial adapter is machine-specific and can't be documented in a generic fashion.
$ export LIBGUESTFS_BACKEND=direct
$ guestfish \
  add Fedora-Developer-Rawhide-20190126.n.0-sda.raw : run : \
  mount /dev/sda1 / : ls /boot | grep -E '^(bbl|config|initramfs|vmlinuz)' | grep -v rescue
bbl-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64
config-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64
initramfs-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64.img
vmlinuz-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64
$ guestfish \
  add Fedora-Developer-Rawhide-20190126.n.0-sda.raw : run : mount /dev/sda1 / : \
  download /boot/bbl-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64 bbl-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64 : \
  download /boot/config-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64 config-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64 : \
  download /boot/initramfs-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64.img initramfs-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64.img : \
  download /boot/vmlinuz-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64 vmlinuz-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64
</pre>


You can also use <code>guestmount</code> or QEMU/NBD to mount disk image. Examples:
First of all, make sure your user is in the <code>dialout</code> group:
<pre>
$ mkdir a
$ guestmount -a $PWD/Fedora-Developer-Rawhide-20190126.n.0-sda.raw -m /dev/sda1 $PWD/a
$ cp a/boot/bbl-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64 .
$ guestunmount $PWD/a
</pre>


<pre>
<pre>
$ sudo modprobe nbd max_part=8
$ sudo usermod -a -G dialout $(whoami)
$ sudo qemu-nbd -f raw --connect=/dev/nbd1 $PWD/Fedora-Developer-Rawhide-20190126.n.0-sda.raw
$ sudo fdisk -l /dev/nbd1
Disk /dev/nbd1: 7.5 GiB, 8053063680 bytes, 15728640 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: F0F4268F-1B73-46FF-BABA-D87F075DCCA5
 
Device      Start      End  Sectors  Size Type
/dev/nbd1p1  2048 15001599 14999552  7.2G Linux filesystem
$ sudo mount /dev/nbd1p1 a
$ sudo cp a/boot/initramfs-5.0.0-0.rc2.git0.1.0.riscv64.fc30.riscv64.img .
$ sudo umount a
$ sudo qemu-nbd --disconnect /dev/nbd1
</pre>
</pre>


Note NBD is highly useful if you need to run <code>fdisk</code>,  <code>e2fsck</code> (e.g. after VM crash and filesystem lock up), <code>resize2fs</code>. It might be beneficial to look into <code>nbdkit</code> and <code>nbd</code> packages.
This is necessary to access the serial console. Log out and back in for the change to take effect.


= Boot under TinyEMU (RISCVEMU) =
Now plug the USB to serial adapter into your computer. If you only have one such adapters connected, it should show up as <code>/dev/ttyUSB0</code>.


RISCVEMU recently (2018-09-23) was renamed to TinyEMU (https://bellard.org/tinyemu/).
Create a configuration file for <code>minicom</code>, with the name you like, for example <code>~/.minirc.RISCV</code>. The contents should look like this:


TinyEMU allow booting Fedora disk images in TUI and GUI modes. You can experiment using JSLinux (no need to download/compile/etc) here: https://bellard.org/jslinux/
<pre>
pu port            /dev/ttyUSB0
pu baudrate        115200
pu bits            8
pu parity          N
pu stopbits        1
pu rtscts          No
</pre>


Below are instructions how to boot Fedora into X11/Fluxbox GUI mode.
You will now be able to connect to the serial console by running:
 
'''Step 1'''. Compile TinyEMU:


<pre>
<pre>
wget https://bellard.org/tinyemu/tinyemu-2018-09-23.tar.gz
$ minicom RISCV
tar xvf tinyemu-2018-09-23.tar.gz
cd tinyemu-2018-09-23
make
</pre>
</pre>


'''Step 2'''. Setup for booting Fedora:
For added reliability, you can use a stable device name in the configuration file. For example:
 
<pre>
<pre>
mkdir fedora
$ ls -l /dev/serial/by-id/*
cd fedora
/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 -> ../../ttyUSB0
cp ../temu .
</pre>
 
# Download pre-built BBL with embedded kernel
wget https://bellard.org/jslinux/bbl64-4.15.bin


# Create configuration file for TinyEMU
This output indicates that you should replace <code>/dev/ttyUSB0</code> with <code>/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0</code> in the configuration file.
cat <<EOF > root-riscv64.cfg
/* VM configuration file */
{
    version: 1,
    machine: "riscv64",
    memory_size: 1400,
    bios: "bbl64-4.15.bin",
    cmdline: "loglevel=3 console=tty0 root=/dev/vda1 rw TZ=${TZ}",
    drive0: { file: "Fedora-Developer-Rawhide-xxxx.n.0-sda.raw" },
    eth0: { driver: "user" },
    display0: {
        device: "simplefb",
        width: 1920,
        height: 1080,
    },
    input_device: "virtio",
}
EOF


# Download disk image and unpack in the same directory
== Media preparation ==
</pre>


'''Step 3'''. Boot it.
=== Downloading the disk image ===
<pre>
./temu -rw root-riscv64.cfg
</pre>


We need to use <code>-rw</code> if we want our changes to persist in disk image. Otherwise disk image will be loaded as read-only and all changes will not persist after reboot.
Disk images can be obtained from:


Once the system is booted login as <code>root</code> with <code>riscv</code> as password. Finally start X11 with Fluxbox: <code>startx /usr/bin/startfluxbox</code>. To gratefully shutdown just type <code>poweroff</code> into console.
* https://dl.fedoraproject.org/pub/alt/risc-v/release/41/Server/riscv64/images/


The disk image also incl. awesome and i3 for testing. Dillo is available as a basic web browser (no javascript support) and pcmanfm as file manager.
As of this writing, the most recent disk image is:


= Boot under QEMU =
* [https://dl.fedoraproject.org/pub/alt/risc-v/release/41/Server/riscv64/images/Fedora-Server-Host-Generic-41.20250224-1026a2d0e311.riscv64.raw.xz <code>Fedora-Server-Host-Generic-41.20250224-1026a2d0e311.riscv64.raw.xz</code>]


You will need a very recent version of qemu. If in doubt, compile from upstream qemu sources.
The file you've just downloaded will be referred to as <code>IMAGE.raw.xz</code> below.


<pre>
A matching <code>IMAGE.raw.xz.sha256</code> file is also provided: this allows you to validate the integrity of your download.
qemu-system-riscv64 \
    -nographic \
    -machine virt \
    -smp 4 \
    -m 2G \
    -kernel bbl \
    -object rng-random,filename=/dev/urandom,id=rng0 \
    -device virtio-rng-device,rng=rng0 \
    -append "console=ttyS0 ro root=/dev/vda1" \
    -device virtio-blk-device,drive=hd0 \
    -drive file=Fedora-Developer-Rawhide-xxxx.n.0-sda.raw,format=raw,id=hd0 \
    -device virtio-net-device,netdev=usernet \
    -netdev user,id=usernet,hostfwd=tcp::10000-:22
</pre>


The latest disk images (since late 2018) build a proper Fedora kernel, incl. loadable modules and initramfs. If you are using newer disk images you might want to add initramfs option:
=== Writing the disk image to the target media ===


<pre>
The disk image is intended to work regardless of the type of media it's written to: SD cards, USB sticks, NVMe and SATA drives are all known to work. NVMe is preferred, if available on your machine, because it performs the best, but you can choose whatever is more suitable to you. SD cards, for example, are great when you want to test a disk image without affecting your existing installation.
    -initrd initramfs-<..>.img
</pre>


You can also create <code>qcow2</code> disk image with <code>raw</code> Fedora disk as backing one. This way Fedora <code>raw</code> is unmodified and all changes are written to <code>qcow2</code> layer. You will need to install <code>libguestfs-tools-c</code>.
The disk image comes compressed, so the first step after downloading it is to uncompress it:


<pre>
<pre>
qemu-img create -f qcow2 -F raw -b Fedora-Developer-Rawhide-xxxx.n.0-sda.raw tmp.qcow2 20G
$ unxz IMAGE.raw.xz
virt-resize -v -x --expand /dev/sda1 Fedora-Developer-Rawhide-xxxx.n.0-sda.raw tmp.qcow2
virt-filesystems --long -h --all -a tmp.qcow2
</pre>
</pre>


Then modify above QEMU invocation by changing <code>-drive</code> option to:
The compressed <code>IMAGE.raw.xz</code> file will be replaced by the uncompressed <code>IMAGE.raw</code> file. The latter is the one that can be written to the target media.
<pre>
-drive file=tmp.qcow2,id=hd0
</pre>


You can use up to <code>-smp 8</code>, which is helpful for building large projects.
There are several tools that can be used for writing the disk image. <code>dd</code> is perhaps the most common option:


Once machine is booted you can connect via SSH:
<pre>
<pre>
ssh -p 10000 -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@localhost
$ sudo dd iflag=fullblock oflag=direct status=progress bs=4M if=IMAGE.raw of=/dev/TARGET
</pre>
</pre>


= Boot with libvirt =
Replace `/dev/TARGET` with the name of the actual target device. Please be '''extremely careful''' and ensure that you're using the correct name here: if you get it wrong, you risk '''destroying''' your current OS.


Detailed instructions how to install libvirt: https://docs.fedoraproject.org/en-US/quick-docs/getting-started-with-virtualization/
[https://etcher.balena.io/ balenaEtcher] is another popular option. It's a user-friendly GUI that should make it a lot harder to mess things up.


Quick instructions for libvirt installation (tested on Fedora 29):
== First boot ==
<pre>
dnf group install --with-optional virtualization
systemctl start libvirtd
systemctl enable libvirtd
</pre>


Needs <b>libvirt &ge; 4.7.0</b> which is the first version with upstream RISC-V support. This is available in Fedora 29. You should be able to boot the disk image using a command similar to this:
Once the disk image has been written to the target media, you can pop that into your machine and power it on.


<pre>
The process of getting the firmware to boot from the media is machine-specific and can't be documented in a generic fashion. It usually helps if only one media is connected to the machine at any given time.
# virt-install \
    --name fedora-riscv \
    --arch riscv64 \
    --machine virt \
    --vcpus 4 \
    --memory 2048 \
    --import \
    --disk path=/var/lib/libvirt/images/Fedora-Developer-Rawhide-xxxx.n.0-sda.raw,bus=virtio \
    --boot kernel=/var/lib/libvirt/images/bbl,kernel_args="console=ttyS0 ro root=/dev/vda1" \
    --network network=default,model=virtio \
    --rng device=/dev/urandom,model=virtio \
    --graphics none
</pre>


The latest disk images (since late 2018) build a proper Fedora kernel, incl. loadable modules and initramfs. If you are using newer disk images you might want to add initramfs snippet <code>initrd=/var/lib/libvirt/images/initramfs</code> to <code>--boot</code> option:
Assuming everything is fine, after a few seconds you should see the usual Linux boot messages scroll by on the serial console.


<pre>
After a short while, you will be presented with a login prompt. You can use login `fedora` and password `linux` to gain access.
    --boot kernel=/var/lib/libvirt/images/bbl,initrd=/var/lib/libvirt/images/initramfs,kernel_args="console=ttyS0 ro root=/dev/vda1" \
</pre>


Note that will automatically boot you into the console. If you don't want that add <code>--noautoconsole</code> option. You can later use <code>virsh</code> tool to manage your VM and get to console.
== Post-installation tasks ==


You can use up to <code>--vcpus 8</code>, which is helpful for large projects.
=== Enable the performance CPU governor ===


Add <code>--channel name=org.qemu.guest_agent.0</code> option if you want <code>virsh shutdown <name></code> to work. This requires <code>qemu-guest-agent</code> to be installed in disk image (available in Developer, GNOME and Minimal disk images starting Oct 15, 2018, but not in Nano disk images).
The default CPU governor is `schedutils`, which scales the CPU frequency dynamically. If you want to squeeze every last bit of performance out of your machine, you might want to switch to the `performance` CPU governor. To do so, simply run:


If you want to change hostname before 1st boot install <code>libguestfs-tools-c</code> and then:
<pre>
<pre>
virt-customize -a Fedora-Developer-Rawhide-xxxx.n.0-sda.raw --hostname fedora-riscv-mymagicbox
$ sudo grubby --update-kernel=ALL --args=cpufreq.default_governor=performance
</pre>
</pre>


A quick reference of <code>virsh</code> commands:
A reboot is necessary for the change to take effect.
* <code>virsh list --all</code> - list all VMs and their states
* <code>virsh console <name></code> - connect to serial console (remember: <code>Escape character is ^]</code>)
* <code>virsh shutdown <name></code> - power down VM (see above for more details)
* <code>virsh start <name></code> - power up VM
* <code>virsh undefine <name></code> - remove VM
* <code>virsh net-list</code> - list network (useful for the next command)
* <code>virsh net-dhcp-leases <network_name></code> - list DHCP leases, <code><network_name></code> most likely will be <code>default</code>. This is useful when you want to get IPv4 and SSH to the VM.
* <code>virsh domifaddr <name></code> - alternative for the above two commands, only shows IPv4 for one VM
* <code>virsh reset <name></code> - hard reset VM
* <code>virsh destroy <name></code> hard power down of VM


If you want to use <code>ssh user@virtualMachine</code> you can setup libvirt NSS module. See: https://wiki.libvirt.org/page/NSS_module
=== Disable use of tmpfs for /tmp ===


You might want to expand <code>raw</code> Fedora disk image before setting up VM. Here is one example:
Fedora uses `tmpfs` for `/tmp` by default, but that might cause issues if your machine doesn't have much RAM. If you run into OOMs or other related issues, you can revert to disk-backed `/tmp` by running:


<pre>
<pre>
truncate -r Fedora-Developer-Rawhide-xxxx.n.0-sda.raw xxxx.n.0-sda.raw
$ sudo systemctl mask tmp.mount
truncate -s 40G xxxx.n.0-sda.raw
virt-resize -v -x --expand /dev/sda1 Fedora-Developer-Rawhide-xxxx.n.0-sda.raw xxxx.n.0-sda.raw
virt-filesystems --long -h --all -a xxxx.n.0-sda.raw
virt-df -h -a xxxx.n.0-sda.raw
</pre>
</pre>


Then adjust <code>--disk path=</code> option in libvirt invocation.
A reboot is necessary for the change to take effect.
 
You might want also to setup logging for serial console (in case kernel panics or something else).
 
For this we will be using two commands: <code>virsh edit <name></code> (modifying VM XML) and <code>virsh dumpxml <name></code> (dump VM XML for backup). You need to modify <code><serial></code> node by adding <code><log file='/var/log/libvirt/qemu/fedora-riscv-mymagicbox.serial.log'/></code>. Then power down and power up the VM.
 
Alternatively you can use <code>--serial log.file=/.../whatever.serial.log</code> with <code>virt-install</code> command.
 
If you want less information being displayed during boot then add <code>quiet</code> into <code>kernel_args</code> line, e.g.: <code>kernel_args="console=ttyS0 ro quiet root=/dev/vda1"</code>
 
= Install on the HiFive Unleashed SD card =


These are instructions for the [https://www.sifive.com/products/hifive-unleashed/ HiFive Unleashed board].
=== Enable haveged ===


The disk image (above) is partitioned, but usually we need an unpartitioned ("naked") filesystem. There are several ways to get this, but the easiest is:
If your machine doesn't have a hardware RNG, it might take a long time to boot or accept ssh logins. A possible workaround is to configure a software RNG like so:


<pre>
<pre>
$ guestfish -a Fedora-Developer-Rawhide-xxxx.n.0-sda.raw \
$ sudo dnf install -y haveged
    run : download /dev/sda1 Fedora-Developer-Rawhide-xxxx.n.0-sda1.raw
$ sudo systemctl enable --now haveged.service
</pre>
</pre>


This creates a naked ext4 filesystem called <code>*-sda1.raw</code>.  The naked ext4 filesystem can be copied over the second partition of the SD card.
= Machine-specific instructions =
 
You can also build a custom bbl+kernel+initramfs to boot directly into the SD card using [https://github.com/rwmjones/fedora-riscv-kernel these sources].


= Install on the HiFive Unleashed using NBD server =
While the information above is generally applicable, some machines require additional or even completely different steps.


Look at https://github.com/rwmjones/fedora-riscv-kernel in the <code>sifive_u540</code> branch.  This is quite complex to set up so it's best to ask on the <code>#fedora-riscv</code> IRC channel.
== Physical hardware ==


= Install Fedora GNOME Desktop on SiFive HiFive Unleashed + Microsemi HiFive Unleashed Expansion board =
* [[Architectures/RISC-V/StarFive/VisionFive2|StarFive VisionFive 2]]
* [[Architectures/RISC-V/SiFive/HiFiveUnmatched|SiFive HiFive Unmatched]]
* [[Architectures/RISC-V/SiFive/HiFivePremierP550|SiFive HiFive Premier P550]]


Detailed instructions are provided by Atish Patra from Western Digital Corporation (WDC). See their GitHub page for details and pictures: https://github.com/westerndigitalcorporation/RISC-V-Linux
== Virtual hardware ==


So far two GPUs are confirmed to be working: Radeon HD 6450 and Radeon HD 5450.
* [[Architectures/RISC-V/QEMU|QEMU]]

Latest revision as of 10:55, 26 February 2025

This page explains how to get Fedora running on either physical or virtual RISC-V hardware.

Disclaimer

riscv64 is currently not an officially supported Fedora architecture.

Most packages are built from unmodified Fedora sources, but in several cases architecture-specific patches are necessary. There is an ongoing effort to reduce (and eventually eliminate) this delta. Check out the tracker to see the current status.

Hardware support is limited to what mainline Linux provides, and that usually doesn't include the SoC's integrated GPU. Fedora RISC-V is primarily intended to be used as a headless build host / server environment for now.

Generic instructions

The following installation steps are applicable to most hardware.

If your machine is listed in the machine-specific instructions section below, make sure you check out the corresponding page first, as it might contain important information that (partially or completely) supersedes what's written here.

Requirements

Serial console access

While ssh is likely going to be the primary way you'll interact with the machine, it's useful to have serial console access as a fallback. Moreover, it is required for the initial setup.

The process of connecting the USB to serial adapter is machine-specific and can't be documented in a generic fashion.

First of all, make sure your user is in the dialout group:

$ sudo usermod -a -G dialout $(whoami)

This is necessary to access the serial console. Log out and back in for the change to take effect.

Now plug the USB to serial adapter into your computer. If you only have one such adapters connected, it should show up as /dev/ttyUSB0.

Create a configuration file for minicom, with the name you like, for example ~/.minirc.RISCV. The contents should look like this:

pu port             /dev/ttyUSB0
pu baudrate         115200
pu bits             8
pu parity           N
pu stopbits         1
pu rtscts           No

You will now be able to connect to the serial console by running:

$ minicom RISCV

For added reliability, you can use a stable device name in the configuration file. For example:

$ ls -l /dev/serial/by-id/*
/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 -> ../../ttyUSB0

This output indicates that you should replace /dev/ttyUSB0 with /dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0 in the configuration file.

Media preparation

Downloading the disk image

Disk images can be obtained from:

As of this writing, the most recent disk image is:

The file you've just downloaded will be referred to as IMAGE.raw.xz below.

A matching IMAGE.raw.xz.sha256 file is also provided: this allows you to validate the integrity of your download.

Writing the disk image to the target media

The disk image is intended to work regardless of the type of media it's written to: SD cards, USB sticks, NVMe and SATA drives are all known to work. NVMe is preferred, if available on your machine, because it performs the best, but you can choose whatever is more suitable to you. SD cards, for example, are great when you want to test a disk image without affecting your existing installation.

The disk image comes compressed, so the first step after downloading it is to uncompress it:

$ unxz IMAGE.raw.xz

The compressed IMAGE.raw.xz file will be replaced by the uncompressed IMAGE.raw file. The latter is the one that can be written to the target media.

There are several tools that can be used for writing the disk image. dd is perhaps the most common option:

$ sudo dd iflag=fullblock oflag=direct status=progress bs=4M if=IMAGE.raw of=/dev/TARGET

Replace /dev/TARGET with the name of the actual target device. Please be extremely careful and ensure that you're using the correct name here: if you get it wrong, you risk destroying your current OS.

balenaEtcher is another popular option. It's a user-friendly GUI that should make it a lot harder to mess things up.

First boot

Once the disk image has been written to the target media, you can pop that into your machine and power it on.

The process of getting the firmware to boot from the media is machine-specific and can't be documented in a generic fashion. It usually helps if only one media is connected to the machine at any given time.

Assuming everything is fine, after a few seconds you should see the usual Linux boot messages scroll by on the serial console.

After a short while, you will be presented with a login prompt. You can use login fedora and password linux to gain access.

Post-installation tasks

Enable the performance CPU governor

The default CPU governor is schedutils, which scales the CPU frequency dynamically. If you want to squeeze every last bit of performance out of your machine, you might want to switch to the performance CPU governor. To do so, simply run:

$ sudo grubby --update-kernel=ALL --args=cpufreq.default_governor=performance

A reboot is necessary for the change to take effect.

Disable use of tmpfs for /tmp

Fedora uses tmpfs for /tmp by default, but that might cause issues if your machine doesn't have much RAM. If you run into OOMs or other related issues, you can revert to disk-backed /tmp by running:

$ sudo systemctl mask tmp.mount

A reboot is necessary for the change to take effect.

Enable haveged

If your machine doesn't have a hardware RNG, it might take a long time to boot or accept ssh logins. A possible workaround is to configure a software RNG like so:

$ sudo dnf install -y haveged
$ sudo systemctl enable --now haveged.service

Machine-specific instructions

While the information above is generally applicable, some machines require additional or even completely different steps.

Physical hardware

Virtual hardware