Fix Tumbleweed (hopefully)

Move Tumbleweed to using the Agama installer
Change it from fully dynamic to using the update script
This commit is contained in:
Greg Hellings
2025-08-19 20:13:08 -05:00
parent 8ac704a100
commit 88e74c95ed
5 changed files with 112 additions and 165 deletions
-3
View File
@@ -1,8 +1,6 @@
distro = "opensuse" distro = "opensuse"
version = "16.0" version = "16.0"
iso = { iso = {
#url = "https://download.opensuse.org/distribution/leap/16.0/installer/iso/agama-installer.x86_64-Leap_16.0.iso"
#checksum = "d3e7a86c4ab7296480ad41a2ca30bde5cad0ff2210b145dd2011403f648f76cb"
url = "https://download.opensuse.org/distribution/leap/16.0/installer/iso/agama-installer.x86_64-17.0.0-Leap_16.0-Build151.4.iso" url = "https://download.opensuse.org/distribution/leap/16.0/installer/iso/agama-installer.x86_64-17.0.0-Leap_16.0-Build151.4.iso"
checksum = "d3e7a86c4ab7296480ad41a2ca30bde5cad0ff2210b145dd2011403f648f76cb" checksum = "d3e7a86c4ab7296480ad41a2ca30bde5cad0ff2210b145dd2011403f648f76cb"
} }
@@ -16,6 +14,5 @@ boot_command = [
"<leftCtrlOn>x<leftCtrlOff>" "<leftCtrlOn>x<leftCtrlOff>"
] ]
boot_wait = "8s" boot_wait = "8s"
cd_files = [ "distros/opensuse/16.0/http/" ]
http_directory = "distros/opensuse/16.0/http/" http_directory = "distros/opensuse/16.0/http/"
vbox_os_type = "OpenSUSE_Leap_64" vbox_os_type = "OpenSUSE_Leap_64"
@@ -1,37 +0,0 @@
#!env bash
set -x
name="${0%.sh}"
base="https://download.opensuse.org/tumbleweed/iso/openSUSE-Tumbleweed-DVD-x86_64-Current.iso"
# Working directory
tmp="$(mktemp -d)"
checksums="${tmp}/checksums"
# Read the SHA256 sum value
sums="${base}.sha256"
until curl -f -L -o "${checksums}" "${sums}"; do
sleep 1
done
sha="$(cut -d' ' -f 1 "${checksums}")"
cat << EOF > "${name}"
distro = "opensuse"
version = "tumbleweed"
iso = {
url = "${base}"
checksum = "${sha}"
}
boot_command = [
"e<wait>",
"<down><down><down><down><end><wait>",
" autoyast=http://{{ .HTTPIP }}:{{ .HTTPPort }}/autoinst.xml textmode=1<wait>",
"<leftCtrlOn>x<leftCtrlOff>"
]
http_directory = "distros/opensuse/tumbleweed/http/"
vbox_os_type = "OpenSUSE_Tumbleweed_64"
EOF
rm -r "${tmp}"
@@ -1,125 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE profile>
<!-- https://doc.opensuse.org/projects/autoyast/#CreateProfile-General -->
<profile xmlns="http://www.suse.com/1.0/yast2ns"
xmlns:config="http://www.suse.com/1.0/configns">
<general>
<mode>
<confirm config:type="boolean">false</confirm>
<final_reboot config:type="boolean">true</final_reboot>
</mode>
<!-- self_update config:type="boolean">true</self_update -->
</general>
<groups config:type="list">
<group>
<groupname>wheel</groupname>
<userlist>vagrant</userlist>
</group>
</groups>
<firewall>
<enable_firewall config:type="boolean">true</enable_firewall>
<default_zone>external</default_zone>
<zones config:type="list">
<zone>
<name>public</name>
<interfaces config:type="list">
<interface>eth0</interface>
</interfaces>
<services config:type="list">
<service>ssh</service>
</services>
</zone>
</zones>
</firewall>
<partitioning config:type="list">
<drive>
<use>all</use>
<partitions config:type="list">
<partition>
<mount>/boot</mount>
<size>512MiB</size>
</partition>
<partition>
<mount>/</mount>
<size>max</size>
</partition>
</partitions>
</drive>
</partitioning>
<language>
<language>en_US</language>
</language>
<networking>
<backend>network_manager</backend>
</networking>
<services-manager>
<services>
<enable config:type="list">
<service>sshd</service>
</enable>
</services>
</services-manager>
<software>
<packages config:type="list">
<package>openssh</package>
<package>sudo</package>
</packages>
<do_online_update config:type="boolean">true</do_online_update>
<install_recommended config:type="boolean">false</install_recommended>
<products config:type="list">
<product>openSUSE</product>
</products>
</software>
<timezone>
<hwclock>UTC</hwclock>
<timezone>UTC</timezone>
</timezone>
<users config:type="list">
<user>
<username>root</username>
<user_password>vagrant</user_password>
<encrypted config:type="boolean">false</encrypted>
</user>
<user>
<username>vagrant</username>
<user_password>vagrant</user_password>
<encrypted config:type="boolean">false</encrypted>
</user>
</users>
<scripts>
<pre-scripts config:type="list">
<script>
<interpreter>shell</interpreter>
<filename>start.sh</filename>
<!-- <location>some_url</location> -->
<source>
<![CDATA[
#!/bin/sh
echo "Starting installation"
exit 0
]]>
</source>
</script>
</pre-scripts>
</scripts>
<files config:type="list">
<file>
<file_path>/etc/sudoers.d/vagrant</file_path>
<file_contents>
<![CDATA[
Defaults:vagrant !requiretty
vagrant ALL=(ALL) NOPASSWD: ALL
root ALL=(ALL) NOPASSWD: ALL
]]>
</file_contents>
<file_permissions>440</file_permissions>
<file_owner>root</file_owner>
</file>
<file>
<file_path>/home/vagrant/.ssh/authorized_keys</file_path>
<file_permissions>600</file_permissions>
<file_owner>vagrant</file_owner>
<file_location>https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub</file_location>
</file>
</files>
</profile>
@@ -0,0 +1,88 @@
// For more docs, check out
// https://agama-project.github.io/docs/user/profile/dynamic
// This is a Jsonnet file. Please, check https://jsonnet.org/ for more
// information about the language.
// For the schema, see
// https://github.com/openSUSE/agama/blob/master/rust/agama-lib/share/profile.schema.json
// The "hw.libsonnet" file contains hardware information from the "lshw" tool.
// Agama generates this file at runtime by running (with root privileges):
//
// lshw -json
//
// There are included also helpers to search this hardware tree. To see helpers check
// "/usr/share/agama-cli/agama.libsonnet"
local agama = import 'hw.libsonnet';
// Find the biggest disk which is suitable for installing the system.
local findBiggestDisk(disks) =
local sizedDisks = std.filter(function(d) std.objectHas(d, 'size'), disks);
local sorted = std.sort(sizedDisks, function(x) -x.size);
sorted[0].logicalname;
// Find how much physical memory system has.
local memory = agama.findByID(agama.lshw, 'memory').size;
{
product: {
id: 'Tumbleweed',
},
software: {
patterns: [
],
},
user: {
fullName: 'vagrant',
userName: 'vagrant',
password: 'vagrant',
},
root: {
password: 'vagrant',
},
localization: {
language: 'en_US',
keyboard: 'us',
},
bootloader: {
extraKernelParams: "nomodeset"
},
storage: {
boot: {
configure: true,
device: "boot",
},
drives: [{
search: findBiggestDisk(agama.selectByClass(agama.lshw, 'disk')),
alias: "boot",
ptableType: 'gpt',
partitions: [{
"search": "*",
"delete": true,
},{
"generate": "default"
}],
}]
},
scripts: {
post: [ {
name: 'configure-vagrant',
chroot: true,
content: |||
#!/bin/bash
# Configure the insecure Vagrant SSH key
mkdir -p /home/vagrant/.ssh
curl -o /home/vagrant/.ssh/authorized_keys https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub
chown -R vagrant /home/vagrant/.ssh
chmod 600 /home/vagrant/.ssh
# Start services
systemctl enable sshd
# Configure sudo access for the vagrant user
cat << EOF > /etc/sudoers.d/00_vagrant
Defaults:vagrant !requiretty
vagrant ALL=(ALL) NOPASSWD: ALL
root ALL=(ALL) NOPASSWD: ALL
EOF
|||,
} ]
},
}
+24
View File
@@ -0,0 +1,24 @@
#!env bash
set -exo pipefail
dir="$(cd "$(dirname "${0}")"; pwd)"
base="https://download.opensuse.org/repositories/systemsmanagement:/Agama:/Devel/images/iso/agama-installer.x86_64-17.0.0-openSUSE-Build6.13.iso"
# Working directory
tmp="$(mktemp -d)"
trap "rm -rf '${tmp}'" EXIT
checksums="${tmp}/checksums"
# Read the SHA256 sum value
sums="${base}.sha256"
until curl -f -L -o "${checksums}" "${sums}"; do
sleep 1
done
sha="$(cut -d' ' -f 1 "${checksums}")"
sed -E -i \
-e "s,( checksum *=).*$,\1 \"$sha\","
rm -r "${tmp}"