You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
312 lines
12 KiB
312 lines
12 KiB
3 weeks ago
|
From ab26b43985f44b71abf40f8d0e50bfbd0808f8b9 Mon Sep 17 00:00:00 2001
|
||
|
From: =?UTF-8?q?Jan=20H=C3=B6ppner?= <hoeppner@linux.ibm.com>
|
||
|
Date: Fri, 14 Jun 2024 14:25:40 +0200
|
||
|
Subject: [PATCH 1/2] s390-tools: Replace 'which' with built-in 'command -v'
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
There are still a few scripts using the 'which' command to determine
|
||
|
either the full path or the mere existence of an executable.
|
||
|
Some of these scripts might run in minimal environments where 'which' is
|
||
|
not available due to dependency restriction. 'which' is also considered
|
||
|
unreliable for historical implementation details.
|
||
|
|
||
|
Use the POSIX defined [1] built-in 'command -v' instead to reduce
|
||
|
package dependencies and improve reliability.
|
||
|
|
||
|
[1] https://pubs.opengroup.org/onlinepubs/9699919799/
|
||
|
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
|
||
|
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
|
||
|
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
|
||
|
(cherry picked from commit 0b0960254e8c2b556cefa97f83651a92f54a5e42)
|
||
|
---
|
||
|
iucvterm/doc/ts-shell/iucvconn_on_login | 2 +-
|
||
|
netboot/mk-pxelinux-ramfs | 2 +-
|
||
|
ziomon/ziomon | 3 +--
|
||
|
3 files changed, 3 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/iucvterm/doc/ts-shell/iucvconn_on_login b/iucvterm/doc/ts-shell/iucvconn_on_login
|
||
|
index 860c4cc..92010df 100755
|
||
|
--- a/iucvterm/doc/ts-shell/iucvconn_on_login
|
||
|
+++ b/iucvterm/doc/ts-shell/iucvconn_on_login
|
||
|
@@ -15,7 +15,7 @@
|
||
|
prog_name=`basename $0`
|
||
|
guest_name=${USER:-`whoami 2>/dev/null`}
|
||
|
terminal=lnxhvc0
|
||
|
-iucvconn=`which iucvconn 2>/dev/null`
|
||
|
+iucvconn=`command -v iucvconn 2>/dev/null`
|
||
|
|
||
|
__error() {
|
||
|
printf "$prog_name: $@\n" >&2
|
||
|
diff --git a/netboot/mk-pxelinux-ramfs b/netboot/mk-pxelinux-ramfs
|
||
|
index 64ebde1..07f8b07 100755
|
||
|
--- a/netboot/mk-pxelinux-ramfs
|
||
|
+++ b/netboot/mk-pxelinux-ramfs
|
||
|
@@ -127,7 +127,7 @@ echo "$cmd: Copying kexec"
|
||
|
# Install both binary and required shared libraries
|
||
|
OLDPATH=$PATH
|
||
|
PATH=$OLDPATH:/sbin:/usr/sbin
|
||
|
-kexec_bin=$(which kexec)
|
||
|
+kexec_bin=$(command -v kexec)
|
||
|
kexec_sos=$(sharedobjs $kexec_bin)
|
||
|
PATH=$OLDPATH
|
||
|
|
||
|
diff --git a/ziomon/ziomon b/ziomon/ziomon
|
||
|
index fd6248a..d1545cc 100755
|
||
|
--- a/ziomon/ziomon
|
||
|
+++ b/ziomon/ziomon
|
||
|
@@ -667,8 +667,7 @@ function check_free_space_mileage() {
|
||
|
|
||
|
|
||
|
function check_blktrace() {
|
||
|
- which blktrace >/dev/null 2>&1;
|
||
|
- if [ $? -ne 0 ]; then
|
||
|
+ if ! command -v blktrace >/dev/null 2>&1; then
|
||
|
echo "$WRP_TOOLNAME: Could not find blktrace. Please make sure that the blktrace package is installed and matches the level in the documentation.";
|
||
|
exit 1;
|
||
|
fi
|
||
|
--
|
||
|
2.45.2
|
||
|
|
||
|
|
||
|
From 9770d8bff4b2ef6f01af1c273d1eac121b672a85 Mon Sep 17 00:00:00 2001
|
||
|
From: Marc Hartmayer <mhartmay@linux.ibm.com>
|
||
|
Date: Thu, 6 Jun 2024 15:07:45 +0000
|
||
|
Subject: [PATCH 2/2] Revert "zipl/src: Fix problems when target parameters are
|
||
|
specified by user"
|
||
|
|
||
|
The commit fb0b6263d1a9 ("zipl/src: Fix problems when target parameters
|
||
|
are specified by user") breaks the case where the user has to provide
|
||
|
all target attributes via the zipl command line, because the target
|
||
|
device cannot be used to retrieve those attributes.
|
||
|
|
||
|
$ zipl -V --blsdir /tmp/tmp.xHmFUdgBCi/boot//loader/entries/ --config /tmp/tmp.dSv9MJ3svs
|
||
|
Looking for components in '/lib/s390-tools'
|
||
|
Using config file '/tmp/tmp.dSv9MJ3svs' (from command line)
|
||
|
Using BLS config file '/tmp/tmp.xHmFUdgBCi/boot//loader/entries//50_normal.conf'
|
||
|
Using BLS config file '/tmp/tmp.xHmFUdgBCi/boot//loader/entries//45_normal_swiotlb.conf'
|
||
|
Using BLS config file '/tmp/tmp.xHmFUdgBCi/boot//loader/entries//40_pv.conf'
|
||
|
Using BLS config file '/tmp/tmp.xHmFUdgBCi/boot//loader/entries//30_pv_reboot.conf'
|
||
|
Secure boot support: yes
|
||
|
Target device information
|
||
|
Device..........................: 2b:00
|
||
|
Device name.....................: nbd0 *)
|
||
|
Device driver name..............: nbd
|
||
|
Type............................: disk device
|
||
|
Disk layout.....................: SCSI disk layout *)
|
||
|
Geometry - start................: 2048 *)
|
||
|
File system block size..........: 4096
|
||
|
Physical block size.............: 512 *)
|
||
|
Device size in physical blocks..: 2095071
|
||
|
*) Data provided by user.
|
||
|
Building bootmap in '/tmp/tmp.xHmFUdgBCi/boot/'
|
||
|
Building menu 'zipl-automatic-menu'
|
||
|
Adding #1: IPL section 'Normal Guest' (default)
|
||
|
initial ramdisk...: /tmp/tmp.xHmFUdgBCi/boot//ramdisk-s390x
|
||
|
kernel image......: /tmp/tmp.xHmFUdgBCi/boot//vmlinux-s390x
|
||
|
zIPL environment block content:
|
||
|
Error: Could not add image file '/tmp/tmp.xHmFUdgBCi/boot//vmlinux-s390x': Could not get disk geometry
|
||
|
|
||
|
This reverts commit fb0b6263d1a9a497760a21ccb178748ec5ccf955.
|
||
|
|
||
|
Acked-by: Eduard Shishkin <edward6@linux.ibm.com>
|
||
|
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
|
||
|
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
|
||
|
(cherry picked from commit 63ff07ba38dda99e2661a097d05266555c727a2e)
|
||
|
---
|
||
|
zipl/include/job.h | 1 -
|
||
|
zipl/src/bootmap.c | 40 +++++++++++++++++++---------------------
|
||
|
zipl/src/disk.c | 3 ---
|
||
|
zipl/src/job.c | 3 ++-
|
||
|
4 files changed, 21 insertions(+), 26 deletions(-)
|
||
|
|
||
|
diff --git a/zipl/include/job.h b/zipl/include/job.h
|
||
|
index e46788b..597d400 100644
|
||
|
--- a/zipl/include/job.h
|
||
|
+++ b/zipl/include/job.h
|
||
|
@@ -152,7 +152,6 @@ static inline int target_parameters_are_set(struct job_target_data *td)
|
||
|
|
||
|
int job_get(int argc, char* argv[], struct job_data** data);
|
||
|
void job_free(struct job_data* job);
|
||
|
-void free_target_data(struct job_target_data *td);
|
||
|
int type_from_target(char *target, disk_type_t *type);
|
||
|
int check_job_dump_images(struct job_dump_data* dump, char* name);
|
||
|
int check_job_images_ngdump(struct job_dump_data* dump, char* name);
|
||
|
diff --git a/zipl/src/bootmap.c b/zipl/src/bootmap.c
|
||
|
index 82b77d0..f6f5bac 100644
|
||
|
--- a/zipl/src/bootmap.c
|
||
|
+++ b/zipl/src/bootmap.c
|
||
|
@@ -304,6 +304,7 @@ static int add_component_file_range(struct install_set *bis,
|
||
|
address_t load_address,
|
||
|
size_t trailer, void *component,
|
||
|
int add_files,
|
||
|
+ struct job_target_data *target,
|
||
|
int comp_id, int menu_idx,
|
||
|
int program_table_id)
|
||
|
{
|
||
|
@@ -338,15 +339,8 @@ static int add_component_file_range(struct install_set *bis,
|
||
|
return -1;
|
||
|
}
|
||
|
} else {
|
||
|
- /*
|
||
|
- * Make sure that file is on target device.
|
||
|
- * For this, retrieve info of the underlying disk without
|
||
|
- * any user hints
|
||
|
- */
|
||
|
- struct job_target_data tmp = {.source = source_unknown};
|
||
|
-
|
||
|
- rc = disk_get_info_from_file(filename, &tmp, &file_info);
|
||
|
- free_target_data(&tmp);
|
||
|
+ /* Make sure file is on correct device */
|
||
|
+ rc = disk_get_info_from_file(filename, target, &file_info);
|
||
|
if (rc)
|
||
|
return -1;
|
||
|
if (file_info->device != bis->info->device) {
|
||
|
@@ -383,11 +377,12 @@ write_segment_table:
|
||
|
static int add_component_file(struct install_set *bis, const char *filename,
|
||
|
address_t load_address, size_t trailer,
|
||
|
void *component, int add_files,
|
||
|
- int comp_id, int menu_idx, int program_table_id)
|
||
|
+ struct job_target_data *target, int comp_id,
|
||
|
+ int menu_idx, int program_table_id)
|
||
|
{
|
||
|
return add_component_file_range(bis, filename, NULL, load_address,
|
||
|
trailer, component, add_files,
|
||
|
- comp_id, menu_idx,
|
||
|
+ target, comp_id, menu_idx,
|
||
|
program_table_id);
|
||
|
}
|
||
|
|
||
|
@@ -549,7 +544,8 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||
|
bool add_envblk, struct job_envblk_data *envblk,
|
||
|
struct job_ipl_data *ipl, disk_blockptr_t *program,
|
||
|
int verbose, int add_files, component_header_type type,
|
||
|
- int is_secure, int menu_idx, int program_table_id)
|
||
|
+ struct job_target_data *target, int is_secure,
|
||
|
+ int menu_idx, int program_table_id)
|
||
|
{
|
||
|
struct signature_header sig_head;
|
||
|
size_t ramdisk_size, image_size;
|
||
|
@@ -671,7 +667,7 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||
|
/* Add stage 3 loader to bootmap */
|
||
|
rc = add_component_file(bis, ZIPL_STAGE3_PATH, STAGE3_LOAD_ADDRESS,
|
||
|
signature_size, VOID_ADD(table, offset), 1,
|
||
|
- COMPONENT_ID_LOADER, menu_idx,
|
||
|
+ target, COMPONENT_ID_LOADER, menu_idx,
|
||
|
program_table_id);
|
||
|
if (rc) {
|
||
|
error_text("Could not add internal loader file '%s'",
|
||
|
@@ -749,7 +745,7 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||
|
|
||
|
rc = add_component_file(bis, ipl->common.image, ipl->common.image_addr,
|
||
|
signature_size, VOID_ADD(table, offset),
|
||
|
- add_files, COMPONENT_ID_KERNEL_IMAGE,
|
||
|
+ add_files, target, COMPONENT_ID_KERNEL_IMAGE,
|
||
|
menu_idx, program_table_id);
|
||
|
if (rc) {
|
||
|
error_text("Could not add image file '%s'", ipl->common.image);
|
||
|
@@ -809,7 +805,7 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||
|
ipl->common.ramdisk_addr,
|
||
|
signature_size,
|
||
|
VOID_ADD(table, offset),
|
||
|
- add_files, COMPONENT_ID_RAMDISK,
|
||
|
+ add_files, target, COMPONENT_ID_RAMDISK,
|
||
|
menu_idx, program_table_id);
|
||
|
if (rc) {
|
||
|
error_text("Could not add ramdisk '%s'",
|
||
|
@@ -865,7 +861,7 @@ static int add_ipl_program(struct install_set *bis, char *filename,
|
||
|
rc = add_component_file_range(bis, filename, ®,
|
||
|
ipl->envblk_addr, 0,
|
||
|
VOID_ADD(table, offset),
|
||
|
- 0,
|
||
|
+ 0, target,
|
||
|
COMPONENT_ID_ENVBLK,
|
||
|
menu_idx,
|
||
|
program_table_id);
|
||
|
@@ -897,6 +893,7 @@ static int add_segment_program(struct install_set *bis,
|
||
|
struct job_segment_data *segment,
|
||
|
disk_blockptr_t *program, int verbose,
|
||
|
int add_files, component_header_type type,
|
||
|
+ struct job_target_data *target,
|
||
|
int program_table_id)
|
||
|
{
|
||
|
void *table;
|
||
|
@@ -916,7 +913,7 @@ static int add_segment_program(struct install_set *bis,
|
||
|
printf(" segment file......: %s\n", segment->segment);
|
||
|
|
||
|
rc = add_component_file(bis, segment->segment, segment->segment_addr, 0,
|
||
|
- VOID_ADD(table, offset), add_files,
|
||
|
+ VOID_ADD(table, offset), add_files, target,
|
||
|
COMPONENT_ID_SEGMENT_FILE, 0 /* menu_idx */,
|
||
|
program_table_id);
|
||
|
if (rc) {
|
||
|
@@ -999,7 +996,7 @@ static int add_dump_program(struct install_set *bis, struct job_data *job,
|
||
|
ipl.common.parmline = dump->common.parmline;
|
||
|
ipl.common.parm_addr = dump->common.parm_addr;
|
||
|
return add_ipl_program(bis, NULL, false, NULL, &ipl, program,
|
||
|
- verbose, 1, type, SECURE_BOOT_DISABLED,
|
||
|
+ verbose, 1, type, target, SECURE_BOOT_DISABLED,
|
||
|
0 /* menu_idx */, program_table_id);
|
||
|
}
|
||
|
|
||
|
@@ -1044,7 +1041,8 @@ static int build_program_table(struct job_data *job,
|
||
|
true, &job->envblk, &job->data.ipl,
|
||
|
&table[0], verbose || job->command_line,
|
||
|
job->add_files, component_header,
|
||
|
- job->is_secure, 0, program_table_id);
|
||
|
+ &job->target, job->is_secure, 0,
|
||
|
+ program_table_id);
|
||
|
break;
|
||
|
case job_segment:
|
||
|
if (bis->print_details) {
|
||
|
@@ -1057,7 +1055,7 @@ static int build_program_table(struct job_data *job,
|
||
|
rc = add_segment_program(bis, &job->data.segment, &table[0],
|
||
|
verbose || job->command_line,
|
||
|
job->add_files, COMPONENT_HEADER_IPL,
|
||
|
- program_table_id);
|
||
|
+ &job->target, program_table_id);
|
||
|
break;
|
||
|
case job_dump_partition:
|
||
|
/* Only useful for a partition dump that uses a dump kernel*/
|
||
|
@@ -1116,7 +1114,7 @@ static int build_program_table(struct job_data *job,
|
||
|
&table[job->data.menu.entry[i].pos],
|
||
|
verbose || job->command_line,
|
||
|
job->add_files, component_header,
|
||
|
- is_secure, i,
|
||
|
+ &job->target, is_secure, i,
|
||
|
program_table_id);
|
||
|
break;
|
||
|
case job_print_usage:
|
||
|
diff --git a/zipl/src/disk.c b/zipl/src/disk.c
|
||
|
index b4bd49a..38a637c 100644
|
||
|
--- a/zipl/src/disk.c
|
||
|
+++ b/zipl/src/disk.c
|
||
|
@@ -528,9 +528,6 @@ static int disk_set_info_complete(struct job_target_data *td,
|
||
|
* config file, or special "target options" of zipl tool.
|
||
|
* If target parameters were specified by user, then the step 1 above
|
||
|
* is skipped.
|
||
|
-
|
||
|
- * To exclude any user assumptions about the DEVICE, this function
|
||
|
- * should be called with TD pointing to a zeroed structure.
|
||
|
*
|
||
|
* DEVICE: logical, or physical device, optionally formated with a
|
||
|
* file system.
|
||
|
diff --git a/zipl/src/job.c b/zipl/src/job.c
|
||
|
index 2066402..27f0181 100644
|
||
|
--- a/zipl/src/job.c
|
||
|
+++ b/zipl/src/job.c
|
||
|
@@ -370,7 +370,8 @@ get_command_line(int argc, char* argv[], struct command_line* line)
|
||
|
}
|
||
|
|
||
|
|
||
|
-void free_target_data(struct job_target_data *data)
|
||
|
+static void
|
||
|
+free_target_data(struct job_target_data* data)
|
||
|
{
|
||
|
free(data->bootmap_dir);
|
||
|
free(data->targetbase);
|
||
|
--
|
||
|
2.45.2
|
||
|
|