diff --git a/.gitignore b/.gitignore index 1580e5b..6d1a9b5 100644 --- a/.gitignore +++ b/.gitignore @@ -22,23 +22,3 @@ /nvme-cli-2.0-rc6.tar.gz /nvme-cli-2.0-rc8.tar.gz /nvme-cli-2.0.tar.gz -/nvme-cli-2.1-rc0.tar.gz -/nvme-cli-2.1.1.tar.gz -/nvme-cli-2.1.2.tar.gz -/nvme-cli-2.2.tar.gz -/nvme-cli-2.2.1.tar.gz -/nvme-cli-2.3.tar.gz -/nvme-cli-2.4.tar.gz -/nvme-cli-2.5.tar.gz -/nvme-cli-2.6.tar.gz -/nvme-cli-2.7.1.tar.gz -/nvme-cli-2.8.tar.gz -/nvme-cli-2.9.1.tar.gz -/nvme-cli-2.10.tar.gz -/nvme-cli-2.10.2.tar.gz -/nvme-cli-2.11.tar.gz -/nvme-cli-2.12.tar.gz -/nvme-cli-2.13.tar.gz -/nvme-cli-2.14.tar.gz -/nvme-cli-2.15.tar.gz -/nvme-cli-2.16.tar.gz diff --git a/99-nvme-nbft-connect.sh b/99-nvme-nbft-connect.sh deleted file mode 100644 index 1dc0324..0000000 --- a/99-nvme-nbft-connect.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -if [[ "$1" == nbft* ]] && [[ "$2" == "up" ]]; then - systemctl start nvmf-connect-nbft.service -fi diff --git a/99-nvme-nbft-no-ignore-carrier.conf b/99-nvme-nbft-no-ignore-carrier.conf deleted file mode 100644 index 4f19515..0000000 --- a/99-nvme-nbft-no-ignore-carrier.conf +++ /dev/null @@ -1,15 +0,0 @@ -# Boot from NVMe over TCP (NBFT) -# -# For NVMe/TCP connections that provide namespaces containing rootfs -# it is crucial to react on carrier events and reconnect any missing -# NVMe/TCP connections as defined in the ACPI NBFT table. A custom -# /usr/lib/NetworkManager/dispatcher.d/99-nvme-nbft-connect.sh hook -# will respawn nvmf-connect-nbft.service on such occasion. - -[device-nbft-no-ignore-carrier] - -# only affects nbft0, nbft1, ... interfaces -match-device=interface-name:nbft* - -# react on link up/down events -ignore-carrier=no diff --git a/nvme-cli.spec b/nvme-cli.spec index 5fa7a3a..d2516c4 100644 --- a/nvme-cli.spec +++ b/nvme-cli.spec @@ -1,36 +1,35 @@ -# RHEL 8 compatibility -%{!?version_no_tilde: %define version_no_tilde %{shrink:%(echo '%{version}' | tr '~' '-')}} - -%global nmlibdir %{_prefix}/lib/NetworkManager - Name: nvme-cli -Version: 2.16 -Release: 1%{?dist} +Version: 2.0 +Release: 2%{?dist} Summary: NVMe management command line interface -License: GPL-2.0-only +License: GPLv2+ URL: https://github.com/linux-nvme/nvme-cli Source0: %{url}/archive/v%{version_no_tilde}/%{name}-%{version_no_tilde}.tar.gz -Source1: 99-nvme-nbft-connect.sh -Source2: 99-nvme-nbft-no-ignore-carrier.conf -BuildRequires: meson >= 0.53 +BuildRequires: meson >= 0.47.0 +BuildRequires: libuuid-devel BuildRequires: gcc gcc-c++ BuildRequires: systemd-devel -BuildRequires: systemd-rpm-macros BuildRequires: zlib-devel BuildRequires: openssl-devel -%if (0%{?rhel} == 0) || (0%{?rhel} > 9) -BuildRequires: kernel-headers -%endif -BuildRequires: libnvme-devel >= 1.16.1 +BuildRequires: libnvme-devel >= 1.0 BuildRequires: json-c-devel >= 0.14 - +BuildRequires: python3-nose2 +BuildRequires: python3-mypy +BuildRequires: python3-flake8 +BuildRequires: python3-autopep8 +BuildRequires: python3-isort BuildRequires: asciidoc BuildRequires: xmlto -Requires: util-linux +# https://bugzilla.redhat.com/show_bug.cgi?id=2115983 +# backport of bash completion fixes from git master +Patch0: nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch +Patch1: nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch +Patch2: nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch +Patch3: nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch %description @@ -41,22 +40,15 @@ nvme-cli provides NVM-Express user space tooling for Linux. %build -%meson -Dudevrulesdir=%{_udevrulesdir} -Dsystemddir=%{_unitdir} -Dpdc-enabled=false -Ddocs=all -Ddocs-build=true -Dhtmldir=%{_pkgdocdir} +%meson -Dudevrulesdir=%{_udevrulesdir} -Dsystemddir=%{_unitdir} -Ddocs=all -Ddocs-build=true -Dhtmldir=%{_pkgdocdir} %meson_build %install %meson_install -%{__install} -pm 644 README.md %{buildroot}%{_pkgdocdir} -mkdir -p $RPM_BUILD_ROOT%{nmlibdir}/dispatcher.d -mkdir -p $RPM_BUILD_ROOT%{nmlibdir}/conf.d -%{__install} -pm 755 %{SOURCE1} $RPM_BUILD_ROOT%{nmlibdir}/dispatcher.d/ -%{__install} -pm 644 %{SOURCE2} $RPM_BUILD_ROOT%{nmlibdir}/conf.d/ # hostid and hostnqn are supposed to be unique per machine. We obviously # can't package them. -# nvme-stas ships the stas-config@.service that will take care -# of generating these files if missing. See rhbz 2065886#c19 rm -f %{buildroot}%{_sysconfdir}/nvme/hostid rm -f %{buildroot}%{_sysconfdir}/nvme/hostnqn @@ -68,172 +60,40 @@ mv %{buildroot}%{_pkgdocdir}/nvme %{buildroot}%{_pkgdocdir}/html rm -rf %{buildroot}%{_pkgdocdir}/nvme -%post -# https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/#_systemd -%systemd_post nvmefc-boot-connections.service -%systemd_post nvmf-autoconnect.service -%systemd_post nvmf-connect@.service -%systemd_post nvmf-connect-nbft.service -if [ -S /run/udev/control ]; then - udevadm control --reload - udevadm trigger -fi - -%preun -%systemd_preun nvmefc-boot-connections.service -%systemd_preun nvmf-autoconnect.service -%systemd_preun nvmf-connect@.service -%systemd_preun nvmf-connect-nbft.service - -%postun -%systemd_postun nvmefc-boot-connections.service -%systemd_postun nvmf-autoconnect.service -%systemd_postun nvmf-connect@.service -%systemd_postun nvmf-connect-nbft.service - - %files %license LICENSE +%doc README.md %doc %{_pkgdocdir} %{_sbindir}/nvme %{_mandir}/man1/nvme*.gz %{_datadir}/bash-completion/completions/nvme %{_datadir}/zsh/site-functions/_nvme %dir %{_sysconfdir}/nvme -%config(noreplace) %{_sysconfdir}/nvme/discovery.conf +%{_sysconfdir}/nvme/discovery.conf %{_unitdir}/nvmefc-boot-connections.service %{_unitdir}/nvmf-autoconnect.service %{_unitdir}/nvmf-connect.target %{_unitdir}/nvmf-connect@.service -%{_unitdir}/nvmf-connect-nbft.service -%{_udevrulesdir}/65-persistent-net-nbft.rules %{_udevrulesdir}/70-nvmf-autoconnect.rules -%{_udevrulesdir}/70-nvmf-keys.rules -%{_udevrulesdir}/71-nvmf-netapp.rules -%{_udevrulesdir}/71-nvmf-vastdata.rules -%{_udevrulesdir}/71-nvmf-hpe.rules +%{_udevrulesdir}/71-nvmf-iopolicy-netapp.rules # Do not install the dracut rule yet. See rhbz 1742764 # /usr/lib/dracut/dracut.conf.d/70-nvmf-autoconnect.conf -%{nmlibdir}/dispatcher.d/99-nvme-nbft-connect.sh -%{nmlibdir}/conf.d/99-nvme-nbft-no-ignore-carrier.conf + + +%post +if [ $1 -eq 1 ] || [ $1 -eq 2 ]; then + if [ ! -s %{_sysconfdir}/nvme/hostnqn ]; then + echo $(nvme gen-hostnqn) > %{_sysconfdir}/nvme/hostnqn + fi + if [ ! -s %{_sysconfdir}/nvme/hostid ]; then + uuidgen > %{_sysconfdir}/nvme/hostid + fi +fi %changelog -* Thu Dec 04 2025 Tomas Bzatek - 2.16-1 -- Update to 2.16 - -* Fri Aug 15 2025 Tomas Bzatek - 2.15-2 -- Fix nvme-list JSON output compatibility -- Rename 71-nvme-hpe.rules to 71-nvmf-hpe.rules - -* Fri Jul 25 2025 Tomas Bzatek - 2.15-1 -- Update to 2.15 - -* Thu Jul 24 2025 Fedora Release Engineering - 2.14-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Wed Jul 09 2025 Tomas Bzatek - 2.14-1 -- Update to 2.14 -- Disable Persistent Discovery Controllers by default - -* Fri Apr 11 2025 Tomas Bzatek - 2.13-1 -- Update to 2.13 - -* Mon Mar 17 2025 Tomas Bzatek - 2.12-1 -- Update to 2.12 - -* Tue Feb 04 2025 Tomas Bzatek - 2.11-3 -- Add systemd units scriptlets -- Reload udevd after installing udev rules - -* Fri Jan 17 2025 Fedora Release Engineering - 2.11-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Thu Oct 31 2024 Tomas Bzatek - 2.11-1 -- Update to 2.11 - -* Mon Aug 26 2024 Tomas Bzatek - 2.10.2-2 -- Install NetworkManager override for nbft interfaces -- Rename reconnect NetworkManager hook to 99-nvme-nbft-connect.sh - -* Mon Aug 05 2024 Tomas Bzatek - 2.10.2-1 -- Update to 2.10.2 - -* Mon Aug 05 2024 Tomas Bzatek - 2.10-1 -- Update to 2.10 - -* Thu Jul 18 2024 Fedora Release Engineering - 2.9.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Mon Jun 03 2024 Tomas Bzatek - 2.9.1-2 -- Install custom nvmf-connect-nbft.sh NetworkManager hook - -* Fri May 03 2024 Tomas Bzatek - 2.9.1-1 -- Update to 2.9.1 - -* Tue Apr 23 2024 Tomas Bzatek - 2.8-2 -- Harden the systemd units - -* Wed Feb 14 2024 Tomas Bzatek - 2.8-1 -- Update to 2.8 - -* Fri Feb 09 2024 Tomas Bzatek - 2.7.1-4 -- Lower the verbosity of TP4126 hostnqn-hostid consistency checks - -* Thu Jan 25 2024 Fedora Release Engineering - 2.7.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Sun Jan 21 2024 Fedora Release Engineering - 2.7.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Thu Dec 28 2023 Tomas Bzatek - 2.7.1-1 -- Update to 2.7.1 - -* Fri Sep 29 2023 Tomas Bzatek - 2.6-1 -- Update to 2.6 - -* Thu Aug 17 2023 Tomas Bzatek - 2.5-4 -- Mark /etc/nvme/discovery.conf as (noreplace) - -* Mon Aug 14 2023 Tomas Bzatek - 2.5-3 -- Backport 'fabrics: Use corresponding hostid when hostnqn is generated' - -* Thu Jul 20 2023 Fedora Release Engineering - 2.5-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Tue Jul 04 2023 Tomas Bzatek - 2.5-1 -- Update to 2.5 - -* Thu Apr 20 2023 Tomas Bzatek - 2.4-2 -- Backport the NBFT support from git master - -* Mon Apr 03 2023 Tomas Bzatek - 2.4-1 -- Update to 2.4 - -* Wed Feb 01 2023 Tomas Bzatek - 2.3-1 -- Update to 2.3 - -* Thu Jan 19 2023 Fedora Release Engineering - 2.2.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Fri Nov 04 2022 Tomas Bzatek - 2.2.1-1 -- Update to 2.2.1 - -* Tue Nov 01 2022 Tomas Bzatek - 2.2-1 -- Update to 2.2 - -* Fri Aug 19 2022 Tomas Bzatek - 2.1.2-1 -- Update to 2.1.2 - -* Fri Aug 05 2022 Tomas Bzatek - 2.1.1-1 -- Update to 2.1.1 - -* Fri Jul 22 2022 Fedora Release Engineering - 2.1~rc0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Fri Jul 15 2022 Tomas Bzatek - 2.1~rc0-1 -- Update to 2.1-rc0 -- Drop the hostnqn generate scriptlet (#2065886) +* Fri Aug 19 2022 Tomas Bzatek - 2.0-2 +- Fix bash completion (#2115983) * Mon Apr 11 2022 Tomas Bzatek - 2.0-1 - Update to 2.0 diff --git a/nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch b/nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch new file mode 100644 index 0000000..60eca5a --- /dev/null +++ b/nvme-cli_2.1-bash-nvme-completion.sh_a_better_fix_for_readonly_with_bash_5x.patch @@ -0,0 +1,33 @@ +From 86b73b3136ec96dd3eefd5a721744ed2d6d7bd41 Mon Sep 17 00:00:00 2001 +From: Evgeny Grin +Date: Fri, 17 Jun 2022 15:00:39 +0300 +Subject: [PATCH] bash-nvme-completion.sh: a better fix for "readonly" with + bash 5.x + +The error with one-line "readonly" with assignment on bash 5.x was fixed +by 25fd8c707b106ca0763402566ad657ef710bf09e. This commit restores "readonly" +functionality and adds some uniformity. +--- + completions/bash-nvme-completion.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh +index 00593b96a..e8177018a 100644 +--- a/completions/bash-nvme-completion.sh ++++ b/completions/bash-nvme-completion.sh +@@ -55,6 +55,7 @@ typeset -Ar _plugin_subcmds=( + [nvidia]="id-ctrl" + [ymtc]="smart-log-add" + ) ++readonly _plugin_subcmds + + # Associative array mapping plugins to coresponding option completions + typeset -Ar _plugin_funcs=( +@@ -75,6 +76,7 @@ typeset -Ar _plugin_funcs=( + [nvidia]="plugin_nvidia_opts" + [ymtc]="plugin_ymtc_opts" + ) ++readonly _plugin_funcs + + # Top level commands + _cmds="list list-subsys id-ctrl id-ns \ diff --git a/nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch b/nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch new file mode 100644 index 0000000..e513247 --- /dev/null +++ b/nvme-cli_2.1-bash-nvme-completion.sh_fixed_error_when_sourced_twice.patch @@ -0,0 +1,25 @@ +From eac9f9b70081ff2df2e2ea11efb8fc6ec3754f64 Mon Sep 17 00:00:00 2001 +From: Evgeny Grin +Date: Fri, 17 Jun 2022 15:00:39 +0300 +Subject: [PATCH] bash-nvme-completion.sh: fixed error when sourced twice + +One-line "readonly" with assignment produce error if completion file +is sourced for the second time (/etc/profile reload, su etc.) +--- + completions/bash-nvme-completion.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh +index e5d9ff190..7b8a2121d 100644 +--- a/completions/bash-nvme-completion.sh ++++ b/completions/bash-nvme-completion.sh +@@ -5,7 +5,8 @@ + # Kelly Kaoudis kelly.n.kaoudis at intel.com, Aug. 2015 + + # Constant to indicate command has no options +-readonly NO_OPTS="" ++NO_OPTS="" ++readonly NO_OPTS + + # Associative array of plugins and associated subcommands + # Order here is same as PLUGIN_OBJS in Makefile diff --git a/nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch b/nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch new file mode 100644 index 0000000..84bcd87 --- /dev/null +++ b/nvme-cli_2.1-bash-nvme-completion.sh_fixed_typo_with_seagate_plugin.patch @@ -0,0 +1,23 @@ +From 4284d4cc299e8604f898856bdd38fc4979e56586 Mon Sep 17 00:00:00 2001 +From: Evgeny Grin +Date: Fri, 17 Jun 2022 15:08:02 +0300 +Subject: [PATCH] bash-nvme-completion.sh: fixed typo with seagate plugin + +Obvious typo resulted in broken completion for seagete plugin +--- + completions/bash-nvme-completion.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh +index 7b8a2121d..00593b96a 100644 +--- a/completions/bash-nvme-completion.sh ++++ b/completions/bash-nvme-completion.sh +@@ -940,7 +940,7 @@ plugin_micron_opts () { + return 0 + } + +-lugin_seagate_opts () { ++plugin_seagate_opts () { + local opts="" + local compargs="" + diff --git a/nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch b/nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch new file mode 100644 index 0000000..12268f9 --- /dev/null +++ b/nvme-cli_2.1-completions_Collapse_declaration_and_attribute_assignment.patch @@ -0,0 +1,66 @@ +From 25fd8c707b106ca0763402566ad657ef710bf09e Mon Sep 17 00:00:00 2001 +From: Brad Mouring +Date: Mon, 2 May 2022 22:38:24 -0500 +Subject: [PATCH] completions: Collapse declaration and attribute assignment + +Previously, the associative arrays for the vendor/subcommands and +vendor/functions listings were split into a declaration of type +(using "typeset") and attribute definition (using "readonly"). On +bash 5.1.16 (at least), this lead to the following error (reported +after enabling -xv to expand and print shell inputs) + + ... + + . /usr/share/bash-completion/completions/nvme + # bash tab completion for the nvme command line utility + # (unfortunately, bash won't let me add descriptions to cmds) + # Kelly Kaoudis kelly.n.kaoudis at intel.com, Aug. 2015 + + # Constant to indicate command has no options + readonly NO_OPTS="" + ++ readonly NO_OPTS= + ++ NO_OPTS= + + # Associative array of plugins and associated subcommands + # Order here is same as PLUGIN_OBJS in Makefile + typeset -A _plugin_subcmds + ++ typeset -A _plugin_subcmds + readonly _plugin_subcmds=( + [intel]="id-ctrl internal-log lat-stats \ + ... + ++ _plugin_subcmds=(['intel']='id-ctrl internal-log lat-stats... + bash: 'intel': syntax error: operand expected (error token is "'intel'") + ... + +Using the available flags for "typeset" to declare the variables as +readonly arrays resolved the issue (and allows for bash completion +to work as-expected) + +Signed-off-by: Brad Mouring +--- + completions/bash-nvme-completion.sh | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh +index 5e0eb23bb..51931bc19 100644 +--- a/completions/bash-nvme-completion.sh ++++ b/completions/bash-nvme-completion.sh +@@ -7,8 +7,7 @@ readonly NO_OPTS="" + + # Associative array of plugins and associated subcommands + # Order here is same as PLUGIN_OBJS in Makefile +-typeset -A _plugin_subcmds +-readonly _plugin_subcmds=( ++typeset -Ar _plugin_subcmds=( + [intel]="id-ctrl internal-log lat-stats \ + set-bucket-thresholds lat-stats-tracking \ + market-name smart-log-add temp-stats" +@@ -55,8 +54,7 @@ readonly _plugin_subcmds=( + ) + + # Associative array mapping plugins to coresponding option completions +-typeset -A _plugin_funcs +-readonly _plugin_funcs=( ++typeset -Ar _plugin_funcs=( + [intel]="plugin_intel_opts" + [amzn]="plugin_amzn_opts" + [memblaze]="plugin_memblaze_opts" diff --git a/sources b/sources index e58ea56..2b256e1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (nvme-cli-2.16.tar.gz) = 507018ff41832574bef5b88ea6a17336b9792c54f8e5c619d041bce23124e1d6d5e5e824407f46d4f1b4d6899125885eb14289f3399e61c7e7a59a603f1635e2 +SHA512 (nvme-cli-2.0.tar.gz) = 24a00ee8e0fc963c1757797413ff5725cec18f821a714d6bbbf37906010d72934d6fdd7b466c085f13716a5279d1a7bd3254ee474e37a0ecd00a85ef23e12417