<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.fyralabs.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Madomado</id>
	<title>Fyra Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.fyralabs.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Madomado"/>
	<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/Special:Contributions/Madomado"/>
	<updated>2026-06-28T11:00:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Terra&amp;diff=183</id>
		<title>Terra</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Terra&amp;diff=183"/>
		<updated>2023-11-29T10:20:09Z</updated>

		<summary type="html">&lt;p&gt;Madomado: /* Installation */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
&#039;&#039;&#039;Terra&#039;&#039;&#039;, originally known as the Andaman Common repositories, is a collection of rolling-release Fedora repositories by [[Fyra Labs]] that includes commonly-used programs not packaged in the main Fedora repositories. Its sources are public in [https://github.com/terrapkg/packages a GitHub repository] and it is powered by [[Andaman]] and [[Subatomic]].&lt;br /&gt;
&lt;br /&gt;
It is hosted on https://repos.fyralabs.com/terra38 and packages are provided for both x86_64 and arm64 architectures.&lt;br /&gt;
&lt;br /&gt;
The development process, guidelines and policies are thoroughly documented in the [https://developer.fyralabs.com/terra/contributing Fyra Labs devdocs].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Use &amp;lt;code&amp;gt;config-manager&amp;lt;/code&amp;gt; from &amp;lt;code&amp;gt;dnf-plugins-core&amp;lt;/code&amp;gt; to add the repository:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
sudo dnf install dnf-plugins-core&lt;br /&gt;
sudo dnf config-manager --add-repo https://terra.fyralabs.com/terra.repo&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that, you might also want to install the &amp;lt;code&amp;gt;terra-release&amp;lt;/code&amp;gt; package, which automatically manages the Terra installation even when there are any changes (like migrations) to the infrastructure.&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
Terra is built on the [[Andaman]] toolchain, which makes it much easier to create, maintain and build packages compared with Koji. When updates are pushed to the main branches, GitHub actions automatically calls anda to build the corresponding package. If the build succeeds, it will then be uploaded to the actual server that hosts all the RPM packages. The process of uploading and processing the RPM package is done by the [[Subatomic]] client and server respectively. Finally, no matter if the build process failed or succeed, the build will be recorded by sending a request to [[Madoguchi]], a server for recording package information.&lt;br /&gt;
&lt;br /&gt;
The above process repeats for each push event happening in the GitHub repository with the following conditions:&lt;br /&gt;
* The push happens in a branch with an open pull request with no merge conflicts; or&lt;br /&gt;
* The push happens in the &amp;lt;code&amp;gt;f*&amp;lt;/code&amp;gt; branch&lt;br /&gt;
&lt;br /&gt;
For those push events, the manifest task is first run which detects the files changed in the push, and a build is issued for each package with changes. Unless otherwise specified in the anda configuration file, each anda project that has changes in its directory will have its own build job for both the x86_64 and the arm64 (aka. aarch64) architectures. The x86_64 build jobs use the workers provided by GitHub, and the aarch64 workers are provided by Fyra Labs.&lt;br /&gt;
&lt;br /&gt;
Manual requests for builds are also supported and it is sometimes used when packages are required to be rebuilt.&lt;br /&gt;
&lt;br /&gt;
=== Updates ===&lt;br /&gt;
Most projects in Terra contains a &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; AndaX script that denotes how the latest version of the package is obtained. Every 30 minutes, &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; is run in GitHub CI. If a version different from the one in the spec file is detected, anda automatically bumps the package, and a new commit will be created for all the package updates and pushed to the main branch (&amp;lt;code&amp;gt;f38&amp;lt;/code&amp;gt;). Additionally, the commit is also cloned to the other branches (such as &amp;lt;code&amp;gt;f37&amp;lt;/code&amp;gt;) and also pushed. If the cloning process fails (usually due to conflicts), the updates will not be done for the other branches.&lt;br /&gt;
&lt;br /&gt;
Nightly packages are excluded from the above process and they have a separate workflow for the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; process which runs daily.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
After [[Andaman]] was created, the [[Ultramarine]] Project has migrated their repositories into GitHub monorepos. However, a setup was preferred where packages can be shared between both Ultramarine Linux and [[TauOS]], and even other Fedora distributions. This led to the creation of the &#039;&#039;&#039;Andaman Common Repositories&#039;&#039;&#039;, also known as the &#039;&#039;&#039;Andaman Subatomic Repositories&#039;&#039;&#039;. The original GitHub organisation name was &#039;&#039;andaman-common-pkgs&#039;&#039;, and the repository for &#039;&#039;Fedora Extras 37&#039;&#039; was located at &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://subatomic.fyralabs.com/fe37&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. It was then renamed to &#039;&#039;Andaman Common Packages 37&#039;&#039; and was moved to &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://subatomic.fyralabs.com/ad37&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. It was later finally renamed to Terra, and now contains many common packages not found in the Fedora repositories.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* Website: https://terra.fyralabs.com&lt;br /&gt;
* Repology: https://repology.org/repository/terra_38&lt;br /&gt;
* Monorepo: https://github.com/terrapkg/packages&lt;br /&gt;
* RPMs: https://repos.fyralabs.com/terra38&lt;br /&gt;
* Devdocs: https://developer.fyralabs.com/terra&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=178</id>
		<title>Andaman</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=178"/>
		<updated>2023-09-17T07:45:05Z</updated>

		<summary type="html">&lt;p&gt;Madomado: /* Installation */ add instructions on how to install anda&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
[[Category:Projects]]&lt;br /&gt;
&#039;&#039;&#039;Andaman&#039;&#039;&#039;, often abbreviated as &#039;&#039;&#039;anda&#039;&#039;&#039;, is a modern package build toolchain designed to&lt;br /&gt;
simplify building different package formats for different projects in the same repository.&lt;br /&gt;
It mainly supports monorepo setups, especially ones with CI support like GitHub. It currently supports building RPMs, OCI images and Flatpak packages.&lt;br /&gt;
It is written by [[Ultramarine Linux]] originally&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The original GitHub repository was located at https://github.com/Ultramarine-Linux/anda, but now it redirects to [https://github.com/FyraLabs/anda the new URL].&amp;lt;/ref&amp;gt; and [[Fyra Labs]] with the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
Anda&#039;s simplicity makes the packaging process seamless and it is most notably used in [[Terra]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
On systems with [[Terra]], you can install it with &amp;lt;code&amp;gt;sudo dnf5 in anda&amp;lt;/code&amp;gt; (or dnf).&lt;br /&gt;
&lt;br /&gt;
On systems with [[w:Rust (Programming langauge)#Cargo|Cargo]], you can install it with &amp;lt;code&amp;gt;cargo install anda&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Alternatively you can also manually download the sources from GitHub:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
git clone https://github.com/FyraLabs/anda&lt;br /&gt;
cd anda&lt;br /&gt;
git checkout 0.1.18&lt;br /&gt;
cargo install --path .&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mechanisms ==&lt;br /&gt;
Currently, Anda is simply a meta-build system that calls upon other build systems to build and distribute packages. It reads the project manifest in &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; and calls the corresponding build system to build the package. Multiple projects can be included in a single repository (known as a &#039;&#039;monorepo&#039;&#039;) recursively in different directories. The root directory contains a main configuration file (also &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;) and the configurations will be inherited. All the other &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; files in its subdirectory can independently represent multiple &#039;&#039;projects&#039;&#039;, and multiple ways to build a package can be specified in each project. Once properly configured, a project can be built by &amp;lt;code&amp;gt;anda build &#039;&#039;subdirectory_path&#039;&#039;/&#039;&#039;project_name&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All configurations should be written in the HashiCorp Configuration Language with the filename &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; and will be parsed in &amp;lt;code&amp;gt;anda-config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Building process ===&lt;br /&gt;
When Anda needs to build RPMs, it first loads all the &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; configuration files, then run all executable &amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt;s. &lt;br /&gt;
Then, Anda will build RPMs, Flatpak, Podman and Docker artifacts, then run the build scripts and finally the &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;s.&lt;br /&gt;
&lt;br /&gt;
All the scripts in Anda can either be a command that can be executed with &amp;lt;code&amp;gt;sh -c&amp;lt;/code&amp;gt;, or a path to an AndaX script with the extension &amp;lt;code&amp;gt;.rhai&amp;lt;/code&amp;gt;.&lt;br /&gt;
Other package types are processed as follows:&lt;br /&gt;
* &#039;&#039;RPM&#039;&#039;: Anda calls either &amp;lt;code&amp;gt;mock&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rpmbuild&amp;lt;/code&amp;gt; depending on the &amp;lt;code&amp;gt;--rpm_builder&amp;lt;/code&amp;gt; option which defaults to &amp;lt;code&amp;gt;mock&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;Flatpak&#039;&#039;: The manifest is read using the &amp;lt;code&amp;gt;flatpak&amp;lt;/code&amp;gt; crate and the application is built using &amp;lt;code&amp;gt;flatpak-builder&amp;lt;/code&amp;gt;. As of 0.1.17, the output is always located at &amp;lt;code&amp;gt;.flatpak-builder/build/&amp;lt;/code&amp;gt;, as opposed to &amp;lt;code&amp;gt;anda-build/&amp;lt;/code&amp;gt; used by other package types.&lt;br /&gt;
* &#039;&#039;Docker&#039;&#039;/&#039;&#039;Podman&#039;&#039;: Anda calls &amp;lt;code&amp;gt;docker build&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;podman build&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AndaX ===&lt;br /&gt;
&#039;&#039;&#039;AndaX&#039;&#039;&#039; is an embedded scripting system powered by [https://rhai.rs Rhai]. It is mainly for supporting automatic updates, but it is also the scripting system used behind&lt;br /&gt;
&amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
AndaX loads all the Rhai module script files from the following paths:&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/lib/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/local/lib/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/lib64/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/local/lib64/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;~/.local/lib/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following static modules (built into AndaX directly) are also available:&lt;br /&gt;
* &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tsunagu&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;kokoro&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tenshi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;anda::rpmbuild&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;anda::cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most if not all of the functions in the above static modules are well-documented in [https://developer.fyralabs.com/terra/autoupdate DevDocs].&lt;br /&gt;
You can pass labels into the AndaX executor during with the &amp;lt;code&amp;gt;--labels&amp;lt;/code&amp;gt; command-line argument. A label is a key-value pair that can be used to tag packages (is it a nightly package?), adding special variables, etc. Different labels should be separated by commas, like so: &amp;lt;code&amp;gt;--labels commit_sha=abc1234,environment=gh_ci,key_value_pair=k=v&amp;lt;/code&amp;gt;, which will be parsed to:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;commit_sha&amp;quot;: &amp;quot;abc1234&amp;quot;,&lt;br /&gt;
  &amp;quot;environment&amp;quot;: &amp;quot;gh_ci&amp;quot;,&lt;br /&gt;
  &amp;quot;key_value_pair&amp;quot;: &amp;quot;k=v&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Updates ===&lt;br /&gt;
: See also: [https://developer.fyralabs.com/terra/autoupdate Fyra Developer: Terra autoupdate] for the supported functions in AndaX&lt;br /&gt;
Anda has refined support over automatically updating packages via the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; command. The command finds all the projects with the file &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; in the same directory or if the configuration file has the &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; property set to a value:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
project project_name {&lt;br /&gt;
  update = &amp;quot;path/to/update_script.rhai&amp;quot;&lt;br /&gt;
  labels {&lt;br /&gt;
    a = &amp;quot;1&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, AndaX executes the scripts in parallel, where each update script gets its own thread. This greatly reduces the time required to fetch package versions. Note that Rhai does not support asynchronous programming. Around 200 update scripts in Terra can be processed under a second.&lt;br /&gt;
&lt;br /&gt;
Projects can also be filtered by adding &amp;lt;code&amp;gt;--filters key=value,key2=value2&amp;lt;/code&amp;gt; to the command. For example, the update script for the above project will be executed for &amp;lt;code&amp;gt;--filters a=1&amp;lt;/code&amp;gt; or even without filters related to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, but it won&#039;t be executed for &amp;lt;code&amp;gt;--filters a=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Andaman uses the HashiCorp Configuration Language (HCL) for its configuration format, known for being used in software by HashiCorp such as Terraform, Consul, Vault and Packer. Its syntax is similar to UCL and NGINX&#039;s configuration format.&lt;br /&gt;
&lt;br /&gt;
Consider the following. for &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;, they represent, respectively, an dictionary (empty by default) with keys and string values, and a string with no default value. Unless otherwise stated, all the attributes are optional.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
config {&lt;br /&gt;
  mock_config = &amp;quot;&amp;quot; // default mock config for `anda build -c custom_mock_config`&lt;br /&gt;
  strip_prefix = &amp;quot;&amp;quot; // strip prefix to form new project alias&lt;br /&gt;
  strip_suffix = &amp;quot;&amp;quot; // strip suffix to form new project alias&lt;br /&gt;
  project_regex = &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
project &amp;quot;project_name&amp;quot; { // the string quote is optional&lt;br /&gt;
  rpm {&lt;br /&gt;
    spec = &amp;quot;path/to/file.spec&amp;quot; // REQUIRED&lt;br /&gt;
    sources = &amp;quot;.&amp;quot;&lt;br /&gt;
    package = &amp;quot;&amp;quot;&lt;br /&gt;
    pre_script = &amp;quot;rpm_pre.rhai&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;rpm_post.rhai&amp;quot;&lt;br /&gt;
    mock_config = &amp;quot;&amp;quot;&lt;br /&gt;
    enable_scm = false&lt;br /&gt;
    scm_opts { }&lt;br /&gt;
    config { }&lt;br /&gt;
    plugin_opts { }&lt;br /&gt;
    macros { }&lt;br /&gt;
    opts { }&lt;br /&gt;
  }&lt;br /&gt;
  podman tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  docker tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  flatpak {&lt;br /&gt;
    manifest = &amp;quot;path/to/manifest.yml&amp;quot; // REQUIRED&lt;br /&gt;
    pre_script = &amp;quot;&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  pre_script = &amp;quot;pre.rhai&amp;quot;&lt;br /&gt;
  post_script = &amp;quot;post.rhai&amp;quot;&lt;br /&gt;
  env { }&lt;br /&gt;
  alias = [] // array of strings&lt;br /&gt;
  scripts = [] // array of paths to AndaX scripts&lt;br /&gt;
  labels { }&lt;br /&gt;
  update = &amp;quot;update.rhai&amp;quot;&lt;br /&gt;
  arches = [&amp;quot;x86_64&amp;quot;, &amp;quot;aarch64&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== umpkg ===&lt;br /&gt;
In the very beginning, the [[Ultramarine]] Project had been using Koji for building RPM packages. Koji is the packaging system used by the [[wikipedia:Fedora Project|Fedora Project]]. However, Koji&#039;s sophistication makes it difficult to create and maintain RPM packages — it was said that the only person in the Ultramarine team who actually knew how to use Koji was the lead developer, [[Cappy Ishihara]]. Cappy was annoyed by the sheer complexity of building and uploading packages to Koji and made [[umpkg]], a packaging toolchain that runs on Mock and Koji. The creation of umpkg made it easier to create and maintain packages. However, umpkg still tightly integrates with Koji and uses the Koji API to trigger builds. Thus, an entirely new CI server was proposed.&lt;br /&gt;
&lt;br /&gt;
=== RPM Frontend ===&lt;br /&gt;
The Ultramarine Project started work on Andaman on 9 Jun, 2022.&lt;br /&gt;
The name Andaman refers to the [[wikipedia:Andaman Sea|Andaman Sea]] next to Thailand, and follows the naming patterns for other projects related to Ultramarine.&lt;br /&gt;
Initially, Anda was written as a custom RPM frontend as an alternative to DNF that is similar to that of an AUR helper. However, there were issues with rust and RPM support.&lt;br /&gt;
&lt;br /&gt;
=== CI Server ===&lt;br /&gt;
Anda was then rewritten as a CI Server that handles builds via BuildKit, stores artifacts and build infos, and later included a frontend to the server.&lt;br /&gt;
However, it slowly turned into a massive feature creep of projects.&lt;br /&gt;
&lt;br /&gt;
=== Final rewrite ===&lt;br /&gt;
Thus, Anda was rewritten again and it finally became a build system for various package formats.&lt;br /&gt;
&lt;br /&gt;
=== Terra ===&lt;br /&gt;
: Main Article: [[Terra]]&lt;br /&gt;
After the creation of Anda, the Ultramarine Project has migrated their repositories into [https://github.com/Ultramarine-Linux/ultramarine-pkgs GitHub monorepos]. However, a repository containing packages for not only Ultramarine Linux, but also all other Fedora distributions was wanted so that packages can be shared between both Ultramarine Linux and [[TauOS]], which led to the creation of the &#039;&#039;&#039;Andaman Common Repositories&#039;&#039;&#039;, also known as the &#039;&#039;&#039;Andaman Subatomic Repositories&#039;&#039;&#039;.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The original GitHub organisation was called &amp;quot;andaman-common-pkgs&amp;quot;, and the original repository url was &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;https://subatomic.fyralabs.com/ad37/&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; It was later renamed to &#039;&#039;&#039;[[Terra]]&#039;&#039;&#039;, and now contains many common packages not found in the Fedora repositories.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Terra]]&lt;br /&gt;
* [[Subatomic]]&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Madomado&amp;diff=177</id>
		<title>Madomado</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Madomado&amp;diff=177"/>
		<updated>2023-07-08T16:48:10Z</updated>

		<summary type="html">&lt;p&gt;Madomado: Madomado modifies manually Madonuko, Madoguchi.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Copy edit|for=grammar|date=June 2023}}&lt;br /&gt;
&#039;&#039;&#039;Madomado&#039;&#039;&#039;, also known as &#039;&#039;&#039;Mado&#039;&#039;&#039;, is not a &#039;&#039;mado&#039;&#039; (&amp;lt;ruby&amp;gt;窓&amp;lt;rt&amp;gt;まど&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;, Japanese for &amp;quot;window&amp;quot;), and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Mado is responsible for partially the development of [[Ultramarine Linux]].&lt;br /&gt;
Consequently, after the acquisition, Mado is a DevOps Engineer in [[Fyra Labs]] and is responsible for numerous projects,&lt;br /&gt;
most notably [[Terra]], [[Andaman]], and [[Madoguchi]].&lt;br /&gt;
== Madonuko ==&lt;br /&gt;
&#039;&#039;&#039;Madonuko&#039;&#039;&#039;, Madomado&#039;s original character, is not a &#039;&#039;mado&#039;&#039;, and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Instead, Madonuko is a &#039;&#039;nuko&#039;&#039; (ぬこ, Japanese slang for &amp;quot;cat&amp;quot;).&lt;br /&gt;
Madomado is not Madonuko, because if Madomado is Madonuko, mado is nuko, and thus&lt;br /&gt;
&#039;&#039;mado&#039;&#039; is &#039;&#039;nuko&#039;&#039; (a window is a cat). But, &#039;&#039;mado&#039;&#039; is not &#039;&#039;nuko&#039;&#039; (a window is not a cat), so Mado&#039;s assumption is false. (Proof by contradiction)&lt;br /&gt;
However, Mado is an element of the set &#039;&#039;nuko&#039;&#039;. In other words, Mado is a &#039;&#039;nuko&#039;&#039;.&lt;br /&gt;
Despite that, it is still ok to use the name Madonuko to refer to Madomado.&lt;br /&gt;
== Madoguchi ==&lt;br /&gt;
: Main article: [[Madoguchi]]&lt;br /&gt;
&#039;&#039;&#039;Madoguchi&#039;&#039;&#039;, a creation by Madomado, is not a &#039;&#039;mado&#039;&#039;, and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Instead, Madoguchi is a &#039;&#039;guchi&#039;&#039; (愚痴, Japanese for &amp;quot;complaint&amp;quot;? &amp;lt;del&amp;gt;Or maybe Gu*** handbags?&amp;lt;/del&amp;gt;). Except, Madoguchi, also known as &#039;&#039;&#039;Mg&#039;&#039;&#039; (which, contrary to popular opinions, is not made out of magnesium, and has nothing to do with magnesium), is not a &#039;&#039;guchi&#039;&#039;, and has nothing to do with &#039;&#039;guchi&#039;&#039;s. Instead, Madoguchi (&amp;lt;ruby&amp;gt;窓口&amp;lt;rt&amp;gt;まどぐち&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;, Japanese for &amp;quot;ticket window&amp;quot;, literal meaning &amp;quot;window mouth&amp;quot;) is an API server for &amp;lt;del&amp;gt;Mado&amp;lt;/del&amp;gt; things related to [[Terra]]. Mado made it so that Repology can redirect dumb entities like Mado to the corresponding package sources hosted on GitHub. The name Madoguchi refers to the [[wikipedia:MARS (ticket reservation system)#Outline|JR green ticket windows]] (&#039;&#039;Midori no Madoguchi&#039;&#039;, みどりの&amp;lt;ruby&amp;gt;窓口&amp;lt;rt&amp;gt;まどぐち&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;) in Japan serving people with all sorts of tickets.&lt;br /&gt;
Please note that Madoguchi does not sell tickets for &#039;&#039;mado&#039;&#039;s, &#039;&#039;guchi&#039;&#039;s (whether the handbags or the complaints), or food (because Mado ate all of them).&lt;br /&gt;
Madoguchi is created and maintained by mostly Madomado. Madomado uses special ingredients to make Madoguchi, including oxygen and [[wikipedia:Dihydrogen monoxide parody|dihydrogen monoxide]], illustrated by the following chemical reaction:&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &#039;Times New Roman&#039;;&amp;quot;&amp;gt;4Fe + 3O₂ + 2&#039;&#039;n&#039;&#039;H₂O&amp;lt;/span&amp;gt; → &amp;lt;span style=&amp;quot;font-family: &#039;Times New Roman&#039;;&amp;quot;&amp;gt;2Fe₂O₃·&#039;&#039;n&#039;&#039;H₂O&amp;lt;/span&amp;gt;&lt;br /&gt;
which results in the product &#039;&#039;hydrated iron(III) oxide&#039;&#039;, commonly known as [[wikipedia:Rust (programming language)|rust]].&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=176</id>
		<title>Andaman</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=176"/>
		<updated>2023-06-26T11:43:20Z</updated>

		<summary type="html">&lt;p&gt;Madomado: /* Mechanisms */ Document more technical details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
[[Category:Projects]]&lt;br /&gt;
&#039;&#039;&#039;Andaman&#039;&#039;&#039;, often abbreviated as &#039;&#039;&#039;anda&#039;&#039;&#039;, is a modern package build toolchain designed to&lt;br /&gt;
simplify building different package formats for different projects in the same repository.&lt;br /&gt;
It mainly supports monorepo setups, especially ones with CI support like GitHub. It currently supports building RPMs, OCI images and Flatpak packages.&lt;br /&gt;
It is written by [[Ultramarine Linux]] originally&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The original GitHub repository was located at https://github.com/Ultramarine-Linux/anda, but now it redirects to [https://github.com/FyraLabs/anda the new URL].&amp;lt;/ref&amp;gt; and [[Fyra Labs]] with the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
Anda&#039;s simplicity makes the packaging process seamless and it is most notably used in [[Terra]].&lt;br /&gt;
&lt;br /&gt;
== Mechanisms ==&lt;br /&gt;
Currently, Anda is simply a meta-build system that calls upon other build systems to build and distribute packages. It reads the project manifest in &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; and calls the corresponding build system to build the package. Multiple projects can be included in a single repository (known as a &#039;&#039;monorepo&#039;&#039;) recursively in different directories. The root directory contains a main configuration file (also &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;) and the configurations will be inherited. All the other &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; files in its subdirectory can independently represent multiple &#039;&#039;projects&#039;&#039;, and multiple ways to build a package can be specified in each project. Once properly configured, a project can be built by &amp;lt;code&amp;gt;anda build &#039;&#039;subdirectory_path&#039;&#039;/&#039;&#039;project_name&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
All configurations should be written in the HashiCorp Configuration Language with the filename &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; and will be parsed in &amp;lt;code&amp;gt;anda-config&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Building process ===&lt;br /&gt;
When Anda needs to build RPMs, it first loads all the &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; configuration files, then run all executable &amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt;s. &lt;br /&gt;
Then, Anda will build RPMs, Flatpak, Podman and Docker artifacts, then run the build scripts and finally the &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;s.&lt;br /&gt;
&lt;br /&gt;
All the scripts in Anda can either be a command that can be executed with &amp;lt;code&amp;gt;sh -c&amp;lt;/code&amp;gt;, or a path to an AndaX script with the extension &amp;lt;code&amp;gt;.rhai&amp;lt;/code&amp;gt;.&lt;br /&gt;
Other package types are processed as follows:&lt;br /&gt;
* &#039;&#039;RPM&#039;&#039;: Anda calls either &amp;lt;code&amp;gt;mock&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;rpmbuild&amp;lt;/code&amp;gt; depending on the &amp;lt;code&amp;gt;--rpm_builder&amp;lt;/code&amp;gt; option which defaults to &amp;lt;code&amp;gt;mock&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;Flatpak&#039;&#039;: The manifest is read using the &amp;lt;code&amp;gt;flatpak&amp;lt;/code&amp;gt; crate and the application is built using &amp;lt;code&amp;gt;flatpak-builder&amp;lt;/code&amp;gt;. As of 0.1.17, the output is always located at &amp;lt;code&amp;gt;.flatpak-builder/build/&amp;lt;/code&amp;gt;, as opposed to &amp;lt;code&amp;gt;anda-build/&amp;lt;/code&amp;gt; used by other package types.&lt;br /&gt;
* &#039;&#039;Docker&#039;&#039;/&#039;&#039;Podman&#039;&#039;: Anda calls &amp;lt;code&amp;gt;docker build&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;podman build&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AndaX ===&lt;br /&gt;
&#039;&#039;&#039;AndaX&#039;&#039;&#039; is an embedded scripting system powered by [https://rhai.rs Rhai]. It is mainly for supporting automatic updates, but it is also the scripting system used behind&lt;br /&gt;
&amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
AndaX loads all the Rhai module script files from the following paths:&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/lib/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/local/lib/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/lib64/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;/usr/local/lib64/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;~/.local/lib/anda/&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following static modules (built into AndaX directly) are also available:&lt;br /&gt;
* &amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tsunagu&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;kokoro&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;tenshi&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;anda::rpmbuild&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;anda::cfg&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Most if not all of the functions in the above static modules are well-documented in [https://developer.fyralabs.com/terra/autoupdate DevDocs].&lt;br /&gt;
You can pass labels into the AndaX executor during with the &amp;lt;code&amp;gt;--labels&amp;lt;/code&amp;gt; command-line argument. A label is a key-value pair that can be used to tag packages (is it a nightly package?), adding special variables, etc. Different labels should be separated by commas, like so: &amp;lt;code&amp;gt;--labels commit_sha=abc1234,environment=gh_ci,key_value_pair=k=v&amp;lt;/code&amp;gt;, which will be parsed to:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot;&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;commit_sha&amp;quot;: &amp;quot;abc1234&amp;quot;,&lt;br /&gt;
  &amp;quot;environment&amp;quot;: &amp;quot;gh_ci&amp;quot;,&lt;br /&gt;
  &amp;quot;key_value_pair&amp;quot;: &amp;quot;k=v&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automatic Updates ===&lt;br /&gt;
: See also: [https://developer.fyralabs.com/terra/autoupdate Fyra Developer: Terra autoupdate] for the supported functions in AndaX&lt;br /&gt;
Anda has refined support over automatically updating packages via the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; command. The command finds all the projects with the file &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; in the same directory or if the configuration file has the &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; property set to a value:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
project project_name {&lt;br /&gt;
  update = &amp;quot;path/to/update_script.rhai&amp;quot;&lt;br /&gt;
  labels {&lt;br /&gt;
    a = &amp;quot;1&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, AndaX executes the scripts in parallel, where each update script gets its own thread. This greatly reduces the time required to fetch package versions. Note that Rhai does not support asynchronous programming. Around 200 update scripts in Terra can be processed under a second.&lt;br /&gt;
&lt;br /&gt;
Projects can also be filtered by adding &amp;lt;code&amp;gt;--filters key=value,key2=value2&amp;lt;/code&amp;gt; to the command. For example, the update script for the above project will be executed for &amp;lt;code&amp;gt;--filters a=1&amp;lt;/code&amp;gt; or even without filters related to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, but it won&#039;t be executed for &amp;lt;code&amp;gt;--filters a=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Andaman uses the HashiCorp Configuration Language (HCL) for its configuration format, known for being used in software by HashiCorp such as Terraform, Consul, Vault and Packer. Its syntax is similar to UCL and NGINX&#039;s configuration format.&lt;br /&gt;
&lt;br /&gt;
Consider the following. for &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;, they represent, respectively, an dictionary (empty by default) with keys and string values, and a string with no default value. Unless otherwise stated, all the attributes are optional.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
config {&lt;br /&gt;
  mock_config = &amp;quot;&amp;quot; // default mock config for `anda build -c custom_mock_config`&lt;br /&gt;
  strip_prefix = &amp;quot;&amp;quot; // strip prefix to form new project alias&lt;br /&gt;
  strip_suffix = &amp;quot;&amp;quot; // strip suffix to form new project alias&lt;br /&gt;
  project_regex = &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
project &amp;quot;project_name&amp;quot; { // the string quote is optional&lt;br /&gt;
  rpm {&lt;br /&gt;
    spec = &amp;quot;path/to/file.spec&amp;quot; // REQUIRED&lt;br /&gt;
    sources = &amp;quot;.&amp;quot;&lt;br /&gt;
    package = &amp;quot;&amp;quot;&lt;br /&gt;
    pre_script = &amp;quot;rpm_pre.rhai&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;rpm_post.rhai&amp;quot;&lt;br /&gt;
    mock_config = &amp;quot;&amp;quot;&lt;br /&gt;
    enable_scm = false&lt;br /&gt;
    scm_opts { }&lt;br /&gt;
    config { }&lt;br /&gt;
    plugin_opts { }&lt;br /&gt;
    macros { }&lt;br /&gt;
    opts { }&lt;br /&gt;
  }&lt;br /&gt;
  podman tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  docker tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  flatpak {&lt;br /&gt;
    manifest = &amp;quot;path/to/manifest.yml&amp;quot; // REQUIRED&lt;br /&gt;
    pre_script = &amp;quot;&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  pre_script = &amp;quot;pre.rhai&amp;quot;&lt;br /&gt;
  post_script = &amp;quot;post.rhai&amp;quot;&lt;br /&gt;
  env { }&lt;br /&gt;
  alias = [] // array of strings&lt;br /&gt;
  scripts = [] // array of paths to AndaX scripts&lt;br /&gt;
  labels { }&lt;br /&gt;
  update = &amp;quot;update.rhai&amp;quot;&lt;br /&gt;
  arches = [&amp;quot;x86_64&amp;quot;, &amp;quot;aarch64&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== umpkg ===&lt;br /&gt;
In the very beginning, the [[Ultramarine]] Project had been using Koji for building RPM packages. Koji is the packaging system used by the [[wikipedia:Fedora Project|Fedora Project]]. However, Koji&#039;s sophistication makes it difficult to create and maintain RPM packages — it was said that the only person in the Ultramarine team who actually knew how to use Koji was the lead developer, [[Cappy Ishihara]]. Cappy was annoyed by the sheer complexity of building and uploading packages to Koji and made [[umpkg]], a packaging toolchain that runs on Mock and Koji. The creation of umpkg made it easier to create and maintain packages. However, umpkg still tightly integrates with Koji and uses the Koji API to trigger builds. Thus, an entirely new CI server was proposed.&lt;br /&gt;
&lt;br /&gt;
=== RPM Frontend ===&lt;br /&gt;
The Ultramarine Project started work on Andaman on 9 Jun, 2022.&lt;br /&gt;
The name Andaman refers to the [[wikipedia:Andaman Sea|Andaman Sea]] next to Thailand, and follows the naming patterns for other projects related to Ultramarine.&lt;br /&gt;
Initially, Anda was written as a custom RPM frontend as an alternative to DNF that is similar to that of an AUR helper. However, there were issues with rust and RPM support.&lt;br /&gt;
&lt;br /&gt;
=== CI Server ===&lt;br /&gt;
Anda was then rewritten as a CI Server that handles builds via BuildKit, stores artifacts and build infos, and later included a frontend to the server.&lt;br /&gt;
However, it slowly turned into a massive feature creep of projects.&lt;br /&gt;
&lt;br /&gt;
=== Final rewrite ===&lt;br /&gt;
Thus, Anda was rewritten again and it finally became a build system for various package formats.&lt;br /&gt;
&lt;br /&gt;
=== Terra ===&lt;br /&gt;
: Main Article: [[Terra]]&lt;br /&gt;
After the creation of Anda, the Ultramarine Project has migrated their repositories into [https://github.com/Ultramarine-Linux/ultramarine-pkgs GitHub monorepos]. However, a repository containing packages for not only Ultramarine Linux, but also all other Fedora distributions was wanted so that packages can be shared between both Ultramarine Linux and [[TauOS]], which led to the creation of the &#039;&#039;&#039;Andaman Common Repositories&#039;&#039;&#039;, also known as the &#039;&#039;&#039;Andaman Subatomic Repositories&#039;&#039;&#039;.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The original GitHub organisation was called &amp;quot;andaman-common-pkgs&amp;quot;, and the original repository url was &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;https://subatomic.fyralabs.com/ad37/&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; It was later renamed to &#039;&#039;&#039;[[Terra]]&#039;&#039;&#039;, and now contains many common packages not found in the Fedora repositories.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Terra]]&lt;br /&gt;
* [[Subatomic]]&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=174</id>
		<title>Andaman</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=174"/>
		<updated>2023-06-12T10:41:17Z</updated>

		<summary type="html">&lt;p&gt;Madomado: note original creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
[[Category:Projects]]&lt;br /&gt;
&#039;&#039;&#039;Andaman&#039;&#039;&#039;, often abbreviated as &#039;&#039;&#039;anda&#039;&#039;&#039;, is a modern package build toolchain designed to&lt;br /&gt;
simplify building different package formats for different projects in the same repository.&lt;br /&gt;
It mainly supports monorepo setups, especially ones with CI support like GitHub. It currently supports building RPMs, OCI images and Flatpak packages.&lt;br /&gt;
It is written by [[Ultramarine Linux]] originally&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The original GitHub repository was located at https://github.com/Ultramarine-Linux/anda, but now it redirects to [https://github.com/FyraLabs/anda the new URL].&amp;lt;/ref&amp;gt; and [[Fyra Labs]] with the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
Anda&#039;s simplicity makes the packaging process seamless and it is most notably used in [[Terra]].&lt;br /&gt;
&lt;br /&gt;
== Mechanisms ==&lt;br /&gt;
Currently, Anda is simply a meta-build system that calls upon other build systems to build and distribute packages. It reads the project manifest in &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;&lt;br /&gt;
and calls the corresponding build system to build the package. Multiple projects can be included in a single repository (known as a &#039;&#039;monorepo&#039;&#039;) recursively in different directories. The root directory contains a main configuration file (also &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;) and the configurations will be inherited. All the other &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; files in its subdirectory can independently represent multiple &#039;&#039;projects&#039;&#039;, and multiple ways to build a package can be specified in each project. Once properly configured, a project can be built by &amp;lt;code&amp;gt;anda build &#039;&#039;subdirectory_path&#039;&#039;/&#039;&#039;project_name&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AndaX ===&lt;br /&gt;
&#039;&#039;&#039;AndaX&#039;&#039;&#039; is an embedded scripting system powered by [https://rhai.rs Rhai]. It is mainly for supporting automatic updates, but it is also the scripting system used behind&lt;br /&gt;
&amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Updates ===&lt;br /&gt;
: See also: [https://developer.fyralabs.com/terra/autoupdate Fyra Developer: Terra autoupdate] for the supported functions in AndaX&lt;br /&gt;
Anda has refined support over automatically updating packages via the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; command. The command finds all the projects with the file &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; in the same directory or if the configuration file has the &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; property set to a value:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
project project_name {&lt;br /&gt;
  update = &amp;quot;path/to/update_script.rhai&amp;quot;&lt;br /&gt;
  labels {&lt;br /&gt;
    a = &amp;quot;1&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, AndaX executes the script. Projects can also be filtered by adding &amp;lt;code&amp;gt;--filters key=value,key2=value2&amp;lt;/code&amp;gt; to the command.&lt;br /&gt;
For example, the update script for the above project will be executed for &amp;lt;code&amp;gt;--filters a=1&amp;lt;/code&amp;gt; or even without filters related to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, but&lt;br /&gt;
it won&#039;t be executed for &amp;lt;code&amp;gt;--filters a=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Andaman uses the HashiCorp Configuration Language (HCL) for its configuration format, known for being used in software by HashiCorp such as Terraform, Consul, Vault and Packer. Its syntax is similar to UCL and NGINX&#039;s configuration format.&lt;br /&gt;
&lt;br /&gt;
Consider the following. for &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;, they represent, respectively, an dictionary (empty by default) with keys and string values, and a string with no default value. Unless otherwise stated, all the attributes are optional.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
config {&lt;br /&gt;
  mock_config = &amp;quot;&amp;quot; // default mock config for `anda build -c custom_mock_config`&lt;br /&gt;
  strip_prefix = &amp;quot;&amp;quot; // strip prefix to form new project alias&lt;br /&gt;
  strip_suffix = &amp;quot;&amp;quot; // strip suffix to form new project alias&lt;br /&gt;
  project_regex = &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
project &amp;quot;project_name&amp;quot; { // the string quote is optional&lt;br /&gt;
  rpm {&lt;br /&gt;
    spec = &amp;quot;path/to/file.spec&amp;quot; // REQUIRED&lt;br /&gt;
    sources = &amp;quot;.&amp;quot;&lt;br /&gt;
    package = &amp;quot;&amp;quot;&lt;br /&gt;
    pre_script = &amp;quot;rpm_pre.rhai&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;rpm_post.rhai&amp;quot;&lt;br /&gt;
    mock_config = &amp;quot;&amp;quot;&lt;br /&gt;
    enable_scm = false&lt;br /&gt;
    scm_opts { }&lt;br /&gt;
    config { }&lt;br /&gt;
    plugin_opts { }&lt;br /&gt;
    macros { }&lt;br /&gt;
    opts { }&lt;br /&gt;
  }&lt;br /&gt;
  podman tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  docker tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  flatpak {&lt;br /&gt;
    manifest = &amp;quot;path/to/manifest.yml&amp;quot; // REQUIRED&lt;br /&gt;
    pre_script = &amp;quot;&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  pre_script = &amp;quot;pre.rhai&amp;quot;&lt;br /&gt;
  post_script = &amp;quot;post.rhai&amp;quot;&lt;br /&gt;
  env { }&lt;br /&gt;
  alias = [] // array of strings&lt;br /&gt;
  scripts = [] // array of paths to AndaX scripts&lt;br /&gt;
  labels { }&lt;br /&gt;
  update = &amp;quot;update.rhai&amp;quot;&lt;br /&gt;
  arches = [&amp;quot;x86_64&amp;quot;, &amp;quot;aarch64&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== umpkg ===&lt;br /&gt;
In the very beginning, the [[Ultramarine]] Project had been using Koji for building RPM packages. Koji is the packaging system used by the [[wikipedia:Fedora Project|Fedora Project]]. However, Koji&#039;s sophistication makes it difficult to create and maintain RPM packages — it was said that the only person in the Ultramarine team who actually knew how to use Koji was the lead developer, [[Cappy Ishihara]]. Cappy was annoyed by the sheer complexity of building and uploading packages to Koji and made [[umpkg]], a packaging toolchain that runs on Mock and Koji. The creation of umpkg made it easier to create and maintain packages. However, umpkg still tightly integrates with Koji and uses the Koji API to trigger builds. Thus, an entirely new CI server was proposed.&lt;br /&gt;
&lt;br /&gt;
=== RPM Frontend ===&lt;br /&gt;
The Ultramarine Project started work on Andaman on 9 Jun, 2022.&lt;br /&gt;
The name Andaman refers to the [[wikipedia:Andaman Sea|Andaman Sea]] next to Thailand, and follows the naming patterns for other projects related to Ultramarine.&lt;br /&gt;
Initially, Anda was written as a custom RPM frontend as an alternative to DNF that is similar to that of an AUR helper. However, there were issues with rust and RPM support.&lt;br /&gt;
&lt;br /&gt;
=== CI Server ===&lt;br /&gt;
Anda was then rewritten as a CI Server that handles builds via BuildKit, stores artifacts and build infos, and later included a frontend to the server.&lt;br /&gt;
However, it slowly turned into a massive feature creep of projects.&lt;br /&gt;
&lt;br /&gt;
=== Final rewrite ===&lt;br /&gt;
Thus, Anda was rewritten again and it finally became a build system for various package formats.&lt;br /&gt;
&lt;br /&gt;
=== Terra ===&lt;br /&gt;
: Main Article: [[Terra]]&lt;br /&gt;
After the creation of Anda, the Ultramarine Project has migrated their repositories into [https://github.com/Ultramarine-Linux/ultramarine-pkgs GitHub monorepos]. However, a repository containing packages for not only Ultramarine Linux, but also all other Fedora distributions was wanted so that packages can be shared between both Ultramarine Linux and [[TauOS]], which led to the creation of the &#039;&#039;&#039;Andaman Common Repositories&#039;&#039;&#039;, also known as the &#039;&#039;&#039;Andaman Subatomic Repositories&#039;&#039;&#039;.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The original GitHub organisation was called &amp;quot;andaman-common-pkgs&amp;quot;, and the original repository url was &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;https://subatomic.fyralabs.com/ad37/&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; It was later renamed to &#039;&#039;&#039;[[Terra]]&#039;&#039;&#039;, and now contains many common packages not found in the Fedora repositories.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Terra]]&lt;br /&gt;
* [[Subatomic]]&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=173</id>
		<title>Andaman</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=173"/>
		<updated>2023-06-12T10:37:19Z</updated>

		<summary type="html">&lt;p&gt;Madomado: /* Terra */ fix wrong repo url in note&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
[[Category:Projects]]&lt;br /&gt;
&#039;&#039;&#039;Andaman&#039;&#039;&#039;, often abbreviated as &#039;&#039;&#039;anda&#039;&#039;&#039;, is a modern package build toolchain designed to&lt;br /&gt;
simplify building different package formats for different projects in the same repository.&lt;br /&gt;
It mainly supports monorepo setups, especially ones with CI support like GitHub. It currently supports building RPMs, OCI images and Flatpak packages.&lt;br /&gt;
It is written by [[Fyra Labs]] with the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
Anda&#039;s simplicity makes the packaging process seamless and it is most notably used in [[Terra]].&lt;br /&gt;
&lt;br /&gt;
== Mechanisms ==&lt;br /&gt;
Currently, Anda is simply a meta-build system that calls upon other build systems to build and distribute packages. It reads the project manifest in &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;&lt;br /&gt;
and calls the corresponding build system to build the package. Multiple projects can be included in a single repository (known as a &#039;&#039;monorepo&#039;&#039;) recursively in different directories. The root directory contains a main configuration file (also &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;) and the configurations will be inherited. All the other &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; files in its subdirectory can independently represent multiple &#039;&#039;projects&#039;&#039;, and multiple ways to build a package can be specified in each project. Once properly configured, a project can be built by &amp;lt;code&amp;gt;anda build &#039;&#039;subdirectory_path&#039;&#039;/&#039;&#039;project_name&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AndaX ===&lt;br /&gt;
&#039;&#039;&#039;AndaX&#039;&#039;&#039; is an embedded scripting system powered by [https://rhai.rs Rhai]. It is mainly for supporting automatic updates, but it is also the scripting system used behind&lt;br /&gt;
&amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Updates ===&lt;br /&gt;
: See also: [https://developer.fyralabs.com/terra/autoupdate Fyra Developer: Terra autoupdate] for the supported functions in AndaX&lt;br /&gt;
Anda has refined support over automatically updating packages via the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; command. The command finds all the projects with the file &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; in the same directory or if the configuration file has the &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; property set to a value:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
project project_name {&lt;br /&gt;
  update = &amp;quot;path/to/update_script.rhai&amp;quot;&lt;br /&gt;
  labels {&lt;br /&gt;
    a = &amp;quot;1&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, AndaX executes the script. Projects can also be filtered by adding &amp;lt;code&amp;gt;--filters key=value,key2=value2&amp;lt;/code&amp;gt; to the command.&lt;br /&gt;
For example, the update script for the above project will be executed for &amp;lt;code&amp;gt;--filters a=1&amp;lt;/code&amp;gt; or even without filters related to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, but&lt;br /&gt;
it won&#039;t be executed for &amp;lt;code&amp;gt;--filters a=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Andaman uses the HashiCorp Configuration Language (HCL) for its configuration format, known for being used in software by HashiCorp such as Terraform, Consul, Vault and Packer. Its syntax is similar to UCL and NGINX&#039;s configuration format.&lt;br /&gt;
&lt;br /&gt;
Consider the following. for &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;, they represent, respectively, an dictionary (empty by default) with keys and string values, and a string with no default value. Unless otherwise stated, all the attributes are optional.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
config {&lt;br /&gt;
  mock_config = &amp;quot;&amp;quot; // default mock config for `anda build -c custom_mock_config`&lt;br /&gt;
  strip_prefix = &amp;quot;&amp;quot; // strip prefix to form new project alias&lt;br /&gt;
  strip_suffix = &amp;quot;&amp;quot; // strip suffix to form new project alias&lt;br /&gt;
  project_regex = &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
project &amp;quot;project_name&amp;quot; { // the string quote is optional&lt;br /&gt;
  rpm {&lt;br /&gt;
    spec = &amp;quot;path/to/file.spec&amp;quot; // REQUIRED&lt;br /&gt;
    sources = &amp;quot;.&amp;quot;&lt;br /&gt;
    package = &amp;quot;&amp;quot;&lt;br /&gt;
    pre_script = &amp;quot;rpm_pre.rhai&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;rpm_post.rhai&amp;quot;&lt;br /&gt;
    mock_config = &amp;quot;&amp;quot;&lt;br /&gt;
    enable_scm = false&lt;br /&gt;
    scm_opts { }&lt;br /&gt;
    config { }&lt;br /&gt;
    plugin_opts { }&lt;br /&gt;
    macros { }&lt;br /&gt;
    opts { }&lt;br /&gt;
  }&lt;br /&gt;
  podman tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  docker tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  flatpak {&lt;br /&gt;
    manifest = &amp;quot;path/to/manifest.yml&amp;quot; // REQUIRED&lt;br /&gt;
    pre_script = &amp;quot;&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  pre_script = &amp;quot;pre.rhai&amp;quot;&lt;br /&gt;
  post_script = &amp;quot;post.rhai&amp;quot;&lt;br /&gt;
  env { }&lt;br /&gt;
  alias = [] // array of strings&lt;br /&gt;
  scripts = [] // array of paths to AndaX scripts&lt;br /&gt;
  labels { }&lt;br /&gt;
  update = &amp;quot;update.rhai&amp;quot;&lt;br /&gt;
  arches = [&amp;quot;x86_64&amp;quot;, &amp;quot;aarch64&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== umpkg ===&lt;br /&gt;
In the very beginning, the [[Ultramarine]] Project had been using Koji for building RPM packages. Koji is the packaging system used by the [[wikipedia:Fedora Project|Fedora Project]]. However, Koji&#039;s sophistication makes it difficult to create and maintain RPM packages — it was said that the only person in the Ultramarine team who actually knew how to use Koji was the lead developer, [[Cappy Ishihara]]. Cappy was annoyed by the sheer complexity of building and uploading packages to Koji and made [[umpkg]], a packaging toolchain that runs on Mock and Koji. The creation of umpkg made it easier to create and maintain packages. However, umpkg still tightly integrates with Koji and uses the Koji API to trigger builds. Thus, an entirely new CI server was proposed.&lt;br /&gt;
&lt;br /&gt;
=== RPM Frontend ===&lt;br /&gt;
The Ultramarine Project started work on Andaman on 9 Jun, 2022.&lt;br /&gt;
The name Andaman refers to the [[wikipedia:Andaman Sea|Andaman Sea]] next to Thailand, and follows the naming patterns for other projects related to Ultramarine.&lt;br /&gt;
Initially, Anda was written as a custom RPM frontend as an alternative to DNF that is similar to that of an AUR helper. However, there were issues with rust and RPM support.&lt;br /&gt;
&lt;br /&gt;
=== CI Server ===&lt;br /&gt;
Anda was then rewritten as a CI Server that handles builds via BuildKit, stores artifacts and build infos, and later included a frontend to the server.&lt;br /&gt;
However, it slowly turned into a massive feature creep of projects.&lt;br /&gt;
&lt;br /&gt;
=== Final rewrite ===&lt;br /&gt;
Thus, Anda was rewritten again and it finally became a build system for various package formats.&lt;br /&gt;
&lt;br /&gt;
=== Terra ===&lt;br /&gt;
: Main Article: [[Terra]]&lt;br /&gt;
After the creation of Anda, the Ultramarine Project has migrated their repositories into [https://github.com/Ultramarine-Linux/ultramarine-pkgs GitHub monorepos]. However, a repository containing packages for not only Ultramarine Linux, but also all other Fedora distributions was wanted so that packages can be shared between both Ultramarine Linux and [[TauOS]], which led to the creation of the &#039;&#039;&#039;Andaman Common Repositories&#039;&#039;&#039;, also known as the &#039;&#039;&#039;Andaman Subatomic Repositories&#039;&#039;&#039;.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The original GitHub organisation was called &amp;quot;andaman-common-pkgs&amp;quot;, and the original repository url was &amp;lt;code&amp;gt;&amp;lt;small&amp;gt;&amp;lt;nowiki&amp;gt;https://subatomic.fyralabs.com/ad37/&amp;lt;/nowiki&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/code&amp;gt;.&amp;lt;/ref&amp;gt; It was later renamed to &#039;&#039;&#039;[[Terra]]&#039;&#039;&#039;, and now contains many common packages not found in the Fedora repositories.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Terra]]&lt;br /&gt;
* [[Subatomic]]&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Terra&amp;diff=172</id>
		<title>Terra</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Terra&amp;diff=172"/>
		<updated>2023-06-12T10:35:16Z</updated>

		<summary type="html">&lt;p&gt;Madomado: /* History */ summary on how Terra was created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
&#039;&#039;&#039;Terra&#039;&#039;&#039;, originally known as the Andaman Common repositories, is a collection of rolling-release Fedora repositories by [[Fyra Labs]] that includes commonly-used programs not packaged in the main Fedora repositories. Its sources are public in [https://github.com/terrapkg/packages a GitHub repository] and it is powered by [[Andaman]] and [[Subatomic]].&lt;br /&gt;
&lt;br /&gt;
It is hosted on https://repos.fyralabs.com/terra38 and packages are provided for both x86_64 and arm64 architectures.&lt;br /&gt;
&lt;br /&gt;
The development process, guidelines and policies are thoroughly documented in the [https://developer.fyralabs.com/terra/contributing Fyra Labs devdocs].&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
Terra is built on the [[Andaman]] toolchain, which makes it much easier to create, maintain and build packages compared with Koji. When updates are pushed to the main branches, GitHub actions automatically calls anda to build the corresponding package. If the build succeeds, it will then be uploaded to the actual server that hosts all the RPM packages. The process of uploading and processing the RPM package is done by the [[Subatomic]] client and server respectively. Finally, no matter if the build process failed or succeed, the build will be recorded by sending a request to [[Madoguchi]], a server for recording package information.&lt;br /&gt;
&lt;br /&gt;
The above process repeats for each push event happening in the GitHub repository with the following conditions:&lt;br /&gt;
* The push happens in a branch with an open pull request with no merge conflicts; or&lt;br /&gt;
* The push happens in the &amp;lt;code&amp;gt;f*&amp;lt;/code&amp;gt; branch&lt;br /&gt;
&lt;br /&gt;
For those push events, the manifest task is first run which detects the files changed in the push, and a build is issued for each package with changes. Unless otherwise specified in the anda configuration file, each anda project that has changes in its directory will have its own build job for both the x86_64 and the arm64 (aka. aarch64) architectures. The x86_64 build jobs use the workers provided by GitHub, and the aarch64 workers are provided by Fyra Labs.&lt;br /&gt;
&lt;br /&gt;
Manual requests for builds are also supported and it is sometimes used when packages are required to be rebuilt.&lt;br /&gt;
&lt;br /&gt;
=== Updates ===&lt;br /&gt;
Most projects in Terra contains a &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; AndaX script that denotes how the latest version of the package is obtained. Every 30 minutes, &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; is run in GitHub CI. If a version different from the one in the spec file is detected, anda automatically bumps the package, and a new commit will be created for all the package updates and pushed to the main branch (&amp;lt;code&amp;gt;f38&amp;lt;/code&amp;gt;). Additionally, the commit is also cloned to the other branches (such as &amp;lt;code&amp;gt;f37&amp;lt;/code&amp;gt;) and also pushed. If the cloning process fails (usually due to conflicts), the updates will not be done for the other branches.&lt;br /&gt;
&lt;br /&gt;
Nightly packages are excluded from the above process and they have a separate workflow for the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; process which runs daily.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
After [[Andaman]] was created, the [[Ultramarine]] Project has migrated their repositories into GitHub monorepos. However, a setup was preferred where packages can be shared between both Ultramarine Linux and [[TauOS]], and even other Fedora distributions. This led to the creation of the &#039;&#039;&#039;Andaman Common Repositories&#039;&#039;&#039;, also known as the &#039;&#039;&#039;Andaman Subatomic Repositories&#039;&#039;&#039;. The original GitHub organisation name was &#039;&#039;andaman-common-pkgs&#039;&#039;, and the repository for &#039;&#039;Fedora Extras 37&#039;&#039; was located at &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://subatomic.fyralabs.com/fe37&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. It was then renamed to &#039;&#039;Andaman Common Packages 37&#039;&#039; and was moved to &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;https://subatomic.fyralabs.com/ad37&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. It was later finally renamed to Terra, and now contains many common packages not found in the Fedora repositories.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* Website: https://terra.fyralabs.com&lt;br /&gt;
* Repology: https://repology.org/repository/terra_38&lt;br /&gt;
* Monorepo: https://github.com/terrapkg/packages&lt;br /&gt;
* RPMs: https://repos.fyralabs.com/terra38&lt;br /&gt;
* Devdocs: https://developer.fyralabs.com/terra&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=171</id>
		<title>Andaman</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=171"/>
		<updated>2023-06-12T10:25:03Z</updated>

		<summary type="html">&lt;p&gt;Madomado: /* Terra */ add history&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
[[Category:Projects]]&lt;br /&gt;
&#039;&#039;&#039;Andaman&#039;&#039;&#039;, often abbreviated as &#039;&#039;&#039;anda&#039;&#039;&#039;, is a modern package build toolchain designed to&lt;br /&gt;
simplify building different package formats for different projects in the same repository.&lt;br /&gt;
It mainly supports monorepo setups, especially ones with CI support like GitHub. It currently supports building RPMs, OCI images and Flatpak packages.&lt;br /&gt;
It is written by [[Fyra Labs]] with the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
Anda&#039;s simplicity makes the packaging process seamless and it is most notably used in [[Terra]].&lt;br /&gt;
&lt;br /&gt;
== Mechanisms ==&lt;br /&gt;
Currently, Anda is simply a meta-build system that calls upon other build systems to build and distribute packages. It reads the project manifest in &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;&lt;br /&gt;
and calls the corresponding build system to build the package. Multiple projects can be included in a single repository (known as a &#039;&#039;monorepo&#039;&#039;) recursively in different directories. The root directory contains a main configuration file (also &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;) and the configurations will be inherited. All the other &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; files in its subdirectory can independently represent multiple &#039;&#039;projects&#039;&#039;, and multiple ways to build a package can be specified in each project. Once properly configured, a project can be built by &amp;lt;code&amp;gt;anda build &#039;&#039;subdirectory_path&#039;&#039;/&#039;&#039;project_name&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AndaX ===&lt;br /&gt;
&#039;&#039;&#039;AndaX&#039;&#039;&#039; is an embedded scripting system powered by [https://rhai.rs Rhai]. It is mainly for supporting automatic updates, but it is also the scripting system used behind&lt;br /&gt;
&amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Updates ===&lt;br /&gt;
: See also: [https://developer.fyralabs.com/terra/autoupdate Fyra Developer: Terra autoupdate] for the supported functions in AndaX&lt;br /&gt;
Anda has refined support over automatically updating packages via the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; command. The command finds all the projects with the file &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; in the same directory or if the configuration file has the &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; property set to a value:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
project project_name {&lt;br /&gt;
  update = &amp;quot;path/to/update_script.rhai&amp;quot;&lt;br /&gt;
  labels {&lt;br /&gt;
    a = &amp;quot;1&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, AndaX executes the script. Projects can also be filtered by adding &amp;lt;code&amp;gt;--filters key=value,key2=value2&amp;lt;/code&amp;gt; to the command.&lt;br /&gt;
For example, the update script for the above project will be executed for &amp;lt;code&amp;gt;--filters a=1&amp;lt;/code&amp;gt; or even without filters related to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, but&lt;br /&gt;
it won&#039;t be executed for &amp;lt;code&amp;gt;--filters a=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Andaman uses the HashiCorp Configuration Language (HCL) for its configuration format, known for being used in software by HashiCorp such as Terraform, Consul, Vault and Packer. Its syntax is similar to UCL and NGINX&#039;s configuration format.&lt;br /&gt;
&lt;br /&gt;
Consider the following. for &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;, they represent, respectively, an dictionary (empty by default) with keys and string values, and a string with no default value. Unless otherwise stated, all the attributes are optional.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
config {&lt;br /&gt;
  mock_config = &amp;quot;&amp;quot; // default mock config for `anda build -c custom_mock_config`&lt;br /&gt;
  strip_prefix = &amp;quot;&amp;quot; // strip prefix to form new project alias&lt;br /&gt;
  strip_suffix = &amp;quot;&amp;quot; // strip suffix to form new project alias&lt;br /&gt;
  project_regex = &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
project &amp;quot;project_name&amp;quot; { // the string quote is optional&lt;br /&gt;
  rpm {&lt;br /&gt;
    spec = &amp;quot;path/to/file.spec&amp;quot; // REQUIRED&lt;br /&gt;
    sources = &amp;quot;.&amp;quot;&lt;br /&gt;
    package = &amp;quot;&amp;quot;&lt;br /&gt;
    pre_script = &amp;quot;rpm_pre.rhai&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;rpm_post.rhai&amp;quot;&lt;br /&gt;
    mock_config = &amp;quot;&amp;quot;&lt;br /&gt;
    enable_scm = false&lt;br /&gt;
    scm_opts { }&lt;br /&gt;
    config { }&lt;br /&gt;
    plugin_opts { }&lt;br /&gt;
    macros { }&lt;br /&gt;
    opts { }&lt;br /&gt;
  }&lt;br /&gt;
  podman tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  docker tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  flatpak {&lt;br /&gt;
    manifest = &amp;quot;path/to/manifest.yml&amp;quot; // REQUIRED&lt;br /&gt;
    pre_script = &amp;quot;&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  pre_script = &amp;quot;pre.rhai&amp;quot;&lt;br /&gt;
  post_script = &amp;quot;post.rhai&amp;quot;&lt;br /&gt;
  env { }&lt;br /&gt;
  alias = [] // array of strings&lt;br /&gt;
  scripts = [] // array of paths to AndaX scripts&lt;br /&gt;
  labels { }&lt;br /&gt;
  update = &amp;quot;update.rhai&amp;quot;&lt;br /&gt;
  arches = [&amp;quot;x86_64&amp;quot;, &amp;quot;aarch64&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== umpkg ===&lt;br /&gt;
In the very beginning, the [[Ultramarine]] Project had been using Koji for building RPM packages. Koji is the packaging system used by the [[wikipedia:Fedora Project|Fedora Project]]. However, Koji&#039;s sophistication makes it difficult to create and maintain RPM packages — it was said that the only person in the Ultramarine team who actually knew how to use Koji was the lead developer, [[Cappy Ishihara]]. Cappy was annoyed by the sheer complexity of building and uploading packages to Koji and made [[umpkg]], a packaging toolchain that runs on Mock and Koji. The creation of umpkg made it easier to create and maintain packages. However, umpkg still tightly integrates with Koji and uses the Koji API to trigger builds. Thus, an entirely new CI server was proposed.&lt;br /&gt;
&lt;br /&gt;
=== RPM Frontend ===&lt;br /&gt;
The Ultramarine Project started work on Andaman on 9 Jun, 2022.&lt;br /&gt;
The name Andaman refers to the [[wikipedia:Andaman Sea|Andaman Sea]] next to Thailand, and follows the naming patterns for other projects related to Ultramarine.&lt;br /&gt;
Initially, Anda was written as a custom RPM frontend as an alternative to DNF that is similar to that of an AUR helper. However, there were issues with rust and RPM support.&lt;br /&gt;
&lt;br /&gt;
=== CI Server ===&lt;br /&gt;
Anda was then rewritten as a CI Server that handles builds via BuildKit, stores artifacts and build infos, and later included a frontend to the server.&lt;br /&gt;
However, it slowly turned into a massive feature creep of projects.&lt;br /&gt;
&lt;br /&gt;
=== Final rewrite ===&lt;br /&gt;
Thus, Anda was rewritten again and it finally became a build system for various package formats.&lt;br /&gt;
&lt;br /&gt;
=== Terra ===&lt;br /&gt;
: Main Article: [[Terra]]&lt;br /&gt;
After the creation of Anda, the Ultramarine Project has migrated their repositories into [https://github.com/Ultramarine-Linux/ultramarine-pkgs GitHub monorepos]. However, a repository containing packages for not only Ultramarine Linux, but also all other Fedora distributions was wanted so that packages can be shared between both Ultramarine Linux and [[TauOS]], which led to the creation of the &#039;&#039;&#039;Andaman Common Repositories&#039;&#039;&#039;, also known as the &#039;&#039;&#039;Andaman Subatomic Repositories&#039;&#039;&#039;.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The original GitHub organisation was called &amp;quot;andaman-common-pkgs&amp;quot;, and the original repository url was &amp;lt;nowiki&amp;gt;https://repos.fyralabs.com/ad37/&amp;lt;/nowiki&amp;gt;.&amp;lt;/ref&amp;gt; It was later renamed to &#039;&#039;&#039;[[Terra]]&#039;&#039;&#039;, and now contains many common packages not found in the Fedora repositories.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
* [[Terra]]&lt;br /&gt;
* [[Subatomic]]&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Terra&amp;diff=170</id>
		<title>Terra</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Terra&amp;diff=170"/>
		<updated>2023-06-11T03:24:52Z</updated>

		<summary type="html">&lt;p&gt;Madomado: init&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
&#039;&#039;&#039;Terra&#039;&#039;&#039;, originally known as the Andaman Common repositories, is a collection of rolling-release Fedora repositories by [[Fyra Labs]] that includes commonly-used programs not packaged in the main Fedora repositories. Its sources are public in [https://github.com/terrapkg/packages a GitHub repository] and it is powered by [[Andaman]] and [[Subatomic]].&lt;br /&gt;
&lt;br /&gt;
It is hosted on https://repos.fyralabs.com/terra38 and packages are provided for both x86_64 and arm64 architectures.&lt;br /&gt;
&lt;br /&gt;
The development process, guidelines and policies are thoroughly documented in the [https://developer.fyralabs.com/terra/contributing Fyra Labs devdocs].&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
Terra is built on the [[Andaman]] toolchain, which makes it much easier to create, maintain and build packages compared with Koji. When updates are pushed to the main branches, GitHub actions automatically calls anda to build the corresponding package. If the build succeeds, it will then be uploaded to the actual server that hosts all the RPM packages. The process of uploading and processing the RPM package is done by the [[Subatomic]] client and server respectively. Finally, no matter if the build process failed or succeed, the build will be recorded by sending a request to [[Madoguchi]], a server for recording package information.&lt;br /&gt;
&lt;br /&gt;
The above process repeats for each push event happening in the GitHub repository with the following conditions:&lt;br /&gt;
* The push happens in a branch with an open pull request with no merge conflicts; or&lt;br /&gt;
* The push happens in the &amp;lt;code&amp;gt;f*&amp;lt;/code&amp;gt; branch&lt;br /&gt;
&lt;br /&gt;
For those push events, the manifest task is first run which detects the files changed in the push, and a build is issued for each package with changes. Unless otherwise specified in the anda configuration file, each anda project that has changes in its directory will have its own build job for both the x86_64 and the arm64 (aka. aarch64) architectures. The x86_64 build jobs use the workers provided by GitHub, and the aarch64 workers are provided by Fyra Labs.&lt;br /&gt;
&lt;br /&gt;
Manual requests for builds are also supported and it is sometimes used when packages are required to be rebuilt.&lt;br /&gt;
&lt;br /&gt;
=== Updates ===&lt;br /&gt;
Most projects in Terra contains a &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; AndaX script that denotes how the latest version of the package is obtained. Every 30 minutes, &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; is run in GitHub CI. If a version different from the one in the spec file is detected, anda automatically bumps the package, and a new commit will be created for all the package updates and pushed to the main branch (&amp;lt;code&amp;gt;f38&amp;lt;/code&amp;gt;). Additionally, the commit is also cloned to the other branches (such as &amp;lt;code&amp;gt;f37&amp;lt;/code&amp;gt;) and also pushed. If the cloning process fails (usually due to conflicts), the updates will not be done for the other branches.&lt;br /&gt;
&lt;br /&gt;
Nightly packages are excluded from the above process and they have a separate workflow for the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; process which runs daily.&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* Website: https://terra.fyralabs.com&lt;br /&gt;
* Repology: https://repology.org/repository/terra_38&lt;br /&gt;
* Monorepo: https://github.com/terrapkg/packages&lt;br /&gt;
* RPMs: https://repos.fyralabs.com/terra38&lt;br /&gt;
* Devdocs: https://developer.fyralabs.com/terra&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=165</id>
		<title>Andaman</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=165"/>
		<updated>2023-06-10T09:16:02Z</updated>

		<summary type="html">&lt;p&gt;Madomado: /* Configuration */ add section; /* History */ add more info related to rewrites&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
[[Category:Projects]]&lt;br /&gt;
&#039;&#039;&#039;Andaman&#039;&#039;&#039;, often abbreviated as &#039;&#039;&#039;anda&#039;&#039;&#039;, is a modern package build toolchain designed to&lt;br /&gt;
simplify building different package formats for different projects in the same repository.&lt;br /&gt;
It mainly supports monorepo setups, especially ones with CI support like GitHub. It currently supports building RPMs, OCI images and Flatpak packages.&lt;br /&gt;
It is written by [[Fyra Labs]] with the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
Anda&#039;s simplicity makes the packaging process seamless and it is most notably used in [[Terra]].&lt;br /&gt;
&lt;br /&gt;
== Mechanisms ==&lt;br /&gt;
Currently, Anda is simply a meta-build system that calls upon other build systems to build and distribute packages. It reads the project manifest in &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;&lt;br /&gt;
and calls the corresponding build system to build the package. Multiple projects can be included in a single repository (known as a &#039;&#039;monorepo&#039;&#039;) recursively in different directories. The root directory contains a main configuration file (also &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;) and the configurations will be inherited. All the other &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; files in its subdirectory can independently represent multiple &#039;&#039;projects&#039;&#039;, and multiple ways to build a package can be specified in each project. Once properly configured, a project can be built by &amp;lt;code&amp;gt;anda build &#039;&#039;subdirectory_path&#039;&#039;/&#039;&#039;project_name&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AndaX ===&lt;br /&gt;
&#039;&#039;&#039;AndaX&#039;&#039;&#039; is an embedded scripting system powered by [https://rhai.rs Rhai]. It is mainly for supporting automatic updates, but it is also the scripting system used behind&lt;br /&gt;
&amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Updates ===&lt;br /&gt;
: See also: [https://developer.fyralabs.com/terra/autoupdate Fyra Developer: Terra autoupdate] for the supported functions in AndaX&lt;br /&gt;
Anda has refined support over automatically updating packages via the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; command. The command finds all the projects with the file &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; in the same directory or if the configuration file has the &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; property set to a value:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
project project_name {&lt;br /&gt;
  update = &amp;quot;path/to/update_script.rhai&amp;quot;&lt;br /&gt;
  labels {&lt;br /&gt;
    a = &amp;quot;1&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, AndaX executes the script. Projects can also be filtered by adding &amp;lt;code&amp;gt;--filters key=value,key2=value2&amp;lt;/code&amp;gt; to the command.&lt;br /&gt;
For example, the update script for the above project will be executed for &amp;lt;code&amp;gt;--filters a=1&amp;lt;/code&amp;gt; or even without filters related to &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, but&lt;br /&gt;
it won&#039;t be executed for &amp;lt;code&amp;gt;--filters a=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
Consider the following. for &amp;lt;code&amp;gt;{ }&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;, they represent, respectively, an dictionary (empty by default) with keys and string values, and a string with no default value. Unless otherwise stated, all the attributes are optional.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;js&amp;quot;&amp;gt;&lt;br /&gt;
config {&lt;br /&gt;
  mock_config = &amp;quot;&amp;quot; // default mock config for `anda build -c custom_mock_config`&lt;br /&gt;
  strip_prefix = &amp;quot;&amp;quot; // strip prefix to form new project alias&lt;br /&gt;
  strip_suffix = &amp;quot;&amp;quot; // strip suffix to form new project alias&lt;br /&gt;
  project_regex = &amp;quot;&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
project &amp;quot;project_name&amp;quot; { // the string quote is optional&lt;br /&gt;
  rpm {&lt;br /&gt;
    spec = &amp;quot;path/to/file.spec&amp;quot; // REQUIRED&lt;br /&gt;
    sources = &amp;quot;.&amp;quot;&lt;br /&gt;
    package = &amp;quot;&amp;quot;&lt;br /&gt;
    pre_script = &amp;quot;rpm_pre.rhai&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;rpm_post.rhai&amp;quot;&lt;br /&gt;
    mock_config = &amp;quot;&amp;quot;&lt;br /&gt;
    enable_scm = false&lt;br /&gt;
    scm_opts { }&lt;br /&gt;
    config { }&lt;br /&gt;
    plugin_opts { }&lt;br /&gt;
    macros { }&lt;br /&gt;
    opts { }&lt;br /&gt;
  }&lt;br /&gt;
  podman tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  docker tagname {&lt;br /&gt;
    dockerfile = &amp;quot;&amp;quot;&lt;br /&gt;
    import = &amp;quot;&amp;quot;&lt;br /&gt;
    tag_latest = false&lt;br /&gt;
    context = &amp;quot;&amp;quot; // REQUIRED&lt;br /&gt;
    version = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  flatpak {&lt;br /&gt;
    manifest = &amp;quot;path/to/manifest.yml&amp;quot; // REQUIRED&lt;br /&gt;
    pre_script = &amp;quot;&amp;quot;&lt;br /&gt;
    post_script = &amp;quot;&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
  pre_script = &amp;quot;pre.rhai&amp;quot;&lt;br /&gt;
  post_script = &amp;quot;post.rhai&amp;quot;&lt;br /&gt;
  env { }&lt;br /&gt;
  alias = [] // array of strings&lt;br /&gt;
  scripts = [] // array of paths to AndaX scripts&lt;br /&gt;
  labels { }&lt;br /&gt;
  update = &amp;quot;update.rhai&amp;quot;&lt;br /&gt;
  arches = [&amp;quot;x86_64&amp;quot;, &amp;quot;aarch64&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== umpkg ===&lt;br /&gt;
In the very beginning, the [[Ultramarine]] Project had been using Koji for building RPM packages. Koji is the packaging system used by the [[wikipedia:Fedora Project|Fedora Project]]. However, Koji&#039;s sophistication makes it difficult to create and maintain RPM packages — it was said that the only person in the Ultramarine team who actually knew how to use Koji was the lead developer, [[Cappy Ishihara]]. Cappy was annoyed by the sheer complexity of building and uploading packages to Koji and made [[umpkg]], a packaging toolchain that runs on Mock and Koji. The creation of umpkg made it easier to create and maintain packages. However, umpkg still tightly integrates with Koji and uses the Koji API to trigger builds. Thus, an entirely new CI server was proposed.&lt;br /&gt;
&lt;br /&gt;
=== RPM Frontend ===&lt;br /&gt;
The Ultramarine Project started work on Andaman on 9 Jun, 2022.&lt;br /&gt;
The name Andaman refers to the [[wikipedia:Andaman Sea|Andaman Sea]] next to Thailand, and follows the naming patterns for other projects related to Ultramarine.&lt;br /&gt;
Initially, Anda was written as a custom RPM frontend as an alternative to DNF that is similar to that of an AUR helper. However, there were issues with rust and RPM support.&lt;br /&gt;
&lt;br /&gt;
=== CI Server ===&lt;br /&gt;
Anda was then rewritten as a CI Server that handles builds via BuildKit, stores artifacts and build infos, and later included a frontend to the server.&lt;br /&gt;
However, it slowly turned into a massive feature creep of projects.&lt;br /&gt;
&lt;br /&gt;
=== Final rewrite ===&lt;br /&gt;
Thus, Anda was rewritten again and it finally became a build system for various package formats.&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Ultramarine&amp;diff=164</id>
		<title>Ultramarine</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Ultramarine&amp;diff=164"/>
		<updated>2023-06-10T04:43:36Z</updated>

		<summary type="html">&lt;p&gt;Madomado: redirect to Ultramarine Linux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Ultramarine Linux]]&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Anda&amp;diff=163</id>
		<title>Anda</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Anda&amp;diff=163"/>
		<updated>2023-06-10T04:42:20Z</updated>

		<summary type="html">&lt;p&gt;Madomado: redirect to Andaman&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Andaman]]&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=162</id>
		<title>Andaman</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Andaman&amp;diff=162"/>
		<updated>2023-06-10T04:16:20Z</updated>

		<summary type="html">&lt;p&gt;Madomado: init&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
&#039;&#039;&#039;Andaman&#039;&#039;&#039;, often abbreviated as &#039;&#039;&#039;anda&#039;&#039;&#039;, is a modern packaged build toolchain designed to&lt;br /&gt;
simplify building different package formats for different projects in the same repository.&lt;br /&gt;
It mainly supports monorepo setups, especially ones with CI support like GitHub. It currently supports building RPMs, OCI images and Flatpak packages.&lt;br /&gt;
It is written by [[Fyra Labs]] with the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
== Mechanisms ==&lt;br /&gt;
Currently, Anda is simply a meta-build system that calls upon other build systems to build and distribute packages. It reads the project manifest in &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;&lt;br /&gt;
and calls the corresponding build system to build the package. Multiple projects can be included in a single repository (known as a &#039;&#039;monorepo&#039;&#039;) recursively in different directories. The root directory contains a main configuration file (also &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt;) and the configurations will be inherited. All the other &amp;lt;code&amp;gt;anda.hcl&amp;lt;/code&amp;gt; files in its subdirectory can independently represent multiple &#039;&#039;projects&#039;&#039;, and multiple ways to build a package can be specified in each project. Once properly configured, a project can be built by &amp;lt;code&amp;gt;anda build &#039;&#039;subdirectory_path&#039;&#039;/&#039;&#039;project_name&#039;&#039;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== AndaX ===&lt;br /&gt;
&#039;&#039;&#039;AndaX&#039;&#039;&#039; is an embedded scripting system powered by [https://rhai.rs Rhai]. It is mainly for supporting automatic updates, but it is also the scripting system used behind&lt;br /&gt;
&amp;lt;code&amp;gt;pre_script&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;post_script&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Automatic Updates ===&lt;br /&gt;
Anda has refined support over automatically updating packages via the &amp;lt;code&amp;gt;anda update&amp;lt;/code&amp;gt; command. The command finds all the projects with the file &amp;lt;code&amp;gt;update.rhai&amp;lt;/code&amp;gt; in the same directory or if the configuration file has the &amp;lt;code&amp;gt;update&amp;lt;/code&amp;gt; property set to a value:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;hcl&amp;quot;&amp;gt;&lt;br /&gt;
project proj_name {&lt;br /&gt;
  update = &amp;quot;path/to/update_script.rhai&amp;quot;&lt;br /&gt;
  labels {&lt;br /&gt;
    a = &amp;quot;1&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Then, AndaX executes the script. Projects can also be filtered by adding &amp;lt;code&amp;gt;--filters key=value,key2=value2&amp;lt;/code&amp;gt; to the command.&lt;br /&gt;
For example, the above project will be ran for &amp;lt;code&amp;gt;--filters a=1&amp;lt;/code&amp;gt; or even without filters regarding the key &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, but&lt;br /&gt;
it will be filtered for &amp;lt;code&amp;gt;--filters a=2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&amp;lt;!-- creation? copy [[ultramarine linux]] --&amp;gt;&lt;br /&gt;
The name Andaman refers to the [[wikipedia:Andaman Sea|Andaman Sea]] next to Thailand, and follows the [[Ultramarine Linux|Ultramarine]] marine naming usage.&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Madomado&amp;diff=161</id>
		<title>Madomado</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Madomado&amp;diff=161"/>
		<updated>2023-06-09T16:47:44Z</updated>

		<summary type="html">&lt;p&gt;Madomado: /* Madoguchi */ add chemical equation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Copy edit|for=grammar|date=June 2023}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Madomado&#039;&#039;&#039;, also known as &#039;&#039;&#039;Mado&#039;&#039;&#039;, is not a &#039;&#039;mado&#039;&#039; (&amp;lt;ruby&amp;gt;窓&amp;lt;rt&amp;gt;まど&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;, Japanese for &amp;quot;window&amp;quot;), and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Mado is responsible for partially the development of [[Ultramarine Linux]].&lt;br /&gt;
Consequently, after the acquisition, Mado is a DevOps Engineer in [[Fyra Labs]] and is responsible for numerous projects,&lt;br /&gt;
most notably [[Terra]], [[Andaman]], and [[Madoguchi]].&lt;br /&gt;
&lt;br /&gt;
== Madonuko ==&lt;br /&gt;
Madomado&#039;s original character is &#039;&#039;&#039;Madonuko&#039;&#039;&#039;. Madonuko is not a &#039;&#039;mado&#039;&#039;, and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Instead, Madonuko is a &#039;&#039;nuko&#039;&#039; (ぬこ, Japanese slang for &amp;quot;cat&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Madomado is not Madonuko, because if Madomado is Madonuko, mado is nuko, and thus&lt;br /&gt;
&#039;&#039;mado&#039;&#039; is &#039;&#039;nuko&#039;&#039; (a window is a cat). But, &#039;&#039;mado&#039;&#039; is not &#039;&#039;nuko&#039;&#039; (a window is not a cat), so Mado&#039;s assumption is false. (Proof by contradiction)&lt;br /&gt;
However, Mado is an element of the set &#039;&#039;nuko&#039;&#039;. In other words, Mado is a &#039;&#039;nuko&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Despite that, it is still ok to use the name Madonuko to refer to Madomado.&lt;br /&gt;
&lt;br /&gt;
== Madoguchi ==&lt;br /&gt;
: Main article: [[Madoguchi]]&lt;br /&gt;
Madomado also made &#039;&#039;&#039;Madoguchi&#039;&#039;&#039;. Madoguchi is not a &#039;&#039;mado&#039;&#039;, and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Instead, Madoguchi is a &#039;&#039;guchi&#039;&#039; (愚痴, Japanese for &amp;quot;complaint&amp;quot;? &amp;lt;del&amp;gt;Or maybe Gu*** handbags?&amp;lt;/del&amp;gt;). Except, Madoguchi is not a &#039;&#039;guchi&#039;&#039;, and has nothing to do with &#039;&#039;guchi&#039;&#039;s. Instead, Madoguchi (&amp;lt;ruby&amp;gt;窓口&amp;lt;rt&amp;gt;まどぐち&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;, Japanese for &amp;quot;ticket window&amp;quot;, literal meaning &amp;quot;window mouth&amp;quot;) is an API server for &amp;lt;del&amp;gt;Mado&amp;lt;/del&amp;gt; things related to [[Terra]]. Mado made it so that Repology can redirect dumb entities like Mado to the corresponding package sources hosted on GitHub. The name Madoguchi refers to the [[wikipedia:MARS (ticket reservation system)#Outline|JR green ticket windows]] (&#039;&#039;Midori no Madoguchi&#039;&#039;, みどりの&amp;lt;ruby&amp;gt;窓口&amp;lt;rt&amp;gt;まどぐち&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;) in Japan serving people with all sorts of tickets.&lt;br /&gt;
&lt;br /&gt;
Please note that Madoguchi does not sell tickets for &#039;&#039;mado&#039;&#039;s, &#039;&#039;guchi&#039;&#039;s (whether the handbags or the complaints), or food (because Mado ate all of them).&lt;br /&gt;
&lt;br /&gt;
Madoguchi is created and maintained by mostly Madomado. Madomado uses special ingredients to make Madoguchi, including oxygen and [[wikipedia:Dihydrogen monoxide parody|dihydrogen monoxide]], illustrated by the following chemical reaction:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: &#039;Times New Roman&#039;;&amp;quot;&amp;gt;4Fe + 3O₂ + 2&#039;&#039;n&#039;&#039;H₂O&amp;lt;/span&amp;gt; → &amp;lt;span style=&amp;quot;font-family: &#039;Times New Roman&#039;;&amp;quot;&amp;gt;2Fe₂O₃·&#039;&#039;n&#039;&#039;H₂O&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
which results in the product &#039;&#039;hydrated iron(III) oxide&#039;&#039;, commonly known as [[wikipedia:Rust (programming language)|rust]].&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Ultramarine_Linux&amp;diff=160</id>
		<title>Ultramarine Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Ultramarine_Linux&amp;diff=160"/>
		<updated>2023-06-09T14:34:07Z</updated>

		<summary type="html">&lt;p&gt;Madomado: add section /* Philosophy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
&#039;&#039;&#039;Ultramarine Linux&#039;&#039;&#039; is a [[wikipedia:Fedora|Fedora]]-based [[wikipedia:Linux|Linux]] distribution designed to be easy to use for everyone, from beginners to tech enthusiasts.&lt;br /&gt;
It provides sane-defaults such that &amp;quot;it just works&amp;quot; and minimal configurations are required before users can start using the system.&lt;br /&gt;
&lt;br /&gt;
It comes with 4 editions, namely the Flagship Edition, the GNOME Edition, the Pantheon Edition, and the KDE Plasma Edition.&lt;br /&gt;
It also comes with several tweaks preapplied to make initial setup and daily usage seamless.&lt;br /&gt;
&lt;br /&gt;
The Ultramarine Linux distribution is created and maintained by the &#039;&#039;&#039;Ultramarine Project&#039;&#039;&#039;, which is led by &#039;&#039;&#039;Cappy Ishihara&#039;&#039;&#039; started in 2021, and later acquired by [[Fyra Labs]].&lt;br /&gt;
&lt;br /&gt;
== Editions ==&lt;br /&gt;
=== CuteFish ===&lt;br /&gt;
Before the release of Ultramarine 37, the [[CuteFish]] Edition was provided but later deprecated due to CuteFish DE&#039;s lack of&lt;br /&gt;
development and (consequently) its buggy behaviour and broken dependencies. It was then removed and replaced by the KDE Plasma Edition.&lt;br /&gt;
&lt;br /&gt;
=== Flagship ===&lt;br /&gt;
The Flagship Edition provides an elegant and simple interface with [[wikipedia:Budgie (desktop environment)|Budgie DE]].&lt;br /&gt;
The Budgie version used was packaged in the Ultramarine repository until Ultramarine 37, but it will switch to the one in the Fedora official repositories by Ultramarine 38.&lt;br /&gt;
&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
The GNOME Edition provides an intuitive layout with [[wikipedia:GNOME|GNOME]].&lt;br /&gt;
&lt;br /&gt;
=== KDE Plasma ===&lt;br /&gt;
The KDE Plasma Edition is provided since the release of Ultramarine 37 and it comes with Latte dock. Its layout is heavily inspired by [[wikipedia:Pop!_OS|Pop!_OS]].&lt;br /&gt;
However, Latte dock was removed in Ultramarine 38 due to negative feedback and its buggy behaviour and replaced by the default KDE Plasma theme.&lt;br /&gt;
&lt;br /&gt;
=== Pantheon ===&lt;br /&gt;
The Pantheon Edition provides the default desktop of [[wikipedia:Elementary OS|Elementary OS]], Pantheon DE.&lt;br /&gt;
The version in [[Terra]] was used since Ultramarine 37 as it was removed from the Fedora 37 repositories.&lt;br /&gt;
&amp;lt;!-- TODO: Lapis --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Philosophy ==&lt;br /&gt;
Ultramarine Project, the team behind the development of Ultramarine Linux and its side projects, has the goal of making Ultramarine Linux an operating system that &amp;quot;just works&amp;quot;, meaning customizations and tweaks don&#039;t have to be applied manually and things should work out of the box.&lt;br /&gt;
&lt;br /&gt;
In addition to user experience, the infrastructure of the Project is also designed to be developer-friendly. One notable example is [[Terra]], which allows much easier creation and maintenance of RPM packages with the help of automatic updates when compared with Fedora.&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Ultramarine Linux comes with a few repositories preinstalled, including [[wikipedia:RPM Fusion|RPM Fusion]], [[wikipedia:Flathub|Flathub]] and [[Terra]].&lt;br /&gt;
It also has its own repository with its sources [https://github.com/Ultramarine-Linux/ultramarine-pkgs/ hosted on GitHub] and powered by [[Andaman]].&lt;br /&gt;
The packages were hosted separately with their own git repository on a self-hosted GitLab instance and later GitHub, packaged using [[umpkg]].&lt;br /&gt;
&lt;br /&gt;
It uses the [[wikipedia:Anaconda (installer)|Anaconda installer]], but it is said that there will be a custom installer.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The TUI installer &amp;lt;code&amp;gt;libcappy&amp;lt;/code&amp;gt; is working but unused.&amp;lt;/ref&amp;gt; A welcome program for a better out-of-the-box experience is also planned and it is a work in progress.[https://github.com/Ultramarine-Linux/tauri-welcome]&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== The Acquisition of the Ultramarine Project ===&lt;br /&gt;
[[Fyra Labs]] acquired the Ultramarine Project on 12 October, 2022 as agreed by both sides which&lt;br /&gt;
brought numerous advantages to the development of Ultramarine since both sides had been lacking manpower. After the acquisition, the team started work on numerous projects&lt;br /&gt;
which greatly changed the infrastructure and shaped the development of Ultramarine 37, making it arguably the biggest release.&lt;br /&gt;
&lt;br /&gt;
=== The development of umpkg and Andaman ===&lt;br /&gt;
: Main Article: [[Andaman]]&lt;br /&gt;
Ultramarine had been using Koji for its own repository just like Fedora itself, but it made package maintenance difficult to do with its sheer complexity, which&lt;br /&gt;
led to the creation of [[umpkg]] by the Ultramarine Project. It reduces burden on packaging software and uploading them to the Koji server. However,&lt;br /&gt;
the sophisticated part (Koji itself) was still there, so a packaging tool was proposed. After the acquisition, the team started to work on&lt;br /&gt;
[[Andaman]] (aka. &amp;lt;code&amp;gt;anda&amp;lt;/code&amp;gt;), which was originally intended to be a package manager, but later rewritten as a package build toolchain.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=User:Jade&amp;diff=159</id>
		<title>User:Jade</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=User:Jade&amp;diff=159"/>
		<updated>2023-06-08T23:25:50Z</updated>

		<summary type="html">&lt;p&gt;Madomado: Use redirection&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Jaiden Riordan]]&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Madomado&amp;diff=98</id>
		<title>Madomado</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Madomado&amp;diff=98"/>
		<updated>2023-06-07T15:14:56Z</updated>

		<summary type="html">&lt;p&gt;Madomado: add section /* Madoguchi */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Copy edit|for=grammar|date=June 2023}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Madomado&#039;&#039;&#039;, also known as &#039;&#039;&#039;Mado&#039;&#039;&#039;, is not a &#039;&#039;mado&#039;&#039; (&amp;lt;ruby&amp;gt;窓&amp;lt;rt&amp;gt;まど&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;, Japanese for &amp;quot;window&amp;quot;), and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Mado is responsible for partially the development of [[Ultramarine Linux]].&lt;br /&gt;
Consequently, after the acquisition, Mado is a DevOps Engineer in [[Fyra Labs]] and is responsible for numerous projects,&lt;br /&gt;
most notably [[Terra]], [[Andaman]], and [[Madoguchi]].&lt;br /&gt;
&lt;br /&gt;
== Madonuko ==&lt;br /&gt;
Madomado&#039;s original character is &#039;&#039;&#039;Madonuko&#039;&#039;&#039;. Madonuko is not a &#039;&#039;mado&#039;&#039;, and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Instead, Madonuko is a &#039;&#039;nuko&#039;&#039; (ぬこ, Japanese slang for &amp;quot;cat&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Madomado is not Madonuko, because if Madomado is Madonuko, mado is nuko, and thus&lt;br /&gt;
&#039;&#039;mado&#039;&#039; is &#039;&#039;nuko&#039;&#039; (a window is a cat). But, &#039;&#039;mado&#039;&#039; is not &#039;&#039;nuko&#039;&#039; (a window is not a cat), so Mado&#039;s assumption is false. (Proof by contradiction)&lt;br /&gt;
However, Mado is an element of the set &#039;&#039;nuko&#039;&#039;. In other words, Mado is a &#039;&#039;nuko&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Despite that, it is still ok to use the name Madonuko to refer to Madomado.&lt;br /&gt;
&lt;br /&gt;
== Madoguchi ==&lt;br /&gt;
: Main article: [[Madoguchi]]&lt;br /&gt;
Madomado also made &#039;&#039;&#039;Madoguchi&#039;&#039;&#039;. Madoguchi is not a &#039;&#039;mado&#039;&#039;, and has nothing to do with &#039;&#039;mado&#039;&#039;s. Madoguchi (&amp;lt;ruby&amp;gt;窓口&amp;lt;rt&amp;gt;まどぐち&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;, Japanese for &amp;quot;ticket window&amp;quot;, literal meaning &amp;quot;window mouth&amp;quot;) is an API server for things related to [[Terra]]. Mado made it so that Repology can redirect dumb entities like Mado to the corresponding package sources hosted on GitHub. The name Madoguchi refers to the [[wikipedia:MARS (ticket reservation system)#Outline|JR green ticket windows]] (&#039;&#039;Midori no Madoguchi&#039;&#039;, みどりの&amp;lt;ruby&amp;gt;窓口&amp;lt;rt&amp;gt;まどぐち&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;) in Japan serving people with all sorts of tickets.&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Ultramarine_Linux&amp;diff=95</id>
		<title>Ultramarine Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Ultramarine_Linux&amp;diff=95"/>
		<updated>2023-06-07T14:39:21Z</updated>

		<summary type="html">&lt;p&gt;Madomado: init&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
&#039;&#039;&#039;Ultramarine Linux&#039;&#039;&#039; is a [[wikipedia:Fedora|Fedora]]-based [[wikipedia:Linux|Linux]] distribution designed to be easy to use for everyone, from beginners to tech enthusiasts.&lt;br /&gt;
It comes with 4 editions, namely the Flagship Edition, the GNOME Edition, the Pantheon Edition, and the KDE Plasma Edition.&lt;br /&gt;
It comes with several tweaks preapplied to make initial setup and daily usage seamless.&lt;br /&gt;
&lt;br /&gt;
Its development led by &#039;&#039;&#039;Cappy Ishihara&#039;&#039;&#039; started in 2021, and was later acquired by [[Fyra Labs]].&lt;br /&gt;
&lt;br /&gt;
== Editions ==&lt;br /&gt;
=== CuteFish ===&lt;br /&gt;
Before the release of Ultramarine 37, Ultramarine provided [[CuteFish]] Edition which was later deprecated due to CuteFish DE&#039;s lack of&lt;br /&gt;
development and (consequently) its buggy behaviour and later its broken dependencies. It was removed and replaced by the KDE Plasma Edition.&lt;br /&gt;
&lt;br /&gt;
=== Flagship ===&lt;br /&gt;
The Flagship Edition provides an elegant and simple interface with [[wikipedia:Budgie (desktop environment)|Budgie DE]].&lt;br /&gt;
The Budgie version used was packaged in the Ultramarine repository until Ultramarine 37, but it will switch to the one in the Fedora official repositories by Ultramarine 38.&lt;br /&gt;
&lt;br /&gt;
=== GNOME ===&lt;br /&gt;
The GNOME Edition provides an intuitive layout with [[wikipedia:GNOME|GNOME]].&lt;br /&gt;
&lt;br /&gt;
=== KDE Plasma ===&lt;br /&gt;
The KDE Plasma Edition is provided since the release of Ultramarine 37 and it comes with Latte dock. Its layout is heavily inspired by [[wikipedia:Pop!_OS|Pop!_OS]].&lt;br /&gt;
However, Latte dock will be removed in Ultramarine 38 due to negative feedback and its buggy behaviour.&lt;br /&gt;
&lt;br /&gt;
=== Pantheon ===&lt;br /&gt;
The Pantheon Edition provides the default desktop of [[wikipedia:Elementary OS|Elementary OS]], Pantheon DE.&lt;br /&gt;
It uses the version in [[Terra]] since Ultramarine 37 as it was removed from the Fedora 37 repositories.&lt;br /&gt;
&amp;lt;!-- TODO: Lapis --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
Ultramarine Linux comes with a few repositories preinstalled, including [[wikipedia:RPM Fusion|RPM Fusion]], [[wikipedia:Flathub|Flathub]] and [[Terra]].&lt;br /&gt;
It also has its own repository with its sources [hosted on GitHub https://github.com/Ultramarine-Linux/ultramarine-pkgs/] and powered by [[Andaman]].&lt;br /&gt;
The packages were hosted separately with their own git repository on a self-hosted GitLab instance and later GitHub, packaged using [[umpkg]].&lt;br /&gt;
&lt;br /&gt;
It uses the [[wikipedia:Anaconda (installer)|Anaconda installer]], but it is said that there will be a custom installer.&amp;lt;ref group=&amp;quot;note&amp;quot;&amp;gt;The TUI installer &amp;lt;code&amp;gt;libcappy&amp;lt;/code&amp;gt; is working but unused.&amp;lt;/ref&amp;gt; A welcome program for a better out-of-the-box experience is also planned and it is a work in progress.[https://github.com/Ultramarine-Linux/tauri-welcome]&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
=== The Acquisition of the Ultramarine Project ===&lt;br /&gt;
[[Fyra Labs]] acquired the Ultramarine Project on 12 October, 2022 as agreed by both sides which&lt;br /&gt;
brought numerous advantages to the development of Ultramarine since both sides had been lacking manpower. After the acquisition, the team started work on numerous projects&lt;br /&gt;
which greatly changed the infrastructure and shaped the development of Ultramarine 37, making it arguably the biggest release.&lt;br /&gt;
&lt;br /&gt;
=== The development of umpkg and Andaman ===&lt;br /&gt;
: Main Article: [[Andaman]]&lt;br /&gt;
Ultramarine had been using Koji for its own repository just like Fedora itself, but it made package maintenance difficult to do with its sheer complexity, which&lt;br /&gt;
led to the creation of [[umpkg]] by the Ultramarine Project. It reduces burden on packaging software and uploading them to the Koji server. However,&lt;br /&gt;
the sophisticated part (Koji itself) was still there, so a packaging tool was proposed. After the acquisition, the team started to work on&lt;br /&gt;
[[Andaman]] (aka. &amp;lt;code&amp;gt;anda&amp;lt;/code&amp;gt;), which was originally intended to be a package manager, but later rewritten as a package build toolchain.&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&amp;lt;references group=&amp;quot;note&amp;quot; /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Madomado&amp;diff=72</id>
		<title>Madomado</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Madomado&amp;diff=72"/>
		<updated>2023-06-07T12:58:44Z</updated>

		<summary type="html">&lt;p&gt;Madomado: Madomado created the page Madomado for Madomado. The page Madomado is not a &amp;#039;&amp;#039;mado&amp;#039;&amp;#039;, has nothing to do with &amp;#039;&amp;#039;mado&amp;#039;&amp;#039;s, and it does not talk about &amp;#039;&amp;#039;mado&amp;#039;&amp;#039;s.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Madomado&#039;&#039;&#039;, also known as &#039;&#039;&#039;Mado&#039;&#039;&#039;, is not a &#039;&#039;mado&#039;&#039; (&amp;lt;ruby&amp;gt;窓&amp;lt;rt&amp;gt;まど&amp;lt;/rt&amp;gt;&amp;lt;/ruby&amp;gt;, Japanese for &amp;quot;window&amp;quot;), and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Mado is responsible for partially the development of [[Ultramarine Linux]].&lt;br /&gt;
Consequently, after the acquisition, Mado is a DevOps Engineer in [[Fyra Labs]] and is responsible for numerous projects,&lt;br /&gt;
most notably [[Terra]], [[Andaman]], and [[Madoguchi]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Madonuko ==&lt;br /&gt;
&lt;br /&gt;
Mado&#039;s original character is &#039;&#039;&#039;Madonuko&#039;&#039;&#039;. Madonuko is not a &#039;&#039;mado&#039;&#039;, and has nothing to do with &#039;&#039;mado&#039;&#039;s.&lt;br /&gt;
Instead it is a &#039;&#039;nuko&#039;&#039; (ぬこ, Japanese slang for &amp;quot;cat&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
Madomado is not Madonuko, because if Madomado is Madonuko, mado is nuko, and thus&lt;br /&gt;
&#039;&#039;mado&#039;&#039; is &#039;&#039;nuko&#039;&#039; (a window is a cat). But, &#039;&#039;mado&#039;&#039; is not &#039;&#039;nuko&#039;&#039; (a window is not a cat), so Mado&#039;s assumption is false. (Proof by contradiction)&lt;br /&gt;
However, Mado is an element of the set &#039;&#039;nuko&#039;&#039;. In other words, Mado is a &#039;&#039;nuko&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Category:Fyra_Labs&amp;diff=71</id>
		<title>Category:Fyra Labs</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Category:Fyra_Labs&amp;diff=71"/>
		<updated>2023-06-07T12:34:33Z</updated>

		<summary type="html">&lt;p&gt;Madomado: create&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
	<entry>
		<id>https://wiki.fyralabs.com/index.php?title=Fyra_Labs&amp;diff=70</id>
		<title>Fyra Labs</title>
		<link rel="alternate" type="text/html" href="https://wiki.fyralabs.com/index.php?title=Fyra_Labs&amp;diff=70"/>
		<updated>2023-06-07T12:34:23Z</updated>

		<summary type="html">&lt;p&gt;Madomado: init&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Fyra Labs]]&lt;br /&gt;
&lt;br /&gt;
Fyra Labs is a company that strikes to mainly create advanced technology that prioritizes privacy and security. It mainly provides open-source and user-centric products.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Projects ==&lt;br /&gt;
&lt;br /&gt;
=== tauOS ===&lt;br /&gt;
[[tauOS]] is an operating system designed to be easy to use. It is still under heavy development. &lt;br /&gt;
&lt;br /&gt;
=== Ultramarine Linux ===&lt;br /&gt;
[[Ultramarine Linux]] is an Fedora-based, stable, easy-to-use Linux distribution designed to stay out of your way.&lt;br /&gt;
It has a wide range of target users, and comes with several tweaks preapplied to make initial setup and daily usage seamless.&lt;br /&gt;
&lt;br /&gt;
=== Terra ===&lt;br /&gt;
[[Terra]] is an RPM repository for software that goes beyond what&#039;s available in Fedora.&lt;br /&gt;
It is rolling-release and its infrastructure allows software to be easily packaged and maintained afterwards.&lt;/div&gt;</summary>
		<author><name>Madomado</name></author>
	</entry>
</feed>