• Stars
    star
    133
  • Rank 272,600 (Top 6 %)
  • Language
    Ruby
  • License
    GNU General Publi...
  • Created almost 3 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A service-based Linux installer

Checks

CI - Rust CI - Service CI - Web CI - Rubocop CI - Documentation Check CI - Integration Tests Coverage Status GitHub Pages

Translations

Weblate Update POT Weblate Merge PO Weblate Merge Product PO Translation Status

OBS systemsmanagement:Agama:Staging

Submit agama Submit cockpit-agama Submit rubygem-agama-yast Submit cockpit-agama-playwright

OBS Staging/agama OBS Staging/cockpit-agama OBS Staging/rubygem-agama-yast OBS Staging/agama-products-opensuse OBS Staging/cockpit-agama-playwright OBS Staging/agama-live

OBS systemsmanagement:Agama:Devel

GitHub tag (latest SemVer) Release

OBS Devel/agama OBS Devel/cockpit-agama OBS Devel/rubygem-agama-yast OBS Devel/agama-live

Agama: A Service-based Linux Installer

Agama is a new Linux installer born in the core of the YaST team. It is designed to offer re-usability, integration with third party tools and the possibility of building advanced user interfaces over it.

Product selection Installation overview
Click to show/hide more screenshots
Users page Storage settings
Installing Installation finished

Note for developers: For updating the screenshots see the integration test documentation.

Table of Content

Why a New Installer

This new project follows two main motivations: to overcome some of the limitations of YaST and to serve as installer for new projects like SUSE ALP (Adaptable Linux Platform).

YaST is a mature installer and control center for SUSE and openSUSE operating systems. With more than 20 years behind it, YaST is a competent and flexible installer able to cover uncountable use cases. But time goes by, and the good old YaST is starting to show its age in some aspects:

  • The architecture of YaST is complex and its code-base has too much technical debt.
  • Designing and building rich and modern user interfaces is a real challenge.
  • Sharing logic with other tools like Salt or Ansible is very difficult.
  • Some in-house solutions like libyui makes more difficult to contribute to the project.

SUSE is working on its next generation operating system called ALP (Adaptable Linux Platform). ALP is designed to be a lean core system, moving most of the software and workloads to containers and virtual machines. For some cases, for example cloud and virtual machines, ALP based systems will be deployed with auto-installable images. But still there are quite some situations in which ALP must be installed in a more traditional way. A clear example consists on installing over bare metal where some system analysis is required beforehand. Agama is also intended to cover such use cases for ALP, offering a minimal but powerful installer able to support a wide range of scenarios (e.g., RAID, encryption, LVM, network storage, etc).

Architecture

This project is designed as a service-client system, using a dedicated D-Bus server for process communication.

Architecture

Agama consists on a set of D-Bus services, a web client and a command-line interface. The services use YaST-based libraries under the hood, reusing a lot logic already provided by YaST. Currently Agama comes with six separate services, although the list can increase in the future:

  • Agama service: it is the main service which manages and controls the installation process.
  • Software service: configures the product and software to install.
  • Users service: manages first user creation and configuration for root.
  • Localization service: allows to configure the language and keyboard settings.
  • Storage service: analyzes and prepares the storage devices in order to perform the installation.
  • Questions service: helper service used for requesting information from clients.

Agama offers a web interface and its UI process uses the Cockpit's infrastructure to communicate with the D-Bus services.

How to run

There are two ways of running this project: a) by using a Agama live ISO image or b) by cloning and configuring the project.

Live ISO Image

The easiest way to give Agama a try is to grab a live ISO image and boot it in a virtual machine. This is also the recommended way if you only want to play and see it in action. If you want to have a closer look, then clone and configure the project as explained in the next section.

There are two flavors of live ISO images:

  • openSUSE: it can be used to install different openSUSE distributions, like Tumbleweed or Leap.
  • ALP: it allows to install the development version of SUSE ALP Dolomite.

You can download them from the openSUSE Build Service.

  • Make sure to download the correct ISO file according to your system architecture (eg. you would need to choose a file including x86_64 if you use an Intel or AMD 64-bit processor) and according to the system you want to install (openSUSE vs ALP).

Avahi/mDNS

The Live ISO is configured to use mDNS (sometimes called Avahi, Zeroconf, Bonjour) for hostname resolution. The reason is that it might be quite difficult to find out which URL should be used for connecting to a running Agama installer.

⚠️ Security Note ⚠️

Do not use the .local hostnames in untrusted networks (like public WiFi networks, shared networks), it is a security risk. An attacker can easily send malicious responses for the .local hostname resolutions and point you to a wrong Agama instance which could for example steal your root password!

Firewall Configuration

If you cannot connect to a server using the .local domain then maybe the firewall is blocking the traffic. Then you need to enable the mDNS traffic using these commands:

# enable the mDNS traffic in the current run
firewall-cmd --zone=public --add-service=mdns
# make the change permanent
firewall-cmd --permanent --zone=public --add-service=mdns
Using mDNS

The Live ISO by default uses the agama.local hostname. To connect to the running instance simply type https://agama.local in your browser. In most browsers the HTTPS is the default protocol so usually it is enough to just type agama.local.

If you run multiple Agama instances, each one will have a different name. The server appends a number to make it unique. So the second Agama instance gets the agama-2.local hostname.

If you are not sure whether there are multiple Agama instances running you scan the network, see the service advertising below.

Alternatively you can set a different hostname for each instance manually. Use the hostname= boot option to set a different hostname. For example set hostname=foo, hostname=bar and then use https://foo.local, https://bar.local URLs in the web browser to connect to the respective instance.

It is possible to change the hostname later if needed:

# set the new hostname
hostnamectl hostname <hostname>
# restart the avahi daemon server
systemctl restart avahi-daemon

The mDNS resolution also works for other services like ping or SSH. So you can use commands like:

ping agama.local
ssh [email protected]
Fallback

The mDNS approach is just an addition, one more possibility how to connect to the machine. If it does not work for you then you can always use the old good classic IP address approach.

Service Advertising

The Agama Live ISO also uses Avahi service advertising. With this you can easily search for all running Agama instances in the local network:

avahi-browse -t -r _agama._sub._https._tcp

The command will print the found servers and their hostnames and IP addresses.

Notes
  • mDNS works only in the same local network, it does not work over internet or separate network segments.
  • mDNS might not be supported in all systems or it might be blocked by firewall.
  • On mobile phones with Android OS mDNS is supported since Android version 12. (but this might be vendor dependent...).

Manual Configuration

You can run Agama from its sources by cloning and configuring the project:

$ git clone https://github.com/openSUSE/agama
$ cd agama
$ ./setup.sh

Then point your browser to http://localhost:9090/cockpit/@localhost/agama/index.html and that's all.

The setup.sh script installs the required dependencies to build and run the project and it also configures the Agama services and Cockpit. It uses sudo to install packages and files to system locations. The script is well commented so we refer you to it instead of repeating its steps here.

Regarding the web user interface, alternatively you can run a development server which works as a proxy for the cockpit server. See more details in the documentation.

To start or stop Agama D-Bus services at any time, use the agama systemd service:

sudo systemctl start agama

If something goes wrong, you can use journalctl to get Agama logs:

sudo journalctl -u agama

Another alternative is to run source checkout inside container so system is not affected by doing testing run beside real actions really done by installer. See more details in the documentation.

How to Contribute

If you want to contribute to Agama, then please open a pull request or report an issue. You can also get involved in our discussions.

For more details, please read the contributing guidelines.

Development Notes

More Repositories

1

open-build-service

Build and distribute Linux packages from sources in an automatic, consistent and reproducible way #obs
Ruby
852
star
2

osem

Open Source Event Manager. An event management tool tailored to Free and Open Source Software conferences.
Ruby
826
star
3

snapper

Manage filesystem snapshots and allow undo of system modifications
C++
736
star
4

libsolv

Library for solving packages and reading repositories
C
469
star
5

zypper

World's most powerful command line package manager
C++
354
star
6

opi

OBS Package Installer (CLI)
Python
235
star
7

hwinfo

Hardware information tool
C
220
star
8

kernel

Our patched kernel sources. This repository is generated from https://github.com/openSUSE/kernel-source
C
186
star
9

catatonit

A container init that is so simple it's effectively brain-dead.
C
179
star
10

imagewriter

Utility for writing raw disk images & hybrid isos to USB keys
C++
166
star
11

osc

The Command Line Interface to work with an Open Build Service
Python
151
star
12

artwork

Contains the collaborative work of the openSUSE marketing and artwork teams. Content is licensed under CC-BY-SA 3.0 (Creative Commons Attribution-ShareAlike 3.0 Unported License).
HTML
148
star
13

kernel-source

A quilt-like series of patches plus scripts and .spec files to produce the kernel RPM package. If you are looking for a ready-to-use kernel tree, have a look at https://github.com/openSUSE/kernel
Python
146
star
14

obs-build

OBS build script, can be used with OBS or stand alone
Perl
123
star
15

software-o-o

The site behind https://software.opensuse.org. It is the default web interface to download openSUSE distributions and to search for OBS packages. Packaged at https://build.opensuse.org/project/show/openSUSE:infrastructure:software.opensuse.org
SCSS
121
star
16

libzypp

ZYpp Package Management library
C++
107
star
17

transactional-update

Atomic updates for Linux operating systems
C++
106
star
18

wicked

Framework for network configuration
C
101
star
19

openSUSEway

dotfiles for Sway on openSUSE
CSS
92
star
20

docker-containers

Source files required used to build the official openSUSE containers for Docker
Dockerfile
88
star
21

libeconf

Enhanced config file parser, which merges config files placed in several locations into one.
C
80
star
22

libpathrs

C-friendly API to make path resolution safer on Linux.
Rust
70
star
23

SUSEPrime

Provide nvidia-prime like package for openSUSE
Shell
65
star
24

py2pack

Generate distribution packages from PyPI
Python
64
star
25

openSUSE-release-tools

Tools to aid in staging and release work for openSUSE/SUSE
Python
60
star
26

mentoring

The openSUSE Developer Mentoring Program
JavaScript
60
star
27

daps

DocBook Authoring and Publishing Suite (DAPS)
Shell
60
star
28

microos-toolbox

Script to run a toolbox container on openSUSE MicroOS
Shell
54
star
29

Customize-IBus

Full customization of appearance, behavior, system tray and input source indicator for IBus. (深度定制 IBus 的外观、行为、系统托盘以及输入指示)
JavaScript
54
star
30

landing-page

openSUSE landing page which features Tumbleweed and Leap
HTML
50
star
31

openSUSE-docs-revamped-temp

We're creating new, refreshed community user guides and documentation for the openSUSE distributions, centered on Tumbleweed, catering for inexperienced users and veterans alike. Target release: 2021
HTML
47
star
32

yomi

Yet one more installer
Python
41
star
33

trollolo

Trello command line client
Ruby
40
star
34

MirrorCache

Download Redirector
Perl
36
star
35

get-o-o

Website that provides detailed information about openSUSE distributions
HTML
34
star
36

docker-containers-build

openSUSE container builds used by Docker's stackbrew system
33
star
37

cheetah

Simple library for executing external commands safely and conveniently
Ruby
32
star
38

obs-docu

Official Open Build Service Documentation. Content gets reviewed and edited. Generated books are available at http://www.openbuildservice.org
32
star
39

obs-service-tar_scm

An OBS source service: fetches code from any SCM and archives it
Python
31
star
40

cepces

cepces is an application for enrolling certificates through CEP and CES.
Python
30
star
41

branding

openSUSE branding for the distribution - both branding-openSUSE and branding-baseonopensuse
29
star
42

supportutils

SUSE Linux Enterprise support utilities. Gathers system information.
Shell
28
star
43

scanny

Scanny — Ruby on Rails security scanner
Ruby
27
star
44

libstorage-ng

Next generation libstorage
C++
25
star
45

cavil

The legal review app used by SUSE Lawyers
Perl
25
star
46

sdbootutil

Shell
25
star
47

health-checker

Systemd service to check, if the system does come up correct after an update
Shell
25
star
48

vagrant

openSUSE for Vagrant
Shell
25
star
49

helm-mirror

Helm plugin used to mirror repositories
Go
24
star
50

salt-toaster

Salt Toaster: An ultimate test suite for Salt
Python
24
star
51

multipath-tools-pre2021

Old (pre-2021) SUSE/SLES fork of Linux multipath tools. See github.com/openSUSE/multipath-tools for current code.
C
24
star
52

fuel-ignition

Easily generate new or edit existing Ignition configs. No more fiddling around with JSON or Butane.
Vue
24
star
53

ca-certificates

Utilities for system wide CA certificate installation
Python
23
star
54

wiki

openSUSE Wiki
PHP
23
star
55

salt

openSUSE and SUSE patches and backports for SaltStack
Python
22
star
56

kdump

kernel dump helpers
Shell
21
star
57

python-rpm-macros

Multi-Python, Single-Spec macros generator
Lua
21
star
58

news-o-o

📰 News from the openSUSE Land
HTML
21
star
59

rapidquilt

Rust
20
star
60

mksusecd

Script to create a SUSE installation ISO image.
Perl
19
star
61

IBus-Theme-Hub

This is the hub for IBus theme that can be used by Customize IBus GNOME Shell Extension.(可被自定义IBus GNOME Shell 扩展使用的IBus主题集合)
CSS
19
star
62

osc2

The next Command Line Interface to work with an openSUSE Build Service
Python
17
star
63

vagrant-ceph

Builds a cluster of servers using libvirt. Supports multiple configurations.
Ruby
17
star
64

kmozillahelper

KDE mozilla integration
C++
17
star
65

gfxboot

Graphical boot screen for GRUB, LILO, and SYSLINUX
HTML
17
star
66

travel-support-program

A rails app to support the travel support program of openSUSE (TSP)
Ruby
17
star
67

linuxrc

Installation Setup
C
16
star
68

installation-images

openSUSE Installation Images
Perl
16
star
69

obs-landing

The Open Build Service project landing page
HTML
16
star
70

old-landing-page

Former opensuse.org landing page
JavaScript
15
star
71

combustion

Configure MicroOS on the first boot
Shell
15
star
72

gitarro

run all your test against a GitHub Pull request
Ruby
15
star
73

IBus-Theme-Tools

Generate the IBus GTK or GNOME Shell theme from existing themes. (从现有主题中生成 IBus GTK 或 GNOME Shell 主题)
Python
15
star
74

nailed

Collect and visualize product related data from Bugzilla and Github
Ruby
14
star
75

jeos-firstboot

Lightweight firstboot wizard systemd service for SLE and openSUSE JeOS Images
Shell
14
star
76

orthos2

Orthos is a machine administration tool.
Python
14
star
77

suse-vale-styleguide

Humble style guide for technical writers by a technical writer
14
star
78

containers-systemd

Systemd service files to run various openSUSE containers by systemd and podman
13
star
79

opensuse-themes

Themes used in openSUSE and OBS
Makefile
13
star
80

obsgit

Simple bridge between Open Build Server and git
Python
13
star
81

firefox-maintenance

Shell
13
star
82

chameleon

openSUSE Design System for Web
SCSS
13
star
83

openSUSE-repos

openSUSE-repos
Shell
12
star
84

gloves

System configuration library, started by YaST developers
Ruby
12
star
85

obs-sign

sign daemon and client for remote gpg signing.
C
12
star
86

portusctl

A client for your Portus instance
Go
12
star
87

obs-service-format_spec_file

An OBS source service: reformats a spec file to SUSE standard
Python
12
star
88

build-compare

Compare content of rpm package and find differences inside the files.
Shell
12
star
89

suse-xsl

DocBook XSL Stylesheets for SUSE branding
XSLT
11
star
90

defrag-api

Python
11
star
91

os-update

Update automatically package based OS and reboot if necessary
Shell
11
star
92

suseviclient

SUSE VI Client: Lightweight tool for ESXi management from Linux box
JavaScript
11
star
93

perl-bootloader

Perl modules for configuring various boot loaders
Perl
11
star
94

cockpit-wicked

Cockpit module to configure the network using Wicked.
JavaScript
11
star
95

Mojo-IOLoop-ReadWriteProcess

Execute external programs or internal code blocks as separate process
Perl
10
star
96

sat-solver

Library for solving packages and reading repositories (superseded by libsolv)
C
10
star
97

patterns

openSUSE patterns
Python
10
star
98

sysconfig

Shell
10
star
99

container-images

Official openSUSE Container Images Definitions
Shell
10
star
100

release-notes-openSUSE

Release Notes for openSUSE
Makefile
10
star