Compare commits

..

No commits in common. "ubuntu/plucky" and "ubuntu/1%21.04.1" have entirely different histories.

336 changed files with 620 additions and 6288 deletions

View File

@ -5,69 +5,13 @@
all:
# Desktop file
(cd lubuntu/po/ && make)
(cd kubuntu/po/ && make)
(cd ubuntuunity/po && make)
(cd ubuntustudio/po/ && make)
# Slideshow
(cd lubuntu/branding/lubuntu/lang/ && make)
# basicwallpaper
(cd common/basicwallpaper && mkdir build && cd build && cmake .. -DCMAKE_BUILD_TYPE=Release && make)
# Lubuntu OEM setup stuff
(cd lubuntu && mkdir oemconfig && cd oemconfig && mkdir -p usr/bin && mkdir -p etc/calamares && mkdir -p usr/share/xsessions && mkdir -p usr/libexec && mkdir -p etc && mkdir -p usr/share/applications && mkdir -p home/oem/Desktop)
(cp lubuntu/calamares-logs-helper lubuntu/oemconfig/usr/bin/)
(cp lubuntu/oem/sddm.conf lubuntu/oemconfig/etc/)
(cp lubuntu/oem/sudoers.oem lubuntu/oemconfig/etc/ && chmod 400 lubuntu/oemconfig/etc/sudoers.oem)
(cp lubuntu/oem/calamares-oemfinish.sh lubuntu/oemconfig/usr/libexec/)
(cp lubuntu/oem/calamares-finish-oem lubuntu/oemconfig/usr/bin/)
(cp lubuntu/oem/calamares-finish-oem.desktop lubuntu/oemconfig/usr/share/applications/)
(cp -r lubuntu/branding lubuntu/oemconfig/etc/calamares/)
(cp -r lubuntu/oem/modules/ lubuntu/oemconfig/etc/calamares/)
(cp lubuntu/oem/settings.conf lubuntu/oemconfig/etc/calamares/)
(cp lubuntu/oem/lubuntu-oem-env/lubuntu-oem-environment.desktop lubuntu/oemconfig/usr/share/xsessions/)
(cp lubuntu/oem/lubuntu-oem-env/start-lubuntu-oem-env lubuntu/oemconfig/usr/libexec/)
(cp common/basicwallpaper/build/basicwallpaper lubuntu/oemconfig/usr/bin/)
(cp lubuntu/oem/calamares-finish-oem.desktop lubuntu/oemconfig/home/oem/Desktop/)
(fakeroot bash -c "chown -R root:root lubuntu/oemconfig && tar cvzf lubuntu/oemconfig.tar.gz lubuntu/oemconfig")
# Kubuntu OEM setup stuff
(cd kubuntu && mkdir oemconfig && cd oemconfig && mkdir -p usr/bin && mkdir -p etc/calamares && mkdir -p usr/share/xsessions && mkdir -p usr/libexec && mkdir -p etc && mkdir -p usr/share/applications && mkdir -p home/oem/Desktop)
(cp kubuntu/calamares-logs-helper kubuntu/oemconfig/usr/bin/)
(cp kubuntu/oem/sddm.conf kubuntu/oemconfig/etc/)
(cp kubuntu/oem/sudoers.oem kubuntu/oemconfig/etc/ && chmod 400 kubuntu/oemconfig/etc/sudoers.oem)
(cp kubuntu/oem/calamares-oemfinish.sh kubuntu/oemconfig/usr/libexec/)
(cp kubuntu/oem/calamares-finish-oem kubuntu/oemconfig/usr/bin/)
(cp kubuntu/oem/calamares-finish-oem.desktop kubuntu/oemconfig/usr/share/applications/)
(cp -r kubuntu/branding kubuntu/oemconfig/etc/calamares/)
(cp -r kubuntu/oem/modules/ kubuntu/oemconfig/etc/calamares/)
(cp kubuntu/oem/settings.conf kubuntu/oemconfig/etc/calamares/)
(cp kubuntu/oem/kubuntu-oem-env/kubuntu-oem-environment.desktop kubuntu/oemconfig/usr/share/xsessions/)
(cp kubuntu/oem/kubuntu-oem-env/start-kubuntu-oem-env kubuntu/oemconfig/usr/libexec/)
(cp common/basicwallpaper/build/basicwallpaper kubuntu/oemconfig/usr/bin/)
(cp kubuntu/oem/calamares-finish-oem.desktop kubuntu/oemconfig/home/oem/Desktop/)
(fakeroot bash -c "chown -R root:root kubuntu/oemconfig && tar cvzf kubuntu/oemconfig.tar.gz kubuntu/oemconfig")
# Ubuntu Unity OEM setup stuff
(cd ubuntuunity && mkdir oemconfig && cd oemconfig && mkdir -p usr/bin && mkdir -p etc/calamares && mkdir -p usr/share/xsessions && mkdir -p usr/libexec && mkdir -p etc/lightdm && mkdir -p usr/share/applications && mkdir -p home/oem/Desktop)
(cp ubuntuunity/calamares-logs-helper ubuntuunity/oemconfig/usr/bin/)
(cp ubuntuunity/oem/lightdm.conf ubuntuunity/oemconfig/etc/lightdm/)
(cp ubuntuunity/oem/sudoers.oem ubuntuunity/oemconfig/etc/ && chmod 400 kubuntu/oemconfig/etc/sudoers.oem)
(cp ubuntuunity/oem/calamares-oemfinish.sh ubuntuunity/oemconfig/usr/libexec/)
(cp ubuntuunity/oem/calamares-finish-oem ubuntuunity/oemconfig/usr/bin/)
(cp ubuntuunity/oem/calamares-finish-oem.desktop ubuntuunity/oemconfig/usr/share/applications/)
(cp -r ubuntuunity/branding ubuntuunity/oemconfig/etc/calamares/)
(cp -r ubuntuunity/oem/modules/ ubuntuunity/oemconfig/etc/calamares/)
(cp ubuntuunity/oem/settings.conf ubuntuunity/oemconfig/etc/calamares/)
(cp ubuntuunity/oem/ubuntu-unity-oem-env/ubuntu-unity-oem-environment.desktop ubuntuunity/oemconfig/usr/share/xsessions/)
(cp ubuntuunity/oem/ubuntu-unity-oem-env/start-ubuntu-unity-oem-env ubuntuunity/oemconfig/usr/libexec/)
(cp common/basicwallpaper/build/basicwallpaper ubuntuunity/oemconfig/usr/bin/)
(cp ubuntuunity/oem/calamares-finish-oem.desktop ubuntuunity/oemconfig/home/oem/Desktop/)
(fakeroot bash -c "chown -R root:root ubuntuunity/oemconfig && tar cvzf ubuntuunity/oemconfig.tar.gz ubuntuunity/oemconfig")
(cd ubuntustudio/branding/ubuntustudio/lang && make)
# Get rid of the unnecessary files
find lubuntu/ -type f -iname "*.in" | xargs rm -f
find lubuntu/ -type f -iname "Makefile" | xargs rm -f
find kubuntu/ -type f -iname "*.in" | xargs rm -f
find kubuntu/ -type f -iname "Makefile" | xargs rm -f
find ubuntuunity/ -type f -iname "*.in" | xargs rm -f
find ubuntuunity/ -type f -iname "Makefile" | xargs rm -f
rm -rf kubuntu/oemconfig
rm -rf lubuntu/oemconfig
rm -rf ubuntuunity/oemconfig
rm -rf common/basicwallpaper/build
find ubuntustudio/ -type f -iname "*.in" | xargs rm -f
find ubuntustudio/ -type f -iname "Makefile" | xargs rm -f
# vim:ts=4

View File

@ -6,8 +6,8 @@ If you want to add a new package for your flavor, here's how to do it:
2. Edit files and rename the branding directory for your flavor. All of the
configuration files are pretty self-explanatory, but they're documented
well upstream, so it shouldn't be hard to put your own spin on things.
3. Create a new binary package, and *make sure to Provides+Conflicts against
`calamares-settings-ubuntu-flavor`*. This needs to be done because all
3. Create a new binary package, and *make sure to Conflicts against all other
binary packages in this source package*. This needs to be done because all
subdirectories are installed in the same location, so this makes sure that
nobody tries to install any two binary packages at the same time.

View File

@ -1,24 +0,0 @@
# Ubuntu Studio's Calamares Branding (archived)
This directory houses the branding Ubuntu Studio used when Calamares was still
being used as the installer, along with some additional potentially useful
configuration fragments. Ubuntu Studio has since switched to using
ubuntu-desktop-provision, and thus most of the actual configuration has been
removed.
Unless otherwise stated, the contents of this directory are licensed as follows:
Copyright (C) 2020 Ubuntu Studio Developers <ubuntu-studio-devel@lists.ubuntu.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 3
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this software. If not, see <http://www.gnu.org/licenses/>.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 404 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 379 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 243 KiB

View File

@ -1,119 +0,0 @@
[ColorEffects:Disabled]
Color=56,56,56
ColorAmount=0
ColorEffect=0
ContrastAmount=0.65
ContrastEffect=1
IntensityAmount=0.1
IntensityEffect=2
[ColorEffects:Inactive]
ChangeSelectionColor=true
Color=112,111,110
ColorAmount=0.025
ColorEffect=2
ContrastAmount=0.1
ContrastEffect=2
Enable=false
IntensityAmount=0
IntensityEffect=0
[Colors:Button]
BackgroundAlternate=163,212,250
BackgroundNormal=246,245,244
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=35,38,41
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:Complementary]
BackgroundAlternate=27,30,32
BackgroundNormal=42,46,50
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=161,169,177
ForegroundLink=29,153,243
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=252,252,252
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:Selection]
BackgroundAlternate=163,212,250
BackgroundNormal=53,132,228
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=255,255,255
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:Tooltip]
BackgroundAlternate=234,231,229
BackgroundNormal=246,245,244
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=35,38,41
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:View]
BackgroundAlternate=246,245,244
BackgroundNormal=255,255,255
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=35,38,41
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[Colors:Window]
BackgroundAlternate=227,229,231
BackgroundNormal=234,231,229
DecorationFocus=53,132,228
DecorationHover=53,132,228
ForegroundActive=53,132,228
ForegroundInactive=112,125,138
ForegroundLink=41,128,185
ForegroundNegative=218,68,83
ForegroundNeutral=246,116,0
ForegroundNormal=35,38,41
ForegroundPositive=39,174,96
ForegroundVisited=155,89,182
[General]
ColorScheme=UbuntuStudioLight
Name=Ubuntu Studio Light
shadeSortColumn=true
[KDE]
contrast=4
[WM]
activeBackground=234,231,229
activeBlend=227,229,231
activeForeground=35,38,41
inactiveBackground=234,231,229
inactiveBlend=234,231,229
inactiveForeground=112,125,138

View File

@ -1,4 +0,0 @@
[General]
AutomountEnabled=false
AutomountOnLogin=false
AutomountOnPlugin=false

View File

@ -1,45 +0,0 @@
cmake_minimum_required(VERSION 3.16)
project(basicwallpaper VERSION 0.1 LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(basicwallpaper
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
else()
add_executable(basicwallpaper
${PROJECT_SOURCES}
)
endif()
target_link_libraries(basicwallpaper PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
install(TARGETS basicwallpaper
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(basicwallpaper)
endif()

View File

@ -1,3 +0,0 @@
# basicwallpaper: Shows an image in the background across all screens
Copyright (C) 2024 Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>. Licensed under the GNU GPL version 3. This license applies to all files in the repository. Inspiration taken from lubuntu-installer-prompt and pcmanfm-qt.

View File

@ -1,28 +0,0 @@
#include "mainwindow.h"
#include <QApplication>
#include <QScreen>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QString wallpaperFile;
if (argc > 1) {
wallpaperFile = QString(argv[1]);
} else {
return 1;
}
for (QScreen *screen : QApplication::screens()) {
MainWindow *w = new MainWindow(wallpaperFile);
w->setWindowFlags(Qt::WindowStaysOnBottomHint);
w->setGeometry(screen->geometry());
w->showFullScreen();
w->show();
w->applyWallpaper();
}
return a.exec();
}

View File

@ -1,43 +0,0 @@
#include "mainwindow.h"
#include "./ui_mainwindow.h"
#include <QDebug>
#include <QImage>
MainWindow::MainWindow(const QString &wallpaperFile, QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_wallpaperFile = wallpaperFile;
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::applyWallpaper()
{
QImage image(m_wallpaperFile);
if (!image.isNull()) {
qreal imgRatio = static_cast<qreal>(image.width()) / image.height();
qreal screenRatio = static_cast<qreal>(this->width()) / this->height();
QImage scaled;
if (imgRatio < screenRatio) {
scaled = image.scaledToWidth(this->width(), Qt::SmoothTransformation);
int yGap = (scaled.height() - this->height()) / 2;
scaled = scaled.copy(0, yGap, scaled.width(), this->height());
} else {
scaled = image.scaledToHeight(this->height(), Qt::SmoothTransformation);
int xGap = (scaled.width() - this->width()) / 2;
scaled = scaled.copy(xGap, 0, this->width(), scaled.height());
}
QPixmap bg = QPixmap::fromImage(scaled);
QPalette palette;
palette.setBrush(QPalette::Window, bg);
this->setPalette(palette);
} else {
qCritical() << "ERROR: Wallpaper does not exist!";
}
}

View File

@ -1,24 +0,0 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(const QString &wallpaperFile, QWidget *parent = nullptr);
~MainWindow();
void applyWallpaper();
private:
Ui::MainWindow *ui;
QString m_wallpaperFile;
};
#endif // MAINWINDOW_H

View File

@ -1,22 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget"/>
<widget class="QMenuBar" name="menubar"/>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -1,3 +0,0 @@
#!/bin/bash
setxkbmap -query | awk '/layout/{ print $2 }' > /dev/shm/fixconkeys-layout
cp /usr/libexec/fixconkeys-part2 ${1}/usr/libexec/fixconkeys-part2

View File

@ -1,4 +0,0 @@
#!/bin/bash
loadkeys "$(cat /dev/shm/fixconkeys-layout)"
setupcon --save-only
rm /usr/libexec/fixconkeys-part2

View File

@ -6,8 +6,8 @@ baseUrl: archive.ubuntu.com
# URL used for IP address lookup
geoip:
style: "xml"
url: "https://geoip.ubuntu.com/lookup"
style: "json"
url: "https://ipapi.co/json"
# Distribution that this is based off of.
# This is so we can make safe assumptions for the contents of

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3
# Copyright (C) 2018-2023 Simon Quigley <tsimonq2@ubuntu.com>
# Copyright (C) 2018 Simon Quigley <tsimonq2@ubuntu.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -19,108 +19,150 @@ import json
import libcalamares
from time import strftime
import urllib.request
from urllib.error import HTTPError, URLError
from urllib.error import HTTPError
from urllib.error import URLError
import socket
import logging
import distro
import xml.etree.ElementTree as ET
from os import remove
from lsb_release import get_distro_information
global sources
sources = """# Automatically generated by Calamares on DATE.
# Lines starting with "deb" are mandatory, while lines starting with "deb-src"
# are for more detailed package information.
## See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
## newer versions of DISTRIBUTION.
deb URL/ubuntu/ CODENAME main restricted
# deb-src URL/ubuntu/ CODENAME main restricted
## Major bug fix updates produced after the final release of DISTRIBUTION.
## Have you noticed a regression? Please report it!
## https://wiki.ubuntu.com/StableReleaseUpdates#Regressions
deb URL/ubuntu/ CODENAME-updates main restricted
# deb-src URL/ubuntu/ CODENAME-updates main restricted
## Software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu team.
## Also, please note that software in Universe WILL NOT receive any review or
## updates from the Ubuntu security team directly. Updates in this repository
## are provided by volunteers, but most come from Debian.
deb URL/ubuntu/ CODENAME universe
# deb-src URL/ubuntu/ CODENAME universe
deb URL/ubuntu/ CODENAME-updates universe
# deb-src URL/ubuntu/ CODENAME-updates universe
## Software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu team,
## and may not be under a free licence. Please satisfy yourself as your rights
## to use the software. Also, please note that software in Multiverse WILL NOT
## receive any review or updates from the Ubuntu security team directly.
deb URL/ubuntu/ CODENAME multiverse
# deb-src URL/ubuntu/ CODENAME multiverse
deb URL/ubuntu/ CODENAME-updates multiverse
# deb-src URL/ubuntu/ CODENAME-updates multiverse
## Software from this repository contains tested security updates from the
## Ubuntu security team.
deb http://security.ubuntu.com/ubuntu CODENAME-security main restricted
# deb-src http://security.ubuntu.com/ubuntu CODENAME-security main restricted
deb http://security.ubuntu.com/ubuntu CODENAME-security universe
# deb-src http://security.ubuntu.com/ubuntu CODENAME-security universe
deb http://security.ubuntu.com/ubuntu CODENAME-security multiverse
# deb-src http://security.ubuntu.com/ubuntu CODENAME-security multiverse
## Software from this repository may not have been tested as extensively as
## software contained in the main release, although it includes newer versions
## of some applications which may provide useful features. Also, please note
## that software in Backports WILL NOT receive any review or updates from the
## Ubuntu security team.
deb URL/ubuntu/ CODENAME-backports main restricted universe multiverse
# deb-src URL/ubuntu/ CODENAME-backports main restricted universe multiverse
## Uncomment the following two lines to add software from Canonical's
## "partner" repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu CODENAME partner
# deb-src http://archive.canonical.com/ubuntu CODENAME partner"""
SUBDOMAINS_BY_COUNTRY_CODE = {"US": "us.",
"AU": "au.",
"SE": "no.",
"NO": "no.",
"NZ": "nz.",
"NL": "nl.",
"KR": "kr.",
"DE": "de.",
"GE": "ge.",
"PF": "pf.",
"CZ": "cz.",
"HR": "hr."}
SUBDOMAINS_BY_COUNTRY_CODE = {
"US": "us.", "AU": "au.", "SE": "no.", "NO": "no.",
"NZ": "nz.", "NL": "nl.", "KR": "kr.", "DE": "de.",
"GE": "ge.", "PF": "pf.", "CZ": "cz.", "HR": "hr."
}
def getcountrycode():
"""
Return the two-letter country code or an empty string.
def get_sources_template():
return """# Automatically generated by Calamares on {date}.
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of {distro}.
## Ubuntu distribution repository
##
## The following settings can be adjusted to configure which packages to use from Ubuntu.
## Mirror your choices (except for URIs and Suites) in the security section below to
## ensure timely security updates.
##
## Types: Append deb-src to enable the fetching of source package.
## URIs: A URL to the repository (you may add multiple URLs)
## Suites: The following additional suites can be configured
## <name>-updates - Major bug fix updates produced after the final release of the
## distribution.
## <name>-backports - software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
## Components: Aside from main, the following components can be added to the list
## restricted - Software that may not be under a free license, or protected by patents.
## universe - Community maintained packages.
## Software from this repository is only maintained and supported by Canonical
## for machines with Ubuntu Pro subscriptions. Without Ubuntu Pro, the Ubuntu
## community provides best-effort security maintenance.
## multiverse - Community maintained of restricted. Software from this repository is
## ENTIRELY UNSUPPORTED by the Ubuntu team, and may not be under a free
## licence. Please satisfy yourself as to your rights to use the software.
## Also, please note that software in multiverse WILL NOT receive any
## review or updates from the Ubuntu security team.
##
## See the sources.list(5) manual page for further settings.
Types: deb
URIs: {url}
Suites: {codename} {codename}-updates {codename}-backports
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
## Ubuntu security updates. Aside from URIs and Suites,
## this should mirror your choices in the previous section.
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: {codename}-security
Components: main universe restricted multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
"""
def get_country_code():
if not libcalamares.globalstorage.value("hasInternet"):
Tries to determine the country code based on the public IP address,
if the device is connected to the Internet. Otherwise it returns
an empty string.
"""
if libcalamares.globalstorage.value("hasInternet"):
geoipurl = libcalamares.job.configuration["geoip"]["url"]
try:
with urllib.request.urlopen(geoipurl, timeout=75) as http_response:
localedata = json.loads(http_response.read().decode())
except HTTPError as http_error:
logging.error("Data not retrieved because %s - URL: %s",
http_error, geoipurl)
except URLError as url_error:
if isinstance(url_error.reason, socket.timeout):
logging.error("Socket timed out - URL %s", geoipurl)
else:
logging.error("Non-timeout protocol error.")
else:
logging.info("Country successfully determined.")
return localedata["country"]
else:
return ""
geoip_config = libcalamares.job.configuration["geoip"]
try:
with urllib.request.urlopen(geoip_config["url"], timeout=75) as resp:
if geoip_config["style"] == "json":
return json.loads(resp.read().decode())["country_code"]
elif geoip_config["style"] == "xml":
return ET.parse(resp).getroot().find("CountryCode").text
except (HTTPError, URLError, socket.timeout):
logging.error("Failed to get country code.")
return ""
def get_subdomain_by_country(country_code):
return SUBDOMAINS_BY_COUNTRY_CODE.get(country_code, "")
def get_subdomain_by_country(countrycode):
"""Return the subdomain for the given countrycode
or an empty string.
"""
if countrycode in SUBDOMAINS_BY_COUNTRY_CODE.keys():
return SUBDOMAINS_BY_COUNTRY_CODE[countrycode]
else:
return ""
def write_file(path, content):
with open(path, "w") as f:
f.write(content)
def getcodename():
"""Return the codename of the distribution, similar to lsb_release -cs"""
return get_distro_information()["CODENAME"]
def changesources(subdomain):
"""Replace the placeholders and then create the sources.list"""
distro = libcalamares.job.configuration["distribution"]
url = "http://{}{}".format(subdomain,
libcalamares.job.configuration["baseUrl"])
global sources
sources = sources.replace("DISTRIBUTION", distro)
sources = sources.replace("CODENAME", getcodename())
sources = sources.replace("URL", url)
sources = sources.replace("DATE", strftime("%Y-%m-%d"))
filepath = libcalamares.globalstorage.value("rootMountPoint")
filepath += "/etc/apt/sources.list"
with open(filepath, "r+") as sourcesfile:
sourcesfile.seek(0)
sourcesfile.write(sources)
sourcesfile.truncate()
def run():
country_code = get_country_code()
subdomain = get_subdomain_by_country(country_code)
base_url = "http://{}{}/ubuntu".format(subdomain, libcalamares.job.configuration["baseUrl"])
codename = distro.codename()
"""Autoselect a mirror and create the sources.list file."""
countrycode = getcountrycode()
subdomain = get_subdomain_by_country(countrycode)
root_mount_point = libcalamares.globalstorage.value("rootMountPoint")
sources = get_sources_template().format(date=strftime("%Y-%m-%d"), distro=libcalamares.job.configuration["distribution"], url=base_url, codename=codename)
write_file(f"{root_mount_point}/etc/apt/sources.list.d/ubuntu.sources", sources)
remove(f"{root_mount_point}/etc/apt/sources.list")
libcalamares.globalstorage.insert("mirrorURL", base_url)
libcalamares.globalstorage.insert("ubuntuCodename", codename)
changesources(subdomain)

View File

@ -1,5 +0,0 @@
---
dontChroot: true
timeout: 60
script:
- command: "cp /cdrom/casper/vmlinuz ${ROOT}/boot/vmlinuz-$(uname -r)"

View File

@ -1,2 +0,0 @@
crypttabOptions: luks,keyscript=/bin/cat
efiMountOptions: umask=0077

View File

@ -1,41 +0,0 @@
extraMounts:
- device: proc
fs: proc
mountPoint: /proc
- device: sys
fs: sysfs
mountPoint: /sys
- device: /dev
mountPoint: /dev
options: [ bind ]
- device: tmpfs
fs: tmpfs
mountPoint: /run
- device: /run/udev
mountPoint: /run/udev
options: [ bind ]
- device: efivarfs
fs: efivarfs
mountPoint: /sys/firmware/efi/efivars
efi: true
- device: /run/systemd/resolve
mountPoint: /run/systemd/resolve
options: [ bind ]
- device: /cdrom
mountPoint: /media/cdrom
options: [ bind ]
mountOptions:
- filesystem: default
options: [ defaults ]
- filesystem: btrfs
options: [ defaults, noatime, autodefrag ]
ssdOptions: [ discard, compress=lzo ]
- filesystem: ext4
ssdOptions: [ discard ]
- filesystem: jfs
ssdOptions: [ discard ]
- filesystem: xfs
ssdOptions: [ discard ]
- filesystem: swap
ssdOptions: [ discard ]

View File

@ -1,31 +0,0 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
include(FeatureSummary)
set( CMAKE_CXX_STANDARD 17 )
set( CMAKE_CXX_STANDARD_REQUIRED ON )
set( CALAMARES_VERSION_REQUIRED 3.3.9 )
find_package(ECM "6.0.0" NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH})
include(KDEInstallDirs)
find_package(KF6 REQUIRED COMPONENTS CoreAddons)
find_package(Calamares ${CALAMARES_VERSION_REQUIRED} NO_CMAKE_PACKAGE_REGISTRY)
if (NOT TARGET Calamares::calamares OR NOT TARGET Calamares::calamaresui)
find_package(Calamares ${CALAMARES_VERSION_REQUIRED} REQUIRED)
endif()
message(STATUS "Found Calamares version ${Calamares_VERSION}")
message(STATUS " libraries ${Calamares_LIB_DIRS}")
message(STATUS "")
calamares_add_plugin( pkgselect
TYPE viewmodule
EXPORT_MACRO PLUGINDLLEXPORT_PRO
SOURCES
PackageSelectViewStep.cpp
UI
pkgselect.ui
SHARED_LIB
)

View File

@ -1,391 +0,0 @@
#include "PackageSelectViewStep.h"
#include "ui_pkgselect.h"
#include "JobQueue.h"
#include "GlobalStorage.h"
#include "network/Manager.h"
#include <QCheckBox>
#include <QVariant>
#include <QDebug>
#include <QLabel>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QRadioButton>
/**
* @brief Initializes a new PackageSelectViewStep object.
* @param parent The parent QObject.
*/
PackageSelectViewStep::PackageSelectViewStep(QObject* parent)
: Calamares::ViewStep(parent),
m_packageSelections(),
ui(new Ui::pkgselect),
m_widget(new QWidget()), // Parent set to nullptr
m_connectionsMade(false)
{
ui->setupUi(m_widget);
// Layout Adjustment to Prevent Shifting
// Ensures that hiding/showing elements does not disrupt the layout
QGridLayout* mainLayout = qobject_cast<QGridLayout*>(ui->gridLayout);
if (mainLayout) {
mainLayout->setRowStretch(mainLayout->rowCount(), 1);
}
}
/**
* @brief Cleans up the PackageSelectViewStep object.
*/
PackageSelectViewStep::~PackageSelectViewStep()
{
delete ui;
delete m_widget;
}
QString PackageSelectViewStep::prettyName() const
{
return tr("Customize");
}
bool PackageSelectViewStep::exists_and_true(const QString& key) const
{
return m_packageSelections.contains(key) && m_packageSelections.value(key).toBool();
}
QWidget* PackageSelectViewStep::widget()
{
return m_widget;
}
Calamares::JobList PackageSelectViewStep::jobs() const
{
return Calamares::JobList();
}
bool PackageSelectViewStep::isNextEnabled() const
{
return true;
}
bool PackageSelectViewStep::isBackEnabled() const
{
return true;
}
bool PackageSelectViewStep::isAtBeginning() const
{
return true;
}
bool PackageSelectViewStep::isAtEnd() const
{
return true;
}
void PackageSelectViewStep::setConfigurationMap(const QVariantMap& configurationMap)
{
m_configurationMap = configurationMap;
}
/**
* @brief Activates the step, setting up the UI based on network availability and configuration.
*
* This method is called when the step becomes active. It handles network checks,
* dynamically creates package selection checkboxes, and connects signal handlers.
*/
void PackageSelectViewStep::onActivate()
{
// Check network availability
Calamares::Network::Manager network;
bool hasInternet = network.hasInternet();
// Handle network unavailability
//if (!hasInternet) {
// Disable almost all fancy features to avoid bugs, revert in 25.10 cycle
ui->full_button->setVisible(false);
ui->full_text->setVisible(false);
ui->left_spacer->changeSize(20, 20, QSizePolicy::Fixed, QSizePolicy::Fixed);
ui->right_spacer->changeSize(0, 0, QSizePolicy::Fixed, QSizePolicy::Fixed);
ui->additional_label->setVisible(false);
ui->updates_button->setVisible(false);
ui->updates_text->setVisible(false);
ui->extraparty_scroll->setVisible(false);
ui->extraparty_text->setVisible(false);
ui->mandatory_warning_label->setVisible(false);
//}
// Dynamically create package checkboxes only once
if (m_packageCheckBoxes.isEmpty()) {
QVariantList additionalPackages = m_configurationMap.value("packages").toMap().value("additional_packages").toList();
QVBoxLayout* packagesLayout = ui->extraparty_scrollhouse->findChild<QVBoxLayout*>("packages_layout");
if (!packagesLayout) {
qWarning() << "packages_layout not found in UI.";
return;
}
for (const QVariant& var : additionalPackages) {
QVariantMap pkg = var.toMap();
QString packageId = pkg.value("id").toString();
QString packageName = pkg.value("name").toString();
QString packageDescription = pkg.value("description").toString();
bool isSnap = pkg.value("snap").toBool();
// Create checkbox
QCheckBox* checkbox = new QCheckBox(packageName, m_widget);
checkbox->setObjectName(packageId); // Naming as packageId directly
// Create description label
QLabel* descriptionLabel = new QLabel(packageDescription, m_widget);
QFont descFont = descriptionLabel->font();
descFont.setPointSize(10);
descFont.setItalic(true);
descriptionLabel->setFont(descFont);
descriptionLabel->setWordWrap(true);
// Add to layout
packagesLayout->addWidget(checkbox);
packagesLayout->addWidget(descriptionLabel);
// Store in the map
m_packageCheckBoxes.insert(packageId, checkbox);
// Connect checkbox toggled signal
connect(checkbox, &QCheckBox::toggled, this, &PackageSelectViewStep::updatePackageSelections);
}
}
// Handle installation modes
// Connect radio buttons to lambda functions only once
if (!m_connectionsMade) {
connect(ui->minimal_button, &QRadioButton::toggled, this, [this, hasInternet](bool checked) {
if (checked && hasInternet) {
// Hide additional packages UI
ui->extraparty_scroll->setVisible(false);
ui->extraparty_text->setVisible(false);
ui->mandatory_warning_label->setVisible(false);
// Uncheck and disable all additional package checkboxes
QVariantList removePackages = m_configurationMap.value("packages").toMap().value("minimal_remove_packages").toList();
for (const QVariant& var : removePackages) {
QString packageId = var.toString();
QCheckBox* checkbox = m_packageCheckBoxes.value(packageId, nullptr);
if (checkbox) {
checkbox->setChecked(false);
checkbox->setEnabled(false);
}
}
}
});
connect(ui->normal_button, &QRadioButton::toggled, this, [this, hasInternet](bool checked) {
if (checked && hasInternet) {
// Show additional packages UI
ui->extraparty_scroll->setVisible(true);
ui->extraparty_text->setVisible(true);
ui->mandatory_warning_label->setVisible(true);
// Enable all additional package checkboxes
for (auto checkbox : m_packageCheckBoxes) {
if (checkbox) {
checkbox->setEnabled(true);
}
}
}
});
connect(ui->full_button, &QRadioButton::toggled, this, [this, hasInternet](bool checked) {
if (checked && hasInternet) {
// Show additional packages UI
ui->extraparty_scroll->setVisible(true);
ui->extraparty_text->setVisible(true);
ui->mandatory_warning_label->setVisible(true);
// Check and disable all additional package checkboxes
for (auto checkbox : m_packageCheckBoxes) {
if (checkbox) {
checkbox->setChecked(true);
checkbox->setEnabled(false);
}
}
}
});
m_connectionsMade = true;
}
// Layout Adjustment to Prevent Shifting
// Ensure that hiding/showing elements does not center the remaining widgets
// This is generally handled by Qt's layout system, but adding stretch ensures stability
QGridLayout* mainLayout = qobject_cast<QGridLayout*>(ui->gridLayout);
if (mainLayout) {
mainLayout->setRowStretch(mainLayout->rowCount(), 1);
}
}
/**
* @brief Handles actions to perform when leaving the step, such as storing selected packages.
*
* This method gathers the selected packages, determines the installation mode,
* and stores the relevant data into Calamares' GlobalStorage for use in subsequent steps.
*/
void PackageSelectViewStep::onLeave()
{
Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage();
if (!gs) {
qWarning() << "GlobalStorage is not available.";
return;
}
bool isStackedSquashfs = m_configurationMap.value("stacked_squashfs").toBool();
QVariantMap installationData = gs->value("installation_data").toMap();
QString installationMode = installationData.value("installation_mode").toString();
bool downloadUpdates = installationData.value("download_updates").toBool();
QVariantList packagesToInstall = installationData.value("packages_to_install").toList();
QVariantList packagesToRemove = installationData.value("packages_to_remove").toList();
QVariantList presentSnaps = installationData.value("present_snaps").toList();
// Handle default value for rootMountPoint
QString rootMountPoint = "/";
if (gs->contains("rootMountPoint")) {
rootMountPoint = gs->value("rootMountPoint").toString();
}
QVariantMap globalData;
// Determine selected installation mode
if (ui->minimal_button->isChecked()) {
installationMode = "minimal";
} else if (ui->normal_button->isChecked()) {
installationMode = "normal";
} else if (ui->full_button->isChecked()) {
installationMode = "full";
}
globalData.insert("installation_mode", installationMode);
// Used by unpackfs on stacked squashfs systems
if (installationMode == "minimal") {
}
if (installationMode == "minimal") {
globalData.insert("unpack_regular", false);
if (!isStackedSquashfs) {
QVariantList minimalPackages = m_configurationMap.value("packages").toMap().value("minimal_remove_packages").toList();
QVariantList installerPackages = m_configurationMap.value("packages").toMap().value("installer_remove_packages").toList();
QVariantList combinedRemove = minimalPackages + installerPackages;
globalData.insert("packages_to_remove", combinedRemove);
}
} else {
globalData.insert("unpack_regular", true);
// For normal and full, store packages to install
QVariantList selectedPackagesList;
// Store the snaps that are already on the system by default
QStringList presentSnapList;
// Process all checked boxes
for (auto it = m_packageCheckBoxes.constBegin(); it != m_packageCheckBoxes.constEnd(); ++it) {
const QString& packageId = it.key();
QCheckBox* checkbox = it.value();
if (checkbox && checkbox->isChecked()) {
// Retrieve package details from configuration
QVariantList additionalPackages = m_configurationMap.value("packages").toMap().value("additional_packages").toList();
QVariantMap packageDetails;
for (const QVariant& var : additionalPackages) {
QVariantMap pkg = var.toMap();
if (pkg.value("id").toString() == packageId) {
packageDetails.insert("id", pkg.value("id").toString());
packageDetails.insert("snap", pkg.value("snap").toBool());
break;
}
}
if (!packageDetails.isEmpty()) {
selectedPackagesList.append(packageDetails);
}
}
}
// Add the additional packages to be installed and substitute locale
QVariantList installPackages = m_configurationMap.value("packages").toMap().value("regular_install_packages").toList();
QString localeVal = gs->value("locale").toString();
for (const QVariant& installPackage : installPackages) {
QString packageId = installPackage.toString().replace("$LOCALE", localeVal);
QVariantMap packageDetails;
packageDetails.insert("id", packageId);
packageDetails.insert("snap", false);
selectedPackagesList.append(packageDetails);
}
// Ensure delta updates are processed first
QVariantList refreshSnaps = m_configurationMap.value("packages").toMap().value("refresh_snaps").toList();
for (const QVariant& snapVar : refreshSnaps) {
QString snapId = snapVar.toString();
presentSnapList.append(snapId);
}
// As a temporary measure until OEM is refactored in the 25.10 cycle,
// we need to ensure that Calamares and its necessary dependencies are
// installed on the target, iff this is a stacked squashfs.
// FIXME: remove in favor of more nuanced stacked squashfs
// functionality in 25.10
// Ref: https://discourse.ubuntu.com/t/implementation-of-ship-live-within-a-squashfs/57510
// LP: #2104343
if (isStackedSquashfs) {
QVector<QString> stage_two_packages = {"calamares", "kdialog"};
for (QString& package_name : stage_two_packages) {
QVariantMap package_details;
package_details.insert("id", package_name);
package_details.insert("snap", false);
selectedPackagesList.append(package_details);
}
}
globalData.insert("packages_to_install", selectedPackagesList);
if (!isStackedSquashfs) {
QVariantList installerPackages = m_configurationMap.value("packages").toMap().value("installer_remove_packages").toList();
globalData.insert("packages_to_remove", installerPackages);
}
globalData.insert("present_snaps", presentSnapList);
}
// Store the state of 'download_updates' checkbox
bool updatesChecked = ui->updates_button->isChecked();
globalData.insert("download_updates", updatesChecked);
gs->insert("installation_data", globalData);
}
/**
* @brief Slot to handle checkbox toggle events.
*
* This method updates the internal package selection map based on user interactions
* with the package checkboxes.
*
* @param checked The new checked state of the checkbox.
*/
void PackageSelectViewStep::updatePackageSelections(bool checked)
{
QCheckBox* checkbox = qobject_cast<QCheckBox*>(sender());
if (!checkbox)
return;
QString packageId = checkbox->objectName();
m_packageSelections[packageId] = checked;
emit packageSelectionsChanged();
}
/**
* @brief Retrieves the checkbox associated with a given package ID.
*
* @param id The package ID.
* @return A pointer to the QCheckBox, or nullptr if not found.
*/
QCheckBox* PackageSelectViewStep::getCheckboxById(const QString& id) const
{
return m_packageCheckBoxes.value(id, nullptr);
}
CALAMARES_PLUGIN_FACTORY_DEFINITION(PackageSelectViewStepFactory, registerPlugin<PackageSelectViewStep>(); )

View File

@ -1,143 +0,0 @@
#ifndef PACKAGESELECTVIEWSTEP_H
#define PACKAGESELECTVIEWSTEP_H
#include <QObject>
#include <QVariantMap>
#include <QMap>
#include "DllMacro.h"
#include "utils/PluginFactory.h"
#include "viewpages/ViewStep.h"
namespace Ui {
class pkgselect;
}
class QCheckBox;
/**
* @class PackageSelectViewStep
* @brief A Calamares view step for selecting and customizing packages during installation.
*
* This class provides a user interface for selecting additional packages to install,
* managing installation modes, and handling network availability scenarios.
*/
class PLUGINDLLEXPORT PackageSelectViewStep : public Calamares::ViewStep
{
Q_OBJECT
public:
/**
* @brief Constructs a new PackageSelectViewStep object.
* @param parent The parent QObject.
*/
explicit PackageSelectViewStep(QObject* parent = nullptr);
/**
* @brief Destroys the PackageSelectViewStep object.
*/
~PackageSelectViewStep() override;
/**
* @brief Returns the display name of the step.
* @return The pretty name as a QString.
*/
QString prettyName() const override;
/**
* @brief Returns the widget associated with this step.
* @return A pointer to the QWidget.
*/
QWidget* widget() override;
/**
* @brief Returns the list of jobs to execute for this step.
* @return An empty Calamares::JobList.
*/
Calamares::JobList jobs() const override;
/**
* @brief Indicates whether the "Next" button is enabled.
* @return Always returns true.
*/
bool isNextEnabled() const override;
/**
* @brief Indicates whether the "Back" button is enabled.
* @return Always returns true.
*/
bool isBackEnabled() const override;
/**
* @brief Indicates whether the step is at the beginning.
* @return Always returns true.
*/
bool isAtBeginning() const override;
/**
* @brief Indicates whether the step is at the end.
* @return Always returns true.
*/
bool isAtEnd() const override;
/**
* @brief Activates the step, setting up the UI based on network availability and configuration.
*/
void onActivate() override;
/**
* @brief Handles actions to perform when leaving the step, such as storing selected packages.
*/
void onLeave() override;
/**
* @brief Sets the configuration map for the step.
* @param configurationMap The QVariantMap containing configuration data.
*/
void setConfigurationMap(const QVariantMap& configurationMap) override;
/**
* @brief Retrieves the current package selections.
* @return A QVariantMap of package selections.
*/
QVariantMap packageSelections() const { return m_packageSelections; }
public slots:
/**
* @brief Slot to handle checkbox toggle events.
* @param checked The new checked state of the checkbox.
*/
void updatePackageSelections(bool checked);
signals:
/**
* @brief Signal emitted when package selections change.
*/
void packageSelectionsChanged();
private:
/**
* @brief Retrieves the checkbox associated with a given package ID.
* @param id The package ID.
* @return A pointer to the QCheckBox, or nullptr if not found.
*/
QCheckBox* getCheckboxById(const QString& id) const;
/**
* @brief Checks if a given key exists in package selections and is set to true.
* @param key The key to check.
* @return True if the key exists and is true, otherwise false.
*/
bool exists_and_true(const QString& key) const;
QVariantMap m_packageSelections; ///< Stores the state of package selections.
Ui::pkgselect* ui; ///< Pointer to the UI class.
QWidget* m_widget; ///< Pointer to the main widget of the step.
QVariantMap m_configurationMap; ///< Stores configuration data.
QMap<QString, QCheckBox*> m_packageCheckBoxes; ///< Maps package IDs to their corresponding checkboxes.
bool m_connectionsMade; ///< Flag to ensure signal connections are made only once.
};
CALAMARES_PLUGIN_FACTORY_DECLARATION(PackageSelectViewStepFactory)
#endif // PACKAGESELECTVIEWSTEP_H

View File

@ -1,51 +0,0 @@
---
packages:
additional_packages:
- id: "element-desktop"
name: "Element"
description: "Matrix-based end-to-end encrypted messenger and secure collaboration app."
snap: true
- id: "thunderbird"
name: "Thunderbird"
description: "Email, newsfeed, chat, and calendaring client."
snap: true
- id: "krita"
name: "Krita"
description: "Graphics editor designed primarily for digital art and 2D animation."
snap: true
minimal_remove_packages:
- "snapd"
- "lubuntu-snap-installation-monitor"
- "vlc"
- "plasma-discover"
- "transmission-qt"
- "quassel"
- "2048-qt"
- "featherpad"
- "noblenote"
- "kcalc"
- "qps"
- "zsync"
- "partitionmanager"
- "qapt-deb-installer"
- "picom"
- "qlipper"
- "qtpass"
- "libreoffice*"
installer_remove_packages:
- "^live-*"
- calamares-settings-lubuntu
- calamares
- zram-config
- cifs-utils
- lubuntu-installer-prompt
regular_install_packages:
- language-pack-$LOCALE
- language-pack-gnome-$LOCALE
- language-pack-kde-$LOCALE
- hunspell-$LOCALE
- libreoffice-help-$LOCALE
- libreoffice-l10n-$LOCALE
refresh_snaps:
- "firefox"
- "firmware-updater"

View File

@ -1,380 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>pkgselect</class>
<widget class="QWidget" name="pkgselect">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>830</width>
<height>943</height>
</rect>
</property>
<property name="windowTitle">
<string>Package Selection</string>
</property>
<property name="styleSheet">
<string notr="true">QRadioButton {
spacing: 13px;
}
QCheckBox {
spacing: 13px;
}
QLabel {
padding-left: 33px;
padding-right: 33px;
}</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<!-- Installation Mode Label -->
<item row="1" column="1">
<widget class="QLabel" name="apps_label">
<property name="font">
<font>
<pointsize>18</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">padding-left: 0px; padding-right: 0px;</string>
</property>
<property name="text">
<string>Installation Mode</string>
</property>
</widget>
</item>
<!-- Minimal Installation Radio Button -->
<item row="9" column="1">
<widget class="QRadioButton" name="minimal_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Minimal Installation</string>
</property>
</widget>
</item>
<!-- Minimal Installation Description -->
<item row="10" column="1">
<widget class="QLabel" name="minimal_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Only the desktop environment</string>
</property>
</widget>
</item>
<!-- Normal Installation Radio Button -->
<item row="6" column="1">
<widget class="QRadioButton" name="normal_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Normal Installation</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<!-- Normal Installation Description -->
<item row="7" column="1">
<widget class="QLabel" name="normal_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Web browser, utilities, office software, games, and media players</string>
</property>
</widget>
</item>
<!-- Full Installation Radio Button -->
<item row="2" column="1">
<widget class="QRadioButton" name="full_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Full Installation</string>
</property>
</widget>
</item>
<!-- Full Installation Description -->
<item row="3" column="1">
<widget class="QLabel" name="full_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>All applications in the Normal Installation, and all extra third-party packages listed below</string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
<!-- Spacer Elements -->
<item row="0" column="0">
<spacer name="left_spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2">
<spacer name="right_spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="8" column="1">
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<!-- Additional Options Label -->
<item row="12" column="1">
<widget class="QLabel" name="additional_label">
<property name="font">
<font>
<pointsize>18</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">padding-left: 0px; padding-right: 0px;</string>
</property>
<property name="text">
<string>Additional Options</string>
</property>
</widget>
</item>
<!-- Update Checkbox -->
<item row="13" column="1">
<widget class="QCheckBox" name="updates_button">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>21</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Download and install updates following installation</string>
</property>
</widget>
</item>
<!-- Updates Text -->
<item row="14" column="1">
<widget class="QLabel" name="updates_text">
<property name="font">
<font>
<pointsize>10</pointsize>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>This saves time after installation, and keeps your system secure</string>
</property>
</widget>
</item>
<!-- Mandatory Warning Label -->
<item row="20" column="0" colspan="3">
<widget class="QLabel" name="mandatory_warning_label">
<property name="font">
<font>
<pointsize>11</pointsize>
<weight>75</weight>
<italic>false</italic>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Note: Ubuntu and flavors are NOT responsible for third-party software installed from this list.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
<!-- Pushup Spacer -->
<item row="21" column="1">
<spacer name="pushup">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<!-- Additional Packages Label -->
<item row="16" column="1">
<widget class="QLabel" name="extraparty_text">
<property name="font">
<font>
<pointsize>18</pointsize>
<weight>50</weight>
<bold>false</bold>
</font>
</property>
<property name="styleSheet">
<string notr="true">padding-left: 0px; padding-right: 0px;</string>
</property>
<property name="text">
<string>Install additional third-party packages</string>
</property>
</widget>
</item>
<!-- Scroll Area for Additional Packages -->
<item row="19" column="1">
<widget class="QScrollArea" name="extraparty_scroll">
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="extraparty_scrollhouse">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>762</width>
<height>281</height>
</rect>
</property>
<layout class="QVBoxLayout" name="packages_layout">
<!-- Dynamic Checkboxes will be added here -->
</layout>
</widget>
</widget>
</item>
<!-- Stretch to Push Elements Up -->
<item row="22" column="1">
<spacer name="stretch_spacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -1,37 +0,0 @@
cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
include(FeatureSummary)
set( CMAKE_CXX_STANDARD 23 )
set( CMAKE_CXX_STANDARD_REQUIRED ON )
find_library(APT_PKG_LIB apt-pkg)
if (NOT APT_PKG_LIB)
message(FATAL_ERROR "Could not find libapt-pkg")
endif()
find_package(ECM "6.0.0" NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH})
find_package(KF6 REQUIRED COMPONENTS CoreAddons)
include(KDEInstallDirs)
set( CALAMARES_VERSION_REQUIRED 3.3.9 )
find_package(Calamares ${CALAMARES_VERSION_REQUIRED} NO_CMAKE_PACKAGE_REGISTRY)
if (NOT TARGET Calamares::calamares OR NOT TARGET Calamares::calamaresui)
find_package(Calamares ${CALAMARES_VERSION_REQUIRED} REQUIRED)
endif()
message(STATUS "Found Calamares version ${Calamares_VERSION}")
message(STATUS " libraries ${Calamares_LIB_DIRS}")
message(STATUS "")
calamares_add_plugin( pkgselectprocess
TYPE job
EXPORT_MACRO PLUGINDLLEXPORT_PRO
SOURCES
PackageSelectProcess.cpp
SHARED_LIB
NO_CONFIG
)
add_executable(check_package checkpackage-backend.cpp)
target_link_libraries(check_package PRIVATE ${APT_PKG_LIB})

View File

@ -1,573 +0,0 @@
#include "PackageSelectProcess.h"
#include "GlobalStorage.h"
#include "JobQueue.h"
#include <QProcess>
#include <QDebug>
#include <QDir>
#include <QCoreApplication>
#include <QRegularExpression>
#include <QFile>
CALAMARES_PLUGIN_FACTORY_DEFINITION(PackageSelectProcessFactory, registerPlugin<PackageSelectProcess>();)
PackageSelectProcess::PackageSelectProcess(QObject* parent)
: Calamares::CppJob(parent),
m_prettyStatus(tr("Preparing to install selected packages..."))
{
}
QString PackageSelectProcess::prettyName() const
{
return tr("Installing selected packages");
}
QString PackageSelectProcess::prettyStatusMessage() const
{
return m_prettyStatus;
}
void PackageSelectProcess::setConfigurationMap(const QVariantMap& configurationMap)
{
m_configurationMap = configurationMap;
}
Calamares::JobResult PackageSelectProcess::runAptCommand(const QString& command,
const QString& rootMountPoint,
double startProgress,
double endProgress,
bool verboseProgress)
{
qDebug() << "Running apt command:" << command;
QProcess aptProcess(this);
aptProcess.setProgram("/usr/sbin/chroot");
aptProcess.setArguments({ rootMountPoint, "/bin/bash", "-c", command });
aptProcess.setProcessChannelMode(QProcess::MergedChannels);
constexpr int MAX_LINES = 5000;
double progressRange = endProgress - startProgress;
double progressPerLine = progressRange / static_cast<double>(MAX_LINES);
int lineCount = 0;
QString commandHRPrefix;
if (command.contains("install")) {
commandHRPrefix = tr("Installing packages: ");
} else if (command.contains("full-upgrade")) {
commandHRPrefix = tr("Upgrading installed system: ");
} else if (command.contains("remove")) {
commandHRPrefix = tr("Cleaning up packages: ");
} else if (command.contains("cdrom")) {
commandHRPrefix = tr("cdrom: ");
}
QRegularExpression getRegex(R"(Get:\d+\s+[^ ]+\s+[^ ]+\s+(.+?)\s+\S+\s+(\S+)\s+\[(.*?)\])");
connect(&aptProcess, &QProcess::readyReadStandardOutput, this,
[this, &lineCount, progressPerLine, startProgress, endProgress, verboseProgress, commandHRPrefix, getRegex]() {
QProcess *aptProcess = (QProcess *)(QObject::sender());
if (aptProcess == NULL) return;
while (aptProcess->canReadLine()) {
QString line = QString::fromUtf8(aptProcess->readLine()).trimmed();
qDebug() << "Apt log line: " << line;
if (line.isEmpty()) {
continue;
}
if (verboseProgress && !line.contains("Running in chroot, ignoring command") &&
!line.contains("Waiting until unit") && !line.contains("Stopping snap") &&
!line.contains("/dev/pts")) {
// Process "Get:" lines to show download information
if (line.startsWith("Get:")) {
QRegularExpressionMatch match = getRegex.match(line);
if (match.hasMatch()) {
QString packageName = match.captured(1);
QString packageVersion = match.captured(2);
QString packageSize = match.captured(3);
line = tr("Downloading %1 %2 (%3)").arg(packageName, packageVersion, packageSize);
}
}
m_prettyStatus = commandHRPrefix + line;
emit prettyStatusMessageChanged(m_prettyStatus);
qDebug() << m_prettyStatus;
}
lineCount++;
double currentProgress = startProgress + (lineCount * progressPerLine);
currentProgress = qBound(startProgress, currentProgress, endProgress);
emit progress(currentProgress);
}
});
aptProcess.start();
if (!aptProcess.waitForStarted()) {
qWarning() << "Failed to start apt command:" << aptProcess.errorString();
return Calamares::JobResult::error(tr("Apt command failed"),
tr("Failed to start apt command: %1").arg(aptProcess.errorString()));
}
while (!aptProcess.waitForFinished(100)) {
QCoreApplication::processEvents();
}
if (aptProcess.exitStatus() != QProcess::NormalExit || aptProcess.exitCode() != 0) {
QString errorOutput = QString::fromUtf8(aptProcess.readAllStandardError()).trimmed();
qWarning() << "Apt command error:" << errorOutput;
return Calamares::JobResult::error(tr("Apt command failed"),
tr("Failed to execute apt command: %1").arg(errorOutput));
}
emit progress(endProgress);
m_prettyStatus = tr("Command executed successfully.");
emit prettyStatusMessageChanged(m_prettyStatus);
return Calamares::JobResult::ok();
}
Calamares::JobResult PackageSelectProcess::runSnapCommand(const QStringList& snapPackages,
const QString& rootMountPoint,
double startProgress,
double endProgress)
{
const QString seedDirectory = QDir::cleanPath(rootMountPoint + "/var/lib/snapd/seed");
QDir dir(seedDirectory);
if (!dir.exists() && !dir.mkpath(".")) {
return Calamares::JobResult::error(tr("Snap installation failed"),
tr("Failed to create seed directory: %1").arg(seedDirectory));
}
QStringList snapCommandArgs = { "--seed", seedDirectory };
snapCommandArgs += snapPackages;
qDebug() << "Executing Snap Command:" << snapCommandArgs.join(" ");
QProcess snapProcess(this);
snapProcess.setProgram("/usr/bin/snapd-seed-glue");
snapProcess.setArguments(snapCommandArgs);
snapProcess.setProcessChannelMode(QProcess::MergedChannels);
QString currentDescription;
connect(&snapProcess, &QProcess::readyReadStandardOutput, this,
[&snapProcess, this, &currentDescription, startProgress, endProgress]( ) {
while (snapProcess.canReadLine()) {
QString line = QString::fromUtf8(snapProcess.readLine()).trimmed();
if (line.isEmpty()) {
continue;
}
QStringList parts = line.split("\t");
if (parts.size() != 2) {
qWarning() << "Unexpected output format from snap-seed-glue:" << line;
continue;
}
bool ok = false;
double percentage = parts[0].toDouble(&ok);
const QString& description = parts[1];
if (!ok) {
qWarning() << "Failed to parse percentage from line:" << line;
continue;
}
if (description != currentDescription) {
m_prettyStatus = description;
emit prettyStatusMessageChanged(m_prettyStatus);
currentDescription = description;
qDebug() << description;
}
double scaledProgress = startProgress + (percentage / 100.0) * (endProgress - startProgress);
emit progress(scaledProgress);
}
});
m_prettyStatus = tr("Installing snap packages...");
emit prettyStatusMessageChanged(m_prettyStatus);
emit progress(startProgress);
snapProcess.start();
if (!snapProcess.waitForStarted()) {
qWarning() << "Failed to start snap installation process:" << snapProcess.errorString();
return Calamares::JobResult::error(tr("Snap installation failed"),
tr("Failed to start snap installation process: %1").arg(snapProcess.errorString()));
}
while (!snapProcess.waitForFinished(100)) {
QCoreApplication::processEvents();
}
if (snapProcess.exitStatus() != QProcess::NormalExit || snapProcess.exitCode() != 0) {
QString errorOutput = QString::fromUtf8(snapProcess.readAllStandardError()).trimmed();
qWarning() << "Snap installation error:" << errorOutput;
return Calamares::JobResult::error(tr("Snap installation failed"),
tr("Failed to install snap packages: %1").arg(errorOutput));
}
emit progress(endProgress);
m_prettyStatus = tr("Snap packages installed successfully!");
emit prettyStatusMessageChanged(m_prettyStatus);
return Calamares::JobResult::ok();
}
void PackageSelectProcess::divert(bool enable)
{
for (auto it = dpkgDiversions.constBegin(); it != dpkgDiversions.constEnd(); ++it) {
const QString& name = it.key();
const QString& path = it.value();
QString divertedPath = path + ".REAL";
QString command;
if (enable) {
qDebug() << tr("Adding diversion for %1...").arg(name);
command = QString("dpkg-divert --quiet --add --divert %1 --rename %2")
.arg(divertedPath, path);
} else {
qDebug() << tr("Removing diversion for %1...").arg(name);
QFile::remove(rootMountPoint + path);
command = QString("dpkg-divert --quiet --remove --rename %1").arg(path);
}
// Set up the QProcess to run the command in chroot
QProcess process;
process.setProgram("/usr/sbin/chroot");
process.setArguments({ rootMountPoint, "/bin/bash", "-c", command });
process.setProcessChannelMode(QProcess::MergedChannels);
// Run the process
process.start();
if (!process.waitForFinished()) {
qWarning() << "Process error:" << process.errorString();
continue;
}
if (process.exitStatus() != QProcess::NormalExit || process.exitCode() != 0) {
qWarning() << "Error handling diversion for" << name << ":" << process.readAll();
continue;
}
if (!enable) { continue; }
// Create the replacement script in chroot
QString scriptContent = QString(
"#!/bin/sh\n"
"echo \"%1: diverted (will be called later)\" >&1\n"
"exit 0\n"
).arg(name);
QString scriptPath = rootMountPoint + path;
QFile scriptFile(scriptPath);
if (!scriptFile.open(QIODevice::WriteOnly | QIODevice::Text)) {
qWarning() << "Error creating script for" << name << ":" << scriptFile.errorString();
continue;
}
QTextStream out(&scriptFile);
out << scriptContent;
scriptFile.close();
// Make the script executable
QFile::setPermissions(scriptPath, QFile::permissions(scriptPath) | QFile::ExeOwner | QFile::ExeGroup | QFile::ExeOther);
}
}
Calamares::JobResult PackageSelectProcess::exec()
{
auto gs = Calamares::JobQueue::instance()->globalStorage();
if (!gs || !gs->contains("installation_data")) {
return Calamares::JobResult::error(tr("No installation data found."),
tr("Installation data is missing from global storage."));
}
const QVariantMap installationData = gs->value("installation_data").toMap();
const QString installationMode = installationData.value("installation_mode").toString();
const bool hasInternet = gs->value("hasInternet").toBool();
const bool downloadUpdates = (installationData.value("download_updates").toBool() && hasInternet);
const QVariantList packagesToInstall = installationData.value("packages_to_install").toList();
const QVariantList packagesToRemove = installationData.value("packages_to_remove").toList();
const QVariantList presentSnaps = installationData.value("present_snaps").toList();
// Handle default value for rootMountPoint
rootMountPoint = "/";
if (gs->contains("rootMountPoint")) {
rootMountPoint = gs->value("rootMountPoint").toString();
}
const QString checkpackage_path = "/usr/libexec/checkpackage-backend";
const QString chroot_checkpackage_path = rootMountPoint + checkpackage_path;
QFile* cpbe = new QFile(chroot_checkpackage_path);
static const QMap<QString, QVector<ProgressAllocation>> allocationMap = {
{ "minimal", { {0.0, 1.0} } },
{ "normal", { {0.0, 0.4}, {0.4, 1.0} } },
{ "full", { {0.0, 0.25}, {0.25, 1.0} } }
};
const QVector<ProgressAllocation> allocations = allocationMap.value(installationMode, { {0.0, 1.0} });
const double aptRange = allocations[0].end - allocations[0].start;
const double updateStart = allocations[0].start;
const double updateEnd = updateStart + 0.1 * aptRange;
// Temporarily copy ubuntu.sources elsewhere, if we do not have network
// This is so we can update the apt cache safely
// FIXME: there has to be a better, more native way to do this. It works
// for now, but in the 25.10 cycle, we're probably going to move some of
// these command-line apt calls to the libapt C library. LP: #2107287
if (!hasInternet) {
const QString ubuntu_sources_path = rootMountPoint + "/etc/apt/sources.list.d/ubuntu.sources";
QFile* ubuntu_sources = new QFile(ubuntu_sources_path);
// Just in case this module is used in a non-Ubuntu environment, make sure ubuntu.sources exists
// TODO: make this configurable in the 25.10 cycle
if (ubuntu_sources->exists()) {
const QString backup_name = ubuntu_sources_path + ".bak";
if (!ubuntu_sources->rename(ubuntu_sources_path + ".bak")) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("Permission denied when moving ubuntu.sources to prepare for offline install"));
}
Calamares::JobResult addCdromResult = runAptCommand("apt-cdrom add -m -d=/media/cdrom/", rootMountPoint, updateStart, updateEnd, true);
if (!addCdromResult) return std::move(addCdromResult);
} else {
return Calamares::JobResult::error(tr("Internal Error"),
tr("/etc/apt/sources.list.d/ubuntu.sources not found in the target, are you a downstream?"));
}
}
// Run apt update
m_prettyStatus = tr("Updating apt cache");
emit prettyStatusMessageChanged(m_prettyStatus);
emit progress(updateStart);
Calamares::JobResult updateResult = runAptCommand("DEBIAN_FRONTEND=noninteractive apt-get update",
rootMountPoint,
updateStart,
updateEnd,
false);
if (!updateResult) { // Using operator bool() to check for errors
return std::move(updateResult); // Move to avoid copy
}
QStringList debPackages;
for (const QVariant& var : packagesToInstall) {
const QVariantMap pkg = var.toMap();
if (!pkg.value("snap").toBool()) {
debPackages << pkg.value("id").toString();
}
}
// Add diversions for dracut, update-initramfs, and locale-gen
/*
dpkgDiversions = {
{"dracut", "/usr/bin/dracut"},
{"update-initramfs", "/usr/sbin/update-initramfs"},
{"locale-gen", "/usr/sbin/locale-gen"}
};
divert(true);
*/
double installStart;
double installEnd;
if (downloadUpdates) {
const double upgradeStart = updateEnd;
const double upgradeEnd = upgradeStart + 0.25 * aptRange;
Calamares::JobResult upgradeResult = runAptCommand(
"DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::='--force-confnew' full-upgrade",
rootMountPoint,
upgradeStart,
upgradeEnd,
true
);
if (!upgradeResult) { // Using operator bool() to check for errors
return std::move(upgradeResult); // Move to avoid copy
}
installStart = upgradeEnd;
installEnd = installStart + 0.25 * aptRange;
}
else {
installStart = updateEnd;
installEnd = installStart + 0.5 * aptRange;
installEnd = qMin(installEnd, allocations[0].end);
}
qDebug() << "Progress range: installStart:" << installStart << "installEnd:" << installEnd;
if (!debPackages.isEmpty()) {
// Corresponding to the temporary hack in pkgselect adding calamares
// and kdialog to the list, we only want those two included in the
// final installation if we're actually in OEM mode. Otherwise, they
// can be ignored, and are just clutter.
// FIXME: When the OEM stack is rewritten in 25.10, this needs to be
// removed.
if (!QFile::exists("/etc/calamares/OEM_MODE_ACTIVATED")) {
QStringList wip_list;
for (auto debPackage : debPackages) {
if (!debPackage.contains(QString("calamares")) &&
!debPackage.contains(QString("kdialog"))) {
wip_list << debPackage;
}
}
debPackages = wip_list;
}
// checkpackage-backend needs to be explicitly copied to the chroot
// and removed later for systems with stacked squashfses, or the
// install command will fail. LP: #2104243
if (!cpbe->exists()) {
QFile* parent_cpbe = new QFile(checkpackage_path);
if (!parent_cpbe->copy(chroot_checkpackage_path)) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("Permission denied when copying checkpackage-backend, are you running Calamares correctly?"));
}
}
const QString packageList = debPackages.join(" ");
const QString installCommand = QString("DEBIAN_FRONTEND=noninteractive apt-get -y install $(/usr/libexec/checkpackage-backend %1);").arg(packageList);
Calamares::JobResult installResult = runAptCommand(installCommand,
rootMountPoint,
installStart,
installEnd,
true);
if (!installResult) {
if (!cpbe->remove()) qDebug() << "Warning: failed to clean up /usr/libexec/checkpackage-backend";
return std::move(installResult);
}
}
else qDebug() << "No packages to install.";
QStringList removeDebPackages;
for (const QVariant& var : packagesToRemove) {
removeDebPackages << var.toString();
}
// As part of the fix for LP: #2104343, we need to ensure that, if
// we are currently in OEM mode, Calamares and friends remain
// installed. During stage two, we clean it up.
// FIXME: When the OEM stack is rewritten in 25.10, this needs to be
// rewritten.
if (QFile::exists("/etc/calamares/OEM_MODE_ACTIVATED")) {
QStringList wip_list;
for (auto removeDebPackage : removeDebPackages) {
if (!removeDebPackage.contains(QString("calamares"))) wip_list << removeDebPackage;
}
removeDebPackages = wip_list;
}
const double removeStart = installEnd;
const double removeEnd = removeStart + 0.2 * aptRange;
if (!removeDebPackages.isEmpty()) {
const QString removeCommand = QString("DEBIAN_FRONTEND=noninteractive apt-get -y --purge remove $(/usr/libexec/checkpackage-backend %1);")
.arg(removeDebPackages.join(" "));
Calamares::JobResult removeResult = runAptCommand(removeCommand,
rootMountPoint,
removeStart,
removeEnd,
true);
if (!removeResult) return std::move(removeResult);
}
const double autoremoveStart = removeEnd;
const double autoremoveEnd = autoremoveStart + 0.2 * aptRange;
Calamares::JobResult autoremoveResult = runAptCommand("DEBIAN_FRONTEND=noninteractive apt-get -y autoremove",
rootMountPoint,
autoremoveStart,
autoremoveEnd,
true);
// Disable diversions
//divert(false);
// Move ubuntu.sources back, and clean up the cdrom file
// FIXME: there has to be a better, more native way to do this. It works
// for now, but in the 25.10 cycle, we're probably going to move some of
// these command-line apt calls to the libapt C library. LP: #2107287
try {
if (!hasInternet) {
const QString ubuntu_sources_path = rootMountPoint + "/etc/apt/sources.list.d/ubuntu.sources";
const QString backup_name = ubuntu_sources_path + ".bak";
QFile* ubuntu_sources = new QFile(ubuntu_sources_path);
QFile* ubuntu_sources_bak = new QFile(backup_name);
// Just in case this module is used in a non-Ubuntu environment, make sure ubuntu.sources exists
// TODO: make this configurable in the 25.10 cycle
if (ubuntu_sources->exists()) {
if (!ubuntu_sources->remove()) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("/etc/apt/sources.list.d/ubuntu.sources already exists and it won't budge - this is a rare edge case, please report!"));
}
}
if (!ubuntu_sources_bak->rename(ubuntu_sources_path)) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("Permission denied when moving ubuntu.sources back after offline install"));
}
// Remove the apt-cdrom entry we added earlier
// This may seem drastic, but we already expect that the automirror
// module, ran before this, creates a deb822-style ubuntu.sources
QFile* cdrom_sources_list = new QFile(rootMountPoint + "/etc/apt/sources.list");
if (!cdrom_sources_list->remove()) {
return Calamares::JobResult::error(tr("Internal Error"),
tr("Failed to remove classic sources.list file"));
}
}
} catch (const std::exception &exc) {
qDebug() << exc.what();
} catch (...) {
qDebug() << "Caught unknown error";
}
// Handle snap packages
if (installationMode != "minimal") {
QStringList snapPackages;
QStringList presentSnapsList;
// Convert QVariantList to QStringList
for (const QVariant& var : presentSnaps) {
presentSnapsList << var.toString();
}
for (const QVariant& var : packagesToInstall) {
const QVariantMap pkg = var.toMap();
if (pkg.value("snap").toBool()) {
snapPackages << pkg.value("id").toString();
}
}
QStringList finalSnapPackages;
if (!snapPackages.isEmpty() && !presentSnapsList.isEmpty()) {
finalSnapPackages = presentSnapsList + snapPackages;
}
else if (!snapPackages.isEmpty()) {
finalSnapPackages = snapPackages;
}
else if (!presentSnapsList.isEmpty() && downloadUpdates) {
finalSnapPackages = presentSnapsList;
}
if (!finalSnapPackages.isEmpty()) {
double snapStart = allocations.size() > 1 ? allocations[1].start : allocations[0].end;
double snapEnd = allocations.size() > 1 ? allocations[1].end : allocations[0].end;
Calamares::JobResult snapResult = runSnapCommand(finalSnapPackages,
rootMountPoint,
snapStart,
snapEnd);
if (!snapResult) { // Using operator bool() to check for errors
return std::move(snapResult); // Move to avoid copy
}
}
}
emit progress(1.0);
m_prettyStatus = tr("All selected packages installed successfully.");
emit prettyStatusMessageChanged(m_prettyStatus);
if (!cpbe->remove()) qDebug() << "Warning: failed to clean up /usr/libexec/checkpackage-backend";
return Calamares::JobResult::ok();
}

View File

@ -1,60 +0,0 @@
#ifndef PACKAGESELECTPROCESS_H
#define PACKAGESELECTPROCESS_H
#include <QMap>
#include <QObject>
#include <QString>
#include <QVariantMap>
#include "CppJob.h"
#include "utils/PluginFactory.h"
#include "DllMacro.h"
class QProcess;
class PLUGINDLLEXPORT PackageSelectProcess : public Calamares::CppJob
{
Q_OBJECT
public:
explicit PackageSelectProcess(QObject* parent = nullptr);
~PackageSelectProcess() override = default;
QString prettyName() const override;
QString prettyStatusMessage() const override;
Calamares::JobResult exec() override;
void setConfigurationMap(const QVariantMap& configurationMap) override;
signals:
void prettyStatusMessageChanged(const QString&);
private:
struct ProgressAllocation
{
double start;
double end;
};
Calamares::JobResult runAptCommand(const QString& command,
const QString& rootMountPoint,
double startProgress,
double endProgress,
bool verboseProgress);
Calamares::JobResult runSnapCommand(const QStringList& snapPackages,
const QString& rootMountPoint,
double startProgress,
double endProgress);
void divert(bool enable);
QMap<QString, QString> dpkgDiversions;
QString rootMountPoint;
QVariantMap m_configurationMap;
QString m_prettyStatus;
};
CALAMARES_PLUGIN_FACTORY_DECLARATION(PackageSelectProcessFactory)
#endif // PACKAGESELECTPROCESS_H

View File

@ -1,54 +0,0 @@
#include <iostream>
#include <string>
#include <unordered_set>
#include <apt-pkg/algorithms.h>
#include <apt-pkg/cacheiterators.h>
#include <apt-pkg/init.h>
#include <apt-pkg/cachefile.h>
#include <apt-pkg/pkgcache.h>
#include <apt-pkg/pkgsystem.h>
#include <apt-pkg/progress.h>
int main(int argc, char* argv[]) {
pkgInitConfig(*_config);
pkgInitSystem(*_config, _system);
if (_system == 0) {
std::cerr << "apt-pkg not initialized\n";
return 1;
}
// Open the package cache.
pkgCacheFile *cache = new pkgCacheFile();
OpProgress progress;
if (!cache || cache->Open(&progress, false) == false) {
std::cerr << "Error: could not open APT cache.\n";
return 1;
}
pkgApplyStatus(*cache);
std::vector<std::string> package_names(argv + 1, argv + argc);
if (package_names.empty()) return 0;
std::unordered_set<std::string> seen_packages;
for (std::string package_name : package_names) {
if (seen_packages.contains(package_name)) continue;
seen_packages.insert(package_name);
// Tasks and wildcards should just be passed through as-is, for now
if (package_name.starts_with('^') || package_name.contains('*')) {
std::cout << package_name << " ";
continue;
}
pkgCache::GrpIterator grp = cache->GetPkgCache()->FindGrp(package_name);
if (!grp.end()) {
pkgCache::PkgIterator it = grp.FindPreferredPkg(true);
if (!it.end() && !it.VersionList().end()) {
std::cout << package_name << " ";
}
}
}
std::cout << "\n";
cache->Close();
return 0;
}

View File

@ -1,7 +0,0 @@
---
type: "job"
name: "pkgselectprocess"
interface: "qtplugin"
load: "libcalamares_job_pkgselectprocess.so"
noconfig: true
weight: 12

View File

@ -1,5 +0,0 @@
---
dontChroot: false
timeout: 30
script:
- "touch ${ROOT}/boot/initrd.img-$(uname -r)"

View File

@ -1,7 +0,0 @@
---
dontChroot: false
timeout: 120
script:
- "sed -i 's/oem:x:1000:1000/oem:x:60999:60999/' /etc/passwd"
- "sed -i 's/oem:x:1000/oem:x:60999/' /etc/group"
- "chown -R 60999:60999 /home/oem"

View File

@ -1,5 +0,0 @@
---
dontChroot: true
timeout: 30
script:
- /usr/libexec/fixconkeys-part1 ${ROOT}

View File

@ -1,5 +0,0 @@
---
dontChroot: false
timeout: 10800
script:
- /usr/libexec/fixconkeys-part2

View File

@ -1,4 +0,0 @@
---
# Setting emergency to true will make it so this module is still run
# when a prior module fails
emergency: true

View File

@ -1,10 +0,0 @@
kubuntu/branding/ etc/calamares/
kubuntu/calamares-launch-normal usr/bin/
kubuntu/calamares-logs-helper usr/bin/
kubuntu/kubuntu-calamares.desktop usr/share/applications/
kubuntu/modules/ etc/calamares/
kubuntu/oem/calamares-launch-oem usr/bin/
kubuntu/oem/calamares-launch-oem.desktop usr/share/applications/
kubuntu/oem/calamares-oemprep.sh usr/libexec/
kubuntu/oemconfig.tar.gz etc/calamares/
kubuntu/settings.conf etc/calamares/

View File

@ -1,7 +0,0 @@
# sudo will always be present in the target system
calamares-settings-kubuntu: desktop-command-not-in-package sudo *
# there will be no manpage for any of this in the foreseeable future
calamares-settings-kubuntu: no-manual-page *
# We're just extracting a log file and preserving it for the user to look at
# after the installation, this is normal.
calamares-settings-kubuntu: uses-dpkg-database-directly [usr/bin/calamares-logs-helper]

View File

@ -1,12 +1,5 @@
lubuntu/branding/ etc/calamares/
lubuntu/calamares-launch-normal usr/bin/
lubuntu/calamares-logs-helper usr/bin/
lubuntu/lubuntu-calamares.desktop usr/share/applications/
lubuntu/lubuntu-installer.svg usr/share/icons/hicolor/scalable/apps/
lubuntu/modules/ etc/calamares/
lubuntu/oem/calamares-launch-oem usr/bin/
lubuntu/oem/calamares-launch-oem.desktop usr/share/applications/
lubuntu/oem/calamares-oemprep.sh usr/libexec/
lubuntu/oem/calamares-raspiprep.sh usr/libexec/
lubuntu/oemconfig.tar.gz etc/calamares/
lubuntu/settings.conf etc/calamares/

View File

@ -1,7 +1,3 @@
# sudo will always exist in the target system
calamares-settings-lubuntu: desktop-command-not-in-package sudo *
# there will be no manpage for any of this in the foreseeable future
calamares-settings-lubuntu: no-manual-page *
# We're just extracting a log file and preserving it for the user to look at
# after the installation, this is normal.
calamares-settings-lubuntu: uses-dpkg-database-directly [usr/bin/calamares-logs-helper]
# The .desktop file uses bash to run firefox as the local
# user. bash is included in the system.
calamares-settings-lubuntu: desktop-command-not-in-package usr/share/applications/lubuntu-calamares.desktop bash

View File

@ -1 +0,0 @@
usr/lib/calamares/modules/automirror usr/lib/${DEB_HOST_MULTIARCH}/calamares/modules/automirror

View File

@ -1,12 +0,0 @@
ubuntuunity/branding/ etc/calamares/
ubuntuunity/calamares-launch-normal usr/bin/
ubuntuunity/calamares-logs-helper usr/bin/
ubuntuunity/kvantum.kvconfig etc/xdg/Kvantum/
ubuntuunity/modules/ etc/calamares/
ubuntuunity/oem/calamares-launch-oem usr/bin/
ubuntuunity/oem/calamares-launch-oem.desktop usr/share/applications/
ubuntuunity/oem/calamares-oemprep.sh usr/libexec/
ubuntuunity/oemconfig.tar.gz etc/calamares/
ubuntuunity/settings.conf etc/calamares/
ubuntuunity/ubuntu-unity-calamares.desktop usr/share/applications/
ubuntuunity/ubuntu-unity-installer.svg usr/share/icons/hicolor/scalable/apps/

View File

@ -1,7 +0,0 @@
# sudo will always be present in the target system
calamares-settings-ubuntu-unity: desktop-command-not-in-package sudo *
# there will be no manpage for any of this in the foreseeable future
calamares-settings-ubuntu-unity: no-manual-page *
# We're just extracting a log file and preserving it for the user to look at
# after the installation, this is normal.
calamares-settings-ubuntu-unity: uses-dpkg-database-directly [usr/bin/calamares-logs-helper]

View File

@ -0,0 +1,5 @@
ubuntustudio/branding/ etc/calamares/
ubuntustudio/calamares-logs-helper usr/bin/
ubuntustudio/modules/ etc/calamares/
ubuntustudio/settings.conf etc/calamares/
ubuntustudio/ubuntustudio-calamares.desktop usr/share/applications/

View File

@ -0,0 +1,3 @@
# The .desktop file uses bash to run firefox as the local
# user. bash is included in the system.
calamares-settings-ubuntustudio: desktop-command-not-in-package usr/share/applications/ubuntustudio-calamares.desktop bash

874
debian/changelog vendored
View File

@ -1,877 +1,3 @@
calamares-settings-ubuntu (1:25.04.27) plucky; urgency=medium
* Disable virt-manager installation in third-party software options, as the
package is broken when installed by pkgselect.
* Remove full installation and third-party software options from all
flavors.
* Fix segfaults during installation. (LP: #2107486)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 16 Apr 2025 18:23:56 -0500
calamares-settings-ubuntu (1:25.04.26) plucky; urgency=medium
* [bootloader] Instead of utilizing a contextualprocess to only bind-mount
/cdrom to /media/cdrom when it's a specific type of system, simply add it
to the mounts for all flavors, and move the specific copy of the vmlinuz
file to a dedicated shellprocess module. This will be re-factored next
cycle, ideally being worked directly into a dedicated C++ module instead
of several, miscellaneous shell scripts wrapped in YAML.
* [pkgselectprocess] Explicitly log all apt commands in the debug logs.
* [pkgselectprocess] Ensure apt-cdrom command outputs have their own prefix.
* [checkpackage-backend] Simply pass through packages starting with "^" or
containing "*". For this cycle we can trust our distributors won't do
anything unusual, but next cycle, we need to perform explicit validation
on these items. If you are a downstream, please be careful.
* [pkgselectprocess] Ensure hasInternet is available as a local variable, so
we can use it.
* [pkgselectprocess] When running apt remove, use CPBE just in case.
* [pkgselectprocess] When doing installations without network, we need to
ensure that we don't try to perform apt operations that require internet.
To do this in Plucky, we need to temporarily copy the ubuntu.sources file
to an ubuntu.sources.bak file. To bring all of the previous commits in
this upload together, we use the bind-mounted /media/cdrom not only to
install the correct GRUB packages, but to ensure that we can still install
them and any other packages on ship-live. There has to be a better, more
native way to do this. It works for now, but in the Questing cycle, we're
probably going to move some of these command-line apt calls to be a
consumer of the libapt C library (LP: #2107287).
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 15 Apr 2025 22:36:52 -0500
calamares-settings-ubuntu (1:25.04.25) plucky; urgency=medium
* [pkgselectprocess] When we are creating the final list of packages to feed
to "apt install," virtual packages which do not have a valid candidate are
included in this list, causing the installation to fail. When creating
this list, use FindGrp instead of FindPkg, and only add it to the list if
there is a valid candidate. Additionally, add these items to an unordered
set, to eliminate deduplication (LP: #2106773).
* [pkgselect] As a temporary measure until OEM is refactored in the 25.10
cycle, we need to ensure that Calamares and its necessary dependencies are
installed on the target, iff this is a stacked squashfs. We're doing this
in pkgselect instead of pkgselectprocess because pkgselect already knows
about stacked squashfses, it's what provides the final "additional install
list" to be considered by checkpackage-backend, and this is a temporary
fix anyway (LP: #2104343).
* [pkgselectprocess] To complement the last fix, ensure that Calamares ends
up on the removal list for non-stacked squashfses if and only if OEM is
disabled, and Calamares shows up on the install list only for stacked
squashfses which have OEM enabled. This nuanced approach ensures all
potential combinations have the intended functionality.
* [OEM] Ensure the final desktop file completing OEM is marked as executable.
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 13 Apr 2025 03:17:13 -0500
calamares-settings-ubuntu (1:25.04.24) plucky; urgency=medium
* Bump Standards-Version to 4.7.2, no changes needed.
* [pkgselectprocess] If checkpackage-backend does not exist in the target
system, likely due to the use of stacked squashfses, ensure it temporarily
exists so it can be used in the install process. This fixes installation
of the Virtual Machine Manager when selected on the Customize menu
(LP: #2104243).
* [OEM] As a temporary stop-gap until this can be completely re-written next
cycle, ensure the sed call in the Calamares OEM setup refers to
pkgselectprocess, not packages. This was preventing the OEM processing
step (as opposed to just the GUI configuration) to be missing
(LP: #2104343).
* [OEM] [Kubuntu] In stage two, ensure we use Wayland, consistent with the
rest of the session scripts.
* [pkgselectprocess] Disable the dpkg trigger inhibition logic this cycle.
The original goal here was to de-duplicate some of the trigger processing
work, but it's obvious this needs more work. It's too premature to ship
right now, unfortunately.
* [Lubuntu] Remove the Dracut configuration so we fall back to the defaults
provided by the package. This is a no-op.
-- Simon Quigley <tsimonq2@ubuntu.com> Wed, 09 Apr 2025 07:02:36 -0500
calamares-settings-ubuntu (1:25.04.23) plucky; urgency=medium
* [Kubuntu] Update welcome images for 25.04 (LP: #2104062)
* [Kubuntu] Update 07_Free_and_Open_Source installer slide for plucky
puffin mascot image.
* [Kubuntu] Update 10_Kubuntu_Focus installer slide.
-- Rik Mills <rikmills@kde.org> Mon, 07 Apr 2025 11:38:23 +0100
calamares-settings-ubuntu (1:25.04.22) plucky; urgency=medium
* [Unity] Update welcome slide for Plucky.
* [Unity] Set Kvantum theme to KvGnomeDark for Calamares.
-- Walter Lapchynski <wxl@ubuntu.com> Wed, 26 Mar 2025 00:05:56 +0000
calamares-settings-ubuntu (1:25.04.21) plucky; urgency=medium
* Update partition names to match current version.
-- Walter Lapchynski <wxl@ubuntu.com> Mon, 24 Mar 2025 22:46:46 +0000
calamares-settings-ubuntu (1:25.04.20) plucky; urgency=medium
* Update OEM batch identifier to match current version.
-- Walter Lapchynski <wxl@ubuntu.com> Mon, 24 Mar 2025 07:01:24 +0000
calamares-settings-ubuntu (1:25.04.19) plucky; urgency=medium
* [Lubuntu] Update slides for current applications:
* Support: IRC -> Matrix, Lubuntu -> Ubuntu Discourse
* Lightweight: KCalc -> Qalc
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 07 Mar 2025 03:21:03 +0000
calamares-settings-ubuntu (1:25.04.18) plucky; urgency=medium
* Add python3 as build-dep.
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 07 Mar 2025 01:11:36 +0000
calamares-settings-ubuntu (1:25.04.17) plucky; urgency=medium
* [Lubuntu] Update welcome slides for Plucky.
-- Walter Lapchynski <wxl@ubuntu.com> Thu, 06 Mar 2025 10:23:08 +0000
calamares-settings-ubuntu (1:25.04.16) plucky; urgency=medium
* Fix installation of apt packages more consistently (LP: #2089494).
-- Simon Quigley <tsimonq2@ubuntu.com> Mon, 24 Feb 2025 03:53:14 -0600
calamares-settings-ubuntu (1:25.04.15) plucky; urgency=medium
* Move calamares -> libcalamares-dev for build dependencies.
* [basicwallpaper] Bump minimum CMake version, remove .user file.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 21 Feb 2025 13:10:40 -0600
calamares-settings-ubuntu (1:25.04.14) plucky; urgency=medium
* Add dh-sequence-qmldeps and ${qml6:Depends} to ensure all QML 6 runtime
dependencies are properly picked up.
* Run wrap-and-sort.
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 18 Feb 2025 01:29:25 -0600
calamares-settings-ubuntu (1:25.04.13) plucky; urgency=medium
* [users] Set allowWeakPasswords and allowWeakPasswordsDefault to false for
all three flavors, but add some basic password recommendations based on
NIST standards, warning if the password falls outside of that.
* [packaging] Bump Calamares dependency to 3.3.13-0ubuntu4 for users fixes.
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 16 Feb 2025 18:05:36 -0600
calamares-settings-ubuntu (1:25.04.12) plucky; urgency=medium
* [Lubuntu] Update password requirements to match NIST recommendations.
* [Lubuntu] Allow user to override password requirements, but not by
default.
-- Walter Lapchynski <wxl@ubuntu.com> Tue, 28 Jan 2025 17:14:06 +0000
calamares-settings-ubuntu (1:25.04.11) plucky; urgency=medium
* Rearrange the Lubuntu module order to account for packages with new stuff
to put in the initramfs.
* Make forbidden_names much stronger (LP: #2088576).
-- Simon Quigley <tsimonq2@ubuntu.com> Wed, 27 Nov 2024 23:28:28 -0600
calamares-settings-ubuntu (1:25.04.10) plucky; urgency=medium
* [pkgselectprocess] Add dpkg diversions for dracut, update-initramfs, and
locale-gen. These will be called later in the process.
* [pkgselectprocess] Add a more robust check for apt packages when
installing them (LP: #2089494).
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 24 Nov 2024 20:51:38 -0600
calamares-settings-ubuntu (1:25.04.9) plucky; urgency=medium
* Add a Dracut config file for Lubuntu.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 22 Nov 2024 19:56:22 -0600
calamares-settings-ubuntu (1:25.04.8) plucky; urgency=medium
* Add new global storage value for stacked squashfses and adjust config.
* Switch Lubuntu to dracut.
* Fix apt install functionality in pkgselectprocess.
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 21 Nov 2024 22:27:59 -0600
calamares-settings-ubuntu (1:25.04.7) plucky; urgency=medium
* Change oem user in Lubuntu raspi prep to user number 60999
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Wed, 20 Nov 2024 17:05:19 -0800
calamares-settings-ubuntu (1:25.04.6) plucky; urgency=medium
* Lubuntu raspi prep: Create oem user so it can actually login to sddm
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Wed, 20 Nov 2024 16:58:28 -0800
calamares-settings-ubuntu (1:25.04.5) plucky; urgency=medium
* Fix Vcs to point to ubuntu-qt-code team LP git.
-- Rik Mills <rikmills@kde.org> Tue, 12 Nov 2024 18:29:43 +0000
calamares-settings-ubuntu (1:25.04.4) plucky; urgency=medium
* kubuntu/modules/pkgselect.conf: Remove fcitx* from installed system.
-- Rik Mills <rikmills@kde.org> Tue, 12 Nov 2024 17:47:40 +0000
calamares-settings-ubuntu (1:25.04.3) plucky; urgency=medium
* Lubuntu: Set executable bit on raspberry pi prep script
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Sun, 10 Nov 2024 06:30:46 -0800
calamares-settings-ubuntu (1:25.04.2) plucky; urgency=medium
* Lubuntu: Add raspberry pi prep script
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Sat, 09 Nov 2024 09:25:43 -0800
calamares-settings-ubuntu (1:25.04.1) plucky; urgency=medium
* Welcome to Plucky Puffin!
* Port to Qt 6.
* Rewrite the pkgselect module and its processing.
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 22 Oct 2024 19:23:22 -0500
calamares-settings-ubuntu (1:24.10.5) oracular; urgency=medium
* Update Kubuntu slideshow for 24.10 (LP: #2080925)
-- Rik Mills <rikmills@kde.org> Sat, 28 Sep 2024 21:46:11 +0100
calamares-settings-ubuntu (1:24.10.4) oracular; urgency=medium
* Fix welcome image for Kubuntu, Lubuntu, and Ubuntu Unity. (LP: #2080925)
* Set root partition name properly for Kubuntu, Lubuntu, and Ubuntu Unity.
(LP: #2065602)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Tue, 24 Sep 2024 22:23:11 -0500
calamares-settings-ubuntu (1:24.10.3) oracular; urgency=medium
* Fix pkgselect UI becoming centered when minimal install mode is selected.
(LP: #2076303)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 08 Aug 2024 14:25:24 -0500
calamares-settings-ubuntu (1:24.10.2) oracular; urgency=medium
* kubuntu: Change donate URL to point to Kubuntu's donation page
* kubuntu: Use networkcheck.kde.org for checking for an Internet connection
* kubuntu: Do not recommend that the user have an Internet connection during
first-time user setup after an OEM installation
* ubuntuunity: Do not recommend that the user have an Internet connection
during first-time user setup after an OEM installation
* all: Change the UID of the OEM configuration user to 60999.
- This is done because otherwise the OEM configuration user is given UID
1000. This results in the first real user on the machine having UID
1001, which could cause issues in a single-user deployment where the
user must have or is assumed to have UID 1000. Setting the OEM
configuration user's UID to 60999 results in the first real user having
UID 1000. This is similar (though not identical) to Ubiquity's behavior
with the OEM configuration user.
* kubuntu: Use QT_QPA_PLATFORMTHEME="kde" rather than
QT_STYLE_OVERRIDE="Breeze" for the OEM first-time setup session.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 12 Jun 2024 23:26:13 -0500
calamares-settings-ubuntu (1:24.10.1) oracular; urgency=medium
* Welcome to Oracular Oriole!
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 30 Apr 2024 15:24:38 -0500
calamares-settings-ubuntu (1:24.04.39) noble; urgency=medium
* Fix permissions on /home/oem when doing OEM installations. (LP: #2063403)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 25 Apr 2024 00:01:37 -0500
calamares-settings-ubuntu (1:24.04.38) noble; urgency=high
* Do not remove zram-config on Ubuntu Unity, it does not exist in the first
place (LP: #2063108).
-- Simon Quigley <tsimonq2@ubuntu.com> Mon, 22 Apr 2024 07:10:28 -0500
calamares-settings-ubuntu (1:24.04.37) noble; urgency=medium
* Correctly lengthen timeouts for network and initramfs package commands.
(LP: #2060429)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 19 Apr 2024 18:52:09 -0500
calamares-settings-ubuntu (1:24.04.36) noble; urgency=medium
* Don't show Thunderbird as an installable third-party app on Kubuntu.
(LP: #2062438)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 19 Apr 2024 17:38:06 -0500
calamares-settings-ubuntu (1:24.04.35) noble; urgency=medium
* Remove timeouts for network-related package commands. (LP: #2062106)
* Remove timeouts for update-initramfs. (LP: #2060429)
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 19 Apr 2024 21:23:54 +0000
calamares-settings-ubuntu (1:24.04.34) noble; urgency=medium
* Add icon on Desktop to finish OEM install. (LP: #2060928)
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 19 Apr 2024 19:18:59 +0000
calamares-settings-ubuntu (1:24.04.33) noble; urgency=medium
* Fix slideshow image sizes for Kubuntu.
* Fix the size of the logo in the upper-left corner for Kubuntu.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 18 Apr 2024 19:28:02 -0500
calamares-settings-ubuntu (1:24.04.32) noble; urgency=medium
* Remove the third-party driver installation checkbox from pkgselect, its
functionality was not implemented.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 17 Apr 2024 23:18:12 -0500
calamares-settings-ubuntu (1:24.04.31) noble; urgency=medium
* Add Kubuntu branding. (LP: #2060845)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Tue, 16 Apr 2024 12:57:56 -0500
calamares-settings-ubuntu (1:24.04.30) noble; urgency=medium
* Don't keep lubuntu-snap-installation-monitor installed on the minimal
option (LP: #2061318).
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 16 Apr 2024 10:24:00 -0500
calamares-settings-ubuntu (1:24.04.29) noble; urgency=medium
[ Aaron Rainbolt ]
* Change Kubuntu's Calamares sidebar color.
[ Walter Lapchynski ]
* Remove after_bootloader contextual process. (LP: #2061681)
-- Walter Lapchynski <wxl@ubuntu.com> Tue, 16 Apr 2024 01:10:47 +0000
calamares-settings-ubuntu (1:24.04.28) noble; urgency=medium
* Run apt updates before installing packages. (LP: #2061150)
-- Walter Lapchynski <wxl@ubuntu.com> Sat, 13 Apr 2024 00:44:32 +0000
calamares-settings-ubuntu (1:24.04.27) noble; urgency=medium
* Run the pkgselect contextualprocesses after packages in Kubuntu and Ubuntu
Unity (LP: #2060879)
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 11 Apr 2024 02:49:44 -0500
calamares-settings-ubuntu (1:24.04.26) noble; urgency=medium
* Make the pkgselect module actually work on Kubuntu and Ubuntu Unity.
(LP: #2060879)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 10 Apr 2024 16:16:21 -0500
calamares-settings-ubuntu (1:24.04.25) noble; urgency=medium
* Be completely sure apt will not try to prompt the user.
* Bump the timeout limits to 15 minutes for both pkgselect
contextualprocess modules.
* Allow fixconkeys-part2 a 5 minute window to run, which should be
enough to run update-initramfs (LP: #2060429).
* Adjust spacers accordingly on no network.
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 09 Apr 2024 03:15:53 -0500
calamares-settings-ubuntu (1:24.04.24) noble; urgency=medium
* Don't try to remove the nonexistant zram-config package from a Kubuntu
installation.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Mon, 08 Apr 2024 21:07:08 -0500
calamares-settings-ubuntu (1:24.04.23) noble; urgency=medium
* Set GOCACHE to stay within the build directory
-- Simon Chopin <schopin@ubuntu.com> Wed, 03 Apr 2024 19:40:50 +0200
calamares-settings-ubuntu (1:24.04.22) noble; urgency=medium
* Add missing build dependency on golang-go.
-- Simon Quigley <tsimonq2@ubuntu.com> Mon, 01 Apr 2024 15:28:24 -0500
calamares-settings-ubuntu (1:24.04.21) noble; urgency=medium
[ Simon Quigley ]
* Revamp pkgselect and enable it for everyone (LP: #2056061).
* Wraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaap.
* No-network UX improvements for pkgselect (LP: #2048727).
[ Aaron Rainbolt ]
* Don't try to start Unity after the OEM environment exits on Ubuntu Unity,
this has to be done by logging in via LightDM.
* Fix a couple of goofs with post-install package purging.
[ Walter Lapchynski ]
* Make links work. (LP: #1981473)
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 28 Mar 2024 23:30:34 -0500
calamares-settings-ubuntu (1:24.04.20) noble; urgency=medium
* Fix LUKS passphrase unlocker for non-US keyboard layouts.
* Disable pkgselect module on Kubuntu, it's not ready for use and wasn't
intentionally enabled.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 21 Mar 2024 13:32:53 -0500
calamares-settings-ubuntu (1:24.04.19) noble; urgency=medium
* Add Ubuntu Unity configuration. (LP: #2055799)
* Disable GeoIP in a couple missed places.
* Don't tell the user that they've disabled OEM configuration mode when they
chose to not disable it.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Sun, 17 Mar 2024 20:14:00 +0000
calamares-settings-ubuntu (1:24.04.18) noble; urgency=medium
* GeoIP in welcome module disabled.
-- Walter Lapchynski <wxl@ubuntu.com> Wed, 13 Mar 2024 18:16:06 +0000
calamares-settings-ubuntu (1:24.04.17) noble; urgency=medium
[ Neal Gompa ]
* debian/control: Define the flavor packages as swappable packages
[ Aaron Rainbolt ]
* Wipe Ubuntu Studio's configuration while preserving branding, Studio now
uses ubuntu-desktop-provision.
* Migrate from users.conf password setting "nonEmpty: true" to
"minLength: 1" to enforce non-empty passwords.
- This is not a new feature, we had non-empty passwords being enforced in
the past and didn't intentionally undo this, but Calamares dropped the
"nonEmpty: true" setting we were using.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Sun, 10 Mar 2024 18:10:03 -0500
calamares-settings-ubuntu (1:24.04.16) noble; urgency=medium
* Actually fix the autologin bug.
* Don't kick the user out of first-run configuration mode if they don't
complete it the first time around.
* Fix a bug that caused the first-run setup wizard to not run even after
instructing it to.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 15 Feb 2024 10:36:34 -0600
calamares-settings-ubuntu (1:24.04.15) noble; urgency=medium
* Add Lubuntu OEM config.
* Fix a bug that could interfere with autologin setup during first-run
configuration after an OEM install.
* Add a simple wallpaper display engine for the first-run configuration
wizard.
* Don't run kdialog as root.
* Make OEM file cleanup more thorough.
* Update copyright file.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 14 Feb 2024 12:11:34 -0600
calamares-settings-ubuntu (1:24.04.14) noble; urgency=medium
* Add Kubuntu OEM config.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 07 Feb 2024 17:02:27 -0600
calamares-settings-ubuntu (1:24.04.13) noble; urgency=medium
* Add Kubuntu config.
* Update Lubuntu config to create an unencrypted /boot partition when
encryption is enabled.
* Enforce the use of Calamares 3.3.1-0ubuntu3 or later to ensure that needed
encryption-related features are present.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 02 Feb 2024 15:32:10 -0600
calamares-settings-ubuntu (1:24.04.12) noble; urgency=medium
* Be compliant with the current state of the deb822 Ubuntu implementation
specification.
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 18 Jan 2024 16:27:43 -0600
calamares-settings-ubuntu (1:24.04.11) noble; urgency=medium
* Update welcome slide for Noble.
-- Dan Simmons <kc2bez@lubuntu.me> Sat, 30 Dec 2023 16:26:04 -0500
calamares-settings-ubuntu (1:24.04.10) noble; urgency=medium
* Use new icon for Lubuntu's installer, and improve theming.
-- Simon Quigley <tsimonq2@ubuntu.com> Sat, 23 Dec 2023 18:20:50 -0600
calamares-settings-ubuntu (1:24.04.9) noble; urgency=medium
* Remove muon from the list of packages to purge when doing a minimal
installation, it no longer exists in Noble.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 08 Dec 2023 01:16:24 +0000
calamares-settings-ubuntu (1:24.04.8) noble; urgency=medium
* Use lxqt-sudo instead of sudo, to pick up theming.
* Even if modules fail, try to perform the unmount.
* Explicitly depend on lubuntu-installer-prompt, which provides a default
workflow on the live system. Remove this package at the end of the install
as well.
* Go back to fullscreen.
* Add a full installation radio button, and disable the bottom checkboxes if
minimal install is selected.
* Update snaps used for Krita.
* Install the QML file to the proper directory.
* Add some testing code to the QML file to make it do what we'd like.
-- Simon Quigley <tsimonq2@ubuntu.com> Wed, 22 Nov 2023 18:30:39 -0600
calamares-settings-ubuntu (1:24.04.7) noble; urgency=medium
* Copy the Calamares installation log file from $HOME rather than /root.
(LP: #2044006)
* Update a Lintian override now that we're using sudo rather than pkexec to
launch Calamares in Lubuntu.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Mon, 20 Nov 2023 12:21:41 -0600
calamares-settings-ubuntu (1:24.04.6) noble; urgency=medium
* Use sudo -E to launch Calamares so that Lubuntu theming is preserved.
-- Aaron Rainbolt <arraybolt3@gmail.com> Sun, 19 Nov 2023 16:26:18 -0600
calamares-settings-ubuntu (1:24.04.5) noble; urgency=medium
* Fixed an FTBFS on !(amd64).
-- Aaron Rainbolt <arraybolt3@gmail.com> Wed, 15 Nov 2023 21:12:05 -0600
calamares-settings-ubuntu (1:24.04.4) noble; urgency=medium
* Fixed the pkgselect module's CMakeLists.txt file.
* Removed some unnecessary path segments from debian/rules.
* Unset the executable bit on files that shouldn't be executable.
* Exported the LC_ALL=C.UTF-8 and DEB_BUILD_MAINT_OPTIONS = hardening =+all
environment variables in debian/rules since we're building a shared
library in here now.
* Removed trailing whitespace from changelog.
* Added some lintian-overrides for the lack of a manual page and an
executable Python script in /usr/lib
-- Aaron Rainbolt <arraybolt3@gmail.com> Wed, 15 Nov 2023 18:33:39 -0600
calamares-settings-ubuntu (1:24.04.3) noble; urgency=medium
* Revert a failed FTBFS fix.
-- Aaron Rainbolt <arraybolt3@gmail.com> Wed, 15 Nov 2023 17:01:22 -0600
calamares-settings-ubuntu (1:24.04.2) noble; urgency=medium
* Fix FTBFS on !(amd64).
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 14 Nov 2023 14:34:09 -0600
calamares-settings-ubuntu (1:24.04.1) noble; urgency=medium
* Fix Vcs-*.
* Add a Package Select module, allowing for fine-tuned customization of the
installed system.
* Migrate to deb822 sources, removing the sources.list file pre-populated by
livecd-rootfs. Main and Universe deb sources are enabled by default,
Restricted and Multiverse are opt-in via the installer checkbox.
* Welcome to Noble!
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 20 Oct 2023 13:39:32 -0500
calamares-settings-ubuntu (1:23.10.4) mantic; urgency=medium
* Remove the Partners repository as an option.
* Use geoip.ubuntu.com by default.
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 08 Oct 2023 11:53:28 -0500
calamares-settings-ubuntu (1:23.10.3) mantic; urgency=medium
* No-change rebuild.
-- Walter Lapchynski <wxl@ubuntu.com> Sun, 10 Sep 2023 10:05:21 -0700
calamares-settings-ubuntu (1:23.10.2) mantic; urgency=medium
* Update welcome image for Mantic in Lubuntu.
-- Walter Lapchynski <wxl@ubuntu.com> Sun, 10 Sep 2023 09:03:28 -0700
calamares-settings-ubuntu (1:23.10.1) mantic; urgency=medium
* Welcome to the Mantic Minotaur!
* Add ext4, btrfs, xfs file system options on erase disk for Lubuntu.
-- Dan Simmons <kc2bez@lubuntu.me> Mon, 14 Aug 2023 20:10:37 -0400
calamares-settings-ubuntu (1:23.04.12) lunar; urgency=medium
* Don't allow the first user to be created with a blank password in either
Lubuntu or Ubuntu Studio. (LP: #2016436)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Sun, 16 Apr 2023 17:34:56 -0500
calamares-settings-ubuntu (1:23.04.11) lunar; urgency=medium
* Fixed an invalid "SidebarTextSelect" field in Lubuntu's branding.desc -
this is now called "SidebarTextCurrent".
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Mon, 20 Mar 2023 17:47:40 -0500
calamares-settings-ubuntu (1:23.04.10) lunar; urgency=medium
* Fix Ubuntu Studio sidebar colors
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Mon, 20 Mar 2023 11:49:08 -0700
calamares-settings-ubuntu (1:23.04.9) lunar; urgency=medium
* Update ubuntustudio slideshow
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Sat, 18 Mar 2023 08:46:57 -0700
calamares-settings-ubuntu (1:23.04.8) lunar; urgency=medium
* Made the slideshow loop again. (Slow systems were ending up on the "The
installation should finish soon" screen when the installation was only 8%
done, and then were staying on that screen.)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 16 Mar 2023 22:31:01 -0500
calamares-settings-ubuntu (1:23.04.7) lunar; urgency=medium
* Updated copyright file.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 15 Mar 2023 03:53:07 -0500
calamares-settings-ubuntu (1:23.04.6) lunar; urgency=medium
* Updated the lubuntu installer slideshow.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Mon, 13 Mar 2023 19:40:55 -0500
calamares-settings-ubuntu (1:23.04.5) lunar; urgency=medium
* Ensure the langpacks for GNOME and KDE applications are installed too.
This increases the end user install by approximately 25 MB, and saves them
the trouble of having to hunt for it later.
-- Simon Quigley <tsimonq2@ubuntu.com> Tue, 07 Mar 2023 13:16:32 -0700
calamares-settings-ubuntu (1:23.04.4) lunar; urgency=medium
* Switch from using the lsb_release python module to the distro module, as
the python module for lsb_release no longer exists in Lunar.
(LP: #2008685)
* Bumped Standards-Version to 4.6.2, no changes necessary.
* Added an explicit Depends on python3-distro.
* Ran wrap-and-sort.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Tue, 28 Feb 2023 19:27:13 -0600
calamares-settings-ubuntu (1:23.04.3) lunar; urgency=medium
* Fixed a syntax error that led to incorrect sidebar coloring (LP: #1991251).
* Set Calamares to launch in windowed mode, avoiding a welcome image scaling
issue.
* Updated Lintian overrides to work with Lintian again.
* Removed unnecessary Breaks lines from both calamares-settings-lubuntu and
calamares-settings-ubuntustudio. Conflicts is sufficient here.
* Fixed broken Lintian override in Lubuntu.
* Removed trailing whitespace from changelog.
* Bumped Standards-Version to 4.6.1, no changes necessary.
* Added 'Rules-Requires-Root: no'.
* Added Lintian overrides for missing manpages.
* Added Lintian overrides for direct usage of the dpkg database - this is
just log file extraction.
* Fixed changelog section for version 1:22.10.12.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Wed, 23 Nov 2022 16:08:10 -0600
calamares-settings-ubuntu (1:23.04.2) lunar; urgency=medium
* Allow swap for Ubuntu Studio (LP: #1996646)
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Tue, 15 Nov 2022 17:37:14 -0800
calamares-settings-ubuntu (1:23.04.1) lunar; urgency=medium
* Welcome to the Lunar Lobster!
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 28 Oct 2022 14:26:09 -0500
calamares-settings-ubuntu (1:22.10.12) kinetic; urgency=medium
[ Erich Eickmeyer ]
* Fix for black Ubuntu Studio sidebar (LP: #1991251)
[ Aaron Rainbolt ]
* Fixed a syntax error that led to incorrect sidebar coloring (LP: #1991251).
* Set Calamares to launch in windowed mode, avoiding a welcome image scaling
issue.
-- Aaron Rainbolt <arraybolt3@gmail.com> Tue, 04 Oct 2022 20:39:43 -0500
calamares-settings-ubuntu (1:22.10.11) kinetic; urgency=medium
* Tackled edge case for if libreoffice-help-$LOCALE doesn't exist but
libreoffice-l10n-$LOCALE does exist (required for LibreOffice
localization to work with languages like Icelandic)
-- Aaron Rainbolt <arraybolt3@gmail.com> Fri, 05 Aug 2022 13:19:50 -0500
calamares-settings-ubuntu (1:22.10.10) kinetic; urgency=medium
* Fixed LibreOffice localization bug (LP: #1970270).
-- Aaron Rainbolt <arraybolt3@gmail.com> Mon, 25 Jul 2022 23:47:11 -0500
calamares-settings-ubuntu (1:22.10.9) kinetic; urgency=medium
* Remove remaining conflicting ubuntustudio files existing in common
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Tue, 28 Jun 2022 11:48:34 -0700
calamares-settings-ubuntu (1:22.10.8) kinetic; urgency=medium
* Remove file in ubuntustudio settings duplicated in common
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Mon, 27 Jun 2022 17:15:06 -0700
calamares-settings-ubuntu (1:22.10.7) kinetic; urgency=medium
* Major oops in last changelog entry.
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 26 Jun 2022 22:17:37 -0500
calamares-settings-ubuntu (1:22.10.6) kinetic; urgency=medium
* Move much of the common modules to the common package.
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 26 Jun 2022 22:10:37 -0500
calamares-settings-ubuntu (1:22.10.5) kinetic; urgency=medium
* Fix desktop file typo in exec line.
-- Dan Simmons <kc2bez@lubuntu.me> Sun, 12 Jun 2022 14:45:37 -0400
calamares-settings-ubuntu (1:22.10.4) kinetic; urgency=medium
* Adjust desktop file to use pkexec so it starts.
* Point to the right log file now that we start as root.
-- Dan Simmons <kc2bez@lubuntu.me> Sat, 11 Jun 2022 16:06:53 -0400
calamares-settings-ubuntu (1:22.10.3) kinetic; urgency=medium
* Fixed contextual and shell processes for Lubuntu.
* Fixed contextual and shell processed for Ubuntu Studio.
* Updated Ubuntu Studio settings for Calamres 3.3.
-- Aaron Rainbolt <arraybolt3@gmail.com> Thu, 09 Jun 2022 19:27:24 -0500
calamares-settings-ubuntu (1:22.10.2) kinetic; urgency=medium
* Update settings for Calamares 3.3.
-- Aaron Rainbolt <arraybolt3@gmail.com> Wed, 08 Jun 2022 18:48:23 -0500
calamares-settings-ubuntu (1:22.10.1) kinetic; urgency=medium
* Welcome to the Kinetic Kudu!
* Fix manual btrfs notifications (LP: #1966774).
-- Simon Quigley <tsimonq2@ubuntu.com> Thu, 28 Apr 2022 10:12:01 -0500
calamares-settings-ubuntu (1:22.04.4) jammy; urgency=medium
* Change calamares to use Ubuntu Studio Light colors
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Thu, 24 Mar 2022 09:50:18 -0700
calamares-settings-ubuntu (1:22.04.3) jammy; urgency=medium
* Fix for kded automount issue (LP: #1965658)
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Tue, 22 Mar 2022 15:18:58 -0700
calamares-settings-ubuntu (1:22.04.2) jammy; urgency=medium
* Update Ubuntu Studio logo, slideshow (LP: #1965645)
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Mon, 21 Mar 2022 08:39:17 -0700
calamares-settings-ubuntu (1:22.04.1) jammy; urgency=medium
* Welcome to Jammy Jellyfish!
- Update Branding to 22.04.
- Update desktop file.
* Bump Standards-Version to 4.6.0, no changes needed.
-- Dan Simmons <kc2bez@lubuntu.me> Sun, 14 Nov 2021 11:24:15 -0500
calamares-settings-ubuntu (1:21.10.2) impish; urgency=medium
* Update desktop files for proper version. (LP: #1944778)
* Update branding for proper version.
-- Dan Simmons <kc2bez@lubuntu.me> Sat, 25 Sep 2021 07:47:25 -0400
calamares-settings-ubuntu (1:21.10.1) impish; urgency=medium
* ubuntustudio/modules/packages.conf
- Remove zram-config from packages to remove to prevent crash
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Tue, 14 Sep 2021 17:22:11 -0700
calamares-settings-ubuntu (1:21.04.2) hirsute; urgency=medium
* Append -D6 to desktop exec to bring log level to preferred level.
(LP: #1917360)
-- Dan Simmons <kc2bez@lubuntu.me> Mon, 01 Mar 2021 15:37:29 -0500
calamares-settings-ubuntu (1:21.04.1) hirsute; urgency=medium
[ apt-ghetto ]

101
debian/control vendored
View File

@ -3,102 +3,47 @@ Section: devel
Priority: optional
Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
Uploaders: Simon Quigley <tsimonq2@ubuntu.com>
Build-Depends: debhelper-compat (= 13),
dh-sequence-qmldeps,
cmake,
extra-cmake-modules,
fakeroot,
intltool,
libapt-pkg-dev,
libcalamares-dev (>= 3.3.13-0ubuntu4),
libkf6coreaddons-dev,
libqt6svg6-dev,
libyaml-cpp-dev,
python3,
qt6-base-dev,
qt6-declarative-dev,
qt6-l10n-tools,
qt6-tools-dev,
qt6-tools-dev-tools
Standards-Version: 4.7.2
Homepage: https://code.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Vcs-Browser: https://git.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Vcs-Git: https://git.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Rules-Requires-Root: no
Package: calamares-settings-kubuntu
Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends},
${qml6:Depends}
Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor
Description: Kubuntu Calamares Settings and Branding
This package contains the Calamares settings and branding for Kubuntu.
As part of the branding the installer slideshow is contained within.
The settings ensure a proper Kubuntu desktop is installed with the
KDE Plasma desktop environment.
Build-Depends: debhelper-compat (= 13), intltool, qttools5-dev-tools
Standards-Version: 4.5.0
Homepage: https://code.launchpad.net/ubuntu-calamares-settings
Vcs-Git: https://git.launchpad.net/ubuntu-calamares-settings
Vcs-Browser: https://git.launchpad.net/ubuntu-calamares-settings
Package: calamares-settings-lubuntu
Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends},
${qml6:Depends}
Recommends: lubuntu-installer-prompt
Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor
${misc:Depends}
Breaks: calamares-settings-ubuntustudio
Conflicts: calamares-settings-ubuntustudio
Description: Lubuntu Calamares Settings and Branding
This package contains the Calamares settings and branding for Lubuntu.
As part of the branding the installer slideshow is contained within.
The settings ensure a proper Lubuntu desktop is installed with the
LXQt desktop environment.
Package: calamares-settings-ubuntu-unity
Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
qt6-style-kvantum,
qt6-style-kvantum-themes,
${misc:Depends},
${qml6:Depends}
Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor
Description: Ubuntu Unity Calamares Settings and Branding
This package contains the Calamares settings and branding for Ubuntu Unity.
As part of the branding the installer slideshow is contained within.
The settings ensure a proper Ubuntu Unity desktop is installed with the
Unity desktop environment.
Package: calamares-settings-ubuntu-common
Architecture: any
Depends: calamares (>= 3.3.13-0ubuntu4),
calamares-settings-ubuntu-common-data (= ${binary:Version}),
Depends: calamares (>= 3.2.14~),
cryptsetup,
dracut-core,
kdialog,
keyutils,
libglib2.0-bin,
snapd-seed-glue,
python3,
qml-module-qtquick-window2,
qml-module-qtquick2,
squashfs-tools,
sudo,
${misc:Depends},
${shlibs:Depends}
${misc:Depends}
Description: Common Calamares Settings
This package contains the common Calamares settings for all flavors.
There is also a automirror Python script to set sources based on
geolocation.
.
Common settings for all Ubuntu flavors.
Package: calamares-settings-ubuntu-common-data
Package: calamares-settings-ubuntustudio
Architecture: all
Depends: ${misc:Depends},
python3,
python3-distro,
Conflicts: calamares-settings-ubuntu-common (<< 1:25.04.16)
Replaces: calamares-settings-ubuntu-common (<< 1:25.04.16)
Description: Data for Common Calamares Settings
This package contains the common Calamares settings for all flavors.
There is also a automirror Python script to set sources based on
geolocation.
.
Architecture-independent data for the common Calamares settings.
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends}
Breaks: calamares-settings-lubuntu
Conflicts: calamares-settings-lubuntu
Description: Ubuntu Studio Calamares Settings and Branding
This package contains the Calamares settings and branding for Ubuntu Studio.
As part of the branding the installer slideshow is contained within.
The settings ensure a proper Ubuntu Studio desktop is installed with the
KDE Plasma desktop environment.

28
debian/copyright vendored
View File

@ -2,10 +2,8 @@ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Files: *
Copyright: 2014 Rohan Garg <shadeslayer@systems>
2017-2021 Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
2020 Ubuntu Studio Developers <ubuntu-studio-devel@lists.ubuntu.com>
2024 Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>
2024 Ubuntu Unity Developers
2017-2024 Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
License: GPL-3+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -22,27 +20,3 @@ License: GPL-3+
.
On Debian systems, the complete text of the GNU General
Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
Files: ubuntuunity/ubuntu-unity-installer.svg
Copyright: 2014 Uri Herrera <uri_herrera@nitrux.in> and others
2024 Ubuntu Unity Developers
License: LGPL-3+
This package is free software; you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published
by the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
.
This package is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>
.
On Debian systems, the complete text of the GNU Lesser General
Public License version 3 can be found in "/usr/share/common-licenses/LGPL-3".
Comment:
Adapted from the Breeze icon theme. See
https://develop.kde.org/frameworks/breeze-icons for more information about
Breeze icons.

View File

@ -1 +0,0 @@
calamares.slideshow calamares

49
debian/rules vendored
View File

@ -1,53 +1,14 @@
#!/usr/bin/make -f
export LC_ALL=C.UTF-8
export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export GOPATH=/usr/share/gocode
export GO111MODULE=off
export GOCACHE=$(CURDIR)/.gocache
export PKGSELECT = "common/modules/pkgselect"
export PKGSELECTPROCESS = "common/modules/pkgselectprocess"
export USRDIR = "debian/calamares-settings-ubuntu-common/usr"
export DATA_USRDIR = "debian/calamares-settings-ubuntu-common-data/usr"
export MODULES_DIR = "debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules"
export DATA_MODULES_DIR = "debian/calamares-settings-ubuntu-common-data/usr/lib/calamares/modules"
DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
%:
dh $@
override_dh_auto_configure:
(cd $(PKGSELECT) && mkdir build && cd build && cmake ..)
(cd $(PKGSELECTPROCESS) && mkdir build && cd build && cmake ..)
override_dh_auto_build:
make;
(cd $(PKGSELECT)/build && $(MAKE))
(cd $(PKGSELECTPROCESS)/build && $(MAKE))
override_dh_auto_clean:
dh_auto_clean
rm -rf $(GOCACHE)
override_dh_auto_install:
(cd $(PKGSELECT)/build && $(MAKE) DESTDIR=$(CURDIR)/debian/calamares-settings-ubuntu-common/ install)
override_dh_missing:
dh_missing
mkdir -pv $(MODULES_DIR) $(DATA_MODULES_DIR)
cp -vr common/modules/automirror $(DATA_MODULES_DIR)
mkdir -pv debian/calamares-settings-ubuntu-common-data/etc/calamares/modules
cp -vr common/modules/*.conf debian/calamares-settings-ubuntu-common-data/etc/calamares/modules
chmod 644 $(DATA_MODULES_DIR)/automirror/automirror.conf
chmod 644 $(DATA_MODULES_DIR)/automirror/module.desc
chmod 644 $(MODULES_DIR)/pkgselect/libcalamares_viewmodule_pkgselect.so
chmod 644 $(MODULES_DIR)/pkgselect/module.desc
mkdir -pv $(MODULES_DIR)/pkgselectprocess
cp -v $(PKGSELECTPROCESS)/build/*.so $(PKGSELECTPROCESS)/build/*.desc $(MODULES_DIR)/pkgselectprocess
chmod 644 $(MODULES_DIR)/pkgselectprocess/libcalamares_job_pkgselectprocess.so
chmod 644 $(MODULES_DIR)/pkgselectprocess/module.desc
mkdir -pv $(USRDIR)/libexec/ $(DATA_USRDIR)/libexec/
cp -v common/fixconkeys-part1 $(DATA_USRDIR)/libexec/fixconkeys-part1
cp -v common/fixconkeys-part2 $(DATA_USRDIR)/libexec/fixconkeys-part2
cp -v $(PKGSELECTPROCESS)/build/check_package $(USRDIR)/libexec/checkpackage-backend
mkdir -pv debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules
cp -vr common/modules/* debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules
chmod -R 755 debian/calamares-settings-ubuntu-common/usr/lib/
chmod 644 debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules/automirror/automirror.conf
chmod 644 debian/calamares-settings-ubuntu-common/usr/lib/$(DEB_HOST_MULTIARCH)/calamares/modules/automirror/module.desc

View File

@ -1,21 +0,0 @@
# Kubuntu's Calamares Settings
This directory houses the Calamares settings for Kubuntu.
Unless otherwise stated, the contents of this directory are licensed as follows:
Copyright (C) 2018 Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
Copyright (C) 2024 Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 3
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this software. If not, see <http://www.gnu.org/licenses/>.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

View File

@ -1,29 +0,0 @@
---
componentName: kubuntu
windowExpanding: fullscreen
strings:
productName: Kubuntu
shortProductName: Kubuntu
version: 25.04
shortVersion: plucky
versionedName: Kubuntu
shortVersionedName: Kubuntu 25.04
bootloaderEntryName: Kubuntu
productUrl: https://kubuntu.org/
supportUrl: https://kubuntu.org/contact/
images:
productLogo: "logo.png"
productIcon: "icon.png"
productWelcome: "welcome.png"
slideshow: "show.qml"
slideshowAPI: 1
style:
SidebarBackground: "#6C7B93"
SidebarText: "#FFFFFF"
SidebarTextCurrent: "#0068C8"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,165 +0,0 @@
import QtQuick 2.0;
import calamares.slideshow 1.0;
Presentation
{
id: presentation
Timer {
interval: 15000
running: true
repeat: true
onTriggered: presentation.goToNextSlide()
}
Slide {
Image {
id: image1
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "01_Easy_Install.png"
}
}
Slide {
Image {
id: image2
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "02_Customizable_Desktop.png"
}
}
Slide {
Image {
id: image3
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "03_Built-in_Applications.png"
}
}
Slide {
Image {
id: image4
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "04_Performant.png"
}
}
Slide {
Image {
id: image5
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "05_Secure_and_Private.png"
}
}
Slide {
Image {
id: image6
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "06_Community_Support.png"
}
}
Slide {
Image {
id: image7
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "07_Free_and_Open_Source.png"
}
}
Slide {
Image {
id: image8
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "08_Software_Compatibility.png"
}
}
Slide {
Image {
id: image9
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "09_Beautiful_Aesthetics.png"
}
}
Slide {
Image {
id: image10
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "10_Kubuntu_Focus.png"
}
}
Slide {
Image {
id: image11
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "11_Testimonials_of_Success.png"
}
}
Slide {
Image {
id: image12
anchors.centerIn: parent
anchors.verticalCenterOffset: - parent.y / 3.6
height: parent.masterHeight * 0.95
width: parent.masterWidth * 0.95
fillMode: Image.PreserveAspectFit
smooth: true
source: "12_Get_Involved.png"
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

View File

@ -1,16 +0,0 @@
#!/bin/bash
#
# Launch Calamares normally.
if [ -e '/etc/calamares/OEM_MODE_ACTIVATED' ]; then
msg="$(cat <<EOL
The installer was previously run in OEM mode. Please reboot to reset the
configuration and try again.
EOL
)";
kdialog --msgbox "${msg}";
exit 1;
fi
export BROWSER='sudo -H -u kubuntu firefox'
calamares -D8;

View File

@ -1,24 +0,0 @@
#!/bin/sh
set -ex
root=$1
install_dir=$root/var/log/installer
[ -d $install_dir ] || mkdir -p $install_dir
cp $HOME/.cache/calamares/session.log $install_dir/debug
cp /cdrom/.disk/info $install_dir/media-info
cp /var/log/casper.log $install_dir/casper.log
cp /var/log/syslog $install_dir/syslog
gzip --stdout $root/var/lib/dpkg/status > $install_dir/initial-status.gz
# OEM id isn't a thing, when in OEM mode ubiquity would also archive that.
# https://github.com/calamares/calamares/issues/943
chmod -v 600 $install_dir/*
# Make these world readable, they can absolutely not contain anything relevant
# to security.
chmod -v 644 $install_dir/initial-status.gz
chmod -v 644 $install_dir/media-info

View File

@ -1,6 +0,0 @@
---
baseUrl: archive.ubuntu.com
distribution: Kubuntu
geoip:
style: "xml"
url: "https://geoip.ubuntu.com/lookup"

View File

@ -1,2 +0,0 @@
---
batch-identifier: kubuntu-2504-${DATE}

View File

@ -1,21 +0,0 @@
efiSystemPartition: "/boot/efi"
enableLuksAutomatedPartitioning: true
luksGeneration: luks2
userSwapChoices:
- none
- file
initialSwapChoice: file
drawNestedPartitions: true
defaultFileSystemType: "ext4"
availableFileSystemTypes: ["ext4","btrfs","xfs"]
partitionLayout:
- name: "kubuntu_boot"
filesystem: ext4
noEncrypt: true
onlyPresentWithEncryption: true
mountPoint: "/boot"
size: 4G
- name: "kubuntu_2504"
filesystem: unknown
mountPoint: "/"
size: 100%

View File

@ -1,57 +0,0 @@
---
packages:
additional_packages:
- id: "element-desktop"
name: "Element"
description: "Matrix-based end-to-end encrypted messenger and secure collaboration app."
snap: true
- id: "krita"
name: "Krita"
description: "Graphics editor designed primarily for digital art and 2D animation."
snap: true
minimal_remove_packages:
- kmahjongg
- kmines
- kpat
- ksudoku
- skanlite
- skanpage
- okular
- "libreoffice*"
- kdeconnect
- krdc
- konversation
- neochat
- elisa
- haruna
- vim
- snapd
- partitionmanager
- usb-creator*
- plasma-welcome
- kde-config-tablet
installer_remove_packages:
- "^live-*"
- calamares-settings-kubuntu
- calamares
- cifs-utils
- fcitx5
- fcitx5-frontend-all
- fcitx5-table
- fcitx5-pinyin
- fcitx5-module-cloudpinyin
- fcitx5-material-color
- fcitx5-chinese-addons
- kde-config-fcitx5
- kubuntu-installer-prompt
regular_install_packages:
- language-pack-$LOCALE
- language-pack-gnome-$LOCALE
- language-pack-kde-$LOCALE
- hunspell-$LOCALE
- libreoffice-help-$LOCALE
- libreoffice-l10n-$LOCALE
refresh_snaps:
- "firefox"
- "thunderbird"
- "firmware-updater"

View File

@ -1,5 +0,0 @@
---
dontChroot: true
timeout: 120
script:
- "/usr/libexec/calamares-oemprep.sh ${ROOT}"

View File

@ -1,76 +0,0 @@
---
doAutologin: false
setRootPassword: false
sudoersGroup: sudo
defaultGroups:
- adm
- cdrom
- dip
- lpadmin
- plugdev
- name: sambashare
must_exist: false
system: true
- sudo
passwordRequirements:
minLength: 8
maxLength: -1
libpwquality:
- minlen=8
- maxrepeat=3
- maxsequence=3
- usersubstr=4
- badwords=linux
allowWeakPasswords: false
allowWeakPasswordsDefault: false
# Explicitly set the shell instead of deferring to Calamares. We have a platform
# expectation derived from Ubuntu here.
user:
shell: /bin/bash
forbidden_names:
- root
- nginx
- www-data
- daemon
- bin
- sys
- sync
- games
- man
- lp
- mail
- news
- uucp
- proxy
- www-data
- backup
- list
- irc
- apt
- nobody
- systemd-network
- systemd-timesync
- dhcpcd
- messagebus
- syslog
- systemd-resolve
- usbmux
- tss
- uuidd
- whoopsie
- dnsmasq
- avahi
- nm-openvpn
- tcpdump
- speech-dispatcher
- cups-pk-helper
- fwupd-refresh
- sddm
- saned
- cups-browsed
- hplip
- polkitd
- rtkit
- colord
- geoclue
- installer

View File

@ -1,30 +0,0 @@
---
doAutologin: false
setRootPassword: false
sudoersGroup: sudo
defaultGroups:
- adm
- cdrom
- dip
- lpadmin
- plugdev
- name: sambashare
must_exist: false
system: true
- sudo
passwordRequirements:
minLength: 1
maxLength: -1
# Explicitly set the shell instead of deferring to Calamares. We have a platform
# expectation derived from Ubuntu here.
user:
shell: /bin/bash
forbidden_names: [ root ]
# Force the user of an OEM user
presets:
fullName:
value: "OEM configuration"
editable: false
loginName:
value: "oem"
editable: false

View File

@ -1,28 +0,0 @@
---
showSupportUrl: true
showKnownIssuesUrl: true
showReleaseNotesUrl: true
# WARNING: Calamares documentation indicates that showDonateUrl will be moved to branding in the future. Be prepared for things to break right here.
showDonateUrl: https://kubuntu.org/donate/
requirements:
requiredStorage: 8
requiredRam: 0.5
internetCheckUrl: https://networkcheck.kde.org
check:
- storage
- ram
- power
- internet
- root
required:
- root
- storage
- ram
# GeoIP is effectively disabled by setting style to "none"
geoip:
style: "none"
url: "https://geoip.ubuntu.com/lookup"
selector: "CountryCode"

View File

@ -1,20 +0,0 @@
#!/bin/bash
msg="$(cat <<EOL
You are about to disable OEM configuration mode. The system will boot into the
account setup wizard the next time it is started.
Are you sure you want to continue?
EOL
)";
if kdialog --warningyesno "${msg}"; then
sddm_file="$(cat <<EOL
[Autologin]
Session=kubuntu-oem-environment
User=oem
EOL
)"
echo "$sddm_file" | sudo tee /etc/sddm.conf
kdialog --msgbox 'Done. The account setup wizard will run on next bootup.'
fi

View File

@ -1,10 +0,0 @@
[Desktop Entry]
Type=Application
Version=1.0
Name=Finish OEM preparation
Exec=/usr/bin/calamares-finish-oem
Icon=system-software-install
Terminal=false
StartupNotify=true
Categories=Qt;System;
Keywords=installer;calamares;system;

View File

@ -1,47 +0,0 @@
#!/bin/bash
#
# Enables OEM installaiton mode in Calamares.
if [ -e '/etc/calamares/OEM_MODE_ACTIVATED' ]; then
export BROWSER='sudo -H -u kubuntu firefox'
calamares -D8;
exit;
fi
msg="$(cat <<EOL
You are about to install the OS in OEM mode. This will prepare the system for
distribution to an end user, providing them with an account setup wizard. If
you do not need this capability, please cancel and use the normal install
method.
Are you sure you want to continue?
EOL
)";
if kdialog --warningyesno "${msg}"; then
# Tweak branding to make it clear that OEM installation mode is active
cp /etc/calamares/branding/kubuntu/welcome-oem.png /etc/calamares/branding/kubuntu/welcome.png;
# Don't remove Calamares from the installed system.
sed -i '/- calamares$/d' /etc/calamares/modules/packages.conf;
# Enable oemid module, backslashes are needed for proper indentation
sed -i "/- welcome$/a \ \ - oemid" /etc/calamares/settings.conf;
# Enable OEM prep module
sed -i "/- pkgselectprocess$/a \ \ - shellprocess@oemprep" /etc/calamares/settings.conf;
# Fix OEM UID
sed -i "/- shellprocess@oemprep$/a \ \ - shellprocess@fix-oem-uid" /etc/calamares/settings.conf;
# Force the user of an OEM configuration user
cp /etc/calamares/modules/users.conf.oem /etc/calamares/modules/users.conf;
# Drop a file so that it can be seen that OEM installation mode is already
# active
touch /etc/calamares/OEM_MODE_ACTIVATED;
# Launch Calamares
export BROWSER='sudo -H -u kubuntu firefox'
calamares -D8;
fi

View File

@ -1,10 +0,0 @@
[Desktop Entry]
Type=Application
Version=1.0
Name=Install Kubuntu 25.04 (OEM mode)
Exec=sudo -E /usr/bin/calamares-launch-oem
Icon=system-software-install
Terminal=false
StartupNotify=true
Categories=Qt;System;
Keywords=installer;calamares;system;

View File

@ -1,7 +0,0 @@
#!/bin/bash
#
# Remove OEM files from the system.
rm -rf /etc/calamares /usr/bin/basicwallpaper /usr/bin/calamares-finish-oem /usr/share/applications/calamares-finish-oem.desktop /usr/share/xsessions/kubuntu-oem-environment.desktop /usr/libexec/start-kubuntu-oem-env /etc/sudoers /usr/bin/calamares-logs-helper /usr/libexec/calamares-oemfinish.sh
mv /etc/sudoers.orig /etc/sudoers

View File

@ -1,16 +0,0 @@
#!/bin/bash
#
# Puts the installed system into OEM configuration mode. Argument 1 is the
# path to the installed system's root directory.
# Install the OEM configuration for Calamares
tar xvzf /etc/calamares/oemconfig.tar.gz -C "$1" --strip-components=2;
chown -R 1000:1000 "$1"/home/oem
# Ensure the desktop file is marked as trusted
# See line 96 of scripts/casper-bottom/25adduser in src:casper as shipped in Plucky
gio set /home/oem/Desktop/calamares-finish-oem.desktop metadata::trusted true
# Enable passwordless sudo for the OEM user, making sure this can be undone later
mv "$1"/etc/sudoers "$1"/etc/sudoers.orig
mv "$1"/etc/sudoers.oem "$1"/etc/sudoers

View File

@ -1,5 +0,0 @@
[Desktop Entry]
Exec=/usr/libexec/start-kubuntu-oem-env
Name=Kubuntu OEM Environment
Comment=Starts the Kubuntu OEM Environment
Type=Application

View File

@ -1,15 +0,0 @@
#!/bin/bash
# Starts the Kubuntu OEM Environment.
export XDG_SESSION_CLASS="user"
export XDG_SESSION_DESKTOP="KDE"
export DESKTOP_SESSION="plasma"
export QT_QPA_PLATFORMTHEME="kde"
export BROWSER='sudo -H -u kubuntu firefox'
/usr/bin/kwin_wayland --no-lockscreen &
while [ ! -e "/run/user/$(id -u)/wayland-0" ]; do sleep 1; done
/usr/bin/basicwallpaper /usr/share/wallpapers/Next/contents/3840x2160.png &
WAYLAND_DISPLAY="wayland-0" sudo -E /usr/bin/calamares -D8 # This is intentionally *not* backgrounded.
# If it exits...
killall basicwallpaper
killall kwin_wayland

View File

@ -1,9 +0,0 @@
displaymanagers:
- sddm
defaultDesktopEnvironment:
executable: "startkde"
desktopFile: "plasma"
basicSetup: false
sysconfigSetup: false

View File

@ -1,8 +0,0 @@
---
# Whether to create /etc/machine-id for systemd.
systemd: true
# Whether to create /var/lib/dbus/machine-id for D-Bus.
dbus: true
# Whether /var/lib/dbus/machine-id should be a symlink to /etc/machine-id
# (ignored if dbus is false, or if there is no /etc/machine-id to point to).
dbus-symlink: true

View File

@ -1,5 +0,0 @@
update_db: true
backend: apt
operations:
- remove:
- calamares

View File

@ -1,2 +0,0 @@
---
username: oem

View File

@ -1,5 +0,0 @@
---
dontChroot: true
timeout: 120
script:
- "/usr/libexec/calamares-oemfinish.sh ${ROOT}"

View File

@ -1,22 +0,0 @@
---
doAutologin: false
setRootPassword: false
sudoersGroup: sudo
defaultGroups:
- adm
- cdrom
- dip
- lpadmin
- plugdev
- name: sambashare
must_exist: false
system: true
- sudo
passwordRequirements:
minLength: 1
maxLength: -1
# Explicitly set the shell instead of deferring to Calamares. We have a platform
# expectation derived from Ubuntu here.
user:
shell: /bin/bash
forbidden_names: [ root ]

Some files were not shown because too many files have changed in this diff Show More