The Linux Experiment: Conclusion

A few months back now I have written about how I was trying to use Linux as my main operating system. I will not reiterate my motives here. If you are interested feel free to read the initial story back from March. In my one-month-later story I was already having some doubts, but continued to stick with it.

Read More »

OneDrive Sync On Linux With RCLONE

In my quest to move to Linux as a daily driver it was important for me that I could continue to use Microsoft’s OneDrive cloud storage. Unsurprisingly, Windows 10 comes bundled with a OneDrive sync client. There is no official Linux support though, so I had to resort to a 3rd party tool. Luckily, there is a very powerful utility called rclone that does almost exactly what I want and I’ll explain how I have it set up to suit my needs.

Spoiler: it’s not as convenient as Microsoft’s sync client, but it has other things going for it.

Read More »

The Linux Experiment: One Month Later

It has been roughly a month since I switched from using Windows 10 as my main operating system to Linux. The reasons for that have all been detailed in The Switching Windows to Linux Experiment blog post. Now I will share a few of the experiences I have made during the first month (it’s been that long already) and what I think about how well it is going.

Let me address the elefant in the room first, the distribution. I think that is likely the first question you, the reader, would ask. The short answer is Pop!_OS by System76.

Read More »

Debian Testing “Bullseye”: The Repository Does Not Have a Release File

After installing Debian Testing "Bullseye" mid March 2020 I got an error trying to run apt update.

E: The repository 'http://security.debian.org./debian-security 
bullseye/updates Release' does not have a Release file.

Unfortunately, the Debian maintainers managed to let a bug creep into the /etc/apt/sources.list. It’s called "Testing" for a reason, I guess.

The offending lines are this.

deb http://security.debian.org/debian-security/ bullseye/updates main
deb-src http://security.debian.org/debian-security/ bullseye/updates main

Note "bullseye/updates", which is where the error is. Change those two lines to look like this.

deb http://security.debian.org/debian-security/ bullseye-security main
deb-src http://security.debian.org/debian-security/ bullseye-security main

After that, the update will work. I have noticed that in a later version of the installer this bug has been fixed.

Debian Testing “Bullseye”: NVIDIA Driver Install

Debian’s documentation on installing the proprietary NVIDIA driver does not (yet) cover the "Bullseye" release because, as of the time of writing, it is still in testing. However, the documentation for Debian 10 "Buster" can still be used.

The main difference is that there is no "backports" for "Bullseye" – although I have found the folders on repo mirrors. At least to me they seemed to be there. Anyway.

What you have to do is to add "contrib" and "non-free" to your main mirror definition, not to backports. You don’t need to add a repo for backports because you’ll only get an error.

(Unfortunately, I haven’t made a note of the error message)

This is what you have to do:

  • Open /etc/apt/sources.list as sudo/root.

  • Add "contrib" and "non-free" to the end of the main repo so it looks like this.

    deb http://deb.debian.org/debian bullseye main contrib non-free

(The observant among you might have noticed that the feature image is from a Pop!OS installation, not Debian. I’ve since changed the distribution.)

The Switching Windows to Linux Experiment

(Beware of the many text)

For the longest time I have been a Windows user. My first computer came with Windows 98 SE (ignoring the Amiga before it) and I’ve used Windows as the main operating system for almost all that time since then. There was a brief excursion into the Apple world for about a year or two, but apart from that: Microsoft’s creation. It’s not that I have not tried using Linux, it’s just that for many years my needs could not be easily satisfied by a Linux based operating system. For one, I have always enjoyed PC gaming and I still do. I’ve tried going with a console, but that was one of the worst decisions I had made in 2019. There also was a long period where I had used my computer as a TV, a time where Youtube and all the other streaming services hadn’t existed. And although I had managed to get the TV tuners to somehow work, it was not comparable to the experience on Windows. For my use case, over all those years, Microsoft’s OS simply was the Vulkan choice. But now in 2020, this isn’t the case anymore. Things have changed, including the maturity of Linux as well as my own needs and my views. Therefore, it’s about time that I revisit this topic.

Read More »

AdoptOpenJDK 8 NullPointerException sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)

I recently had to deal with this little bugger as we moved from the OpenJDK 8 package supplied by the Linux distro of choice to AdoptOpenJDK 8. It is important to know that we completely uninstalled OpenJDK, including all its transient dependencies.

(And in due time we’ll uninstall Java 8 and replace that grandpa as well)

As a result, parts of our application didn’t work any longer, resulting in this nice and shiny Java stacktrace.

2019-05-03 08:22:07,345 ERROR [qtp1896708863-35] [PlotChartController] [/][/][/]- error while creating chart image
java.lang.NullPointerException
        at sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1264)
        at sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:219)
        at sun.awt.FontConfiguration.init(FontConfiguration.java:107)
        at sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:774)
        at sun.font.SunFontManager$2.run(SunFontManager.java:431)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.SunFontManager.<init>(SunFontManager.java:376)
        at sun.awt.FcFontManager.<init>(FcFontManager.java:35)
        at sun.awt.X11FontManager.<init>(X11FontManager.java:57)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.lang.Class.newInstance(Class.java:442)
        at sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74)
        at java.awt.Font.getFont2D(Font.java:491)
        at java.awt.Font.defaultLineMetrics(Font.java:2176)
        at java.awt.Font.getLineMetrics(Font.java:2246)
        at org.jfree.chart.axis.DateAxis.estimateMaximumTickLabelWidth(DateAxis.java:1453)
        at org.jfree.chart.axis.DateAxis.selectHorizontalAutoTickUnit(DateAxis.java:1365)
        at org.jfree.chart.axis.DateAxis.selectAutoTickUnit(DateAxis.java:1340)
        at org.jfree.chart.axis.DateAxis.refreshTicksHorizontal(DateAxis.java:1616)
        at org.jfree.chart.axis.DateAxis.refreshTicks(DateAxis.java:1556)
        at org.jfree.chart.axis.ValueAxis.reserveSpace(ValueAxis.java:807)
        at org.jfree.chart.plot.CombinedDomainXYPlot.calculateAxisSpace(CombinedDomainXYPlot.java:364)
        at org.jfree.chart.plot.CombinedDomainXYPlot.draw(CombinedDomainXYPlot.java:442)
        at org.jfree.chart.JFreeChart.draw(JFreeChart.java:1235)
        at org.jfree.chart.JFreeChart.createBufferedImage(JFreeChart.java:1409)
        at org.jfree.chart.JFreeChart.createBufferedImage(JFreeChart.java:1389)
        at org.jfree.chart.ChartUtilities.writeChartAsPNG(ChartUtilities.java:183)

I obviously removed some (a lot) parts to make it more readable and to hide corporate IP 😉 But this is the relevant part.

I found this bug report on Github and for once, plowing through the comments, it helped me. As is mentioned there, the culprit is the missing “fontconfig” package. So, I added another Ansible task to our playbook to provision the server et voila, the problem is gone.

- name: Install fontconfig package
  package:
    name: fontconfig
    state: present
    tags:
      - java

As mentioned earlier, we had wiped all that was relevant to OpenJDK off the system and by doing so, also uninstalled the “fontconfig” package. Otherwise this error wouldn’t have surfaced. But that’s the benefit of starting with a clean slate. This way you know if something is missing and don’t get surprised by errors all of a sudden while, at the same time, it is working on another machine.