Compare commits
No commits in common. "c8" and "c8s" have entirely different histories.
|
@ -1,3 +1,3 @@
|
|||
SOURCES/cmsfs-1.1.8c.tar.gz
|
||||
SOURCES/s390-tools-2.25.0.tar.gz
|
||||
SOURCES/s390-tools-2.6.0.tar.gz
|
||||
SOURCES/src_vipa-2.1.0.tar.gz
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
9c9a4e89bddb2b4e6e09ef6fc7c2e6f2ad6316de SOURCES/cmsfs-1.1.8c.tar.gz
|
||||
e8e0d3f651179fd14dc4a40d53a1e4ef6edaae7d SOURCES/s390-tools-2.25.0.tar.gz
|
||||
46a09493030c3c80987b7710e34a33462e4b90f4 SOURCES/s390-tools-2.6.0.tar.gz
|
||||
8ed8592a0a9370ce8422df9231ccb17f6cf49bed SOURCES/src_vipa-2.1.0.tar.gz
|
||||
|
|
|
@ -132,12 +132,8 @@ case "$COMMAND" in
|
|||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$NEWDEFAULT" ] && [ -f "${ZIPLCFG}" ]; then
|
||||
if grep -q "^default=" "${ZIPLCFG}"; then
|
||||
sed -i -e "s,^default=.*,default=${NEWDEFAULT}," "${ZIPLCFG}"
|
||||
else
|
||||
echo "default=${NEWDEFAULT}" >> "${ZIPLCFG}"
|
||||
fi
|
||||
if [ -n "$NEWDEFAULT" ]; then
|
||||
sed -i -e "s,^default=.*,default=${NEWDEFAULT}," "${ZIPLCFG}"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
|
@ -155,10 +151,8 @@ case "$COMMAND" in
|
|||
BLS_TARGET="${BLS_DIR}/${MACHINE_ID}-${KERNEL_VERSION}.conf"
|
||||
BLS_DEBUG="$(echo ${BLS_TARGET} | sed -e "s/${KERNEL_VERSION}/${KERNEL_VERSION}~debug/")"
|
||||
|
||||
if [ -f "${BLS_TARGET}" ] && [ -f "${ZIPLCFG}" ]; then
|
||||
TITLE="$(grep '^title[ \t]' "${BLS_TARGET}" | sed -e 's/^title[ \t]*//')"
|
||||
sed -i -e "/^default=${TITLE}/d" "${ZIPLCFG}"
|
||||
fi
|
||||
TITLE="$(grep '^title[ \t]' "${BLS_TARGET}" | sed -e 's/^title[ \t]*//')"
|
||||
sed -i -e "/^default=${TITLE}/d" "${ZIPLCFG}"
|
||||
|
||||
if [[ -f "${BLS_DEBUG}" ]]; then
|
||||
TITLE="$(grep '^title[ \t]' "${BLS_DEBUG}" | sed -e 's/^title[ \t]*//')"
|
||||
|
|
|
@ -24,25 +24,6 @@ get_config_line_by_subchannel()
|
|||
return 1
|
||||
}
|
||||
|
||||
# borrowed from network-scrips, initscripts along with the get_config_by_subchannel
|
||||
[ -z "$__sed_discard_ignored_files" ] && __sed_discard_ignored_files='/\(~\|\.bak\|\.old\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
|
||||
|
||||
get_config_by_subchannel ()
|
||||
{
|
||||
LANG=C grep -E -i -l \
|
||||
"^[[:space:]]*SUBCHANNELS=['\"]?([0-9]\.[0-9]\.[a-f0-9]+,){0,2}${1}(,[0-9]\.[0-9]\.[a-f0-9]+){0,2}['\"]?([[:space:]]+#|[[:space:]]*$)" \
|
||||
/etc/sysconfig/network-scripts/ifcfg-* \
|
||||
| LC_ALL=C sed -e "$__sed_discard_ignored_files"
|
||||
}
|
||||
|
||||
get_config_by_subchannel_nm ()
|
||||
{
|
||||
LANG=C grep -E -i -l \
|
||||
"^s390-subchannels=([0-9]\.[0-9]\.[a-f0-9]+;){0,2}${1};([0-9]\.[0-9]\.[a-f0-9]+;){0,2}$" \
|
||||
/etc/NetworkManager/system-connections/*.nmconnection \
|
||||
| LC_ALL=C sed -e "$__sed_discard_ignored_files"
|
||||
}
|
||||
|
||||
CHANNEL=${DEVPATH##*/}
|
||||
|
||||
if [ $MODE = "dracut" ]; then
|
||||
|
@ -68,19 +49,14 @@ if [ $MODE = "dracut" ]; then
|
|||
elif [ $MODE = "normal" ]; then
|
||||
NOLOCALE="yes"
|
||||
|
||||
. /etc/sysconfig/network-scripts/network-functions
|
||||
|
||||
CONFIG_FILE=$(get_config_by_subchannel $CHANNEL)
|
||||
|
||||
if [ -n "$CONFIG_FILE" ]; then
|
||||
. $CONFIG_FILE
|
||||
else
|
||||
CONFIG_FILE=$(get_config_by_subchannel_nm $CHANNEL)
|
||||
if [ -n "$CONFIG_FILE" ]; then
|
||||
NETTYPE=$(sed -nr "/^\[ethernet\]/ { :l /^s390-nettype[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" $CONFIG_FILE)
|
||||
SUBCHANNELS=$(sed -nr "/^\[ethernet\]/ { :l /^s390-subchannels[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" $CONFIG_FILE | sed -e "s/;/,/g" -e "s/,$//")
|
||||
LAYER2=$(sed -nr "/^\[ethernet-s390-options\]/ { :l /^layer2[ ]*=/ { s/.*=[ ]*//; p; q;}; n; b l;}" $CONFIG_FILE)
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo "Unknown mode=$MODE"
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
diff -up cmsfs-1.1.8c/cmsfslst.c.orig cmsfs-1.1.8c/cmsfslst.c
|
||||
--- cmsfs-1.1.8c/cmsfslst.c.orig 2020-08-19 09:47:36.459063820 +0000
|
||||
+++ cmsfs-1.1.8c/cmsfslst.c 2020-08-19 09:47:45.619063820 +0000
|
||||
@@ -49,7 +49,7 @@ int main(int argc,unsigned char *argv[])
|
||||
}
|
||||
|
||||
/* sanity check */
|
||||
- if (*devname == 0x00)
|
||||
+ if ((devname == NULL) || (*devname == 0x00))
|
||||
{
|
||||
(void) fprintf(stderr,"Please specify a CMS volume.\n");
|
||||
(void) fprintf(stderr,USAGE,argv[0]);
|
|
@ -306,14 +306,6 @@ if [ $MODE_ZNET ]; then
|
|||
eval "$line"
|
||||
free_device $SUBCHANNELS
|
||||
done
|
||||
for line in $(LANG=C grep -E -i -h \
|
||||
"^s390-subchannels=([0-9]\.[0-9]\.[a-f0-9]+;){2,3}$" \
|
||||
$( (ls /etc/NetworkManager/system-connections/*.nmconnection 2> /dev/null || echo "__no_config_file") | \
|
||||
LC_ALL=C sed -e "$__sed_discard_ignored_files") 2> /dev/null)
|
||||
do
|
||||
SUBCHANNELS="$(echo $line | sed -e "s/s390-subchannels=//" -e "s/;/,/g")"
|
||||
free_device $SUBCHANNELS
|
||||
done
|
||||
fi
|
||||
|
||||
[ -z "$ALL_DEVICES" ] && exit 0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,146 @@
|
|||
From ecf5a4ecb909bfd91306678d0c460ab2f2837a33 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
||||
Date: Mon, 18 Nov 2019 04:10:06 -0500
|
||||
Subject: [PATCH 1/3] zipl: drop redundant string duplication
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Dan Horák <dan@danny.cz>
|
||||
---
|
||||
zipl/src/scan.c | 9 +--------
|
||||
1 file changed, 1 insertion(+), 8 deletions(-)
|
||||
|
||||
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
||||
index 38fa5454..0ea37efa 100644
|
||||
--- a/zipl/src/scan.c
|
||||
+++ b/zipl/src/scan.c
|
||||
@@ -1575,7 +1575,6 @@ scan_check_bls(struct scan_token *scan)
|
||||
int i, rc;
|
||||
char *target_value = NULL;
|
||||
char *img_value = NULL;
|
||||
- char *buffer = NULL;
|
||||
/*
|
||||
* In the BLS case, each BLS section heading inherits a keyword
|
||||
* assignment target= from zipl.conf, and they are all the same.
|
||||
@@ -1609,14 +1608,8 @@ scan_check_bls(struct scan_token *scan)
|
||||
scan[i].content.keyword.value);
|
||||
return rc;
|
||||
}
|
||||
- buffer = (char *)
|
||||
- misc_malloc(strlen(img_value) + 1);
|
||||
- if (buffer == NULL)
|
||||
- return -1;
|
||||
- memcpy(buffer, img_value, strlen(img_value));
|
||||
- buffer[strlen(img_value)] = 0;
|
||||
free(scan[i].content.keyword.value);
|
||||
- scan[i].content.keyword.value = buffer;
|
||||
+ scan[i].content.keyword.value = img_value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
From 05f83569960e2774e819fe0942da1f92d0cce35b Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
||||
Date: Mon, 18 Nov 2019 04:29:04 -0500
|
||||
Subject: [PATCH 2/3] zipl: set reason not text for failed check
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Dan Horák <dan@danny.cz>
|
||||
---
|
||||
zipl/src/scan.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
||||
index 0ea37efa..0f01cac9 100644
|
||||
--- a/zipl/src/scan.c
|
||||
+++ b/zipl/src/scan.c
|
||||
@@ -1603,7 +1603,7 @@ scan_check_bls(struct scan_token *scan)
|
||||
scan[i].content.keyword.value);
|
||||
rc = misc_check_readable_file(img_value);
|
||||
if (rc) {
|
||||
- error_text(
|
||||
+ error_reason(
|
||||
"Image file '%s' is not accessible",
|
||||
scan[i].content.keyword.value);
|
||||
return rc;
|
||||
|
||||
From 8ab552b430f109d80966d0c56bed0d204d917d30 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
||||
Date: Mon, 18 Nov 2019 11:45:50 -0500
|
||||
Subject: [PATCH 3/3] zipl: fix handling of values with load address in BLS
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Various keywords (like image or ramdisk) allow specifying a load address
|
||||
as an optional argument. Adapt the logic for checking the presence of
|
||||
the files to take this into the account.
|
||||
|
||||
Fixes: https://github.com/ibm-s390-tools/s390-tools/commit/d71628326d80e623fc9f008fe4ea93edb5592b2e
|
||||
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1772054
|
||||
|
||||
Signed-off-by: Dan Horák <dan@danny.cz>
|
||||
---
|
||||
zipl/src/scan.c | 32 ++++++++++++++++++++++++++------
|
||||
1 file changed, 26 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
||||
index 0f01cac9..a34edf62 100644
|
||||
--- a/zipl/src/scan.c
|
||||
+++ b/zipl/src/scan.c
|
||||
@@ -1575,6 +1575,8 @@ scan_check_bls(struct scan_token *scan)
|
||||
int i, rc;
|
||||
char *target_value = NULL;
|
||||
char *img_value = NULL;
|
||||
+ char *file = NULL;
|
||||
+ char *tmp, *value;
|
||||
/*
|
||||
* In the BLS case, each BLS section heading inherits a keyword
|
||||
* assignment target= from zipl.conf, and they are all the same.
|
||||
@@ -1595,19 +1597,37 @@ scan_check_bls(struct scan_token *scan)
|
||||
if (scan[i].content.keyword.keyword == scan_keyword_image ||
|
||||
scan[i].content.keyword.keyword == scan_keyword_ramdisk) {
|
||||
|
||||
- rc = misc_check_readable_file(
|
||||
- scan[i].content.keyword.value);
|
||||
+ value = scan[i].content.keyword.value;
|
||||
+ /*
|
||||
+ * put the filename only into the file var before
|
||||
+ * checking its presence
|
||||
+ */
|
||||
+ if (contains_address(value)) {
|
||||
+ tmp = strrchr(value, ',');
|
||||
+ file = strndup(value, tmp - value);
|
||||
+ } else {
|
||||
+ file = value;
|
||||
+ }
|
||||
+ rc = misc_check_readable_file(file);
|
||||
if (rc) {
|
||||
misc_asprintf(&img_value, "%s%s",
|
||||
- target_value,
|
||||
- scan[i].content.keyword.value);
|
||||
+ target_value, file);
|
||||
rc = misc_check_readable_file(img_value);
|
||||
if (rc) {
|
||||
error_reason(
|
||||
- "Image file '%s' is not accessible",
|
||||
- scan[i].content.keyword.value);
|
||||
+ "File '%s' not accessible", file);
|
||||
return rc;
|
||||
}
|
||||
+ /*
|
||||
+ * when file has stripped the load address part,
|
||||
+ * do generate a prefixed value
|
||||
+ */
|
||||
+ if (file != value) {
|
||||
+ free(file);
|
||||
+ free(img_value);
|
||||
+ misc_asprintf(&img_value, "%s%s",
|
||||
+ target_value, value);
|
||||
+ }
|
||||
free(scan[i].content.keyword.value);
|
||||
scan[i].content.keyword.value = img_value;
|
||||
}
|
|
@ -1,348 +0,0 @@
|
|||
From a17c57bf2b7b6d64a509cb5fb02fe46849bc550c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
|
||||
Date: Mon, 20 Jun 2022 17:43:05 +0200
|
||||
Subject: [PATCH 1/2] Revert "zipl/src: Implement sorting bls entries by
|
||||
versions"
|
||||
|
||||
This reverts commit a0dba6bfdb50ff373fa710ffe2a307cc0748f18b.
|
||||
---
|
||||
zipl/src/scan.c | 139 ++----------------------------------------------
|
||||
1 file changed, 3 insertions(+), 136 deletions(-)
|
||||
|
||||
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
||||
index 0cea1d4..9352f76 100644
|
||||
--- a/zipl/src/scan.c
|
||||
+++ b/zipl/src/scan.c
|
||||
@@ -10,7 +10,6 @@
|
||||
*
|
||||
*/
|
||||
|
||||
-static const char *VERSION_KEYWORD = "version";
|
||||
|
||||
/* Need ISOC99 function isblank() in ctype.h */
|
||||
#ifndef __USE_ISOC99
|
||||
@@ -646,7 +645,7 @@ scan_file(const char* filename, struct scan_token** token)
|
||||
|
||||
|
||||
static int
|
||||
-bls_filter_by_names(const struct dirent *ent)
|
||||
+bls_filter(const struct dirent *ent)
|
||||
{
|
||||
int offset = strlen(ent->d_name) - strlen(".conf");
|
||||
|
||||
@@ -656,111 +655,13 @@ bls_filter_by_names(const struct dirent *ent)
|
||||
return strncmp(ent->d_name + offset, ".conf", strlen(".conf")) == 0;
|
||||
}
|
||||
|
||||
-struct version {
|
||||
- char *line; /* pointer to a line with version keyword */
|
||||
- int offset; /* offset of version value in the line */
|
||||
-};
|
||||
-
|
||||
-/*
|
||||
- * Locate version in bls file represented by ENT
|
||||
- */
|
||||
-static void get_version(const struct dirent *ent, struct version *v)
|
||||
-{
|
||||
- char *line = NULL;
|
||||
- size_t len = 0;
|
||||
- char *d_name;
|
||||
- FILE *stream;
|
||||
- ssize_t read;
|
||||
-
|
||||
- memset(v, 0, sizeof(*v));
|
||||
- d_name = misc_make_path((char *)blsdir, (char *)ent->d_name);
|
||||
- if (!d_name)
|
||||
- return;
|
||||
-
|
||||
- stream = fopen(d_name, "r");
|
||||
- free(d_name);
|
||||
- if (!stream)
|
||||
- return;
|
||||
-
|
||||
- while ((read = getline(&line, &len, stream)) != -1) {
|
||||
- if (line[read - 1] == '\n') {
|
||||
- line[read - 1] = '\0';
|
||||
- read--;
|
||||
- }
|
||||
- if ((size_t)read <= strlen(VERSION_KEYWORD) + 1)
|
||||
- continue;
|
||||
- if (strcmp(VERSION_KEYWORD, line) > 0)
|
||||
- continue;
|
||||
- if (!isblank(line[strlen(VERSION_KEYWORD)]))
|
||||
- continue;
|
||||
- /* skip blanks */
|
||||
- v->offset = strlen(VERSION_KEYWORD) + 1;
|
||||
- while (v->offset < read - 1 && isblank(line[v->offset]))
|
||||
- v->offset++;
|
||||
- if (isblank(line[v->offset]))
|
||||
- /*
|
||||
- * all characters after the keyword
|
||||
- * are blanks. Invalid version
|
||||
- */
|
||||
- continue;
|
||||
- v->line = line;
|
||||
- fclose(stream);
|
||||
- return;
|
||||
- }
|
||||
- free(line);
|
||||
- fclose(stream);
|
||||
-}
|
||||
-
|
||||
-static void put_version(struct version *v)
|
||||
-{
|
||||
- free(v->line);
|
||||
-}
|
||||
-
|
||||
-/**
|
||||
- * Check version in bls file represented by ENT.
|
||||
- * Return 1 if version is valid. Otherwise return 0
|
||||
- */
|
||||
-static int bls_filter_by_versions(const struct dirent *ent)
|
||||
-{
|
||||
- struct version v;
|
||||
-
|
||||
- if (bls_filter_by_names(ent) == 0)
|
||||
- return 0;
|
||||
-
|
||||
- get_version(ent, &v);
|
||||
- if (v.line) {
|
||||
- put_version(&v);
|
||||
- return 1;
|
||||
- }
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
|
||||
static int
|
||||
-bls_sort_by_names(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||
+bls_sort(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||
{
|
||||
return strverscmp((*ent_a)->d_name, (*ent_b)->d_name);
|
||||
}
|
||||
|
||||
-static int
|
||||
-bls_sort_by_versions(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||
-{
|
||||
- struct version v1, v2;
|
||||
- int ret;
|
||||
-
|
||||
- get_version(*ent_a, &v1);
|
||||
- get_version(*ent_b, &v2);
|
||||
- /*
|
||||
- * Both versions are valid.
|
||||
- * It is guaranteed by bls_filter_by_versions()
|
||||
- */
|
||||
- ret = strverscmp(v1.line + v1.offset, v2.line + v2.offset);
|
||||
-
|
||||
- put_version(&v1);
|
||||
- put_version(&v2);
|
||||
-
|
||||
- return ret;
|
||||
-}
|
||||
|
||||
static int
|
||||
scan_append_section_heading(struct scan_token* scan, int* index, char* name);
|
||||
@@ -1110,40 +1011,6 @@ scan_count_target_keywords(char* keyword[])
|
||||
return num;
|
||||
}
|
||||
|
||||
-static int bls_scandir(struct dirent ***bls_entries)
|
||||
-{
|
||||
- struct dirent **entries1;
|
||||
- struct dirent **entries2;
|
||||
- int n1, n2;
|
||||
-
|
||||
- /* arrange by names */
|
||||
- n1 = scandir(blsdir, &entries1,
|
||||
- bls_filter_by_names, bls_sort_by_names);
|
||||
- if (n1 <= 0)
|
||||
- return n1;
|
||||
- /* arrange by versions */
|
||||
- n2 = scandir(blsdir, &entries2,
|
||||
- bls_filter_by_versions, bls_sort_by_versions);
|
||||
-
|
||||
- if (n2 <= 0 || n2 < n1) {
|
||||
- /*
|
||||
- * failed to sort by versions,
|
||||
- * fall back to sorting by filenames
|
||||
- */
|
||||
- *bls_entries = entries1;
|
||||
- while (n2--)
|
||||
- free(entries2[n2]);
|
||||
- free(entries2);
|
||||
- return n1;
|
||||
- }
|
||||
- /* use arrangement by versions */
|
||||
- *bls_entries = entries2;
|
||||
- while (n1--)
|
||||
- free(entries1[n1]);
|
||||
- free(entries1);
|
||||
- return n2;
|
||||
-}
|
||||
-
|
||||
int
|
||||
scan_check_target_data(char* keyword[], int* line)
|
||||
{
|
||||
@@ -1464,7 +1331,7 @@ int scan_bls(struct scan_token **token, int scan_size)
|
||||
if (!(stat(blsdir, &sb) == 0 && S_ISDIR(sb.st_mode)))
|
||||
return 0;
|
||||
|
||||
- n = bls_scandir(&bls_entries);
|
||||
+ n = scandir(blsdir, &bls_entries, bls_filter, bls_sort);
|
||||
if (n <= 0)
|
||||
return n;
|
||||
|
||||
--
|
||||
2.38.1
|
||||
|
||||
|
||||
From 7a51cfc15b870d90bffe1e24a1da922663ffe1d7 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Mon, 20 Jun 2022 17:46:59 +0200
|
||||
Subject: [PATCH 2/2] blscfg: sort like rpm nvr, not like a single version
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
Signed-off-by: Dan Horák <dan@danny.cz>
|
||||
---
|
||||
zipl/src/Makefile | 1 +
|
||||
zipl/src/scan.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
2 files changed, 95 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/zipl/src/Makefile b/zipl/src/Makefile
|
||||
index 64eabe4..7043005 100644
|
||||
--- a/zipl/src/Makefile
|
||||
+++ b/zipl/src/Makefile
|
||||
@@ -9,6 +9,7 @@ ALL_LDFLAGS += -Wl,-z,noexecstack $(NO_PIE_LDFLAGS)
|
||||
|
||||
libs = $(rootdir)/libutil/libutil.a \
|
||||
$(rootdir)/libvtoc/libvtoc.a \
|
||||
+ -lrpmio -lrpm
|
||||
|
||||
objects = misc.o error.o scan.o job.o boot.o bootmap.o fs-map.o disk.o \
|
||||
bootmap_header.o envblk.o install.o zipl.o $(rootdir)/zipl/boot/data.o
|
||||
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
||||
index 9352f76..3327e2d 100644
|
||||
--- a/zipl/src/scan.c
|
||||
+++ b/zipl/src/scan.c
|
||||
@@ -35,6 +35,8 @@
|
||||
|
||||
#include "lib/util_base.h"
|
||||
|
||||
+#include <rpm/rpmlib.h>
|
||||
+
|
||||
#include "boot.h"
|
||||
#include "error.h"
|
||||
#include "misc.h"
|
||||
@@ -655,13 +657,103 @@ bls_filter(const struct dirent *ent)
|
||||
return strncmp(ent->d_name + offset, ".conf", strlen(".conf")) == 0;
|
||||
}
|
||||
|
||||
+/* returns name/version/release */
|
||||
+/* NULL string pointer returned if nothing found */
|
||||
+static void
|
||||
+split_package_string (char *package_string, char **name,
|
||||
+ char **version, char **release)
|
||||
+{
|
||||
+ char *package_version, *package_release;
|
||||
+
|
||||
+ /* Release */
|
||||
+ package_release = strrchr (package_string, '-');
|
||||
+
|
||||
+ if (package_release != NULL)
|
||||
+ *package_release++ = '\0';
|
||||
+
|
||||
+ *release = package_release;
|
||||
+
|
||||
+ /* Version */
|
||||
+ package_version = strrchr(package_string, '-');
|
||||
+
|
||||
+ if (package_version != NULL)
|
||||
+ *package_version++ = '\0';
|
||||
+
|
||||
+ *version = package_version;
|
||||
+ /* Name */
|
||||
+ *name = package_string;
|
||||
+
|
||||
+ /* Bubble up non-null values from release to name */
|
||||
+ if (name != NULL && *name == NULL) {
|
||||
+ *name = (*version == NULL ? *release : *version);
|
||||
+ *version = *release;
|
||||
+ *release = NULL;
|
||||
+ }
|
||||
+ if (*version == NULL) {
|
||||
+ *version = *release;
|
||||
+ *release = NULL;
|
||||
+ }
|
||||
+}
|
||||
|
||||
static int
|
||||
-bls_sort(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||
+split_cmp(char *nvr0, char *nvr1, int has_name)
|
||||
+{
|
||||
+ int ret = 0;
|
||||
+ char *name0, *version0, *release0;
|
||||
+ char *name1, *version1, *release1;
|
||||
+
|
||||
+ split_package_string(nvr0, has_name ? &name0 : NULL, &version0, &release0);
|
||||
+ split_package_string(nvr1, has_name ? &name1 : NULL, &version1, &release1);
|
||||
+
|
||||
+ if (has_name) {
|
||||
+ ret = rpmvercmp(name0 == NULL ? "" : name0,
|
||||
+ name1 == NULL ? "" : name1);
|
||||
+ if (ret != 0)
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = rpmvercmp(version0 == NULL ? "" : version0,
|
||||
+ version1 == NULL ? "" : version1);
|
||||
+ if (ret != 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = rpmvercmp(release0 == NULL ? "" : release0,
|
||||
+ release1 == NULL ? "" : release1);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/* return 1: filename0 is newer than filename1 */
|
||||
+/* 0: filename0 and filename1 are the same version */
|
||||
+/* -1: filename1 is newer than filename0 */
|
||||
+static int bls_cmp(const char *filename0, const char *filename1)
|
||||
{
|
||||
- return strverscmp((*ent_a)->d_name, (*ent_b)->d_name);
|
||||
+ char *id0, *id1;
|
||||
+ int l, r;
|
||||
+
|
||||
+ id0 = strdup(filename0);
|
||||
+ id1 = strdup(filename1);
|
||||
+
|
||||
+ l = strlen(id0);
|
||||
+ if (l > 5 && strcmp(id0 + l - 5, ".conf"))
|
||||
+ id0[l-5] = '\0';
|
||||
+
|
||||
+ l = strlen(id1);
|
||||
+ if (l > 5 && strcmp(id1 + l - 5, ".conf"))
|
||||
+ id1[l-5] = '\0';
|
||||
+
|
||||
+ r = split_cmp(id0, id1, 1);
|
||||
+
|
||||
+ free(id0);
|
||||
+ free(id1);
|
||||
+
|
||||
+ return r;
|
||||
}
|
||||
|
||||
+static int
|
||||
+bls_sort(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||
+{
|
||||
+ return bls_cmp((*ent_a)->d_name, (*ent_b)->d_name);
|
||||
+}
|
||||
|
||||
static int
|
||||
scan_append_section_heading(struct scan_token* scan, int* index, char* name);
|
||||
--
|
||||
2.38.1
|
||||
|
|
@ -61,10 +61,10 @@ index 871935c783f..d8d5eca5867 100755
|
|||
;;
|
||||
--)
|
||||
shift
|
||||
diff --git a/scripts/zipl-switch-to-blscfg.8 b/scripts/zipl-switch-to-blscfg.8
|
||||
diff --git a/scripts/zipl-switch-to-blscfg.1 b/scripts/zipl-switch-to-blscfg.1
|
||||
index 6bd14d00d14..71b904ffd1c 100644
|
||||
--- a/scripts/zipl-switch-to-blscfg.8
|
||||
+++ b/scripts/zipl-switch-to-blscfg.8
|
||||
--- a/scripts/zipl-switch-to-blscfg.1
|
||||
+++ b/scripts/zipl-switch-to-blscfg.1
|
||||
@@ -37,9 +37,9 @@ The DIRECTORY where the BLS fragments will be generated. The directory is create
|
||||
The FILE used for zipl configuration file, defaults to /etc/zipl.conf.
|
||||
|
||||
|
|
|
@ -0,0 +1,147 @@
|
|||
From 8ec7b75204f3c7bf691e14b89c73c5dd28d2a824 Mon Sep 17 00:00:00 2001
|
||||
From: Peter Jones <pjones@redhat.com>
|
||||
Date: Mon, 15 Oct 2018 13:54:16 -0400
|
||||
Subject: [PATCH] blscfg: sort like rpm nvr, not like a single version
|
||||
|
||||
Signed-off-by: Peter Jones <pjones@redhat.com>
|
||||
---
|
||||
zipl/src/scan.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++-
|
||||
zipl/src/Makefile | 3 +-
|
||||
2 files changed, 96 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/zipl/src/scan.c b/zipl/src/scan.c
|
||||
index fe72e9ab13d..63186222783 100644
|
||||
--- a/zipl/src/scan.c
|
||||
+++ b/zipl/src/scan.c
|
||||
@@ -33,6 +33,8 @@
|
||||
|
||||
#include "lib/util_base.h"
|
||||
|
||||
+#include <rpm/rpmlib.h>
|
||||
+
|
||||
#include "boot.h"
|
||||
#include "error.h"
|
||||
#include "misc.h"
|
||||
@@ -652,14 +654,104 @@ bls_filter(const struct dirent *ent)
|
||||
return strncmp(ent->d_name + offset, ".conf", strlen(".conf")) == 0;
|
||||
}
|
||||
|
||||
+/* returns name/version/release */
|
||||
+/* NULL string pointer returned if nothing found */
|
||||
+static void
|
||||
+split_package_string (char *package_string, char **name,
|
||||
+ char **version, char **release)
|
||||
+{
|
||||
+ char *package_version, *package_release;
|
||||
+
|
||||
+ /* Release */
|
||||
+ package_release = strrchr (package_string, '-');
|
||||
+
|
||||
+ if (package_release != NULL)
|
||||
+ *package_release++ = '\0';
|
||||
+
|
||||
+ *release = package_release;
|
||||
+
|
||||
+ /* Version */
|
||||
+ package_version = strrchr(package_string, '-');
|
||||
+
|
||||
+ if (package_version != NULL)
|
||||
+ *package_version++ = '\0';
|
||||
+
|
||||
+ *version = package_version;
|
||||
+ /* Name */
|
||||
+ *name = package_string;
|
||||
+
|
||||
+ /* Bubble up non-null values from release to name */
|
||||
+ if (name != NULL && *name == NULL) {
|
||||
+ *name = (*version == NULL ? *release : *version);
|
||||
+ *version = *release;
|
||||
+ *release = NULL;
|
||||
+ }
|
||||
+ if (*version == NULL) {
|
||||
+ *version = *release;
|
||||
+ *release = NULL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+split_cmp(char *nvr0, char *nvr1, int has_name)
|
||||
+{
|
||||
+ int ret = 0;
|
||||
+ char *name0, *version0, *release0;
|
||||
+ char *name1, *version1, *release1;
|
||||
+
|
||||
+ split_package_string(nvr0, has_name ? &name0 : NULL, &version0, &release0);
|
||||
+ split_package_string(nvr1, has_name ? &name1 : NULL, &version1, &release1);
|
||||
+
|
||||
+ if (has_name) {
|
||||
+ ret = rpmvercmp(name0 == NULL ? "" : name0,
|
||||
+ name1 == NULL ? "" : name1);
|
||||
+ if (ret != 0)
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ ret = rpmvercmp(version0 == NULL ? "" : version0,
|
||||
+ version1 == NULL ? "" : version1);
|
||||
+ if (ret != 0)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = rpmvercmp(release0 == NULL ? "" : release0,
|
||||
+ release1 == NULL ? "" : release1);
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+/* return 1: filename0 is newer than filename1 */
|
||||
+/* 0: filename0 and filename1 are the same version */
|
||||
+/* -1: filename1 is newer than filename0 */
|
||||
+static int bls_cmp(const char *filename0, const char *filename1)
|
||||
+{
|
||||
+ char *id0, *id1;
|
||||
+ int l, r;
|
||||
+
|
||||
+ id0 = strdup(filename0);
|
||||
+ id1 = strdup(filename1);
|
||||
+
|
||||
+ l = strlen(id0);
|
||||
+ if (l > 5 && strcmp(id0 + l - 5, ".conf"))
|
||||
+ id0[l-5] = '\0';
|
||||
+
|
||||
+ l = strlen(id1);
|
||||
+ if (l > 5 && strcmp(id1 + l - 5, ".conf"))
|
||||
+ id1[l-5] = '\0';
|
||||
+
|
||||
+ r = split_cmp(id0, id1, 1);
|
||||
+
|
||||
+ free(id0);
|
||||
+ free(id1);
|
||||
+
|
||||
+ return r;
|
||||
+}
|
||||
|
||||
static int
|
||||
bls_sort(const struct dirent **ent_a, const struct dirent **ent_b)
|
||||
{
|
||||
- return strverscmp((*ent_a)->d_name, (*ent_b)->d_name);
|
||||
+ return bls_cmp((*ent_a)->d_name, (*ent_b)->d_name);
|
||||
}
|
||||
|
||||
-
|
||||
static int
|
||||
scan_append_section_heading(struct scan_token* scan, int* index, char* name);
|
||||
static int
|
||||
diff --git a/zipl/src/Makefile b/zipl/src/Makefile
|
||||
index 1634c0d5121..bc797990652 100644
|
||||
--- a/zipl/src/Makefile
|
||||
+++ b/zipl/src/Makefile
|
||||
@@ -7,7 +7,7 @@ ALL_CPPFLAGS += -I../include -I../boot \
|
||||
-D_FILE_OFFSET_BITS=64 $(NO_PIE_CFLAGS)
|
||||
ALL_LDFLAGS += -Wl,-z,noexecstack $(NO_PIE_LDFLAGS)
|
||||
|
||||
-libs = $(rootdir)/libutil/libutil.a
|
||||
+libs = $(rootdir)/libutil/libutil.a -lrpm
|
||||
|
||||
objects = misc.o error.o scan.o job.o boot.o bootmap.o disk.o \
|
||||
install.o zipl.o $(rootdir)/zipl/boot/data.o
|
||||
--
|
||||
2.17.1
|
||||
|
|
@ -1,205 +0,0 @@
|
|||
From 48324b579e825a30110abac0369e9d544350ead1 Mon Sep 17 00:00:00 2001
|
||||
From: Steffen Eiden <seiden@linux.ibm.com>
|
||||
Date: Wed, 14 Dec 2022 14:25:21 +0100
|
||||
Subject: [PATCH 1/4] zdump: replace atomic refcount with atomic int
|
||||
|
||||
(Atomic) refcounting was introduced in glib2.58.
|
||||
We want to support v2.56 as well, so replace it with int and the atomic
|
||||
operations introduced in glib 2.4.
|
||||
|
||||
Fixes: https://github.com/ibm-s390-linux/s390-tools/issues/146
|
||||
Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
|
||||
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
|
||||
---
|
||||
zdump/pv_utils.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/zdump/pv_utils.c b/zdump/pv_utils.c
|
||||
index 6d9f0bb..a39bfc5 100644
|
||||
--- a/zdump/pv_utils.c
|
||||
+++ b/zdump/pv_utils.c
|
||||
@@ -674,7 +674,7 @@ struct _storage_state_mmap {
|
||||
size_t mapped_size;
|
||||
pv_tweak_component_t *tweak_components;
|
||||
size_t num_tweaks;
|
||||
- gatomicrefcount ref_count;
|
||||
+ int ref_count;
|
||||
};
|
||||
|
||||
storage_state_mmap_t *storage_state_mmap_new(const int fd, const size_t file_size, const u64 offset,
|
||||
@@ -733,14 +733,14 @@ storage_state_mmap_t *storage_state_mmap_new(const int fd, const size_t file_siz
|
||||
ret->tweak_components = (pv_tweak_component_t *)(ptr + in_page_offset);
|
||||
ret->num_tweaks = tweak_components_cnt;
|
||||
ret->mapped_size = mmapped_size;
|
||||
- g_atomic_ref_count_init(&ret->ref_count);
|
||||
+ ret->ref_count = 1;
|
||||
return g_steal_pointer(&ret);
|
||||
}
|
||||
|
||||
storage_state_mmap_t *storage_state_mmap_ref(storage_state_mmap_t *storage_state)
|
||||
{
|
||||
g_assert(storage_state);
|
||||
- g_atomic_ref_count_inc(&storage_state->ref_count);
|
||||
+ g_atomic_int_inc(&storage_state->ref_count);
|
||||
return storage_state;
|
||||
}
|
||||
|
||||
@@ -748,7 +748,7 @@ void storage_state_mmap_unref(storage_state_mmap_t *storage_state)
|
||||
{
|
||||
if (!storage_state)
|
||||
return;
|
||||
- if (storage_state->ref_count && !g_atomic_ref_count_dec(&storage_state->ref_count))
|
||||
+ if (storage_state->ref_count && !g_atomic_int_dec_and_test(&storage_state->ref_count))
|
||||
return;
|
||||
if (storage_state->first_page_ptr) {
|
||||
int rc = munmap(storage_state->first_page_ptr, storage_state->mapped_size);
|
||||
--
|
||||
2.39.1
|
||||
|
||||
|
||||
From 4007220d35a9e33186fdfe3a4b5c22cd2eea9bb9 Mon Sep 17 00:00:00 2001
|
||||
From: Steffen Eiden <seiden@linux.ibm.com>
|
||||
Date: Wed, 14 Dec 2022 13:53:29 +0100
|
||||
Subject: [PATCH 2/4] libpv: disallow glib features from after 2.56
|
||||
|
||||
Enforce that the first glib.h include is done via glib-helper.h for libpv
|
||||
so that glib version checks are in place.
|
||||
|
||||
Change zdump and pvattest such that they never include glibstuff before
|
||||
libpv/glib-helper.h
|
||||
|
||||
Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
|
||||
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
|
||||
---
|
||||
include/libpv/glib-helper.h | 6 ++++++
|
||||
pvattest/src/common.h | 2 +-
|
||||
zdump/dfi_pv_elf.c | 1 -
|
||||
3 files changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/libpv/glib-helper.h b/include/libpv/glib-helper.h
|
||||
index 5d3df50..9f90b28 100644
|
||||
--- a/include/libpv/glib-helper.h
|
||||
+++ b/include/libpv/glib-helper.h
|
||||
@@ -18,6 +18,12 @@
|
||||
#define GLIB_VERSION_MIN_REQUIRED GLIB_VERSION_2_56
|
||||
#endif
|
||||
|
||||
+#define GLIB_VERSION_MAX_ALLOWED GLIB_VERSION_2_56
|
||||
+
|
||||
+#ifdef __G_LIB_H__
|
||||
+#error "glib.h must be included via libpv/glib-helper.h"
|
||||
+#endif
|
||||
+
|
||||
#include <glib.h>
|
||||
#include <gmodule.h>
|
||||
#include <stdio.h>
|
||||
diff --git a/pvattest/src/common.h b/pvattest/src/common.h
|
||||
index e2e3ef1..43d2ab9 100644
|
||||
--- a/pvattest/src/common.h
|
||||
+++ b/pvattest/src/common.h
|
||||
@@ -11,10 +11,10 @@
|
||||
/* Must be included before any other header */
|
||||
#include "config.h"
|
||||
|
||||
-#include <glib/gi18n.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "libpv/glib-helper.h"
|
||||
+#include <glib/gi18n.h>
|
||||
#include "libpv/macros.h"
|
||||
#include "lib/zt_common.h"
|
||||
|
||||
diff --git a/zdump/dfi_pv_elf.c b/zdump/dfi_pv_elf.c
|
||||
index 8d1021e..9d33e8f 100644
|
||||
--- a/zdump/dfi_pv_elf.c
|
||||
+++ b/zdump/dfi_pv_elf.c
|
||||
@@ -21,7 +21,6 @@
|
||||
#include <elf.h>
|
||||
#include <errno.h>
|
||||
|
||||
-#include <glib.h>
|
||||
#include <openssl/bio.h>
|
||||
#include <openssl/crypto.h>
|
||||
|
||||
--
|
||||
2.39.1
|
||||
|
||||
|
||||
From fb01fb45bb6a9e62313e9cdb79ad5ed39471cfe7 Mon Sep 17 00:00:00 2001
|
||||
From: Marc Hartmayer <mhartmay@linux.ibm.com>
|
||||
Date: Mon, 19 Dec 2022 09:51:51 +0000
|
||||
Subject: [PATCH 3/4] zgetdump/Makefile: don't use `.check_dep_zgetdump` as
|
||||
linker input
|
||||
|
||||
The `.check_dep_zgetdump` file is used to cache the result of the
|
||||
dependency checks and should not be used as input for linking or
|
||||
anything else. Let's add it as dependency for the objects file. This
|
||||
shouldn't cause any problems since the Makefile rule for object files is
|
||||
defined in `common.mak` as follows:
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(ALL_CPPFLAGS) $(ALL_CFLAGS) -c $< -o $@
|
||||
|
||||
Fixes: https://github.com/ibm-s390-linux/s390-tools/issues/147
|
||||
Fixes: 8d8d5e9746a4 ("zdump: Fix Makefile dependencies")
|
||||
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
|
||||
Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com>
|
||||
Signed-off-by: Jan Hoeppner <hoeppner@linux.ibm.com>
|
||||
---
|
||||
zdump/Makefile | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/zdump/Makefile b/zdump/Makefile
|
||||
index ca8aadc..934dc47 100644
|
||||
--- a/zdump/Makefile
|
||||
+++ b/zdump/Makefile
|
||||
@@ -119,7 +119,9 @@ libs = $(rootdir)/libutil/libutil.a $(LIBPV)
|
||||
|
||||
all: $(BUILD_TARGETS)
|
||||
|
||||
-zgetdump: .check_dep_zgetdump $(OBJECTS) $(libs)
|
||||
+$(OBJECTS): .check_dep_zgetdump
|
||||
+
|
||||
+zgetdump: $(OBJECTS) $(libs)
|
||||
|
||||
skip-zgetdump:
|
||||
echo " SKIP zgetdump due to unresolved dependencies"
|
||||
--
|
||||
2.39.1
|
||||
|
||||
|
||||
From 1ad208c17a0edc65e6abd47b68a7d9c206faf2a6 Mon Sep 17 00:00:00 2001
|
||||
From: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Date: Fri, 20 Jan 2023 11:04:18 +0100
|
||||
Subject: [PATCH 4/4] zkey: Support EP11 host library version 4 (#2165811)
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Try to load libep11.so.4 if available, but fallback to older
|
||||
library versions if not.
|
||||
|
||||
Reviewed-by: Jörg Schmidbauer <jschmidb@de.ibm.com>
|
||||
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
|
||||
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
|
||||
(cherry picked from commit 6222c384958729bc4b5bad61ad38967647cc3248)
|
||||
---
|
||||
zkey/ep11.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/zkey/ep11.c b/zkey/ep11.c
|
||||
index 58dc3c5..8359929 100644
|
||||
--- a/zkey/ep11.c
|
||||
+++ b/zkey/ep11.c
|
||||
@@ -35,7 +35,7 @@
|
||||
* Definitions for the EP11 library
|
||||
*/
|
||||
#define EP11_LIBRARY_NAME "libep11.so"
|
||||
-#define EP11_LIBRARY_VERSION 3
|
||||
+#define EP11_LIBRARY_VERSION 4
|
||||
#define EP11_WEB_PAGE "http://www.ibm.com/security/cryptocards"
|
||||
|
||||
/**
|
||||
--
|
||||
2.39.1
|
||||
|
|
@ -2,12 +2,10 @@
|
|||
|
||||
# config file syntax:
|
||||
# deviceno WWPN FCPLUN
|
||||
# deviceno # allowed when auto LUN scan is enabled and port is in NPIV mode
|
||||
#
|
||||
# Example:
|
||||
# 0.0.4000 0x5005076300C213e9 0x5022000000000000
|
||||
# 0.0.4001 0x5005076300c213e9 0x5023000000000000
|
||||
# 0.0.5000
|
||||
#
|
||||
#
|
||||
# manual setup:
|
||||
|
@ -23,20 +21,12 @@
|
|||
CONFIG=/etc/zfcp.conf
|
||||
PATH=/bin:/sbin
|
||||
|
||||
set_online()
|
||||
{
|
||||
DEVICE=$1
|
||||
|
||||
[ `cat /sys/bus/ccw/drivers/zfcp/${DEVICE}/online` = "0" ] \
|
||||
&& echo 1 > /sys/bus/ccw/drivers/zfcp/${DEVICE}/online
|
||||
}
|
||||
|
||||
if [ -f "$CONFIG" ]; then
|
||||
if [ ! -d /sys/bus/ccw/drivers/zfcp ]; then
|
||||
modprobe zfcp
|
||||
fi
|
||||
if [ ! -d /sys/bus/ccw/drivers/zfcp ]; then
|
||||
exit 1
|
||||
return
|
||||
fi
|
||||
sed 'y/ABCDEF/abcdef/' < $CONFIG | while read line; do
|
||||
case $line in
|
||||
|
@ -44,17 +34,6 @@ if [ -f "$CONFIG" ]; then
|
|||
*)
|
||||
[ -z "$line" ] && continue
|
||||
set $line
|
||||
if [ $# -eq 1 ]; then
|
||||
DEVICE=${1##*0x}
|
||||
if [ `cat /sys/module/zfcp/parameters/allow_lun_scan` = "Y" ]; then
|
||||
set_online ${DEVICE}
|
||||
grep -q NPIV /sys/bus/ccw/devices/${DEVICE}/host*/fc_host/host*/port_type || \
|
||||
echo "Error: Only device ID (${DEVICE}) given, but port not in NPIV mode"
|
||||
else
|
||||
echo "Error: Only device ID (${DEVICE}) given, but LUN scan is disabled for the zfcp module"
|
||||
fi
|
||||
continue
|
||||
fi
|
||||
if [ $# -eq 5 ]; then
|
||||
DEVICE=$1
|
||||
SCSIID=$2
|
||||
|
@ -67,11 +46,11 @@ if [ -f "$CONFIG" ]; then
|
|||
WWPN=$2
|
||||
FCPLUN=$3
|
||||
fi
|
||||
set_online ${DEVICE}
|
||||
[ `cat /sys/bus/ccw/drivers/zfcp/${DEVICE}/online` = "0" ] \
|
||||
&& echo 1 > /sys/bus/ccw/drivers/zfcp/${DEVICE}/online
|
||||
[ ! -d /sys/bus/ccw/drivers/zfcp/${DEVICE}/${WWPN}/${FCPLUN} ] \
|
||||
&& echo $FCPLUN > /sys/bus/ccw/drivers/zfcp/${DEVICE}/${WWPN}/unit_add
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
exit 0
|
||||
|
|
|
@ -1,19 +1,15 @@
|
|||
%define cmsfsver 1.1.8c
|
||||
%define vipaver 2.1.0
|
||||
|
||||
# secure boot support is for RHEL only
|
||||
%if 0%{?rhel} >= 8
|
||||
%global signzipl 1
|
||||
%endif
|
||||
|
||||
%if 0%{?fedora}
|
||||
%global with_pandoc 1
|
||||
%endif
|
||||
|
||||
Name: s390utils
|
||||
Summary: Utilities and daemons for IBM z Systems
|
||||
Version: 2.25.0
|
||||
Release: 2%{?dist}
|
||||
Group: System Environment/Base
|
||||
Version: 2.6.0
|
||||
Release: 29%{?dist}
|
||||
Epoch: 2
|
||||
License: MIT
|
||||
ExclusiveArch: s390 s390x
|
||||
|
@ -33,30 +29,32 @@ Source15: device_cio_free.service
|
|||
Source16: ccw_init
|
||||
Source17: ccw.udev
|
||||
Source21: normalize_dasd_arg
|
||||
Source23: 00-zipl-prepare.install
|
||||
Source24: 20-zipl-kernel.install
|
||||
Source25: 52-zipl-rescue.install
|
||||
Source26: 91-zipl.install
|
||||
Source22: 00-zipl-prepare.install
|
||||
Source23: 20-zipl-kernel.install
|
||||
Source24: 52-zipl-rescue.install
|
||||
Source25: 91-zipl.install
|
||||
|
||||
# for secure boot
|
||||
%if 0%{?signzipl}
|
||||
%define pesign_name redhatsecureboot302
|
||||
%endif
|
||||
|
||||
# backported stuff for RHEL
|
||||
Patch0: s390-tools-rhel.patch
|
||||
# BLS support in zipl
|
||||
# change the defaults to match Fedora environment
|
||||
Patch0: s390-tools-zipl-invert-script-options.patch
|
||||
Patch1: s390-tools-zipl-blscfg-rpm-nvr-sort.patch
|
||||
|
||||
# upstream fixes/updates
|
||||
Patch100: s390utils-%%{version}-rhel.patch
|
||||
Patch100: s390-tools-zipl-invert-script-options.patch
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1640968
|
||||
Patch102: s390-tools-zipl-sort-like-rpm.patch
|
||||
# https://bugzilla.redhat.com/show_bug.cgi?id=1772054
|
||||
Patch103: s390-tools-zipl-bls-loadaddr.patch
|
||||
|
||||
Patch1000: cmsfs-1.1.8-warnings.patch
|
||||
Patch1001: cmsfs-1.1.8-kernel26.patch
|
||||
Patch1002: cmsfs-1.1.8-use-detected-filesystem-block-size-on-FBA-devices.patch
|
||||
Patch1003: cmsfs-1.1.8-args.patch
|
||||
|
||||
Patch2000: src_vipa-2.1.0-deprecate.patch
|
||||
|
||||
Requires: s390utils-core = %{epoch}:%{version}-%{release}
|
||||
Requires: s390utils-base = %{epoch}:%{version}-%{release}
|
||||
Requires: s390utils-osasnmpd = %{epoch}:%{version}-%{release}
|
||||
Requires: s390utils-cpuplugd = %{epoch}:%{version}-%{release}
|
||||
|
@ -66,6 +64,7 @@ Requires: s390utils-ziomon = %{epoch}:%{version}-%{release}
|
|||
Requires: s390utils-cmsfs = %{epoch}:%{version}-%{release}
|
||||
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: rpm-devel
|
||||
|
||||
%description
|
||||
This is a meta package for installing the default s390-tools sub packages.
|
||||
|
@ -78,12 +77,13 @@ be used together with the zSeries (s390) Linux kernel and device drivers.
|
|||
%prep
|
||||
%setup -q -n s390-tools-%{version} -a 4 -a 6
|
||||
|
||||
# Fedora/RHEL changes
|
||||
%patch0 -p1 -b .zipl-invert-script-options
|
||||
%patch1 -p1 -b .blscfg-rpm-nvr-sort
|
||||
# Backported stuff for RHEL
|
||||
%patch0 -p1
|
||||
|
||||
# upstream fixes/updates
|
||||
%%patch100 -p1
|
||||
# BLS support in zipl
|
||||
%patch100 -p1 -b .zipl-invert-script-options
|
||||
%patch102 -p1 -b .zipl-sort-like-rpm
|
||||
%patch103 -p1 -b .zipl-bls-loadaddr
|
||||
|
||||
#
|
||||
# cmsfs
|
||||
|
@ -97,9 +97,6 @@ pushd cmsfs-%{cmsfsver}
|
|||
|
||||
# use detected filesystem block size (#651012)
|
||||
%patch1002 -p1 -b .use-detected-block-size
|
||||
|
||||
# fix args processing (#1866872)
|
||||
%patch1003 -p1 -b .args
|
||||
popd
|
||||
|
||||
#
|
||||
|
@ -126,12 +123,7 @@ popd
|
|||
|
||||
%build
|
||||
make \
|
||||
CFLAGS="%{build_cflags}" CXXFLAGS="%{build_cxxflags}" LDFLAGS="%{build_ldflags}" \
|
||||
HAVE_DRACUT=1 \
|
||||
%if 0%{?with_pandoc}
|
||||
ENABLE_DOC=1 \
|
||||
%endif
|
||||
NO_PIE_LDFLAGS="" \
|
||||
CFLAGS="%{build_cflags}" CXXFLAGS="%{build_cflags}" LDFLAGS="%{build_ldflags}" \
|
||||
BINDIR=/usr/sbin \
|
||||
DISTRELEASE=%{release} \
|
||||
V=1
|
||||
|
@ -149,10 +141,7 @@ popd
|
|||
%install
|
||||
make install \
|
||||
HAVE_DRACUT=1 \
|
||||
%if 0%{?with_pandoc}
|
||||
ENABLE_DOC=1 \
|
||||
%endif
|
||||
DESTDIR=%{buildroot} \
|
||||
DESTDIR=$RPM_BUILD_ROOT \
|
||||
BINDIR=/usr/sbin \
|
||||
SYSTEMDSYSTEMUNITDIR=%{_unitdir} \
|
||||
DISTRELEASE=%{release} \
|
||||
|
@ -170,166 +159,67 @@ else
|
|||
fi
|
||||
%endif
|
||||
|
||||
# move tools to searchable dir
|
||||
mv %{buildroot}%{_datadir}/s390-tools/netboot/mk-s390image %{buildroot}%{_bindir}
|
||||
mkdir -p $RPM_BUILD_ROOT{/boot,%{_udevrulesdir},%{_sysconfdir}/{profile.d,sysconfig},%{_prefix}/lib/modules-load.d}
|
||||
install -p -m 644 zipl/boot/tape0.bin $RPM_BUILD_ROOT/boot/tape0
|
||||
install -p -m 755 %{SOURCE5} $RPM_BUILD_ROOT%{_sbindir}
|
||||
install -p -m 755 %{SOURCE13} $RPM_BUILD_ROOT%{_sbindir}
|
||||
install -p -m 755 %{SOURCE21} $RPM_BUILD_ROOT%{_sbindir}
|
||||
install -p -m 644 %{SOURCE7} $RPM_BUILD_ROOT%{_udevrulesdir}/56-zfcp.rules
|
||||
install -p -m 644 %{SOURCE12} $RPM_BUILD_ROOT%{_udevrulesdir}/56-dasd.rules
|
||||
|
||||
mkdir -p %{buildroot}{/boot,%{_udevrulesdir},%{_sysconfdir}/{profile.d,sysconfig},%{_prefix}/lib/modules-load.d}
|
||||
install -p -m 644 zipl/boot/tape0.bin %{buildroot}/boot/tape0
|
||||
install -p -m 755 %{SOURCE5} %{buildroot}%{_sbindir}
|
||||
install -p -m 755 %{SOURCE13} %{buildroot}%{_sbindir}
|
||||
install -p -m 755 %{SOURCE21} %{buildroot}%{_sbindir}
|
||||
install -p -m 644 %{SOURCE7} %{buildroot}%{_udevrulesdir}/56-zfcp.rules
|
||||
install -p -m 644 %{SOURCE12} %{buildroot}%{_udevrulesdir}/56-dasd.rules
|
||||
|
||||
touch %{buildroot}%{_sysconfdir}/{zfcp.conf,dasd.conf}
|
||||
touch $RPM_BUILD_ROOT%{_sysconfdir}/{zfcp.conf,dasd.conf}
|
||||
|
||||
# upstream udev rules
|
||||
install -Dp -m 644 etc/udev/rules.d/*.rules %{buildroot}%{_udevrulesdir}
|
||||
install -Dp -m 644 etc/udev/rules.d/*.rules $RPM_BUILD_ROOT%{_udevrulesdir}
|
||||
|
||||
# upstream modules config
|
||||
install -Dp -m 644 etc/modules-load.d/*.conf %{buildroot}%{_prefix}/lib/modules-load.d
|
||||
install -Dp -m 644 etc/modules-load.d/*.conf $RPM_BUILD_ROOT%{_prefix}/lib/modules-load.d
|
||||
|
||||
# Install kernel-install scripts
|
||||
install -d -m 0755 %{buildroot}%{_prefix}/lib/kernel/install.d/
|
||||
install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE22}
|
||||
install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ zfcpdump/10-zfcpdump.install
|
||||
install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE23}
|
||||
install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE24}
|
||||
install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE25}
|
||||
install -D -m 0755 -t %{buildroot}%{_prefix}/lib/kernel/install.d/ %{SOURCE26}
|
||||
install -d -m 0755 %{buildroot}%{_sysconfdir}/kernel/install.d/
|
||||
install -m 0644 /dev/null %{buildroot}%{_sysconfdir}/kernel/install.d/20-grubby.install
|
||||
|
||||
# cmsfs tools must be available in /sbin
|
||||
for f in cat lst vol cp ck; do
|
||||
install -p -m 755 cmsfs-%{cmsfsver}/cmsfs${f} %{buildroot}%{_sbindir}
|
||||
install -p -m 644 cmsfs-%{cmsfsver}/cmsfs${f}.8 %{buildroot}%{_mandir}/man8
|
||||
install -p -m 755 cmsfs-%{cmsfsver}/cmsfs${f} $RPM_BUILD_ROOT%{_sbindir}
|
||||
install -p -m 644 cmsfs-%{cmsfsver}/cmsfs${f}.8 $RPM_BUILD_ROOT%{_mandir}/man8
|
||||
done
|
||||
|
||||
# src_vipa
|
||||
pushd src_vipa-%{vipaver}
|
||||
make install LIBDIR=%{_libdir} SBINDIR=%{_bindir} INSTROOT=%{buildroot} LDCONFIG=/bin/true
|
||||
make install LIBDIR=%{_libdir} SBINDIR=%{_bindir} INSTROOT=$RPM_BUILD_ROOT LDCONFIG=/bin/true
|
||||
popd
|
||||
|
||||
# install usefull headers for devel subpackage
|
||||
mkdir -p %{buildroot}%{_includedir}/%{name}
|
||||
install -p -m 644 include/lib/vtoc.h %{buildroot}%{_includedir}/%{name}
|
||||
mkdir -p $RPM_BUILD_ROOT%{_includedir}/%{name}
|
||||
install -p -m 644 include/lib/vtoc.h $RPM_BUILD_ROOT%{_includedir}/%{name}
|
||||
|
||||
# device_cio_free
|
||||
install -p -m 755 %{SOURCE14} %{buildroot}%{_sbindir}
|
||||
pushd %{buildroot}%{_sbindir}
|
||||
install -p -m 755 %{SOURCE14} $RPM_BUILD_ROOT%{_sbindir}
|
||||
pushd $RPM_BUILD_ROOT%{_sbindir}
|
||||
for lnk in dasd zfcp znet; do
|
||||
ln -sf device_cio_free ${lnk}_cio_free
|
||||
done
|
||||
popd
|
||||
install -p -m 644 %{SOURCE15} %{buildroot}%{_unitdir}
|
||||
install -p -m 644 %{SOURCE15} $RPM_BUILD_ROOT%{_unitdir}
|
||||
|
||||
# ccw
|
||||
install -p -m 755 %{SOURCE16} %{buildroot}/usr/lib/udev/ccw_init
|
||||
install -p -m 644 %{SOURCE17} %{buildroot}%{_udevrulesdir}/81-ccw.rules
|
||||
install -p -m 755 %{SOURCE16} $RPM_BUILD_ROOT/usr/lib/udev/ccw_init
|
||||
install -p -m 644 %{SOURCE17} $RPM_BUILD_ROOT%{_udevrulesdir}/81-ccw.rules
|
||||
|
||||
# zipl.conf to be ghosted
|
||||
touch %{buildroot}%{_sysconfdir}/zipl.conf
|
||||
touch $RPM_BUILD_ROOT%{_sysconfdir}/zipl.conf
|
||||
|
||||
|
||||
%files
|
||||
%doc README.md
|
||||
|
||||
# ************************* s390-tools core package *************************
|
||||
#
|
||||
%package core
|
||||
License: MIT
|
||||
Summary: S390 core tools
|
||||
Requires: coreutils
|
||||
%{?systemd_requires}
|
||||
# BRs are covered via the base package
|
||||
|
||||
|
||||
%description core
|
||||
This package provides minimal set of tools needed to system to boot.
|
||||
|
||||
%post core
|
||||
%if 0
|
||||
# enable in F-31
|
||||
%systemd_post device_cio_free.service
|
||||
%else
|
||||
# explicit enable for upgrade patch from s390utils-base < 2.6.0-4
|
||||
systemctl --no-reload preset device_cio_free.service >/dev/null 2>&1 || :
|
||||
%endif
|
||||
%systemd_post cpi.service
|
||||
|
||||
%preun core
|
||||
%systemd_preun device_cio_free.service
|
||||
%systemd_preun cpi.service
|
||||
|
||||
%postun core
|
||||
%systemd_postun_with_restart cpi.service
|
||||
|
||||
%files core
|
||||
%doc README.md zdev/src/chzdev_usage.txt
|
||||
%doc LICENSE
|
||||
%{_sbindir}/chreipl
|
||||
%{_sbindir}/chzdev
|
||||
%{_sbindir}/cio_ignore
|
||||
%{_sbindir}/dasdfmt
|
||||
%{_sbindir}/dasdinfo
|
||||
%{_sbindir}/fdasd
|
||||
%{_sbindir}/lszdev
|
||||
%{_sbindir}/vmcp
|
||||
%{_sbindir}/zipl
|
||||
%{_sbindir}/zipl-editenv
|
||||
%dir /lib/s390-tools
|
||||
/lib/s390-tools/{zipl,chreipl}_helper.*
|
||||
/lib/s390-tools/cpictl
|
||||
/lib/s390-tools/stage3.bin
|
||||
/lib/s390-tools/zdev_id
|
||||
/lib/s390-tools/zdev-root-update
|
||||
/lib/s390-tools/zipl.conf
|
||||
%ghost %config(noreplace) %{_sysconfdir}/zipl.conf
|
||||
%config(noreplace) %{_sysconfdir}/ziplenv
|
||||
%{_unitdir}/cpi.service
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/cpi
|
||||
/usr/lib/dracut/modules.d/95zdev/
|
||||
%{_mandir}/man5/zipl.conf.5*
|
||||
%{_mandir}/man8/chreipl.8*
|
||||
%{_mandir}/man8/chzdev.8*
|
||||
%{_mandir}/man8/cio_ignore.8*
|
||||
%{_mandir}/man8/dasdfmt.8*
|
||||
%{_mandir}/man8/dasdinfo.8*
|
||||
%{_mandir}/man8/fdasd.8*
|
||||
%{_mandir}/man8/lszdev.8*
|
||||
%{_mandir}/man8/vmcp.8*
|
||||
%{_mandir}/man8/zipl.8*
|
||||
%{_mandir}/man8/zipl-editenv.8*
|
||||
|
||||
# Additional Fedora/RHEL specific stuff
|
||||
%ghost %config(noreplace) %{_sysconfdir}/dasd.conf
|
||||
%ghost %config(noreplace) %{_sysconfdir}/zfcp.conf
|
||||
%{_sbindir}/dasdconf.sh
|
||||
%{_sbindir}/normalize_dasd_arg
|
||||
%{_sbindir}/zfcpconf.sh
|
||||
%{_sbindir}/device_cio_free
|
||||
%{_sbindir}/dasd_cio_free
|
||||
%{_sbindir}/zfcp_cio_free
|
||||
%{_sbindir}/znet_cio_free
|
||||
%{_unitdir}/device_cio_free.service
|
||||
/usr/lib/udev/ccw_init
|
||||
%{_udevrulesdir}/40-z90crypt.rules
|
||||
%{_udevrulesdir}/56-dasd.rules
|
||||
%{_udevrulesdir}/56-zfcp.rules
|
||||
%{_udevrulesdir}/59-dasd.rules
|
||||
%{_udevrulesdir}/60-readahead.rules
|
||||
%{_udevrulesdir}/81-ccw.rules
|
||||
%{_udevrulesdir}/81-dpm.rules
|
||||
%{_udevrulesdir}/90-cpi.rules
|
||||
%{_sysconfdir}/kernel/install.d/20-grubby.install
|
||||
%{_prefix}/lib/kernel/install.d/00-zipl-prepare.install
|
||||
%{_prefix}/lib/kernel/install.d/10-zfcpdump.install
|
||||
%{_prefix}/lib/kernel/install.d/20-zipl-kernel.install
|
||||
%{_prefix}/lib/kernel/install.d/52-zipl-rescue.install
|
||||
%{_prefix}/lib/kernel/install.d/91-zipl.install
|
||||
%{_prefix}/lib/modules-load.d/s390-pkey.conf
|
||||
|
||||
|
||||
#
|
||||
# ************************* s390-tools base package *************************
|
||||
#
|
||||
|
@ -337,21 +227,20 @@ systemctl --no-reload preset device_cio_free.service >/dev/null 2>&1 || :
|
|||
# src_vipa is CPL
|
||||
License: MIT and CPL
|
||||
Summary: S390 base tools
|
||||
Group: System Environment/Base
|
||||
Requires: gawk sed coreutils
|
||||
Requires: sysfsutils
|
||||
Requires: sg3_utils
|
||||
Requires: ethtool
|
||||
Requires: tar
|
||||
Requires: file
|
||||
Requires: s390utils-core = %{epoch}:%{version}-%{release}
|
||||
Requires: network-scripts
|
||||
%{?systemd_requires}
|
||||
BuildRequires: perl-generators
|
||||
BuildRequires: ncurses-devel
|
||||
BuildRequires: libpfm-devel
|
||||
BuildRequires: glibc-static
|
||||
BuildRequires: cryptsetup-devel >= 2.0.3
|
||||
BuildRequires: json-c-devel
|
||||
BuildRequires: rpm-devel
|
||||
BuildRequires: glib2-devel
|
||||
BuildRequires: libxml2-devel
|
||||
|
||||
|
||||
%description base
|
||||
|
@ -493,131 +382,127 @@ For more information refer to the following publications:
|
|||
getent group zkeyadm > /dev/null || groupadd -r zkeyadm
|
||||
|
||||
%post base
|
||||
%systemd_post cpi.service
|
||||
%if 0
|
||||
# enable in F-31
|
||||
%systemd_post device_cio_free.service
|
||||
%else
|
||||
# explicit enable for upgrade patch from s390utils-base < 2.6.0-4
|
||||
systemctl --no-reload preset device_cio_free.service >/dev/null 2>&1 || :
|
||||
%endif
|
||||
%systemd_post dumpconf.service
|
||||
|
||||
%preun base
|
||||
%systemd_preun cpi.service
|
||||
%systemd_preun device_cio_free.service
|
||||
%systemd_preun dumpconf.service
|
||||
|
||||
%postun base
|
||||
%systemd_postun_with_restart cpi.service
|
||||
%systemd_postun_with_restart dumpconf.service
|
||||
|
||||
%files base
|
||||
%doc README.md zdev/src/lszdev_usage.txt
|
||||
%doc README.md zdev/src/*.txt
|
||||
%doc LICENSE
|
||||
%{_sbindir}/chccwdev
|
||||
%{_sbindir}/chchp
|
||||
%{_sbindir}/chcpumf
|
||||
%{_sbindir}/chreipl
|
||||
%{_sbindir}/chshut
|
||||
%{_sbindir}/chzcrypt
|
||||
%{_sbindir}/chzdev
|
||||
%{_sbindir}/cio_ignore
|
||||
%{_sbindir}/dasdfmt
|
||||
%{_sbindir}/dasdinfo
|
||||
%{_sbindir}/dasdstat
|
||||
%{_sbindir}/dasdview
|
||||
%{_sbindir}/dbginfo.sh
|
||||
%{_sbindir}/hsavmcore
|
||||
%{_sbindir}/hsci
|
||||
%{_sbindir}/fdasd
|
||||
%{_sbindir}/hyptop
|
||||
%{_sbindir}/ip_watcher.pl
|
||||
%{_sbindir}/lschp
|
||||
%{_sbindir}/lscpumf
|
||||
%{_sbindir}/lscss
|
||||
%{_sbindir}/lsdasd
|
||||
%{_sbindir}/lshwc
|
||||
%{_sbindir}/lsqeth
|
||||
%{_sbindir}/lsluns
|
||||
%{_sbindir}/lsreipl
|
||||
%{_sbindir}/lsscm
|
||||
%{_sbindir}/lsshut
|
||||
%{_sbindir}/lsstp
|
||||
%{_sbindir}/lstape
|
||||
%{_sbindir}/lszcrypt
|
||||
%{_sbindir}/lszdev
|
||||
%{_sbindir}/lszfcp
|
||||
%{_sbindir}/pai
|
||||
%{_sbindir}/qetharp
|
||||
%{_sbindir}/qethconf
|
||||
%{_sbindir}/qethqoat
|
||||
%{_sbindir}/scsi_logging_level
|
||||
%{_sbindir}/sclpdbf
|
||||
%{_sbindir}/start_hsnc.sh
|
||||
%{_sbindir}/tape390_crypt
|
||||
%{_sbindir}/tape390_display
|
||||
%{_sbindir}/ttyrun
|
||||
%{_sbindir}/tunedasd
|
||||
%{_sbindir}/vmcp
|
||||
%{_sbindir}/vmur
|
||||
%{_sbindir}/xcec-bridge
|
||||
%{_sbindir}/zcryptctl
|
||||
%{_sbindir}/zcryptstats
|
||||
%{_sbindir}/zfcpdbf
|
||||
%{_sbindir}/zgetdump
|
||||
%{_sbindir}/zipl
|
||||
%{_sbindir}/zipl-switch-to-blscfg
|
||||
%{_sbindir}/znetconf
|
||||
%{_sbindir}/zpcictl
|
||||
%{_bindir}/lscpumf
|
||||
%{_bindir}/dump2tar
|
||||
%{_bindir}/genprotimg
|
||||
%{_bindir}/mk-s390image
|
||||
%{_bindir}/pvattest
|
||||
%{_bindir}/pvextract-hdr
|
||||
%{_bindir}/vmconvert
|
||||
%{_bindir}/zkey
|
||||
%{_bindir}/zkey-cryptsetup
|
||||
%{_unitdir}/cpi.service
|
||||
%{_unitdir}/dumpconf.service
|
||||
%ghost %config(noreplace) %{_sysconfdir}/zipl.conf
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/cpi
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/dumpconf
|
||||
%{_sysconfdir}/mdevctl.d/*
|
||||
/usr/lib/dracut/modules.d/99ngdump/
|
||||
# own the mdevctl dirs until new release is available
|
||||
%dir /usr/lib/mdevctl
|
||||
%dir /usr/lib/mdevctl/scripts.d
|
||||
%dir /usr/lib/mdevctl/scripts.d/callouts
|
||||
/usr/lib/mdevctl/scripts.d/callouts/ap-check
|
||||
/lib/s390-tools/dumpconf
|
||||
/lib/s390-tools/lsznet.raw
|
||||
%dir /lib/s390-tools/zfcpdump
|
||||
/lib/s390-tools/zfcpdump/zfcpdump-initrd
|
||||
/lib/s390-tools/znetcontrolunits
|
||||
%{_libdir}/libekmfweb.so.*
|
||||
%{_libdir}/libkmipclient.so.*
|
||||
%dir %{_libdir}/zkey
|
||||
%{_libdir}/zkey/zkey-ekmfweb.so
|
||||
%{_libdir}/zkey/zkey-kmip.so
|
||||
/lib/s390-tools/
|
||||
/usr/lib/dracut/modules.d/95zdev/
|
||||
%{_mandir}/man1/dbginfo.sh.1*
|
||||
%{_mandir}/man1/dump2tar.1*
|
||||
%{_mandir}/man1/genprotimg.1*
|
||||
%{_mandir}/man1/pvattest.1*
|
||||
%{_mandir}/man1/pvattest-create.1*
|
||||
%{_mandir}/man1/pvattest-perform.1*
|
||||
%{_mandir}/man1/pvattest-verify.1*
|
||||
%{_mandir}/man1/lscpumf.1*
|
||||
%{_mandir}/man1/vmconvert.1*
|
||||
%{_mandir}/man1/zfcpdbf.1*
|
||||
%{_mandir}/man1/zipl-switch-to-blscfg.1*
|
||||
%{_mandir}/man1/zkey.1*
|
||||
%{_mandir}/man1/zkey-cryptsetup.1*
|
||||
%{_mandir}/man1/zkey-ekmfweb.1*
|
||||
%{_mandir}/man1/zkey-kmip.1*
|
||||
%{_mandir}/man4/prandom.4*
|
||||
%{_mandir}/man5/hsavmcore.conf.5*
|
||||
%{_mandir}/man5/zipl.conf.5*
|
||||
%{_mandir}/man8/chccwdev.8*
|
||||
%{_mandir}/man8/chchp.8*
|
||||
%{_mandir}/man8/chcpumf.8*
|
||||
%{_mandir}/man8/chreipl.8*
|
||||
%{_mandir}/man8/chshut.8*
|
||||
%{_mandir}/man8/chzcrypt.8*
|
||||
%{_mandir}/man8/chzdev.8*
|
||||
%{_mandir}/man8/cio_ignore.8*
|
||||
%{_mandir}/man8/dasdfmt.8*
|
||||
%{_mandir}/man8/dasdinfo.8*
|
||||
%{_mandir}/man8/dasdstat.8*
|
||||
%{_mandir}/man8/dasdview.8*
|
||||
%{_mandir}/man8/dbginfo.sh.8*
|
||||
%{_mandir}/man8/dumpconf.8*
|
||||
%{_mandir}/man8/hsavmcore.8*
|
||||
%{_mandir}/man8/hsci.8*
|
||||
%{_mandir}/man8/fdasd.8*
|
||||
%{_mandir}/man8/genprotimg.8.*
|
||||
%{_mandir}/man8/hyptop.8*
|
||||
%{_mandir}/man8/lschp.8*
|
||||
%{_mandir}/man8/lscpumf.8*
|
||||
%{_mandir}/man8/lscss.8*
|
||||
%{_mandir}/man8/lsdasd.8*
|
||||
%{_mandir}/man8/lshwc.8*
|
||||
%{_mandir}/man8/lsluns.8*
|
||||
%{_mandir}/man8/lsqeth.8*
|
||||
%{_mandir}/man8/lsreipl.8*
|
||||
%{_mandir}/man8/lsscm.8*
|
||||
%{_mandir}/man8/lsshut.8*
|
||||
%{_mandir}/man8/lsstp.8*
|
||||
%{_mandir}/man8/lstape.8*
|
||||
%{_mandir}/man8/lszcrypt.8*
|
||||
%{_mandir}/man8/lszdev.8*
|
||||
%{_mandir}/man8/lszfcp.8*
|
||||
%{_mandir}/man8/pai.8*
|
||||
%{_mandir}/man8/qetharp.8*
|
||||
%{_mandir}/man8/qethconf.8*
|
||||
%{_mandir}/man8/qethqoat.8*
|
||||
|
@ -625,26 +510,48 @@ getent group zkeyadm > /dev/null || groupadd -r zkeyadm
|
|||
%{_mandir}/man8/tape390_display.8*
|
||||
%{_mandir}/man8/ttyrun.8*
|
||||
%{_mandir}/man8/tunedasd.8*
|
||||
%{_mandir}/man8/vmcp.8*
|
||||
%{_mandir}/man8/vmur.8*
|
||||
%{_mandir}/man8/zcryptctl.8*
|
||||
%{_mandir}/man8/zcryptstats.8*
|
||||
%{_mandir}/man8/zfcpdbf.8*
|
||||
%{_mandir}/man8/zgetdump.8*
|
||||
%{_mandir}/man8/zipl-switch-to-blscfg.8*
|
||||
%{_mandir}/man8/zipl.8*
|
||||
%{_mandir}/man8/znetconf.8*
|
||||
%{_mandir}/man8/zpcictl.8*
|
||||
%dir %{_datadir}/s390-tools
|
||||
%dir %{_datadir}/s390-tools/
|
||||
%{_datadir}/s390-tools/cpumf/
|
||||
%{_datadir}/s390-tools/genprotimg/
|
||||
%{_datadir}/s390-tools/netboot/
|
||||
%dir %attr(0770,root,zkeyadm) %{_sysconfdir}/zkey
|
||||
%dir %attr(0770,root,zkeyadm) %{_sysconfdir}/zkey/kmip
|
||||
%dir %attr(0770,root,zkeyadm) %{_sysconfdir}/zkey/kmip/profiles
|
||||
%config(noreplace) %attr(0660,root,zkeyadm)%{_sysconfdir}/zkey/kmip/profiles/*.profile
|
||||
%dir %attr(0770,root,zkeyadm) %{_sysconfdir}/zkey/repository
|
||||
%config(noreplace) %attr(0660,root,zkeyadm)%{_sysconfdir}/zkey/kms-plugins.conf
|
||||
|
||||
# Additional Fedora/RHEL specific stuff
|
||||
# Additional Redhat specific stuff
|
||||
/boot/tape0
|
||||
%ghost %config(noreplace) %{_sysconfdir}/dasd.conf
|
||||
%ghost %config(noreplace) %{_sysconfdir}/zfcp.conf
|
||||
%{_sbindir}/dasdconf.sh
|
||||
%{_sbindir}/zfcpconf.sh
|
||||
%{_sbindir}/dasd_cio_free
|
||||
%{_sbindir}/device_cio_free
|
||||
%{_sbindir}/zfcp_cio_free
|
||||
%{_sbindir}/znet_cio_free
|
||||
%{_sbindir}/normalize_dasd_arg
|
||||
%{_unitdir}/device_cio_free.service
|
||||
/usr/lib/udev/ccw_init
|
||||
%{_udevrulesdir}/40-z90crypt.rules
|
||||
%{_udevrulesdir}/56-zfcp.rules
|
||||
%{_udevrulesdir}/56-dasd.rules
|
||||
%{_udevrulesdir}/59-dasd.rules
|
||||
%{_udevrulesdir}/60-readahead.rules
|
||||
%{_udevrulesdir}/81-ccw.rules
|
||||
%{_udevrulesdir}/90-cpi.rules
|
||||
%{_sysconfdir}/kernel/install.d/20-grubby.install
|
||||
%{_prefix}/lib/kernel/install.d/00-zipl-prepare.install
|
||||
%{_prefix}/lib/kernel/install.d/10-zfcpdump.install
|
||||
%{_prefix}/lib/kernel/install.d/20-zipl-kernel.install
|
||||
%{_prefix}/lib/kernel/install.d/52-zipl-rescue.install
|
||||
%{_prefix}/lib/kernel/install.d/91-zipl.install
|
||||
%{_prefix}/lib/modules-load.d/s390-pkey.conf
|
||||
|
||||
# src_vipa
|
||||
%{_bindir}/src_vipa.sh
|
||||
|
@ -656,6 +563,7 @@ getent group zkeyadm > /dev/null || groupadd -r zkeyadm
|
|||
#
|
||||
%package osasnmpd
|
||||
Summary: SNMP sub-agent for OSA-Express cards
|
||||
Group: System Environment/Daemons
|
||||
Requires: net-snmp
|
||||
Requires: psmisc
|
||||
BuildRequires: net-snmp-devel
|
||||
|
@ -675,6 +583,7 @@ ATM Ethernet LAN Emulation in QDIO mode.
|
|||
#
|
||||
%package mon_statd
|
||||
Summary: Monitoring daemons for Linux in z/VM
|
||||
Group: System Environment/Daemons
|
||||
Requires: coreutils
|
||||
%{?systemd_requires}
|
||||
|
||||
|
@ -714,6 +623,7 @@ Monitoring daemons for Linux in z/VM:
|
|||
#
|
||||
%package cpuplugd
|
||||
Summary: Daemon that manages CPU and memory resources
|
||||
Group: System Environment/Daemons
|
||||
%{?systemd_requires}
|
||||
BuildRequires: systemd
|
||||
|
||||
|
@ -743,6 +653,7 @@ memory can be increased or decreased exploiting the CMM1 feature.
|
|||
#
|
||||
%package ziomon
|
||||
Summary: S390 ziomon tools
|
||||
Group: Applications/System
|
||||
Requires: blktrace
|
||||
Requires: coreutils
|
||||
Requires: device-mapper-multipath
|
||||
|
@ -781,6 +692,7 @@ Tool set to collect data for zfcp performance analysis and report.
|
|||
#
|
||||
%package iucvterm
|
||||
Summary: z/VM IUCV terminal applications
|
||||
Group: Applications/System
|
||||
Requires(pre): shadow-utils
|
||||
Requires(post): grep
|
||||
Requires(postun): grep
|
||||
|
@ -843,6 +755,7 @@ fi
|
|||
%package cmsfs
|
||||
License: GPLv2
|
||||
Summary: CMS file system tools
|
||||
Group: System Environment/Base
|
||||
URL: http://www.casita.net/pub/cmsfs/cmsfs.html
|
||||
# Requires:
|
||||
|
||||
|
@ -866,8 +779,9 @@ This package contains the CMS file system tools.
|
|||
#
|
||||
%package cmsfs-fuse
|
||||
Summary: CMS file system based on FUSE
|
||||
BuildRequires: fuse3-devel
|
||||
Requires: fuse3
|
||||
Group: System Environment/Base
|
||||
BuildRequires: fuse-devel
|
||||
Requires: fuse
|
||||
|
||||
%description cmsfs-fuse
|
||||
This package contains the CMS file system based on FUSE.
|
||||
|
@ -883,9 +797,9 @@ This package contains the CMS file system based on FUSE.
|
|||
#
|
||||
%package zdsfs
|
||||
Summary: z/OS data set access based on FUSE
|
||||
BuildRequires: fuse3-devel
|
||||
BuildRequires: libcurl-devel
|
||||
Requires: fuse3
|
||||
Group: System Environment/Base
|
||||
BuildRequires: fuse-devel
|
||||
Requires: fuse
|
||||
|
||||
%description zdsfs
|
||||
This package contains the z/OS data set access based on FUSE.
|
||||
|
@ -899,8 +813,9 @@ This package contains the z/OS data set access based on FUSE.
|
|||
#
|
||||
%package hmcdrvfs
|
||||
Summary: HMC drive file system based on FUSE
|
||||
BuildRequires: fuse3-devel
|
||||
Requires: fuse3
|
||||
Group: System Environment/Base
|
||||
BuildRequires: fuse-devel
|
||||
Requires: fuse
|
||||
|
||||
%description hmcdrvfs
|
||||
This package contains a HMC drive file system based on FUSE and a tool
|
||||
|
@ -917,12 +832,12 @@ to list files and directories.
|
|||
#
|
||||
%package cpacfstatsd
|
||||
Summary: Monitor and maintain CPACF activity counters
|
||||
Group: System Environment/Base
|
||||
Requires(post): systemd
|
||||
Requires(preun): systemd
|
||||
Requires(postun): systemd
|
||||
Requires(pre): shadow-utils
|
||||
BuildRequires: systemd
|
||||
BuildRequires: systemd-devel
|
||||
|
||||
%description cpacfstatsd
|
||||
The cpacfstats tools provide a client/server application set to monitor
|
||||
|
@ -947,164 +862,21 @@ getent group cpacfstats >/dev/null || groupadd -r cpacfstats
|
|||
%{_mandir}/man8/cpacfstatsd.8*
|
||||
%{_unitdir}/cpacfstatsd.service
|
||||
|
||||
#
|
||||
# *********************** chreipl-fcp-mpath package ***********************
|
||||
#
|
||||
%package chreipl-fcp-mpath
|
||||
Summary: Use multipath information for re-IPL path failover
|
||||
BuildRequires: make
|
||||
BuildRequires: bash
|
||||
BuildRequires: coreutils
|
||||
%if 0%{?with_pandoc}
|
||||
BuildRequires: pandoc
|
||||
%endif
|
||||
BuildRequires: gawk
|
||||
BuildRequires: gzip
|
||||
BuildRequires: sed
|
||||
Requires: bash
|
||||
Requires: coreutils
|
||||
Requires: util-linux
|
||||
Requires: systemd-udev
|
||||
Requires: device-mapper-multipath
|
||||
Requires: dracut
|
||||
|
||||
%description chreipl-fcp-mpath
|
||||
The chreipl-fcp-mpath toolset monitors udev events about paths to the re-IPL
|
||||
volume. If the currently configured FCP re-IPL path becomes unavailable, the
|
||||
toolset checks for operational paths to the same volume. If available, it
|
||||
reconfigures the FCP re-IPL settings to use an operational path.
|
||||
|
||||
%files chreipl-fcp-mpath
|
||||
%doc chreipl-fcp-mpath/README.md
|
||||
%if 0%{?with_pandoc}
|
||||
%doc chreipl-fcp-mpath/README.html
|
||||
%endif
|
||||
%dir %{_prefix}/lib/chreipl-fcp-mpath/
|
||||
%{_prefix}/lib/chreipl-fcp-mpath/*
|
||||
%{_prefix}/lib/dracut/dracut.conf.d/70-chreipl-fcp-mpath.conf
|
||||
%{_prefix}/lib/udev/chreipl-fcp-mpath-is-ipl-tgt
|
||||
%{_prefix}/lib/udev/chreipl-fcp-mpath-is-ipl-vol
|
||||
%{_prefix}/lib/udev/chreipl-fcp-mpath-is-reipl-zfcp
|
||||
%{_prefix}/lib/udev/chreipl-fcp-mpath-record-volume-identifier
|
||||
%{_prefix}/lib/udev/chreipl-fcp-mpath-try-change-ipl-path
|
||||
%{_udevrulesdir}/70-chreipl-fcp-mpath.rules
|
||||
%{_mandir}/man7/chreipl-fcp-mpath.7*
|
||||
|
||||
#
|
||||
# *********************** devel package ***********************
|
||||
#
|
||||
%package devel
|
||||
Summary: Development files
|
||||
|
||||
Requires: %{name}-base%{?_isa} = %{epoch}:%{version}-%{release}
|
||||
Group: Development/Libraries
|
||||
|
||||
%description devel
|
||||
User-space development files for the s390/s390x architecture.
|
||||
|
||||
%files devel
|
||||
%{_includedir}/%{name}/
|
||||
%{_includedir}/ekmfweb/
|
||||
%{_includedir}/kmipclient/
|
||||
%{_libdir}/libekmfweb.so
|
||||
%{_libdir}/libkmipclient.so
|
||||
%{_includedir}/%{name}
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Feb 03 2023 Dan Horák <dhorak@redhat.com> - 2:2.25.0-2
|
||||
- zkey: Support EP11 host library version 4 (#2165811)
|
||||
- Resolves: #2165811
|
||||
|
||||
* Tue Dec 13 2022 Dan Horák <dhorak@redhat.com> - 2:2.25.0-1
|
||||
- rebased to 2.25.0 (#2110312)
|
||||
- KVM: Tool to process encrypted Secure Execution guest dumps (#2043851)
|
||||
- zipl: Support for Secure Boot IPL and Dump from ECKD DASD (#2043852)
|
||||
- zdev: Site-aware device configuration (#2043858)
|
||||
- Display Processor Activity Instrumentation CPACF counters (#2111013)
|
||||
- Transparent DASD PPRC (Peer-to-Peer Remote Copy) handling (#2126618)
|
||||
- zipl: Add secure boot trailer (#2142884)
|
||||
- Resolves: #2110312 #2043851 #2043852 #2043858 #2111013 #2126618 #2142884
|
||||
|
||||
* Fri Aug 05 2022 Dan Horák <dhorak@redhat.com> - 2:2.22.0-2
|
||||
- zipl: Add missing check for a nullpointer (#2113976)
|
||||
- Resolves: #2113976
|
||||
|
||||
* Tue Jul 12 2022 Dan Horák <dhorak@redhat.com> - 2:2.22.0-1
|
||||
- rebased to 2.22.0 (#2043846)
|
||||
- add tool to persistently configure vfio-ap devices (#1660911)
|
||||
- NVMe stand-alone dump support (#1847462)
|
||||
- KVM: Secure Execution Attestation Userspace Tool (#1984908)
|
||||
- KVM: Allow long kernel command lines for Secure Execution guests (#2043831)
|
||||
- KVM: Secure Execution guest dump encryption with customer keys (#2043833)
|
||||
- zcrypt DD: Exploitation Support of new IBM Z Crypto Hardware (#2043857)
|
||||
- zipl: Site-aware environment block (#2043913)
|
||||
- Add additional information to SCLP CPI (#2046681)
|
||||
- Add new CPU-MF Counters for IBM z16 Hardware (#2047727)
|
||||
- Long Kernel Commmand Line for s390x (#2060829)
|
||||
- zkey: Fix re-enciphering of EP11 identity key of KMIP plugin (#2075011)
|
||||
- genprotimg/check_hostkeydoc: cert. verification is too strict (#2075013)
|
||||
- Resolves: #2043846 #1660911 #1847462 #1984908 #2043831 #2043833 #2043857 #2043913 #2046681 #2047727 #2060829 #2075011 #2075013
|
||||
|
||||
* Thu Nov 18 2021 Dan Horák <dhorak@redhat.com> - 2:2.19.0-1
|
||||
- rebased to 2.19.0 (#1984976)
|
||||
- move vmcp to core (#2021071)
|
||||
- Resolves: #1984976 #2021071
|
||||
|
||||
* Tue Jul 20 2021 Dan Horák <dhorak@redhat.com> - 2:2.16.0-2
|
||||
- add support for NM keyfile format to ccw_init/device_cio_free (#1980708)
|
||||
- s390-tools: Add support for complete counter set extraction (#1981264)
|
||||
- Resolves: #1980708 #1981264
|
||||
|
||||
* Fri Jul 02 2021 Dan Horák <dhorak@redhat.com> - 2:2.16.0-1
|
||||
- rebased to 2.16.0 (#1919241)
|
||||
- move fdasd and lszdev to core
|
||||
- ttyrun-getty: Avoid conflicts with serial-getty@ (#1907781)
|
||||
- mk-s390image script requires file (#1973239)
|
||||
- zfcpconf: set exit code explicitly (#1977434)
|
||||
- dbginfo.sh: Collect /proc/kallsyms, issue additional commands (#1972041)
|
||||
- dasd: change default scheduler to reduce CPU consumption (#1972038)
|
||||
- zdsfs: transparent dataset conversion (#1919238)
|
||||
- Resolves: #1919241 #1907781 #1973239 #1977434 #1972041 #1972038 #1919238
|
||||
|
||||
* Mon Dec 07 2020 Dan Horák <dhorak@redhat.com> - 2:2.15.1-4
|
||||
- zkey: Fix KMS plugin configuration to store APQNs correctly. (#1901968)
|
||||
- dasdfmt: Fix bad file descriptor error when running on symlinks (#1901963)
|
||||
- zcryptstats: Fix handling of partial results with many domains (#1901962)
|
||||
- s390-tools: add hsci tool (#1847434)
|
||||
- genprotimg: add host-key document verification support (#1845925)
|
||||
- genprotimg: require argument for 'ramdisk' and 'parmfile' options (#1845925)
|
||||
- genprotimg: fix two memory leaks (#1845925)
|
||||
- genprotimg: abort if one of the recursive targets is failing (#1845925)
|
||||
- zdev/lsdasd: Add FC Endpoint Security information (#1723844)
|
||||
- Resolves: #1723844 #1845925 #1847434 #1901962 #1901963 #1901968
|
||||
|
||||
* Fri Nov 27 2020 Javier Martinez Canillas <javierm@redhat.com> - 2:2.15.1-2
|
||||
- add again the 00-zipl-prepare.install script that got dropped (#1902273)
|
||||
Resolves: #1902273
|
||||
|
||||
* Wed Nov 04 2020 Dan Horák <dhorak@redhat.com> - 2:2.15.1-2
|
||||
- rebased to 2.15.1 (#1851111)
|
||||
- implement improved auto LUN scan (#1552697)
|
||||
- fix crash when device is missing in cmsfslst (#1866872)
|
||||
- introduce s390utils-core to avoid dependency on Perl (#1886201)
|
||||
- Resolves: #1851111 #1552697 #1866872 #1886201
|
||||
|
||||
* Fri Jul 31 2020 Dan Horák <dhorak@redhat.com> - 2:2.6.0-33
|
||||
- cpacfstats: Bugfix to remove libpfm from cpacfstats (#1861779)
|
||||
- Resolves: (#1861779)
|
||||
|
||||
* Fri Jul 24 2020 Dan Horák <dhorak@redhat.com> - 2:2.6.0-32
|
||||
- vmcp: Change sequence of failed exit (#1858839)
|
||||
- zipl: Fix KVM IPL without bootindex (#1858842, #1846960)
|
||||
- Resolves: #1858839, #1846960
|
||||
|
||||
* Fri Jul 03 2020 Javier Martinez Canillas <javierm@redhat.com> - 2:2.6.0-31
|
||||
- add a default entry in zipl.conf if there isn't one present (#1698363)
|
||||
- Resolves: #1698363
|
||||
|
||||
* Mon Jun 22 2020 Dan Horák <dhorak@redhat.com> - 2:2.6.0-30
|
||||
- avoid dependency on network-scripts (#1847388)
|
||||
- Resolves: #1847388
|
||||
|
||||
* Thu May 28 2020 Dan Horák <dhorak@redhat.com> - 2:2.6.0-29
|
||||
- zkey: Add support for EP11 secure keys (#1723845)
|
||||
- ipl-tools: Add nvme device support to zipl, lsreipl/chreipl (#1525178)
|
||||
|
|
Loading…
Reference in New Issue