diff --git a/nfs-utils-2.4.2-systemd-svcgssd.patch b/nfs-utils-2.4.2-systemd-svcgssd.patch index a02b178..c4247b0 100644 --- a/nfs-utils-2.4.2-systemd-svcgssd.patch +++ b/nfs-utils-2.4.2-systemd-svcgssd.patch @@ -1,14 +1,12 @@ diff -up nfs-utils-2.6.2/systemd/auth-rpcgss-module.service.orig nfs-utils-2.6.2/systemd/auth-rpcgss-module.service ---- nfs-utils-2.6.2/systemd/auth-rpcgss-module.service.orig 2022-12-05 16:05:29.432966511 -0500 -+++ nfs-utils-2.6.2/systemd/auth-rpcgss-module.service 2022-12-05 16:06:20.096192908 -0500 -@@ -7,8 +7,8 @@ +--- nfs-utils-2.6.2/systemd/auth-rpcgss-module.service.orig 2023-01-10 09:58:33.559453143 -0500 ++++ nfs-utils-2.6.2/systemd/auth-rpcgss-module.service 2023-01-10 10:07:27.476996363 -0500 +@@ -7,7 +7,7 @@ [Unit] Description=Kernel Module supporting RPCSEC_GSS DefaultDependencies=no -Before=gssproxy.service rpc-svcgssd.service rpc-gssd.service --Wants=gssproxy.service rpc-svcgssd.service rpc-gssd.service +Before=gssproxy.service rpc-gssd.service -+Wants=gssproxy.service rpc-gssd.service + Wants=gssproxy.service rpc-gssd.service ConditionPathExists=/etc/krb5.keytab ConditionVirtualization=!container - diff --git a/nfs-utils.2.6.3-rc5.patch b/nfs-utils.2.6.3-rc6.patch similarity index 76% rename from nfs-utils.2.6.3-rc5.patch rename to nfs-utils.2.6.3-rc6.patch index e688a0e..cc0ac67 100644 --- a/nfs-utils.2.6.3-rc5.patch +++ b/nfs-utils.2.6.3-rc6.patch @@ -1,5 +1,5 @@ diff --git a/.gitignore b/.gitignore -index df791a83..682153d5 100644 +index df791a8..682153d 100644 --- a/.gitignore +++ b/.gitignore @@ -86,3 +86,5 @@ systemd/rpc-gssd.service @@ -9,7 +9,7 @@ index df791a83..682153d5 100644 +# file generated by ctags +tags diff --git a/NEWS b/NEWS -index e70ae8ab..77872c5a 100644 +index e70ae8a..77872c5 100644 --- a/NEWS +++ b/NEWS @@ -1,32 +1,32 @@ @@ -72,7 +72,7 @@ index e70ae8ab..77872c5a 100644 defined order: diff --git a/README b/README -index 5e982409..3b0e771f 100644 +index 5e98240..3b0e771 100644 --- a/README +++ b/README @@ -25,7 +25,7 @@ Unpack the sources and run these commands: @@ -136,7 +136,7 @@ index 5e982409..3b0e771f 100644 chance to reclaim locks within the 90 second grace period. sm-notify is only needed for NFSv2 and NFSv3 support. diff --git a/configure.ac b/configure.ac -index f1c46c5c..7672a760 100644 +index f1c46c5..7672a76 100644 --- a/configure.ac +++ b/configure.ac @@ -71,18 +71,6 @@ AC_ARG_WITH(systemd, @@ -200,7 +200,7 @@ index f1c46c5c..7672a760 100644 AC_SUBST([_rpc_pipefsmount]) AC_CONFIG_COMMANDS_PRE([eval eval _rpc_pipefsmount=$rpc_pipefsmount]) diff --git a/support/export/auth.c b/support/export/auth.c -index 03ce4b8a..2d7960f1 100644 +index 03ce4b8..2d7960f 100644 --- a/support/export/auth.c +++ b/support/export/auth.c @@ -82,7 +82,7 @@ check_useipaddr(void) @@ -212,8 +212,61 @@ index 03ce4b8a..2d7960f1 100644 { struct stat stb; static ino_t last_inode; +diff --git a/support/export/cache.c b/support/export/cache.c +index a5823e9..2497d4f 100644 +--- a/support/export/cache.c ++++ b/support/export/cache.c +@@ -346,27 +346,27 @@ static int uuid_by_path(char *path, int type, size_t uuidlen, char *uuid) + + /* Possible sources of uuid are + * - blkid uuid +- * - statfs64 uuid ++ * - statfs uuid + * +- * On some filesystems (e.g. vfat) the statfs64 uuid is simply an ++ * On some filesystems (e.g. vfat) the statfs uuid is simply an + * encoding of the device that the filesystem is mounted from, so + * it we be very bad to use that (as device numbers change). blkid + * must be preferred. +- * On other filesystems (e.g. btrfs) the statfs64 uuid contains ++ * On other filesystems (e.g. btrfs) the statfs uuid contains + * important info that the blkid uuid cannot contain: This happens + * when multiple subvolumes are exported (they have the same +- * blkid uuid but different statfs64 uuids). ++ * blkid uuid but different statfs uuids). + * We rely on get_uuid_blkdev *knowing* which is which and not returning +- * a uuid for filesystems where the statfs64 uuid is better. ++ * a uuid for filesystems where the statfs uuid is better. + * + */ +- struct statfs64 st; ++ struct statfs st; + char fsid_val[17]; + const char *blkid_val = NULL; + const char *val; + int rc; + +- rc = nfsd_path_statfs64(path, &st); ++ rc = nfsd_path_statfs(path, &st); + + if (type == 0 && rc == 0) { + const unsigned long *bad; +diff --git a/support/export/client.c b/support/export/client.c +index ea4f89d..79164fe 100644 +--- a/support/export/client.c ++++ b/support/export/client.c +@@ -699,6 +699,9 @@ check_netgroup(const nfs_client *clp, const struct addrinfo *ai) + + /* check whether the IP itself is in the netgroup */ + ip = calloc(INET6_ADDRSTRLEN, 1); ++ if (ip == NULL) ++ goto out; ++ + if (inet_ntop(ai->ai_family, &(((struct sockaddr_in *)ai->ai_addr)->sin_addr), ip, INET6_ADDRSTRLEN) == ip) { + if (innetgr(netgroup, ip, NULL, NULL)) { + free(hname); diff --git a/support/export/v4clients.c b/support/export/v4clients.c -index 5f15b614..32302512 100644 +index 5f15b61..3230251 100644 --- a/support/export/v4clients.c +++ b/support/export/v4clients.c @@ -26,7 +26,7 @@ void v4clients_init(void) @@ -226,7 +279,7 @@ index 5f15b614..32302512 100644 return; if (clients_fd >= 0) diff --git a/support/export/v4root.c b/support/export/v4root.c -index c12a7d85..fbb0ad5f 100644 +index c12a7d8..fbb0ad5 100644 --- a/support/export/v4root.c +++ b/support/export/v4root.c @@ -198,7 +198,7 @@ static int v4root_add_parents(nfs_export *exp) @@ -239,7 +292,7 @@ index c12a7d85..fbb0ad5f 100644 nfs_export *exp; int i; diff --git a/support/export/xtab.c b/support/export/xtab.c -index c888a80a..e210ca99 100644 +index c888a80..e210ca9 100644 --- a/support/export/xtab.c +++ b/support/export/xtab.c @@ -135,7 +135,7 @@ xtab_write(char *xtab, char *xtabtmp, char *lockfn, int is_export) @@ -251,8 +304,144 @@ index c888a80a..e210ca99 100644 { return xtab_write(etab.statefn, etab.tmpfn, etab.lockfn, 1); } +diff --git a/support/include/nfsd_path.h b/support/include/nfsd_path.h +index 3b73aad..aa1e1dd 100644 +--- a/support/include/nfsd_path.h ++++ b/support/include/nfsd_path.h +@@ -7,7 +7,7 @@ + #include + + struct file_handle; +-struct statfs64; ++struct statfs; + + void nfsd_path_init(void); + +@@ -18,8 +18,8 @@ char * nfsd_path_prepend_dir(const char *dir, const char *pathname); + int nfsd_path_stat(const char *pathname, struct stat *statbuf); + int nfsd_path_lstat(const char *pathname, struct stat *statbuf); + +-int nfsd_path_statfs64(const char *pathname, +- struct statfs64 *statbuf); ++int nfsd_path_statfs(const char *pathname, ++ struct statfs *statbuf); + + char * nfsd_realpath(const char *path, char *resolved_path); + +diff --git a/support/junction/junction.c b/support/junction/junction.c +index 41cce26..0628bb0 100644 +--- a/support/junction/junction.c ++++ b/support/junction/junction.c +@@ -63,7 +63,7 @@ junction_open_path(const char *pathname, int *fd) + if (pathname == NULL || fd == NULL) + return FEDFS_ERR_INVAL; + +- tmp = open(pathname, O_DIRECTORY); ++ tmp = open(pathname, O_PATH|O_DIRECTORY); + if (tmp == -1) { + switch (errno) { + case EPERM: +@@ -93,7 +93,7 @@ junction_is_directory(int fd, const char *path) + { + struct stat stb; + +- if (fstat(fd, &stb) == -1) { ++ if (fstatat(fd, "", &stb, AT_NO_AUTOMOUNT|AT_EMPTY_PATH) == -1) { + xlog(D_GENERAL, "%s: failed to stat %s: %m", + __func__, path); + return FEDFS_ERR_ACCESS; +@@ -121,7 +121,7 @@ junction_is_sticky_bit_set(int fd, const char *path) + { + struct stat stb; + +- if (fstat(fd, &stb) == -1) { ++ if (fstatat(fd, "", &stb, AT_NO_AUTOMOUNT|AT_EMPTY_PATH) == -1) { + xlog(D_GENERAL, "%s: failed to stat %s: %m", + __func__, path); + return FEDFS_ERR_ACCESS; +@@ -155,7 +155,7 @@ junction_set_sticky_bit(int fd, const char *path) + { + struct stat stb; + +- if (fstat(fd, &stb) == -1) { ++ if (fstatat(fd, "", &stb, AT_NO_AUTOMOUNT|AT_EMPTY_PATH) == -1) { + xlog(D_GENERAL, "%s: failed to stat %s: %m", + __func__, path); + return FEDFS_ERR_ACCESS; +@@ -393,7 +393,7 @@ junction_get_mode(const char *pathname, mode_t *mode) + if (retval != FEDFS_OK) + return retval; + +- if (fstat(fd, &stb) == -1) { ++ if (fstatat(fd, "", &stb, AT_NO_AUTOMOUNT|AT_EMPTY_PATH) == -1) { + xlog(D_GENERAL, "%s: failed to stat %s: %m", + __func__, pathname); + (void)close(fd); +diff --git a/support/misc/nfsd_path.c b/support/misc/nfsd_path.c +index 65e53c1..c3dea4f 100644 +--- a/support/misc/nfsd_path.c ++++ b/support/misc/nfsd_path.c +@@ -184,46 +184,46 @@ nfsd_path_lstat(const char *pathname, struct stat *statbuf) + return nfsd_run_stat(nfsd_wq, nfsd_lstatfunc, pathname, statbuf); + } + +-struct nfsd_statfs64_data { ++struct nfsd_statfs_data { + const char *pathname; +- struct statfs64 *statbuf; ++ struct statfs *statbuf; + int ret; + int err; + }; + + static void +-nfsd_statfs64func(void *data) ++nfsd_statfsfunc(void *data) + { +- struct nfsd_statfs64_data *d = data; ++ struct nfsd_statfs_data *d = data; + +- d->ret = statfs64(d->pathname, d->statbuf); ++ d->ret = statfs(d->pathname, d->statbuf); + if (d->ret < 0) + d->err = errno; + } + + static int +-nfsd_run_statfs64(struct xthread_workqueue *wq, ++nfsd_run_statfs(struct xthread_workqueue *wq, + const char *pathname, +- struct statfs64 *statbuf) ++ struct statfs *statbuf) + { +- struct nfsd_statfs64_data data = { ++ struct nfsd_statfs_data data = { + pathname, + statbuf, + 0, + 0 + }; +- xthread_work_run_sync(wq, nfsd_statfs64func, &data); ++ xthread_work_run_sync(wq, nfsd_statfsfunc, &data); + if (data.ret < 0) + errno = data.err; + return data.ret; + } + + int +-nfsd_path_statfs64(const char *pathname, struct statfs64 *statbuf) ++nfsd_path_statfs(const char *pathname, struct statfs *statbuf) + { + if (!nfsd_wq) +- return statfs64(pathname, statbuf); +- return nfsd_run_statfs64(nfsd_wq, pathname, statbuf); ++ return statfs(pathname, statbuf); ++ return nfsd_run_statfs(nfsd_wq, pathname, statbuf); + } + + struct nfsd_realpath_data { diff --git a/support/nfs/xlog.c b/support/nfs/xlog.c -index e5861b9d..fa125cef 100644 +index e5861b9..fa125ce 100644 --- a/support/nfs/xlog.c +++ b/support/nfs/xlog.c @@ -46,11 +46,13 @@ int export_errno = 0; @@ -287,7 +476,7 @@ index e5861b9d..fa125cef 100644 void diff --git a/support/nfsidmap/regex.c b/support/nfsidmap/regex.c -index 958b4ac8..8424179f 100644 +index 958b4ac..8424179 100644 --- a/support/nfsidmap/regex.c +++ b/support/nfsidmap/regex.c @@ -542,7 +542,7 @@ struct trans_func regex_trans = { @@ -301,7 +490,7 @@ index 958b4ac8..8424179f 100644 } diff --git a/systemd/50-nfs.conf b/systemd/50-nfs.conf deleted file mode 100644 -index 19e8ee73..00000000 +index 19e8ee7..0000000 --- a/systemd/50-nfs.conf +++ /dev/null @@ -1,16 +0,0 @@ @@ -323,7 +512,7 @@ index 19e8ee73..00000000 -install nfs /sbin/modprobe --ignore-install nfs $CMDLINE_OPTS && { /sbin/sysctl -q --pattern fs.nfs --system; exit 0; } diff --git a/systemd/60-nfs.rules b/systemd/60-nfs.rules new file mode 100644 -index 00000000..188423c1 +index 0000000..188423c --- /dev/null +++ b/systemd/60-nfs.rules @@ -0,0 +1,21 @@ @@ -349,7 +538,7 @@ index 00000000..188423c1 +ACTION=="add", SUBSYSTEM=="module", KERNEL=="nfs", \ + RUN+="/sbin/sysctl -q --pattern ^fs.nfs --system" diff --git a/systemd/Makefile.am b/systemd/Makefile.am -index 7b5ab84b..577c6a22 100644 +index 7b5ab84..577c6a2 100644 --- a/systemd/Makefile.am +++ b/systemd/Makefile.am @@ -2,7 +2,8 @@ @@ -390,19 +579,35 @@ index 7b5ab84b..577c6a22 100644 + cp $(udev_files) $(DESTDIR)/$(udev_rulesdir) endif diff --git a/systemd/auth-rpcgss-module.service b/systemd/auth-rpcgss-module.service -index 45482833..25c9de80 100644 +index 4548283..4a69a7b 100644 --- a/systemd/auth-rpcgss-module.service +++ b/systemd/auth-rpcgss-module.service -@@ -10,6 +10,7 @@ DefaultDependencies=no +@@ -8,8 +8,9 @@ + Description=Kernel Module supporting RPCSEC_GSS + DefaultDependencies=no Before=gssproxy.service rpc-svcgssd.service rpc-gssd.service - Wants=gssproxy.service rpc-svcgssd.service rpc-gssd.service +-Wants=gssproxy.service rpc-svcgssd.service rpc-gssd.service ++Wants=gssproxy.service rpc-gssd.service ConditionPathExists=/etc/krb5.keytab +ConditionVirtualization=!container [Service] Type=oneshot +diff --git a/systemd/nfs-server.service b/systemd/nfs-server.service +index b432f91..2cdd786 100644 +--- a/systemd/nfs-server.service ++++ b/systemd/nfs-server.service +@@ -15,7 +15,7 @@ After=nfsdcld.service + Before=rpc-statd-notify.service + + # GSS services dependencies and ordering +-Wants=auth-rpcgss-module.service ++Wants=auth-rpcgss-module.service rpc-svcgssd.service + After=rpc-gssd.service gssproxy.service rpc-svcgssd.service + + [Service] diff --git a/systemd/nfs.conf.man b/systemd/nfs.conf.man -index e74083e9..bfd3380f 100644 +index e74083e..bfd3380 100644 --- a/systemd/nfs.conf.man +++ b/systemd/nfs.conf.man @@ -98,6 +98,12 @@ value, which can be one or more from the list @@ -427,7 +632,7 @@ index e74083e9..bfd3380f 100644 .BR grace-time , .BR lease-time , diff --git a/tools/Makefile.am b/tools/Makefile.am -index 40c17c37..48fd0cdf 100644 +index 40c17c3..48fd0cd 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -12,6 +12,10 @@ if CONFIG_NFSDCLD @@ -443,7 +648,7 @@ index 40c17c37..48fd0cdf 100644 MAINTAINERCLEANFILES = Makefile.in diff --git a/tools/nfs-iostat/nfs-iostat.py b/tools/nfs-iostat/nfs-iostat.py -index 1df74ba8..85294fb9 100755 +index 1df74ba..85294fb 100755 --- a/tools/nfs-iostat/nfs-iostat.py +++ b/tools/nfs-iostat/nfs-iostat.py @@ -43,7 +43,7 @@ NfsEventCounters = [ @@ -488,7 +693,7 @@ index 1df74ba8..85294fb9 100755 print('(%.1f pages per call)' % \ (float(pages_read - vfsreadpage) / vfsreadpages)) diff --git a/tools/nfsrahead/Makefile.am b/tools/nfsrahead/Makefile.am -index 845ea0d5..7e08233a 100644 +index 845ea0d..7e08233 100644 --- a/tools/nfsrahead/Makefile.am +++ b/tools/nfsrahead/Makefile.am @@ -1,6 +1,6 @@ @@ -499,8 +704,21 @@ index 845ea0d5..7e08233a 100644 nfsrahead_LDADD = ../../support/nfs/libnfsconf.la man5_MANS = nfsrahead.man +diff --git a/tools/nfsrahead/main.c b/tools/nfsrahead/main.c +index c83c6f7..8a11cf1 100644 +--- a/tools/nfsrahead/main.c ++++ b/tools/nfsrahead/main.c +@@ -167,7 +167,7 @@ int main(int argc, char **argv) + if ((ret = get_device_info(argv[optind], &device)) == 0) + break; + +- if (ret != 0) { ++ if (ret != 0 || device.fstype == NULL) { + xlog(D_GENERAL, "unable to find device %s\n", argv[optind]); + goto out; + } diff --git a/utils/blkmapd/device-discovery.c b/utils/blkmapd/device-discovery.c -index 2736ac89..a565fdbd 100644 +index 2736ac8..a565fdb 100644 --- a/utils/blkmapd/device-discovery.c +++ b/utils/blkmapd/device-discovery.c @@ -187,10 +187,7 @@ static void bl_add_disk(char *filepath) @@ -610,7 +828,7 @@ index 2736ac89..a565fdbd 100644 signal(SIGINT, sig_die); diff --git a/utils/blkmapd/device-discovery.h b/utils/blkmapd/device-discovery.h -index a86eed99..462aa943 100644 +index a86eed9..462aa94 100644 --- a/utils/blkmapd/device-discovery.h +++ b/utils/blkmapd/device-discovery.h @@ -151,6 +151,8 @@ uint64_t process_deviceinfo(const char *dev_addr_buf, @@ -623,7 +841,7 @@ index a86eed99..462aa943 100644 extern enum bl_path_state_e bldev_read_ap_state(int fd); extern int bl_discover_devices(void); diff --git a/utils/blkmapd/device-inq.c b/utils/blkmapd/device-inq.c -index c7952c3e..9e5749ef 100644 +index c7952c3..9e5749e 100644 --- a/utils/blkmapd/device-inq.c +++ b/utils/blkmapd/device-inq.c @@ -53,7 +53,7 @@ @@ -645,7 +863,7 @@ index c7952c3e..9e5749ef 100644 if (str) free(str); diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c -index 6ba615d1..0897b229 100644 +index 6ba615d..6d79a5b 100644 --- a/utils/exportfs/exportfs.c +++ b/utils/exportfs/exportfs.c @@ -69,14 +69,14 @@ static int _lockfd = -1; @@ -665,8 +883,26 @@ index 6ba615d1..0897b229 100644 { if (_lockfd != -1) { lockf(_lockfd, F_ULOCK, 0); +@@ -513,7 +513,7 @@ validate_export(nfs_export *exp) + */ + struct stat stb; + char *path = exportent_realpath(&exp->m_export); +- struct statfs64 stf; ++ struct statfs stf; + int fs_has_fsid = 0; + + if (stat(path, &stb) < 0) { +@@ -528,7 +528,7 @@ validate_export(nfs_export *exp) + if (!can_test()) + return; + +- if (!statfs64(path, &stf) && ++ if (!statfs(path, &stf) && + (stf.f_fsid.__val[0] || stf.f_fsid.__val[1])) + fs_has_fsid = 1; + diff --git a/utils/idmapd/idmapd.c b/utils/idmapd/idmapd.c -index e79c124d..cd9a965f 100644 +index e79c124..cd9a965 100644 --- a/utils/idmapd/idmapd.c +++ b/utils/idmapd/idmapd.c @@ -867,7 +867,7 @@ nfsdreopen_one(struct idmap_client *ic) @@ -679,7 +915,7 @@ index e79c124d..cd9a965f 100644 nfsdreopen_one(&nfsd_ic[IC_NAMEID]); nfsdreopen_one(&nfsd_ic[IC_IDNAME]); diff --git a/utils/mount/network.c b/utils/mount/network.c -index ed2f8253..01ead49f 100644 +index ed2f825..01ead49 100644 --- a/utils/mount/network.c +++ b/utils/mount/network.c @@ -179,7 +179,7 @@ static const unsigned long probe_mnt3_only[] = { @@ -692,7 +928,7 @@ index ed2f8253..01ead49f 100644 extern unsigned long config_default_proto; /* diff --git a/utils/mount/parse_dev.c b/utils/mount/parse_dev.c -index 0d3bcb95..2ade5d5d 100644 +index 0d3bcb9..2ade5d5 100644 --- a/utils/mount/parse_dev.c +++ b/utils/mount/parse_dev.c @@ -170,7 +170,8 @@ static int nfs_parse_square_bracket(const char *dev, @@ -706,7 +942,7 @@ index 0d3bcb95..2ade5d5d 100644 } } diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c -index 4016a761..249df00b 100644 +index 4016a76..249df00 100644 --- a/utils/nfsd/nfsd.c +++ b/utils/nfsd/nfsd.c @@ -23,6 +23,7 @@ @@ -770,7 +1006,7 @@ index 4016a761..249df00b 100644 do { error = nfssvc_set_sockets(protobits, haddr[i], port); diff --git a/utils/nfsd/nfsd.man b/utils/nfsd/nfsd.man -index 634b8a63..dc05f362 100644 +index 634b8a6..dc05f36 100644 --- a/utils/nfsd/nfsd.man +++ b/utils/nfsd/nfsd.man @@ -35,9 +35,17 @@ Note that diff --git a/nfs-utils.spec b/nfs-utils.spec index 157759c..0f2a796 100644 --- a/nfs-utils.spec +++ b/nfs-utils.spec @@ -2,7 +2,7 @@ Summary: NFS utilities and supporting clients and daemons for the kernel NFS ser Name: nfs-utils URL: http://linux-nfs.org/ Version: 2.6.2 -Release: 2.rc5%{?dist}.1 +Release: 2.rc6%{?dist}.1 Epoch: 1 # group all 32bit related archs @@ -14,7 +14,7 @@ Source2: lockd.conf Source3: 24-nfs-server.conf Source4: 10-nfsv4.conf -Patch001: nfs-utils.2.6.3-rc5.patch +Patch001: nfs-utils.2.6.3-rc6.patch Patch100: nfs-utils-1.2.1-statdpath-man.patch Patch101: nfs-utils-1.2.1-exp-subtree-warn-off.patch @@ -455,6 +455,9 @@ rm -rf /etc/systemd/system/rpc-*.requires %{_mandir}/*/nfsiostat.8.gz %changelog +* Sat Jan 21 2023 Steve Dickson 2.6.2-2.rc6 +- Updated to the latest RC release: nfs-utils-2-6-3-rc6 (bz 2160189) + * Thu Jan 19 2023 Fedora Release Engineering - 1:2.6.2-2.rc5.1 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild