1
0
forked from brl/citadel

14 Commits

60 changed files with 1871 additions and 211 deletions

View File

@ -1,8 +1,6 @@
DEPENDS:append = " citadel-tools-native mtools-native cryptsetup-native coreutils-native"
DEPENDS:append = " make-ext4fs-native citadel-tools-native mtools-native cryptsetup-native coreutils-native"
# Block size must be 4096 or dm-verity won't work
EXTRA_IMAGECMD:ext4 = "-i 4096 -b 4096"
IMAGE_FSTYPES = "ext4"
IMAGE_OVERHEAD_FACTOR = "1.2"
@ -16,7 +14,7 @@ do_citadel_mkimage() {
image-type = "${CITADEL_IMAGE_TYPE}"
channel = "${CITADEL_IMAGE_CHANNEL}"
version = ${CITADEL_IMAGE_VERSION}
timestamp = "${DATETIME}"
timestamp = "${SOURCE_DATE_EPOCH}"
source = "${IMGDEPLOYDIR}/${IMAGE_LINK_NAME}.ext4"
compress = ${CITADEL_IMAGE_COMPRESS}
EOF

View File

@ -0,0 +1,51 @@
inherit image_types
python set_image_size () {
import math
print("LOCAL set_image_size")
blocksize = 50000
rootfs_size = get_rootfs_size(d)
print("LOCAL rootfs_size")
rootfs_size = math.ceil(rootfs_size / blocksize) * blocksize
print("LOCAL rootfs_size")
d.setVar('ROOTFS_SIZE', str(rootfs_size))
d.setVarFlag('ROOTFS_SIZE', 'export', '1')
}
make_repro_ext4fs() {
fstype=ext4
extra_imagecmd=""
if [ $# -gt 1 ]; then
shift
extra_imagecmd=$@
fi
# If generating an empty image the size of the sparse block should be large
# enough to allocate an ext4 filesystem using 4096 bytes per inode, this is
# about 60K, so dd needs a minimum count of 60, with bs=1024 (bytes per IO)
eval local COUNT=\"0\"
eval local MIN_COUNT=\"60\"
if [ $ROOTFS_SIZE -lt $MIN_COUNT ]; then
eval COUNT=\"$MIN_COUNT\"
fi
# Create a sparse image block
bbdebug 1 Executing "dd if=/dev/zero of=${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype count=1 bs=1024"
bbdebug 1 "ROOTFS_SIZE: `${ROOTFS_SIZE}`"
bbdebug 1 Executing "make_ext4fs -vl ${ROOTFS_SIZE}k -T "1712775988" ${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype ${IMAGE_ROOTFS}"
make_ext4fs -vl ${ROOTFS_SIZE}k -T "1712775988" ${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype ${IMAGE_ROOTFS}
# Error codes 0-3 indicate successfull operation of fsck (no errors or errors corrected)
fsck.ext4 -pvD ${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype || [ $? -le 3 ]
# adding f makes it non-reproducible
# delete the lost+found dir's contents
# mount ${IMGDEPLOYDIR}/${IMAGE_NAME}.$fstype /tmp/image/
# find "-iname" /tmp/image/lost+found -type d -exec rm -r "{}" \;
}

View File

@ -38,6 +38,16 @@
#MACHINE ??= "qemux86-64"
MACHINE ?= "intel-corei7-64"
#
# Binary Reproducibility
#
BUILD_REPRODUCIBLE_BINARIES = "1"
export PYTHONHASHSEED = "0"
export PERL_HASH_SEED = "0"
export TZ = 'UTC'
export SOURCE_DATE_EPOCH ??= "1718285985"
REPRODUCIBLE_TIMESTAMP_ROOTFS ??= "1712775988"
DEFAULT_TIMEZONE = "America/New_York"
DEPLOY_DIR_IMAGE = "${TOPDIR}/images"

View File

@ -0,0 +1,4 @@
# For blueprint-compiler-native to work
EXTRA_OEMESON:remove:class-native = "-Dintrospection=disabled"
EXTRA_OEMESON:append:class-native = " -Dintrospection=enabled"

View File

@ -0,0 +1,4 @@
# For blueprint-compiler-native to work
EXTRA_OEMESON:remove:class-native = "-Dintrospection=disabled"
EXTRA_OEMESON:append:class-native = " -Dintrospection=enabled"

View File

@ -1,2 +1,6 @@
# Remove this dependency so it doesn't get dragged in with gtk. These icons are in citadel-extra-image now
GTKBASE_RRECOMMENDS:remove = "adwaita-icon-theme-symbolic"
# For blueprint-compiler-native to work
EXTRA_OEMESON:remove:class-native = "-Dintrospection=disabled"
EXTRA_OEMESON:append:class-native = " -Dintrospection=enabled"

View File

@ -0,0 +1,4 @@
# For blueprint-compiler-native to work
EXTRA_OEMESON:remove:class-native = "-Dintrospection=disabled"
EXTRA_OEMESON:append:class-native = " -Dintrospection=enabled"

View File

@ -0,0 +1,6 @@
# For blueprint-compiler-native to work
EXTRA_OEMESON:remove:class-native = "-Dintrospection=disabled"
EXTRA_OEMESON:append:class-native = " -Dintrospection=enabled"
BBCLASSEXTEND = "native"

View File

@ -3,16 +3,12 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/networkmanager:"
SRC_URI += "\
file://NetworkManager.conf \
file://watch-resolvconf.path \
file://watch-resolvconf.service \
"
SYSTEMD_SERVICE:${PN} += "watch-resolvconf.path"
do_install:append() {
install -m 0644 ${WORKDIR}/NetworkManager.conf ${D}${sysconfdir}/NetworkManager/
install -m 644 ${WORKDIR}/watch-resolvconf.path ${D}${systemd_system_unitdir}
install -m 644 ${WORKDIR}/watch-resolvconf.service ${D}${systemd_system_unitdir}
}
PACKAGECONFIG = "nss systemd polkit wifi iwd vala nmcli bluez5"
NETWORKMANAGER_FIREWALL_DEFAULT = "iptables"

View File

@ -0,0 +1,4 @@
# For blueprint-compiler-native to work
EXTRA_OEMESON:remove:class-native = "-Dintrospection=disabled"
EXTRA_OEMESON:append:class-native = " -Dintrospection=enabled"

View File

@ -0,0 +1,245 @@
From 14cd68b1fdd3a16a3aa2892f9216096bea02173d Mon Sep 17 00:00:00 2001
From: isa <isa@subgraph.com>
Date: Thu, 11 Jul 2024 18:58:40 +0000
Subject: [PATCH] Modify systemd to use localtime in /storage/citadel-state
Upstream-Status: Inappropriate [citadel specific]
---
src/basic/time-util.c | 4 ++--
src/core/manager.c | 18 +++++++++---------
src/core/manager.h | 2 +-
src/core/unit.h | 2 +-
src/firstboot/firstboot.c | 20 ++++++++++----------
src/timedate/timedated.c | 12 ++++++------
units/systemd-timedated.service.in | 2 +-
7 files changed, 30 insertions(+), 30 deletions(-)
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
index f9014dc560..bab1db4224 100644
--- a/src/basic/time-util.c
+++ b/src/basic/time-util.c
@@ -1612,7 +1612,7 @@ int get_timezone(char **ret) {
assert(ret);
- r = readlink_malloc("/etc/localtime", &t);
+ r = readlink_malloc("/storage/citadel-state/localtime", &t);
if (r == -ENOENT) {
/* If the symlink does not exist, assume "UTC", like glibc does */
z = strdup("UTC");
@@ -1625,7 +1625,7 @@ int get_timezone(char **ret) {
if (r < 0)
return r; /* returns EINVAL if not a symlink */
- e = PATH_STARTSWITH_SET(t, "/usr/share/zoneinfo/", "../usr/share/zoneinfo/");
+ e = PATH_STARTSWITH_SET(t, "/usr/share/zoneinfo/", "../../usr/share/zoneinfo/");
if (!e)
return -EINVAL;
diff --git a/src/core/manager.c b/src/core/manager.c
index 88eebfc626..59c4dbbae1 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -412,9 +412,9 @@ static int manager_read_timezone_stat(Manager *m) {
assert(m);
- /* Read the current stat() data of /etc/localtime so that we detect changes */
- if (lstat("/etc/localtime", &st) < 0) {
- log_debug_errno(errno, "Failed to stat /etc/localtime, ignoring: %m");
+ /* Read the current stat() data of /storage/citadel-state/localtime so that we detect changes */
+ if (lstat("/storage/citadel-state/localtime", &st) < 0) {
+ log_debug_errno(errno, "Failed to stat /storage/citadel-state/localtime, ignoring: %m");
changed = m->etc_localtime_accessible;
m->etc_localtime_accessible = false;
} else {
@@ -439,7 +439,7 @@ static int manager_setup_timezone_change(Manager *m) {
if (MANAGER_IS_TEST_RUN(m))
return 0;
- /* We watch /etc/localtime for three events: change of the link count (which might mean removal from /etc even
+ /* We watch /storage/citadel-state/localtime for three events: change of the link count (which might mean removal from /etc even
* though another link might be kept), renames, and file close operations after writing. Note we don't bother
* with IN_DELETE_SELF, as that would just report when the inode is removed entirely, i.e. after the link count
* went to zero and all fds to it are closed.
@@ -450,14 +450,14 @@ static int manager_setup_timezone_change(Manager *m) {
* Note that we create the new event source first here, before releasing the old one. This should optimize
* behaviour as this way sd-event can reuse the old watch in case the inode didn't change. */
- r = sd_event_add_inotify(m->event, &new_event, "/etc/localtime",
+ r = sd_event_add_inotify(m->event, &new_event, "/storage/citadel-state/localtime",
IN_ATTRIB|IN_MOVE_SELF|IN_CLOSE_WRITE|IN_DONT_FOLLOW, manager_dispatch_timezone_change, m);
if (r == -ENOENT) {
/* If the file doesn't exist yet, subscribe to /etc instead, and wait until it is created either by
* O_CREATE or by rename() */
- log_debug_errno(r, "/etc/localtime doesn't exist yet, watching /etc instead.");
- r = sd_event_add_inotify(m->event, &new_event, "/etc",
+ log_debug_errno(r, "/storage/citadel-state/localtime doesn't exist yet, watching /storage/citadel-state instead.");
+ r = sd_event_add_inotify(m->event, &new_event, "/storage/citadel-state",
IN_CREATE|IN_MOVED_TO|IN_ONLYDIR, manager_dispatch_timezone_change, m);
}
if (r < 0)
@@ -3173,13 +3173,13 @@ static int manager_dispatch_timezone_change(
int changed;
Unit *u;
- log_debug("inotify event for /etc/localtime");
+ log_debug("inotify event for /storage/citadel-state/localtime");
changed = manager_read_timezone_stat(m);
if (changed <= 0)
return changed;
- /* Something changed, restart the watch, to ensure we watch the new /etc/localtime if it changed */
+ /* Something changed, restart the watch, to ensure we watch the new /storage/citadel-state/localtime if it changed */
(void) manager_setup_timezone_change(m);
/* Read the new timezone */
diff --git a/src/core/manager.h b/src/core/manager.h
index d96eb7b995..68066cac50 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -370,7 +370,7 @@ struct Manager {
unsigned gc_marker;
- /* The stat() data the last time we saw /etc/localtime */
+ /* The stat() data the last time we saw /storage/citadel-state/localtime */
usec_t etc_localtime_mtime;
bool etc_localtime_accessible;
diff --git a/src/core/unit.h b/src/core/unit.h
index 60bc2e3d35..c19af861f9 100644
--- a/src/core/unit.h
+++ b/src/core/unit.h
@@ -713,7 +713,7 @@ typedef struct UnitVTable {
/* Called whenever CLOCK_REALTIME made a jump */
void (*time_change)(Unit *u);
- /* Called whenever /etc/localtime was modified */
+ /* Called whenever /storage/citadel-state/localtime was modified */
void (*timezone_change)(Unit *u);
/* Returns the next timeout of a unit */
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index d4029272de..5bc0976f63 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -606,15 +606,15 @@ static int process_timezone(int rfd) {
assert(rfd >= 0);
- pfd = chase_and_open_parent_at(rfd, "/etc/localtime",
+ pfd = chase_and_open_parent_at(rfd, "/storage/citadel-state/localtime",
CHASE_AT_RESOLVE_IN_ROOT|CHASE_MKDIR_0755|CHASE_WARN|CHASE_NOFOLLOW,
&f);
if (pfd < 0)
- return log_error_errno(pfd, "Failed to chase /etc/localtime: %m");
+ return log_error_errno(pfd, "Failed to chase /storage/citadel-state/localtime: %m");
r = should_configure(pfd, f);
if (r == 0)
- log_debug("Found /etc/localtime, assuming timezone has been configured.");
+ log_debug("Found /storage/citadel-state/localtime, assuming timezone has been configured.");
if (r <= 0)
return r;
@@ -625,16 +625,16 @@ static int process_timezone(int rfd) {
if (arg_copy_timezone && r == 0) {
_cleanup_free_ char *s = NULL;
- r = readlink_malloc("/etc/localtime", &s);
+ r = readlink_malloc("/storage/citadel-state/localtime", &s);
if (r != -ENOENT) {
if (r < 0)
- return log_error_errno(r, "Failed to read host's /etc/localtime: %m");
+ return log_error_errno(r, "Failed to read host's /storage/citadel-state/localtime: %m");
r = symlinkat_atomic_full(s, pfd, f, /* make_relative= */ false);
if (r < 0)
- return log_error_errno(r, "Failed to create /etc/localtime symlink: %m");
+ return log_error_errno(r, "Failed to create /storage/citadel-state/localtime symlink: %m");
- log_info("Copied host's /etc/localtime.");
+ log_info("Copied host's /storage/citadel-state/localtime.");
return 0;
}
}
@@ -650,9 +650,9 @@ static int process_timezone(int rfd) {
r = symlinkat_atomic_full(e, pfd, f, /* make_relative= */ false);
if (r < 0)
- return log_error_errno(r, "Failed to create /etc/localtime symlink: %m");
+ return log_error_errno(r, "Failed to create /storage/citadel-state/localtime symlink: %m");
- log_info("/etc/localtime written");
+ log_info("/storage/citadel-state/localtime written");
return 0;
}
@@ -1223,7 +1223,7 @@ static int process_reset(int rfd) {
"/etc/hostname",
"/etc/machine-id",
"/etc/kernel/cmdline",
- "/etc/localtime") {
+ "/storage/citadel-state/localtime") {
r = reset_one(rfd, p);
if (r < 0)
return r;
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
index c7be30f563..334e5e251e 100644
--- a/src/timedate/timedated.c
+++ b/src/timedate/timedated.c
@@ -276,9 +276,9 @@ static int context_read_data(Context *c) {
r = get_timezone(&t);
if (r == -EINVAL)
- log_warning_errno(r, "/etc/localtime should be a symbolic link to a time zone data file in /usr/share/zoneinfo/.");
+ log_warning_errno(r, "/storage/citadel-state/localtime should be a symbolic link to a time zone data file in /usr/share/zoneinfo/.");
else if (r < 0)
- log_warning_errno(r, "Failed to get target of /etc/localtime: %m");
+ log_warning_errno(r, "Failed to get target of /storage/citadel-state/localtime: %m");
free_and_replace(c->zone, t);
@@ -302,22 +302,22 @@ static int context_write_data_timezone(Context *c) {
if (access("/usr/share/zoneinfo/UTC", F_OK) < 0) {
- if (unlink("/etc/localtime") < 0 && errno != ENOENT)
+ if (unlink("/storage/citadel-state/localtime") < 0 && errno != ENOENT)
return -errno;
return 0;
}
- source = "../usr/share/zoneinfo/UTC";
+ source = "../../usr/share/zoneinfo/UTC";
} else {
- p = path_join("../usr/share/zoneinfo", c->zone);
+ p = path_join("../../usr/share/zoneinfo", c->zone);
if (!p)
return -ENOMEM;
source = p;
}
- return symlink_atomic(source, "/etc/localtime");
+ return symlink_atomic(source, "/storage/citadel-state/localtime");
}
static int context_write_data_local_rtc(Context *c) {
diff --git a/units/systemd-timedated.service.in b/units/systemd-timedated.service.in
index 00f6643ba7..9be4010576 100644
--- a/units/systemd-timedated.service.in
+++ b/units/systemd-timedated.service.in
@@ -31,7 +31,7 @@ ProtectKernelLogs=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectSystem=strict
-ReadWritePaths=/etc
+ReadWritePaths=/storage/citadel-state
RestrictAddressFamilies=AF_UNIX
RestrictNamespaces=yes
RestrictRealtime=yes

View File

@ -16,3 +16,7 @@ do_install:append() {
rm -f ${D}${sysconfdir}/tmpfiles.d/00-create-volatile.conf
ln -s rescue.target ${D}${systemd_unitdir}/system/kbrequest.target
}
SRC_URI += " \
file://0001-Modify-systemd-to-use-localtime-in-storage-citadel-s.patch \
"

View File

@ -0,0 +1,5 @@
pkg_postinst:${PN}() {
etc_lt="$D${sysconfdir}/localtime"
ln -sf ../storage/citadel-state/localtime $etc_lt
}

View File

@ -41,6 +41,7 @@ SRC_URI = "\
file://share/dot.profile \
file://share/dot.vimrc \
file://polkit/citadel.rules \
file://polkit/gnome-control-center.rules \
file://citadel-installer.session \
file://citadel-installer.json \
file://citadel-installer.desktop \
@ -50,6 +51,9 @@ SRC_URI = "\
file://systemd/citadel-installer-backend.service \
file://systemd/installer-session-switcher.service \
file://systemd/user/gnome-session@citadel-installer.target.d/session.conf \
file://icons/citadel-installer.svg \
file://systemd/watch-resolvconf.service \
file://systemd/watch-resolvconf.path \
file://skel/profile \
file://skel/bashrc \
file://skel/vimrc \
@ -66,7 +70,7 @@ SRC_URI = "\
"
USERADD_PACKAGES = "${PN}"
USERADD_PARAM:${PN} = "-m -u 1000 -s /bin/bash citadel"
USERADD_PARAM:${PN} = "-m -u 1000 -G wheel -s /bin/bash citadel"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
# for citadel-ifconfig.sh
@ -74,7 +78,7 @@ RDEPENDS:${PN} = "bash"
inherit allarch systemd useradd
SYSTEMD_SERVICE:${PN} = "zram-swap.service citadel-launch-default-realm.path x11-session-switcher.service citadel-installer-backend.service installer-session-switcher.service citadel-setpassword.service"
SYSTEMD_SERVICE:${PN} = "zram-swap.service citadel-launch-default-realm.path x11-session-switcher.service citadel-installer-backend.service installer-session-switcher.service citadel-setpassword.service watch-resolvconf.service watch-resolvconf.path"
do_install() {
install -m 0755 -d ${D}/storage
@ -118,6 +122,9 @@ do_install() {
install -m 644 ${WORKDIR}/systemd/citadel-installer-backend.service ${D}${systemd_system_unitdir}
install -m 644 ${WORKDIR}/systemd/installer-session-switcher.service ${D}${systemd_system_unitdir}
install -m 644 ${WORKDIR}/systemd/watch-resolvconf.service ${D}${systemd_system_unitdir}
install -m 644 ${WORKDIR}/systemd/watch-resolvconf.path ${D}${systemd_system_unitdir}
install -m 644 ${WORKDIR}/systemd/citadel-setpassword.service ${D}${systemd_system_unitdir}
install -m 0754 ${WORKDIR}/citadel-setpassword.sh ${D}${libexecdir}
install -d ${D}${systemd_user_unitdir}/gnome-session@citadel-installer.target.d
@ -163,6 +170,7 @@ do_install() {
install -m 0644 ${WORKDIR}/polkit/citadel.rules ${D}${sysconfdir}/polkit-1/rules.d/
install -m 0644 ${WORKDIR}/polkit/gnome-control-center.rules ${D}${sysconfdir}/polkit-1/rules.d/
install -m 0644 ${WORKDIR}/modprobe.d/audio_powersave.conf ${D}${sysconfdir}/modprobe.d/
@ -172,6 +180,10 @@ do_install() {
install -m 0644 ${WORKDIR}/apt-cacher-ng/acng.conf ${D}${datadir}/apt-cacher-ng/conf/
install -m 0644 ${WORKDIR}/apt-cacher-ng/security.conf ${D}${datadir}/apt-cacher-ng/conf/
# icons
mkdir ${D}${datadir}/icons/
install -m 0644 ${WORKDIR}/icons/citadel-installer.svg ${D}${datadir}/icons/
# This probably belongs in lvm2 recipe
install -d ${D}${systemd_system_unitdir}/sysinit.target.wants
ln -s ../lvm2-lvmetad.socket ${D}${systemd_system_unitdir}/sysinit.target.wants/lvm2-lvmetad.socket

View File

@ -3,6 +3,6 @@ Name=Citadel Installer
Comment=This session logs you into the Citadel Installer
Exec=/usr/libexec/citadel-installer-ui
TryExec=/usr/libexec/citadel-installer-ui
Icon=
Icon=/usr/share/icons/citadel-installer.svg
Type=Application

View File

@ -0,0 +1,153 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="64"
height="64"
version="1.1"
id="svg13"
sodipodi:docname="citadel-installer.svg"
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs13" />
<sodipodi:namedview
id="namedview13"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="15.0625"
inkscape:cx="31.966805"
inkscape:cy="31.966805"
inkscape:window-width="3840"
inkscape:window-height="2090"
inkscape:window-x="0"
inkscape:window-y="34"
inkscape:window-maximized="1"
inkscape:current-layer="svg13" />
<rect
style="opacity:0.2;fill:#b6150c;fill-opacity:1"
width="56"
height="17"
x="4"
y="44"
rx="2.8"
ry="2.8"
id="rect1" />
<path
style="fill:#b60c12;fill-opacity:1;opacity:0.04"
d="m 18.25,4 h 27.5 C 50.3205,4 54,7.7045 54,12.275 V 46.65 c 0,4.5705 -3.6795,8.25 -8.25,8.25 H 18.25 C 13.6795,54.9 10,51.2205 10,46.65 V 12.275 C 10,7.7045 13.6795,4 18.25,4 Z"
id="path1" />
<path
style="opacity:0.1;fill:#b60c12;fill-opacity:1"
transform="matrix(2.2773394,0,0,1.2576563,-4.4374303,-4.805362)"
d="m 10.950248,26.084524 5.049752,0 5.049752,0 -2.524876,4.373214 L 16,34.830952 13.475124,30.457738 Z"
id="path2" />
<path
style="fill:#b6150c;fill-opacity:1"
transform="matrix(2.2773394,0,0,1.2576563,-4.4374303,-5.8053658)"
d="m 10.950248,26.084524 5.049752,0 5.049752,0 -2.524876,4.373214 L 16,34.830952 13.475124,30.457738 Z"
id="path3" />
<rect
style="opacity:0.8;fill:#b6150c;fill-opacity:1"
width="6"
height="6"
x="26"
y="9"
id="rect3" />
<rect
style="opacity:0.2;fill:#b6150c;fill-opacity:1"
width="6"
height="6"
x="32"
y="9"
id="rect4" />
<rect
style="opacity:0.4;fill:#b6150c;fill-opacity:1"
width="6"
height="6"
x="26"
y="15"
id="rect5" />
<rect
style="opacity:0.9;fill:#b6150c;fill-opacity:1"
width="6"
height="6"
x="32"
y="15"
id="rect6" />
<rect
style="fill:#b6150c;fill-opacity:1"
width="6"
height="6"
x="26"
y="21"
id="rect7" />
<rect
style="opacity:0.6;fill:#b6150c;fill-opacity:1"
width="6"
height="6"
x="32"
y="21"
id="rect8" />
<rect
style="fill:#b6150c;fill-opacity:1"
width="56"
height="17"
x="4"
y="43"
rx="2.8"
ry="2.8"
id="rect9" />
<rect
style="opacity:0.2"
width="22.4"
height="1"
x="12.4"
y="53"
id="rect10" />
<path
style="opacity:0.3"
d="M 51.5 47 A 4.5 4.5 0 0 0 47.267578 50 L 32.400391 50 L 32.400391 53 L 47.267578 53 A 4.5 4.5 0 0 0 51.5 56 A 4.5 4.5 0 0 0 56 51.5 A 4.5 4.5 0 0 0 51.5 47 z"
id="path10" />
<circle
style="opacity:0.2"
cx="12.5"
cy="52.5"
r="4.5"
id="circle10" />
<circle
style="fill:#ffffff"
cx="12.5"
cy="51.5"
r="4.5"
id="circle11" />
<rect
style="fill:#ffffff"
width="22.4"
height="3"
x="12.4"
y="50"
id="rect11" />
<circle
style="opacity:0.2"
cx="31.5"
cy="52.5"
r="4.5"
id="circle12" />
<circle
style="fill:#ffffff"
cx="31.5"
cy="51.5"
r="4.5"
id="circle13" />
<path
style="fill:#ffffff;opacity:0.2"
d="M 18.25 4 C 13.6795 4 10 7.7048906 10 12.275391 L 10 13.275391 C 10 8.7048906 13.6795 5 18.25 5 L 45.75 5 C 50.3205 5 54 8.7048906 54 13.275391 L 54 12.275391 C 54 7.7048906 50.3205 4 45.75 4 L 18.25 4 z"
id="path13" />
</svg>

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,13 @@
polkit.addRule(function(action, subject) {
if ((action.id == "org.freedesktop.locale1.set-locale" ||
action.id == "org.freedesktop.locale1.set-keyboard" ||
action.id == "org.freedesktop.ModemManager1.Device.Control" ||
action.id == "org.freedesktop.hostname1.set-static-hostname" ||
action.id == "org.freedesktop.hostname1.set-hostname" ||
action.id == "org.gnome.controlcenter.datetime.configure") &&
subject.local &&
subject.active &&
subject.isInGroup ("citadel")) {
return polkit.Result.YES;
}
});

View File

@ -6,4 +6,4 @@ PathChanged=/run/NetworkManager
MakeDirectory=true
[Install]
WantedBy=multi-user.target
WantedBy=multi-user.target

View File

@ -4,4 +4,4 @@ ConditionPathExists=/run/NetworkManager/resolv.conf
ConditionPathExists=/storage/citadel-state
[Service]
Type=oneshot
ExecStart=/bin/cp /run/NetworkManager/resolv.conf /storage/citadel-state/resolv.conf
ExecStart=/bin/cp /run/NetworkManager/resolv.conf /storage/citadel-state/resolv.conf

View File

@ -0,0 +1,21 @@
LICENSE="CLOSED"
SRC_URI = "gitsm://git.subgraph.com/brl/citadel-realms.git;protocol=https;branch=master"
PV = "1.0"
SRCREV = "048002a617d643b61774d69edee1526d4c7adbdf"
S = "${WORKDIR}/git"
APPNAME="com.subgraph.citadel.Realms"
GTKIC_VERSION = "4"
FILES:${PN} += "${datadir}/icons \
${datadir}/${APPNAME} \
"
DEPENDS = "blueprint-compiler-native gjs gtk4 gtk4-native libadwaita-native"
inherit meson gtk-icon-cache

View File

@ -15,7 +15,7 @@ do_realmfs_mkimage() {
image-type = "realmfs"
channel = "${CITADEL_IMAGE_CHANNEL}"
version = 1
timestamp = "${DATETIME}"
timestamp = "${SOURCE_DATE_EPOCH}"
source = "${REALMFS_DIR}/citadel-realmfs.ext4"
realmfs-name = "base"
compress = true

View File

@ -18,7 +18,8 @@ CITADEL_IMAGE_VERSION = "${CITADEL_IMAGE_VERSION_extra}"
CITADEL_IMAGE_TYPE = "extra"
require citadel-image.inc
inherit citadel-image
inherit citadel-image make_repro_ext4fs
IMAGE_CMD:ext4 = "make_repro_ext4fs"
ROOTFS_POSTPROCESS_COMMAND += "write_manifest_file; "

View File

@ -139,8 +139,51 @@ write_boot_image() {
fi
bbdebug 1 Creating ${IMAGE_SIZE} block msdos image at ${IMAGE_PATH}
mkdosfs -n boot -C ${IMAGE_PATH} ${IMAGE_SIZE}
mcopy -i ${IMAGE_PATH} -s ${IMAGE_ROOTFS}/* ::/
mkdosfs --invariant -i 2e24ec82 -n BOOT -C ${IMAGE_PATH} ${IMAGE_SIZE}
###############################################################################
echo "Running mmd and mcopy per file and dir to place files in the final fat32 image reproducibly"
INDIR=${IMAGE_ROOTFS}
# mmd is silly and requires this line to know where the image file is
echo "drive x: file=\"${IMAGE_PATH}\"" > ~/.mtoolsrc
echo ${OUTDIR}
for file in $(ls ${INDIR}/ | sort)
do
if [ -d ${INDIR}/${file} ] ; then
echo "lvl 1 mmd ${file}"
mmd x:/${file}
for file1 in $(ls ${INDIR}/${file}/ | sort)
do
if [ -d ${INDIR}/${file}/${file1} ] ; then
echo "lvl 2 mmd ${file}/${file1}"
mmd x:/${file}/${file1}
for file2 in $(ls ${INDIR}/${file}/${file1}/ | sort)
do
echo "lvl 2 mmd ${file}/${file1}/${file2}"
if [ -d ${INDIR}/${file}/${file1}/${file2} ] ; then
mmd x:/${file}/${file1}/${file2}
else
echo "lvl 4 mcopy ${INDIR}/${file}/${file1}/${file2}"
mcopy -i ${IMAGE_PATH} -vs ${INDIR}/${file}/${file1}/${file2} ::/${file}/${file1}/
fi
done
else
echo "lvl 2 mcopy ${INDIR}/${file}/${file1}"
mcopy -i ${IMAGE_PATH} -vs ${INDIR}/${file}/${file1} ::/${file}/
fi
done
else
echo "lvl 2 mcopy ${INDIR}/${file}"
mcopy -i ${IMAGE_PATH} -vs ${INDIR}/${file} ::/
fi
done
###############################################################################
syslinux --directory syslinux --install ${IMAGE_PATH}
}
@ -160,18 +203,31 @@ write_installer_image() {
bbdebug 1 Creating ${TOTAL_IMAGE_BLOCKS} block empty image file at ${INSTALLER_IMAGE}
truncate -s ${TOTAL_IMAGE_BLOCKS}K ${INSTALLER_IMAGE}
parted -s ${INSTALLER_IMAGE} mklabel msdos
# now set disk Identifier manually to make reproducible
# thank you mook765 @ https://askubuntu.com/questions/1250224/how-to-change-partuuid
bash -c "sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' <<EOF | fdisk ${INSTALLER_IMAGE}
x
i
0x60123f76
r
w
EOF"
offset=32
end=$(expr ${offset} + ${BOOT_IMAGE_SECTORS} - 1)
bbdebug 1 parted -s ${INSTALLER_IMAGE} unit s mkpart fat32 ${offset} ${end}
parted -s ${INSTALLER_IMAGE} unit s mkpart primary fat32 ${offset} ${end}
parted -s ${INSTALLER_IMAGE} set 1 boot on
bbdebug 1 dd if=${BOOT_IMAGE} of=${INSTALLER_IMAGE} seek=${offset} count=${BOOT_IMAGE_SECTORS} conv=sparse,nocreat,notrunc
dd if=${BOOT_IMAGE} of=${INSTALLER_IMAGE} seek=${offset} count=${BOOT_IMAGE_SECTORS} conv=sparse,nocreat,notrunc
dd bs=440 count=1 conv=notrunc if=${RECIPE_SYSROOT}/usr/share/syslinux/mbr.bin of=${INSTALLER_IMAGE}
parted -s ${INSTALLER_IMAGE} unit s print
# thank you Anade @ https://superuser.com/questions/1247972/how-to-change-vfat-partition-uuid
printf "\x"12"\x"34"\x"AB"\x"CD"" | dd bs=1 seek=67 count=4 conv=notrunc of=${INSTALLER_IMAGE}
}
do_fetch[noexec] = "1"

View File

@ -7,7 +7,8 @@ CITADEL_IMAGE_VERSION = "${CITADEL_IMAGE_VERSION_kernel}"
CITADEL_IMAGE_TYPE = "kernel"
require citadel-image.inc
inherit citadel-image
inherit citadel-image make_repro_ext4fs
IMAGE_CMD:ext4 = "make_repro_ext4fs"
do_rootfs[depends] += "citadel-kernel:do_deploy"

View File

@ -15,7 +15,10 @@ CITADEL_IMAGE_VERSION = "${CITADEL_IMAGE_VERSION_rootfs}"
CITADEL_IMAGE_TYPE = "rootfs"
require citadel-image.inc
inherit citadel-image
inherit citadel-image make_repro_ext4fs
IMAGE_CMD:ext4 = "make_repro_ext4fs"
IMAGE_OVERHEAD_FACTOR = "1.34"
set_blank_user_password() {
sed -i 's%^citadel::%citadel:!:%' ${IMAGE_ROOTFS}/etc/shadow
@ -62,4 +65,4 @@ addtask rm_var_link after do_rootfs before do_image_qa
symlink_lib64() {
ln -s /usr/lib ${IMAGE_ROOTFS}/lib64
}
}

View File

@ -49,4 +49,6 @@ RDEPENDS:${PN} = "\
pipewire-tools \
pipewire-spa-tools \
alsa-utils \
gnome-software \
minijail \
"

View File

@ -29,6 +29,7 @@ RDEPENDS:${PN} = "\
libdrm-amdgpu \
dash-to-panel \
citadel-config-gnome \
citadel-realms \
power-profiles-daemon \
"

View File

@ -8,9 +8,16 @@ inherit cargo systemd gsettings pkgconfig
#
# Update this when changes are pushed to github
#
SRCREV = "421b0e27d777c418a26016bd8065715823504637"
SRCREV = "11b3e8a0164c8b304efbeda5245f4ab6ec48d298"
GIT_URI = "git://git.subgraph.com/brl/citadel-tools.git;protocol=https;branch=master"
# get git repo owner from citadel to find the correct citadel-tools repo path
python () {
import subprocess
git_owner = subprocess.check_output(['git', 'remote', 'get-url', 'origin']).strip().decode('utf-8').split('/')[0].split(':')[1]
d.setVar("GIT_REPO_OWNER", git_owner)
}
GIT_URI = "git://git.subgraph.com/${GIT_REPO_OWNER}/citadel-tools.git;protocol=https;branch=master"
# If Cargo.lock changes in citadel-tools, this needs to be updated.
# cargo bitbake does not support workspaces so as a workaround first
@ -24,78 +31,99 @@ SRC_URI += " \
crate://crates.io/acl-sys/1.2.2 \
crate://crates.io/addr2line/0.17.0 \
crate://crates.io/adler/1.0.2 \
crate://crates.io/aho-corasick/0.7.18 \
crate://crates.io/ansi_term/0.12.1 \
crate://crates.io/anstream/0.6.15 \
crate://crates.io/anstyle-parse/0.2.5 \
crate://crates.io/anstyle-query/1.1.1 \
crate://crates.io/anstyle-wincon/3.0.4 \
crate://crates.io/anstyle/1.0.8 \
crate://crates.io/anyhow/1.0.57 \
crate://crates.io/array-macro/1.0.5 \
crate://crates.io/async-broadcast/0.3.4 \
crate://crates.io/async-channel/1.6.1 \
crate://crates.io/async-executor/1.4.1 \
crate://crates.io/async-io/1.6.0 \
crate://crates.io/async-lock/2.5.0 \
crate://crates.io/async-task/4.2.0 \
crate://crates.io/async-broadcast/0.7.1 \
crate://crates.io/async-channel/2.3.1 \
crate://crates.io/async-executor/1.13.1 \
crate://crates.io/async-fs/2.1.2 \
crate://crates.io/async-io/2.3.4 \
crate://crates.io/async-lock/3.4.0 \
crate://crates.io/async-process/2.2.4 \
crate://crates.io/async-recursion/1.1.1 \
crate://crates.io/async-signal/0.2.10 \
crate://crates.io/async-task/4.7.1 \
crate://crates.io/async-trait/0.1.82 \
crate://crates.io/atk-sys/0.14.0 \
crate://crates.io/atk/0.14.0 \
crate://crates.io/atty/0.2.14 \
crate://crates.io/atomic-waker/1.1.2 \
crate://crates.io/autocfg/1.1.0 \
crate://crates.io/backtrace/0.3.65 \
crate://crates.io/bincode/1.3.3 \
crate://crates.io/bitflags/1.2.1 \
crate://crates.io/bitflags/2.6.0 \
crate://crates.io/block-buffer/0.10.4 \
crate://crates.io/block-buffer/0.9.0 \
crate://crates.io/block-cipher/0.7.1 \
crate://crates.io/blowfish/0.5.0 \
crate://crates.io/blocking/1.6.1 \
crate://crates.io/blowfish/0.7.0 \
crate://crates.io/byteorder/1.4.3 \
crate://crates.io/cache-padded/1.2.0 \
crate://crates.io/cairo-rs/0.14.9 \
crate://crates.io/cairo-sys-rs/0.14.9 \
crate://crates.io/cc/1.0.73 \
crate://crates.io/cfg-expr/0.8.1 \
crate://crates.io/cfg-if/0.1.10 \
crate://crates.io/cfg-if/1.0.0 \
crate://crates.io/cfg_aliases/0.2.1 \
crate://crates.io/chrono/0.4.19 \
crate://crates.io/clap/2.34.0 \
crate://crates.io/concurrent-queue/1.2.2 \
crate://crates.io/cipher/0.2.5 \
crate://crates.io/clap/4.5.17 \
crate://crates.io/clap_builder/4.5.17 \
crate://crates.io/clap_derive/4.5.13 \
crate://crates.io/clap_lex/0.7.2 \
crate://crates.io/colorchoice/1.0.2 \
crate://crates.io/concurrent-queue/2.5.0 \
crate://crates.io/cpufeatures/0.2.2 \
crate://crates.io/crc32fast/1.3.2 \
crate://crates.io/crossbeam-channel/0.3.9 \
crate://crates.io/crossbeam-utils/0.6.6 \
crate://crates.io/crypto-mac/0.8.0 \
crate://crates.io/crossbeam-utils/0.8.20 \
crate://crates.io/crypto-common/0.1.6 \
crate://crates.io/crypto-mac/0.10.1 \
crate://crates.io/cursive/0.11.0 \
crate://crates.io/dbus/0.6.5 \
crate://crates.io/dbus/0.8.4 \
crate://crates.io/derivative/2.2.0 \
crate://crates.io/digest/0.10.7 \
crate://crates.io/digest/0.9.0 \
crate://crates.io/easy-parallel/3.2.0 \
crate://crates.io/dtoa/0.4.8 \
crate://crates.io/ed25519/1.5.2 \
crate://crates.io/either/1.6.1 \
crate://crates.io/endi/1.1.0 \
crate://crates.io/enum-map-derive/0.4.6 \
crate://crates.io/enum-map-internals/0.1.2 \
crate://crates.io/enum-map/0.5.0 \
crate://crates.io/enumflags2/0.6.4 \
crate://crates.io/enumflags2_derive/0.6.4 \
crate://crates.io/enumflags2/0.7.10 \
crate://crates.io/enumflags2_derive/0.7.10 \
crate://crates.io/enumset/0.3.19 \
crate://crates.io/enumset_derive/0.3.2 \
crate://crates.io/event-listener/2.5.2 \
crate://crates.io/equivalent/1.0.1 \
crate://crates.io/errno/0.3.9 \
crate://crates.io/event-listener-strategy/0.5.2 \
crate://crates.io/event-listener/5.3.1 \
crate://crates.io/failure/0.1.8 \
crate://crates.io/failure_derive/0.1.8 \
crate://crates.io/fastrand/1.7.0 \
crate://crates.io/fastrand/2.1.1 \
crate://crates.io/field-offset/0.3.4 \
crate://crates.io/flate2/1.0.24 \
crate://crates.io/futures-channel/0.3.21 \
crate://crates.io/futures-core/0.3.21 \
crate://crates.io/futures-core/0.3.30 \
crate://crates.io/futures-executor/0.3.21 \
crate://crates.io/futures-io/0.3.21 \
crate://crates.io/futures-lite/1.12.0 \
crate://crates.io/futures-macro/0.3.21 \
crate://crates.io/futures-sink/0.3.21 \
crate://crates.io/futures-task/0.3.21 \
crate://crates.io/futures-util/0.3.21 \
crate://crates.io/futures-io/0.3.30 \
crate://crates.io/futures-lite/2.3.0 \
crate://crates.io/futures-macro/0.3.30 \
crate://crates.io/futures-sink/0.3.30 \
crate://crates.io/futures-task/0.3.30 \
crate://crates.io/futures-util/0.3.30 \
crate://crates.io/gdk-pixbuf-sys/0.14.0 \
crate://crates.io/gdk-pixbuf/0.14.0 \
crate://crates.io/gdk-sys/0.14.0 \
crate://crates.io/gdk/0.14.3 \
crate://crates.io/generic-array/0.14.5 \
crate://crates.io/getrandom/0.1.16 \
crate://crates.io/getrandom/0.2.6 \
crate://crates.io/gimli/0.26.1 \
crate://crates.io/gio-sys/0.14.0 \
@ -111,97 +139,101 @@ SRC_URI += " \
crate://crates.io/gtk-sys/0.14.0 \
crate://crates.io/gtk/0.14.3 \
crate://crates.io/gtk3-macros/0.14.0 \
crate://crates.io/hashbrown/0.14.5 \
crate://crates.io/heck/0.3.3 \
crate://crates.io/hermit-abi/0.1.19 \
crate://crates.io/heck/0.5.0 \
crate://crates.io/hermit-abi/0.4.0 \
crate://crates.io/hex/0.4.3 \
crate://crates.io/hmac/0.8.1 \
crate://crates.io/hmac/0.10.1 \
crate://crates.io/indexmap/2.5.0 \
crate://crates.io/inotify-sys/0.1.5 \
crate://crates.io/inotify/0.8.3 \
crate://crates.io/instant/0.1.12 \
crate://crates.io/is_terminal_polyfill/1.70.1 \
crate://crates.io/itertools/0.10.3 \
crate://crates.io/itertools/0.9.0 \
crate://crates.io/itoa/0.3.4 \
crate://crates.io/lazy_static/1.4.0 \
crate://crates.io/libc/0.2.126 \
crate://crates.io/libc/0.2.158 \
crate://crates.io/libdbus-sys/0.2.2 \
crate://crates.io/libsodium-sys/0.2.7 \
crate://crates.io/linux-raw-sys/0.4.14 \
crate://crates.io/log/0.4.17 \
crate://crates.io/md-5/0.9.1 \
crate://crates.io/memchr/2.5.0 \
crate://crates.io/memoffset/0.6.5 \
crate://crates.io/memoffset/0.9.1 \
crate://crates.io/miniz_oxide/0.5.1 \
crate://crates.io/nix/0.17.0 \
crate://crates.io/nix/0.21.2 \
crate://crates.io/nix/0.29.0 \
crate://crates.io/num-complex/0.2.4 \
crate://crates.io/num-integer/0.1.45 \
crate://crates.io/num-iter/0.1.43 \
crate://crates.io/num-rational/0.2.4 \
crate://crates.io/num-traits/0.1.43 \
crate://crates.io/num-traits/0.2.15 \
crate://crates.io/num/0.2.1 \
crate://crates.io/numtoa/0.1.0 \
crate://crates.io/object/0.28.4 \
crate://crates.io/once_cell/1.10.0 \
crate://crates.io/opaque-debug/0.2.3 \
crate://crates.io/once_cell/1.19.0 \
crate://crates.io/opaque-debug/0.3.0 \
crate://crates.io/ordered-stream/0.2.0 \
crate://crates.io/owning_ref/0.4.1 \
crate://crates.io/pango-sys/0.10.0 \
crate://crates.io/pango-sys/0.14.0 \
crate://crates.io/pango/0.14.8 \
crate://crates.io/pango/0.9.1 \
crate://crates.io/parking/2.0.0 \
crate://crates.io/parking/2.2.1 \
crate://crates.io/pest/2.1.3 \
crate://crates.io/pin-project-lite/0.2.9 \
crate://crates.io/pin-project-lite/0.2.14 \
crate://crates.io/pin-utils/0.1.0 \
crate://crates.io/piper/0.2.4 \
crate://crates.io/pkg-config/0.3.25 \
crate://crates.io/polling/2.2.0 \
crate://crates.io/polling/3.7.3 \
crate://crates.io/posix-acl/1.0.0 \
crate://crates.io/ppv-lite86/0.2.16 \
crate://crates.io/proc-macro-crate/0.1.5 \
crate://crates.io/proc-macro-crate/1.1.3 \
crate://crates.io/proc-macro-crate/3.2.0 \
crate://crates.io/proc-macro-error-attr/1.0.4 \
crate://crates.io/proc-macro-error/1.0.4 \
crate://crates.io/proc-macro2/0.4.30 \
crate://crates.io/proc-macro2/1.0.39 \
crate://crates.io/proc-macro2/1.0.86 \
crate://crates.io/procfs/0.12.0 \
crate://crates.io/pwhash/0.3.1 \
crate://crates.io/pwhash/1.0.0 \
crate://crates.io/quote/0.6.13 \
crate://crates.io/quote/1.0.18 \
crate://crates.io/rand/0.7.3 \
crate://crates.io/quote/1.0.37 \
crate://crates.io/rand/0.8.5 \
crate://crates.io/rand_chacha/0.2.2 \
crate://crates.io/rand_chacha/0.3.1 \
crate://crates.io/rand_core/0.5.1 \
crate://crates.io/rand_core/0.6.3 \
crate://crates.io/rand_hc/0.2.0 \
crate://crates.io/redox_syscall/0.2.13 \
crate://crates.io/redox_termios/0.1.2 \
crate://crates.io/regex-syntax/0.6.25 \
crate://crates.io/regex/1.5.5 \
crate://crates.io/remove_dir_all/0.5.3 \
crate://crates.io/rpassword/4.0.5 \
crate://crates.io/rpassword/7.3.1 \
crate://crates.io/rtoolbox/0.0.2 \
crate://crates.io/rustc-demangle/0.1.21 \
crate://crates.io/rustc_version/0.3.3 \
crate://crates.io/rustix/0.38.37 \
crate://crates.io/same-file/1.0.6 \
crate://crates.io/scoped-tls/1.0.0 \
crate://crates.io/semver-parser/0.10.2 \
crate://crates.io/semver/0.11.0 \
crate://crates.io/serde/1.0.137 \
crate://crates.io/serde_derive/1.0.137 \
crate://crates.io/serde_repr/0.1.8 \
crate://crates.io/serde/1.0.209 \
crate://crates.io/serde_derive/1.0.209 \
crate://crates.io/serde_json/1.0.1 \
crate://crates.io/serde_repr/0.1.19 \
crate://crates.io/serde_spanned/0.6.7 \
crate://crates.io/sha-1/0.9.8 \
crate://crates.io/sha1/0.6.1 \
crate://crates.io/sha1_smol/1.0.0 \
crate://crates.io/sha1/0.10.6 \
crate://crates.io/sha2/0.9.9 \
crate://crates.io/signal-hook-registry/1.4.0 \
crate://crates.io/signal-hook/0.1.17 \
crate://crates.io/signature/1.5.0 \
crate://crates.io/slab/0.4.6 \
crate://crates.io/slotmap/1.0.6 \
crate://crates.io/slab/0.4.9 \
crate://crates.io/smallvec/1.8.0 \
crate://crates.io/socket2/0.4.4 \
crate://crates.io/sodiumoxide/0.2.7 \
crate://crates.io/stable_deref_trait/1.2.0 \
crate://crates.io/static_assertions/1.1.0 \
crate://crates.io/strsim/0.8.0 \
crate://crates.io/strsim/0.11.1 \
crate://crates.io/strum/0.18.0 \
crate://crates.io/strum/0.21.0 \
crate://crates.io/strum_macros/0.18.0 \
@ -209,120 +241,169 @@ SRC_URI += " \
crate://crates.io/subtle/2.4.1 \
crate://crates.io/syn/0.15.44 \
crate://crates.io/syn/1.0.95 \
crate://crates.io/syn/2.0.77 \
crate://crates.io/synstructure/0.12.6 \
crate://crates.io/system-deps/1.3.2 \
crate://crates.io/system-deps/3.2.0 \
crate://crates.io/tempfile/3.3.0 \
crate://crates.io/termion/1.5.6 \
crate://crates.io/textwrap/0.11.0 \
crate://crates.io/thiserror-impl/1.0.31 \
crate://crates.io/thiserror/1.0.31 \
crate://crates.io/time/0.1.43 \
crate://crates.io/toml/0.4.10 \
crate://crates.io/toml/0.5.9 \
crate://crates.io/toml/0.8.19 \
crate://crates.io/toml_datetime/0.6.8 \
crate://crates.io/toml_edit/0.22.20 \
crate://crates.io/tracing-attributes/0.1.27 \
crate://crates.io/tracing-core/0.1.32 \
crate://crates.io/tracing/0.1.40 \
crate://crates.io/typenum/1.15.0 \
crate://crates.io/ucd-trie/0.1.3 \
crate://crates.io/uds_windows/1.1.0 \
crate://crates.io/unicode-ident/1.0.0 \
crate://crates.io/unicode-segmentation/1.9.0 \
crate://crates.io/unicode-width/0.1.9 \
crate://crates.io/unicode-xid/0.1.0 \
crate://crates.io/unicode-xid/0.2.3 \
crate://crates.io/vec_map/0.8.2 \
crate://crates.io/utf8parse/0.2.2 \
crate://crates.io/version-compare/0.0.10 \
crate://crates.io/version-compare/0.0.11 \
crate://crates.io/version_check/0.9.4 \
crate://crates.io/void/1.0.2 \
crate://crates.io/waker-fn/1.1.0 \
crate://crates.io/walkdir/2.3.2 \
crate://crates.io/wasi/0.10.2+wasi-snapshot-preview1 \
crate://crates.io/wasi/0.9.0+wasi-snapshot-preview1 \
crate://crates.io/wepoll-ffi/0.1.2 \
crate://crates.io/winapi-i686-pc-windows-gnu/0.4.0 \
crate://crates.io/winapi-util/0.1.5 \
crate://crates.io/winapi-x86_64-pc-windows-gnu/0.4.0 \
crate://crates.io/winapi/0.3.9 \
crate://crates.io/windows-sys/0.48.0 \
crate://crates.io/windows-sys/0.52.0 \
crate://crates.io/windows-sys/0.59.0 \
crate://crates.io/windows-targets/0.48.5 \
crate://crates.io/windows-targets/0.52.6 \
crate://crates.io/windows_aarch64_gnullvm/0.48.5 \
crate://crates.io/windows_aarch64_gnullvm/0.52.6 \
crate://crates.io/windows_aarch64_msvc/0.48.5 \
crate://crates.io/windows_aarch64_msvc/0.52.6 \
crate://crates.io/windows_i686_gnu/0.48.5 \
crate://crates.io/windows_i686_gnu/0.52.6 \
crate://crates.io/windows_i686_gnullvm/0.52.6 \
crate://crates.io/windows_i686_msvc/0.48.5 \
crate://crates.io/windows_i686_msvc/0.52.6 \
crate://crates.io/windows_x86_64_gnu/0.48.5 \
crate://crates.io/windows_x86_64_gnu/0.52.6 \
crate://crates.io/windows_x86_64_gnullvm/0.48.5 \
crate://crates.io/windows_x86_64_gnullvm/0.52.6 \
crate://crates.io/windows_x86_64_msvc/0.48.5 \
crate://crates.io/windows_x86_64_msvc/0.52.6 \
crate://crates.io/winnow/0.6.18 \
crate://crates.io/xdg-home/1.3.0 \
crate://crates.io/xi-unicode/0.1.0 \
crate://crates.io/zbus/2.0.0-beta.5 \
crate://crates.io/zbus_macros/2.0.0-beta.5 \
crate://crates.io/zvariant/2.10.0 \
crate://crates.io/zvariant_derive/2.10.0 \
crate://crates.io/zbus/4.4.0 \
crate://crates.io/zbus_macros/4.4.0 \
crate://crates.io/zbus_names/3.0.0 \
crate://crates.io/zvariant/4.2.0 \
crate://crates.io/zvariant_derive/4.2.0 \
crate://crates.io/zvariant_utils/2.1.0 \
"
SRC_URI[acl-sys-1.2.2.sha256sum] = "bbc079f9bdd3124fd18df23c67f7e0f79d24751ae151dcffd095fcade07a3eb2"
SRC_URI[addr2line-0.17.0.sha256sum] = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
SRC_URI[adler-1.0.2.sha256sum] = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
SRC_URI[aho-corasick-0.7.18.sha256sum] = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
SRC_URI[ansi_term-0.12.1.sha256sum] = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
SRC_URI[anstream-0.6.15.sha256sum] = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526"
SRC_URI[anstyle-parse-0.2.5.sha256sum] = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb"
SRC_URI[anstyle-query-1.1.1.sha256sum] = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a"
SRC_URI[anstyle-wincon-3.0.4.sha256sum] = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8"
SRC_URI[anstyle-1.0.8.sha256sum] = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1"
SRC_URI[anyhow-1.0.57.sha256sum] = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc"
SRC_URI[array-macro-1.0.5.sha256sum] = "06e97b4e522f9e55523001238ac59d13a8603af57f69980de5d8de4bbbe8ada6"
SRC_URI[async-broadcast-0.3.4.sha256sum] = "90622698a1218e0b2fb846c97b5f19a0831f6baddee73d9454156365ccfa473b"
SRC_URI[async-channel-1.6.1.sha256sum] = "2114d64672151c0c5eaa5e131ec84a74f06e1e559830dabba01ca30605d66319"
SRC_URI[async-executor-1.4.1.sha256sum] = "871f9bb5e0a22eeb7e8cf16641feb87c9dc67032ccf8ff49e772eb9941d3a965"
SRC_URI[async-io-1.6.0.sha256sum] = "a811e6a479f2439f0c04038796b5cfb3d2ad56c230e0f2d3f7b04d68cfee607b"
SRC_URI[async-lock-2.5.0.sha256sum] = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6"
SRC_URI[async-task-4.2.0.sha256sum] = "30696a84d817107fc028e049980e09d5e140e8da8f1caeb17e8e950658a3cea9"
SRC_URI[async-broadcast-0.7.1.sha256sum] = "20cd0e2e25ea8e5f7e9df04578dc6cf5c83577fd09b1a46aaf5c85e1c33f2a7e"
SRC_URI[async-channel-2.3.1.sha256sum] = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
SRC_URI[async-executor-1.13.1.sha256sum] = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec"
SRC_URI[async-fs-2.1.2.sha256sum] = "ebcd09b382f40fcd159c2d695175b2ae620ffa5f3bd6f664131efff4e8b9e04a"
SRC_URI[async-io-2.3.4.sha256sum] = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8"
SRC_URI[async-lock-3.4.0.sha256sum] = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18"
SRC_URI[async-process-2.2.4.sha256sum] = "a8a07789659a4d385b79b18b9127fc27e1a59e1e89117c78c5ea3b806f016374"
SRC_URI[async-recursion-1.1.1.sha256sum] = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11"
SRC_URI[async-signal-0.2.10.sha256sum] = "637e00349800c0bdf8bfc21ebbc0b6524abea702b0da4168ac00d070d0c0b9f3"
SRC_URI[async-task-4.7.1.sha256sum] = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de"
SRC_URI[async-trait-0.1.82.sha256sum] = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1"
SRC_URI[atk-sys-0.14.0.sha256sum] = "badcf670157c84bb8b1cf6b5f70b650fed78da2033c9eed84c4e49b11cbe83ea"
SRC_URI[atk-0.14.0.sha256sum] = "a83b21d2aa75e464db56225e1bda2dd5993311ba1095acaa8fa03d1ae67026ba"
SRC_URI[atty-0.2.14.sha256sum] = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
SRC_URI[atomic-waker-1.1.2.sha256sum] = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
SRC_URI[autocfg-1.1.0.sha256sum] = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
SRC_URI[backtrace-0.3.65.sha256sum] = "11a17d453482a265fd5f8479f2a3f405566e6ca627837aaddb85af8b1ab8ef61"
SRC_URI[bincode-1.3.3.sha256sum] = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
SRC_URI[bitflags-1.2.1.sha256sum] = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
SRC_URI[bitflags-2.6.0.sha256sum] = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
SRC_URI[block-buffer-0.10.4.sha256sum] = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
SRC_URI[block-buffer-0.9.0.sha256sum] = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
SRC_URI[block-cipher-0.7.1.sha256sum] = "fa136449e765dc7faa244561ccae839c394048667929af599b5d931ebe7b7f10"
SRC_URI[blowfish-0.5.0.sha256sum] = "91d01392750dd899a2528948d6b856afe2df508d627fc7c339868c0bd0141b4b"
SRC_URI[blocking-1.6.1.sha256sum] = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea"
SRC_URI[blowfish-0.7.0.sha256sum] = "32fa6a061124e37baba002e496d203e23ba3d7b73750be82dbfbc92913048a5b"
SRC_URI[byteorder-1.4.3.sha256sum] = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
SRC_URI[cache-padded-1.2.0.sha256sum] = "c1db59621ec70f09c5e9b597b220c7a2b43611f4710dc03ceb8748637775692c"
SRC_URI[cairo-rs-0.14.9.sha256sum] = "33b5725979db0c586d98abad2193cdb612dd40ef95cd26bd99851bf93b3cb482"
SRC_URI[cairo-sys-rs-0.14.9.sha256sum] = "b448b876970834fda82ba3aeaccadbd760206b75388fc5c1b02f1e343b697570"
SRC_URI[cc-1.0.73.sha256sum] = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
SRC_URI[cfg-expr-0.8.1.sha256sum] = "b412e83326147c2bb881f8b40edfbf9905b9b8abaebd0e47ca190ba62fda8f0e"
SRC_URI[cfg-if-0.1.10.sha256sum] = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
SRC_URI[cfg-if-1.0.0.sha256sum] = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
SRC_URI[cfg_aliases-0.2.1.sha256sum] = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
SRC_URI[chrono-0.4.19.sha256sum] = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
SRC_URI[clap-2.34.0.sha256sum] = "a0610544180c38b88101fecf2dd634b174a62eef6946f84dfc6a7127512b381c"
SRC_URI[concurrent-queue-1.2.2.sha256sum] = "30ed07550be01594c6026cff2a1d7fe9c8f683caa798e12b68694ac9e88286a3"
SRC_URI[cipher-0.2.5.sha256sum] = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801"
SRC_URI[clap-4.5.17.sha256sum] = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac"
SRC_URI[clap_builder-4.5.17.sha256sum] = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73"
SRC_URI[clap_derive-4.5.13.sha256sum] = "501d359d5f3dcaf6ecdeee48833ae73ec6e42723a1e52419c79abf9507eec0a0"
SRC_URI[clap_lex-0.7.2.sha256sum] = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97"
SRC_URI[colorchoice-1.0.2.sha256sum] = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0"
SRC_URI[concurrent-queue-2.5.0.sha256sum] = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
SRC_URI[cpufeatures-0.2.2.sha256sum] = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
SRC_URI[crc32fast-1.3.2.sha256sum] = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
SRC_URI[crossbeam-channel-0.3.9.sha256sum] = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa"
SRC_URI[crossbeam-utils-0.6.6.sha256sum] = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
SRC_URI[crypto-mac-0.8.0.sha256sum] = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
SRC_URI[crossbeam-utils-0.8.20.sha256sum] = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80"
SRC_URI[crypto-common-0.1.6.sha256sum] = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
SRC_URI[crypto-mac-0.10.1.sha256sum] = "bff07008ec701e8028e2ceb8f83f0e4274ee62bd2dbdc4fefff2e9a91824081a"
SRC_URI[cursive-0.11.0.sha256sum] = "e50c8961fb6728e44ea668e4133ca6f5bea681cb5e93aaee70a8f452412bbce5"
SRC_URI[dbus-0.6.5.sha256sum] = "48b5f0f36f1eebe901b0e6bee369a77ed3396334bf3f09abd46454a576f71819"
SRC_URI[dbus-0.8.4.sha256sum] = "5cd9e78c210146a1860f897db03412fd5091fd73100778e43ee255cca252cf32"
SRC_URI[derivative-2.2.0.sha256sum] = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
SRC_URI[digest-0.10.7.sha256sum] = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
SRC_URI[digest-0.9.0.sha256sum] = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
SRC_URI[easy-parallel-3.2.0.sha256sum] = "6907e25393cdcc1f4f3f513d9aac1e840eb1cc341a0fccb01171f7d14d10b946"
SRC_URI[dtoa-0.4.8.sha256sum] = "56899898ce76aaf4a0f24d914c97ea6ed976d42fec6ad33fcbb0a1103e07b2b0"
SRC_URI[ed25519-1.5.2.sha256sum] = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369"
SRC_URI[either-1.6.1.sha256sum] = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
SRC_URI[endi-1.1.0.sha256sum] = "a3d8a32ae18130a3c84dd492d4215c3d913c3b07c6b63c2eb3eb7ff1101ab7bf"
SRC_URI[enum-map-derive-0.4.6.sha256sum] = "e5c450cf304c9e18d45db562025a14fb1ca0f5c769b6f609309f81d4c31de455"
SRC_URI[enum-map-internals-0.1.2.sha256sum] = "38b0bacf3ea7aba18ce84032efc3f0fa29f5c814048b742ab3e64d07d83ac3e8"
SRC_URI[enum-map-0.5.0.sha256sum] = "ccd9b2d5e0eb5c2ff851791e2af90ab4531b1168cfc239d1c0bf467e60ba3c89"
SRC_URI[enumflags2-0.6.4.sha256sum] = "83c8d82922337cd23a15f88b70d8e4ef5f11da38dd7cdb55e84dd5de99695da0"
SRC_URI[enumflags2_derive-0.6.4.sha256sum] = "946ee94e3dbf58fdd324f9ce245c7b238d46a66f00e86a020b71996349e46cce"
SRC_URI[enumflags2-0.7.10.sha256sum] = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d"
SRC_URI[enumflags2_derive-0.7.10.sha256sum] = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8"
SRC_URI[enumset-0.3.19.sha256sum] = "43bd5effaae6a671efa2032056110916a501bd24128cfb6f44e5a339b5cdb152"
SRC_URI[enumset_derive-0.3.2.sha256sum] = "f73e5c77cf68e532b0e6fdd22c7f8f4d09f6f663692aecca0b3d8ec2e11af723"
SRC_URI[event-listener-2.5.2.sha256sum] = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71"
SRC_URI[equivalent-1.0.1.sha256sum] = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
SRC_URI[errno-0.3.9.sha256sum] = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba"
SRC_URI[event-listener-strategy-0.5.2.sha256sum] = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1"
SRC_URI[event-listener-5.3.1.sha256sum] = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba"
SRC_URI[failure-0.1.8.sha256sum] = "d32e9bd16cc02eae7db7ef620b392808b89f6a5e16bb3497d159c6b92a0f4f86"
SRC_URI[failure_derive-0.1.8.sha256sum] = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
SRC_URI[fastrand-1.7.0.sha256sum] = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf"
SRC_URI[fastrand-2.1.1.sha256sum] = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6"
SRC_URI[field-offset-0.3.4.sha256sum] = "1e1c54951450cbd39f3dbcf1005ac413b49487dabf18a720ad2383eccfeffb92"
SRC_URI[flate2-1.0.24.sha256sum] = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
SRC_URI[futures-channel-0.3.21.sha256sum] = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
SRC_URI[futures-core-0.3.21.sha256sum] = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
SRC_URI[futures-core-0.3.30.sha256sum] = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
SRC_URI[futures-executor-0.3.21.sha256sum] = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
SRC_URI[futures-io-0.3.21.sha256sum] = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
SRC_URI[futures-lite-1.12.0.sha256sum] = "7694489acd39452c77daa48516b894c153f192c3578d5a839b62c58099fcbf48"
SRC_URI[futures-macro-0.3.21.sha256sum] = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
SRC_URI[futures-sink-0.3.21.sha256sum] = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
SRC_URI[futures-task-0.3.21.sha256sum] = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
SRC_URI[futures-util-0.3.21.sha256sum] = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
SRC_URI[futures-io-0.3.30.sha256sum] = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
SRC_URI[futures-lite-2.3.0.sha256sum] = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5"
SRC_URI[futures-macro-0.3.30.sha256sum] = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
SRC_URI[futures-sink-0.3.30.sha256sum] = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
SRC_URI[futures-task-0.3.30.sha256sum] = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
SRC_URI[futures-util-0.3.30.sha256sum] = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
SRC_URI[gdk-pixbuf-sys-0.14.0.sha256sum] = "f097c0704201fbc8f69c1762dc58c6947c8bb188b8ed0bc7e65259f1894fe590"
SRC_URI[gdk-pixbuf-0.14.0.sha256sum] = "534192cb8f01daeb8fab2c8d4baa8f9aae5b7a39130525779f5c2608e235b10f"
SRC_URI[gdk-sys-0.14.0.sha256sum] = "0e091b3d3d6696949ac3b3fb3c62090e5bfd7bd6850bef5c3c5ea701de1b1f1e"
SRC_URI[gdk-0.14.3.sha256sum] = "b9d749dcfc00d8de0d7c3a289e04a04293eb5ba3d8a4e64d64911d481fa9933b"
SRC_URI[generic-array-0.14.5.sha256sum] = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
SRC_URI[getrandom-0.1.16.sha256sum] = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
SRC_URI[getrandom-0.2.6.sha256sum] = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
SRC_URI[gimli-0.26.1.sha256sum] = "78cc372d058dcf6d5ecd98510e7fbc9e5aec4d21de70f65fea8fecebcd881bd4"
SRC_URI[gio-sys-0.14.0.sha256sum] = "c0a41df66e57fcc287c4bcf74fc26b884f31901ea9792ec75607289b456f48fa"
@ -338,97 +419,101 @@ SRC_URI[gobject-sys-0.14.0.sha256sum] = "aa92cae29759dae34ab5921d73fff5ad54b3d79
SRC_URI[gtk-sys-0.14.0.sha256sum] = "8c14c8d3da0545785a7c5a120345b3abb534010fb8ae0f2ef3f47c027fba303e"
SRC_URI[gtk-0.14.3.sha256sum] = "2eb51122dd3317e9327ec1e4faa151d1fa0d95664cd8fb8dcfacf4d4d29ac70c"
SRC_URI[gtk3-macros-0.14.0.sha256sum] = "21de1da96dc117443fb03c2e270b2d34b7de98d0a79a19bbb689476173745b79"
SRC_URI[hashbrown-0.14.5.sha256sum] = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
SRC_URI[heck-0.3.3.sha256sum] = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
SRC_URI[hermit-abi-0.1.19.sha256sum] = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
SRC_URI[heck-0.5.0.sha256sum] = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
SRC_URI[hermit-abi-0.4.0.sha256sum] = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc"
SRC_URI[hex-0.4.3.sha256sum] = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
SRC_URI[hmac-0.8.1.sha256sum] = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840"
SRC_URI[hmac-0.10.1.sha256sum] = "c1441c6b1e930e2817404b5046f1f989899143a12bf92de603b69f4e0aee1e15"
SRC_URI[indexmap-2.5.0.sha256sum] = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5"
SRC_URI[inotify-sys-0.1.5.sha256sum] = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb"
SRC_URI[inotify-0.8.3.sha256sum] = "46dd0a94b393c730779ccfd2a872b67b1eb67be3fc33082e733bdb38b5fde4d4"
SRC_URI[instant-0.1.12.sha256sum] = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
SRC_URI[is_terminal_polyfill-1.70.1.sha256sum] = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
SRC_URI[itertools-0.10.3.sha256sum] = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
SRC_URI[itertools-0.9.0.sha256sum] = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
SRC_URI[itoa-0.3.4.sha256sum] = "8324a32baf01e2ae060e9de58ed0bc2320c9a2833491ee36cd3b4c414de4db8c"
SRC_URI[lazy_static-1.4.0.sha256sum] = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
SRC_URI[libc-0.2.126.sha256sum] = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
SRC_URI[libc-0.2.158.sha256sum] = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
SRC_URI[libdbus-sys-0.2.2.sha256sum] = "c185b5b7ad900923ef3a8ff594083d4d9b5aea80bb4f32b8342363138c0d456b"
SRC_URI[libsodium-sys-0.2.7.sha256sum] = "6b779387cd56adfbc02ea4a668e704f729be8d6a6abd2c27ca5ee537849a92fd"
SRC_URI[linux-raw-sys-0.4.14.sha256sum] = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89"
SRC_URI[log-0.4.17.sha256sum] = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
SRC_URI[md-5-0.9.1.sha256sum] = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
SRC_URI[memchr-2.5.0.sha256sum] = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
SRC_URI[memoffset-0.6.5.sha256sum] = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
SRC_URI[memoffset-0.9.1.sha256sum] = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
SRC_URI[miniz_oxide-0.5.1.sha256sum] = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082"
SRC_URI[nix-0.17.0.sha256sum] = "50e4785f2c3b7589a0d0c1dd60285e1188adac4006e8abd6dd578e1567027363"
SRC_URI[nix-0.21.2.sha256sum] = "77d9f3521ea8e0641a153b3cddaf008dcbf26acd4ed739a2517295e0760d12c7"
SRC_URI[nix-0.29.0.sha256sum] = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
SRC_URI[num-complex-0.2.4.sha256sum] = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95"
SRC_URI[num-integer-0.1.45.sha256sum] = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
SRC_URI[num-iter-0.1.43.sha256sum] = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
SRC_URI[num-rational-0.2.4.sha256sum] = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
SRC_URI[num-traits-0.1.43.sha256sum] = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31"
SRC_URI[num-traits-0.2.15.sha256sum] = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
SRC_URI[num-0.2.1.sha256sum] = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
SRC_URI[numtoa-0.1.0.sha256sum] = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
SRC_URI[object-0.28.4.sha256sum] = "e42c982f2d955fac81dd7e1d0e1426a7d702acd9c98d19ab01083a6a0328c424"
SRC_URI[once_cell-1.10.0.sha256sum] = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
SRC_URI[opaque-debug-0.2.3.sha256sum] = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
SRC_URI[once_cell-1.19.0.sha256sum] = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
SRC_URI[opaque-debug-0.3.0.sha256sum] = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
SRC_URI[ordered-stream-0.2.0.sha256sum] = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50"
SRC_URI[owning_ref-0.4.1.sha256sum] = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
SRC_URI[pango-sys-0.10.0.sha256sum] = "24d2650c8b62d116c020abd0cea26a4ed96526afda89b1c4ea567131fdefc890"
SRC_URI[pango-sys-0.14.0.sha256sum] = "2367099ca5e761546ba1d501955079f097caa186bb53ce0f718dca99ac1942fe"
SRC_URI[pango-0.14.8.sha256sum] = "546fd59801e5ca735af82839007edd226fe7d3bb06433ec48072be4439c28581"
SRC_URI[pango-0.9.1.sha256sum] = "9937068580bebd8ced19975938573803273ccbcbd598c58d4906efd4ac87c438"
SRC_URI[parking-2.0.0.sha256sum] = "427c3892f9e783d91cc128285287e70a59e206ca452770ece88a76f7a3eddd72"
SRC_URI[parking-2.2.1.sha256sum] = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
SRC_URI[pest-2.1.3.sha256sum] = "10f4872ae94d7b90ae48754df22fd42ad52ce740b8f370b03da4835417403e53"
SRC_URI[pin-project-lite-0.2.9.sha256sum] = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116"
SRC_URI[pin-project-lite-0.2.14.sha256sum] = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02"
SRC_URI[pin-utils-0.1.0.sha256sum] = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
SRC_URI[piper-0.2.4.sha256sum] = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066"
SRC_URI[pkg-config-0.3.25.sha256sum] = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae"
SRC_URI[polling-2.2.0.sha256sum] = "685404d509889fade3e86fe3a5803bca2ec09b0c0778d5ada6ec8bf7a8de5259"
SRC_URI[polling-3.7.3.sha256sum] = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511"
SRC_URI[posix-acl-1.0.0.sha256sum] = "2ea5dae99e4365fa738533b43f4c649c0450ba7fbb81a984a4fba6a42ce91812"
SRC_URI[ppv-lite86-0.2.16.sha256sum] = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
SRC_URI[proc-macro-crate-0.1.5.sha256sum] = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
SRC_URI[proc-macro-crate-1.1.3.sha256sum] = "e17d47ce914bf4de440332250b0edd23ce48c005f59fab39d3335866b114f11a"
SRC_URI[proc-macro-crate-3.2.0.sha256sum] = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b"
SRC_URI[proc-macro-error-attr-1.0.4.sha256sum] = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
SRC_URI[proc-macro-error-1.0.4.sha256sum] = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
SRC_URI[proc-macro2-0.4.30.sha256sum] = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
SRC_URI[proc-macro2-1.0.39.sha256sum] = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
SRC_URI[proc-macro2-1.0.86.sha256sum] = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
SRC_URI[procfs-0.12.0.sha256sum] = "0941606b9934e2d98a3677759a971756eb821f75764d0e0d26946d08e74d9104"
SRC_URI[pwhash-0.3.1.sha256sum] = "1068eebd5d8aa4bbd6cbba05ff2647ad32f8ec86a3b73417b95522383c4bd18f"
SRC_URI[pwhash-1.0.0.sha256sum] = "419a3ad8fa9f9d445e69d9b185a24878ae6e6f55c96e4512f4a0e28cd3bc5c56"
SRC_URI[quote-0.6.13.sha256sum] = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
SRC_URI[quote-1.0.18.sha256sum] = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
SRC_URI[rand-0.7.3.sha256sum] = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
SRC_URI[quote-1.0.37.sha256sum] = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
SRC_URI[rand-0.8.5.sha256sum] = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
SRC_URI[rand_chacha-0.2.2.sha256sum] = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
SRC_URI[rand_chacha-0.3.1.sha256sum] = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
SRC_URI[rand_core-0.5.1.sha256sum] = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
SRC_URI[rand_core-0.6.3.sha256sum] = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
SRC_URI[rand_hc-0.2.0.sha256sum] = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
SRC_URI[redox_syscall-0.2.13.sha256sum] = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
SRC_URI[redox_termios-0.1.2.sha256sum] = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f"
SRC_URI[regex-syntax-0.6.25.sha256sum] = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
SRC_URI[regex-1.5.5.sha256sum] = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
SRC_URI[remove_dir_all-0.5.3.sha256sum] = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
SRC_URI[rpassword-4.0.5.sha256sum] = "99371657d3c8e4d816fb6221db98fa408242b0b53bac08f8676a41f8554fe99f"
SRC_URI[rpassword-7.3.1.sha256sum] = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f"
SRC_URI[rtoolbox-0.0.2.sha256sum] = "c247d24e63230cdb56463ae328478bd5eac8b8faa8c69461a77e8e323afac90e"
SRC_URI[rustc-demangle-0.1.21.sha256sum] = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342"
SRC_URI[rustc_version-0.3.3.sha256sum] = "f0dfe2087c51c460008730de8b57e6a320782fbfb312e1f4d520e6c6fae155ee"
SRC_URI[rustix-0.38.37.sha256sum] = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811"
SRC_URI[same-file-1.0.6.sha256sum] = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
SRC_URI[scoped-tls-1.0.0.sha256sum] = "ea6a9290e3c9cf0f18145ef7ffa62d68ee0bf5fcd651017e586dc7fd5da448c2"
SRC_URI[semver-parser-0.10.2.sha256sum] = "00b0bef5b7f9e0df16536d3961cfb6e84331c065b4066afb39768d0e319411f7"
SRC_URI[semver-0.11.0.sha256sum] = "f301af10236f6df4160f7c3f04eec6dbc70ace82d23326abad5edee88801c6b6"
SRC_URI[serde-1.0.137.sha256sum] = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
SRC_URI[serde_derive-1.0.137.sha256sum] = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
SRC_URI[serde_repr-0.1.8.sha256sum] = "a2ad84e47328a31223de7fed7a4f5087f2d6ddfe586cf3ca25b7a165bc0a5aed"
SRC_URI[serde-1.0.209.sha256sum] = "99fce0ffe7310761ca6bf9faf5115afbc19688edd00171d81b1bb1b116c63e09"
SRC_URI[serde_derive-1.0.209.sha256sum] = "a5831b979fd7b5439637af1752d535ff49f4860c0f341d1baeb6faf0f4242170"
SRC_URI[serde_json-1.0.1.sha256sum] = "1c62115693d0a9ed8c32d1c760f0fdbe7d4b05cb13c135b9b54137ac0d59fccb"
SRC_URI[serde_repr-0.1.19.sha256sum] = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9"
SRC_URI[serde_spanned-0.6.7.sha256sum] = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d"
SRC_URI[sha-1-0.9.8.sha256sum] = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6"
SRC_URI[sha1-0.6.1.sha256sum] = "c1da05c97445caa12d05e848c4a4fcbbea29e748ac28f7e80e9b010392063770"
SRC_URI[sha1_smol-1.0.0.sha256sum] = "ae1a47186c03a32177042e55dbc5fd5aee900b8e0069a8d70fba96a9375cd012"
SRC_URI[sha1-0.10.6.sha256sum] = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
SRC_URI[sha2-0.9.9.sha256sum] = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
SRC_URI[signal-hook-registry-1.4.0.sha256sum] = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
SRC_URI[signal-hook-0.1.17.sha256sum] = "7e31d442c16f047a671b5a71e2161d6e68814012b7f5379d269ebd915fac2729"
SRC_URI[signature-1.5.0.sha256sum] = "f054c6c1a6e95179d6f23ed974060dcefb2d9388bb7256900badad682c499de4"
SRC_URI[slab-0.4.6.sha256sum] = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
SRC_URI[slotmap-1.0.6.sha256sum] = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342"
SRC_URI[slab-0.4.9.sha256sum] = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
SRC_URI[smallvec-1.8.0.sha256sum] = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
SRC_URI[socket2-0.4.4.sha256sum] = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
SRC_URI[sodiumoxide-0.2.7.sha256sum] = "e26be3acb6c2d9a7aac28482586a7856436af4cfe7100031d219de2d2ecb0028"
SRC_URI[stable_deref_trait-1.2.0.sha256sum] = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
SRC_URI[static_assertions-1.1.0.sha256sum] = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
SRC_URI[strsim-0.8.0.sha256sum] = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
SRC_URI[strsim-0.11.1.sha256sum] = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
SRC_URI[strum-0.18.0.sha256sum] = "57bd81eb48f4c437cadc685403cad539345bf703d78e63707418431cecd4522b"
SRC_URI[strum-0.21.0.sha256sum] = "aaf86bbcfd1fa9670b7a129f64fc0c9fcbbfe4f1bc4210e9e98fe71ffc12cde2"
SRC_URI[strum_macros-0.18.0.sha256sum] = "87c85aa3f8ea653bfd3ddf25f7ee357ee4d204731f6aa9ad04002306f6e2774c"
@ -436,43 +521,71 @@ SRC_URI[strum_macros-0.21.1.sha256sum] = "d06aaeeee809dbc59eb4556183dd927df67db1
SRC_URI[subtle-2.4.1.sha256sum] = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
SRC_URI[syn-0.15.44.sha256sum] = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
SRC_URI[syn-1.0.95.sha256sum] = "fbaf6116ab8924f39d52792136fb74fd60a80194cf1b1c6ffa6453eef1c3f942"
SRC_URI[syn-2.0.77.sha256sum] = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed"
SRC_URI[synstructure-0.12.6.sha256sum] = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
SRC_URI[system-deps-1.3.2.sha256sum] = "0f3ecc17269a19353b3558b313bba738b25d82993e30d62a18406a24aba4649b"
SRC_URI[system-deps-3.2.0.sha256sum] = "480c269f870722b3b08d2f13053ce0c2ab722839f472863c3e2d61ff3a1c2fa6"
SRC_URI[tempfile-3.3.0.sha256sum] = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
SRC_URI[termion-1.5.6.sha256sum] = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e"
SRC_URI[textwrap-0.11.0.sha256sum] = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
SRC_URI[thiserror-impl-1.0.31.sha256sum] = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a"
SRC_URI[thiserror-1.0.31.sha256sum] = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a"
SRC_URI[time-0.1.43.sha256sum] = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438"
SRC_URI[toml-0.4.10.sha256sum] = "758664fc71a3a69038656bee8b6be6477d2a6c315a6b81f7081f591bffa4111f"
SRC_URI[toml-0.5.9.sha256sum] = "8d82e1a7758622a465f8cee077614c73484dac5b836c02ff6a40d5d1010324d7"
SRC_URI[toml-0.8.19.sha256sum] = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
SRC_URI[toml_datetime-0.6.8.sha256sum] = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
SRC_URI[toml_edit-0.22.20.sha256sum] = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
SRC_URI[tracing-attributes-0.1.27.sha256sum] = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
SRC_URI[tracing-core-0.1.32.sha256sum] = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
SRC_URI[tracing-0.1.40.sha256sum] = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
SRC_URI[typenum-1.15.0.sha256sum] = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
SRC_URI[ucd-trie-0.1.3.sha256sum] = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
SRC_URI[uds_windows-1.1.0.sha256sum] = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9"
SRC_URI[unicode-ident-1.0.0.sha256sum] = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
SRC_URI[unicode-segmentation-1.9.0.sha256sum] = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
SRC_URI[unicode-width-0.1.9.sha256sum] = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
SRC_URI[unicode-xid-0.1.0.sha256sum] = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
SRC_URI[unicode-xid-0.2.3.sha256sum] = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04"
SRC_URI[vec_map-0.8.2.sha256sum] = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
SRC_URI[utf8parse-0.2.2.sha256sum] = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
SRC_URI[version-compare-0.0.10.sha256sum] = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1"
SRC_URI[version-compare-0.0.11.sha256sum] = "1c18c859eead79d8b95d09e4678566e8d70105c4e7b251f707a03df32442661b"
SRC_URI[version_check-0.9.4.sha256sum] = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
SRC_URI[void-1.0.2.sha256sum] = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
SRC_URI[waker-fn-1.1.0.sha256sum] = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca"
SRC_URI[walkdir-2.3.2.sha256sum] = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
SRC_URI[wasi-0.10.2+wasi-snapshot-preview1.sha256sum] = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
SRC_URI[wasi-0.9.0+wasi-snapshot-preview1.sha256sum] = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
SRC_URI[wepoll-ffi-0.1.2.sha256sum] = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb"
SRC_URI[winapi-i686-pc-windows-gnu-0.4.0.sha256sum] = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
SRC_URI[winapi-util-0.1.5.sha256sum] = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
SRC_URI[winapi-x86_64-pc-windows-gnu-0.4.0.sha256sum] = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
SRC_URI[winapi-0.3.9.sha256sum] = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
SRC_URI[windows-sys-0.48.0.sha256sum] = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
SRC_URI[windows-sys-0.52.0.sha256sum] = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
SRC_URI[windows-sys-0.59.0.sha256sum] = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
SRC_URI[windows-targets-0.48.5.sha256sum] = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
SRC_URI[windows-targets-0.52.6.sha256sum] = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
SRC_URI[windows_aarch64_gnullvm-0.48.5.sha256sum] = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
SRC_URI[windows_aarch64_gnullvm-0.52.6.sha256sum] = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
SRC_URI[windows_aarch64_msvc-0.48.5.sha256sum] = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
SRC_URI[windows_aarch64_msvc-0.52.6.sha256sum] = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
SRC_URI[windows_i686_gnu-0.48.5.sha256sum] = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
SRC_URI[windows_i686_gnu-0.52.6.sha256sum] = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
SRC_URI[windows_i686_gnullvm-0.52.6.sha256sum] = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
SRC_URI[windows_i686_msvc-0.48.5.sha256sum] = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
SRC_URI[windows_i686_msvc-0.52.6.sha256sum] = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
SRC_URI[windows_x86_64_gnu-0.48.5.sha256sum] = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
SRC_URI[windows_x86_64_gnu-0.52.6.sha256sum] = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
SRC_URI[windows_x86_64_gnullvm-0.48.5.sha256sum] = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
SRC_URI[windows_x86_64_gnullvm-0.52.6.sha256sum] = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
SRC_URI[windows_x86_64_msvc-0.48.5.sha256sum] = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
SRC_URI[windows_x86_64_msvc-0.52.6.sha256sum] = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
SRC_URI[winnow-0.6.18.sha256sum] = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f"
SRC_URI[xdg-home-1.3.0.sha256sum] = "ec1cdab258fb55c0da61328dc52c8764709b249011b2cad0454c72f0bf10a1f6"
SRC_URI[xi-unicode-0.1.0.sha256sum] = "12ea8eda4b1eb72f02d148402e23832d56a33f55d8c1b2d5bcdde91d79d47cb1"
SRC_URI[zbus-2.0.0-beta.5.sha256sum] = "d45f4720326304c291f96f66b6c1131f16964bba6bffe216ac85de2e48321a10"
SRC_URI[zbus_macros-2.0.0-beta.5.sha256sum] = "cf0fa91321143695013cb3fa62a6395dbe14eafd97ab58c2ba73f61d5035b1d9"
SRC_URI[zvariant-2.10.0.sha256sum] = "a68c7b55f2074489b7e8e07d2d0a6ee6b4f233867a653c664d8020ba53692525"
SRC_URI[zvariant_derive-2.10.0.sha256sum] = "e4ca5e22593eb4212382d60d26350065bf2a02c34b85bc850474a74b589a3de9"
SRC_URI[zbus-4.4.0.sha256sum] = "bb97012beadd29e654708a0fdb4c84bc046f537aecfde2c3ee0a9e4b4d48c725"
SRC_URI[zbus_macros-4.4.0.sha256sum] = "267db9407081e90bbfa46d841d3cbc60f59c0351838c4bc65199ecd79ab1983e"
SRC_URI[zbus_names-3.0.0.sha256sum] = "4b9b1fef7d021261cc16cba64c351d291b715febe0fa10dc3a443ac5a5022e6c"
SRC_URI[zvariant-4.2.0.sha256sum] = "2084290ab9a1c471c38fc524945837734fbf124487e105daec2bb57fd48c81fe"
SRC_URI[zvariant_derive-4.2.0.sha256sum] = "73e2ba546bda683a90652bac4a279bc146adad1386f25379cf73200d2002c449"
SRC_URI[zvariant_utils-2.1.0.sha256sum] = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340"
export SODIUM_USE_PKG_CONFIG = "1"
@ -494,6 +607,7 @@ FILES:${PN} = "\
${libexecdir}/citadel-realmsd \
${libexecdir}/citadel-installer-ui \
${libexecdir}/realm-config-ui \
${libexecdir}/launch-gnome-software \
${bindir}/citadel-image \
${bindir}/citadel-realmfs \
${bindir}/citadel-update \
@ -541,6 +655,9 @@ do_install() {
# citadel-realms as /usr/bin/realms
install -m 755 -T ${TARGET_BIN}/citadel-realms ${D}${bindir}/realms
# /usr/libexec/launch-gnome-software
install -m 4755 ${TARGET_BIN}/launch-gnome-software ${D}${libexecdir}
ln ${D}${libexecdir}/citadel-tool ${D}${libexecdir}/citadel-boot
ln ${D}${libexecdir}/citadel-tool ${D}${libexecdir}/citadel-install
ln ${D}${libexecdir}/citadel-tool ${D}${libexecdir}/citadel-install-backend

View File

@ -0,0 +1,51 @@
From a9ad6dd95f0aa2d413a5328edf3e3e4668e39415 Mon Sep 17 00:00:00 2001
From: isa <isa@subgraph.com>
Date: Thu, 22 Aug 2024 15:23:03 +0000
Subject: [PATCH] Modify glib to use localtime in /storage/citadel-state
Upstream-Status: Inappropriate [citadel specific]
---
glib/gtimezone.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/glib/gtimezone.c b/glib/gtimezone.c
index 4a4a2d0..ed1444a 100644
--- a/glib/gtimezone.c
+++ b/glib/gtimezone.c
@@ -538,14 +538,14 @@ zone_identifier_unix (void)
gboolean not_a_symlink_to_zoneinfo = FALSE;
struct stat file_status;
- /* Resolve the actual timezone pointed to by /etc/localtime. */
- resolved_identifier = g_file_read_link ("/etc/localtime", &read_link_err);
+ /* Resolve the actual timezone pointed to by /storage/citadel-state/localtime. */
+ resolved_identifier = g_file_read_link ("/storage/citadel-state/localtime", &read_link_err);
if (resolved_identifier != NULL)
{
if (!g_path_is_absolute (resolved_identifier))
{
- gchar *absolute_resolved_identifier = g_build_filename ("/etc", resolved_identifier, NULL);
+ gchar *absolute_resolved_identifier = g_build_filename ("/storage/citadel-state", resolved_identifier, NULL);
g_free (resolved_identifier);
resolved_identifier = g_steal_pointer (&absolute_resolved_identifier);
}
@@ -604,7 +604,7 @@ zone_identifier_unix (void)
else
{
/* Resolve relative path */
- canonical_path = g_canonicalize_filename (resolved_identifier, "/etc");
+ canonical_path = g_canonicalize_filename (resolved_identifier, "/storage/citadel-state");
g_free (resolved_identifier);
resolved_identifier = g_steal_pointer (&canonical_path);
}
file = g_mapped_file_new (filename, FALSE, NULL);
@@ -671,7 +671,7 @@ zone_info_unix (const gchar *identifier,
if (resolved_identifier == NULL)
goto out;
- filename = g_strdup ("/etc/localtime");
+ filename = g_strdup ("/storage/citadel-state/localtime");
}
file = g_mapped_file_new (filename, FALSE, NULL);

View File

@ -0,0 +1,4 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://0001-Modify-glib-to-accommodate-citadel-timezone-symlink-.patch"

View File

@ -0,0 +1,23 @@
From f96b772948fa78cbb6b2e58f6fe41e53501cc629 Mon Sep 17 00:00:00 2001
From: isa <isa@subgraph.com>
Date: Fri, 23 Aug 2024 16:00:25 +0000
Subject: [PATCH] Modify gnome-desktop to use localtime in /storage/citadel-state
Upstream-Status: Inappropriate [citadel specific]
---
libgnome-desktop/gnome-wall-clock.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libgnome-desktop/gnome-wall-clock.c b/libgnome-desktop/gnome-wall-clock.c
index 4646220..1bb8269 100644
--- a/libgnome-desktop/gnome-wall-clock.c
+++ b/libgnome-desktop/gnome-wall-clock.c
@@ -78,7 +78,7 @@ gnome_wall_clock_init (GnomeWallClock *self)
self->priv->clock_string = NULL;
- tz = g_file_new_for_path ("/etc/localtime");
+ tz = g_file_new_for_path ("/storage/citadel-state/localtime");
self->priv->tz_monitor = g_file_monitor_file (tz, 0, NULL, NULL);
g_object_unref (tz);

View File

@ -0,0 +1,4 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://0001-Modify-gnome-desktop-to-use-localtime-in-storage-cit.patch"

View File

@ -875,6 +875,10 @@ CONFIG_FUNCTION_ALIGNMENT_16B=y
CONFIG_FUNCTION_ALIGNMENT=16
# end of General architecture-dependent options
KBUILD_BUILD_TIMESTAMP="1718377347"
KBUILD_BUILD_USER="citadel"
KBUILD_BUILD_HOST="subgraph"
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULE_SIG_FORMAT=y
@ -888,7 +892,7 @@ CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_MODULE_SIG=y
# CONFIG_MODULE_SIG_FORCE is not set
CONFIG_MODULE_SIG_ALL=y
CONFIG_MODULE_SIG_ALL=n
CONFIG_MODULE_SIG_SHA1=y
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
@ -912,7 +916,7 @@ CONFIG_BLK_DEV_BSG_COMMON=y
CONFIG_BLK_DEV_BSGLIB=y
CONFIG_BLK_DEV_INTEGRITY=y
CONFIG_BLK_DEV_INTEGRITY_T10=y
# CONFIG_BLK_DEV_WRITE_MOUNTED is not set
CONFIG_BLK_DEV_WRITE_MOUNTED=m
# CONFIG_BLK_DEV_ZONED is not set
# CONFIG_BLK_DEV_THROTTLING is not set
# CONFIG_BLK_WBT is not set
@ -3177,7 +3181,7 @@ CONFIG_PINCTRL_INTEL=y
# CONFIG_PINCTRL_INTEL_PLATFORM is not set
# CONFIG_PINCTRL_ALDERLAKE is not set
CONFIG_PINCTRL_BROXTON=m
# CONFIG_PINCTRL_CANNONLAKE is not set
CONFIG_PINCTRL_CANNONLAKE=m
# CONFIG_PINCTRL_CEDARFORK is not set
# CONFIG_PINCTRL_DENVERTON is not set
# CONFIG_PINCTRL_ELKHARTLAKE is not set
@ -6825,7 +6829,7 @@ CONFIG_SIGNED_PE_FILE_VERIFICATION=y
#
# Certificates for signature checking
#
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
CONFIG_MODULE_SIG_KEY=""
CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
# CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
CONFIG_SYSTEM_TRUSTED_KEYRING=y

View File

@ -0,0 +1,82 @@
-----BEGIN PRIVATE KEY-----
MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQCmK+LsbpL99cvA
8bCrbmPUcTvcPIF3K7HTjhWBcWD+QXXZhFPRuA8yPOHbOjRyPvIbzCKaFTpEuxVk
eVozLAEhMviDaQAzoq7Xajzz9r++uTu1W7HyH6gvNLxVmDdv2d2JLZZQNfOfPwql
AGscdMhfg0sKEfvspJoSm1TAae+5/GrbRDse6xuhcghm4TE3TJb6CR1VlRcy07oi
Ep+zTHAV2aTz4PGaYVAn5T1GuBSsioULd+abhN1D/LcZD6oY6Cmzb8PA9KL0fJQ3
25iNmJ+VzJjM7EQbRudlbHr0XlYS6uG+MbVl2qyWuMSnkxCOuoA2JV+ZOa0cG8pZ
ROENSq+/KEocpqKTYEwI1XKCQbSnHr5TZwJDSnUJNt/yFKAfy8th4UyapLpzAzrs
VKcwY6pZSiab1ig6nOz3UNVV6yZAbpYcNRm6arQauytApr39AlIdh7aTJsmQ7BEH
b3GhTz+sX4kgEJEyciW1o2Ec6LLB46ZNUijSwZFxmvHAzWWZm3Ae4FEBaPqhTSoc
6YjZNKdmS1zi0PDN1KK692H4tHdxXUXK5zMAwMiU9J9ZIgeiqTBYiQMSWsEWO+BT
lrNh0D2ifbhKnSL3/154m5OZxIJ+fwZ4r22iDFkzZEoAlBUan0KYMHRnuNNQoV+G
wrUpGfyjobeQIrXR6zKOg0EfqojCiwIDAQABAoICAEDtwf+/HuljiudLqMv7WL+Q
NSMTc0TkylmO2YFYE12Vp15EMdousKVhG6ElB4wiY0iQRW7uX3OupCe7sQ5wocpe
l7MFKqKCbQ3XwZRT9E0qJJXzC78/NmCnmvVZAkROnRz2NpcF1bkCEX8ygCfAy/Bi
JUZ8i3LGSDt//Sgn3JdP9VLSwMUOeZ/mJjlIwYnJf+6X9CHWHRfrmf2pSERvWBZ5
kdYHLXA0mPTVwlEpKU7X2y+FfJKE4k4n50VAFSchQ/YMdDEnharBKMsAn4WoPqby
KDxeDyiXVmAPeKWWXMyMgYNm+emf/bLw5EpUEPKsFd/ST53X5vemNjUWUFd4uN13
DL12tKDzmYfzsXzAAnBcLTrxS1dAYu5V3ejd8Tx1HleYMJuzlBQesQ6sjsE2DaGI
HxV2fxyFrNhjcEjNvJnYLGX6rg5Me7yGu3kcgeLlHALiixYFiIR7vHaKvmg0b+na
0tO0sp4mitdynfrVAMDosLrFW8jRX2jOM3ttOOl91Xa0UvJrk2qavc9rauGTO4KX
dHJ90SGf7JdkYKaSaq+eNu+6WHfBYVv8teOTu7Qi7dl/xHSdphR9eq/FRaEidxDF
v/tYlS5va2yGA9pAbthNS8SQIp2OJupZOyGBhfVpvLemiUeGPqSKBFuocTN4DQ94
aligiY4mBNO63dz16l4BAoIBAQDjA51zfmrkL4du3H6DMSs/lqZqvjcbcRg96wb3
r7wpiug7beyv5RrtieSzN/0Y8thggvyOslNsu/dPqVxtufeP3xvSRzrde9En+2Tl
Xa00WxcqNVUu+FqYg0LRXqvQzbvtDCyaszqlvlvM7PqkY+14QBvkZ+HYydd5PN6p
+3gN7rHUIAX1+JbkN+Q8TmQYdvCiQ52QRXXHi4w+h9Sy7+iXbbgtxqqyYR4JjOzT
wTBz8bTxxfD+z0Cwge83VVmGrjRrYCkn9u8PQKinII8lbLTO5UBo/49P2jujFAh4
dC1uW4VOPKS2DT4eMizQYQqQuaQdw8gp8L2BlBTlpXOVrGSLAoIBAQC7Y4Njmyqt
SDjepsPptYVAtyrg10yK4vvWGXciLSwhqqHH5dk3gtOGnyV5yB3a5WoNRH6El4ct
ss5tH5iEpE6zVcsgN2dl+JS6bjJcNfwwaDOmxMgYrBaCFzcJcW/R1Fet+pV7kni6
pNzuAemu/u3Wb7sNckMom9VHOksBbRfSucoApKkwKMClHUmDs9eLjkn0JXZlRHHW
iM0SLO6Q4oWzIQRw0AA+MGMRgH95UyOCfLi36ifhlqti29uaXvuntKgcizHcvIR0
rI0TOLscoyoA3YvKp4oZQlNXaDJ0TEl2R++/FXTJ29VGFMG+QVh93qhEKGUyZWkx
JpzZMJC3etoBAoIBAQCct7Mrtxsd2j3555gjA3+iz2KlkBlFBYdBv4240gXo++8k
j9d0+onjcG2E1+MPJR8BSYwHCs6S4xRxVy7qxRZFqTVwriHSIxcaLe/SdCANY9ET
H2xmF6ebYApxtZSRemYA2IW2aoLTRx3i07qYYC/g8wkOXjTIz1bEaKQi3upbW+xB
z7Wtv+aTOI6En210gi/PJTSSE5GipxCzXlwVB5AfcexTFbJjoK320+XurZDAih1r
R0X+8p7q+1hkb7R1SLABbIoc/9i7Q9zqO4z2vhv4NMWJdtu9uZ+wDjVmynVOmTnm
7/CZiXzXpbXQSR3dGXtV3QHDCmIZIVxnyReJPVDPAoIBAEi24epJ8PKS3vaPMeDD
vnSRX0MmaJ5QXDcFZLRPYRujUen26CZhTuGjafBq1iL1+QQy+wFKp3r1MqMnqpB2
DdALT6ottaLdJiF9127ux/Ckzr49CASC6q0KgyHX8fMzed6aKV1tRgnvJYf6GAr/
A529d5FNMIBWkBl2plpkUeVEkP1U6A43EiJATiGcLN0Lluj1jI7ZU29TYHhYFS8F
p6oN+uIn5KA9OIQ3H8Adod7ltOwxIc6pH9JZzEqH5xF5ye5hmTS1tpRrzMaTsg/3
xLnXPoKiJrWMhjiZx1JXs/4BBihZFBusgYMTVOcWBle5igQAxNwcfAhFmoGxFccN
FgECggEBAIsMbpB0hcbH6bIWSARRobhPL2Ka8zJ4d8ZfhpjPv8ZXNKoV4Ki/i57v
IxlXi+t4NPqcWWUf3W0InFPjkkpNPpXQF1dMK4qdevOFikw7KINtjCI0iSvWEzTj
gIFGXfZcFnBXqYiuc56YUKLQOncyR7M0RxBCWAe70coMB1msMz/TaknlnkAg4ghV
TEN7LEd7GAQYzIAlsjd4boX4duiZndvPgG9V8eaUo1EWzcfD/0H8vk60HwRyfbkg
O9ERb+x6sKYtR0pJoYRuahjKd6SoKPswi+hdOZDO076Xf9ORHTHqV/CznEtVA3Vc
DDvz8/gvqoDgvAWlCrsjmZEffJizVcw=
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIFKDCCAxCgAwIBAgIUE6rC+QfVn02trZ7Ead27i9ds4NYwDQYJKoZIhvcNAQEL
BQAwLjEsMCoGA1UEAwwjQnVpbGQgdGltZSBhdXRvZ2VuZXJhdGVkIGtlcm5lbCBr
ZXkwIBcNMjQwMjI4MTk1ODA4WhgPMjEyNDAyMDQxOTU4MDhaMC4xLDAqBgNVBAMM
I0J1aWxkIHRpbWUgYXV0b2dlbmVyYXRlZCBrZXJuZWwga2V5MIICIjANBgkqhkiG
9w0BAQEFAAOCAg8AMIICCgKCAgEApivi7G6S/fXLwPGwq25j1HE73DyBdyux044V
gXFg/kF12YRT0bgPMjzh2zo0cj7yG8wimhU6RLsVZHlaMywBITL4g2kAM6Ku12o8
8/a/vrk7tVux8h+oLzS8VZg3b9ndiS2WUDXznz8KpQBrHHTIX4NLChH77KSaEptU
wGnvufxq20Q7HusboXIIZuExN0yW+gkdVZUXMtO6IhKfs0xwFdmk8+DxmmFQJ+U9
RrgUrIqFC3fmm4TdQ/y3GQ+qGOgps2/DwPSi9HyUN9uYjZiflcyYzOxEG0bnZWx6
9F5WEurhvjG1ZdqslrjEp5MQjrqANiVfmTmtHBvKWUThDUqvvyhKHKaik2BMCNVy
gkG0px6+U2cCQ0p1CTbf8hSgH8vLYeFMmqS6cwM67FSnMGOqWUomm9YoOpzs91DV
VesmQG6WHDUZumq0GrsrQKa9/QJSHYe2kybJkOwRB29xoU8/rF+JIBCRMnIltaNh
HOiyweOmTVIo0sGRcZrxwM1lmZtwHuBRAWj6oU0qHOmI2TSnZktc4tDwzdSiuvdh
+LR3cV1FyuczAMDIlPSfWSIHoqkwWIkDElrBFjvgU5azYdA9on24Sp0i9/9eeJuT
mcSCfn8GeK9togxZM2RKAJQVGp9CmDB0Z7jTUKFfhsK1KRn8o6G3kCK10esyjoNB
H6qIwosCAwEAAaM8MDowDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwHQYDVR0O
BBYEFHA0T2bpAZaELFDODMgvpSjwQNCEMA0GCSqGSIb3DQEBCwUAA4ICAQAOvHct
yaAn0kCoxAZbMEs8NYxbqxSydLX0YOcV6iF+mS2LQOGQ1mlyOBiFgExjR3XKo6kB
PRjnd8WuwDcBIHqzK9XBYgm8yCz1oOezVG/J9gvxF47QY3X7EC7M4B0MNGgPpETw
kXTGIl1x8qXwbD/KwvQkdaRJsZ4uoIHQZOYzvy4M85pV0II5xoESAR/MPrCFQO7O
/oqWNWs1LEt7XsRzH7mSZWfZ//mr0Kl6n7865i0ocCPv+4nyyT4CWv/0UEeWIKPK
ChJE+lOpSdiidq2+uyJDN5ali5413nhOx0LY/aziE7JB4x5Ami3DOsGE23y/5Cho
YWwW8EP3+9M5TVVxrji//I7g2MLQvXAtcwvhaucdrQybgKfQDCnjUSKhYi0WeX+e
esDj0uVPVrHgbj5QdFIHeuc9F15beVpt3dBa+qYRUdt5J+XaXYxKS43dhz/RQh20
Z1961O343/Gy023CqI/Ljs8P37CVhhldSWYntlMa39rg7GJPXeQZ1AN/3/2od1ay
ZaC9FRUTcmoD/TiD14aHHJLwf3tvj/vzmxCzp18mzBVtUE3Ts0uKDkE7F7EVnh5y
SWz8gehB8tUtsdZPeZqgIKQGCsWhIqD4Ir3csMpyPw+vGKxE6ZzzMr9TvwQpj/NI
G0wlChzo9EPL58kJEUFhnY0WFhRn1OWfZStiiQ==
-----END CERTIFICATE-----

View File

@ -0,0 +1,16 @@
SUMMARY = "A markup language for GTK user interface files."
LICENSE = "LGPL-3.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=3000208d539ec061b899bce1d9ce9404"
SRC_URI = "git://gitlab.gnome.org/jwestman/blueprint-compiler.git;protocol=https;branch=main"
PV = "0.14.0"
SRCREV = "8e10fcf8692108b9d4ab78f41086c5d7773ef864"
S = "${WORKDIR}/git"
DEPENDS = "python3-pygobject"
inherit meson
BBCLASSEXTEND= "native"

View File

@ -0,0 +1,24 @@
DESCRIPTION = "Unprivileged sandboxing tool"
HOMEPAGE = "https://github.com/containers/bubblewrap"
LICENSE = "LGPL-2.0-or-later"
LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
DEPENDS = "libcap"
SRC_URI = "https://github.com/containers/${BPN}/releases/download/v${PV}/${BP}.tar.xz"
SRC_URI[sha256sum] = "957ad1149db9033db88e988b12bcebe349a445e1efc8a9b59ad2939a113d333a"
inherit autotools bash-completion github-releases manpages pkgconfig
GITHUB_BASE_URI = "https://github.com/containers/${BPN}/releases/"
PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'selinux', d)}"
PACKAGECONFIG[manpages] = "--enable-man,--disable-man,libxslt-native docbook-xsl-stylesheets-native xmlto-native"
PACKAGECONFIG[selinux] = "--enable-selinux,--disable-selinux,libselinux"
PACKAGECONFIG[setuid] = "--with-priv-mode=setuid,--with-priv-mode=none"
PACKAGES += "${PN}-zsh-completion"
FILES:${PN}-zsh-completion = "${datadir}/zsh/site-functions"
BBCLASSEXTEND = "native"

View File

@ -0,0 +1 @@
fuse

View File

@ -0,0 +1,3 @@
#!/bin/sh
pytest -o log_cli=true -o log_cli_level=INFO | sed -e 's/\[...%\]//g'| sed -e 's/PASSED/PASS/g'| sed -e 's/FAILED/FAIL/g'|sed -e 's/SKIPPED/SKIP/g'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS"){printf "%s: %s\n", $NF, $0}else{print}}'| awk '{if ($NF=="PASS" || $NF=="FAIL" || $NF=="SKIP" || $NF=="XFAIL" || $NF=="XPASS") {$NF="";print $0}else{print}}'

View File

@ -0,0 +1,98 @@
SUMMARY = "Implementation of a fully functional filesystem in a userspace program"
DESCRIPTION = "FUSE (Filesystem in Userspace) is a simple interface for userspace \
programs to export a virtual filesystem to the Linux kernel. FUSE \
also aims to provide a secure method for non privileged users to \
create and mount their own filesystem implementations. \
"
HOMEPAGE = "https://github.com/libfuse/libfuse"
SECTION = "libs"
LICENSE = "GPL-2.0-only & LGPL-2.0-only"
LIC_FILES_CHKSUM = " \
file://GPL2.txt;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
file://LGPL2.txt;md5=4fbd65380cdd255951079008b364516c \
file://LICENSE;md5=a55c12a2d7d742ecb41ca9ae0a6ddc66 \
"
SRC_URI = "https://github.com/libfuse/libfuse/releases/download/fuse-${PV}/fuse-${PV}.tar.gz"
SRC_URI[sha256sum] = "f797055d9296b275e981f5f62d4e32e089614fc253d1ef2985851025b8a0ce87"
S = "${WORKDIR}/fuse-${PV}"
UPSTREAM_CHECK_URI = "https://github.com/libfuse/libfuse/releases"
UPSTREAM_CHECK_REGEX = "fuse\-(?P<pver>3(\.\d+)+).tar.xz"
CVE_PRODUCT = "fuse_project:fuse"
inherit meson pkgconfig ptest
SRC_URI += " \
file://run-ptest \
file://fuse3.conf \
"
RDEPENDS:${PN}-ptest += " \
python3-pytest \
python3-looseversion \
bash \
"
RRECOMMENDS:${PN}-ptest += " kernel-module-cuse"
do_install_ptest() {
install -d ${D}${PTEST_PATH}/test
install -d ${D}${PTEST_PATH}/example
install -d ${D}${PTEST_PATH}/util
cp -rf ${S}/test/* ${D}${PTEST_PATH}/test/
example_excutables=`find ${B}/example -type f -executable`
util_excutables=`find ${B}/util -type f -executable`
test_excutables=`find ${B}/test -type f -executable`
for e in $example_excutables
do
cp -rf $e ${D}${PTEST_PATH}/example/
done
for e in $util_excutables
do
cp -rf $e ${D}${PTEST_PATH}/util/
done
for e in $test_excutables
do
cp -rf $e ${D}${PTEST_PATH}/test
done
}
DEPENDS = "udev"
PACKAGES =+ "fuse3-utils"
RPROVIDES:${PN}-dbg += "fuse3-utils-dbg"
RRECOMMENDS:${PN}:class-target = "kernel-module-fuse fuse3-utils"
FILES:${PN} += "${libdir}/libfuse3.so.*"
FILES:${PN}-dev += "${libdir}/libfuse3*.la"
# Forbid auto-renaming to libfuse3-utils
FILES:fuse3-utils = "${bindir} ${base_sbindir}"
DEBIAN_NOAUTONAME:fuse3-utils = "1"
DEBIAN_NOAUTONAME:${PN}-dbg = "1"
SYSTEMD_SERVICE:${PN} = ""
do_install:append() {
rm -rf ${D}${base_prefix}/dev
# systemd class remove the sysv_initddir only if systemd_system_unitdir
# contains anything, but it's not needed if sysvinit is not in DISTRO_FEATURES
if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'false', 'true', d)}; then
rm -rf ${D}${sysconfdir}/init.d/
fi
# Install systemd related configuration file
if ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
install -d ${D}${sysconfdir}/modules-load.d
install -m 0644 ${WORKDIR}/fuse3.conf ${D}${sysconfdir}/modules-load.d
fi
}

View File

@ -7,10 +7,9 @@ SECTION = "devel/lib"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c07cb499d259452f324bb90c3067d85c"
S = "${WORKDIR}/git"
B = "${S}"
SRCREV = "c9864f4dd03736839f40d225da494cb1eb64e654"
SRC_URI = "git://github.com/rhinstaller/libbytesize;branch=master;protocol=https"
SRCREV = "6e83cc6f6dff4f126fc79284e0c3c1c50123380d"
SRC_URI = "git://github.com/storaged-project/libbytesize;branch=main;protocol=https"
inherit gettext autotools pkgconfig python3native

View File

@ -0,0 +1,29 @@
DESCRIPTION = "Ext4 creation utility used here because it outputs reproducible builds"
HOMEPAGE = "https://git.subgraph.com.com/isa/make_ext4"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
SRCREV = "5c201be7d72aff735da27e17c29852e0cefe3e52"
SRC_URI = "git://git.subgraph.com/isa/make_ext4fs.git;protocol=https;branch=master"
DEPENDS = "zlib-native"
inherit pkgconfig native
PACKAGECONFIG = ""
S = "${WORKDIR}/git"
BBCLASSEXTEND = "native"
do_compile () {
export LDFLAGS=""
oe_runmake
}
do_install () {
pwd
ls
install -d ${D}${bindir}
install -m 755 -T ${B}/make_ext4fs ${D}${bindir}/make_ext4fs
}

View File

@ -0,0 +1,54 @@
# Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)
SUMMARY = "A set of tools for Minijail"
HOMEPAGE = "https://google.github.io/minijail/"
# NOTE: License in setup.py/PKGINFO is: Apache License 2.0
# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
# your responsibility to verify that the values are complete and correct.
#
# The following license files were not able to be identified and are
# represented as "Unknown" below, you will need to check them yourself:
# LICENSE
# NOTE: Original package / source metadata indicates license is: Apache-2.0
#
# NOTE: multiple licenses have been detected; they have been separated with &
# in the LICENSE value for now since it is a reasonable assumption that all
# of the licenses apply. If instead there is a choice between the multiple
# licenses then you should change the value to separate the licenses with |
# instead of &. If there is any doubt, check the accompanying documentation
# to determine which situation is applicable.
LICENSE = "Apache-2.0 & Proprietary"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2089bcf649ce83dde9493f497237833a \
file://MODULE_LICENSE_BSD;md5=d41d8cd98f00b204e9800998ecf8427e"
SRC_URI = "git://github.com/google/minijail.git;protocol=https;branch=main"
# Modify these as desired
PV = "0.12+git"
SRCREV = "3ce72e092f1ea94edc74545cd29df297e503d4fa"
S = "${WORKDIR}/git"
DEPENDS = "libcap"
do_configure () {
:
}
do_compile () {
oe_runmake LIBDIR=${libdir}
}
do_install () {
install -d ${D}${libdir}
install -d ${D}${libexecdir}
install -m 0755 ${S}/libminijail.so ${D}${libdir}
install -m 0755 ${S}/libminijailpreload.so ${D}${libdir}
install -m 0755 ${S}/minijail0 ${D}${libexecdir}
}
FILES:${PN}-dev = ""
FILES:${PN} = "/"

View File

@ -76,6 +76,7 @@ do_compile:prepend:class-native() {
do_compile() {
export NSPR_INCLUDE_DIR=${STAGING_INCDIR}/nspr
export NSS_FIPS_DISABLED
export CROSS_COMPILE=1
export NATIVE_CC="${BUILD_CC}"
@ -247,18 +248,6 @@ do_install:append:class-target() {
PACKAGE_WRITE_DEPS += "nss-native"
pkg_postinst:${PN} () {
for I in $D${libdir}/lib*.chk; do
DN=`dirname $I`
BN=`basename $I .chk`
FN=$DN/$BN.so
shlibsign -i $FN
if [ $? -ne 0 ]; then
echo "shlibsign -i $FN failed"
fi
done
}
PACKAGES =+ "${PN}-smime"
FILES:${PN}-smime = "\
${bindir}/smime \

View File

@ -0,0 +1,73 @@
From cfb9327280c3e173b4cfb0ec3ec3d62e729f1e21 Mon Sep 17 00:00:00 2001
From: Bruce Leidl <bruce@subgraph.com>
Date: Fri, 27 Sep 2024 07:34:13 -0400
Subject: [PATCH] Remove System Bus and close application on quit
To facilitage sandboxing remove dependency on system bus. The
system bus is not needed for any plugin that we are using. Also
close the application rather than just hiding the window when
the user exits the application. Otherwise the sandbox will run
forever.
---
lib/gs-plugin-loader.c | 5 +----
lib/gs-plugin.c | 1 -
src/gs-shell.c | 4 +++-
3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
index 6661b73..ac57bdc 100644
--- a/lib/gs-plugin-loader.c
+++ b/lib/gs-plugin-loader.c
@@ -1964,8 +1964,6 @@ gs_plugin_loader_setup_async (GsPluginLoader *plugin_loader,
* time. */
if (plugin_loader->session_bus_connection == NULL)
g_bus_get (G_BUS_TYPE_SESSION, cancellable, get_session_bus_cb, g_object_ref (task));
- if (plugin_loader->system_bus_connection == NULL)
- g_bus_get (G_BUS_TYPE_SYSTEM, cancellable, get_system_bus_cb, g_object_ref (task));
finish_setup_get_bus (task);
}
@@ -2032,8 +2030,7 @@ finish_setup_get_bus (GTask *task)
g_autoptr(GError) local_error = NULL;
/* Wait until weve got all the buses we need. */
- if (plugin_loader->session_bus_connection == NULL ||
- plugin_loader->system_bus_connection == NULL)
+ if (plugin_loader->session_bus_connection == NULL)
return;
/* use the default, but this requires a 'make install' */
diff --git a/lib/gs-plugin.c b/lib/gs-plugin.c
index 97bc47e..514d97a 100644
--- a/lib/gs-plugin.c
+++ b/lib/gs-plugin.c
@@ -1606,7 +1606,6 @@ gs_plugin_constructed (GObject *object)
/* Check all required properties have been set. */
g_assert (priv->session_bus_connection != NULL);
- g_assert (priv->system_bus_connection != NULL);
}
static void
diff --git a/src/gs-shell.c b/src/gs-shell.c
index 5c069e2..13bdcc6 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -1081,6 +1081,8 @@ main_window_closed_cb (GtkWidget *dialog, gpointer user_data)
/* Free unused memory with GNU extension of malloc.h */
malloc_trim (0);
#endif
+ GApplication *app = g_application_get_default ();
+ g_action_group_activate_action(G_ACTION_GROUP(app), "quit", NULL);
return TRUE;
}
@@ -2505,7 +2507,7 @@ gs_shell_class_init (GsShellClass *klass)
gtk_widget_class_bind_template_callback (widget_class, gs_shell_details_page_metainfo_loaded_cb);
gtk_widget_class_bind_template_callback (widget_class, details_page_app_clicked_cb);
- gtk_widget_class_add_binding_action (widget_class, GDK_KEY_q, GDK_CONTROL_MASK, "window.close", NULL);
+ gtk_widget_class_add_binding_action (widget_class, GDK_KEY_q, GDK_CONTROL_MASK, "app.quit", NULL);
}
static void

View File

@ -0,0 +1,51 @@
SUMMARY = "GNOME Software allows users to easily find, discover and install apps."
LICENSE = "GPL-2.0-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
GTKDOC_MESON_OPTION ?= "gtk_doc"
inherit gnomebase gsettings itstool gnome-help gtk-icon-cache gtk-doc mime mime-xdg gettext upstream-version-is-even features_check
REQUIRED_DISTRO_FEATURES = "x11 polkit systemd pam"
DEPENDS += " \
appstream \
gdk-pixbuf \
glib-2.0 \
glib-2.0-native \
gsettings-desktop-schemas \
gtk4 \
iso-codes \
json-glib \
libadwaita \
libgudev \
libsoup-3.0 \
libxmlb-native \
polkit \
"
RDEPENDS:${PN} = "iso-codes"
EXTRA_OEMESON += "-Dtests=false -Dsoup2=false"
SRC_URI += " file://0001-Remove-System-Bus-and-close-application-on-quit.patch"
SRC_URI[archive.sha256sum] = "b6eeb789100de94b50ebe2e77f16b26be4c2db15489905f198d060c425e19076"
PACKAGECONFIG ?= "flatpak"
PACKAGECONFIG[flatpak] = "-Dflatpak=true,-Dflatpak=false,flatpak ostree"
PACKAGECONFIG[snap] = "-Dsnap=true,-Dsnap=false,snapd-glib"
PACKAGECONFIG[gtk_doc] = "-Dgtk_doc=true,-Dgtk_doc=false,libxslt-native docbook-xsl-stylesheets"
PACKAGECONFIG[man] = "-Dman=true,-Dman=false,libxslt-native docbook-xsl-stylesheets"
PACKAGECONFIG[packagekit] = "-Dpackagekit=true,-Dpackagekit=false,gnome-packagekit,gnome-packagekit"
PACKAGECONFIG[fwupd] = "-Dfwupd=true,-Dfwupd=false,fwupd,fwupd"
PACKAGECONFIG[malcontent] = "-Dmalcontent=true,-Dmalcontent=false,malcontent"
FILES:${PN} += "${datadir}/dbus-1 \
${datadir}/metainfo \
${datadir}/swcatalog \
"
FILES:${PN}:remove = "${datadir}/applications ${sysconfdir}"
PACKAGES += "${PN}-extra"
FILES:${PN}-extra += "${datadir} ${sysconfdir}"
FILES:${PN}-dev += "${libdir}/gnome-software/libgnomesoftware.so"

View File

@ -0,0 +1,28 @@
From 805d67b57d1b229f8fafc942df51e7a3b830889a Mon Sep 17 00:00:00 2001
From: isa <isa@subgraph.com>
Date: Thu, 7 Mar 2024 22:06:04 +0000
Subject: [PATCH] Fix reproducibility issue
---
src/daemon/Makefile.am | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/daemon/Makefile.am b/src/daemon/Makefile.am
index e7eb1f2..d486819 100644
--- a/src/daemon/Makefile.am
+++ b/src/daemon/Makefile.am
@@ -13,10 +13,10 @@
##
AM_CPPFLAGS = $(LIBGTOP_CFLAGS) @AM_CPPFLAGS@ -D_BSD \
- -DLIBGTOP_COMPILE_SYSTEM="\"`uname -s`\"" \
- -DLIBGTOP_COMPILE_RELEASE="\"`uname -r`\"" \
- -DLIBGTOP_COMPILE_VERSION="\"`uname -v`\"" \
- -DLIBGTOP_COMPILE_MACHINE="\"`uname -m`\""
+ -DLIBGTOP_COMPILE_SYSTEM="\"Linux\"" \
+ -DLIBGTOP_COMPILE_RELEASE="\"6.7.4\"" \
+ -DLIBGTOP_COMPILE_VERSION="\"SMP PREEMPT_DYNAMIC\"" \
+ -DLIBGTOP_COMPILE_MACHINE="\"x86_64\""
if LIBGTOP_NEED_SERVER
suid_sysdeps = $(top_builddir)/sysdeps/@sysdeps_dir@/libgtop_sysdeps_suid-2.0.la

View File

@ -7,6 +7,7 @@ inherit gnomebase lib_package gtk-doc gobject-introspection gettext upstream-ver
ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}"
SRC_URI += " file://0001-Fix-reproducibility-issue.patch"
SRC_URI[archive.sha256sum] = "775676df958e2ea2452f7568f28b2ea581063d312773dd5c0b7624c1b9b2da8c"
DEPENDS = "glib-2.0 libxau"

View File

@ -0,0 +1,14 @@
DESCRIPTION = "This repository contains a number of commandline utilities for use inside Flatpak sandboxes."
HOMEPAGE = "http://flatpak.org"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
SRC_URI = "git://github.com/flatpak/flatpak-xdg-utils.git;protocol=https;branch=main"
SRCREV = "5ba39872f81bf8d98d58c5f8acb86604645be468"
S = "${WORKDIR}/git"
inherit meson pkgconfig
DEPENDS = "glib-2.0"

View File

@ -0,0 +1,28 @@
From 3a1ab02d821cd4b0af44c0dad87e290ebaabef83 Mon Sep 17 00:00:00 2001
From: Markus Volk <f_l_k@t-online.de>
Date: Wed, 14 Dec 2022 06:50:40 +0100
Subject: [PATCH] flatpak.pc: add pc_sysrootdir
Signed-off-by: Markus Volk <f_l_k@t-online.de>
---
Upstream-Status: Inappropriate [oe-specific]
meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meson.build b/meson.build
index 4a0b865e..5f69b1d9 100644
--- a/meson.build
+++ b/meson.build
@@ -509,7 +509,7 @@ pkgconfig_variables += 'exec_prefix=${prefix}'
pkgconfig_variables += 'datadir=' + ('${prefix}' / get_option('datadir'))
pkgconfig_variables += 'datarootdir=' + ('${prefix}' / get_option('datadir'))
-pkgconfig_variables += 'interfaces_dir=${datadir}/dbus-1/interfaces/'
+pkgconfig_variables += 'interfaces_dir=${pc_sysrootdir}${datadir}/dbus-1/interfaces/'
pkgconfig_variables += 'httpbackend=' + get_option('http_backend')
pkgconfig.generate(
--
2.34.1

View File

@ -0,0 +1,81 @@
DESCRIPTION = "Desktop containment framework."
HOMEPAGE = "http://flatpak.org"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
SRC_URI = " \
gitsm://github.com/flatpak/flatpak;protocol=https;branch=main \
file://0001-flatpak-pc-add-pc_sysrootdir.patch \
"
SRCREV = "925c80f913d69e7ca424428823e1431c4ffb0deb"
S = "${WORKDIR}/git"
inherit meson pkgconfig gettext systemd gtk-doc gobject-introspection python3native useradd mime features_check
REQUIRED_DISTRO_FEATURES = "polkit"
DEPENDS = " \
appstream \
bison-native \
dconf \
fuse3 \
gdk-pixbuf \
glib-2.0 \
gpgme \
json-glib \
libarchive \
libcap \
libxml2 \
ostree \
polkit \
python3-pyparsing-native \
zstd \
"
RDEPENDS:${PN} = " \
ca-certificates \
dconf \
flatpak-xdg-utils \
fuse3-utils \
"
GIR_MESON_OPTION = "gir"
GIR_MESON_ENABLE_FLAG = 'enabled'
GIR_MESON_DISABLE_FLAG = 'disabled'
GTKDOC_MESON_OPTION = 'gtkdoc'
GTKDOC_MESON_ENABLE_FLAG = 'enabled'
GTKDOC_MESON_DISABLE_FLAG = 'disabled'
PACKAGECONFIG[curl] = "-Dhttp_backend=curl,,curl"
PACKAGECONFIG[docbook_docs] = "-Ddocbook_docs=enabled,-Ddocbook_docs=disabled,xmlto-native"
PACKAGECONFIG[man] = "-Dman=enabled,-Dman=disabled,libxslt-native"
PACKAGECONFIG[soup] = "-Dhttp_backend=soup,,libsoup-2.4"
PACKAGECONFIG[tests] = "-Dtests=true,-Dtests=false,xauth socat-native"
PACKAGECONFIG[xauth] = "-Dxauth=enabled,-Dxauth=disabled,xauth"
PACKAGECONFIG[seccomp] = "-Dseccomp=enabled,-Dseccomp=disabled,libseccomp"
PACKAGECONFIG[malcontent] = "-Dmalcontent=enabled,-Dmalcontent=disabled,malcontent"
PACKAGECONFIG[selinux] = "-Dselinux_module=enabled,-Dselinux_module=disabled,libselinux"
PACKAGECONFIG[wayland-security-context] = "-Dwayland_security_context=enabled,-Dwayland_security_context=disabled,wayland wayland-native wayland-protocols"
PACKAGECONFIG ?= " \
curl \
${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xauth', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland-security-context', '', d)} \
"
EXTRA_OEMESON = "-Dsystem_fusermount=${bindir}/fusermount3"
FILES:${PN} += "${libdir} ${datadir}"
USERADD_PACKAGES = "${PN}"
USERADD_PARAM:${PN} = "--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd"
USERADD_PARAM:${PN} += "; --system --no-create-home --user-group flatpak"
do_install:append() {
chmod 0700 ${D}/${datadir}/polkit-1/rules.d
chown polkitd ${D}/${datadir}/polkit-1/rules.d
chgrp root ${D}/${datadir}/polkit-1/rules.d
}

View File

@ -0,0 +1,3 @@
#! /bin/sh
gnome-desktop-testing-runner libostree

View File

@ -0,0 +1,215 @@
SUMMARY = "Versioned Operating System Repository."
DESCRIPTION = "libostree is both a shared library and suite of command line \
tools that combines a \"git-like\" model for committing and downloading \
bootable filesystem trees, along with a layer for deploying them and managing \
the bootloader configuration."
HOMEPAGE = "https://ostree.readthedocs.io"
LICENSE = "LGPL-2.1-only"
LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2"
DEPENDS = " \
glib-2.0-native \
glib-2.0 \
e2fsprogs \
libcap \
zlib \
xz \
bison-native \
"
GITHUB_BASE_URI = "https://github.com/ostreedev/ostree/releases"
SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/libostree-${PV}.tar.xz \
file://run-ptest \
"
SRC_URI[sha256sum] = "8b61c856697aa412f2f1724322ada40bdd7b1bf9e7783e2c594faa7a594f868f"
S = "${WORKDIR}/libostree-${PV}"
inherit autotools bash-completion gobject-introspection github-releases gtk-doc manpages pkgconfig ptest-gnome systemd
UNKNOWN_CONFIGURE_OPT_IGNORE = "--disable-introspection --enable-introspection"
# Workaround compile failure:
# |../git/src/libotutil/zbase32.c:37:1: error: function returns an aggregate [-Werror=aggregate-return]
# so remove -Og and use -O2 as workaround
DEBUG_OPTIMIZATION:remove = "-Og"
DEBUG_OPTIMIZATION:append = " -O2"
BUILD_OPTIMIZATION:remove = "-Og"
BUILD_OPTIMIZATION:append = " -O2"
# Package configuration - match ostree defaults, but without rofiles-fuse
# otherwise we introduce a dependendency on meta-filesystems and swap
# soup for curl to avoid bringing in deprecated libsoup2 (though
# to run ptest requires that you have soup2 or soup3).
PACKAGECONFIG ??= " \
${@bb.utils.filter('DISTRO_FEATURES', 'selinux smack', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'systemd libmount', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'soup3', '', d)} \
glib \
gpgme \
curl \
"
# We include curl because ostree can't (currently) be built without
# soup or curl - https://github.com/ostreedev/ostree/issues/1897
PACKAGECONFIG:class-native ??= " \
${@bb.utils.filter('DISTRO_FEATURES', 'selinux smack', d)} \
builtin-grub2-mkconfig \
gpgme \
curl \
"
PACKAGECONFIG:class-nativesdk ??= " \
${@bb.utils.filter('DISTRO_FEATURES', 'selinux smack', d)} \
builtin-grub2-mkconfig \
gpgme \
curl \
"
PACKAGECONFIG[avahi] = "--with-avahi, --without-avahi, avahi"
PACKAGECONFIG[builtin-grub2-mkconfig] = "--with-builtin-grub2-mkconfig, --without-builtin-grub2-mkconfig"
PACKAGECONFIG[composefs] = "--with-composefs, --without-composefs, composefs"
PACKAGECONFIG[curl] = "--with-curl, --without-curl, curl"
PACKAGECONFIG[dracut] = "--with-dracut, --without-dracut"
PACKAGECONFIG[ed25519-libsodium] = "--with-ed25519-libsodium, --without-ed25519-libsodium, libsodium"
PACKAGECONFIG[ed25519-openssl] = "--with-openssl, --without-openssl, openssl"
PACKAGECONFIG[gjs] = "ac_cv_path_GJS=${bindir}/gjs"
PACKAGECONFIG[glib] = "--with-crypto=glib, , , , , gnutls openssl"
PACKAGECONFIG[gnutls] = "--with-crypto=gnutls, , gnutls, , , glib openssl"
PACKAGECONFIG[gpgme] = "--with-gpgme, --without-gpgme, gpgme"
PACKAGECONFIG[libarchive] = "--with-libarchive, --without-libarchive, libarchive"
PACKAGECONFIG[libmount] = "--with-libmount, --without-libmount, util-linux"
PACKAGECONFIG[manpages] = "--enable-man, --disable-man, libxslt-native docbook-xsl-stylesheets-native"
PACKAGECONFIG[mkinitcpio] = "--with-mkinitcpio, --without-mkinitcpio"
PACKAGECONFIG[no-http2] = "--disable-http2, --enable-http2"
PACKAGECONFIG[openssl] = "--with-crypto=openssl, , openssl, , , glib gnutls"
PACKAGECONFIG[rofiles-fuse] = "--enable-rofiles-fuse, --disable-rofiles-fuse, fuse3"
PACKAGECONFIG[selinux] = "--with-selinux, --without-selinux, libselinux, bubblewrap"
PACKAGECONFIG[smack] = "--with-smack, --without-smack, smack"
PACKAGECONFIG[soup2] = "--with-soup, --without-soup, libsoup-2.4, , , soup3"
PACKAGECONFIG[soup3] = "--with-soup3, --without-soup3, libsoup, , , soup2"
PACKAGECONFIG[static] = ""
PACKAGECONFIG[systemd] = "--with-libsystemd --with-systemdsystemunitdir=${systemd_system_unitdir}, --without-libsystemd, systemd"
EXTRA_OECONF = " \
${@bb.utils.contains('PACKAGECONFIG', 'static', '--with-static-compiler=\'${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}\'', '', d)} \
"
# Makefile-libostree.am overrides this to avoid a build problem with clang,
# but that fix breaks cross compilation and we don't need it
EXTRA_OEMAKE = " \
INTROSPECTION_SCANNER_ENV= \
"
EXTRA_OECONF:class-native = " \
--enable-wrpseudo-compat \
--disable-otmpfile \
"
EXTRA_OECONF:class-nativesdk = " \
--enable-wrpseudo-compat \
--disable-otmpfile \
"
# Path to ${prefix}/lib/ostree/ostree-grub-generator is hardcoded on the
# do_configure stage so we do depend on it
SYSROOT_DIR = "${STAGING_DIR_TARGET}"
SYSROOT_DIR:class-native = "${STAGING_DIR_NATIVE}"
do_configure[vardeps] += "SYSROOT_DIR"
do_configure:prepend() {
# this reflects what autogen.sh does, but the OE wrappers for autoreconf
# allow it to work without the other gyrations which exist there
cp ${S}/libglnx/Makefile-libglnx.am ${S}/libglnx/Makefile-libglnx.am.inc
cp ${S}/bsdiff/Makefile-bsdiff.am ${S}/bsdiff/Makefile-bsdiff.am.inc
}
do_install:append:class-native() {
create_wrapper ${D}${bindir}/ostree OSTREE_GRUB2_EXEC="${STAGING_LIBDIR_NATIVE}/ostree/ostree-grub-generator"
}
do_install:append:class-nativesdk() {
create_wrapper ${D}${bindir}/ostree OSTREE_GRUB2_EXEC="\$OECORE_NATIVE_SYSROOT/usr/lib/ostree/ostree-grub-generator"
}
PACKAGE_BEFORE_PN = " \
${PN}-dracut \
${PN}-grub \
${PN}-mkinitcpio \
${PN}-switchroot \
"
FILES:${PN} += " \
${nonarch_libdir}/${BPN} \
${nonarch_libdir}/tmpfiles.d \
${systemd_system_unitdir} \
${systemd_unitdir}/system-generators \
"
FILES:${PN}-dracut = " \
${sysconfdir}/dracut.conf.d \
${libdir}/dracut \
"
FILES:${PN}-grub = " \
${sysconfdir}/grub.d \
${libexecdir}/libostree/grub2-15_ostree \
"
FILES:${PN}-mkinitcpio = " \
${sysconfdir}/ostree-mkinitcpio.conf \
${libdir}/initcpio \
"
FILES:${PN}-switchroot = " \
${nonarch_libdir}/${BPN}/ostree-prepare-root \
${systemd_system_unitdir}/ostree-prepare-root.service \
"
RDEPENDS:${PN}-dracut = "bash"
RDEPENDS:${PN}-mkinitcpio = "bash"
RDEPENDS:${PN}:class-target = " \
${@bb.utils.contains('PACKAGECONFIG', 'gpgme', 'gnupg', '', d)} \
${PN}-switchroot \
"
#
# Note that to get ptest to pass you also need:
#
# xattr in DISTRO_FEATURES (default)
# static ostree-prepare-root
# overlayfs in your kernel
# busybox built statically
# C.UTF-8 locale available (default)
# Sufficient disk space/RAM (e.g. core-image-sato-sdk)
#
# Something like this in your local.conf:
#
# PACKAGECONFIG:append:pn-ostree = " static soup3"
# KERNEL_EXTRA_FEATURES:append = " features/overlayfs/overlayfs.scc"
# TARGET_CFLAGS:append:pn-busybox = " -static"
#
RDEPENDS:${PN}-ptest += " \
attr \
bash \
coreutils \
cpio \
diffutils \
findutils \
grep \
locale-base-en-us \
python3-core \
python3-multiprocessing \
strace \
tar \
util-linux \
xz \
python3-pyyaml \
${@bb.utils.contains('PACKAGECONFIG', 'gjs', 'gjs', '', d)} \
"
RDEPENDS:${PN}-ptest:remove:riscv32 = "strace"
RDEPENDS:${PN}-ptest:append:libc-glibc = " glibc-utils glibc-localedata-en-us"
RRECOMMENDS:${PN}:append:class-target = " kernel-module-overlay"
SYSTEMD_SERVICE:${PN} = "ostree-remount.service ostree-finalize-staged.path"
SYSTEMD_SERVICE:${PN}-switchroot = "ostree-prepare-root.service"
BBCLASSEXTEND = "native nativesdk"

View File

@ -1 +1 @@
PACKAGES="man manpages neovim iputils-ping tmux vifm gnome-terminal firefox nautilus eog evince unzip x264 yelp"
PACKAGES="man manpages neovim iputils-ping tmux vifm gnome-terminal firefox-esr nautilus eog evince unzip x264 yelp"

View File

@ -26,7 +26,7 @@ PACKAGES="man manpages vim-nox iputils-ping tmux gnome-terminal firefox nautilus
# they can just be deleted. Or you can keep them, the result will be the same.
#
DEBIAN_RELEASE="bullseye"
DEBIAN_RELEASE="bookworm"
DEBIAN_MIRROR="https://deb.debian.org/debian"
#

View File

@ -1,6 +1,6 @@
: ${DEBIAN_MIRROR:="https://deb.debian.org/debian"}
: ${DEBIAN_RELEASE:="bullseye"}
: ${DEBIAN_RELEASE:="bookworm"}
BASE_PACKAGES="iproute2 less xz-utils sudo dbus libpam-systemd openssh-client packagekit-gtk3-module libcanberra-gtk3-module libpulse0 fonts-roboto-hinted bash-completion"

View File

@ -1,6 +1,6 @@
info "Creating user account"
useradd -s /bin/bash -m user
echo "user:user" | chpasswd
echo "user:user" | chpasswd -c NONE
usermod -aG sudo user
echo "export DISPLAY=:0" >> /home/user/.bashrc

View File

@ -3,6 +3,5 @@ info "Writing /etc/apt/sources.list"
{
echo "deb ${DEBIAN_MIRROR} ${DEBIAN_RELEASE} main contrib non-free"
echo "deb ${DEBIAN_MIRROR}-security ${DEBIAN_RELEASE}-security main contrib non-free"
echo "deb ${DEBIAN_MIRROR} unstable main"
} > /etc/apt/sources.list

View File

@ -29,22 +29,43 @@ setup_rootfs() {
}
run_debootstrap() {
#[[ -f ${CACHE_DIR}/lock ]] && rm -f ${CACHE_DIR}/lock
#mkdir --parents ${CACHE_DIR} ${ROOTFS}/var/cache/apt/archives
[[ -f ${CACHE_DIR}/lock ]] && rm -f ${CACHE_DIR}/lock
mkdir --parents ${CACHE_DIR} ${ROOTFS}/var/cache/apt/archives
#info "Bind mounting ${CACHE_DIR} to ${ROOTFS}/var/cache/apt/archives"
#mount --bind ${CACHE_DIR} ${ROOTFS}/var/cache/apt/archives
info "Bind mounting ${CACHE_DIR} to ${ROOTFS}/var/cache/apt/archives"
mount --bind ${CACHE_DIR} ${ROOTFS}/var/cache/apt/archives
info "Launching mmdebstrap"
info "Launching debootstrap"
export SOURCE_DATE_EPOCH="1718285985"
debootstrap --verbose --merged-usr --variant=minbase \
--include=systemd-sysv,locales \
${DEBIAN_RELEASE} ${ROOTFS} ${DEBIAN_MIRROR}
mmdebstrap --variant=minbase \
--include=systemd-sysv,locales,ca-certificates \
${DEBIAN_RELEASE} ${ROOTFS} ${DEBIAN_MIRROR}
}
make_reproducible() {
#umount ${ROOTFS}/var/cache/apt/archives
rm -rdf ${ROOTFS}/var/cache/*
rm ${ROOTFS}/var/log/apt/term.log
rm ${ROOTFS}/var/log/apt/history.log
rm ${ROOTFS}/var/log/bootstrap.log || true
rm ${ROOTFS}/var/log/fontconfig.log || true
rm ${ROOTFS}/var/log/dpkg.log
rm ${ROOTFS}/var/log/alternatives.log
rm ${ROOTFS}/var/log/eipp.log.xz || true
rm -rdf ${ROOTFS}/var/lib/apt/lists/*
awk -i inplace -F":" '{OFS=FS}{ $3="1" ; print }' ${ROOTFS}/etc/shadow # do not record date of last password change
echo "bf58db8bc11448788138633a01a06cdd" > ${ROOTFS}/etc/machine-id
echo "bf58db8bc11448788138633a01a06cdd" > ${ROOTFS}/var/lib/dbus/machine-id
echo -e "# Generated during realmfs build\nnameserver 192.168.4.1" > ${ROOTFS}/etc/resolv.conf
echo -e "# File generated during realmfs build\nLC_COLLATE=C\nLANG=en_US.UTF-8" > ${ROOTFS}/etc/default/locale
}
setup_chroot() {
mount chproc ${ROOTFS}/proc -t proc
mount chsys ${ROOTFS}/sys -t sysfs
mount chtmp ${ROOTFS}/tmp -t tmpfs
@ -60,10 +81,11 @@ setup_chroot() {
}
cleanup_chroot() {
make_reproducible
umount ${ROOTFS}/proc
umount ${ROOTFS}/sys
umount ${ROOTFS}/tmp
umount ${ROOTFS}/var/cache/apt/archives
# Remove cache files in case we are creating a tarball for distribution
rm -f ${ROOTFS}/var/cache/apt/pkgcache.bin
@ -71,7 +93,6 @@ cleanup_chroot() {
}
run_chroot_stage() {
setup_chroot
#
@ -103,15 +124,27 @@ generate_tarball() {
echo
}
build_make_ext4fs() {
cd ${WORKDIR}
if [ ! -d "make_ext4fs" ]; then
git clone https://git.subgraph.com/isa/make_ext4fs.git
fi
cd make_ext4fs
git checkout 5c201be7d72aff735da27e17c29852e0cefe3e52
make
cd ../..
}
generate_image() {
# BLOCKS=$(du -ks ${ROOTFS} | cut -f1)
# BLOCKS=$(expr ${BLOCKS} \* 12 / 10)
# SIZE=$(expr ${BLOCKS} \* 1024)
# echo "Size is ${SIZE}"
build_make_ext4fs
BLOCKS=$(expr 440 \* 1024)
# allow online resize up to 32G
dd if=/dev/zero of=${WORKDIR}/citadel-realmfs.ext4 seek=${BLOCKS} count=0 bs=4096
mkfs.ext4 -d ${ROOTFS} -i 4096 -b 4096 -F ${WORKDIR}/citadel-realmfs.ext4 ${BLOCKS} || exit 1
${WORKDIR}/make_ext4fs/make_ext4fs -l 2G -T "1712775988" -b 4096 ${WORKDIR}/citadel-realmfs.ext4 ${ROOTFS} || exit 1
}
usage() {
@ -156,7 +189,6 @@ try_config() {
}
WORKDIR="$(pwd)/realmfs"
BUILDFILE=""
DO_TAR=0
DO_XZ=0
@ -223,7 +255,7 @@ if [ "$EUID" -ne 0 ]; then
exit 1
fi
if [[ -z ${BUILDFILE} ]]; then
if [[ -z ${BUILDFILE-} ]]; then
BUILDFILE=$(try_config "${PWD}/build.conf" || try_config "${REALMFS_BUILDER_BASE}/basic-image.conf") || fatal "Could not find a configuration file to use"
fi
@ -245,7 +277,6 @@ run_debootstrap
run_chroot_stage
info "rootfs build is completed:"
info " $(du -sh ${ROOTFS})"

View File

@ -30,7 +30,8 @@ RUN apt update && apt install -y gawk \
file \
liblz4-tool \
zstd \
xwayland
xwayland \
mmdebstrap
# python
RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
@ -38,6 +39,7 @@ RUN locale-gen
RUN update-locale LANG=en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV LC_CTYPE en_US.UTF-8
ENV LC_COLLATE en_US.UTF-8
RUN useradd -ms /bin/bash builder
RUN echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

View File

@ -1,16 +1,11 @@
#!/bin/bash
#!/usr/bin/env bash
EXTRA_KERNEL_CMDLINE=""
SCRIPT=$(realpath ${BASH_SOURCE})
BUILD_ROOT=$(realpath $(dirname ${SCRIPT})/../build)
SYSROOT=${BUILD_ROOT}/tmp-glibc/work/x86_64-linux/qemu-helper-native/1.0-r1/recipe-sysroot-native
QEMU=${SYSROOT}/usr/bin/qemu-system-x86_64
if [[ ! -f ${QEMU} ]]; then
>&2 printf "Qemu binary not found at: ${QEMU}\n"
exit 1
fi
SYSROOT=${BUILD_ROOT}/tmp-glibc/work/x86_64-linux/qemu-helper-native/1.0/recipe-sysroot-native
QEMU=qemu-system-x86_64
ENABLE_KVM="--enable-kvm -cpu host"
@ -20,9 +15,13 @@ if [[ ! -c "/dev/kvm" ]]; then
fi
EFI_BIOS="-bios /usr/share/qemu/OVMF.fd"
if [[ ! -f "/usr/share/qemu/OVMF.fd" ]]; then
printf "Disabling EFI boot because OVMF.fd not found in /usr/share/qemu\n"
EFI_BIOS=""
if [[ -f "/usr/share/qemu/OVMF.fd" ]]; then
printf "Using EFI boot because OVMF.fd found in /usr/share/qemu/\n"
elif [[ -f "/usr/share/edk2-ovmf/x64/OVMF.fd" ]]; then # fedora and arch
printf "Using EFI boot because OVMF.fd found in /usr/share/edk2-ovmf/x64/\n"
EFI_BIOS="-bios /usr/share/edk2-ovmf/x64/OVMF.fd"
else
printf "Disabling EFI boot because OVMF.fd not found\n"
fi
usage() {
@ -43,7 +42,7 @@ exit 0
}
BOOT_TARGET=""
MEMORY_ARG="-m 4G"
MEMORY_ARG="-m 8G"
DEBUG_MODE=0
while [[ $# -gt 0 ]]; do
@ -70,6 +69,14 @@ while [[ $# -gt 0 ]]; do
BOOT_TARGET="installer"
shift
;;
boot-to-install)
BOOT_TARGET="boot-to-install"
shift
;;
boot-installed)
BOOT_TARGET="boot-installed"
shift
;;
--help)
usage
;;
@ -84,23 +91,50 @@ COMMON_INSTALLER_ARGS="\
${ENABLE_KVM} \
${MEMORY_ARG} \
${EFI_BIOS} \
-vga virtio \
-device virtio-vga-gl \
-display sdl,gl=on \
-vga none \
-usb -device usb-tablet,id=input0 \
-drive format=raw,file=${BUILD_ROOT}/images/citadel-installer.img \
-net none \
-nic user,model=virtio-net-pci \
-smp 2"
boot_installer() {
if [[ ${DEBUG_MODE} -eq 1 ]]; then
${QEMU} ${COMMON_INSTALLER_ARGS} \
${QEMU} ${COMMON_INSTALLER_ARGS} \
-serial stdio \
-kernel ${BUILD_ROOT}/images/bzImage \
-drive format=raw,file=${BUILD_ROOT}/images/citadel-installer.img \
-append "console=ttyS0 earlyprintk=ttyS0 root=/dev/mapper/rootfs citadel.verbose citadel.install fstab=no luks=no systemd.journald.forward_to_console=1 ${EXTRA_KERNEL_CMDLINE}"
else
${QEMU} ${COMMON_INSTALLER_ARGS}
${QEMU} ${COMMON_INSTALLER_ARGS} -drive format=raw,file=${BUILD_ROOT}/images/citadel-installer.img
fi
}
# qemu-img create -f qcow2 qemu_disk/citadel_disk.qcow2 -o size=50G,preallocation=metadata
# mount -t 9p -o trans=virtio,version=9p2000.L shared /mnt/my9p
boot_to_install() {
if [ ! -f qemu_disk/citadel_disk.qcow2 ]; then
mkdir qemu_disk
qemu-img create -f qcow2 qemu_disk/citadel_disk.qcow2 -o size=50G,preallocation=metadata
fi
CITADEL_QEMU_ARGS+=" ${COMMON_INSTALLER_ARGS} -drive format=raw,file=${BUILD_ROOT}/images/citadel-installer.img -drive format=qcow2,file=${BUILD_ROOT}/../qemu_disk/citadel_disk.qcow2"
echo "${QEMU} ${CITADEL_QEMU_ARGS}"
${QEMU} ${CITADEL_QEMU_ARGS}
}
boot_installed() {
if [ ! -f qemu_disk/citadel_disk.qcow2 ]; then
printf "The qemu disk is not found on the drive. Please run boot-to-install\n"
fi
CITADEL_QEMU_ARGS+=" ${COMMON_INSTALLER_ARGS} -drive format=qcow2,file=${BUILD_ROOT}/../qemu_disk/citadel_disk.qcow2"
echo "${QEMU} ${CITADEL_QEMU_ARGS}"
${QEMU} ${CITADEL_QEMU_ARGS}
}
boot_kernel() {
EXTRA_OPTIONS=""
KERNEL_IMAGE="bzImage"
@ -124,6 +158,10 @@ if [[ ${BOOT_TARGET} = "kernel" ]]; then
boot_kernel
elif [[ ${BOOT_TARGET} = "installer" ]]; then
boot_installer
elif [[ ${BOOT_TARGET} = "boot-to-install" ]]; then
boot_to_install
elif [[ ${BOOT_TARGET} = "boot-installed" ]]; then
boot_installed
else
usage
fi