<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Liri Blog</title>
    <description>An OS and apps built with modern design and features.</description>
    <link>https://blog.liri.io/</link>
    <atom:link href="https://blog.liri.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 05 Oct 2021 04:53:12 +0000</pubDate>
    <lastBuildDate>Tue, 05 Oct 2021 04:53:12 +0000</lastBuildDate>
    <generator>Jekyll v3.9.0</generator>
    
      
        <item>
          <title>Liri partecipates in Hacktoberfest 2021</title>
          <description>&lt;p&gt;It’s October again! This means another &lt;a href=&quot;https://hacktoberfest.digitalocean.com/&quot;&gt;Hacktoberfest&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;If you already don’t know, &lt;a href=&quot;https://hacktoberfest.digitalocean.com/&quot;&gt;Hacktoberfest&lt;/a&gt; is a month-long
celebration of open source software.&lt;/p&gt;

&lt;p&gt;Liri is partecipating in this year’s &lt;a href=&quot;https://hacktoberfest.digitalocean.com/&quot;&gt;Hacktoberfest&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Sign up &lt;a href=&quot;https://hacktoberfest.digitalocean.com/&quot;&gt;here&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;Make &lt;strong&gt;4&lt;/strong&gt; pull requests on GitHub between October 1-31 (in any time zone) and win a tee!&lt;/p&gt;

&lt;p&gt;Here’s the &lt;a href=&quot;https://github.com/search?l=&amp;amp;q=label%3Ahacktoberfest+state%3Aopen+type%3Aissue+user%3Alirios&amp;amp;ref=advsearch&amp;amp;type=Issues&amp;amp;utf8=%E2%9C%93&quot;&gt;list&lt;/a&gt; of issues up for grab.&lt;/p&gt;

&lt;p&gt;Easy issues are categorized with the &lt;em&gt;good first issue&lt;/em&gt; label: &lt;a href=&quot;https://github.com/search?l=&amp;amp;q=user%3Alirios+state%3Aopen+label%3Ahacktoberfest+label%3A%22good+first+issue%22&amp;amp;ref=advsearch&amp;amp;type=Issues&amp;amp;utf8=%E2%9C%93&quot;&gt;list&lt;/a&gt;.&lt;/p&gt;

</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Thu, 30 Sep 2021 22:00:00 +0000</pubDate>
          <link>https://blog.liri.io/hacktoberfest/</link>
          <guid isPermaLink="true">https://blog.liri.io/hacktoberfest/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>announcement</category>
          
          <category>hacktoberfest</category>
          
          
        </item>
      
    
      
        <item>
          <title>Updates for July, 2020</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/Sp7AM4wIeQE/684x456&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;h2 id=&quot;appcenter&quot;&gt;AppCenter&lt;/h2&gt;

&lt;p&gt;Flatpak support for AppCenter was improved.&lt;/p&gt;

&lt;p&gt;It now lists the apps that need to be updated and shows their download size.&lt;/p&gt;

&lt;p&gt;Also, the Flathub source is no longer automatically added to the system installation.
It’s up to the user to install it, or the distro to automatically configure it.&lt;/p&gt;

&lt;h2 id=&quot;fluid&quot;&gt;Fluid&lt;/h2&gt;

&lt;p&gt;Fluid documentation is now deployed with GitHub Pages, hence it’s now available &lt;a href=&quot;https://docs.liri.io/sdk/fluid/develop/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;flatpak&quot;&gt;Flatpak&lt;/h2&gt;

&lt;p&gt;We now build the Flatpak nightly repository with GitHub Actions workflows.&lt;/p&gt;

</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Sat, 01 Aug 2020 07:52:00 +0000</pubDate>
          <link>https://blog.liri.io/updates-for-july-2020/</link>
          <guid isPermaLink="true">https://blog.liri.io/updates-for-july-2020/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>updates</category>
          
          
        </item>
      
    
      
        <item>
          <title>Updates for June, 2020</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/rjIMBeK3jmE/684x456&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;h2 id=&quot;continuous-integration&quot;&gt;Continuous Integration&lt;/h2&gt;

&lt;p&gt;CI has been added to &lt;a href=&quot;https://github.com/lirios/materialdecoration&quot;&gt;materialdecoration&lt;/a&gt; and the build issues caused by
qtwayland are fixed nowadays, meaning that the &lt;a href=&quot;https://copr.fedorainfracloud.org/coprs/plfiorini/liri-nightly/package/liri-materialdecoration/&quot;&gt;package&lt;/a&gt; now builds again.&lt;/p&gt;

&lt;h2 id=&quot;ostree-tools&quot;&gt;OSTree tools&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/lirios/ostree-image-creator&quot;&gt;ostree-image-creator&lt;/a&gt; and &lt;a href=&quot;https://github.com/lirios/ostree-upload&quot;&gt;ostree-upload&lt;/a&gt; were rewritten with Go, which is
way easier to develop with compared to Rust.&lt;/p&gt;

&lt;p&gt;For this kind of applications, Rust didn’t give any advantage at all.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/lirios/ostree-image-creator&quot;&gt;ostree-image-creator&lt;/a&gt; was also redesigned: it’s now a tool that builds any kind of image
you want from a declarative recipe.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/liri-infra/image-manager&quot;&gt;image-manager&lt;/a&gt; now shares code with &lt;a href=&quot;https://github.com/lirios/ostree-image-creator&quot;&gt;ostree-image-creator&lt;/a&gt; and &lt;a href=&quot;https://github.com/lirios/ostree-upload&quot;&gt;ostree-upload&lt;/a&gt;,
for instance all the code to parse JSON and token authentication, and the client was rewritten in Go.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/lirios/image-config/blob/develop/live.yaml&quot;&gt;Here&lt;/a&gt; you can take a look at Liri OS live image recipe.&lt;/p&gt;

&lt;h2 id=&quot;ostree-repositories&quot;&gt;OSTree repositories&lt;/h2&gt;

&lt;p&gt;OSTree &lt;a href=&quot;https://github.com/lirios/ostree-config&quot;&gt;configuration&lt;/a&gt; was revamped and the repository is now GPG signed.
Every night a GitHub workflow builds and uploads the repository.&lt;/p&gt;

</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Wed, 01 Jul 2020 17:52:00 +0000</pubDate>
          <link>https://blog.liri.io/updates-for-june-2020/</link>
          <guid isPermaLink="true">https://blog.liri.io/updates-for-june-2020/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>updates</category>
          
          
        </item>
      
    
      
        <item>
          <title>Updates for May, 2020</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/xEG5Agjb_5s/456x684&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;During may the continuous integration improvements continued.&lt;/p&gt;

&lt;h2 id=&quot;translations&quot;&gt;Translations&lt;/h2&gt;

&lt;p&gt;There is now a new &lt;a href=&quot;https://github.com/liri-infra/translation-action&quot;&gt;translation action&lt;/a&gt; that regenerates translation sources
and push them to Transifex, pull the rebased and updated translations, merge translations into
desktop and metainfo files, then commit and push to git.&lt;/p&gt;

&lt;p&gt;All in one action.&lt;/p&gt;

&lt;p&gt;We now have metainfo translated, desktop files are translated with gettext and there is
context information that indicates which key is being translated.&lt;/p&gt;

&lt;h2 id=&quot;build&quot;&gt;Build&lt;/h2&gt;

&lt;p&gt;The build workflow got some improvements.  Previously we were building on Ubuntu with the
&lt;a href=&quot;https://launchpad.net/~beineri&quot;&gt;ppa-beineri&lt;/a&gt; repository so we can build against multiple Qt versions.&lt;/p&gt;

&lt;p&gt;However &lt;a href=&quot;https://launchpad.net/~beineri&quot;&gt;ppa-beineri&lt;/a&gt; doesn’t build with EGL support, but this makes building
&lt;a href=&quot;https://github.com/lirios/eglfs&quot;&gt;eglfs&lt;/a&gt; impossible.&lt;/p&gt;

&lt;p&gt;In order to overcome this difficulty, there are OpenSuSE Tumbleweed images now
with all the dependencies.  One image for each Qt version we are building against.&lt;/p&gt;

&lt;p&gt;At the time of this writing, the Qt versions supported are 5.12 because it’s a LTS release,
then the latest two version 5.14 and 5.15.&lt;/p&gt;

&lt;p&gt;All container images are in the same &lt;a href=&quot;https://github.com/liri-infra/container-images&quot;&gt;repository&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;documentation&quot;&gt;Documentation&lt;/h2&gt;

&lt;p&gt;The developer documentation, previously available through &lt;a href=&quot;https://readthedocs.org&quot;&gt;readthedocs.org&lt;/a&gt;
is now available via GitHub Pages on &lt;a href=&quot;https://docs.liri.io&quot;&gt;docs.liri.io&lt;/a&gt;.&lt;/p&gt;

</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Mon, 01 Jun 2020 07:52:00 +0000</pubDate>
          <link>https://blog.liri.io/updates-for-may-2020/</link>
          <guid isPermaLink="true">https://blog.liri.io/updates-for-may-2020/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>updates</category>
          
          
        </item>
      
    
      
        <item>
          <title>Updates for April, 2020</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/P6YxhqqcFJ4/800x533&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;April didn’t see much code improvements, it was pretty much dedicated
to the continuous integration.&lt;/p&gt;

&lt;p&gt;Previously we used &lt;a href=&quot;https://travis-ci.org/&quot;&gt;Travis CI&lt;/a&gt; and &lt;a href=&quot;https://www.appveyor.com/&quot;&gt;AppVeyor&lt;/a&gt; as continuous integration
for pushes and pull requests, and &lt;a href=&quot;https://www.jenkins.io/&quot;&gt;Jenkins&lt;/a&gt; to build the OSTree repository, OS images
and translation updates.&lt;/p&gt;

&lt;p&gt;Now with &lt;a href=&quot;https://github.com/features/actions&quot;&gt;GitHub Actions&lt;/a&gt; we can really improve the Liri CI.&lt;/p&gt;

&lt;p&gt;GitHub Actions introduce the concept of workflows, this gives us great flexibility to implement whatever we want.&lt;/p&gt;

&lt;p&gt;We now have basically three workflows:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Status check and validation&lt;/li&gt;
  &lt;li&gt;Build and release&lt;/li&gt;
  &lt;li&gt;Translations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can see if each commit or pull request has valid QML and freedesktop.org files (desktop entries and
AppStream metadata) with the following actions that I developed for Liri and will be in the marketplace soon:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/liri-infra/qmllint-action&quot;&gt;qmllint-action&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/liri-infra/xdg-validator-action&quot;&gt;xdg-validator-action&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And also prevent work in progress pull requests to be merged.&lt;/p&gt;

&lt;p&gt;In the future we can also check for the proper SPDX license information or whether there are coding style violations.&lt;/p&gt;

&lt;p&gt;With the build workflow we can check if the code builds on different operating systems, platforms and compilers.
The cross-platform apps benefit by this the most as we can build against different Qt versions, Linux, Windows, macOS and Flatpak.
In the future we’ll probably add Snap and AppImage.
The resulting artifacts are available for each run of the workflow.
When a new version is released, the artifacts are attached to the release automatically.&lt;/p&gt;

&lt;p&gt;When a library is built in the CI, the workflow stores a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.tar.gz&lt;/code&gt; artifact with the binaries
that will be used by the CI of another repository that depends on that library.
Given that you cannot download artifacts from another repository with the official
&lt;a href=&quot;https://github.com/actions/download-artifact&quot;&gt;actions/download-artifact&lt;/a&gt;,
I made my &lt;a href=&quot;https://github.com/liri-infra/fetch-artifact&quot;&gt;fetch-artifact&lt;/a&gt; action.&lt;/p&gt;

&lt;p&gt;Every week the translation sources are regenerated and sent to &lt;a href=&quot;https://www.transifex.com/lirios/&quot;&gt;Transifex&lt;/a&gt;.
The translations, now rebased to the new sources, are downloaded and automatically committed.
This was previously done in our private Jenkins installation, but the workflows are easier
to configure and manage.  This also result in less work on our private build server.&lt;/p&gt;

&lt;p&gt;These are the actions I made for the translations:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/liri-infra/lupdate-action&quot;&gt;lupdate-action&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://github.com/liri-infra/transifex-action&quot;&gt;transifex-action&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I made the &lt;a href=&quot;https://github.com/lirios/.github&quot;&gt;.github repository&lt;/a&gt; that contains default
GitHub files, the so called &lt;a href=&quot;https://help.github.com/en/github/building-a-strong-community/creating-a-default-community-health-file&quot;&gt;community health files&lt;/a&gt; such as code of conduct,
contributing guidelines, issue template and pull request template.
This is yet another step towards a better GitHub integration.&lt;/p&gt;

</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Fri, 01 May 2020 07:52:00 +0000</pubDate>
          <link>https://blog.liri.io/updates-for-april-2020/</link>
          <guid isPermaLink="true">https://blog.liri.io/updates-for-april-2020/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>updates</category>
          
          
        </item>
      
    
      
        <item>
          <title>Updates for March, 2020</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/5eyAJMTb6mM/800x533&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;Flatpak is a first class citizen in Liri OS.&lt;/p&gt;

&lt;p&gt;For this reason during March our XDG portal implementation was improved.&lt;/p&gt;

&lt;p&gt;UI creation now works way better and QML code is integrated with C++, however at the moment
there is no XDG foreign support.  This means that portal dialogs are not parented to the
application window.&lt;/p&gt;

&lt;p&gt;The following portals were created:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Screenshot&lt;/li&gt;
  &lt;li&gt;Lockdown&lt;/li&gt;
  &lt;li&gt;Print&lt;/li&gt;
  &lt;li&gt;Access&lt;/li&gt;
  &lt;li&gt;Settings&lt;/li&gt;
  &lt;li&gt;Background&lt;/li&gt;
  &lt;li&gt;Wallpaper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The screenshot portal has a method to pick the color of a pixel, so in order to
make this possible I created a custom Wayland protocol.&lt;/p&gt;

&lt;p&gt;While working on the screenshot portal, I also improved our implementation of
the screen copy Wayland &lt;a href=&quot;https://github.com/lirios/wayland/blob/develop/data/protocols/wlr-screencopy-unstable-v1.xml&quot;&gt;protocol&lt;/a&gt; from wlroots.&lt;/p&gt;

&lt;p&gt;Image format conversion was fixed, it’s now possible to capture with or without the
pointer cursor as well as memory leak fixes.&lt;/p&gt;

&lt;p&gt;In other news, the OS installer was fixed so it’s now possible to install it again.
However the boot loader configuration needs some fixes that will be probably implemented
in May.&lt;/p&gt;

</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Fri, 01 May 2020 06:00:00 +0000</pubDate>
          <link>https://blog.liri.io/updates-for-march-2020/</link>
          <guid isPermaLink="true">https://blog.liri.io/updates-for-march-2020/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>updates</category>
          
          
        </item>
      
    
      
        <item>
          <title>Updates for February, 2020</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/N8MDgWvUW-8/800x533&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;February was mostly about working on this blog.&lt;/p&gt;

&lt;p&gt;You can read more about it &lt;a href=&quot;/welcome-to-the-new-blog&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This month we also ported the &lt;a href=&quot;https://github.com/lirios/screencast&quot;&gt;screencast program&lt;/a&gt; to GStreamer, in place of
GStreamerQt that has been abandoned.&lt;/p&gt;

&lt;p&gt;The app now uses the portal API to start the screencast session, this means
that it will work with any other desktop environment with a portal implementation.&lt;/p&gt;

&lt;p&gt;Meanwhile, our portal implementation has been improved and can now make screencasts
without CPU effort using DMA-BUFs.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/lirios/eglfs&quot;&gt;eglfs&lt;/a&gt; had to be changed to support passing file
descriptors to the compositor, that now implements the &lt;a href=&quot;https://github.com/lirios/wayland/blob/develop/data/protocols/wlr-export-dmabuf-unstable-v1.xml&quot;&gt;wlr-export-dmabuf-unstable-v1&lt;/a&gt;
protocol from wlroots.&lt;/p&gt;

</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Sat, 21 Mar 2020 20:00:00 +0000</pubDate>
          <link>https://blog.liri.io/updates-for-february-2020/</link>
          <guid isPermaLink="true">https://blog.liri.io/updates-for-february-2020/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>updates</category>
          
          
        </item>
      
    
      
        <item>
          <title>Updates for January, 2020</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/TGeFx4x4NHU/800x600&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@glencarrie?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Glen Carrie&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;January was all about making progress on how Liri OS live images.&lt;/p&gt;

&lt;p&gt;Previously, the images were made with traditional packages with &lt;a href=&quot;https://github.com/lirios/kickstart&quot;&gt;kickstart&lt;/a&gt; files.&lt;/p&gt;

&lt;p&gt;I wrote a Python module for the &lt;a href=&quot;https://calamares.io&quot;&gt;Calamares&lt;/a&gt; installer, that deploys the OS tree into the root partition.
However this is excruciatingly slow because at the moment we don’t have a fast Web site, in order to reduce costs
(all the expenses are out of my wallet).&lt;/p&gt;

&lt;p&gt;If the image is made with OSTree itself, the same repository on the image can be used to deploy the operating system
on the root partition, without involving the network at all.&lt;/p&gt;

&lt;p&gt;At the time of my research for already existing tools, nothing was found.
Then Fedora CoreOS started doing something &lt;a href=&quot;https://github.com/coreos/coreos-assembler&quot;&gt;like that&lt;/a&gt;, but it’s too
complex and focused on their needs.&lt;/p&gt;

&lt;p&gt;So I came up with &lt;a href=&quot;https://github.com/lirios/ostree-image-creator&quot;&gt;oic&lt;/a&gt;, also known as ostree-image-creator.&lt;/p&gt;

&lt;p&gt;It’s a simple tool written with Rust, that creates live images.
You can use it with &lt;a href=&quot;https://github.com/ostreedev/ostree&quot;&gt;ostree&lt;/a&gt;, it doesn’t need &lt;a href=&quot;https://github.com/coreos/rpm-ostree&quot;&gt;rpm-ostree&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In the future it will be extended to disk images as well.&lt;/p&gt;

&lt;p&gt;Our OSTree repository now has a live branch, derived from the actual branch that will be installed on users’ computers.
The live branch installs &lt;a href=&quot;https://calamares.io&quot;&gt;Calamares&lt;/a&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dracut&lt;/code&gt; modules specific to its bootstrap, plus
a setup service that creates the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;liveuser&lt;/code&gt; user.&lt;/p&gt;

&lt;p&gt;The difference with the previous images is that only &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var&lt;/code&gt; are writable, and they are not persistent.&lt;/p&gt;

&lt;p&gt;Another important Rust program was made: &lt;a href=&quot;https://github.com/lirios/ostree-upload&quot;&gt;ostree-upload&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We build the OSTree repository in a separate CI machine and want to upload the objects to the public
OSTree repository.&lt;/p&gt;

&lt;p&gt;This program receives the objects from the CI machine and store them in a temporary directory, until the process is done.
Once all objects are transfered, the new changes are published.&lt;/p&gt;

&lt;p&gt;This is better than using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rsync&lt;/code&gt;, there’s no risk that users will fetch from the OSTree repository
during a synchronization.&lt;/p&gt;
</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Fri, 28 Feb 2020 12:05:11 +0000</pubDate>
          <link>https://blog.liri.io/updates-for-january-2020/</link>
          <guid isPermaLink="true">https://blog.liri.io/updates-for-january-2020/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>updates</category>
          
          
        </item>
      
    
      
        <item>
          <title>Welcome to the new blog</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/4hbJ-eymZ1o/800x600&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@rxspawn?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Florian Olivo&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;In 2017, we started writing blog posts in a &lt;a href=&quot;https://medium.com/liridev&quot;&gt;Medium publication&lt;/a&gt;.
Medium appeared to be a simple, clean and reader-focused host for writers.&lt;/p&gt;

&lt;p&gt;At the beginning it felt like a good choice.&lt;/p&gt;

&lt;p&gt;They supported rich formatting, great image embedding, easy to use editor,
RSS and custom domains.&lt;/p&gt;

&lt;h1 id=&quot;whats-wrong-with-medium&quot;&gt;What’s wrong with Medium&lt;/h1&gt;

&lt;p&gt;Soon after we decided to use the platform, Medium started getting more aggressive
towards readers.&lt;/p&gt;

&lt;p&gt;It was no longer possible to create an account with an email address, instead a
third-party social network login was required.  Now it appears the email
registration was restored.&lt;/p&gt;

&lt;p&gt;Readers who were not signed in, were shown a modal popup asking them to create
an account.&lt;/p&gt;

&lt;p&gt;Medium has also gotten aggressive with their new monetized platform.
Stories are now defaulting to be behind their paywall.  While this might be useful
for those who seek to earn money from their content, the paywall actively reduces
the number of people that will read those stories, as it restricts it to
paying members.&lt;/p&gt;

&lt;h1 id=&quot;a-new-blog&quot;&gt;A new blog&lt;/h1&gt;

&lt;p&gt;In the past we never blogged much about Liri, but as progress is made
we want to update more frequently our publication.&lt;/p&gt;

&lt;p&gt;We want a blog that is read by all people for free and respect their privacy.&lt;/p&gt;

&lt;p&gt;Since the &lt;a href=&quot;https://github.com/lirios/lirios.github.io&quot;&gt;web site&lt;/a&gt; is already
made with Jekyll, we are familiar with it.&lt;/p&gt;

&lt;p&gt;The blog code is &lt;a href=&quot;https://github.com/lirios/blog&quot;&gt;here&lt;/a&gt; and it’s published
with &lt;a href=&quot;https://pages.github.com/&quot;&gt;GitHub Pages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is a nice opportunity to use the new Material Design Components,
that replace the older Material Design Lite that is still used by our
&lt;a href=&quot;https://liri.io&quot;&gt;web site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What you can find now, is just a MVP.  In order to start posting to this
blog the bare minimum had to be ready.&lt;/p&gt;

&lt;p&gt;The layout and styles will be improved upon as we go along.&lt;/p&gt;

&lt;p&gt;In the future Material Design Components will be used with the
&lt;a href=&quot;https://liri.io&quot;&gt;web site&lt;/a&gt; as well.&lt;/p&gt;
</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Mon, 10 Feb 2020 18:05:00 +0000</pubDate>
          <link>https://blog.liri.io/welcome-to-the-new-blog/</link>
          <guid isPermaLink="true">https://blog.liri.io/welcome-to-the-new-blog/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>evergreen</category>
          
          <category>meta</category>
          
          
        </item>
      
    
      
        <item>
          <title>Liri session is now managed by systemd</title>
          <description>&lt;figure&gt;

  &lt;p&gt;&lt;img src=&quot;https://source.unsplash.com/BStW5kYXw4E/800x600&quot; alt=&quot;Photo&quot; /&gt;&lt;/p&gt;
  &lt;figcaption&gt;
Photo by &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/@freestocks?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;freestocks&lt;/a&gt;
on &lt;a target=&quot;_blank&quot; rel=&quot;noopener nofollow&quot; href=&quot;https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText&quot;&gt;Unsplash&lt;/a&gt;
&lt;/figcaption&gt;

&lt;/figure&gt;

&lt;p&gt;Recent Liri desktop architectural changes made it possible to start the desktop and applications using systemd   For a long time I desired to implement this, but it wasn’t possible before landing some architectural changes.&lt;/p&gt;

&lt;p&gt;In this post I will explain how this works and what changes lead to systemd user sessions.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Before you jump to conclusions, be aware that systemd support is enabled by default but it can be disabled both at build and run time.From a user’s perspective nothing has changed, but this is a fundamental change to push things towards Liri desktop 1.0.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 id=&quot;advantages&quot;&gt;Advantages&lt;/h3&gt;

&lt;p&gt;The main advantage of using systemd is that I don’t have to write code to run programs myself and I don’t have to worry about relaunching a vital program if it crashes.&lt;/p&gt;

&lt;p&gt;There is already a tool that knows how to manage programs, it works well and have lots of options. So basically instead of writing code myself, I can just pick the right settings and write an INI style file.&lt;/p&gt;

&lt;p&gt;There are other advantages as well: systemd allows you to control resources (CPU, memory and I/O) and lets you start programs when they are really needed.&lt;/p&gt;

&lt;h3 id=&quot;architectural-changes&quot;&gt;Architectural changes&lt;/h3&gt;

&lt;p&gt;In the beginning, session management was part of Liri Shell, but that was just too much stuff for one program.&lt;/p&gt;

&lt;p&gt;The first thing to do was to turn liri-sessioninto a C++ program.&lt;br /&gt;
Previously it was just a shell script that was creating the session bus before launching liri-shell.&lt;/p&gt;

&lt;p&gt;liri-session:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;sets the environment variables&lt;/li&gt;
  &lt;li&gt;create the session bus if needed&lt;/li&gt;
  &lt;li&gt;starts up liri-shell and liri-shell-helper, services and applications&lt;/li&gt;
  &lt;li&gt;can be controlled via D-Bus
We also needed long running processes to carry out various operations like acting on settings changes, power management, housekeeping, free disk space notifications, …&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s what liri-daemon is for.&lt;/p&gt;

&lt;h3 id=&quot;how-does-systemd-user-works&quot;&gt;How does systemd user works&lt;/h3&gt;

&lt;p&gt;On a systemd managed system, each user is given a user-X.slice(&lt;a href=&quot;http://man7.org/linux/man-pages/man5/systemd.slice.5.html&quot;&gt;systemd.slice(5)&lt;/a&gt;) and the user’s session will be run in a session-Y.scope (&lt;a href=&quot;http://man7.org/linux/man-pages/man5/systemd.scope.5.html&quot;&gt;systemd.scope(5)&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;There is also user@X.service which is the user’s systemd instance that is shut down when the user logs out.&lt;/p&gt;

&lt;p&gt;liri-session starts the liri-session.target unit and uses systemd-run to launch XDG autostart applications in a transient scope.&lt;/p&gt;

&lt;p&gt;To ensure that graphical applications are started after the compositor, each XDG autostart application is a systemd unit that depends on liri-shell.target so that their startup is delayed until the graphical environment is up and running.&lt;/p&gt;

&lt;p&gt;Some programs (such as pulseaudio) are available as both systemd user units and XDG autostart. We don’t want to start them twice.&lt;br /&gt;
To avoid running them twice, just install a desktop entry of the same name with Hidden=true inside $datadir/liri-session/systemd-user/autostart this will disable the XDG autostart entry.&lt;/p&gt;

&lt;p&gt;Liri Shell is made by two components: liri-shell the compositor, and liri-shell-helper a Wayland client that draws parts of the user interface.&lt;/p&gt;

&lt;p&gt;With systemd we now have a watchdog that kills liri-shell if it’s stuck for too much time, liri-shell-helper is restarted on crash or if it’s frozen.&lt;/p&gt;

&lt;p&gt;Applications in the menu are either started with systemd-run (just like XDG autostart applications) in a transient scope or with D-Bus activation which still means the startup is carried out by systemd due to D-Bus integration with systemd.&lt;/p&gt;

</description>
          
            
            <author>
              <name>Pier Luigi Fiorini</name>
              
            </author>
          
          <pubDate>Sat, 16 Nov 2019 23:00:00 +0000</pubDate>
          <link>https://blog.liri.io/liri-session-is-now-managed-by-systemd/</link>
          <guid isPermaLink="true">https://blog.liri.io/liri-session-is-now-managed-by-systemd/</guid>
          
              
              
          <enclosure url="https://blog.liri.io" />
          
          
          <category>updates</category>
          
          
        </item>
      
    
  </channel>
</rss>