Welcome to Planet openSUSE

This is a feed aggregator that collects what openSUSE contributors are writing in their respective blogs.

To have your blog added to this aggregator, please read the instructions.


Friday
06 December, 2019


face

Dear Tumbleweed users and hackers,

Once again I’m spanning two weeks; besides the normal work on getting you openSUSE Tumbleweed updated and timely delivered, the release team has been working together with the build service team to implement/stabilize the OBS-internal staging workflow. There is (should) not be any real noticeable difference for the contributors – except the new used URLs. The Factory Staging dashboard can now be found at https://build.opensuse.org/staging_workflows/1

During the last two weeks, we have pushed out 10 Tumbleweed Snapshots (1121, 1122, 1123, 1124, 1126, 1127, 1128, 1202, 1203 and 1204) containing those changes:

  • openSSL 1.1.1d
  • YaST updates
  • Linux kernel 5.3.12
  • Mesa 19.2.6
  • firewalld 0.7.2
  • bind 9.14.8
  • alsa 1.2.1
  • fprintd 0.9.0
  • Perl 5.30.1
  • QEmu 4.2.0-rc3

Currently, all stagings are full and a lot of things are happening – and OBS does not like me for this it seems. Stagings seem to progress a bit slower at the moment than they used to. But this could be just a timing issue as all stagings were rebased at the same time after the workflow switch. Hopefully, things will settle soon there. The notable changes being staged at the moment are:

  • RPM 4.15.0
  • Python 3.8
  • Rust 1.39.0: break Firefox and Thunderbird so far
  • libxml 2.9.10
  • Linux kernel 5.4.1
  • libvirt 5.10.0
  • KDE Frameworks 5.17.4
  • KDE Applications 19.12.0 (currently rc2 in testing)
  • Qt 5.14.0 (currently release candidate in testing)

Thursday
05 December, 2019


face

As usual, during this sprint we have been working on a wide range of topics. The release of the next (open)SUSE versions is approaching and we need to pay attention to important changes like the new installation media or the /usr/etc and /etc split.

Although we have been working on more stuff, we would like to highlight these topics:

  • Support for the new SLE installation media.
  • Proper handling of shadow suite settings.
  • Mount points handling improvements.
  • Help others to keep the Live Installation working.
  • Proper configuration of console fonts.
  • Better calculation of minimum and maximum sizes while resizing ext2/3/4 filesystems.
  • Small fixes in the network module.

The New Online and Full SLE Installation Media

The upcoming Service Pack 2 of SUSE Linux Enterprise products will be released on two media types: Online and Full.

On the one hand, the Online medium does not contain any repository at all. They will be added from a registration server (SCC/SMT/RMT) after registering the selected base product. The Online medium is very small and contains only the files needed for booting the system and running the installer. On the other hand, the Full medium includes several repositories containing base products and several add-ons, which can help to save some bandwidth.

Obviously, as the installer is the same for both media types, we need to adapt it to make it work properly in all scenarios. This is an interesting challenge because the code is located in many YaST packages and at different places. Keep also in mind that the same installer needs to also work with the openSUSE Leap 15.2 product. That makes another set of scenarios which we need to support (or at least not to break).

The basic support is already there and we are now fine-tuning the details and corner cases, improving the user experience and so on.

Proper Handling of Shadow Suite Settings

A few weeks ago, we anticipated that (open)SUSE would split system’s configuration between /usr/etc and /etc directories. The former will contain vendor settings and the latter will define host-specific settings.

One of the first packages to be changed was shadow, which stores now its default configuration in /usr/etc/login.defs. The problem is that YaST was not adapted in time and it was still trying to read settings only from /etc/login.defs

During this sprint, we took the opportunity to fix this behavior and, what is more, to define a strategy to adapt the handling of other files in the future. In this case, YaST will take into account the settings from /usr/etc directory and it will write its changes to a dedicated /etc/login.defs.d/70-yast.conf file.

Missing Console Font Settings

The YaST team got a nice present this year (long before Christmas) thanks to Joaquín, who made an awesome contribution to the YaST project by refactoring the keyboard management module. Thanks a lot, Joaquín!

We owe all of you


face

Intro

As some may have already noticed, openSUSE MicroOS introduced a /usr/etc directory and some configuration files are already moved to this directory.

What’s behind this move? For a better understanding, let’s first look how configuration files are handled by RPM today:

RPM and Configuration Files

RPM has limited support for updating configuration files. In the end this consist of two simple choices:

  • modified configuration files are moved away during upgrade and the admin has to redo the changes (.rpmsave files).
  • modfied configuration files are kept and changes done by the distribution are ignored (.rpmnew files). In the end the service may not work or could even be insecure!

Both options are not really user friendly and will most likely lead to a broken or insecure service after an upgrade, which requires manual work by the admin. On desktop systems or a simple server this may be tolerable, but for big clusters this can lead to a huge amount of work.

There are several alternative solutions for this like Three-Way-Diff or doing the update interactively, but the first one does not solve the problem if conflicting changes are done, and the second one is no solution for fully automated updates.

Atomic Updates

For atomic systems another layer of complexity is added, because different states may contain different versions of a configuration file. So how can this happen? An atomic update is a kind of update that:

  • Is atomic
    • The update is either fully applied or not applied at all
    • The update does not influence your running system
  • Can be rolled back
    • If the update fails or if the update is not compatible, you can quickly restore the situation as it was before the update

The update will be activated by rebooting into the new state, so after an update, before the reboot, the changes done by the update are not visible. If an admin or configuration management software changes the configuration files in the runnung system during this time, this will create conflicts, and needs manual interaction again.

Goal

The goal is to provide a concept working for most packages and their configuration files, which makes automatic updates much easier and robust. For that a new way to store and manage configuration files is needed.

Requirements for a Solution

The new solution should make sure that:

  • It’s visible to the admin that something got updated
  • It’s visible which changes the admin made
  • Package and admin changes should be merged automatically
  • There should be only one directory to search for default configuration files

Solutions

As a longterm solution no package should install anything into /etc any more, this directory should only contain host specific configuration files created during installation and changes made by the system administrator. Packages are supposed to install their default configuration files to another directory instead.

For SUSE/openSUSE the decision was made to use /usr/etc as the directory for the distribution provided configuration files.

For merging the package and admin configuration


face

Election time is here!

Two seats are open for election on the openSUSE Board. Gertjan Lettink completed his second term. Simon Lees completed his first term and thus he is eligible to run as a Board candidate again should he wish to do so.

The election schedule is as follows:

== Phase 0 ==

5 December 2019

* Announcement of the openSUSE Board election 2019-2020

* Call for Nominations and Applications for Board candidacy

* Membership drive. Become an openSUSE Member. Take the opportunity to apply for an openSUSE Membership during this phase (in order to vote or to run as a candidate).

25 December 2019

* Nominations and Applications for Board candidacy close

== Phase 1 ==

26 December 2019

* Announcement of the final list of candidates

* Campaign begins

* Membership drive continues, opportunity to apply for openSUSE Membership, but members will only be eligible to vote and not run as a candidate.

== Phase 2 ==

16 January 2020

* Ballots open: Please cast your vote during this time

* Campaign continues

31 January 2020

* Ballots close

1 February 2020

* Announcement of the results

The Election Committee is composed of Edwin Zakaria and Ish Sookun.

Only openSUSE members are eligible to run for openSUSE Board openings. Election Committee officials, however, are not eligible to run in order to avoid conflicts of interest. To stand for a position in the openSUSE Board please send an email to:

* opensuse-project@opensuse.org and * election-officials@opensuse.org

If a member would like to nominate somebody else, please inform the Election Committee and the officials will contact the nominee to ask whether s/he would like to run as a Board candidate.

The Election Committee is hereby calling for Nominations and Applications for the openSUSE Board.


face

Easy build and debugging in KVM and Emulator environments We have just created osc 0.167 release which focuses on the local build functionality. It is way easier now to deal with VM builds (eg. inside of KVM) and also building for foreign hardware architecture becomes way easier now. Local shell support in any VM osc used to have a special implementation for jumping inside of a chroot. This functionality has been moved to the build...


Wednesday
04 December, 2019


Jakub Steiner: Conferences

18:10 UTCmember

face

This year I haven’t done any drone-related travelling. The sponsorship deal fell through and Rotorama didn’t participate in DCL. I admit I haven’t been practicing as much as I would need to to do any better in the local races either.

So at least I got the world of FOSS to get out of the couch.

Berlin

Tobias organized yet another icon-related hackfest in Berlin earlier this year. This time we had some talented young developers help us out with the tooling. This effort to focus on the tools as well as the assets is continuing and we’ll have some more exciting news to share soon.

Hackfest Berlin 2019 from jimmac on Vimeo.

Thessaloniki

GUADEC continues bringing awesome southern locations, which a vitamin D deprived monkey from a rainy climate can’t appreciate enough. I have fallen back to my comfort zone and only given a short workflow/demo on icon design this year, mainly because Tobias has been giving great talks on focusing on design.

I still have a video to finish editing, but it ended up more of a personal one so I’m not sure I’ll publicize it that much.

the Hague

And we’re closing the year with another design hackfest. Big shout out to Hans de Goede and Carlos Garnacho for organizing a shell hackfest in the Netherlands, and mainly allow some designers crash the party to revive our efforts in attacking some of the downsides of the current overview design. The facilities of Revspace allowed us to meet face to face, mind map on the whiteboard, iterate on some prototypes and move forward considerably compared to the usual cycle spanning months.


face

Our infrastructure status page at https://status.opensue.org/ is using Cachet under the hood. While the latest update brought a couple of bugfixes it also deprecated the RSS and Atom feeds, that could be used to integrate the information easily in other applications.

While we are somehow sad to see such a feature go, we also have to admit that the decision of the developers is not really bad - as the generation of those feeds had some problems (bugs) in the old Cachet versions. Instead of fixing them, the developers decided to move on and focus on other areas. So it's understandable that they cut off something, which is not in their focus, to save resources.

As alternative, you might want to subscribe to status changes and incident updates via Email or use the API that is included in the software for your own notification system. And who knows: maybe someone provides us with a RSS feed generator that utilizes the API?


face

Sometimes it's a good idea to follow best practices. This is what we did by following the recommendations for "general-purpose servers with a variety of clients, recommended for almost all systems" from https://ssl-config.mozilla.org/.

With this, our services accept only TLS 1.2 connections and the latest elliptic curve ciphers. If your client or browser does not support these settings, it's definitely time for you to consider an update.

While we are looking for TLS 1.3 support, the openssl version on our systems (running currently Leap 15.1) does not support it - yet. Once there is an update, we'll let you know.


face

Please don't be surprised, if you visit our Etherpad instance at https://etherpad.opensuse.org/ today: the new version also comes with a new theme. All the old pads are still there and should be available under their old URL.


face

Version 8, a new major version of Red Hat Enterprise Linux was released this spring. Now that CentOS 8 is also available, there is a rapidly growing interest in syslog-ng running on these platforms. From this blog, you can learn about the availability of the current syslog-ng package and future plans.

Before you begin

Depending on your company’s policies and/or technical requirements, you have several choices about the syslog-ng package to use and there will be even more after the next release. If you do not need Kafka or one of the Java-based destination drivers, the syslog-ng package in EPEL might be your best choice. If you are not afraid of possible bugs and want to experience the latest developments, my git snapshot repository is updated regularly from git. Right now, there is limited choice besides these two packages, but it will change in the near future.

EPEL

Version 3.23.1 of syslog-ng is now available in EPEL 8. EPEL stands for Extra Packages for Enterprise Linux, a repository for RHEL (and CentOS) containing packages not available in RHEL. The packages in the repository are maintained by Fedora package maintainers, not Red Hat, but thanks to their high-quality standards, packages from this repository are often used even by companies, which otherwise do not allow 3rd party repositories.

As you can see, EPEL 8 does not use the latest available syslog-ng version, but the one available at the time EPEL 8 was created. This means that EPEL 8 will likely contain syslog-ng 3.23.1 forever, that is, until EPEL 8 is EoL. There are rumors, however, that once a new RHEL minor version is available, you will be able to upgrade the syslog-ng package in EPEL.

The syslog-ng package in EPEL 8 is missing a few features due to missing dependencies. These include all the Java-based destination drivers (HDFS, Elasticsearch, Kafka). Elasticsearch is now also supported by the HTTP destination of syslog-ng. There is a C-based Kafka destination driver in syslog-ng, but as librdkafka is too old in RHEL, it is also unavailable in EPEL.

You can learn how to enable the EPEL repository for your OS at https://fedoraproject.org/wiki/EPEL

If you do not need any of the missing drivers or latest functionality, this is probably your best choice.

Limited 3.24 test release

At the time syslog-ng 3.24 was released, most of the syslog-ng dependencies were missing from EPEL. So, I built a syslog-ng for RHEL 8 in a separate repository with only minimal features enabled. This build only carries core syslog-ng features and a few extras, like Python support, the HTTP destination (thus also Elasticsearch) and a few more where dependencies were available.

If you need the latest release and do not depend on one of the missing features, you can use these packages. First you need to enable EPEL (some dependencies are coming from there), then also enable this repository: https://copr.fedorainfracloud.org/coprs/czanik/syslog-ng324el8/

Git snapshot


face

There were 20 openSUSE Tumbleweed snapshots released in the month of November and the snapshots brought in a large amount of updated packages to include KDE Applications 19.08.3, Frameworks 5.64.0 Plasma 5.17.2 and 5.17.3, Linux kernel 5.3.9 and 5.3.11, Mozilla Firefox 70, libvirt 5.9.0 and more. During the month, even Java 12 OpenJDK was dropped from the distribution.

One of the more amazing aspects of Tumbleweed in November, 2020, is that the last 10 snapshots of the month all produced a constant level of stable rating and the last seven had rating of 99 out of 100, according to the Tumbleweed snapshot reviewer.

Closing out the month, there were two snapshots with version upgrades and one snapshot (20191127) that produced some minor changes to a couple Advanced Linux Sound Architecture (ALSA) packages.

The first Tumbleweed snapshot for December arrived with the 20191202 snapshot. Updated were also made to ALSA with the update of the 1.2.1.1 versions of alsa-plugins, alsa-utils and asla, which dropped 25 patches and fixed regressions for the UCM parser. GNOME had several package updates for gedit, evolution and more. The 3.34.2 version of gnome-software fixed a potential threading crash when using flatpak and had an upstream fix for fwupd. An updated version of ModemManager 1.12.0, which is a DBus-activated daemon that controls mobile broadband devices and connections, had a large amount of improvements and changes to include adding support for Mobile Station Based Assisted-GPS in addition to Mobile Station Assisted Assisted-GPS. Revision control tool mercurial 5.2 made some backwards compatibility changes and added some new feature extensions with its quarterly release. The update of perl 5.30.1 triggered an issue recorded on the snapshot reviewer because the newer version and patch that came in it is problematic for embedded Perl usage. Several other packages were updated in the snapshot to include qemu 4.1.93, re2 20191101, xen and xorg-x11-server. The one major version change in the snapshot was an update to terminal multiplexer tmux 3.0a; the major release that allows its users to easily switch between several programs in one terminal offers new features like added support for the SD (scroll down) escape sequence and for underscore colors.

There were several RubyGems packages updated in snapshot 20191128, but the digital paint application Krita had the most fixes. Krita 4.2.8.2 removed the CSV export filter that had not worked in a long time and fixed the crop tool that loses a constant ratio when the handles touched the canvas edge. The 2.22.0 tuned package, which is a daemon for monitoring and adaptive tuning of system devices, fixed a bug that makes use of the self defined profile_dir argument instead of libexecdir. November’’s update of the wireguard package, which is a free and open-source software application and communication protocol for point-to-point connections, added a syncconf command and


Thursday
28 November, 2019


face

I purchased a medium of the road Bluedio headset that I have been using in both Bluetooth and wired modes. It’s pretty decent and they fit my head well. Unfortunately, my Magilla Guerrilla handling of it I snapped the headband. I didn’t think I was being rough with it but I do have a track record of such things. The break was on the left side near the slide out adjustment and although the set was still wearable, it felt like one ear cushion loose enough that it would slap the side of my head at every turn.

I had three choices, buy new headphones, deal with it and get used to the gentle paddling of my left ear or lastly, fix it and see if I can return it to an acceptable, usable condition. The paddling was completely unacceptable to live with and the the headphones would no longer fit snugly to my head so this option was ruled out. The option to buy something new was also out. My budget had already been allocated and I am not interested in getting new hardware when these were still electronically functional. Why wouldn’t I at least attempt a repair?

The padded headband was well stitched together in such a way that the stitching was easy to delicately remove. This exposed the poly-carbonate (I am assuming) structuring beneath.

Looking at it, the fix wouldn’t be difficult at all to do it, with the right combination of adhesive chemicals: Loctite 444 Ethyl cyanoacrylate liquid adhesive along with Loctite SF 7452 cure-speed accelerator for the aforementioned adhesive.

The nice thing about the accelerator (a trick I learned at work), you can add adhesive and immediately follow it with the accelerator to layer on material and consequently, greatly increase the strength. This was a technique demonstrated when I fixed my broken Porter-Cable Drill some time ago.

Just a few minutes of gluing and applying the celebrator, had extended the life of this headphone set. Would a normal upgrade to something new and better? Probably but that is just not how I roll. I can’t bring myself to toss out something that is easily repaired. I have yet to sew the padded headband back together but I am no longer getting paddled by the ear pad and when I do handstands, they don’t fall off of my head.

This is not an advertisement for Henkel but fixing toys or equipment is easily accessible to just about anyone as long as you have these two chemicals. It opens up a whole new world of fixing possibilities. I have seen YouTube content creators struggle with gluing broken bits together, clamping them for hours at a time when the job can be done in a fraction of the time. Sure, these are not the cheapest of products but they are extremely effective and drastically reduces the likelihood of your project ending in frustration.

References

Loctite 444
Loctite SF7452


Tuesday
26 November, 2019


face

Gnome-shell uses CSS processing code that dates from HippoCanvas, a CSS-aware canvas from around 2006. It uses libcroco to parse CSS, and implements selector matching by hand in C.

This code is getting rather dated, and libcroco is unmaintained.

I've been reading the code for StTheme and StThemeNode, and it looks very feasible to port it gradually to Rust, by using the same crates that librsvg uses, and eventually removing libcroco altogether: gnome-shell is the last module that uses libcroco in distro packages.

Strategy

StTheme and StThemeNode use libcroco to load CSS stylesheets and keep them in memory. The values of individual properties are just tokenized and kept around as a linked list of CRTerm; this struct represents a single token.

Later, the drawing code uses functions like st_theme_node_lookup_color(node, "property_name") or st_theme_node_lookup_length() to query the various properties that it needs. It is then that the type of each property gets determined: prior to that step, property values are just tokenized, not parsed into usable values.

I am going to start by porting the individual parsers to Rust, similar to what Paolo and I did for librsvg. It turns out that there's some code we can share.

So far I have the parser for colors implemented in Rust. This removes a little bunch of code from the C parsers, and replaces it with a little Rust code, since the cssparser crate can already parse CSS colors with alpha with no extra work — libcroco didn't support alpha.

As a bonus, this supports hsl() colors in addition to rgb() ones out of the box!

After all the parsers are done, the next step would be to convert the representation of complete stylesheets into pure Rust code.

What can we expect?

A well-maintained CSS stack. Firefox and Servo both use the crates in question, so librsvg and gnome-shell should get maintenance of a robust CSS stack "for free", for the foreseeable future.

Speed. Caveat: I have no profile data for gnome-shell yet, so I don't know how much time it spends doing CSS parsing and cascading, but it looks like the Rust version has a good chance of being more efficient.

The selectors crate has some very interesting optimizations from Mozilla Servo, and it is also now used in Firefox. It supports doing selector matching using Bloom filters, and can also avoid re-cascading child nodes if a change to a parent would not cause its children to change.

All the parsing is done with zero-copy parsers thanks to Rust's string slices; without so many malloc() calls in the parsing code path, the parsing stage should really fly.

More CSS features. The selectors crate can do matching on basically all kinds of selectors as defined by recent CSS specs; one just has to provide the correct hooks into the calling code's representation of the DOM tree. The kind of matching that StTheme can do is somewhat limited; the rustification should make it match much more closely to what


Monday
25 November, 2019


Michael Meeks: 2019-11-25 Monday.

21:00 UTCmember

face
  • Sync call with Aron, Kendy, Javier; poked at financials, poked at patch merging, testing, merged a nice online patch from 1&1 to add a REST monitoring API.
  • Bit of quartet editing & re-arrangement in Musescore - which is a great tool.

face

Ubuntu is, without any dispute, the most prolific Linux distribution today. You can look at any metric and you will see that Ubuntu is number one. How did they rise to this level? I can only speculate, perhaps it has to do with the charismatic and enthusiastic visionary of Canonical’s founder Mark Shuttleworth that made Linux more approachable and attractive by the masses. Regardless, Canonical does a great job with Ubuntu. Despite any of the controversies or blunders the company makes, they are risk takers and regardless of what distribution you use, it should be applauded.

As part of the BigDaddyLinux Live challenge, we are testing the various Ubuntu flavors but for this article, I am going to focus on Ubuntu Proper, the mainline from which all the other flavors are derived. At one time, Ubuntu had their own desktop, Unity, of which they have discontinued development and now use GNOME as their core desktop.

This is my admittedly biased review of Ubuntu (Proper) as an openSUSE Tumbleweed user that prefers Plasma to all other desktops. It should also be clear that I am not a fan of GNOME at all and to use it is an absolute chore to use for me. Bottom Line Up Front, Ubuntu is pretty great and I would feel good about giving it to anyone. Regardless of my bias and preferences, Ubuntu is just a great, rock solid distribution that is a bit heaver on resources than I like but if you run a reasonably modern system, this is not an issue what so ever. If you haven’t tried Ubuntu, which would be odd that a Linux user hasn’t, or if you haven’t tried it in a while and have that restless itch, Ubuntu is worth taking around the block and maybe even on the highway to stretch it’s legs a bit.

Feel free to bail here.

Installation

One thing I can say about Ubuntu without any reservation is that it is incredibly easy to install, especially when you have a fairly straight forward installation. When the ISO boots up, you can “Try or Buy” as it were and since I don’t see a whole lot of use with a VM in just trying it without the installation process, I wanted to Install Ubuntu. The first decision is to set your keyboard layout.

The next in a line of easy decisions to make is to set your preferences for Updates and additional software. For my purposes, testing an installation, I like to see what software they bundle with the distribution. I am finding more often than not that distributions seem to be skimping out on basic computing software. It amuses me continually how people clammer for a minimal installations, especially on a desktop system where you need basic installation but maybe I don’t get it and am not Linux-ing correctly. I also selected to download updates and to install third-party software. This is one feature I do


Sunday
24 November, 2019


Michael Meeks: 2019-11-24 Sunday.

21:00 UTCmember

face
  • All Saints, Simon & Norma back for lunch; played with the babes, quartet bits, ferried kids around the place.

face

Preparations for the Developers Conference 2020 have begun. The date, location and theme have been announced.

The next Developers Conference, simply dubbed DevCon 2020, will be held on 2 - 4 April at the Caudan Arts Centre in Port-Louis, Mauritius. This time the conference theme is Comics, which I am pretty sure requires no further explanation as to what to expect.

A few of our regular supporters have already joined as sponsors, while others have expressed their intention to back us financially in the coming days. The conference cannot happen without the help and support of the sponsors and the commitment to support the DevCon organizers every year is really appreciated. May the force be with you & your organizations prosper!

Developers Conference is an event by the community for the community. We should not forget this. Everyone's help is welcomed and appreciated. In fact, next year we're aiming big and the more backers we have the merrier!

If you believe there are organizations out there that can support us please share the conference brochure with them. The brochure explains about the conference, the different sponsorship tiers and ways in which an organization can help in making DevCon 2020 another great & awesome conference!

Meanwhile, you out there, if you've been to the Developers Conference before, then how about submitting a paper this time? Take the leap and do it!


face

I've looked for it myself and search results always return complicated hacks to achieve it. Adjusting the top, bottom or right and left margins (only) are not usually a straightforward task if you do not know the right package to use.

Like for example, this StackExchange (TeX) suggestion is definitely NOT recommended.

The reasons to have to modify the page margins in the middle of a document could vary; say if you need to display an almost "full-page" figure in a landscape layout, you'd surely be touching the margins and getting additional blank pages being created if you do not reduce those margins of the current page.

The simplest way I found of doing it is using the changepage package available from ctan.org. While the package provides several commands to adjust the page margins, text blocks or the entire page design, I find the below single line command extremely useful.

\changepage{〈text height〉}{〈text width〉}{〈even-side margin〉}{〈odd-side margin〉}{〈column sep.〉}{〈topmargin〉}{〈headheight〉}{〈headsep〉}{〈footskip〉

Thus, in one single line the entire page can be re-designed in the middle of your LaTeX document.

The changepage command takes nine arguments, which can either be blank or contain a value of a length. The length value is added to the current length. If a length value is not supplied then a zero value is assigned which is then added to the current length, therefore, resulting in no change. A negative value is used to reduce the current length.


Saturday
23 November, 2019


Michael Meeks: 2019-11-23 Saturday.

21:00 UTCmember

face
  • Out for a run with J. Put up some Ikea storage units, Mentalistsed, bit of hacking & mail.

face

Recently, my Linksys E2000 decided it would no longer be the wireless access point I expected it to be and it had to be replaced. Thinking that maybe it just needed an update or to be reverted to the original firmware also did not solve the problem as it would just not allow any clients to access the network. No matter what I did, there was no way I could get this thing to work properly. It was time to replace it. After doing some reading and digging but ultimately taking the advice of my e-friend Mauro, I purchased an Aruba IAP-105.

The WRT54GL I pulled out of storage just wasn’t cutting it, throughput wise, even though Wireless G was pretty great some 14 years ago.

This is a nice little device and it feels like a well built unit. While handling it, the look and feel of this well crafted equipment feels like something that shouts at me “professional” or perhaps, “I was built to survive knuckle-dragger handler like you.”

Reset the router done by inserting a paperclip into the recessed hole when off and turning it on. Wait about 5 seconds for the LED indicators to flash and you are off to the races. Note that just pressing and holding the reset button does nothing when it is on.

The Access Point presented a login screen and I was unsuccessful in locating anywhere in the instruction manual the default username and password. It took a bit of digging but I was able to determine that the default username is admin and the password is also admin. I was sure to fix that default as it has been shown far too often that the defaults are left and a network is compromised.

Setting up the Access Point was so simple that it took me a bit to realize I had it set up properly with very minimal effort on my part. The effort was so minimal, I was convinced it wasn’t set up properly until I started to see the clients connect. It was amazingly easy.

Under the Network section, select New to enter a New WLAN. What is interesting here is that you have 3 options. Employee, Voice and Guest. None of which are exactly my use but home use is probably closer to “Employee” than Guest.

Next was the Client IP & VLAN Settings. In my case, I have no VLANs on my network. Maybe I should but at this time, I don’t see a need. For my purposes. I want the Client IP assignment taken care of my main DHCP server and since I don’t have a Virtual Controller, I went with the “Network Assigned” option as it seemed the most reasonable. The client VLAN assignment was left at “Default”.

The Security section was straight forward

Nothing to do with the Access section.

Once I completed it, I was a bit confused because I didn’t set the DHCP server or the DNS


face

पिचले सितंबर को Bali, Indonesia के Udayana University में openSUSE Asia Summit 2019 घटित हुआ। लगातार दो दिनों तक दुनिया के कोने कोने से आए हुए इंजीनियरों, डेवलपर्स, डिजाइनरों और कइ तरह के openSUSE योगदानकर्ताओं ने मिलकर तकनीकी प्रदर्शन तथा अन्य कार्यशालाएँ आयोजित कीं।

इस सम्मेलन के द्वारा openSUSE समुदाय अपने उपयोगकर्ताओं और योगदानकर्ताओं को एक साथ लाता हें ताकि इन में openSUSE प्रोजैक्ट को लेकर बातचीत हो सके। बोर्ड के सदस्य समुदाय को प्रोजैक्ट से संबंधित जानकारी देते हैं। नए उपयोगकर्ता इस सम्मेलन से बहुत लाभ उठा सकते हैं।

सम्मेलन के समापन समारोह से पहले यह घोषित कि गइ की अगला सम्मेलन, याने कि openSUSE Asia Summit 2020, मानव रचना इंटरनेशनल इंस्टिट्यूट ऑफ़ रिसर्च एंड स्टडीस (Manav Rachna Int'l Institute of Research & Studies), फरीदाबाद, हरियाणा, भारत (Faridabab, Haryana, India) में होगा। इंस्टिट्यूट की प्रतिनिधि, शोभा त्यागी, ने विस्तार से अपना प्रस्ताव बाताया जोकी सम्मेलन के आयोजकों ने स्वीकार किया।


Friday
22 November, 2019


Michael Meeks: 2019-11-22 Friday.

21:00 UTCmember

face
  • Mail chew; admin, calls, some patch review & merging. J.N.M.E. out to Ikea for a shopping binge.

face

Dear Tumbleweed users and hackers,

Another week, in which openQA did block some of the snapshots – and some issues it was unfortunately not able to see. Anyway, during the week 2019/47 we have released three snapshot into the wild (1116, 1118 and 1119), containing those changes:

  • Mesa 19.2.4: fixes critical rendering issues from earlier Mesa 19.2.3. As this rendering issue did not happen on all graphics adapters, openQA had no chance of spotting it
  • Linux kernel 5.3.11
  • KDE Plasma 5.17.3
  • Subversion 1.13.0
  • binutils 2.33.1

The things being worked on include:

  • openssl 1.1.1d: will be part of snapshot 1121 and later)
  • rpm 4.15.0: the new python dependency generator is nasty, as it adds much more dependencies that were the before (probably a good thing), exposing new build cycles
  • Python 3.8
  • Rust 1.39.0: break Firefox and Thunderbird so far
  • Perl 5.30.1
  • libxml 2.9.10: breaks perl-XML-LibXSLT (on i586 only, invalid free() )

face

A More User Friendly Role Selector Dialog

Step by step, we continue improving the user experience making use of the newly added widgets to libyui. This sprint was the turn to update the role selection dialog to use the new item selector introduced during the sprint 87. Apart from looking better as it can be seen in the screenshots below, there are two immediate improvements:

  • the vertical scroll, when present, is respected after selecting a role (instead of “jumping to the beginning”), and
  • the selected role (if any) will be visible when arriving at the dialog even when the list is quite long or the available space too short.
Before After

What is more, updating the dialog was also useful for us to realize about some needed improvements for the widget itself, mentioned in the next section. Quite a productive change 🙂

When one Bit is not Enough: The CustomStatusItemSelector

A few weeks ago, we wrote about the new ItemSelector widget that is finding its way into YaST user interfaces. It turned out that just a simple on/off status is not enough in some cases, so we had to extend that concept. For example, software modules may have dependencies, and we want to show the difference between one that was explicitly selected by the user and one that was auto-selected because some other software module requires it.

This kind of shook the foundations of the underlying classes; all of a sudden a bit is no longer just a bit, but it needs to be broken down into even smaller pieces. Well, we cheated; we now use integer values instead. Most of the class hierarchy still only uses 0 and 1, but the new YCustomStatusItemSelector also supports using higher numbers for application-defined purposes.

For each possible status value, the application defines the name of the icon to be displayed (for graphical UIs like the Qt UI), the text equivalent (for text mode / the NCurses UI), and an optional nextStatus which tells the widget what status to cycle to when the user changes the status of an item with a mouse click or with the keyboard. A value of -1 lets the application handle this.

So this is not a one-trick-pony that is useful only for that one use case (the software modules), but a generic tool that might find good uses in other places all over YaST as well.

Usage examples: C++, Ruby.

Snapper and Machine-readable Output

Most likely you already know snapper, a great tool to work with your filesystem snapshots. Some third-party scripts and tools (e.g., YaST) use the snapper CLI to get some information, but generally, snapper generates an output intended to be human-readable. Sometimes that could cause some


Thursday
21 November, 2019


Michael Meeks: 2019-11-21 Thursday.

21:00 UTCmember

face
  • Mail chew, debugging, moved flights, demo preparation. Presented to the team, lots of positive feedback. More code cleanup, train, flight, drive home - lovely to see the family again.

face

When starting a WSL distribution for the first time, a text prompt for user name and password appears:

The code for that is partially in the Windows launcher. The Windows side actually prompts for the user name:
https://github.com/microsoft/WSL-DistroLauncher/blob/master/DistroLauncher/DistroLauncher.cpp#L44

and passes it to ‘adduser’:
https://github.com/microsoft/WSL-DistroLauncher/blob/1f8551f7e2ea22bba2e6fb02f01e7a5f7fb757f3/DistroLauncher/DistributionInfo.cpp#L14

That seems to be a Debian specific tool that also prompts for a password. We don’t have it in openSUSE. When done, the Windows part actually calls into the Linux environment again with ‘id -u’ to get the uid of the added user:
https://github.com/microsoft/WSL-DistroLauncher/blob/1f8551f7e2ea22bba2e6fb02f01e7a5f7fb757f3/DistroLauncher/DistributionInfo.cpp#L44

So in order to also prompt for the password we’d have to write a wrapper like the Debian one or implement another prompt in the launcher. Implementing such a prompt in Windows code seems boring to me. When writing a wrapper, I’d do something dialog based to make it look more fancy. There’s already jeos-firstboot that does something similar already and more. But then the WSL image doesn’t have to be really minimal, which means we have YaST!

So even though WSL doesn’t really boot as it has no systemd it would be still possible to run the YaST firstboot wizard on first start. What modules it launches is configurable via xml file. So leaving out hardware/VM specific things like network configuration it works pretty well:


For the launcher to know the name of the created user a small YaST module was needed to write the name into /run/wsl_firstboot_uid. The launcher fetches it from there.

Using the YaST firstboot wizard also allows to use e.g. the existing registration dialogs on SLE or add other useful configuration steps. One feature I have in mind would be for example is the role selection screen to offer some pre defined package selections for WSL use cases.

Tumbleweed and Leap appx files to test this are available from download.opensuse.org. Keep in mind that one needs to import the certificates used by OBS for signing first.


Wednesday
20 November, 2019


Michael Meeks: 2019-11-20 Wednesday.

21:00 UTCmember

face
  • Plugged away at proof, patch review, and locking investigation. With a WOPI implementation, it is a little suprising to see 'unlock' do the actual checkin, and not the PutFile; hey ho.
  • Out to visit Cor & Gerlinde in the evening at their lovely new home & enjoy some Vegan food.

Tuesday
19 November, 2019


Michael Meeks: 2019-11-19 Tuesday.

21:00 UTCmember

face
  • Wrestled VMs, authentication, firewalls & so on to get some code building & the first interesting integration errors to arrive. Somehow, after suffering Javascript for some years, Java seems amazingly beautiful (in comparison) - curious.
  • Curious at the idea of research aroud empathy being weaponized to polarize and de-rationalize arguments; some people won't think. Perhaps ironic that a leading envionmental & children's advocate of the moment is an Autist - an interesting world.

face

CSS length values have a number and a unit, e.g. 5cm or 6px. Sometimes the unit is a percentage, like 50%, and SVG says that lengths with percentage units should be resolved with respect to a certain rectangle. For example, consider this circle element:

<circle cx="50%" cy="75%" r="4px" fill="black"/>

This means, draw a solid black circle whose center is at 50% of the width and 75% of the height of the current viewport. The circle should have a 4-pixel radius.

The process of converting that kind of units into absolute pixels for the final drawing is called normalization. In SVG, percentage units sometimes need to be normalized with respect to the current viewport (a local coordinate system), or with respect to the size of another object (e.g. when a clipping path is used to cut the current shape in half).

One detail about normalization is that it can be with respect to the horizontal dimension of the current viewport, the vertical dimension, or both. Keep this in mind: at normalization time, we need to be able to distinguish between those three modes.

The original C version

I have talked about the original C code for lengths before; the following is a small summary.

The original C code had this struct to represent lengths:

typedef struct {
    double length;
    char factor;
} RsvgLength;

The parsing code would set the factor field to a character depending on the length's unit: 'p' for percentages, 'i' for inches, etc., and '\0' for the default unit, which is pixels.

Along with that, the normalization code needed to know the direction (horizontal, vertical, both) to which the length in question refers. It did this by taking another character as an argument to the normalization function:

double
_rsvg_css_normalize_length (const RsvgLength * in, RsvgDrawingCtx * ctx, char dir)
{
    if (in->factor == '\0')            /* pixels, no need to normalize */
        return in->length;
    else if (in->factor == 'p') {      /* percentages; need to consider direction */
        if (dir == 'h')                                     /* horizontal */
            return in->length * ctx->vb.rect.width;
        if (dir == 'v')                                     /* vertical */
            return in->length * ctx->vb.rect.height;
        if (dir == 'o')                                     /* both */
            return in->length * rsvg_viewport_percentage (ctx->vb.rect.width,
                                                          ctx->vb.rect.height);
    } else { ... }
}

The original post talks about how I found a couple of bugs with how the directions are identified at normalization time. The function above expects one of 'h'/'v'/'o' for horizontal/vertical/both, and one or two places in the code passed the wrong character.

Making the C version cleaner

Before converting that code to Rust, I removed the pesky characters and made the code use proper enums to identify a length's units.

+typedef enum {
+    LENGTH_UNIT_DEFAULT,
+    LENGTH_UNIT_PERCENT,
+    LENGTH_UNIT_FONT_EM,
+    LENGTH_UNIT_FONT_EX,
+    LENGTH_UNIT_INCH,
+    LENGTH_UNIT_RELATIVE_LARGER,
+    LENGTH_UNIT_RELATIVE_SMALLER
+} LengthUnit;
+
 typedef struct {
     double length;
-    char factor;
+    LengthUnit unit;
 } RsvgLength;

Then, do the same for the normalization function, so it will get the direction in which to normalize as an enum instead of a char.

+typedef enum {
+    LENGTH_DIR_HORIZONTAL,
+    LENGTH_DIR_VERTICAL,
+    LENGTH_DIR_BOTH
+} LengthDir;

 double
-_rsvg_css_normalize_length (const RsvgLength * in, RsvgDrawingCtx * ctx, char dir)
+_rsvg_css_normalize_length (const 

Monday
18 November, 2019


face

When I first started to put fingers to keyboard with this “CubicleNate.com” thing, I didn’t ever envision it become much of anything. Just a little tool to help keep my notes somewhat organized and hope that I could provide some kind of resource to someone at some point. In late 2018, I joined the Big Daddy Linux Live community, appearing frequently on the weekly “LUG” meetings and making many new e-friends that challenged me to expand my knowledge of Linux and open source software. This has given me new things to play with and write about in Linux.

I started to produce some video content on YouTube and this site to enhance some of my content and later, I thought I would cut my teeth on a podcast of my own to talk about the nerdy things I enjoy. My reoccurring topics consist of my additional thoughts about a subject or two of the last BDLL show and an openSUSE corner but truth be told, openSUSE weaves itself throughout my “noodlings”.

In September of 2019, the formation of Destination Linux Network was announced where these well established content creators have pooled their resources to draw together their somewhat discrete communities and provide a forum for interaction in greater depth than what Telegram, Discord or YouTube can provide on their own.

As part of the launch of this new Destination Linux Network, I was asked if I was interested in starting a podcast with one Eric Adams. My immediate reaction was an absolute and resounding, “yes” to which I have no regret. The podcast is called “DLN Xtend” where we discuss a part of some of the other shows in greater depth with our own perspectives and slant on the subject. It has been loads of fun to do and I hope to continue to be a part of this as well as the Destination Linux Network for years to come.

Additionally, and not directly related, I have been able to join Dave and Yannick one of my new favorite podcasts, “Tea, Earl Grey Hot“, an unofficial Star Trek fan podcast as well as the “Ask Noah Show” where we discussed some of the merits of Microsoft and their contributions to the open source software movement.

It has been a fun ride that had has lead me to some new and interesting opportunities, not only am I blessed with being able to interact with some of the most interesting minds in Linux and open source software but it has opened up doors with other tangentially related topics.

Older blog entries ->