<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[rlxos blog]]></title><description><![CDATA[Announcements and Tutorials regarding rlxos]]></description><link>https://blog.avyos.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1713030303201/KwXf6_FL-.svg</url><title>rlxos blog</title><link>https://blog.avyos.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 25 May 2026 15:49:17 GMT</lastBuildDate><atom:link href="https://blog.avyos.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Introducing rlxos 2.0 Sankalpa]]></title><description><![CDATA[We’re excited to announce the release of rlxos 2.0, code named Sankalpa (Sun-kahl-pah), a Sanskrit word meaning "determination.", and that’s exactly what this release stands for—our commitment to building a safe, reliable, and user-friendly Linux dis...]]></description><link>https://blog.avyos.dev/introducing-rlxos-20-sankalpa</link><guid isPermaLink="true">https://blog.avyos.dev/introducing-rlxos-20-sankalpa</guid><category><![CDATA[rlxos]]></category><category><![CDATA[Linux]]></category><category><![CDATA[FOSS]]></category><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Fri, 06 Sep 2024 13:43:41 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Xaanw0s0pMk/upload/69cc88bac134c72238530a774030547f.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We’re excited to announce the release of <strong>rlxos 2.0</strong>, code named <strong>Sankalpa</strong> (Sun-kahl-pah), a Sanskrit word meaning "<strong>determination.</strong>", and that’s exactly what this release stands for—our commitment to building a safe, reliable, and user-friendly Linux distribution. With major improvements in both technology and design, rlxos 2.0 aims to deliver an even better experience for everyone.</p>
<h3 id="heading-ignite-the-future-of-building-rlxos"><strong>Ignite</strong> – The Future of Building rlxos</h3>
<p>Our biggest update this year is <strong>Ignite</strong>, the build system behind rlxos. <strong>Ignite</strong> now ensures that every part of rlxos can be <strong>reproducible</strong>, meaning the same results can be created over and over, no matter where or when you build it and gave exactly same output which increase code trust and beneficial for system debugging.</p>
<p>And apart from various internal fixes, backend changes and core components updates below are few changes on users end.</p>
<h3 id="heading-improved-uiux-look-and-feel-better"><strong>Improved UI/UX</strong> – Look and Feel Better</h3>
<p>We’ve made rlxos 2.0 not just powerful but also beautiful and easy to use.</p>
<h4 id="heading-animations">Animations</h4>
<p>The moment you start rlxos, you’ll notice <strong>smooth animations</strong> that make everything look and feel more polished.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725213486361/31d689be-c798-4d40-afe7-12df7122d7a5.gif" alt class="image--center mx-auto" /></p>
<h4 id="heading-updated-default-theme-and-new-fonts">Updated default Theme and New Fonts</h4>
<p>We’ve improved various theming components like, drop-down menus and panel with better spacing and <strong>translucency</strong>.</p>
<p>We’ve also switched to <strong>Fira Code</strong> for monospace fonts, a great choice for developers with stylish coding ligatures.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725213523020/eb71a453-8e9e-471e-adc3-ad92eec21592.png" alt class="image--center mx-auto" /></p>
<h4 id="heading-easier-app-navigation">Easier App Navigation</h4>
<p>Finding and opening apps is now simpler with the new <strong>grid-based app menu</strong>. It’s more organized, visually appealing, and works well on both desktops and touchscreens.</p>
<p><strong>Auto suggestions with default shell.</strong></p>
<p>Default shell is replaced to zsh configured with auto-suggestions and other help full plugins for easy to access shell commands.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725289901055/0640da1d-18b3-44fb-9bb7-8a772b251cac.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-software-management-made-simple"><strong>Software Management Made Simple</strong></h3>
<p>rlxos now comes with a <strong>graphical software manager</strong>, making it super easy to install, update, and manage <strong>Flatpak</strong> apps with just a few clicks.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725122233062/6972ea4c-9b6b-4edb-af7a-921d920107cd.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-sysroot-your-new-system-management-tool"><strong>Sysroot</strong> – Your New System Management Tool</h3>
<p>We’ve replaced the old swupd (name collision) tool with <strong>sysroot</strong>, our powerful new system management tool that makes maintaining your system more flexible:</p>
<ul>
<li><p><strong>Switch Update Channels</strong>: You can choose between a stable, reliable update channel or an <strong>unstable</strong> channel if you want the newest features faster.</p>
</li>
<li><p><strong>Add Extensions</strong>: Want more features? You can add <strong>extension packs</strong> like developer tools, virtualization with <strong>QEMU</strong>, or window managers like <strong>i3</strong> and <strong>Sway</strong>. These extensions let you customize your rlxos experience to fit your needs.</p>
<p>  <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1725123131100/9fa536a2-ce15-459a-b411-f9f0878b4dbe.png" alt class="image--center mx-auto" /></p>
</li>
</ul>
<h3 id="heading-small-but-important-improvements"><strong>Small but Important Improvements</strong></h3>
<p>Along with the big changes, we’ve also made smaller improvements that make a difference:</p>
<ul>
<li><p><strong>Faster Setup</strong>: You can now <strong>search for your timezone</strong> during the initial setup, making it quicker to get started.</p>
</li>
<li><p><strong>Welcome App</strong>: The welcome app now helps you set up themes and <strong>HiDPI settings</strong> as soon as you install the system.</p>
</li>
<li><p><strong>Uniform Looks:</strong> <code>libadwaita</code> is patched to follow system theme.</p>
</li>
<li><p><strong>CA-Certificates Fix</strong>: No more issues with invalid certificates after system updates. Certificates are now included with the system and updated automatically.</p>
</li>
</ul>
<h3 id="heading-known-issues">Known Issues</h3>
<p>While rlxos 2.0 brings many improvements, we want to be transparent about a couple of known issues you may encounter:</p>
<ol>
<li><p><strong>Initial Login on QEMU</strong>: When running rlxos on QEMU-based virtual machines, the initial login at login manager might fail. This issue does <strong>not</strong> appear on real hardware. If you experience this, simply retry the login.</p>
</li>
<li><p><strong>Manuals and documentations:</strong> man pages and documentations might not available for some of the apps and commands.</p>
</li>
<li><p><strong>Parole</strong>: Default video and music player parole might not play video properly on specific graphics hardware.</p>
</li>
<li><p><strong>Sysroot Extensions at initial boot</strong>: While not a bug, this behavior might be a bit confusing for new users. <strong>Sysroot</strong> requires a "previous system state" in order to add extensions, but this state is not available on the very first boot. To resolve this, simply run a <strong>system update using sysroot</strong>. This will create the necessary previous state, and after rebooting into the updated system, you'll be able to add extensions seamlessly.</p>
</li>
<li><p><strong>QEMU Extensions:</strong> Networking with virt-manager from QEMU extension might not work properly as default Network is not configured.</p>
</li>
<li><p><strong>Sway on NVIDIA</strong>: Sway extension might fail to start or work improperly on system with NVIDIA GPUs.</p>
</li>
<li><p><strong>Software Center Theme</strong>: On the first launch, the Software Center might use the <strong>Adwaita (light) theme</strong> instead of the rlxos default dark theme. This can be fixed by going to <strong>Settings -&gt; Appearances</strong> and switching themes. We’ve patched <strong>libadwaita</strong> to use the system theme in future updates.</p>
</li>
</ol>
<hr />
<h3 id="heading-why-rlxos-20-sankalpa">Why rlxos 2.0 Sankalpa?</h3>
<p>rlxos 2.0 is built with <strong>determination</strong> to provide a better, safer, and more reliable Linux experience. Whether you’re a developer, a tech enthusiast, or just someone want to try something new, rlxos 2.0 is built for you.</p>
<p><a target="_blank" href="https://rlxos.dev/downloads">Download</a> rlxos 2.0 today and see what’s new!</p>
]]></content:encoded></item><item><title><![CDATA[Inside RLXOS 2.0 Source Code - Part 2]]></title><description><![CDATA[Welcome back to our deep dive into the rlxos 2.0 source code! In Part 1, we set the stage by covering the essentials of setting up the environment, installing prerequisites, building the system, and taking it for a test drive. Now, in Part 2, we’re g...]]></description><link>https://blog.avyos.dev/inside-rlxos-20-source-code-part-2</link><guid isPermaLink="true">https://blog.avyos.dev/inside-rlxos-20-source-code-part-2</guid><category><![CDATA[rlxos]]></category><category><![CDATA[Linux]]></category><category><![CDATA[LFS]]></category><category><![CDATA[embedded systems]]></category><category><![CDATA[distros]]></category><category><![CDATA[Linux distribution]]></category><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Mon, 20 May 2024 11:51:58 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/HYQvV8wWX18/upload/2fbad752da55194ed9176346e1786291.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome back to our deep dive into the rlxos 2.0 source code! In Part 1, we set the stage by covering the essentials of setting up the environment, installing prerequisites, building the system, and taking it for a test drive. Now, in Part 2, we’re going to peel back the layers and reveal the magic behind the build process, focusing on the enigmatic build tool build specifically for the development of rlxos known as Ignite.</p>
<p>Recall the command we used to create the installer ISO:</p>
<pre><code class="lang-bash">make ELEMENT=installer/image.yml
</code></pre>
<p>At a glance, it seems straightforward, but under the hood, there’s a symphony of operations conducted by Ignite. Here’s a snippet from our <a target="_blank" href="https://www.gnu.org/software/make/manual/html_node/Introduction.html">Makefile</a>.</p>
<pre><code class="lang-bash">all: $(IGNITE) version.yml ostree-branch.yml channel.yml
ifdef ELEMENT
    $(IGNITE) cache-path=$(CACHE_PATH) build $(ELEMENT)
endif
</code></pre>
<p>Let’s break down what’s this command doing under the hood but before that let me introduce to the star of the house <code>Ignite</code></p>
<h2 id="heading-ignite-the-heart-of-our-build-process">Ignite: The Heart of our Build Process</h2>
<p>Ignite is the powerhouse that drives the rlxos build system. When we kick off the build process, Ignite embarks on a meticulous journey to create a binary component.</p>
<ol>
<li><p>Ignite starts by reading and parsing the element file specified at <code>elements/$(ELEMENT)</code>. In our case, this is <code>elements/installer/image.yml</code>. This YAML file is like a recipe, detailing the ingredients (components and dependencies) and the steps required to create and specific component.</p>
</li>
<li><p>Next, Ignite constructs a detailed dependency tree. Think of this as mapping out every ingredient needed, along with any sub-ingredients, to ensure nothing is missing. The YAML file outlines these dependencies, ensuring that the build includes every necessary component.</p>
</li>
<li><p>Ignite then sets up a temporary root filesystem at <code>$(CACHE_PATH)/temp/&lt;element-id&gt;-&lt;hash&gt;/</code>. The <code>&lt;hash&gt;</code> is a unique identifier generated from a cryptographic hash of all dependencies, environment variables, and the element file data. This hash ensures build purity by guaranteeing that any change in the dependencies or environment triggers a complete rebuild of all affected components.</p>
</li>
<li><p>With the root filesystem ready, Ignite uses <a target="_blank" href="https://github.com/containers/bubblewrap">Bubblewrap</a> to run a containerized environment within this filesystem. Bubblewrap is a sand-boxing tool that creates an isolated environment, ensuring that the build process is consistent and free from external influences.</p>
</li>
<li><p>Each YAML file includes a <code>script:</code> configuration. This can be written explicitly or generated at runtime using build classes, source code, or other configurations. These scripts guide Ignite on how to compile the source code or execute the necessary steps to build each component. This flexibility allows for precise control over the build process, accommodating various build requirements and conditions.</p>
</li>
<li><p>Once all compilation steps are completed successfully, Ignite caches the build artifacts. These artifacts are the outputs of the build process and can be used directly or by other build processes. The cached artifacts are stored at <code>$(CACHE_PATH)/cache/&lt;element-id&gt;-&lt;version&gt;-&lt;hash&gt;.pkg</code>. The <code>&lt;hash&gt;</code> used here is the same as in the environment setup, ensuring that the cache precisely matches the required environment. This guarantees that cached artifacts are reliable and reusable.</p>
</li>
</ol>
<h2 id="heading-ensuring-purity-and-bit-to-bit-reproducibility">Ensuring Purity and Bit to Bit reproducibility.</h2>
<p>One of the standout features of Ignite is its commitment to build purity and reproducibility. The cryptographic hash system ensures that any modification in the build environment or dependencies results in a full rebuild of all dependent components. This mechanism prevents inconsistencies and guarantees a clean, reliable build every time independent on the environment.</p>
<h2 id="heading-additional-commands">Additional commands</h2>
<p>In addition to its primary role in the build process, Ignite offers several other commands that enhance its functionality and streamline the workflow:</p>
<ul>
<li><p><strong>Status</strong>: You can use the command <code>make status ELEMENT=&lt;ELEMENT&gt;</code> to check whether an element is already cached or if it needs a rebuild. This command is incredibly useful for quickly assessing the state of your build environment without initiating a full build.</p>
</li>
<li><p><strong>Filepath</strong>: The command <code>make filepath ELEMENT=&lt;ELEMENT&gt;</code> prints the filepath of the cached artifact for the specified element. This allows you to easily locate and use the cached files, facilitating integration with other tools or processes.</p>
</li>
<li><p><strong>Checkout</strong>: The <code>make checkout ELEMENT=&lt;ELEMENT&gt;</code> command, which you might have already used in previous blog, is used to checkout the cached artifact to <code>$(DESTDIR)</code>.</p>
</li>
</ul>
<h3 id="heading-conclusion">Conclusion</h3>
<p>In this part of our series, we ventured deep into the intricate workings of the rlxos 2.0 build process, with Ignite at the helm. We explored how Ignite work. Understanding these steps is crucial for anyone looking to contribute to rlxos or enhance its functionality. Stay tuned for Part 3, where we’ll dive into advanced topics like customizing elements, optimizing the build process, and troubleshooting common issues. The journey through rlxos 2.0 continues to unfold, revealing more of its inner workings and the elegance of its design.</p>
]]></content:encoded></item><item><title><![CDATA[Inside RLXOS 2.0 Source Code - Part 1]]></title><description><![CDATA[Hey there, tech enthusiasts! Today, we're taking a fun dive into the source code of RLXOS and building one from source.
Hold on a sec, ever heard of RLXOS? It's not just your average operating system – it's an open-source, independent, and immutable ...]]></description><link>https://blog.avyos.dev/inside-rlxos-20-source-code-part-1</link><guid isPermaLink="true">https://blog.avyos.dev/inside-rlxos-20-source-code-part-1</guid><category><![CDATA[Linux]]></category><category><![CDATA[LFS]]></category><category><![CDATA[rlxos]]></category><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Tue, 16 Apr 2024 12:11:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/Wiu3w-99tNg/upload/e867ebdbcd6ef4f8bc6ac5f2ca624616.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey there, tech enthusiasts! Today, we're taking a fun dive into the source code of RLXOS and building one from source.</p>
<p>Hold on a sec, ever heard of RLXOS? It's not just your average operating system – it's an open-source, independent, and <s>immutable</s> securely mutable distribution. Picture this: it's like taking the best parts of Android security and workflow and bringing them to your desktop. Cool, right? (Also keep in mind that RLXOS is newer Linux distribution and can lack features and occasional instability)</p>
<p>If you're curious, you can dive into RLXOS 2.0 and explore all its features right here. It's a neat way to learn about building and tinkering with operating systems. Visit the <a target="_blank" href="https://rlxos.dev">Project website</a> to learn more about the project and take a test drive of it.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1715097500792/370b1da6-bef3-4054-b502-c7147529b4d1.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-hardware-requirements">Hardware Requirements</h2>
<p>Building RLXOS doesn't demand a high-end system. But you'll need at least 100 GiB of storage space, a x86_64 multi-core system, and a minimum of 8 GiB of memory (consider adding swap space if you plan to build LLVM and Webkitgtk-like tools). In essence, you can compile RLXOS on your laptop overnight.</p>
<p>Compilation times vary depending on your system configuration, ranging from 2 days to 6 hours. For instance, it took me 52 hours to compile RLXOS from source on the lowest configuration <a target="_blank" href="https://contabo.com/en/vps/cloud-vps-1/?image=ubuntu.267&amp;qty=1&amp;contract=1&amp;storage-type=vps-1-400-gb">Contabo Cloud VPS 1</a>, and nearly 6 hours on <a target="_blank" href="https://contabo.com/en/dedicated-servers/intel-10-core/?image=ubuntu.267&amp;ds-storage=1592.1._.P&amp;qty=1&amp;contract=1">Contabo Intel 10-Core</a>.</p>
<h2 id="heading-software-requirements">Software Requirements</h2>
<p>To successfully compile RLXOS, ensure you have a native Linux system installed. Additionally, install the following tools and libraries:</p>
<ul>
<li><p>GNU C++20 compiler</p>
</li>
<li><p>libostree</p>
</li>
<li><p>bwrap</p>
</li>
<li><p>bsdtar or libarchive-tools</p>
</li>
</ul>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">RLXOS utilizes a temporary lightweight bwrap container to isolate the build process of each component from the system, ensuring no alterations are made to your system in any way.</div>
</div>

<h2 id="heading-obtaining-source-code">Obtaining Source Code</h2>
<p>Simply fork my GitHub repository at <a target="_blank" href="https://github.com/itsManjeet/rlxos/">https://github.com/itsManjeet/rlxos/</a> containing the meta-configuration files for building RLXOS. Your star would be much appreciated to support my work.</p>
<p>If you're not on GitHub, clone the project using:</p>
<pre><code class="lang-bash">git <span class="hljs-built_in">clone</span> --recurse-submodules --branch stable https://github.com/itsManjeet/rlxos
</code></pre>
<h2 id="heading-project-structure">Project Structure</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>File/Folder</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td>elements/</td><td>YAML configuration files for each component</td></tr>
<tr>
<td>files/</td><td>Files required by one or more components to build, such as icons, service files, background wallpaper, or logos.</td></tr>
<tr>
<td>patches/</td><td>Patch files used for fixes or customization of each component.</td></tr>
<tr>
<td>scripts/</td><td>Scripts utilized in CI/CD pipelines.</td></tr>
<tr>
<td>config-&lt;ARCH&gt;.yml</td><td>Project configuration file used by Ignite to set up environment variables, provide global variables, and compiler information.</td></tr>
<tr>
<td>include/</td><td>Shared configurations imported in config-&lt;ARCH&gt;.yml</td></tr>
</tbody>
</table>
</div><h2 id="heading-ignite-the-build-process">Ignite! the build process🔥</h2>
<p>Now that we have the source code, let's build our first RLXOS distribution. You'll understand why I call it Ignite! the build process later.</p>
<p>Firstly, create your own GPG key to sign the updates</p>
<p>Begin by removing the default rlxos.gpg key:</p>
<pre><code class="lang-bash">rm -v files/rlxos.gpg
</code></pre>
<p>Then generate a new one:</p>
<pre><code class="lang-bash">make file/rlxos.gpg
</code></pre>
<p>This action will create a public key at <code>files/rlxos.gpg</code> and a private key at <code>ostree-gpg/</code>. The private key is utilized to sign the OTA updates, while the public key is provided to users within the release ISO to verify OTA updates.</p>
<p>Execute:</p>
<pre><code class="lang-bash">make ELEMENT=installer/image.yml
</code></pre>
<p>Now, sit back and watch HIMYM to know how Ted meets his children's mother. Yes, it may take that long (unless you're Barney with NASA's hardware).</p>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">Please raise the <a target="_blank" href="https://github.com/itsManjeet/rlxos/issues/new?assignees=itsManjeet&amp;labels=ignition-failed&amp;projects=&amp;template=ignite-failed--.md&amp;title=Ignition+failed%21">GitHub Issue</a> with the error message along with system configuration if the process failed.</div>
</div>

<h2 id="heading-testing-the-output">Testing the output</h2>
<p>Once the build process concludes, check out the artifact by executing:</p>
<pre><code class="lang-bash">make checkout ELEMENT=installer/image.yml DESTDIR=out
</code></pre>
<p>This will check out the installer/image.yml component inside the out directory (essentially the ISO file).</p>
<pre><code class="lang-bash">out
├── rlxos-stable-installer.iso
└── rlxos-stable-installer.iso.sha265sum

0 directories, 2 files
</code></pre>
<p>You can use any other virtual machine or even real hardware to test the built ISO.</p>
<p>I prefer to use QEMU with KVM for nearly native-like performance. First, create a hard disk image by:</p>
<pre><code class="lang-bash">qemu-img create -f qcow2 disk.img 16G
</code></pre>
<p>This will create a dynamically allocated 16G disk image where you can virtually install RLXOS without impacting your system..</p>
<p>Now, execute the command to boot into the RLXOS ISO:</p>
<pre><code class="lang-bash">qemu-system-x86_64 -cdrom out/rlxos-stable-installer.iso \
    -m 2G -smp 2 -enable-kvm -cpu host \
    -soundhw hda -vga virtio \
    -drive <span class="hljs-string">"file=disk.img,format=qcow2"</span>
</code></pre>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Option</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td>-cdrom &lt;ISO&gt;</td><td>Specify the ISO file in this case path to our generated ISO.</td></tr>
<tr>
<td>-m 2G</td><td>2GiB Size of virtual memory allocated to virtual machine, Like RAM in hardware</td></tr>
<tr>
<td>-smp 2</td><td>Number of CPU allocated to the machine</td></tr>
<tr>
<td>-enable-kvm</td><td>Use Kernel virtual machine extension of Linux kernel to enhance performance.</td></tr>
<tr>
<td>-cpu host</td><td>Use CPU instruction similar to host CPU</td></tr>
<tr>
<td>-soundhw hda</td><td>Specify sound hardware</td></tr>
<tr>
<td>-drive "file=.."</td><td>Specify the storage drive in this case our generated disk.img.</td></tr>
</tbody>
</table>
</div><p>I reckon that's sufficient for this part. You now have the RLXOS source code and know how to build and test it. You're all set to explore the project source code and various files.</p>
<p>In the upcoming parts, I'll delve into:</p>
<ul>
<li><p>Setting up update mechanisms and managing different update channels</p>
</li>
<li><p>Establishing CI/CD Pipelines for continuous deployment</p>
</li>
<li><p>Contributing to the project</p>
</li>
<li><p>Customizing components, theming, and creating your own custom RLXOS distribution</p>
</li>
<li><p>Adding support for other Desktop Environments</p>
</li>
<li><p>Writing element files and porting packages to RLXOS</p>
</li>
<li><p>Or we can delve deeper into the build process</p>
</li>
</ul>
<p>Until then, please like the post, follow the blog, and star my GitHub repository. Your support keeps me motivated. Feel free to leave a comment if you encounter any doubts or hurdles. 🌟</p>
]]></content:encoded></item><item><title><![CDATA[I can't update my rlxos system 😱!!!!]]></title><description><![CDATA[Encountering the error message "ERROR Error: Commit : Signature made... Can't check signature: public key not found" while trying install extension or applying OTA updates.
Fear not! Resolving this issue is well within your reach, and in this guide, ...]]></description><link>https://blog.avyos.dev/i-cant-update-my-rlxos-system</link><guid isPermaLink="true">https://blog.avyos.dev/i-cant-update-my-rlxos-system</guid><category><![CDATA[rlxos]]></category><category><![CDATA[Updates]]></category><category><![CDATA[Linux]]></category><category><![CDATA[opensource]]></category><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Sat, 13 Apr 2024 18:58:38 GMT</pubDate><content:encoded><![CDATA[<p>Encountering the error message "ERROR Error: Commit : Signature made... Can't check signature: public key not found" while trying install extension or applying OTA updates.</p>
<p>Fear not! Resolving this issue is well within your reach, and in this guide, we'll provide you with the necessary steps to tackle it effectively. By acquiring and incorporating the updating public key into the system's keyring, we'll ensure that your update server is up and running without a hitch.</p>
<h3 id="heading-understanding-the-dilemma">Understanding the Dilemma</h3>
<p>Before delving into the solution, let's grasp the root cause behind this error. When receiving binary blob from update server, the system rigorously authenticates the incoming packages using cryptographic signatures. These signatures, derived from private keys, require corresponding public keys for verification. If the system lacks the requisite public key or outdated private key, it throws the "public key not found" error. These public keys are available at <code>/etc/pki/ostree/</code> with extension <code>.gpg</code></p>
<p>You can check the signature detail using gpg command:</p>
<pre><code class="lang-bash">gpg --show-keys /etc/pki/ostree/rlxos.gpg
</code></pre>
<h3 id="heading-solution-integrating-the-missing-public-key">Solution: Integrating the Missing Public Key</h3>
<p>To mitigate this issue, we'll acquire the missing public key and seamlessly integrate it into the system's keyring. Here's how:</p>
<ol>
<li><strong>Retrieve the Public Key:</strong> Launch a terminal window and utilize the <code>wget</code> or <code>curl</code> command or using your favorite web browser to fetch the public key from <a target="_blank" href="https://github.com/itsManjeet/rlxos/blob/stable/files/rlxos.gpg">https://github.com/itsManjeet/rlxos/blob/stable/files/rlxos.gpg</a>. or using command:</li>
</ol>
<ul>
<li><pre><code class="lang-plaintext">    wget https://raw.githubusercontent.com/itsManjeet/rlxos/stable/files/rlxos.gpg
</code></pre>
</li>
<li><p><strong>Move the Key to the Appropriate Directory:</strong> Now, let's transfer the downloaded key to the directory where the system expects to find public keys. Execute the following command, substituting <code>rlxos.gpg</code> with the name of your downloaded key file:</p>
</li>
<li><pre><code class="lang-plaintext">    sudo cp rlxos.gpg /etc/pki/ostree/rlxos.gpg -v
</code></pre>
</li>
</ul>
<p>Now you can try to update your system or install extensions to check if the updated key is working</p>
<p>If you are receiving the same issue or still failing to update your system, Please raise bug report at <a target="_blank" href="https://github.com/itsManjeet/rlxos/issues/new">https://github.com/itsManjeet/rlxos/issues/new</a> or comment done the error message below.</p>
]]></content:encoded></item><item><title><![CDATA[02 - Building toolchain with pkgupd]]></title><description><![CDATA[PKGUPD is a better package manager and successor of appctl in rlxos, PKGUPD aims to be a modular/extensible package manager whose functionality can be increase using the modules

Please check Introduction to PKGUPD
In this guide, we write will a  rec...]]></description><link>https://blog.avyos.dev/02-building-toolchain-with-pkgupd</link><guid isPermaLink="true">https://blog.avyos.dev/02-building-toolchain-with-pkgupd</guid><category><![CDATA[compiler]]></category><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Sat, 24 Jul 2021 17:10:04 GMT</pubDate><content:encoded><![CDATA[<blockquote>
<p>PKGUPD is a better package manager and successor of appctl in rlxos, PKGUPD aims to be a modular/extensible package manager whose functionality can be increase using the modules</p>
</blockquote>
<p>Please check <a target="_blank" href="https://blog.rlxos.dev/01-introduction-to-pkgupd-ckr1s6kxp0ffhqus1b4fyeelr">Introduction to PKGUPD</a></p>
<p>In this guide, we write will a  <a target="_blank" href="https://blog.rlxos.dev/01-introduction-to-pkgupd-ckr1s6kxp0ffhqus1b4fyeelr">recipe</a>  file for PKGUPD to generate a cross-compiler toolchain with</p>
<ul>
<li><a target="_blank" href="https://www.gnu.org/software/libc/">musl libc</a> </li>
<li><a target="_blank" href="https://gcc.gnu.org/">gcc</a> </li>
<li><a target="_blank" href="https://www.gnu.org/software/binutils/">binutils</a></li>
</ul>
<h1 id="prerequiesties-and-targeted-audience">Prerequiesties and Targeted Audience</h1>
<p>You need to have a basic idea of toolchains, Unix systems, and compilation. This guide targets the Embedded software developer or basically those how need to set up a cross-compiler.</p>
<h1 id="cross-compiler-toolchain">Cross Compiler Toolchain</h1>
<p>A cross compiler is a compiler capable of creating executable code for a platform other than the one on which the compiler is running, which means you are using a system of architecture Type 'A' and compiles your software to work on System 'B'.</p>
<p>For example, you are coding on a Linux system and want to compile your apps for Android, Windows, or raspberry pi.</p>
<h2 id="build-variable">Build Variable</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Variable ID</td><td>Description</td><td>Example Value</td></tr>
</thead>
<tbody>
<tr>
<td>TARGET</td><td>Triplet triplet for which we are building our cross-compile</td><td>aarch64-linux, <a target="_blank" href="https://wiki.osdev.org/Target_Triplet">Learn More</a></td></tr>
<tr>
<td>CARCH</td><td>Architecture of target system</td><td>x86_64, i686, arm</td></tr>
<tr>
<td>ROOTS</td><td>Root Directory for target system</td><td>/roots-x86_64</td></tr>
<tr>
<td>TCDIR</td><td>Directory where toolchain we are going to install our toolchain</td><td>/toolchain-x86_64</td></tr>
<tr>
<td>FILES</td><td>Directory path for patches or extra files</td><td>--</td></tr>
</tbody>
</table>
</div><pre><code class="lang-yaml"><span class="hljs-attr">environ:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">CARCH="&lt;Replace-this-with-target-arch&gt;"</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">TARGET="&lt;Replace-this-with-target-triplet&gt;"</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">TCDIR="$(pwd)/toolchain-${CARCH}"</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">ROOTS="$(pwd)/roots-${CARCH}"</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">PATH="${TCDIR}/bin:${PATH}"</span>
</code></pre>
<h2 id="binutils">Binutils</h2>
<p>In this part we define a package for binutils which is our cross assembler and linker</p>
<pre><code class="lang-yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">binutils</span>
  <span class="hljs-attr">sources:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.xz</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">binutils-2.37</span>
  <span class="hljs-attr">flags:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">configure</span>
      <span class="hljs-attr">only:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">value:</span> <span class="hljs-string">&gt;
        --prefix=${TCDIR}
        --with-sysroot=${ROOTS}
        --target=${TARGET}
        --disable-multilib
        --disable-nls
        --disable-werror</span>
</code></pre>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Flag</td><td>About</td></tr>
</thead>
<tbody>
<tr>
<td>prefix</td><td>This tell the configure script to prepare the program install in ${TCDIR}  directory</td></tr>
<tr>
<td>with-sysroot</td><td>This tell the build system to look of libraries in ${ROOTS} directory</td></tr>
<tr>
<td>target</td><td>Set the target triplet</td></tr>
<tr>
<td>disable-multilib</td><td>We have no need of multilib at this stage.</td></tr>
<tr>
<td>disable-nls</td><td>Disable internationalization</td></tr>
<tr>
<td>disable-werror</td><td>Disable warning on errors</td></tr>
</tbody>
</table>
</div><h2 id="gcc-static">GCC Static</h2>
<p>In this part we define the static build of gcc which is our cross-compiler</p>
<pre><code class="lang-yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">gcc-static</span>
  <span class="hljs-attr">sources:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/gcc/gcc-11.1.0/gcc-11.1.0.tar.xz</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">https://www.mpfr.org/mpfr-4.1.0/mpfr-4.1.0.tar.xz</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.xz</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">gcc-11.1.0</span>
  <span class="hljs-attr">flags:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">configure</span>
      <span class="hljs-attr">only:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">value:</span> <span class="hljs-string">&gt;
        --prefix=${TCDIR}
        --with-sysroot=${ROOTS}
        --target=${TARGET}
        --with-glibc-version=2.11
        --with-newlib
        --without-headers
        --enable-initfini-array
        --disable-nls
        --disable-shared
        --disable-multilib
        --disable-decimal-float
        --disable-threads
        --disable-libatomic
        --disable-libgomp
        --disable-libquadmath
        --disable-libssp
        --disable-libvtv
        --disable-libstdcxx
        --enable-languages=c
</span>  <span class="hljs-attr">postscript:</span> <span class="hljs-string">|</span>
    <span class="hljs-string">cat</span> <span class="hljs-string">gcc/limitx.h</span> <span class="hljs-string">gcc/glimits.h</span> <span class="hljs-string">gcc/limity.h</span> <span class="hljs-string">&gt;</span> <span class="hljs-string">`dirname</span> <span class="hljs-string">$($TARGET-gcc</span> <span class="hljs-string">-print-libgcc-file-name)`/install-tools/include/limits.h</span>
</code></pre>
<h2 id="kernel-headers">Kernel Headers</h2>
<p>Linux API Headers expose the kernel's API for use by Glibc.</p>
<pre><code class="lang-yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">api-headers</span>
  <span class="hljs-attr">sources:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.13.4.tar.xz</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">linux-5.13.4</span>
  <span class="hljs-attr">plugin:</span> <span class="hljs-string">script</span>
  <span class="hljs-attr">script:</span> <span class="hljs-string">|
    make mrproper
    make headers
    find usr/include -name ".*" -delete
    rm usr/include/Makefile
    cp -rv usr/include ${ROOTS}/usr</span>
</code></pre>
<h2 id="glibc">Glibc</h2>
<p>In this part we define the GNU Libc library which is our standard C library</p>
<pre><code class="lang-yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">glibc</span>
  <span class="hljs-attr">sources:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/glibc/glibc-2.33.tar.xz</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">glibc-2.33</span>
  <span class="hljs-attr">environ:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-string">DESTDIR=${ROOTS}</span>

  <span class="hljs-attr">flags:</span>
    <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">configure</span>
      <span class="hljs-attr">only:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">value:</span> <span class="hljs-string">&gt;
        --prefix=/usr
        --host=${TARGET}
        --build=$(../scripts/config.guess)
        --enable-kernel=3.2
        --with-headers=$LFS/usr/include
        libc_cv_slibdir=/usr/lib</span>
</code></pre>
<h1 id="complete-recipe-file">Complete recipe file</h1>
<pre><code class="lang-yaml"><span class="hljs-attr">id:</span> <span class="hljs-string">cross-toolchain</span>
<span class="hljs-attr">version:</span> <span class="hljs-number">0.0</span><span class="hljs-number">.1</span>
<span class="hljs-attr">about:</span> <span class="hljs-string">Cross</span> <span class="hljs-string">compiler</span> <span class="hljs-string">toolchain</span>

<span class="hljs-attr">clean:</span> <span class="hljs-literal">true</span>
<span class="hljs-attr">split:</span> <span class="hljs-literal">false</span>
<span class="hljs-attr">compile:</span> <span class="hljs-literal">true</span>
<span class="hljs-attr">environ:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">CARCH="&lt;Replace-this-with-target-arch&gt;"</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">TARGET="&lt;Replace-this-with-target-triplet&gt;"</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">TCDIR="$(pwd)/toolchain-${CARCH}"</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">ROOTS="$(pwd)/roots-${CARCH}"</span>
  <span class="hljs-bullet">-</span> <span class="hljs-string">PATH="${TCDIR}/bin:${PATH}"</span>

<span class="hljs-attr">packages:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">binutils</span>
    <span class="hljs-attr">sources:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/binutils/binutils-2.37.tar.xz</span>
    <span class="hljs-attr">dir:</span> <span class="hljs-string">binutils-2.37</span>
    <span class="hljs-attr">flags:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">configure</span>
        <span class="hljs-attr">only:</span> <span class="hljs-literal">true</span>
        <span class="hljs-attr">value:</span> <span class="hljs-string">&gt;
          --prefix=${TCDIR}
          --with-sysroot=${ROOTS}
          --target=${TARGET}
          --disable-multilib
          --disable-nls
          --disable-werror
</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">gcc-static</span>
    <span class="hljs-attr">sources:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/gcc/gcc-11.1.0/gcc-11.1.0.tar.xz</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">https://www.mpfr.org/mpfr-4.1.0/mpfr-4.1.0.tar.xz</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/gmp/gmp-6.2.1.tar.xz</span>
    <span class="hljs-attr">dir:</span> <span class="hljs-string">gcc-11.1.0</span>
    <span class="hljs-attr">flags:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">configure</span>
        <span class="hljs-attr">only:</span> <span class="hljs-literal">true</span>
        <span class="hljs-attr">value:</span> <span class="hljs-string">&gt;
          --prefix=${TCDIR}
          --with-sysroot=${ROOTS}
          --target=${TARGET}
          --with-glibc-version=2.11
          --with-newlib
          --without-headers
          --enable-initfini-array
          --disable-nls
          --disable-shared
          --disable-multilib
          --disable-decimal-float
          --disable-threads
          --disable-libatomic
          --disable-libgomp
          --disable-libquadmath
          --disable-libssp
          --disable-libvtv
          --disable-libstdcxx
          --enable-languages=c
</span>    <span class="hljs-attr">postscript:</span> <span class="hljs-string">|
      cat gcc/limitx.h gcc/glimits.h gcc/limity.h &gt; `dirname $($TARGET-gcc -print-libgcc-file-name)`/install-tools/include/limits.h
</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">api-headers</span>
    <span class="hljs-attr">sources:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.13.4.tar.xz</span>
    <span class="hljs-attr">dir:</span> <span class="hljs-string">linux-5.13.4</span>
    <span class="hljs-attr">plugin:</span> <span class="hljs-string">script</span>
    <span class="hljs-attr">script:</span> <span class="hljs-string">|
      make mrproper
      make headers
      find usr/include -name ".*" -delete
      rm usr/include/Makefile
      cp -rv usr/include ${ROOTS}/usr
</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">glibc</span>
    <span class="hljs-attr">sources:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">https://ftp.gnu.org/gnu/glibc/glibc-2.33.tar.xz</span>
    <span class="hljs-attr">dir:</span> <span class="hljs-string">glibc-2.33</span>
    <span class="hljs-attr">environ:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-string">DESTDIR=${ROOTS}</span>

    <span class="hljs-attr">flags:</span>
      <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">configure</span>
        <span class="hljs-attr">only:</span> <span class="hljs-literal">true</span>
        <span class="hljs-attr">value:</span> <span class="hljs-string">&gt;
          --prefix=/usr
          --host=${TARGET}
          --build=$(../scripts/config.guess)
          --enable-kernel=3.2
          --with-headers=$LFS/usr/include
          libc_cv_slibdir=/usr/lib</span>
</code></pre>
<h2 id="start-build">Start build</h2>
<p>Execute the build process with below command:</p>
<pre><code class="lang-bash">pkgupd install ./toolchain.yml
</code></pre>
]]></content:encoded></item><item><title><![CDATA[01 - Introduction to PKGUPD]]></title><description><![CDATA[PKGUPD is a better package manager and successor of appctl in rlxos, PKGUPD aims to be a modular/extensible package manager whose functionality can be increase using the modules

Working
PKGUPD uses YAML configuration files named recipe file that con...]]></description><link>https://blog.avyos.dev/01-introduction-to-pkgupd</link><guid isPermaLink="true">https://blog.avyos.dev/01-introduction-to-pkgupd</guid><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Tue, 13 Jul 2021 08:16:47 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1626164167694/DO_20S_QA.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>PKGUPD is a better package manager and successor of appctl in rlxos, PKGUPD aims to be a modular/extensible package manager whose functionality can be increase using the modules</p>
</blockquote>
<h2 id="working">Working</h2>
<p>PKGUPD uses YAML configuration files named recipe file that contains a minimal set of information about the specific package or sub-packages. As per the information, PKGUPD performs the tasks and calls the specified modules.</p>
<p>PKGUPD support 2 types of extensions:</p>
<ul>
<li>pack: This plugin provides a method to pack and unpack the binary packages that PKGUPD use to perform installations and package generation.</li>
<li>plugin: (I know bad naming) This provided methods to compile the source codes.</li>
</ul>
<p>PKGUPD currently provided 4 plugins:</p>
<ul>
<li><strong>auto</strong>: Compilation plugin that can detect autogen.sh, configure, Makefile, CMakeLists.txt, meson.build and python setup.py</li>
<li><strong>port</strong>: Another compilation plugin that uses  appctl  port (like PKGBUILD files in arch linux).</li>
<li><strong>rlx</strong>: Packaging plugin that pack the binary packages in rlxos package format</li>
<li><strong>app</strong>: Another packaging plugin for AppImages format.</li>
</ul>
<p><strong> Example Recipe file</strong></p>
<pre><code class="lang-yaml"><span class="hljs-attr">id:</span> <span class="hljs-string">example.package</span>
<span class="hljs-attr">version:</span> <span class="hljs-number">0.1</span><span class="hljs-number">.0</span>
<span class="hljs-attr">about:</span> <span class="hljs-string">|
   Description about the package
</span>
<span class="hljs-attr">pack:</span> <span class="hljs-string">rlx</span>
<span class="hljs-attr">packages:</span>
   <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">subpackage</span>
     <span class="hljs-attr">sources:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-string">https://url.to/source/codes.tar.gz</span>
        <span class="hljs-bullet">-</span> <span class="hljs-string">custom-name.tar.xz::https://url.to/another/package.tar.gz</span>
    <span class="hljs-attr">dir:</span> <span class="hljs-string">code</span>
    <span class="hljs-attr">plugin:</span> <span class="hljs-string">auto</span>
    <span class="hljs-attr">flags:</span>
        <span class="hljs-bullet">-</span> <span class="hljs-attr">id:</span> <span class="hljs-string">configure</span>
           <span class="hljs-attr">value:</span> <span class="hljs-string">&gt;</span>
               <span class="hljs-string">--enable-some-feature</span>
</code></pre>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Node</td><td>About</td></tr>
</thead>
<tbody>
<tr>
<td><strong>id</strong></td><td><em>Name of recipe</em></td></tr>
<tr>
<td><strong>version</strong></td><td><em>Version of recipe</em></td></tr>
<tr>
<td><strong>about</strong></td><td><em>Description about the recipe file</em></td></tr>
<tr>
<td><strong>pack</strong></td><td><em>plugin/module which is going the pack the output binary package</em></td></tr>
<tr>
<td><strong>packages</strong></td><td><em>List of packages the recipe file provides</em></td></tr>
<tr>
<td><strong>sources</strong></td><td><em>List of source files require by all subpackages*</em></td></tr>
<tr>
<td><strong>prescript</strong></td><td><em>Prescript execute during precompilation*</em></td></tr>
<tr>
<td><strong>postscript</strong></td><td><em>Post Script execute during postcompilation*</em></td></tr>
<tr>
<td><strong>preinstall</strong></td><td><em>Script execute during preinstallaton*</em></td></tr>
<tr>
<td><strong>postinstall</strong></td><td><em>Script execute during post installation*</em></td></tr>
<tr>
<td><strong>environ</strong></td><td><em>List of strings to export environment variables*</em></td></tr>
<tr>
<td><strong>users</strong></td><td><em>List of users required by the package*</em></td></tr>
<tr>
<td><strong>groups</strong></td><td><em>List of groups required by the package*</em></td></tr>
</tbody>
</table>
</div><p><strong>Packages</strong></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Node</td><td>About</td></tr>
</thead>
<tbody>
<tr>
<td><strong>id</strong></td><td><em>Name of package</em></td></tr>
<tr>
<td><strong>dir</strong></td><td><em>Directory name of source code</em></td></tr>
<tr>
<td><strong>sources</strong></td><td><em>Source files url</em></td></tr>
<tr>
<td><strong>plugin</strong></td><td><em>plugin that compile the source code into binary package</em></td></tr>
<tr>
<td><strong>flags</strong></td><td><em>flags that plugin intake to customize the compilation</em></td></tr>
</tbody>
</table>
</div><h2 id="installation">Installation</h2>
<pre><code class="lang-bash">sudo appctl sync
sudo appctl install pkgupd
</code></pre>
<h2 id="usage">Usage</h2>
<pre><code class="lang-bash">pkgupd-0.1.0: an extensible package manager <span class="hljs-keyword">for</span> rlxos

Usage: pkgupd [Sub] &lt;pkgid&gt; &lt;Args&gt;

Sub:
  install             install specified package from recipe dir
  depends             Resolve required dependencies
  remove              Remove specified application from system
  info                Print Information about pkgid
  require             Check <span class="hljs-built_in">which</span> package require specified package
  sync                Synchronize <span class="hljs-built_in">local</span> database with repositories

Args:
  --<span class="hljs-built_in">help</span>              
  --debug             
  --compile           force pkgupd to compile package from <span class="hljs-built_in">source</span> code
  --force             force task to <span class="hljs-keyword">do</span>
  --no-depends        skip dependencies resolvement
  --all               Set ALL flag
</code></pre>
<h2 id="file-hierarchy">File Hierarchy</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>DIR/File</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td>/etc/pkgupd.yml</td><td>PKGUPD configuration file</td></tr>
<tr>
<td>/var/cache/pkgupd/recipes</td><td>Default path for recipe files</td></tr>
<tr>
<td>/var/cache/pkgupd/pkgs</td><td>Default path to store cache packages</td></tr>
<tr>
<td>/var/cache/pkgupd/src</td><td>Default path to store source codes</td></tr>
<tr>
<td>/var/lib/pkgupd/data</td><td>Default path to store information of installed packages</td></tr>
<tr>
<td>/usr/lib/pkgupd</td><td>Default path for PKGUPD plugins</td></tr>
</tbody>
</table>
</div>]]></content:encoded></item><item><title><![CDATA[[Post Fixes]: rlxos 2106 Fixes]]></title><description><![CDATA[Here are some fixes that need to be done manually for the smooth working of rlxos 2106.
AppImages Integration
AppImages are not integrating automatically on hot directories.

/Applications
/opt
$HOME/Applications
$HOME/Download

Reason
 The most poss...]]></description><link>https://blog.avyos.dev/post-fixes-rlxos-2106-fixes</link><guid isPermaLink="true">https://blog.avyos.dev/post-fixes-rlxos-2106-fixes</guid><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Tue, 13 Jul 2021 06:58:08 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1626159437719/Fk47dj83p.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here are some fixes that need to be done manually for the smooth working of rlxos 2106.</p>
<h2 id="appimages-integration">AppImages Integration</h2>
<p>AppImages are not integrating automatically on hot directories.</p>
<ul>
<li>/Applications</li>
<li>/opt</li>
<li>$HOME/Applications</li>
<li>$HOME/Download</li>
</ul>
<h3 id="reason">Reason</h3>
<p> The most possible reason for this is that <strong>appimaged</strong> (the daemon that is responsible to integrate AppImages into the system) is <strong>inactive</strong>. To confirm the reason execute the below command.</p>
<pre><code class="lang-bash">systemctl status appimaged --user
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626152114086/Uqr_tGvIW.png" alt="image.png" /></p>
<h3 id="to-fix">To Fix</h3>
<p>If it's showing the <strong>Active</strong> state as <strong>inactive (dead)</strong> then execute the following commands to enable and activate it.</p>
<pre><code class="lang-bash">systemctl <span class="hljs-built_in">enable</span> --now appimaged --user
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626152262691/ZZ5U-ErFz.png" alt="image.png" /></p>
<h2 id="appimages-are-not-working">AppImages are not working</h2>
<p>Some users report that the most common appimages like LibreOffice-fresh are not working out of the box in rlxos.</p>
<h3 id="reason">Reason</h3>
<p>Missing libfuse2.so library</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626152410839/2RVS8484c.png" alt="image.png" /></p>
<h3 id="to-fix">To Fix</h3>
<p>Install fuse2 package which provides libfuse2.so</p>
<pre><code class="lang-bash">sudo appctl sync
sudo appctl install fuse2
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1626152456668/-9oyT9l4d.png" alt="image.png" /></p>
<p>Cover Photo by <a href="https://unsplash.com/@jeshoots?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">JESHOOTS.COM</a> on <a href="https://unsplash.com/s/photos/repair?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a></p>
]]></content:encoded></item><item><title><![CDATA[Installing rlxos from any other already installed Linux distribution]]></title><description><![CDATA[In this tutorial, I will show you how to install rlxos from any other Linux which is already installed into your system.
Prerequisites

PC with Linux installed (no any WSL shit)
Latest rlxos ISO  Here
An Empty Partition of size at least 5GiB

Prepari...]]></description><link>https://blog.avyos.dev/installing-rlxos-from-any-other-already-installed-linux-distribution</link><guid isPermaLink="true">https://blog.avyos.dev/installing-rlxos-from-any-other-already-installed-linux-distribution</guid><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Tue, 29 Jun 2021 14:22:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1624974309592/JdqF17-9K.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this tutorial, I will show you how to install rlxos from any other Linux which is already installed into your system.</p>
<h3 id="prerequisites">Prerequisites</h3>
<ul>
<li>PC with Linux installed (no any WSL shit)</li>
<li>Latest rlxos ISO  <a target="_blank" href="https://rlxos.dev/downloads">Here</a></li>
<li>An Empty Partition of size at least 5GiB</li>
</ul>
<h3 id="preparing-partition">Preparing Partition</h3>
<p>We need to have 2 directories in the empty partition where we paste our root filesystem image and kernel file.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624975084371/7jcXedf2NH.png" alt="Screenshot from 2021-06-29 19-27-36.png" /></p>
<h3 id="steps">Steps</h3>
<ul>
<li><strong>Extract the ISO</strong></li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624974642066/izViRHxAz.png" alt="Screenshot from 2021-06-29 19-20-23.png" /></p>
<p><strong>We only require 3 files from the ISO</strong></p>
<ul>
<li>rootfs.img</li>
<li>boot/vmlinuz</li>
<li><p>boot/initrd</p>
</li>
<li><p>Copy <strong>rootfs.img</strong> into <strong>rlxos/system</strong> and rename it with version mentioned on the ISO.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624975242435/nJfLZwB5H.png" alt="Screenshot from 2021-06-29 19-30-32.png" /></p>
<ul>
<li>Now copy <strong>vmlinuz, initrd</strong> to <strong>boot</strong> (boot directory of our empty partition)</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624975349144/QCwSIznD1.png" alt="Screenshot from 2021-06-29 19-32-09.png" /></p>
<ul>
<li>Installation is completed from the rlxos side, now we need to do some hacks so that os-prober of your installed Linux system will able to detect the rlxos partition.<ul>
<li>Create a directory <strong>lib</strong> in empty partition.</li>
<li>Create a empty file <strong>ld-linux.so</strong> in that directory</li>
</ul>
</li>
</ul>
<p>and your final directory hierarchy should look like this</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624975748625/tJStjnWkB.png" alt="Screenshot from 2021-06-29 19-38-39.png" /></p>
<blockquote>
<p>rlxos will not use this ld-linux library but the one which is present inside the system image, so don't worry.</p>
</blockquote>
<ul>
<li>Now update the grub configurations<pre><code class="lang-bash">sudo update-grub
</code></pre>
</li>
</ul>
<p>and make sure either rlxos or (some unknown Linux distro)  get detected by os-prober</p>
<p>And a last <strong>Complication Step</strong>
<strong>Now one Important thing, you need to add a flag <em>system=</em> (where  is release version of rlxos) inside the menuentry of rlxos in /boot/grub/grub.cfg of your installed system</strong></p>
<p>or
add the flag from the grub menu during the boot, for that follow the below steps</p>
<ul>
<li>Reboot the system and press <strong>E</strong> on rlxos entry.</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624976232129/ILqOKfJUg.png" alt="Screenshot from 2021-06-29 19-43-11.png" /></p>
<ul>
<li>And add the flags to make it look like this.</li>
</ul>
<p>Last Second line, </p>
<pre><code class="lang-bash">linux /boot/vmlinuz root=/dev/sd?? system=2106
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624976260556/L2dmXDIdz.png" alt="Screenshot from 2021-06-29 19-43-26.png" /></p>
<ul>
<li>Press 'ctrl-x' or F10 to start rlxos.</li>
</ul>
<p>Enjoy!</p>
]]></content:encoded></item><item><title><![CDATA[How to get testing build of rlxbot ?]]></title><description><![CDATA[rlxbot (not yet named that's why rlxbot, you can suggest a good name) is a semi artificially intelligent virtual assistant that manage you rlxos system and help you in your tasks, play games with you and automate things
But rlxbot is not yet ready fo...]]></description><link>https://blog.avyos.dev/how-to-get-testing-build-of-rlxbot</link><guid isPermaLink="true">https://blog.avyos.dev/how-to-get-testing-build-of-rlxbot</guid><category><![CDATA[bot]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Sat, 05 Jun 2021 14:05:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622902026543/cO0fkvMiy.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>rlxbot (not yet named that's why rlxbot, you can suggest a good name) is a semi artificially intelligent virtual assistant that manage you rlxos system and help you in your tasks, play games with you and automate things
But rlxbot is not yet ready for these things however you can try the daily testing build of rlxbot, so get started</p>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>Adding rlxbot daily build repository in /etc/appctl.conf</li>
</ul>
<pre><code class="lang-bash">sudo gedit /etc/appctl
</code></pre>
<p>and enter following line below [url.pkg] section</p>
<pre><code class="lang-ini"><span class="hljs-attr">testing</span> = https://rlxos.cloudtb.<span class="hljs-literal">on</span>line/testing
</code></pre>
<p>it will look like something this</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624080962482/Z61pO5rsE.png" alt="rlxbot-testing.png" /></p>
<h3 id="sync-the-repository">Sync the repository</h3>
<pre><code class="lang-bash">sudo appctl sync
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622900906700/BatABZYWSf.png" alt="Screenshot from 2021-06-05 19-18-18.png" /></p>
<h3 id="install-rlxbot">Install rlxbot</h3>
<pre><code class="lang-bash">sudo appctl install bot
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1624082905387/G-IlM1XSB.gif" alt="Peek 2021-06-19 11-37.gif" /></p>
<h3 id="enable-and-start-service">Enable and start service</h3>
<pre><code class="lang-bash">systemctl <span class="hljs-built_in">enable</span> rlxbot --user
systemctl start rlxbot --user
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622901134145/9WAJYnAbI.png" alt="Screenshot from 2021-06-05 19-21-52.png" /></p>
<h3 id="play-with-bot">Play with bot</h3>
<p>start the bot with 'bot' command (of course)</p>
<pre><code class="lang-bash">bot
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622901381213/bViYspLxweL.png" alt="Screenshot from 2021-06-05 19-26-09.png" /></p>
<h3 id="teach-bot">Teach Bot</h3>
<p>Of-course, what's the meaning of AI bot if its not learn new things</p>
<pre><code class="lang-bash">!learn &lt;quest&gt; : &lt;ans&gt;    <span class="hljs-comment"># to teach new things</span>
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622901579732/VAyXq6BcV.png" alt="Screenshot from 2021-06-05 19-29-29.png" /></p>
<p>😅 not much good to reply, but its fun, right ?
More DATA better response</p>
<h3 id="learn-from-data">Learn From data</h3>
<p>you can provide data directly to rlxbot as file, rlxbot select random replies to the most nearest query</p>
<pre><code class="lang-yaml"><span class="hljs-string">how</span> <span class="hljs-string">are</span> <span class="hljs-string">you</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">i</span> <span class="hljs-string">am</span> <span class="hljs-string">fine</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">i</span> <span class="hljs-string">am</span> <span class="hljs-string">ok,</span> <span class="hljs-string">and</span> <span class="hljs-string">you</span> <span class="hljs-string">?</span>
<span class="hljs-string">what</span> <span class="hljs-string">are</span> <span class="hljs-string">you</span> <span class="hljs-string">doing</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">eating</span> <span class="hljs-string">your</span> <span class="hljs-string">ram</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">nothing</span>
<span class="hljs-bullet">-</span> <span class="hljs-string">something</span> <span class="hljs-string">secret</span>
</code></pre>
<pre><code class="lang-bash">!learnfrom &lt;path/to/datafile&gt;
</code></pre>
<h2 id="enjoy">Enjoy</h2>
]]></content:encoded></item><item><title><![CDATA[Installing Steam on rlxos *Linux]]></title><description><![CDATA[Steam is a video game digital distribution service by Valve. It was launched as a standalone software client in September 2003 as a way for Valve to provide automatic updates for their games, and expanded to include games from third-party publishers....]]></description><link>https://blog.avyos.dev/installing-steam-on-rlxos-linux</link><guid isPermaLink="true">https://blog.avyos.dev/installing-steam-on-rlxos-linux</guid><category><![CDATA[Games]]></category><category><![CDATA[Linux]]></category><category><![CDATA[stream]]></category><dc:creator><![CDATA[Manjeet Singh]]></dc:creator><pubDate>Fri, 04 Jun 2021 08:47:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1622795633066/R_XntS9ke.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote>
<p>Steam is a video game digital distribution service by Valve. It was launched as a standalone software client in September 2003 as a way for Valve to provide automatic updates for their games, and expanded to include games from third-party publishers. Wikipedia</p>
</blockquote>
<p>To Install steam on rlxos you need to have flatpak installed into you system, if not please follow the  <a target="_blank" href="https://docs.rlxos.dev/package-management/flatpak">guide</a></p>
<h3 id="installing-steam-via-flatpak">Installing Steam via flatpak</h3>
<pre><code class="lang-bash">sudo flatpak install com.valvesoftware.Steam
</code></pre>
<h3 id="lauch-steam">Lauch Steam</h3>
<p>You can launch steam either by flatpak </p>
<pre><code class="lang-bash">flatpak run com.valvesoftware.Steam
</code></pre>
<p>or from All apps</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622796225167/EMILhWcjK.png" alt="Screenshot from 2021-06-04 14-13-17.png" /></p>
<h3 id="enjoy">Enjoy</h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1622796341706/nSfBOfoOi.png" alt="Screenshot from 2021-06-04 14-14-33.png" /></p>
]]></content:encoded></item></channel></rss>