Skip to content

Commit

Permalink
Merge branch 'master' into storage-config-ui-sync-20250219
Browse files Browse the repository at this point in the history
  • Loading branch information
dgdavid committed Feb 19, 2025
2 parents 1fba4a7 + 03e4fdd commit af8b78a
Show file tree
Hide file tree
Showing 64 changed files with 986 additions and 109 deletions.
59 changes: 59 additions & 0 deletions .github/workflows/ci-live.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: CI - ISO definition

on:
push:
paths:
# NOTE: GitHub Actions do not allow using YAML references, the same path
# list is used below for the pull request event. Keep both lists in sync!!

# this file as well
- .github/workflows/ci-live.yml
# any change in the service subfolder
- live/**

pull_request:
paths:
# NOTE: GitHub Actions do not allow using YAML references, the same path
# list is used above for the push event. Keep both lists in sync!!

# this file as well
- .github/workflows/ci-live.yml
# any change in the service subfolder
- live/**

# allow running manually
workflow_dispatch:

jobs:
ruby_tests:
runs-on: ubuntu-latest
env:
COVERAGE: 1

defaults:
run:
working-directory: ./live

strategy:
fail-fast: false
matrix:
distro: [ "tumbleweed" ]

container:
image: registry.opensuse.org/yast/head/containers_${{matrix.distro}}/yast-ruby

steps:

- name: Git Checkout
uses: actions/checkout@v4

- name: Configure and refresh repositories
# disable unused repositories to have faster refresh
run: zypper modifyrepo -d repo-non-oss repo-openh264 repo-update && zypper ref

- name: Install Ruby development files
run: zypper --non-interactive install
make

- name: Run the tests
run: make check
25 changes: 17 additions & 8 deletions autoinstallation/bin/agama-auto
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,32 @@ set -ex
# Temporarily skip the AutoYaST XML validation
export YAST_SKIP_XML_VALIDATION=1

if [ -z "$1" ]
then
url=$(awk -F 'agama.auto=' '{sub(/ .*$/, "", $2); print $2}' < /proc/cmdline)
if [ -z "$1" ]; then
url=$(grep 'agama.auto=' </run/agama/cmdline.d/agama.conf | awk -F 'agama.auto=' '{sub(/ .*$/, "", $2); print $2}')
else
url="$1"
fi

if [ -z "$url" ]
then
if [ -z "$url" ]; then
echo "no autoinstallation profile"
exit 0
fi

method=$(grep 'agama.finish=' </run/agama/cmdline.d/agama.conf | awk -F 'agama.finish=' '{sub(/ .*$/, "", $2); print $2}')

echo "Using the profile at $url"

case "$url" in
* )
/usr/bin/agama profile import "$url"
/usr/bin/agama install;;
*)
/usr/bin/agama profile import "$url"
/usr/bin/agama install
case "$method" in
"stop" | "halt" | "poweroff")
/usr/bin/agama finish $method
;;
*)
/usr/bin/agama finish
;;
esac
;;
esac
9 changes: 9 additions & 0 deletions autoinstallation/package/agama-auto.changes
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
-------------------------------------------------------------------
Thu Feb 13 12:10:11 UTC 2025 - Knut Anderssen <[email protected]>

- gh#agama-project/agama#1970
- Adapted agama-auto script to reboot by default once the
unattended installation is finished.
- Allow to modify the finish method through the 'agama.finish'
kernel cmdline argument.

-------------------------------------------------------------------
Fri Sep 20 11:27:29 UTC 2024 - Imobach Gonzalez Sosa <[email protected]>

Expand Down
2 changes: 2 additions & 0 deletions doc/dbus/bus/org.opensuse.Agama.Manager1.bus.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
<arg name="tarball_filesystem_path" direction="out" type="s"/>
</method>
<method name="Finish">
<arg name="method" direction="in" type="s"/>
<arg name="result" direction="out" type="b"/>
</method>
<property type="aa{sv}" name="InstallationPhases" access="read"/>
<property type="u" name="CurrentInstallationPhase" access="read"/>
Expand Down
2 changes: 2 additions & 0 deletions doc/dbus/bus/org.opensuse.Agama1.Manager.bus.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@
<arg name="tarball_filesystem_path" direction="out" type="s"/>
</method>
<method name="Finish">
<arg name="method" direction="in" type="s"/>
<arg name="result" direction="out" type="b"/>
</method>
<property type="aa{sv}" name="InstallationPhases" access="read"/>
<property type="u" name="CurrentInstallationPhase" access="read"/>
Expand Down
21 changes: 21 additions & 0 deletions doc/dbus/org.opensuse.Agama1.Manager.doc.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,27 @@
<arg name="tarball_filesystem_path" direction="out" type="s"/>
</method>
<method name="Finish">
<!--
Finish method.
Possible values are: "stop", "reboot", "poweroff", "halt"
* *stop*:
Finish the installation without rebooting or shutting down the machine in order
to inspect it.
* *reboot*:
Finish the installation rebooting into the installed system.
* *poweroff*:
Finish the installation calling shutdown -P
* *halt*:
Finish the installation calling shutdown -H
-->
<arg name="method" direction="in" type="s"/>
<arg name="result" direction="out" type="b"/>
</method>

<!--
Expand Down
3 changes: 3 additions & 0 deletions live/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,7 @@ build: $(DESTDIR)
$(MAKE) all
(cd $(DESTDIR) && osc -A $(OBS_API) build -M $(FLAVOR) $(OSC_OPTS) $(OBS_TARGET) $(ARCH) $(KIWI_FILE))

check:
for i in ./test/*_test.*; do $${i}; done

.PHONY: build all clean
1 change: 1 addition & 0 deletions live/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ This directory contains a set of files that are used to build the Agama Live ISO
a separate [PXE documentation](PXE.md) for more details about the PXE boot
- [config-cdroot](config-cdroot) subdirectory contains file which are copied to the uncompressed
root of the ISO image, the files can be accessed just by mounting the ISO file or the DVD medium
- [test](test) subdirectory contains tests to verify correctness of content. Can be run with `make check`

## Building the sources

Expand Down
21 changes: 21 additions & 0 deletions live/root/etc/systemd/system/agama-cmdline-process.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
[Unit]
Description=Agama kernel cmdline processing

# have to be after network to be able to download info files
# TODO: what to do in air gap scenario where we still need process cmdline?
After=network-online.target

# before starting the Agama servers so they read configuration parsed
Before=agama-web-server.service
Before=agama.service
Before=x11-autologin.service

[Service]
Type=oneshot
Environment=TERM=linux
ExecStart=agama-kernel-cmdline.sh
StandardInput=tty
TimeoutSec=0

[Install]
WantedBy=default.target
8 changes: 3 additions & 5 deletions live/root/etc/systemd/system/agama-self-update.service
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@ Description=Agama self-update

After=network-online.target

# and after we process agama params like info which can contain password
After=agama-cmdline-process.service

# before starting the Agama servers so they use the new packages
Before=agama-web-server.service
Before=agama.service
Expand All @@ -11,11 +14,6 @@ Before=x11-autologin.service
Before=live-password-dialog.service
Before=live-password-systemd.service

# kernel command line option
ConditionKernelCommandLine=|agama.self_update
# linuxrc/YaST backward compatibility
ConditionKernelCommandLine=|agama.selfupdate

[Service]
Type=oneshot
Environment=TERM=linux
Expand Down
5 changes: 2 additions & 3 deletions live/root/etc/systemd/system/live-password-cmdline.service
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,8 @@ Before=agama-web-server.service
Before=live-password-dialog.service
Before=live-password-systemd.service

# plain text password or hashed password passed via kernel command line
ConditionKernelCommandLine=|live.password
ConditionKernelCommandLine=|live.password_hash
# and after we process agama params like info which can contain password
After=agama-cmdline-process.service

[Service]
ExecStart=live-password --kernel
Expand Down
4 changes: 2 additions & 2 deletions live/root/etc/systemd/system/live-password-dialog.service
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ [email protected]
Before[email protected]
Before[email protected]

# kernel command line option
ConditionKernelCommandLine=live.password_dialog
# and after we process agama params like info which can contain kernel parameters
After=agama-cmdline-process.service

[Service]
Type=oneshot
Expand Down
4 changes: 2 additions & 2 deletions live/root/etc/systemd/system/live-password-systemd.service
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ [email protected]
Before[email protected]
Before[email protected]

# kernel command line option
ConditionKernelCommandLine=live.password_systemd
# and after we process agama params like info which can contain kernel parameters
After=agama-cmdline-process.service

[Service]
Type=oneshot
Expand Down
4 changes: 4 additions & 0 deletions live/root/usr/bin/agama-kernel-cmdline.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#! /bin/sh

kernel-cmdline-conf.sh
info-cmdline-conf.sh
4 changes: 4 additions & 0 deletions live/root/usr/bin/agama-self-update
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@
# This script updates the Agama packages in the Live system from the
# Agama Devel OBS project.

# check if self-update is required
if ! grep -q "[[:space:]^]agama.self_update=1\([[:space:]]\|$\)" /run/agama/cmdline.d/agama.conf; then
exit 0
fi

# first try a quick and simple solution, refreshing the distributions repository takes a
# lot of time so try using only the agama-devel for update
Expand Down
28 changes: 28 additions & 0 deletions live/root/usr/bin/info-cmdline-conf.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#! /bin/sh

# Script that expand agama.info parameter by downloading its file and appending it to agama.conf
# the info content is stored in info.conf

set -e

TARGET="${1:-/run/agama/cmdline.d/agama.conf}"
INFO_CONTENT="${2:-/run/agama/cmdline.d/info.conf}"

expand_info_arg() {
INFO_URL=$(sed -n 's/\(.*[[:space:]]\|^\)agama\.info=\([^[:space:]]\+\).*/\2/p' "$TARGET")
if [ -z "${INFO_URL}" ]; then
return 0
fi

# TODO: should we use also --location-trusted if info file url contain user and password?
# if so check with security team
curl --location --silent "${INFO_URL}" > "${INFO_CONTENT}"
# remove info param
sed -in 's/\([[:space:]]\|^\)agama\.info=[^[:space:]]\+//' "${TARGET}"
# and add content of info file
cat "${INFO_CONTENT}" >> "${TARGET}"

return 0
}

expand_info_arg
34 changes: 34 additions & 0 deletions live/root/usr/bin/kernel-cmdline-conf.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#! /bin/sh

# Script to clean kernel command line from agama specific parameters. Result is later used for bootloader proposal.

SOURCE="${1:-/proc/cmdline}"
TARGET="${2:-/run/agama/cmdline.d/kernel.conf}"

write_kernel_args() {
DIR=$(dirname "${TARGET}")
mkdir -p "$DIR"
# ensure that kernel cmdline line is created to avoid reading agama params
# if there is no kernel params
touch "${TARGET}"

for _i in $(cat "${SOURCE}"); do
case ${_i} in
# remove all agama kernel params
# Add here also all linuxrc supported parameters
LIBSTORAGE_* | YAST_* | agama* | Y2* | ZYPP_* | autoyast* )
_found=1
;;
esac

if [ -z "$_found" ]; then
echo "Non-Agama parameter found ($_i)"
echo -n " $_i" >>"${TARGET}"
fi
unset _found
done

return 0
}

write_kernel_args
18 changes: 14 additions & 4 deletions live/root/usr/bin/live-password
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ msg_box() {
}

ask_password() {
# check if user wants dialog password
if ! grep -q "[[:space:]^]live.password_dialog=1\([[:space:]]\|$\)" /run/agama/cmdline.d/agama.conf; then
exit 0
fi

if ! PWD1=$(dialog --keep-tite --title "$TITLE" --backtitle "$BTITLE" --stdout --insecure --passwordbox "Password:" 8 40); then
confirm_exit
ask_password
Expand All @@ -36,7 +41,7 @@ ask_password() {
confirm_exit
ask_password
fi

if [ "$PWD1" != "$PWD2" ]; then
msg_box "Passwords do not match.\nPlease try again."
ask_password
Expand All @@ -51,6 +56,10 @@ ask_password() {

# functions for entering the password using the "systemd-ask-password" tool
ask_password_systemd() {
# check if user wants systemd password
if ! grep -q "[[:space:]^]live.password_systemd=1\([[:space:]]\|$\)" /run/agama/cmdline.d/agama.conf; then
exit 0
fi
if ! PWD1=$(systemd-ask-password --timeout=0 "Set login password: "); then
exit 1
fi
Expand Down Expand Up @@ -141,13 +150,14 @@ random_password() {
}

if [ "$1" = "--kernel" ]; then
# get the password from the kernel command line
PWD=$(awk -F 'live.password=' '{sub(/ .*$/, "", $2); print $2}' < /proc/cmdline)
# get the password from the kernel command line. It can contain newlines
PWD=$(grep 'live.password=' < /run/agama/cmdline.d/agama.conf | awk -F 'live.password=' '{sub(/ .*$/, "", $2); print $2}')
if [ -n "$PWD" ]; then
echo "$PWD" | passwd --stdin
fi

PWD=$(awk -F 'live.password_hash=' '{sub(/ .*$/, "", $2); print $2}' < /proc/cmdline)
# get the password hash from the kernel command line. It can contain newlines
PWD=$(grep 'live.password_hash=' < /run/agama/cmdline.d/agama.conf | awk -F 'live.password_hash=' '{sub(/ .*$/, "", $2); print $2}')
if [ -n "$PWD" ]; then
usermod -p "$PWD" root
fi
Expand Down
Loading

0 comments on commit af8b78a

Please sign in to comment.