Compare commits

...

66 Commits

Author SHA1 Message Date
Aaron Rainbolt
ac31dfe838
Much fix, very fix, wow 2025-04-16 18:26:31 -05:00
68b4f76a29 Upload to Plucky 2025-04-15 22:37:08 -05:00
694b57d395 [pkgselectprocess] Ensure we have the correct apt sources when doing no network (LP: #2107287).
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).
2025-04-15 22:35:18 -05:00
3288d57e56 [pkgselectprocess] When running apt remove, use CPBE just in case. 2025-04-15 22:29:07 -05:00
6cb7d4dc52 [pkgselectprocess] Ensure hasInternet is available as a local variable, so we can use it. 2025-04-15 22:27:26 -05:00
f26f191a17 [checkpackage-backend] Pass through packages starting with "^" or containing "*"
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!
2025-04-15 22:24:59 -05:00
c93e956a5e [pkgselectprocess] Ensure apt-cdrom command outputs have their own prefix. 2025-04-15 22:22:47 -05:00
3282b74627 [pkgselectprocess] Explicitly log all apt commands in the debug logs. 2025-04-15 22:21:38 -05:00
6b2555c998 [bootloader] Simply bootloader logic to ensure we can use /cdrom elsewhere
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.
2025-04-15 22:19:46 -05:00
52472914bb Add a new changelog entry 2025-04-15 22:16:11 -05:00
782b5feeee Upload to Plucky 2025-04-15 12:14:44 -05:00
133641b96c [OEM] Ensure the final desktop file completing OEM is marked as executable. 2025-04-12 22:04:30 -05:00
de24f68f2b [pkgselectprocess] Compliment the previous commit by aligning installation of Calamares
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.
2025-04-12 21:51:18 -05:00
5a1835af47 [pkgselect] Temporarily add Calamares and KDialog to the final install list for Lubuntu
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 *and* it is an OEM install. 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).
2025-04-12 21:34:04 -05:00
197d24e295 [pkgselectprocess] Do not include uninstallable virtual packages in the CPBE output
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).

A reliable testcase for this is the libreoffice-help-is package, at least in
Plucky.
2025-04-12 21:02:06 -05:00
dc3e8a738f Upload to Plucky 2025-04-09 07:02:43 -05:00
abe9758e56 [Lubuntu] Remove the Dracut configuration so we fall back to the defaults provided by the package. This is a no-op. 2025-04-09 06:44:57 -05:00
d6ff965abb [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. 2025-04-09 06:44:48 -05:00
71f067fbba [OEM] [Kubuntu] In stage two, ensure we use Wayland, consistent with the rest of the session scripts. 2025-04-09 05:06:25 -05:00
7ba422ace8 [OEM] Ensure OEM processing is ran, now that pkgselectprocess exists
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).
2025-04-09 05:00:24 -05:00
68b993050c [pkgselectprocess] Fix usage of checkpackage-backend
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).
2025-04-09 01:56:22 -05:00
0c540f933a Bump Standards-Version to 4.7.2, no changes needed. 2025-04-09 01:55:56 -05:00
39ab8da0c8 Add a new changelog entry 2025-04-09 01:55:32 -05:00
Rik Mills
af59433966 Release to plucky 2025-04-07 11:38:23 +01:00
Rik Mills
6c4331aa1b [Kubuntu] Update 10_Kubuntu_Focus installer slide. 2025-04-07 11:02:05 +01:00
Rik Mills
d3b7c6dbce [Kubuntu] Update 07_Free_and_Open_Source installer slide for plucky puffin mascot image. 2025-04-07 11:01:26 +01:00
Rik Mills
571c964174 [Kubuntu] Update welcome images for plucky 25.04 2025-04-07 11:00:43 +01:00
6633422407 [Unity] Set Kvantum theme to KvGnomeDark for calamares 2025-03-26 20:02:03 +00:00
9cca776896 [Unity] Update welcome slide for Plucky 2025-03-26 00:06:38 +00:00
ede40ead21 update partition names to match current version 2025-03-24 22:48:06 +00:00
7080285492 update OEM batch identifier to match current version 2025-03-24 07:02:41 +00:00
d5ec2191d4 [Lubuntu] update slides for current apps 2025-03-07 03:22:38 +00:00
70fb145bf7 add python3 to build-dep 2025-03-07 03:18:39 +00:00
996be3ace8 update changelog 2025-03-06 10:23:58 +00:00
067b1ef3bd [lubuntu] update welcome slides for plucky 2025-03-06 02:11:13 -08:00
0fea5bd853 Fix installation of apt packages more consistently (LP: #2089494). 2025-02-24 04:02:12 -06:00
bffde9297a Upload to Plucky 2025-02-21 13:10:45 -06:00
95b9217d82 [basicwallpaper] Bump minimum CMake version, remove .user file. 2025-02-21 13:10:36 -06:00
723b04b9f4 Remove all of Walter's trailing whitespace 2025-02-21 12:36:05 -06:00
12bb9d642c Move calamares -> libcalamares-dev for build dependencies. 2025-02-21 12:35:31 -06:00
76a66470c9 Upload to Plucky 2025-02-18 01:29:31 -06:00
4111b8a7dd Run wrap-and-sort. 2025-02-18 01:29:17 -06:00
fc7f594848 Add dh-sequence-qmldeps and ${qml6:Depends} to ensure all QML 6 runtime dependencies are properly picked up. 2025-02-18 01:28:52 -06:00
7ce9170fe4 Upload to Plucky 2025-02-16 18:05:43 -06:00
81a6192cd9 [packaging] Bump Calamares dependency to 3.3.13-0ubuntu4 for users fixes. 2025-02-16 18:05:31 -06:00
636fb54564 [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. 2025-02-16 18:05:13 -06:00
15de561729 [Lubuntu] add NIST pw requirements with user override option 2025-01-28 17:18:26 +00:00
e2073f896b Upload to Plucky 2024-11-27 23:28:36 -06:00
a54615cb83 Make forbidden_names much stronger (LP: #2088576). 2024-11-27 23:28:14 -06:00
a202c2a229 Rearrange the Lubuntu module order to account for packages with new stuff to put in the initramfs. 2024-11-25 03:02:35 -06:00
0a87303cbc Upload to Plucky 2024-11-24 20:51:44 -06:00
e24341cb0e [pkgselectprocess] Add a more robust check for apt packages when installing them (LP: #2089494). 2024-11-24 20:50:58 -06:00
9284c1f21b [pkgselectprocess] Add dpkg diversions for dracut, update-initramfs, and locale-gen. These will be called later in the process. 2024-11-24 20:24:41 -06:00
fd47fdaf63 Upload to Plucky 2024-11-23 09:16:36 -06:00
718bd8dae1 Add a Dracut config file for Lubuntu. 2024-11-22 19:56:20 -06:00
1ff64e36fb Upload to Plucky 2024-11-21 22:28:08 -06:00
0fc038aea9 Fix apt install functionality in pkgselectprocess. 2024-11-21 22:27:58 -06:00
0908c29cfb Switch Lubuntu to dracut by default. 2024-11-21 22:24:43 -06:00
d3c20f92d0 Add new global storage value for stacked squashfses and adjust config. 2024-11-20 23:59:03 -06:00
Erich Eickmeyer
9c08301c64 Update changelog, upload to plucky 2024-11-20 17:07:09 -08:00
Erich Eickmeyer
d6b8031044 Fix oem user number 2024-11-20 17:04:46 -08:00
Erich Eickmeyer
945e04f624 Let calamares-raspiprep.sh add oem user 2024-11-20 17:03:03 -08:00
Rik Mills
8710134431 Release 1:25.04.5 to plucky. 2024-11-12 18:30:59 +00:00
Rik Mills
e7c9f13d84 Fix Vcs to point to ubuntu-qt-code team LP git. 2024-11-12 18:30:08 +00:00
Rik Mills
1eaf731724 Release to 1:25.04.4 plucky 2024-11-12 17:51:25 +00:00
Rik Mills
bd8d056a28 kubuntu/modules/pkgselect.conf: Remove fcitx* from installed system. 2024-11-12 17:50:00 +00:00
51 changed files with 858 additions and 459 deletions

View File

@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.16)
project(basicwallpaper VERSION 0.1 LANGUAGES CXX) project(basicwallpaper VERSION 0.1 LANGUAGES CXX)

View File

@ -1,288 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 6.0.2, 2024-02-14T12:14:09. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{c72e8e96-4d64-44b5-94c8-e16820d11b4b}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="int">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{c8b6ccbc-b12c-473e-83be-23a4b6d2eb6e}</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="CMake.Build.Type">Debug</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=Debug
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/arraybolt3/Projects/build-basicwallpaper-Desktop-Debug</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
<value type="QString" key="CMake.Build.Type">Release</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=Release
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/arraybolt3/Projects/build-basicwallpaper-Desktop-Release</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
<value type="QString" key="CMake.Build.Type">RelWithDebInfo</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/arraybolt3/Projects/build-basicwallpaper-Desktop-RelWithDebInfo</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release with Debug Information</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.3">
<value type="QString" key="CMake.Build.Type">MinSizeRel</value>
<value type="QString" key="CMake.Initial.Parameters">-GUnix Makefiles
-DCMAKE_BUILD_TYPE:STRING=MinSizeRel
-DCMAKE_PROJECT_INCLUDE_BEFORE:PATH=%{IDE:ResourcePath}/package-manager/auto-setup.cmake
-DQT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable}
-DCMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX}
-DCMAKE_C_COMPILER:STRING=%{Compiler:Executable:C}
-DCMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx}</value>
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/arraybolt3/Projects/build-basicwallpaper-Desktop-MinSizeRel</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="CMakeProjectManager.MakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.MakeStep</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Minimum Size Release</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">CMakeProjectManager.CMakeBuildConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">4</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="int">1</value>
</data>
<data>
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
<value type="int">22</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@ -1,10 +0,0 @@
---
dontChroot: true
timeout: 10
firmwareType:
efi:
- -cp /cdrom/casper/vmlinuz ${ROOT}/boot/vmlinuz-$(uname -r)
- -mkdir -pv ${ROOT}/media/cdrom
- -mount --bind /cdrom ${ROOT}/media/cdrom
bios:
- -cp /cdrom/casper/vmlinuz ${ROOT}/boot/vmlinuz-$(uname -r)

View File

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

View File

@ -21,6 +21,9 @@ extraMounts:
- device: /run/systemd/resolve - device: /run/systemd/resolve
mountPoint: /run/systemd/resolve mountPoint: /run/systemd/resolve
options: [ bind ] options: [ bind ]
- device: /cdrom
mountPoint: /media/cdrom
options: [ bind ]
mountOptions: mountOptions:
- filesystem: default - filesystem: default

View File

@ -100,7 +100,8 @@ void PackageSelectViewStep::onActivate()
bool hasInternet = network.hasInternet(); bool hasInternet = network.hasInternet();
// Handle network unavailability // Handle network unavailability
if (!hasInternet) { //if (!hasInternet) {
// Disable almost all fancy features to avoid bugs, revert in 25.10 cycle
ui->full_button->setVisible(false); ui->full_button->setVisible(false);
ui->full_text->setVisible(false); ui->full_text->setVisible(false);
@ -114,7 +115,7 @@ void PackageSelectViewStep::onActivate()
ui->extraparty_scroll->setVisible(false); ui->extraparty_scroll->setVisible(false);
ui->extraparty_text->setVisible(false); ui->extraparty_text->setVisible(false);
ui->mandatory_warning_label->setVisible(false); ui->mandatory_warning_label->setVisible(false);
} //}
// Dynamically create package checkboxes only once // Dynamically create package checkboxes only once
if (m_packageCheckBoxes.isEmpty()) { if (m_packageCheckBoxes.isEmpty()) {
@ -238,6 +239,7 @@ void PackageSelectViewStep::onLeave()
return; return;
} }
bool isStackedSquashfs = m_configurationMap.value("stacked_squashfs").toBool();
QVariantMap installationData = gs->value("installation_data").toMap(); QVariantMap installationData = gs->value("installation_data").toMap();
QString installationMode = installationData.value("installation_mode").toString(); QString installationMode = installationData.value("installation_mode").toString();
bool downloadUpdates = installationData.value("download_updates").toBool(); bool downloadUpdates = installationData.value("download_updates").toBool();
@ -264,13 +266,20 @@ void PackageSelectViewStep::onLeave()
globalData.insert("installation_mode", installationMode); globalData.insert("installation_mode", installationMode);
// Used by unpackfs on stacked squashfs systems
if (installationMode == "minimal") { if (installationMode == "minimal") {
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 {
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 // For normal and full, store packages to install
QVariantList selectedPackagesList; QVariantList selectedPackagesList;
// Store the snaps that are already on the system by default // Store the snaps that are already on the system by default
@ -316,9 +325,28 @@ void PackageSelectViewStep::onLeave()
presentSnapList.append(snapId); 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); globalData.insert("packages_to_install", selectedPackagesList);
QVariantList installerPackages = m_configurationMap.value("packages").toMap().value("installer_remove_packages").toList(); if (!isStackedSquashfs) {
globalData.insert("packages_to_remove", installerPackages); QVariantList installerPackages = m_configurationMap.value("packages").toMap().value("installer_remove_packages").toList();
globalData.insert("packages_to_remove", installerPackages);
}
globalData.insert("present_snaps", presentSnapList); globalData.insert("present_snaps", presentSnapList);
} }

View File

@ -9,10 +9,6 @@ packages:
name: "Thunderbird" name: "Thunderbird"
description: "Email, newsfeed, chat, and calendaring client." description: "Email, newsfeed, chat, and calendaring client."
snap: true snap: true
- id: "virt-manager"
name: "Virtual Machine Manager"
description: "Desktop user interface for managing virtual machines through libvirt."
snap: false
- id: "krita" - id: "krita"
name: "Krita" name: "Krita"
description: "Graphics editor designed primarily for digital art and 2D animation." description: "Graphics editor designed primarily for digital art and 2D animation."

View File

@ -2,15 +2,20 @@ cmake_minimum_required(VERSION 3.16 FATAL_ERROR)
include(FeatureSummary) include(FeatureSummary)
set( CMAKE_CXX_STANDARD 20 ) set( CMAKE_CXX_STANDARD 23 )
set( CMAKE_CXX_STANDARD_REQUIRED ON ) set( CMAKE_CXX_STANDARD_REQUIRED ON )
set( CALAMARES_VERSION_REQUIRED 3.3.9 ) 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) find_package(ECM "6.0.0" NO_MODULE)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH}) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_MODULE_PATH})
include(KDEInstallDirs)
find_package(KF6 REQUIRED COMPONENTS CoreAddons) 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) find_package(Calamares ${CALAMARES_VERSION_REQUIRED} NO_CMAKE_PACKAGE_REGISTRY)
if (NOT TARGET Calamares::calamares OR NOT TARGET Calamares::calamaresui) if (NOT TARGET Calamares::calamares OR NOT TARGET Calamares::calamaresui)
find_package(Calamares ${CALAMARES_VERSION_REQUIRED} REQUIRED) find_package(Calamares ${CALAMARES_VERSION_REQUIRED} REQUIRED)
@ -28,3 +33,5 @@ calamares_add_plugin( pkgselectprocess
SHARED_LIB SHARED_LIB
NO_CONFIG NO_CONFIG
) )
add_executable(check_package checkpackage-backend.cpp)
target_link_libraries(check_package PRIVATE ${APT_PKG_LIB})

View File

@ -6,6 +6,7 @@
#include <QDir> #include <QDir>
#include <QCoreApplication> #include <QCoreApplication>
#include <QRegularExpression> #include <QRegularExpression>
#include <QFile>
CALAMARES_PLUGIN_FACTORY_DEFINITION(PackageSelectProcessFactory, registerPlugin<PackageSelectProcess>();) CALAMARES_PLUGIN_FACTORY_DEFINITION(PackageSelectProcessFactory, registerPlugin<PackageSelectProcess>();)
@ -36,6 +37,7 @@ Calamares::JobResult PackageSelectProcess::runAptCommand(const QString& command,
double endProgress, double endProgress,
bool verboseProgress) bool verboseProgress)
{ {
qDebug() << "Running apt command:" << command;
QProcess aptProcess(this); QProcess aptProcess(this);
aptProcess.setProgram("/usr/sbin/chroot"); aptProcess.setProgram("/usr/sbin/chroot");
aptProcess.setArguments({ rootMountPoint, "/bin/bash", "-c", command }); aptProcess.setArguments({ rootMountPoint, "/bin/bash", "-c", command });
@ -51,16 +53,21 @@ Calamares::JobResult PackageSelectProcess::runAptCommand(const QString& command,
commandHRPrefix = tr("Installing packages: "); commandHRPrefix = tr("Installing packages: ");
} else if (command.contains("full-upgrade")) { } else if (command.contains("full-upgrade")) {
commandHRPrefix = tr("Upgrading installed system: "); commandHRPrefix = tr("Upgrading installed system: ");
} else if (command.contains("autoremove")) { } else if (command.contains("remove")) {
commandHRPrefix = tr("Cleaning up packages: "); 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+\[(.*?)\])"); QRegularExpression getRegex(R"(Get:\d+\s+[^ ]+\s+[^ ]+\s+(.+?)\s+\S+\s+(\S+)\s+\[(.*?)\])");
connect(&aptProcess, &QProcess::readyReadStandardOutput, this, connect(&aptProcess, &QProcess::readyReadStandardOutput, this,
[this, &aptProcess, &lineCount, progressPerLine, startProgress, endProgress, verboseProgress, commandHRPrefix, getRegex]() mutable { [this, &lineCount, progressPerLine, startProgress, endProgress, verboseProgress, commandHRPrefix, getRegex]() {
while (aptProcess.canReadLine()) { QProcess *aptProcess = (QProcess *)(QObject::sender());
QString line = QString::fromUtf8(aptProcess.readLine()).trimmed(); if (aptProcess == NULL) return;
while (aptProcess->canReadLine()) {
QString line = QString::fromUtf8(aptProcess->readLine()).trimmed();
qDebug() << "Apt log line: " << line;
if (line.isEmpty()) { if (line.isEmpty()) {
continue; continue;
} }
@ -68,7 +75,7 @@ Calamares::JobResult PackageSelectProcess::runAptCommand(const QString& command,
if (verboseProgress && !line.contains("Running in chroot, ignoring command") && if (verboseProgress && !line.contains("Running in chroot, ignoring command") &&
!line.contains("Waiting until unit") && !line.contains("Stopping snap") && !line.contains("Waiting until unit") && !line.contains("Stopping snap") &&
!line.contains("/dev/pts")) { !line.contains("/dev/pts")) {
// Process "Get:" lines to show download information // Process "Get:" lines to show download information
if (line.startsWith("Get:")) { if (line.startsWith("Get:")) {
QRegularExpressionMatch match = getRegex.match(line); QRegularExpressionMatch match = getRegex.match(line);
@ -141,7 +148,7 @@ Calamares::JobResult PackageSelectProcess::runSnapCommand(const QStringList& sna
QString currentDescription; QString currentDescription;
connect(&snapProcess, &QProcess::readyReadStandardOutput, this, connect(&snapProcess, &QProcess::readyReadStandardOutput, this,
[&snapProcess, this, &currentDescription, startProgress, endProgress]( ) { [&snapProcess, this, &currentDescription, startProgress, endProgress]( ) {
while (snapProcess.canReadLine()) { while (snapProcess.canReadLine()) {
QString line = QString::fromUtf8(snapProcess.readLine()).trimmed(); QString line = QString::fromUtf8(snapProcess.readLine()).trimmed();
@ -199,12 +206,74 @@ Calamares::JobResult PackageSelectProcess::runSnapCommand(const QStringList& sna
} }
emit progress(endProgress); emit progress(endProgress);
m_prettyStatus = tr("Snap packages installed successfully."); m_prettyStatus = tr("Snap packages installed successfully!");
emit prettyStatusMessageChanged(m_prettyStatus); emit prettyStatusMessageChanged(m_prettyStatus);
return Calamares::JobResult::ok(); 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() Calamares::JobResult PackageSelectProcess::exec()
{ {
auto gs = Calamares::JobQueue::instance()->globalStorage(); auto gs = Calamares::JobQueue::instance()->globalStorage();
@ -215,17 +284,22 @@ Calamares::JobResult PackageSelectProcess::exec()
const QVariantMap installationData = gs->value("installation_data").toMap(); const QVariantMap installationData = gs->value("installation_data").toMap();
const QString installationMode = installationData.value("installation_mode").toString(); const QString installationMode = installationData.value("installation_mode").toString();
const bool downloadUpdates = installationData.value("download_updates").toBool(); 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 packagesToInstall = installationData.value("packages_to_install").toList();
const QVariantList packagesToRemove = installationData.value("packages_to_remove").toList(); const QVariantList packagesToRemove = installationData.value("packages_to_remove").toList();
const QVariantList presentSnaps = installationData.value("present_snaps").toList(); const QVariantList presentSnaps = installationData.value("present_snaps").toList();
// Handle default value for rootMountPoint // Handle default value for rootMountPoint
QString rootMountPoint = "/"; rootMountPoint = "/";
if (gs->contains("rootMountPoint")) { if (gs->contains("rootMountPoint")) {
rootMountPoint = gs->value("rootMountPoint").toString(); 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 = { static const QMap<QString, QVector<ProgressAllocation>> allocationMap = {
{ "minimal", { {0.0, 1.0} } }, { "minimal", { {0.0, 1.0} } },
{ "normal", { {0.0, 0.4}, {0.4, 1.0} } }, { "normal", { {0.0, 0.4}, {0.4, 1.0} } },
@ -233,12 +307,35 @@ Calamares::JobResult PackageSelectProcess::exec()
}; };
const QVector<ProgressAllocation> allocations = allocationMap.value(installationMode, { {0.0, 1.0} }); const QVector<ProgressAllocation> allocations = allocationMap.value(installationMode, { {0.0, 1.0} });
// Run apt update
const double aptRange = allocations[0].end - allocations[0].start; const double aptRange = allocations[0].end - allocations[0].start;
const double updateStart = allocations[0].start; const double updateStart = allocations[0].start;
const double updateEnd = updateStart + 0.1 * aptRange; 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"); m_prettyStatus = tr("Updating apt cache");
emit prettyStatusMessageChanged(m_prettyStatus); emit prettyStatusMessageChanged(m_prettyStatus);
emit progress(updateStart); emit progress(updateStart);
@ -260,6 +357,16 @@ Calamares::JobResult PackageSelectProcess::exec()
} }
} }
// 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 installStart;
double installEnd; double installEnd;
if (downloadUpdates) { if (downloadUpdates) {
@ -289,43 +396,79 @@ Calamares::JobResult PackageSelectProcess::exec()
qDebug() << "Progress range: installStart:" << installStart << "installEnd:" << installEnd; qDebug() << "Progress range: installStart:" << installStart << "installEnd:" << installEnd;
if (!debPackages.isEmpty()) { if (!debPackages.isEmpty()) {
const QString packageList = debPackages.join(" -e "); // Corresponding to the temporary hack in pkgselect adding calamares
const QString installCommand = QString( // and kdialog to the list, we only want those two included in the
"DEBIAN_FRONTEND=noninteractive apt-get -y install $(apt-cache --no-generate pkgnames %1 | grep -Fx -e %2)" // final installation if we're actually in OEM mode. Otherwise, they
).arg(debPackages.join(" ")).arg(packageList); // 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, Calamares::JobResult installResult = runAptCommand(installCommand,
rootMountPoint, rootMountPoint,
installStart, installStart,
installEnd, installEnd,
true); true);
if (!installResult) { // Using operator bool() to check for errors if (!installResult) {
return std::move(installResult); // Move to avoid copy if (!cpbe->remove()) qDebug() << "Warning: failed to clean up /usr/libexec/checkpackage-backend";
return std::move(installResult);
} }
} }
else { else qDebug() << "No packages to install.";
qDebug() << "No packages to install.";
}
QStringList removeDebPackages; QStringList removeDebPackages;
for (const QVariant& var : packagesToRemove) { for (const QVariant& var : packagesToRemove) {
removeDebPackages << var.toString(); 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 removeStart = installEnd;
const double removeEnd = removeStart + 0.2 * aptRange; const double removeEnd = removeStart + 0.2 * aptRange;
if (!removeDebPackages.isEmpty()) { if (!removeDebPackages.isEmpty()) {
const QString removeCommand = QString("DEBIAN_FRONTEND=noninteractive apt-get -y --purge remove %1") const QString removeCommand = QString("DEBIAN_FRONTEND=noninteractive apt-get -y --purge remove $(/usr/libexec/checkpackage-backend %1);")
.arg(removeDebPackages.join(" ")); .arg(removeDebPackages.join(" "));
Calamares::JobResult removeResult = runAptCommand(removeCommand, Calamares::JobResult removeResult = runAptCommand(removeCommand,
rootMountPoint, rootMountPoint,
removeStart, removeStart,
removeEnd, removeEnd,
true); true);
if (!removeResult) { // Using operator bool() to check for errors if (!removeResult) return std::move(removeResult);
return std::move(removeResult); // Move to avoid copy
}
} }
const double autoremoveStart = removeEnd; const double autoremoveStart = removeEnd;
@ -336,8 +479,46 @@ Calamares::JobResult PackageSelectProcess::exec()
autoremoveStart, autoremoveStart,
autoremoveEnd, autoremoveEnd,
true); true);
if (!autoremoveResult) { // Using operator bool() to check for errors
return std::move(autoremoveResult); // Move to avoid copy // 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 // Handle snap packages
@ -386,5 +567,7 @@ Calamares::JobResult PackageSelectProcess::exec()
m_prettyStatus = tr("All selected packages installed successfully."); m_prettyStatus = tr("All selected packages installed successfully.");
emit prettyStatusMessageChanged(m_prettyStatus); emit prettyStatusMessageChanged(m_prettyStatus);
if (!cpbe->remove()) qDebug() << "Warning: failed to clean up /usr/libexec/checkpackage-backend";
return Calamares::JobResult::ok(); return Calamares::JobResult::ok();
} }

View File

@ -1,7 +1,9 @@
#ifndef PACKAGESELECTPROCESS_H #ifndef PACKAGESELECTPROCESS_H
#define PACKAGESELECTPROCESS_H #define PACKAGESELECTPROCESS_H
#include <QMap>
#include <QObject> #include <QObject>
#include <QString>
#include <QVariantMap> #include <QVariantMap>
#include "CppJob.h" #include "CppJob.h"
#include "utils/PluginFactory.h" #include "utils/PluginFactory.h"
@ -44,6 +46,11 @@ private:
double startProgress, double startProgress,
double endProgress); double endProgress);
void divert(bool enable);
QMap<QString, QString> dpkgDiversions;
QString rootMountPoint;
QVariantMap m_configurationMap; QVariantMap m_configurationMap;
QString m_prettyStatus; QString m_prettyStatus;
}; };

View File

@ -0,0 +1,54 @@
#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

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

View File

@ -1,4 +0,0 @@
# this is an internal implementation detail, no manpage needed
calamares-settings-ubuntu-common: no-manual-page [usr/bin/calamares_snap_install]
# this is normal and not a problem
calamares-settings-ubuntu-common: executable-in-usr-lib [usr/lib/x86_64-linux-gnu/calamares/modules/automirror/main.py]

241
debian/changelog vendored
View File

@ -1,3 +1,232 @@
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 calamares-settings-ubuntu (1:25.04.3) plucky; urgency=medium
* Lubuntu: Set executable bit on raspberry pi prep script * Lubuntu: Set executable bit on raspberry pi prep script
@ -6,7 +235,7 @@ calamares-settings-ubuntu (1:25.04.3) plucky; urgency=medium
calamares-settings-ubuntu (1:25.04.2) plucky; urgency=medium calamares-settings-ubuntu (1:25.04.2) plucky; urgency=medium
* Lubuntu: Add raspberry pi prep script * Lubuntu: Add raspberry pi prep script
-- Erich Eickmeyer <eeickmeyer@ubuntu.com> Sat, 09 Nov 2024 09:25:43 -0800 -- Erich Eickmeyer <eeickmeyer@ubuntu.com> Sat, 09 Nov 2024 09:25:43 -0800
@ -35,7 +264,7 @@ calamares-settings-ubuntu (1:24.10.4) oracular; urgency=medium
calamares-settings-ubuntu (1:24.10.3) oracular; urgency=medium calamares-settings-ubuntu (1:24.10.3) oracular; urgency=medium
* Fix pkgselect UI becoming centered when minimal install mode is selected. * Fix pkgselect UI becoming centered when minimal install mode is selected.
(LP: #2076303) (LP: #2076303)
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 08 Aug 2024 14:25:24 -0500 -- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 08 Aug 2024 14:25:24 -0500
@ -96,13 +325,13 @@ calamares-settings-ubuntu (1:24.04.36) noble; urgency=medium
calamares-settings-ubuntu (1:24.04.35) noble; urgency=medium calamares-settings-ubuntu (1:24.04.35) noble; urgency=medium
* Remove timeouts for network-related package commands. (LP: #2062106) * Remove timeouts for network-related package commands. (LP: #2062106)
* Remove timeouts for update-initramfs. (LP: #2060429) * Remove timeouts for update-initramfs. (LP: #2060429)
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 19 Apr 2024 21:23:54 +0000 -- Walter Lapchynski <wxl@ubuntu.com> Fri, 19 Apr 2024 21:23:54 +0000
calamares-settings-ubuntu (1:24.04.34) noble; urgency=medium calamares-settings-ubuntu (1:24.04.34) noble; urgency=medium
* Add icon on Desktop to finish OEM install. (LP: #2060928) * Add icon on Desktop to finish OEM install. (LP: #2060928)
-- Walter Lapchynski <wxl@ubuntu.com> Fri, 19 Apr 2024 19:18:59 +0000 -- Walter Lapchynski <wxl@ubuntu.com> Fri, 19 Apr 2024 19:18:59 +0000
@ -145,7 +374,7 @@ calamares-settings-ubuntu (1:24.04.29) noble; urgency=medium
calamares-settings-ubuntu (1:24.04.28) noble; urgency=medium calamares-settings-ubuntu (1:24.04.28) noble; urgency=medium
* Run apt updates before installing packages. (LP: #2061150) * Run apt updates before installing packages. (LP: #2061150)
-- Walter Lapchynski <wxl@ubuntu.com> Sat, 13 Apr 2024 00:44:32 +0000 -- Walter Lapchynski <wxl@ubuntu.com> Sat, 13 Apr 2024 00:44:32 +0000
@ -229,7 +458,7 @@ calamares-settings-ubuntu (1:24.04.19) noble; urgency=medium
calamares-settings-ubuntu (1:24.04.18) noble; urgency=medium calamares-settings-ubuntu (1:24.04.18) noble; urgency=medium
* GeoIP in welcome module disabled. * GeoIP in welcome module disabled.
-- Walter Lapchynski <wxl@ubuntu.com> Wed, 13 Mar 2024 18:16:06 +0000 -- Walter Lapchynski <wxl@ubuntu.com> Wed, 13 Mar 2024 18:16:06 +0000

48
debian/control vendored
View File

@ -3,29 +3,34 @@ Section: devel
Priority: optional Priority: optional
Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com> Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
Uploaders: Simon Quigley <tsimonq2@ubuntu.com> Uploaders: Simon Quigley <tsimonq2@ubuntu.com>
Build-Depends: calamares (>= 3.3.9), Build-Depends: debhelper-compat (= 13),
dh-sequence-qmldeps,
cmake, cmake,
debhelper-compat (= 13),
extra-cmake-modules, extra-cmake-modules,
fakeroot,
intltool, intltool,
libapt-pkg-dev,
libcalamares-dev (>= 3.3.13-0ubuntu4),
libkf6coreaddons-dev, libkf6coreaddons-dev,
libqt6svg6-dev, libqt6svg6-dev,
libyaml-cpp-dev, libyaml-cpp-dev,
python3,
qt6-base-dev, qt6-base-dev,
qt6-declarative-dev, qt6-declarative-dev,
qt6-l10n-tools, qt6-l10n-tools,
qt6-tools-dev, qt6-tools-dev,
qt6-tools-dev-tools qt6-tools-dev-tools
Standards-Version: 4.7.0 Standards-Version: 4.7.2
Homepage: https://code.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu Homepage: https://code.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Vcs-Browser: https://git.lubuntu.me/Lubuntu/calamares-settings-ubuntu/ Vcs-Browser: https://git.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Vcs-Git: https://git.lubuntu.me/Lubuntu/calamares-settings-ubuntu.git Vcs-Git: https://git.launchpad.net/~ubuntu-qt-code/+git/calamares-settings-ubuntu
Rules-Requires-Root: no Rules-Requires-Root: no
Package: calamares-settings-kubuntu Package: calamares-settings-kubuntu
Architecture: all Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}), Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends} ${misc:Depends},
${qml6:Depends}
Conflicts: calamares-settings-ubuntu-flavor Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor Provides: calamares-settings-ubuntu-flavor
Description: Kubuntu Calamares Settings and Branding Description: Kubuntu Calamares Settings and Branding
@ -37,7 +42,8 @@ Description: Kubuntu Calamares Settings and Branding
Package: calamares-settings-lubuntu Package: calamares-settings-lubuntu
Architecture: all Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}), Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
${misc:Depends} ${misc:Depends},
${qml6:Depends}
Recommends: lubuntu-installer-prompt Recommends: lubuntu-installer-prompt
Conflicts: calamares-settings-ubuntu-flavor Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor Provides: calamares-settings-ubuntu-flavor
@ -52,7 +58,8 @@ Architecture: all
Depends: calamares-settings-ubuntu-common (>= ${binary:Version}), Depends: calamares-settings-ubuntu-common (>= ${binary:Version}),
qt6-style-kvantum, qt6-style-kvantum,
qt6-style-kvantum-themes, qt6-style-kvantum-themes,
${misc:Depends} ${misc:Depends},
${qml6:Depends}
Conflicts: calamares-settings-ubuntu-flavor Conflicts: calamares-settings-ubuntu-flavor
Provides: calamares-settings-ubuntu-flavor Provides: calamares-settings-ubuntu-flavor
Description: Ubuntu Unity Calamares Settings and Branding Description: Ubuntu Unity Calamares Settings and Branding
@ -63,14 +70,13 @@ Description: Ubuntu Unity Calamares Settings and Branding
Package: calamares-settings-ubuntu-common Package: calamares-settings-ubuntu-common
Architecture: any Architecture: any
Depends: calamares (>= 3.3.9), Depends: calamares (>= 3.3.13-0ubuntu4),
calamares-settings-ubuntu-common-data (= ${binary:Version}),
cryptsetup, cryptsetup,
dracut-core,
kdialog, kdialog,
keyutils, keyutils,
python3, libglib2.0-bin,
python3-distro,
qml6-module-qtquick,
qml6-module-qtquick-window,
snapd-seed-glue, snapd-seed-glue,
squashfs-tools, squashfs-tools,
sudo, sudo,
@ -80,3 +86,19 @@ Description: Common Calamares Settings
This package contains the common Calamares settings for all flavors. This package contains the common Calamares settings for all flavors.
There is also a automirror Python script to set sources based on There is also a automirror Python script to set sources based on
geolocation. geolocation.
.
Common settings for all Ubuntu flavors.
Package: calamares-settings-ubuntu-common-data
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.

1
debian/qmldeps.overrides vendored Normal file
View File

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

27
debian/rules vendored
View File

@ -7,7 +7,10 @@ export GO111MODULE=off
export GOCACHE=$(CURDIR)/.gocache export GOCACHE=$(CURDIR)/.gocache
export PKGSELECT = "common/modules/pkgselect" export PKGSELECT = "common/modules/pkgselect"
export PKGSELECTPROCESS = "common/modules/pkgselectprocess" 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 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) DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
@ -29,22 +32,22 @@ override_dh_auto_clean:
override_dh_auto_install: override_dh_auto_install:
(cd $(PKGSELECT)/build && $(MAKE) DESTDIR=$(CURDIR)/debian/calamares-settings-ubuntu-common/ install) (cd $(PKGSELECT)/build && $(MAKE) DESTDIR=$(CURDIR)/debian/calamares-settings-ubuntu-common/ install)
(cd $(PKGSELECTPROCESS)/build && $(MAKE) DESTDIR=$(CURDIR)/debian/calamares-settings-ubuntu-common/ install)
override_dh_missing: override_dh_missing:
dh_missing dh_missing
mkdir -pv $(MODULES_DIR) mkdir -pv $(MODULES_DIR) $(DATA_MODULES_DIR)
cp -vr common/modules/automirror $(MODULES_DIR) cp -vr common/modules/automirror $(DATA_MODULES_DIR)
mkdir -pv debian/calamares-settings-ubuntu-common/etc/calamares/modules mkdir -pv debian/calamares-settings-ubuntu-common-data/etc/calamares/modules
cp -vr common/modules/*.conf debian/calamares-settings-ubuntu-common/etc/calamares/modules cp -vr common/modules/*.conf debian/calamares-settings-ubuntu-common-data/etc/calamares/modules
chmod -R 755 debian/calamares-settings-ubuntu-common/usr/lib/ chmod 644 $(DATA_MODULES_DIR)/automirror/automirror.conf
chmod 644 $(MODULES_DIR)/automirror/automirror.conf chmod 644 $(DATA_MODULES_DIR)/automirror/module.desc
chmod 644 $(MODULES_DIR)/automirror/module.desc
chmod 644 $(MODULES_DIR)/pkgselect/libcalamares_viewmodule_pkgselect.so chmod 644 $(MODULES_DIR)/pkgselect/libcalamares_viewmodule_pkgselect.so
chmod 644 $(MODULES_DIR)/pkgselect/module.desc 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/libcalamares_job_pkgselectprocess.so
chmod 644 $(MODULES_DIR)/pkgselectprocess/module.desc chmod 644 $(MODULES_DIR)/pkgselectprocess/module.desc
mkdir -pv debian/calamares-settings-ubuntu-common/usr/bin/ mkdir -pv $(USRDIR)/libexec/ $(DATA_USRDIR)/libexec/
mkdir -pv debian/calamares-settings-ubuntu-common/usr/libexec/ cp -v common/fixconkeys-part1 $(DATA_USRDIR)/libexec/fixconkeys-part1
cp -v common/fixconkeys-part1 debian/calamares-settings-ubuntu-common/usr/libexec/fixconkeys-part1 cp -v common/fixconkeys-part2 $(DATA_USRDIR)/libexec/fixconkeys-part2
cp -v common/fixconkeys-part2 debian/calamares-settings-ubuntu-common/usr/libexec/fixconkeys-part2 cp -v $(PKGSELECTPROCESS)/build/check_package $(USRDIR)/libexec/checkpackage-backend

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

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

View File

@ -15,7 +15,7 @@ partitionLayout:
onlyPresentWithEncryption: true onlyPresentWithEncryption: true
mountPoint: "/boot" mountPoint: "/boot"
size: 4G size: 4G
- name: "kubuntu_2410" - name: "kubuntu_2504"
filesystem: unknown filesystem: unknown
mountPoint: "/" mountPoint: "/"
size: 100% size: 100%

View File

@ -5,10 +5,6 @@ packages:
name: "Element" name: "Element"
description: "Matrix-based end-to-end encrypted messenger and secure collaboration app." description: "Matrix-based end-to-end encrypted messenger and secure collaboration app."
snap: true snap: true
- id: "virt-manager"
name: "Virtual Machine Manager"
description: "Desktop user interface for managing virtual machines through libvirt."
snap: false
- id: "krita" - id: "krita"
name: "Krita" name: "Krita"
description: "Graphics editor designed primarily for digital art and 2D animation." description: "Graphics editor designed primarily for digital art and 2D animation."
@ -39,6 +35,14 @@ packages:
- calamares-settings-kubuntu - calamares-settings-kubuntu
- calamares - calamares
- cifs-utils - 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 - kubuntu-installer-prompt
regular_install_packages: regular_install_packages:
- language-pack-$LOCALE - language-pack-$LOCALE

View File

@ -13,10 +13,64 @@ defaultGroups:
system: true system: true
- sudo - sudo
passwordRequirements: passwordRequirements:
minLength: 1 minLength: 8
maxLength: -1 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 # Explicitly set the shell instead of deferring to Calamares. We have a platform
# expectation derived from Ubuntu here. # expectation derived from Ubuntu here.
user: user:
shell: /bin/bash shell: /bin/bash
forbidden_names: [ root ] 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

@ -29,7 +29,7 @@ if kdialog --warningyesno "${msg}"; then
sed -i "/- welcome$/a \ \ - oemid" /etc/calamares/settings.conf; sed -i "/- welcome$/a \ \ - oemid" /etc/calamares/settings.conf;
# Enable OEM prep module # Enable OEM prep module
sed -i "/- packages$/a \ \ - shellprocess@oemprep" /etc/calamares/settings.conf; sed -i "/- pkgselectprocess$/a \ \ - shellprocess@oemprep" /etc/calamares/settings.conf;
# Fix OEM UID # Fix OEM UID
sed -i "/- shellprocess@oemprep$/a \ \ - shellprocess@fix-oem-uid" /etc/calamares/settings.conf; sed -i "/- shellprocess@oemprep$/a \ \ - shellprocess@fix-oem-uid" /etc/calamares/settings.conf;

View File

@ -7,6 +7,10 @@
tar xvzf /etc/calamares/oemconfig.tar.gz -C "$1" --strip-components=2; tar xvzf /etc/calamares/oemconfig.tar.gz -C "$1" --strip-components=2;
chown -R 1000:1000 "$1"/home/oem 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 # 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 "$1"/etc/sudoers.orig
mv "$1"/etc/sudoers.oem "$1"/etc/sudoers mv "$1"/etc/sudoers.oem "$1"/etc/sudoers

View File

@ -1,11 +1,15 @@
#!/bin/bash #!/bin/bash
# Starts the Kubuntu OEM Environment. # 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 QT_QPA_PLATFORMTHEME="kde"
export BROWSER='sudo -H -u kubuntu firefox' export BROWSER='sudo -H -u kubuntu firefox'
/usr/bin/kwin_x11 & /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 & /usr/bin/basicwallpaper /usr/share/wallpapers/Next/contents/3840x2160.png &
sudo -E /usr/bin/calamares -D8 # This is intentionally *not* backgrounded. WAYLAND_DISPLAY="wayland-0" sudo -E /usr/bin/calamares -D8 # This is intentionally *not* backgrounded.
# If it exits... # If it exits...
killall basicwallpaper killall basicwallpaper
killall kwin_x11 killall kwin_wayland

View File

@ -2,12 +2,12 @@
modules-search: [ local ] modules-search: [ local ]
instances: instances:
- id: before_bootloader_mkdirs
module: contextualprocess
config: before_bootloader_mkdirs_context.conf
- id: before_bootloader - id: before_bootloader
module: contextualprocess module: contextualprocess
config: before_bootloader_context.conf config: before_bootloader_context.conf
- id: copy_vmlinuz_shellprocess
module: shellprocess
config: copy_vmlinuz_shellprocess.conf
- id: logs - id: logs
module: shellprocess module: shellprocess
config: shellprocess_logs.conf config: shellprocess_logs.conf
@ -53,7 +53,7 @@ sequence:
- displaymanager - displaymanager
- networkcfg - networkcfg
- hwclock - hwclock
- contextualprocess@before_bootloader_mkdirs - shellprocess@copy_vmlinuz_shellprocess
- shellprocess@bug-LP#1829805 - shellprocess@bug-LP#1829805
- shellprocess@fixconkeys_part1 - shellprocess@fixconkeys_part1
- shellprocess@fixconkeys_part2 - shellprocess@fixconkeys_part2

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,2 +1,2 @@
--- ---
batch-identifier: lubuntu-2404-${DATE} batch-identifier: lubuntu-2504-${DATE}

View File

@ -15,7 +15,7 @@ partitionLayout:
onlyPresentWithEncryption: true onlyPresentWithEncryption: true
mountPoint: "/boot" mountPoint: "/boot"
size: 4G size: 4G
- name: "lubuntu_2410" - name: "lubuntu_2504"
filesystem: unknown filesystem: unknown
mountPoint: "/" mountPoint: "/"
size: 100% size: 100%

View File

@ -1,4 +1,5 @@
--- ---
stacked_squashfs: true
packages: packages:
additional_packages: additional_packages:
- id: "element-desktop" - id: "element-desktop"
@ -9,40 +10,10 @@ packages:
name: "Thunderbird" name: "Thunderbird"
description: "Email, newsfeed, chat, and calendaring client." description: "Email, newsfeed, chat, and calendaring client."
snap: true snap: true
- id: "virt-manager"
name: "Virtual Machine Manager"
description: "Desktop user interface for managing virtual machines through libvirt."
snap: false
- id: "krita" - id: "krita"
name: "Krita" name: "Krita"
description: "Graphics editor designed primarily for digital art and 2D animation." description: "Graphics editor designed primarily for digital art and 2D animation."
snap: true snap: true
minimal_remove_packages:
- snapd
- snapd-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: regular_install_packages:
- language-pack-$LOCALE - language-pack-$LOCALE
- language-pack-gnome-$LOCALE - language-pack-gnome-$LOCALE

View File

@ -1,5 +1,9 @@
---
unpack: unpack:
- source: "/cdrom/casper/filesystem.squashfs" - source: "/cdrom/casper/minimal.squashfs"
sourcefs: "squashfs" sourcefs: "squashfs"
destination: "" destination: ""
condition: true
- source: "/cdrom/casper/minimal.standard.squashfs"
sourcefs: "squashfs"
destination: ""
condition: "installation_data.unpack_regular"

View File

@ -13,11 +13,69 @@ defaultGroups:
system: true system: true
- sudo - sudo
passwordRequirements: passwordRequirements:
minLength: 1 minLength: 8
maxLength: -1 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 # Explicitly set the shell instead of deferring to Calamares. We have a platform
# expectation derived from Ubuntu here. # expectation derived from Ubuntu here.
#
# The forbidden_names list is grabbed from `awk -F: '{print $1}' /etc/passwd`
# on a live ISO. _apt was changed to apt, lubuntu was removed, and nginx and
# www-data were added
user: user:
shell: /bin/bash shell: /bin/bash
forbidden_names: [ root ] 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
allowActiveDirectory: true allowActiveDirectory: true

View File

@ -29,7 +29,7 @@ if kdialog --warningyesno "${msg}"; then
sed -i "/- welcome$/a \ \ - oemid" /etc/calamares/settings.conf; sed -i "/- welcome$/a \ \ - oemid" /etc/calamares/settings.conf;
# Enable OEM prep module # Enable OEM prep module
sed -i "/- packages$/a \ \ - shellprocess@oemprep" /etc/calamares/settings.conf; sed -i "/- pkgselectprocess$/a \ \ - shellprocess@oemprep" /etc/calamares/settings.conf;
# Fix OEM UID # Fix OEM UID
sed -i "/- shellprocess@oemprep$/a \ \ - shellprocess@fix-oem-uid" /etc/calamares/settings.conf; sed -i "/- shellprocess@oemprep$/a \ \ - shellprocess@fix-oem-uid" /etc/calamares/settings.conf;

View File

@ -7,6 +7,10 @@
tar xvzf /etc/calamares/oemconfig.tar.gz -C "$1" --strip-components=2; tar xvzf /etc/calamares/oemconfig.tar.gz -C "$1" --strip-components=2;
chown -R 1000:1000 "$1"/home/oem 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 # 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 "$1"/etc/sudoers.orig
mv "$1"/etc/sudoers.oem "$1"/etc/sudoers mv "$1"/etc/sudoers.oem "$1"/etc/sudoers

View File

@ -3,6 +3,8 @@
# First user configuration mode, bypassing oem config # First user configuration mode, bypassing oem config
# mode # mode
useradd -G adm,cdrom,dip,lpadmin,plugdev,sambashare,sudo -m -s /bin/bash -u 60999 oem
/usr/libexec/calamares-oemprep.sh /usr/libexec/calamares-oemprep.sh
sddm_file="$(cat <<EOL sddm_file="$(cat <<EOL

View File

@ -2,12 +2,12 @@
modules-search: [ local ] modules-search: [ local ]
instances: instances:
- id: before_bootloader_mkdirs
module: contextualprocess
config: before_bootloader_mkdirs_context.conf
- id: before_bootloader - id: before_bootloader
module: contextualprocess module: contextualprocess
config: before_bootloader_context.conf config: before_bootloader_context.conf
- id: copy_vmlinuz_shellprocess
module: shellprocess
config: copy_vmlinuz_shellprocess.conf
- id: logs - id: logs
module: shellprocess module: shellprocess
config: shellprocess_logs.conf config: shellprocess_logs.conf
@ -53,18 +53,18 @@ sequence:
- displaymanager - displaymanager
- networkcfg - networkcfg
- hwclock - hwclock
- contextualprocess@before_bootloader_mkdirs - automirror
- pkgselectprocess
- dracutlukscfg
- dracut
- shellprocess@copy_vmlinuz_shellprocess
- shellprocess@bug-LP#1829805 - shellprocess@bug-LP#1829805
- shellprocess@fixconkeys_part1 - shellprocess@fixconkeys_part1
- shellprocess@fixconkeys_part2 - shellprocess@fixconkeys_part2
- initramfscfg
- initramfs
- grubcfg
- contextualprocess@before_bootloader
- bootloader
- shellprocess@add386arch - shellprocess@add386arch
- automirror - contextualprocess@before_bootloader
- pkgselectprocess - grubcfg
- bootloader
- shellprocess@logs - shellprocess@logs
- umount - umount
- show: - show:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -1,2 +1,5 @@
[General] [General]
theme=KvGnome theme=KvGnome
[Applications]
KvGnomeDark=calamares

View File

@ -1,2 +1,2 @@
--- ---
batch-identifier: ubuntuunity-2404-${DATE} batch-identifier: ubuntuunity-2504-${DATE}

View File

@ -15,7 +15,7 @@ partitionLayout:
onlyPresentWithEncryption: true onlyPresentWithEncryption: true
mountPoint: "/boot" mountPoint: "/boot"
size: 4G size: 4G
- name: "ubuntu_unity_2410" - name: "ubuntu_unity_2504"
filesystem: unknown filesystem: unknown
mountPoint: "/" mountPoint: "/"
size: 100% size: 100%

View File

@ -9,10 +9,6 @@ packages:
name: "Thunderbird" name: "Thunderbird"
description: "Email, newsfeed, chat, and calendaring client." description: "Email, newsfeed, chat, and calendaring client."
snap: true snap: true
- id: "virt-manager"
name: "Virtual Machine Manager"
description: "Desktop user interface for managing virtual machines through libvirt."
snap: false
- id: "krita" - id: "krita"
name: "Krita" name: "Krita"
description: "Graphics editor designed primarily for digital art and 2D animation." description: "Graphics editor designed primarily for digital art and 2D animation."

View File

@ -13,10 +13,64 @@ defaultGroups:
system: true system: true
- sudo - sudo
passwordRequirements: passwordRequirements:
minLength: 1 minLength: 8
maxLength: -1 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 # Explicitly set the shell instead of deferring to Calamares. We have a platform
# expectation derived from Ubuntu here. # expectation derived from Ubuntu here.
user: user:
shell: /bin/bash shell: /bin/bash
forbidden_names: [ root ] 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

@ -26,7 +26,7 @@ if zenity --question --text="${msg}"; then
sed -i "/- welcome$/a \ \ - oemid" /etc/calamares/settings.conf; sed -i "/- welcome$/a \ \ - oemid" /etc/calamares/settings.conf;
# Enable OEM prep module # Enable OEM prep module
sed -i "/- packages$/a \ \ - shellprocess@oemprep" /etc/calamares/settings.conf; sed -i "/- pkgselectprocess$/a \ \ - shellprocess@oemprep" /etc/calamares/settings.conf;
# Fix OEM UID # Fix OEM UID
sed -i "/- shellprocess@oemprep$/a \ \ - shellprocess@fix-oem-uid" /etc/calamares/settings.conf; sed -i "/- shellprocess@oemprep$/a \ \ - shellprocess@fix-oem-uid" /etc/calamares/settings.conf;

View File

@ -7,6 +7,10 @@
tar xvzf /etc/calamares/oemconfig.tar.gz -C "$1" --strip-components=2; tar xvzf /etc/calamares/oemconfig.tar.gz -C "$1" --strip-components=2;
chown -R 1000:1000 "$1"/home/oem 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 # 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 "$1"/etc/sudoers.orig
mv "$1"/etc/sudoers.oem "$1"/etc/sudoers mv "$1"/etc/sudoers.oem "$1"/etc/sudoers

View File

@ -2,12 +2,12 @@
modules-search: [ local ] modules-search: [ local ]
instances: instances:
- id: before_bootloader_mkdirs
module: contextualprocess
config: before_bootloader_mkdirs_context.conf
- id: before_bootloader - id: before_bootloader
module: contextualprocess module: contextualprocess
config: before_bootloader_context.conf config: before_bootloader_context.conf
- id: copy_vmlinuz_shellprocess
module: shellprocess
config: copy_vmlinuz_shellprocess.conf
- id: logs - id: logs
module: shellprocess module: shellprocess
config: shellprocess_logs.conf config: shellprocess_logs.conf
@ -53,7 +53,7 @@ sequence:
- displaymanager - displaymanager
- networkcfg - networkcfg
- hwclock - hwclock
- contextualprocess@before_bootloader_mkdirs - shellprocess@copy_vmlinuz_shellprocess
- shellprocess@bug-LP#1829805 - shellprocess@bug-LP#1829805
- shellprocess@fixconkeys_part1 - shellprocess@fixconkeys_part1
- shellprocess@fixconkeys_part2 - shellprocess@fixconkeys_part2