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.
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.
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.
After installing Debian Testing "Bullseye" mid March 2020 I got an
error trying to run
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
/etc/apt/sources.list. It’s called "Testing" for a reason, I
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’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:
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.)
(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.
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.