agama/rust
Imobach González Sosa 781d9061e9
Update the changes files
2023-08-02 11:07:35 +01:00
..
agama-cli changes 2023-07-26 13:10:33 +02:00
agama-dbus-server changes 2023-07-26 13:10:33 +02:00
agama-derive Use an error instead of a &str in the settings module 2023-07-12 09:48:57 +01:00
agama-lib improve rustdoc for Answers 2023-07-25 16:47:44 +02:00
agama-locale-data Apply suggestions from Clippy 2023-07-13 13:32:43 +01:00
package Update the changes files 2023-08-02 11:07:35 +01:00
share Merge remote-tracking branch 'origin/master' into rust_questions 2023-06-07 16:58:38 +02:00
.gitignore Add the CLI to the repository 2023-03-30 14:01:33 +01:00
Cargo.lock implement answers support 2023-07-19 20:21:38 +02:00
Cargo.toml Move agama-network into agama-dbus-server 2023-06-22 06:27:39 +01:00
LICENSE Add the CLI to the repository 2023-03-30 14:01:33 +01:00
README.md Improve grammar 2023-05-24 10:17:00 +02:00

Agama Command Line and D-Bus Interface

This project aims to build a command-line interface for Agama, a service-based Linux installer featuring a nice web interface. The second aim is D-Bus service that does not depend heavily on YaST to reduce memory consumption and also provide better performance.

Code organization

We have set up Cargo workspace with three packages:

Status

Agama CLI is still a work in progress, although it is already capable of doing a few things:

  • Querying and setting the configuration for the users, storage and software services.
  • Handling the auto-installation profiles.
  • Triggering the probing and the installation processes.

Agama D-Bus API is also a work in progress, but it is already used by Agama.

Installation

You can grab the RPM package from the YaST:Head:Agama project.

If you prefer, you can install it from sources with Cargo:

git clone https://github.com/openSUSE/agama
cd rust
cargo install --path .

Running

For D-Bus API just run as root agama-dbus-server binary and it will properly attach to D-Bus.

For CLI take into account that you need to run agama-cli as root when you want to query or change the Agama configuration. Assuming that the Agama D-Bus service is running, the next command prints the current settings using JSON (hint: you can use jq to make result look better):

$ sudo agama --format json config show
{"user":{"fullName":"","userName":"","password":"","autologin":false},"software":{"product":""}}

To set one or multiple parameters, just use the config set command:

$ sudo agama config set software.product=Tumbleweed user.fullName="Jane Doe" user.userName="jane.doe" user.password="12345" user.autologin=true

The following operation can take some time. Please, make sure to read the Caveats section for more information.

$ sudo agama config show
{"user":{"fullName":"Jane Doe","userName":"jane.doe","password":"","autologin":true},"software":{"product":"Tumbleweed"}}

If, at some point you want to force a new probing, you can ask Agama to repeat the process again:

$ sudo agama probe

It is possible to handle auto-installation profiles too:

$ agama profile download http://192.168.122.1/profile.jsonnet
$ agama profile evaluate profile.jsonnet > profile.json
$ agama profile validate profile.json

Now that you have a ready to use profile, you can load it into Agama:

$ sudo agama config load profile.json

Building and running

You can build and run the project using the cargo command:

cargo build
sudo ./target/debug/agama --help

A Testing Backend

The previous section assumes that the Agama D-Bus services are running on the same machine.

For an alternative setup using a containerized backend, see How to set up a backend for testing this frontend.

Caveats

  • If no product is selected, the probe command fails.

Packaging

Packaging files live in the package' directory. Agama follows the [Rust packaging guidelines](https://en.opensuse.org/openSUSE:Packaging_Rust_Software). To test changes to the spec file, use a simple osc branch YaST:Head:Agama agama-cli. and copy the modified spec file to that branch. If it also needs specific code from a git branch, then modify _service' file and put the git branch name in the <revision> tag. Then run osc service runall.

Note: for openSUSE Leap, cargo_audit does not work with older Python, so comment out that service section for the test build. For the test build, use the usual `osc build' on modified sources.