Booting Ubuntu with systemd boot instead of GRUB2

After I’ve been playing around with Arch Linux for quite a while I’ve come to really like booting with systemd boot. It’s fast, very simple to maintain and not as finicky to play around with as GRUB2.

So I set myself the challenge of changing my HTPC running Xubuntu from GRUB2 to systemd boot because you can. That is the main reason. Getting rid of the bloated monster that is GRUB2 is actually secondary. Before actually doing it on the HTPC, I decided to do it on a virtual machine just to be sure nothing went wrong.

I found a great guide made by Josh Stoik at Blobfolio.com and decided to give it a go. You really should go read the guide at Blobfolio as it’s very easy to understand.

It was very easy, it might help that I have been playing around with systemd boot before and I really had a hard time believing that it just worked at my first attempt.

Here are my kernel hooks that I stitched together from this github comment and the guide (here I mainly used the idea of using a variable to set the PARTUUID as I don’t use LUKS or any root flags at the moment):

#!/bin/bash
#
# This is a simple custom kernel hook to populate the systemd-boot entries
# whenever kernels are added or removed during an update.
#


# The PARTUUID of your root partition
PARTUUID="INSERTYOURPARTUUIDHERE"

vmlinuz=$(find /boot -maxdepth 1 -name "vmlinuz-*-generic")
version=$(echo $vmlinuz | grep -o -P "\d+\.\d+\.\d+\-\d+" | sort -V | head -n -1)
latest=$(echo $vmlinuz | grep -o -P "\d+\.\d+\.\d+\-\d+" | sort -V | tail -n 1)

echo ">> COPYING ${latest}-generic. LATEST VERSION."

cat << EOF > /boot/efi/loader/entries/ubuntu.conf
title   Ubuntu
linux   /ubuntu/vmlinuz-generic
initrd  /ubuntu/initrd.img-generic
options root=PARTUUID=${PARTUUID} rw
EOF

for file in initrd.img vmlinuz; do
    cp "/boot/${file}-${latest}-generic" "/boot/efi/ubuntu/${file}-generic"
done

for ver in $version; do

    echo ">> COPYING ${ver}-generic."

cat << EOF > /boot/efi/loader/entries/ubuntu-${ver}.conf
title   Ubuntu ${ver}
linux   /ubuntu/vmlinuz-${ver}-generic
initrd  /ubuntu/initrd.img-${ver}-generic
options root=PARTUUID=${PARTUUID} rw
EOF

    for file in initrd.img vmlinuz; do
        cp "/boot/${file}-${ver}-generic" "/boot/efi/ubuntu/${file}-${ver}-generic"
    done
done

As the guide suggests, you should reinstall the kernel to see if the kernel hooks work. To save even more time, don’t fiddle around with copying the kernels manually. Just wait until you’ve created your kernel hooks and then reinstall the latest kernel as it’ll all be done for you with the proper naming and all:

apt install --reinstall linux-image-[VERSION]-generic

That is all it takes and you can then install Systemd boot

If we look at the effect it had a systemd-analyze shows:

unax@cerberus:~$ systemd-analyze 
Startup finished in 4.281s (kernel) + 4.244s (userspace) = 8.525s
graphical.target reached after 4.229s in userspace
unax@cerberus:~$ systemd-analyze 
Startup finished in 361ms (firmware) + 273ms (loader) + 3.277s (kernel) + 2.684s (userspace) = 6.596s
graphical.target reached after 2.676s in userspace

To finish it off here is a neofetch of the system:

           `-/osyhddddhyso/-`              unax@cerberus 
        .+yddddddddddddddddddy+.           --------- 
      :yddddddddddddddddddddddddy:         OS: Ubuntu 18.04.1 LTS x86_64 
    -yddddddddddddddddddddhdddddddy-       Kernel: 4.15.0-45-generic 
   odddddddddddyshdddddddh`dddd+ydddo      Uptime: 31 minutes 
 `yddddddhshdd-   ydddddd+`ddh.:dddddy`    Packages: 1791 (dpkg), 3 (snap) 
 sddddddy   /d.   :dddddd-:dy`-ddddddds    Shell: /bin/bash 4.4.19 
:ddddddds    /+   .dddddd`yy`:ddddddddd:   Resolution: 1920x1080, 1920x1080 
sdddddddd`    .    .-:/+ssdyodddddddddds   DE: Xfce 
ddddddddy                  `:ohddddddddd   CPU: Intel i5-4460 (2) @ 3.198GHz 
dddddddd.                      +dddddddd   CPU Usage: 14% 
sddddddy                        ydddddds   GPU: VMware SVGA II Adapter 
:dddddd+                      .oddddddd:   GPU Driver: vmwgfx, vmwgfx 
 sdddddo                   ./ydddddddds    Memory: 1742MiB / 3921MiB 
 `yddddd.              `:ohddddddddddy`    Disk (/): 9,1G / 39G (25%) 
   oddddh/`      `.:+shdddddddddddddo      
    -ydddddhyssyhdddddddddddddddddy-       
      :yddddddddddddddddddddddddy:
        .+yddddddddddddddddddy+.                                   
           `-/osyhddddhyso/-`

Next up is doing it on the HTPC and maybe a little more about the current setup.

Back to Vanilla

Since Blizzard announced World of Warcraft Classic back in november, I’ve been having an itch for running around in Stranglethorn Vale for hours while getting relentlessly ganked by high levels.  I’ve longed for some of the old, now replaced, music in the zones (ie. the music in pre-Cataclysm Barrens). Also, I’ve never really been a fan of the world itself, after the Cataclysm. There was just something about old Barrens. Right now on the live servers, you breeze through content until you hit Legion and Blizzard somehow managed to make almost 15 years of content completely irrelevant.

I feel the game was harder back in Vanilla and I never had more fun with a game, than I did back then. I know that nostalgia is a big part of this and since my old guild mates (and me) have grown up, it will never really be the same, even when World of Warcraft Classic releases (at some point).

To get my fill of Vanilla right now I found a private server running on the World of Warcraft 1.12.1 client (which I conveniently enough had lying around from when I played around with a Mangos local server years ago) , where I could play to my hearts desire. At first I tried playing around with the standard interface, but ended out missing some features. Luckily World of Warcraft has always been very customisable, so after looking around at different source for Vanilla addons, I ended up with an interface looking like this:

I’m not in any way calling myself an expert in creating user interfaces for World of Warcraft (in Live I run a pretty standard ElvUI setup), but I really like this look and it suits my needs (for now, I’m only level 6 after all). Here is a list of the addons that I’ve used:

  • !OmniCC – Cooldown count for everything (I found this one here, as the version I found on github didn’t work properly for Vanilla)
  • !QuestieThe vanilla quest helper
  • AddOnOrganizer – Makes it possible to enable and disable addons on the fly
  • AdvancedTradeSkillWindow – Changes the tradeskill windows for a better overview and new functionality
  • Atlas – Contains Atlas, AtlasLoot and AtlasQuest which are invaluable addons when doing instances and raids
  • BetterAlign – Creates a temporary grid on the screen and makes it easier to align a custom interface perfectly
  • BetterCharacterStats – Improves the character window, with a much better and more detailed stats
  • BigWigs – A bossmod addon, that helps in instances
  • BlizzMo – Makes it possible to move and resize blizzard windows
  • Bongos – Custom actionbars, that are easily moved, resized etc.
  • Cartographer – A world map replacement addon
  • Cartographer_Herbalism – Herbalism module for Cartographer
  • Cartographer_Minimap_Coords – A module for Cartographer that adds coordinates to the minimap
  • Cartographer_Mining – Mining module for Cartographer
  • Cartographer_Treasure – Treasure module for Cartographer
  • ChatSuey – A collection of small chat enhancement addons
  • ClassicSnowFall – Changes keybindings so they activate at the key press instead of the key release
  • cooline – Gives a cooldown bar you can move around the screen
  • EQCompare – An equipment compare addon, that gives you comparison tooltips between what you hover over and what you’re wearing
  • EQL3 – Extended Quest Log 3, with an improved quest tracker
  • LunaUnitFrames – Unit frame replacement
  • MBB – MinimapButtonBag, cleans up the minimap and adds all addon buttons into a clickable menu that folds out
  • MikScrollingBattleText – Scrolling combat text
  • oCB – Player and target castbar addon
  • OneBag – A one window bag
  • OneBank – A one window bank
  • Postal – Improves the mail interface
  • ShaguPlates – Changes the nameplates
  • TinyTip – Contains TinyTip, TinyTipExtras and TinyTipOptions, which greatly improves the tooltips
  • VanillaGraphicBoost – Improves the graphics in Vanilla by automating these console commands
  • VCB – Changes the buff frame
  • XLoot – Contains XLoot, XLootGroup, XLootMaster and XLootMonitor that improves the loot windows and rolling for items

The final touch is that I’ve changed all the fonts to Ubuntu Regular by changing all 5 files in the Fonts folder in the World of Warcraft folder to a .ttf version of Ubuntu Regular.

I might change the UI around at some point when I level or change class and then I might update the blog again. There is also the chance that I wont.

The Perfect Marvel Mission

Lately I’ve been trying to catch up on the different Marvel films, that I’ve missed over the last many years. 3 years ago the big hype on the internet was The Avengers and you were hard put to visit reddit, imgur, Twitter and even Facebook without people writing about it, posting GIFs and other things from the film. I mean, who don’t remember this fantastic scene?

This Friday, I finally took myself the time to sit down with my wife and watch The Avengers, being only 3 years later than all the hype. It was good, not the best film I’ve ever seen, but I was entertained none the less. This came after I watched Captain America: The Winter Soldier a few weeks back and before that I had watched Iron Man, Iron Man 2, Iron Man 3, The Incredible Hulk and Guardians of the Galaxy (not necessarily in that order) and also some of Marvel’s Daredevil on Netflix (Only the first 3 episodes as I found it a tad gritty for my likings, but I haven’t yet ruled out that I might get to watching all of it at some point).

What I got from watching Captain America: The Winter Soldier before I watched The Avengers, was that apparently Earth (namely New York, which always equals the entire Earth in films) had been destroyed by an alien attack. The problem was that I hadn’t seen that happen and had no idea exactly what had transpired. The same issue arose when I was watching Iron Man 3. This meant that I was rather confused and then decided to set myself a mission. A mission I’ve dubbed ‘The Perfect Marvel Mission’.

I know that I’m in no way the first person to do this, that would just be silly to think, but now I want to get into the right chronology before Captain America: Civil War arrives next year and Guardians of the Galaxy 2 arrives in 2017. To do this I want to watch all the films in the correct order (I’m going to skip the shows, as I consider myself only a moderate fan and films which are 2 and half hour in length is easier to digest).

Doing a Google search for ‘Marvel movie order’ returns a plethora of results (approximately 20 million of them) where you can read essays about the subject and people have some very strong opinions about it. I tried reading some forum posts about it and it ended up in a giant discussion on when to correctly place Ant Man (before or after Agents of S.H.I.E.L.D. season 2). It was too much and the reasons for both arguments seemed, to me, to be valid. In the end I simply chose the first search result on CNET. They had this very easy image that I thought I would follow:

This means that my new mission in ‘life’ is to get on watching loads of Marvel superhero films! Never mind that I still have to watch Avengers: Age of Ultron, I also have to re-watch all the other films I’ve already seen (I’m not going to skip The Incredible Hulk! I like Mark Ruffalo as the Hulk). I wonder if I’ll ever find the time to actually do it

I guess it’s about time to get back to writing about technical stuff again and I might have something in the pipeline as I’ve started developing an Android app, that might be useful to write about. Not only that, I’m also back to working on using my Raspberry Pi Home Server and I might have something to say about that. Finally I’ve also fiddled with making a nice World of Warcraft add-on, that can make statistics about XP gained, time to level and other information when being boosted in an instance by a high level character. Just because I could.

Stay tuned or don’t, that is entirely up to you.