openSUSE Tumbleweed – Review of the week 2021/01

Dear Tumbleweed users and hackers,

A new year is already upon us, the first week of it is already. We humans might have to get used to writing ‘2021’ instead of ‘2020’, for Tumbleweed, this seems not to matter at all. The week has kicked off strong with 6 snapshots (0101, 0102, 0103, 0104, 0105, and 0106). The number of incoming submissions is also increasing again, showing that contributors are returning from their well-deserved holiday.

The most interesting changes in snapshots published this week were:

The staging projects mostly contain the same major changes in planning, but work to get them ready is in progress:

  • Plasma 5.20.5
  • KDE Applications 20.12.1
  • Linux kernel 5.10.5
  • Xfce 4.16.0
  • icu 68.1: breaks a few things like postgresql. Staging:I
  • Multiple versions of python 3 parallel installable. Adding to python 3.8, version 3.6 will be reintroduced. Python modules will be built for both versions.
  • RPM 4.16: all build issues in Staging:A have been fixed, the earlier reported crash on upgrades is also fixed. Final QA run in progress
  • brp-check-suse: a bug fix in how it detected dangling symlinks (it detected them, but did not fail as it was supposed to)
  • permissions package: prepares for easier listing, while supporting a full /usr merge
  • Autoconf 2.70: breaks quite a few packages, Staging:C. NOTE: in some cases, it now implicitly starts gtkdocize; but at least for distro bootstrap packages (ring0) we cannot BuildRequire gtk-doc. So we must trick autoreconf with GTKDOCIZE=true
  • Rpmlint 2.0: experiments ongoing in Staging:M
  • openssl 3: not much progress, Staging:O still showing a lot of errors.

Jan 8th, 2021

Cómo instalar Lutris, un gestor de juegos para Linux

Esta semana estoy algo jugón y quiero compartir con todos vosotros cómo instalar Lutris, un gestor de juegos para Linux, que me está encantando y que presenté hace bien poco.

Cómo instalar Lutris, un gestor de juegos para Linux

En primer lugar quiero recordar que es Lutris que no es más que una aplicación que busca centralizar todos los juegos que tu equipo pueda ejecutar recopilando los juegos que tengas tiendas virtuales como GOG, Humble Bumble o la todopoderosa Steam y, además, gestionará los juegos que tengas instalados en tu equipo, tanto nativos como emulados. Eso si, es una aplicación que se apoya en la creación de Scripts de instalación creados por la Comunidad, así que tiene la potencia de las personas detrás de ella.

Lutris es una aplicación que utiliza Python 3 y las librerías GTK, y su instalación es muy sencilla en casi todas las distribuciones pero creo que es bueno hacer una explicación para aquellos usuarios que todavía no tienen mucha experiencia en el mundo GNU/Linux.

Estamos ante un proyecto personal de Mathieu Comandon que necesita todo el apoyo que le podamos dar, así que os recomiendo visitar su página de donaciones si os gusta el proyecto y queréis financiarlo de algún modo (toda donación es bienvenida, por pequeña que sea).

Si nos vamos a la página de descargas de Lutris vemos que tenemos una explicación detallada para decenas de distribuciones, así que yo solo explicaré unas cuantas.

Cómo instalar Lutris, un gestor de juegos para Linux

Ubuntu y derivadas

Empezamos con Ubuntu y derivadas (entre las que se encuentran KDE Neon o Kubuntu), Elementary y Linux Mint.

En este caso Lutris no está en los repositorios oficiales, así que seguiremos estos pasos:

Abrimos un terminal o una consola y escribir lo siguiente para añadir el repositorio a tu sistema, evidentemente te pedirá el password de superusuario (que se escribe pero no se ve):

sudo add-apt-repository ppa:lutris-team/lutris

A continuación vamos a escribir dos comandos, el primero actualiza tus repositorios y el segundo instala Lutris.

sudo apt update
sudo apt install lutris

Debian

Para los usuarios de Debian el proceso es similar. Abrir en una consola y escribir (creo que no debo ser más específicos ya que los usuarios de esta distribución no necesitan tantos detalles):

echo "deb http://download.opensuse.org/repositories/home:/strycore/Debian_10/ ./" | sudo tee /etc/apt/sources.list.d/lutris.list
wget -q https://download.opensuse.org/repositories/home:/strycore/Debian_10/Release.key -O- | sudo apt-key add -
apt update
apt install lutris

Otras distribuciones

En las siguientes distribuciones Solus, opeSUSE, Arch Linux, Manjaro, Fedora y Clear Linux, Lutris está en sus repositorios básicos, así que simplemente se debe ejecutar en consola la orden de instalación:

Solus: sudo eopkg it lutris 
openSUSE: sudo zypper in lutris
Arch Linux y Manjaro:  sudo pacman -S lutris 
Manjaro:  sudo dnf install lutris  
Clear Linux:  sudo swupd bundle-add lutris 

Y, finalmente, en distribuciones como Mageia, Gentroo, CentOS, Pop!_OS o Slackware simplemente buscad en sus Centros de Software.

Y bien, con estas simples instrucciones ya lo tendréis, ahora simplemente falta configurar Lutris, pero eso ya es otra historia.

Tumbleweed Rolls Into The New Year

The holidays might be over and the new year is here, but users of openSUSE Tumbleweed didn’t see any difference in the amount of snapshots released over the holiday season.

Tumbleweed snapshots have been rolling out daily before toasting to new beginnings last week.

Providing a fresh point of view for the new year, snapshot 20210106 brought an update to the 3D graphics package Mesa with version 20.3.2. The update brings in several new features upgrading from the 20.2.4 version with new Radeon Vulkan drivers and web rendering with EGL_KHR_swap_buffers_with_damage on X11. Two Common Vulnerabilities and Exposures exploits were fixed in an update of nodejs14 with version 14.15.4; CVE-2020-8265, which could corrupt memory leading to a Denial of Service exploit, and CVE-2020-8287, which had an HTTP Request Smuggling weakness, were both fixed. Xen had a patch update and removed some code. Other packages to update in the snapshot were busybox 1.32.1, libstorage-ng 4.3.78 and a few others.

Snapshot 20210105 updated a single package with the update of terminus-bitmap-fonts 4.49.1. The newer version added Open Type Bitmap support and altered ascii to be more useful with a back quote.

The Mozilla Firefox browser received its first minor version update of the year with 84.0.1 in the 20210104 snapshot. AV1 decoder dav1d 0.8.1 updated and fixed a regression caused by the picture buffer pool in its previous minor version release. Email retriever fetchmail 6.4.15 fix cross-compilation with OpenSSL. Ruby code style checkers (rubygem-rubocop](https://rubygems.org/gems/rubocop/versions/0.42.0) had a lengthy amount of style changes updating from version 1.4.2 to 1.7.0. Style/MethodDefParentheses ignores endless method definitions since parentheses are always required. Other packages updated in the snapshot were perl-Image-ExifTool 12.13, perl-Mojolicious 8.70, utf8proc 2.6.1 and more.

The updated of the Linux Kernel was one of two packages updated in snapshot 20210103. The 5.10.4 Linux Kernel had several arm64 fixes to include a fix of the GPIO memory size. The other package was a major version update to the utility for managing the LIBNVDIMM subsystem; the ndctl 71 package fixed documentation and now supports the new device-dax subdivision functionality added in the 5.10 kernel.

Two timezone packages were updated in the 20210102 snapshot. The third package to receive an update in the snapshot was the high-performance email content filter amavisd-new to version 2.12.1; the package’s specfile was cleaned a bit and changes were made to prevent re-encoding of the notification templates.

The New Year’s Day snapshot, 20210101, provided updates to CoreFreq, rubygem-grape 1.5.1, rubygem-net-ldap 0.17.0 and xapps 2.0.4.

Jan 7th, 2021

Importar una clave de cifrado en Thunderbird con OpenPGP

Veamos cómo importar un archivo de una clave en formato .asc a nuestro Thunderbird para enviar un correo cifrado a ese destinatario

Como ya pudiste leer en el blog hace tiempo, desde la versión 78 del cliente de correo Thunderbird, este software viene incorporado con OpenPGP para la gestión del cifrado de correos de manera nativa, sin la necesidad de utilizar Enigmail.

Veamos cómo podemos añadir una clave de cifrado de un contacto, para poder cifrar y descifrar correos con ese contacto.

Método 1

Si tenemos la clave pública del contacto en un archivo en nuestro equipo en formato .asc para importar esta a Thunderbird deberemos ir a nuestra cuenta, en el menú de las barras horizontales:

Configuración de la cuenta → Cifrado de extremo a extremo → Administrador de claves OpenPGP

En la ventana emergente escogemos:

Archivo → Importar clave público desde archivo

Se nos abrirá el explorador de archivos para seleccionar el archivo .asc con la firma pública de nuestro contacto. La seleccionamos y aceptamos. Y ya podremos comunicarnos con correos cifrados de extremo a extremo.

Método 2

Si el contacto nos envía su clave pública adjunta en un correo. Al llegar a nuestra bandeja de entrada y leer su correo, podemos hacer clic sobre el adjunto con el botón derecho del ratón y adjuntar la clave pública a mi lista de claves.

Método 3

Importar la clave pública en Thunderbird desde un servidor de claves. Si nuestro contacto ha subido su clave pública a un servidor de claves, podremos descargarla desde allí.

De manera predeterminada busca en el servidor https://keys.openpgp.org/ así que es buena idea subir nuestra clave pública a ese servidor de claves para que pueda ser buscada y añadida desde ese servidor por quien quiera contactar con nosotros mediante un correo cifrado.

Enlaces de interés


Sirva este artículo como nota personal. Y muy contento si a ti también te sirve como guía al cifrado de correos con Thunderbird y OpenPGP integrado.

Visita a las instalaciones de Linux Center y Slimbook

El pasado 17 de noviembre tuve el placer de realizar una visita a las instalaciones de Linux Center y Slimbook por diversos motivos entre el que se encontraba charlar con Alejandro López, su gerente. Este un breve reportaje fotográfico de dicha visita.

Visita a las instalaciones de Linux Center y Slimbook

Antes de empezar a escribir nada quiero agradecer al personal de Slimbook y a su gerente, Alejandro López, su amabilidad y la atención que recibí en las horas que pude estar con ellos. Es una verdadera gozada poder visitar un empresa como Slimbook.

En primer lugar quiero poner en contexto mi visita, ya que se realizó en plena pandemia y por tanto, Linux Center està inactivo y Slimbook apenas puede recibir visitas, y eso se nota en las imágenes tomadas, como en esta primera de la mesita de recepción.

Visita a las instalaciones de Linux Center y Slimbook
Mascarillas, gel hidroalcohólico y desinfectante acompañas a su premio Open Awards 2019 y a Tux. Toda una declaración de intenciones nada más entrar.

En segundo lugar comentar que hay pingüinos por todas partes: peluches, fotos, figuras, pegatinas, cojines, etc., lo cual demuestra el amor de Slimbook por el Software Libre. Estoy seguro que no van de compras a ningún sitio sin mirar si encuentran alguna cosa con forma de pingüino.

Nada más entrar a las instalaciones de Slimbook vemos su pequeña exposición, repleta de sus productos y que van desde el último KDE Slimbook III hasta su Kimera Aqua con refrigeración líquida pasando por el Slimbook One. Toda una gozada y envidia ver todos esos dispositivos funcionar con GNU/Linux.

Visita a las instalaciones de Linux Center y Slimbook
Pequeña mesa con dispositivos. Una figura de Tux vigila la exposición.

Si nos dirigimos al fondo de la exposición nos encontramos 3 puertas. La frontal corresponde a la sala de reuniones, donde como buenos frikis han dispuesto las «Bolas de Drac» para invocar al Dragón cuando sea necesario. Eso si, por el camino nos encontraremos con varios pingüinos:

Visita a las instalaciones de Linux Center y Slimbook

A la derecha nos encontramos la sala de conferencias de Linux Center, pequeña pero suficiente para albergar encuentros linuxeros:

Visita a las instalaciones de Linux Center y Slimbook

A la izquierda se encuentra la sala «Tech Room», el futuro hogar de makers que quiere hospedar Slimbook, pero que de momento se ha quedado en «Stand By» por motivos víricos. Un motivo para volver a las instalaciones en un futuro. Flanqueándolo, un televisor Slimbook ( 🙂 )

Si volvemos a la puerta de entrada por la pared de la «Tech Room» vemos un inspirador vinilo que no puedo evitar compartir con vosotros, el libro de visitas y la única petición que nos hacen.

Visita a las instalaciones de Linux Center y Slimbook
Visita a las instalaciones de Linux Center y Slimbook

Una vez de vuelta al recibidor tenemos la puerta al corazón de Slimbook, que en realidad es donde se toman las decisiones y se realizan las pruebas, el montaje de los ordenadores se realizan en una nave industrial. Por motivos de confidencialidad no puedo mostrar el interior pero os muestro que nos encontramos las siguientes puertas:

Visita a las instalaciones de Linux Center y Slimbook
Visita a las instalaciones de Linux Center y Slimbook

Y los siguientes detalles:

Aquí terminaba mi visita pero no podía irme sin dejar constancia de mi visita (disculpad por mi penosa caligrafía) y tomar unas imágenes del maravilloso KDE Slimbook III.

Visita a las instalaciones de Linux Center y Slimbook

openSUSE Community Publishes End of Year Survey Results

The openSUSE community has published the End of the Year Community Survey results.

The results provided some significant information about the project’s tools, its distributions, the demographics of the users as well as how the community is contributing to the project.

The highest percentage of users were between the ages of 35 and 49, according to the results. More than half the respondents were from Europe; the Americas made up roughly a quarter of the respondents and Asia 10 percent. Both Oceania and Africa respondents had similar percentages below 2 percent.

The respondents were predominantly males working in the IT industry with more than 10 years experience with a NIX system; almost half were college educated. A little less than 20 percent were pursuing an education and under the age of 25. Many identified themselves as tech hobbyists and used both openSUSE Leap and Tumbleweed equally. A majority of contributors to the project provided user support or did packaging and maintenance.

The majority of respondents used KDE’s Plasma for their desktop environment followed closely by GNOME and Xfce respectively; more than 92 percent were satisfied or very satisfied with the desktop environment. Use of Graphics Processing Units were pretty evenly split between Intel, Nvidia and AMD respectively.

Less than 900 respondents identified pain points, which were evenly spread around topics like finding software, installing software, installation, unsupported hardware and documentation. A large majority were unaware of openSUSE on mobile, but expressed interest in the comments section.

Many seemed to be motivated to try openSUSE from blogs, magazine articles or through podcasts, yet a large majority of respondents felt openSUSE was underrated/underrepresented by open source and Linux influencers.

More details about the End of the Year Community Survey results can be found on the openSUSE Wiki.

Jan 6th, 2021

12 mejores juegos en Linux del 2020 según Make Tech Easier

En este día de reyes me apetece compartir los 12 mejores juegos en Linux del 2020 según Make Tech Easier, un listado que demuestra que jugar en GNU/Linux no es algo imposible.

12 mejores juegos en Linux del 2020 según Make Tech Easier

Cada cierto tiempo me gusta hacer un artículo como este, y suele ser enero el mes más habitual para hacerlo. El año pasado hice uno con los 12 juegos gratuitos y de código abierto para GNU/Linux y este año me he decido por juegos más comerciales.

El objetivo de hacerlo es mostrar que jugar en GNU/Linux no es solo posible sino que en muchas ocasiones funciona incluso mejor.

En esta ocasión los creadores del vídeo son Make Teach Easier y nos ofrecen sus 12 mejores juegos en Linux del 2020, la mayor parte de ellos utilizando proton de Steam pero plenamente funcionales. Los hay de todo tipo y de precios variados (incluso gratuitos), así que no hay excusa.

Como es habitual, a continuación hago el listado de los mismos por si alguien simplemente quiere la información:

12 mejores juegos en Linux del 2020 según Make Tech Easier
  • Pillars of eternity II: Deadfire: Juego de rol desarrollado por Obsidian Entertainment y publicado por Versus Evil. . Vía: wikipedia
  • Slay the Spire: videojuego roguelike, RPG de cartas y mazmorras desarrollado por MegaCrit y publicado por Humble Bundle. Vía: wikipedia
  • Dead Cells: videojuego híbrido entre el género de exploración de mazmorras o roguelike, y metroidvania, creando su propio género, “roguevania”, desarrollado por el estudio Motion Twin. Vía: wikipedia
  • Team Fortress 2: videojuego multijugador de disparos en primera persona desarrollado y publicado por Valve Corporation. Vía: wikipedia
  • Dota 2: videojuego perteneciente al género de Arena de batalla en línea ARTS («estrategia de acción en tiempo real»), también conocido como MOBA. Vía: wikipedia
  • Juegos Open-Source: no se trata de un juego sino un listado rápido de juegos libres y gratuitos como la saga Doom.

¡Feliz día de Reyes!

Alionet posted at 20:19

Ouverture de l'élection au conseil d'administration d'openSUSE 2019-2020 - Appel à candidatures

C'est l'heure des élections !

Deux sièges sont à pourvoir au sein du conseil d'administration d'openSUSE. Gertjan Lettink a terminé son deuxième mandat. Simon Lees a terminé son premier mandat et il peut donc se présenter de nouveau comme candidat au Conseil s'il le souhaite.

Le calendrier des élections est le suivant :

Phase 0

5 décembre 2019

  • Annonce de l'élection du Conseil d'administration d'openSUSE 2019-2020

  • Appel pour les nominations et les candidatures au conseil d'administration

  • Campagne d'adhésion. Devenez un membre openSUSE. Profitez de l'occasion pour faire une demande d'adhésion à openSUSE pendant cette phase (afin de voter ou de vous présenter comme candidat).

25 décembre 2019

  • Clôture des nominations et des candidatures au Conseil d'administration

Phase 1

26 décembre 2019

  • Annonce de la liste finale des candidats

  • Début de la campagne

  • La campagne d'adhésion se poursuit, possibilité de faire une demande d'adhésion à openSUSE, mais les membres ne pourront voter et ne pourront pas se présenter comme candidats.

Phase 2

16 janvier 2020

*Les scrutins sont ouverts : Veuillez voter pendant ce temps

  • La campagne se poursuit

31 janvier 2020

  • Fermeture des scrutins

1er février 2020

  • Annonce des résultats

Le Comité des élections est composé d'Edwin Zakaria et d'Ish Sookun.

Seuls les membres d'openSUSE sont éligibles. Toutefois, les membres du comité d'élection ne sont pas admissibles à se présenter afin d'éviter les conflits d'intérêts. Pour postuler à un poste au sein du conseil d'administration d'openSUSE, veuillez envoyer un e-mail à :

  • opensuse-project@opensuse.org et * election-officials@opensuse.org

Si un membre désire proposer la candidature de quelqu'un d'autre, veuillez en informer le comité d'élection et les responsables communiqueront avec le candidat pour lui demander s'il désire se porter candidat au conseil.

Le comité d'élection lance un appel de candidatures et de candidatures pour le conseil d'administration d'openSUSE.

Lanzada la quinta actualización de Plasma 5.20

Tal y como estaba previsto en el calendario de lanzamiento de los desarrolladores, hoy martes 5 de enero la Comunidad KDE ha comunicado que ha sido lanzada la quinta actualización de Plasma 5.20. Una noticia que aunque es esperada y finalizando las fiestas navideñas es la demostración palpable del alto grado de implicación de la Comunidad en la mejora continua de este gran entorno de escritorio de Software Libre.

Lanzada la quinta actualización de Plasma 5.20

No existe Software creado por la humanidad que no contenga errores. Es un hecho incontestable y cuya única solución son las actualizaciones. Es por ello que en el ciclo de desarrollo del software creado por la Comunidad KDE se incluye siempre las fechas de las actualizaciones.

Lanzada la quinta actualización de Plasma 5.20

De esta forma, el martes 5 de enero ha sido lanzada la tercera actualización de Plasma 5.20, la cual solo trae (que no es poco) soluciones a los bugs encontrados en esta semana de vida del escritorio y mejoras en las traducciones. Es por tanto, una actualización 100% recomendable.

Más información: KDE

Las novedades básicas de Plasma 5.20

Os dejo las novedades más destacada de esta nueva versión son:

  • La barra de tareas por defecto será la de Solo Iconos, y además será un poco más ancho (una de las primeras cosas que suelo cambiar cuando configuro mi escritorio)
  • Las visualizaciones en pantalla (OSD) que aparecen al cambiar el volumen o el brillo de la pantalla (por ejemplo) se han rediseñado para ser menos intrusivas.
Lanzada la tercera actualización de Plasma 5.20
  • Ahora se notifica cuando el sistema está a punto de agotar el espacio incluso si el directorio personal es a una partición diferente.
  • Ahora se pueden componer mosaicos con las esquinas de las ventanas combinando los atajos de mosaico izquierda/derecha/arriba/abajo. Por ejemplo, pulsando Meta+flecha arriba y después la flecha izquierda para hacer el mosaico de una ventana a la esquina superior izquierda.
  • Las páginas de Configuración de Inicio automático, Bluetooth, y Gestión de usuarios se han rediseñado según los estándares modernos de interfaz de usuario y se han reescrito desde cero.
  • Notificaciones de monitorización y fallo de discos S.M.A.R.T

Providing KDE software updates from git for fun and profit in openSUSE

If I look back at the last post I made on ths blog… let’s say quite a lot of time has passed. The reason? Well, first of all, one would call it a lack of motivation1, and afterwards, the emergence of a small yet quite annoying pathogen which caused a bit of a stir worldwide. But today I’m not going to talk about viruses: perhaps some other time when you can avoid hear about it for breakfast, lunch, and dinner.

KDE software from git and the OBS

Yes, today I’m going to talk about the OBS, that is the Open Build Service, not to be confused with another highly successful open source project.

As you know, since ages, the openSUSE KDE team provides a series of repositories which track the latest state of the git repositories in KDE, be them either Frameworks, Plasma, or the applications part of the Release Service. This also allows to create Live CDs which can be useful for testing out the software.

But the question that I’ve seen every now and then is… how it is actually done? Is everything provided by the OBS, or does someone need to add some glue on top of that?

Using the OBS to provide updates to KDE packages from git

Source services

From the official documentation:

Source Services are tools to validate, generate or modify sources in a trustable way.

Ok, that doesn’t tell us much, does it? Luckily, the concept is simple. It is that, for packages built in the OBS, we can use tools (internal or external) to perform operations on the source(s) the packages are built from. These are done before any actual building starts.

The openSUSE wiki has some examples of what a source service can do, of which one immediately jumps to our eye:

Checkout service - checks out from SVC system (svn, git, …) and creates a tarball.

That means that we can, theoretically, ask the OBS to do a checkout from git, and automatically generate a tarball from there. In addition, a source service can add version information to the RPM spec file - the blueprint of an openSUSE package - including some data taken off git, for example the date and the revision hash of the checkout.

Source services are implemented as files named _service which live in the OBS for each package. Let’s take a look at the one for kcoreaddons in the KDE:Unstable::

<services>
  <service name="obs_scm">
    <param name="url">https://invent.kde.org/frameworks/kcoreaddons.git</param>
    <param name="scm">git</param>
    <param name="versionformat">VERSIONgit.%ci~%h</param>
  </service>
 <service name="set_version_kf5" mode="buildtime"/>
  <service mode="buildtime" name="tar" />
  <service mode="buildtime" name="recompress">
    <param name="file">*.tar</param>
    <param name="compression">xz</param>
  </service>
  <service mode="buildtime" name="set_version" />
</services>

obs_scm

The first line inside service tells us that we’re using the obs_scm service, which is a built-in service in openSUSE’s OBS instance to checkout the sources from the url, using git. The versionformat parameter sets the version to a literal VERSION (more on that later) and adds the git suffix, and then adds %ci, which is replaced by the checkout date (example: 20210102T122329) and %h, which puts the short git revision hash in the version (example: 5d069715).

The whole data is compressed in a cpio archive with the obscpio extension. At this point, we don’t have a tarball yet.

After the checkout

THe next services run when the package is actually built, as you can see by the mode="builtime" in their definitions. The first one (set_version_kf5) is actually a service made by Fabian Vogt (fellow member of the KDE team) which replaces VERSION by the current version present in the KDE git (done manually: it is read from the OBS project configuration, and bumped every time it happens upstream). The following lines set the version in the spec file, and compress the whole thing into a tarball.

At this point, the build system starts building the actual source and creating the package.

Manual labor

Just when are these kind of source services run? If left by themselves, never. You need to actually signal the OBS (trigger, in OBS-speak) to run the service. An example is with the osc command line utility:

osc service remoterun KDE:Unstable:Frameworks kcoreaddons

Or there’s a button in the OBS web interface which can allow you to do just that:

There’s just a little problem. When there are more than 200 packages to handle, updating in this way gets a complicated. Also, while the OBS is smart enough to avoid updating a package that has not changed, it has no way to tell you before the service is actually run.

Automation

Luckily, the OBS has features which, used with some external tools, can solve the problem in a hopefully effective way.

Since 2013 the OBS can use authentication tokens to run source services, and you can for example trigger updates with pushes to GitHub repositories. To perform this task for the KDE:Unstable repositories, I based upon these resources to build something to do mass updates in a reliable way.

First of all, I generated a token, and I wanted to make sure that it could only trigger updates. Nothing more, nothing less. This was fairly easy with osc:

osc token --create -o runservice

I did not specify a project, so the token works with all the repositories I have access to. This was a requirement, because the KDE Unstable repositories are actually three different OBS projects.

To trigger an update in the OBS, one needs to call the https://api.opensuse.org/trigger/runservice endpoint, doing a POST request and include the project name (project parameter) and the package name (package parameter). An example (I know, I didn’t encode the URL for simplicity, bear with me):

https://api.opensuse.org/trigger/runservice?project=KDE:Unstable:Frameworks&package=kcoreaddons

The token needs to be passed as an Authorization header, in the form Token <your token here>. You get a 200 response if the trigger is successful, and 404 in other cases (including an incorrect token).

Like this, I was able to find a way to reliably trigger the updates. In fact, it would be probably easy to conjure a script to do that. But I wanted to do something more.

A step further

I wanted to actually make sure to trigger the update only if there were any new commits. But at the same time I did not want to have a full checkout of the KDE git repositories: that would have been a massive waste of space.

Enter git ls-remote, which can give you the latest revision of a repository for all its branches (and tags), without having to clone it. For example:

git ls-remote --heads https://invent.kde.org/pim/kitinerary.git/
22175dc433dad1b1411224d80d77f0f655219122        refs/heads/Applications/18.08
5a0a80e42eee138bda5855606cbdd998fffce6c0        refs/heads/Applications/18.12
2ca039e6d4a35f3ab00af9518f489e00ffb09638        refs/heads/Applications/19.04
2f96d829f28e85f3abe486f601007faa2cb8cde5        refs/heads/Applications/19.08
f12f2cb73e3229a9a9dafb347a2f5fe9bd6c7975        refs/heads/master
18f675d888dd467ebaeaafc3f7d26b639a97d142        refs/heads/release/19.12
90ba79572e428dd150183ba1eea23d3f95040469        refs/heads/release/20.04
763832e4f1ae1a3162670a93973e58259362a7ba        refs/heads/release/20.08
c16930a0b70f5735899826a66ad6746ffb665bce        refs/heads/release/20.12

In this case I limited the list to branches to branches (--heads). As you can see, the latest revision in master for kitinerary at the time of writing is f12f2cb73e3229a9a9dafb347a2f5fe9bd6c7975. So, the idea I had in mind was:

  1. Get the state of the master branch in all repositories part of the KDE Unstable hierarchy;
  2. Save the latest revision on disk;
  3. On the following check (24 hours later) compare the revisions between what’s stored on disk and the remote;
  4. If the revisions differ, trigger an update;
  5. Save the new revision to disk;

This was slightly complicated by the fact that package names on the OBS and source repositories in KDE can differ (example: plasma-workspace is plasma5-workspace or akonadi is akonadi-server). My over-engineered idea was to create a JSON mapping of the whole thing (excerpt):

{
    "KDE:Unstable:Frameworks": [
        {
            "kde": "frameworks/attica",
            "obs": "attica-qt5",
            "branch": "master"
        },
        {
            "kde": "frameworks/kdav",
            "obs": "kdav",
            "branch": "master"
        }
    ]
}

(Full details on the actual repository)

It was painful to set up the first time, but it paid off afterwards. I just needed a few more adjustments:

  • Check whether the remote repository actually existed: I used GitLab’s project API to obtain a yes/no answer for each repository, and skip them if they do not exist.
  • Commit the changed files to git and push them to the remote repository holding the data.

As I am mostly a Python person, I just used Python to write a yet another over-engineered script to do all the steps outlined above.

Icing on the cake

Mmm… cake. Wait. We’re not talking about food here, just about how the whole idea was put into “production” (include several hundred of quotes around that word). I created a separate user on my server (the same which runs dennogumi.org) with minimal privileges, put the token into a file with 0600 permissions, and set up a cron job which runs the script every day at 20 UTC+1.

There was just one extra step. Historically (but this is not the case anymore nowadays) the OBS would fail to perform a git checkout. This would leave a package in the broken state, and the only way to recover would be to force an update again (if that did not fix it, it would be time to poke the friendly people in #opensuse-buildservice).

Inspired by what a former KDE team member (Raymond “tittiatcoke” Wooninck) did, I wrote a stupid script which checks the packages in broken state (at the moment just for one repository and one architecture: a broken clone would affect all of them equally) and forces an update. It needs to use tokens rather than osc, but I’ll get to that soon, hopefully.

Conclusion

There, you have it. This is how (at the moment) I can handle updating all KDE packages from git in the OBS with (now) minimal effort. Probably it is an imperfect solution, but it does the job well. Shout out to Fabian who mentioned tokens and prompted the idea.


  1. Also called laziness. ↩︎