Today I took the plunge replacing my aging Fedora 26 install with Fedora Silverblue. What is Silverblue you ask?
Silverblue is the new face of Fedora Atomic Workstation from Project Atomic. With good support for container-focused workflows, this variant of Fedora Workstation targets developer communities. If you want to emphasize that it is part of the Fedora project, calling it Fedora Silverblue is fine, too.
As a long time member of Project Atomic I had always wanted to use Atomic Workstation for my work laptop. I was keenly aware of the advantages of using an ostree based system on servers and it only made sense to use the same technology locally. However, time generally kept me from making the change. Switching to Atomic Workstation was always the 3rd or 4th thing on my TODO list. Today there was time.
Step 1: Backing Up
Technically speaking, one should be able to install an operating system without the need to back up everything up. However, if backups don’t happen and something goes wrong you’re going to have a bad time. Today I spent multiple hours combing through my home directory looking for things that must be backed up just in case. After finding everything required and placing it on local removable encrypted disk I moved on to step 2.
Step 2: Creating the Media
I grabbed the ISO from the Silverblue site and created the media the old school way. The instructions on the download page are great and I’m sure they work fine, but I’m so used to using dd for media copies I just went with that:
$ sudo dd if=Fedora-AtomicWorkstation-ostree-x86_64-28-1.1.iso of=/dev/sdb
Warning: If you do end up using dd make double sure your output file (of=) is pointed at the disk you are expecting!!!
Step 3: Install
And here is where the excitement for me really began. The official installation guide is quite good. I ended up following the manual partition instructions as it was similar to how I normally install vanilla Fedora. I set up my disks, and kept my old /home partition and mounting it to /var/home per instructions. The only additional thing I did that wasn’t in the instructions was I went into the Network & Host Name where I connected to WiFi and changed my host name before clicking Begin Installation.
This gave me some anxiety because at this point I had blown away my root partition so I didn’t really have a workable system to use if the installation didn’t work. So I did what any sane person would do and I decided to reboot and try again.
Second time’s the charm
This time I followed the same pattern except I didn’t connect to WiFi. I did still set my host name though. Installation went without a hitch and within about 7 minutes it was time to reboot into my new system.
Step 4: Initial Set Up
The machine rebooted, I unlock my encrypted partition, and everything looks good. A greeter popped up to set up a user, etc.. Everything you expect from a modern GNU/Linux system occurred. I figured this is the best time to update the system to the newest image so I drop to a terminal and execute:
# rpm-ostree upgrade
For whatever reason pulling the update ended up being slow. Really slow. After 25 minutes the update exited with failure. I tried adding –check just to make sure there was literally an update, and it failed as well. For the heck of it I rebooted and did it again and upgrading succeeded. Again, the network download was really slow. This time it took around 35-40 minutes to pull the update but once it was pulled down the deployment happened perfectly.
Most things on Silverblue should be installed via Flatpak or executed in a container via podman or docker. There were a few tools I decided to overlay onto the deployment. These packages were:
- tmux – terminal multiplexer
- weechat – console IRC client
- rpmdevtools – mainly for rpmdev-extract
In fairness weechat these could all easily run via container, but to get up and going quickly I decided to overlay them for the time being. The most important one (for me) was rpmdevtools as there were a few packages which refused to overlay and my best move was to extract the contents (which were config files) and move them to the right locations in /etc. Not ideal, but not Silverblue’s fault.
Step 4: Install Editor
For this I decided to go with flatpak. First I needed to add the flathub remote which can be found here. Next I needed to add it as a remote:
$ sudo flatpak remote-add flathub /etc/flatpak/remotes.d/flathub.flatpakrepo
Then install my editor:
$ sudo flatpak install flathub com.visualstudio.code Required runtime for com.visualstudio.code/x86_64/stable (runtime/org.freedesktop.Sdk/x86_64/1.6) found in remote flathub Do you want to install it? [y/n]: y Installing in system: org.freedesktop.Sdk/x86_64/1.6 flathub fd7d657c9a36 org.freedesktop.Platform.VAAPI.Intel/x86_64/1.6 flathub 82006efc71d3 org.freedesktop.Platform.ffmpeg/x86_64/1.6 flathub d757f762489e org.freedesktop.Sdk.Locale/x86_64/1.6 flathub 346dd3511a8c com.visualstudio.code/x86_64/stable flathub 6cba55350228 permissions: ipc, network, pulseaudio, x11, dri file access: host dbus access: org.freedesktop.Notifications, org.freedesktop.secrets Is this ok [y/n]: y Installing: org.freedesktop.Sdk/x86_64/1.6 from flathub [####################] 17 delta parts, 148 loose fetched; 324907 KiB transferred in 35 seconds Now at fd7d657c9a36. Installing: org.freedesktop.Platform.VAAPI.Intel/x86_64/1.6 from flathub [####################] 1 delta parts, 2 loose fetched; 2623 KiB transferred in 1 seconds Now at 82006efc71d3. Installing: org.freedesktop.Platform.ffmpeg/x86_64/1.6 from flathub [####################] 1 delta parts, 2 loose fetched; 2652 KiB transferred in 1 seconds Now at d757f762489e. Installing: org.freedesktop.Sdk.Locale/x86_64/1.6 from flathub [####################] 4 metadata, 1 content objects fetched; 14 KiB transferred in 0 seconds Now at 346dd3511a8c. Installing: com.visualstudio.code/x86_64/stable from flathub [####################] Downloading: 94.7 MB/94.4 MB (3.6 MB/s) Now at 6cba55350228.
Lastly, verify it installed as expected:
$ flatpak run com.visualstudio.code
For the heck of it I also checked to see if it would add the program to the Gnome Menu and it was there!
My next steps will be getting some dev containers for languages I tend to use the most frequently.
Step 5: Be Happy
The end result is that I’m sitting here using Silverblue writing a blog post on setting up Silverblue. Was it 100% smooth with no issues? No, but it was smooth enough. The change should force me to start doing things I should already be doing in containers … in containers.
If you are interested in running on Silverblue as well I recommend giving it a shot. Take a gander at the main website and, if you’re ready to truly move your workflow to containers and flatpaks, join in!