diff --git a/_servicedata b/_servicedata index 7c2036f..95db811 100644 --- a/_servicedata +++ b/_servicedata @@ -1,4 +1,4 @@ https://github.com/lyonel/lshw.git - 9567d10e4eb1c561030444dd3b7fe50ebb755f3e \ No newline at end of file + 89b3b6b9ed03f22ca98954712db5a90acf2c6755 \ No newline at end of file diff --git a/lshw-B.02.18+git.20190613.tar.xz b/lshw-B.02.18+git.20190613.tar.xz deleted file mode 100644 index eca1fda..0000000 --- a/lshw-B.02.18+git.20190613.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:21711d339382ab834e242622bee7c040a75c499811d3159575acc8bfa9a876c9 -size 1695448 diff --git a/lshw-B.02.18+git.20191228.tar.xz b/lshw-B.02.18+git.20191228.tar.xz new file mode 100644 index 0000000..4b341e0 --- /dev/null +++ b/lshw-B.02.18+git.20191228.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9caaed85389fd0f5bdc32fb20d976015e886a016234c3636d27d74991ffeb82d +size 1696040 diff --git a/lshw-add-notime-option-to-manpage.patch b/lshw-add-notime-option-to-manpage.patch index fdc73cf..62529d4 100644 --- a/lshw-add-notime-option-to-manpage.patch +++ b/lshw-add-notime-option-to-manpage.patch @@ -13,20 +13,20 @@ Signed-off-by: Brahadambal Srinivasan src/lshw.1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) -diff --git a/src/lshw.1 b/src/lshw.1 -index 79c3619..31ff77f 100644 ---- a/src/lshw.1 -+++ b/src/lshw.1 +Index: lshw-B.02.18+git.20191228/src/lshw.1 +=================================================================== +--- lshw-B.02.18+git.20191228.orig/src/lshw.1 ++++ lshw-B.02.18+git.20191228/src/lshw.1 @@ -10,7 +10,7 @@ lshw \- list hardware .sp \fBlshw\fR [ \fB-X\fR ] .sp -\fBlshw\fR [ \fB [ -html ] [ -short ] [ -xml ] [ -json ] [ -businfo ] \fR ] [ \fB-dump \fIfilename\fB\fR ] [ \fB-class \fIclass\fB\fR\fI...\fR ] [ \fB-disable \fItest\fB\fR\fI...\fR ] [ \fB-enable \fItest\fB\fR\fI...\fR ] [ \fB-sanitize\fR ] [ \fB-numeric\fR ] [ \fB-quiet\fR ] -+\fBlshw\fR [ \fB [ -html ] [ -short ] [ -xml ] [ -json ] [ -businfo ] \fR ] [ \fB-dump \fIfilename\fB\fR ] [ \fB-class \fIclass\fB\fR\fI...\fR ] [ \fB-disable \fItest\fB\fR\fI...\fR ] [ \fB-enable \fItest\fB\fR\fI...\fR ] [ \fB-sanitize\fR ] [ \fB-numeric\fR ] [ \fB-notime\fR ] [ \fB-quiet\fR ] ++\fBlshw\fR [ \fB [ -html ] [ -short ] [ -xml ] [ -json ] [ -businfo ] \fR ] [ \fB-dump \fIfilename\fB\fR ] [ \fB-class \fIclass\fB\fR\fI...\fR ] [ \fB-disable \fItest\fB\fR\fI...\fR ] [ \fB-enable \fItest\fB\fR\fI...\fR ] [ \fB-sanitize\fR ] [ \fB-numeric\fR ] [ \fB-notime\fR ] [ \fB-quiet\fR ] .SH "DESCRIPTION" .PP -@@ -74,6 +74,8 @@ Remove potentially sensitive information from output (IP addresses, serial numbe +@@ -74,6 +74,8 @@ Remove potentially sensitive information .TP \fB-numeric\fR Also display numeric IDs (for PCI and USB devices). @@ -35,5 +35,3 @@ index 79c3619..31ff77f 100644 .SH "BUGS" .PP \fBlshw\fR currently does not detect --- -2.18.1 diff --git a/lshw-display-latest-version.patch b/lshw-display-latest-version.patch index 4e8d789..2021428 100644 --- a/lshw-display-latest-version.patch +++ b/lshw-display-latest-version.patch @@ -14,10 +14,10 @@ Signed-off-by: Vasant Hegde src/lshw.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -Index: lshw-B.02.18+git.20190613/src/lshw.cc +Index: lshw-B.02.18+git.20191228/src/lshw.cc =================================================================== ---- lshw-B.02.18+git.20190613.orig/src/lshw.cc -+++ lshw-B.02.18+git.20190613/src/lshw.cc +--- lshw-B.02.18+git.20191228.orig/src/lshw.cc ++++ lshw-B.02.18+git.20191228/src/lshw.cc @@ -121,7 +121,7 @@ char **argv) printf("%s\n", getpackageversion()); if(latest) diff --git a/lshw-help-man.patch b/lshw-help-man.patch deleted file mode 100644 index b8a096f..0000000 --- a/lshw-help-man.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 33951733bb800321780444a178b969c212c65875 Mon Sep 17 00:00:00 2001 -From: Seeteena Thoufeek -Date: Wed, 12 Jul 2017 11:00:43 +0530 -Subject: [PATCH] Update help message and man page - -lshw -dump option displays output on stdout as well as stores SQLite -format data into a file. Lets update man page and help message to -reflect this. - -Signed-off-by: Seeteena Thoufeek -[Updated description - Vasant] -Signed-off-by: Vasant Hegde ---- - src/lshw.1 | 2 +- - src/lshw.cc | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -Index: lshw-B.02.18+git.20190613/src/lshw.1 -=================================================================== ---- lshw-B.02.18+git.20190613.orig/src/lshw.1 -+++ lshw-B.02.18+git.20190613/src/lshw.1 -@@ -53,7 +53,7 @@ Outputs the device tree showing hardware - Outputs the device list showing bus information, detailing SCSI, USB, IDE and PCI addresses. - .TP - \fB-dump \fIfilename\fB\fR --Dump collected information into a file (SQLite database). -+Display output and dump collected information into a file (SQLite database). - .TP - \fB-class \fIclass\fB\fR - Only show the given class of hardware. \fIclass\fR can be found using \fBlshw -short\fR or \fBlshw -businfo\fR\&. -Index: lshw-B.02.18+git.20190613/src/lshw.cc -=================================================================== ---- lshw-B.02.18+git.20190613.orig/src/lshw.cc -+++ lshw-B.02.18+git.20190613/src/lshw.cc -@@ -35,7 +35,7 @@ void usage(const char *progname) - fprintf(stderr, _("\t-X use graphical interface\n")); - fprintf(stderr, _("\noptions can be\n")); - #ifdef SQLITE -- fprintf(stderr, _("\t-dump OUTFILE save hardware tree to a file\n")); -+ fprintf(stderr, _("\t-dump filename displays output and dump collected information into a file (SQLite database)\n")); - #endif - fprintf(stderr, _("\t-class CLASS only show a certain class of hardware\n")); - fprintf(stderr, _("\t-C CLASS same as '-class CLASS'\n")); diff --git a/lshw-modified-time.patch b/lshw-modified-time.patch deleted file mode 100644 index b74ed2b..0000000 --- a/lshw-modified-time.patch +++ /dev/null @@ -1,39 +0,0 @@ -From d76f5c6bcb68ef1c5fabd84df9f6025ea1053b90 Mon Sep 17 00:00:00 2001 -From: Seeteena Thoufeek -Date: Thu, 13 Jul 2017 14:18:08 +0530 -Subject: [PATCH] Do not show modified time with -notime option - -Exclude volatile attributes (timestamps) from lshw -notime output. - -Signed-off-by: Seeteena Thoufeek -[Updated description and fixed detect_hfsx() - Vasant] -Signed-off-by: Vasant Hegde ---- - src/core/volumes.cc | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -Index: lshw-B.02.18+git.20190613/src/core/volumes.cc -=================================================================== ---- lshw-B.02.18+git.20190613.orig/src/core/volumes.cc -+++ lshw-B.02.18+git.20190613/src/core/volumes.cc -@@ -651,8 +651,10 @@ static bool detect_hfsx(hwNode & n, sour - wtime = (time_t)(be_long(&vol->modifyDate) - HFSTIMEOFFSET); - n.setConfig("created", datetime(mkfstime, false)); // creation time uses local time - if (enabled("output:time")) -+ { - n.setConfig("checked", datetime(fscktime)); -- n.setConfig("modified", datetime(wtime)); -+ n.setConfig("modified", datetime(wtime)); -+ } - - return true; - } -@@ -742,7 +744,7 @@ static bool detect_hfs(hwNode & n, sourc - n.setConfig("created", datetime(mkfstime - HFSTIMEOFFSET, false)); // all dates use local time - if(dumptime) - n.setConfig("backup", datetime(dumptime - HFSTIMEOFFSET, false)); -- if(wtime) -+ if(wtime && enabled("output:time")) - n.setConfig("modified", datetime(wtime - HFSTIMEOFFSET, false)); - - return true; diff --git a/lshw-nvme.patch b/lshw-nvme.patch new file mode 100644 index 0000000..d351ac5 --- /dev/null +++ b/lshw-nvme.patch @@ -0,0 +1,329 @@ +From 7b1863bd61c1751a67b020820f4243a4df4b379a Mon Sep 17 00:00:00 2001 +From: Harry Mallon +Date: Mon, 25 Mar 2019 19:44:14 +0000 +Subject: [PATCH] add support for /dev/nvmeX NVMe controllers + +* Added nvme scanning for controllers /dev/nvme[0-9]+ +* Added nvme scanning for namespaces /dev/nvme[0-9]+n[0-9]+ +* Fill in namespaces as disks +* Teach partition scanning about nvme partitions /dev/nvme[0-9]+n[0-9]+p[0-9]+ +--- + src/core/Makefile | 5 +- + src/core/main.cc | 4 ++ + src/core/nvme.cc | 156 +++++++++++++++++++++++++++++++++++++++++ + src/core/nvme.h | 7 ++ + src/core/partitions.cc | 17 +++-- + src/core/sysfs.cc | 15 ++++ + src/core/sysfs.h | 3 + + 7 files changed, 199 insertions(+), 8 deletions(-) + create mode 100644 src/core/nvme.cc + create mode 100644 src/core/nvme.h + +Index: lshw-B.02.18+git.20191228/src/core/Makefile +=================================================================== +--- lshw-B.02.18+git.20191228.orig/src/core/Makefile ++++ lshw-B.02.18+git.20191228/src/core/Makefile +@@ -8,7 +8,7 @@ LDFLAGS= + LDSTATIC= + LIBS= + +-OBJS = hw.o main.o print.o mem.o dmi.o device-tree.o cpuinfo.o osutils.o pci.o version.o cpuid.o ide.o cdrom.o pcmcia-legacy.o scsi.o s390.o disk.o spd.o network.o isapnp.o pnp.o fb.o options.o usb.o sysfs.o display.o heuristics.o parisc.o cpufreq.o partitions.o blockio.o lvm.o ideraid.o pcmcia.o volumes.o mounts.o smp.o abi.o jedec.o dump.o fat.o virtio.o vio.o ++OBJS = hw.o main.o print.o mem.o dmi.o device-tree.o cpuinfo.o osutils.o pci.o version.o cpuid.o ide.o cdrom.o pcmcia-legacy.o scsi.o nvme.o s390.o disk.o spd.o network.o isapnp.o pnp.o fb.o options.o usb.o sysfs.o display.o heuristics.o parisc.o cpufreq.o partitions.o blockio.o lvm.o ideraid.o pcmcia.o volumes.o mounts.o smp.o abi.o jedec.o dump.o fat.o virtio.o vio.o + ifeq ($(SQLITE), 1) + OBJS+= db.o + endif +@@ -23,7 +23,7 @@ lib$(PACKAGENAME).a: $(OBJS) + $(AR) rs $@ $^ + + install: all +- ++ + clean: + rm -f $(OBJS) lib$(PACKAGENAME).a + +@@ -51,6 +51,7 @@ ide.o: version.h cpuinfo.h hw.h osutils. + cdrom.o: version.h cdrom.h hw.h partitions.h + pcmcia-legacy.o: version.h pcmcia-legacy.h hw.h osutils.h + scsi.o: version.h mem.h hw.h cdrom.h disk.h osutils.h heuristics.h sysfs.h ++nvme.o: version.h hw.h disk.h osutils.h sysfs.h + disk.o: version.h disk.h hw.h osutils.h heuristics.h partitions.h + spd.o: version.h spd.h hw.h osutils.h + network.o: version.h config.h network.h hw.h osutils.h sysfs.h options.h +Index: lshw-B.02.18+git.20191228/src/core/main.cc +=================================================================== +--- lshw-B.02.18+git.20191228.orig/src/core/main.cc ++++ lshw-B.02.18+git.20191228/src/core/main.cc +@@ -29,6 +29,7 @@ + #include "pcmcia-legacy.h" + #include "ide.h" + #include "scsi.h" ++#include "nvme.h" + #include "spd.h" + #include "network.h" + #include "isapnp.h" +@@ -132,6 +133,9 @@ bool scan_system(hwNode & system) + status("SCSI"); + if (enabled("scsi")) + scan_scsi(computer); ++ status("NVMe"); ++ if (enabled("nvme")) ++ scan_nvme(computer); + status("S/390 devices"); + if (enabled("s390")) + scan_s390_devices(computer); +Index: lshw-B.02.18+git.20191228/src/core/nvme.cc +=================================================================== +--- /dev/null ++++ lshw-B.02.18+git.20191228/src/core/nvme.cc +@@ -0,0 +1,156 @@ ++#include "version.h" ++#include "disk.h" ++#include "osutils.h" ++#include "sysfs.h" ++#include "hw.h" ++#include ++#include ++ ++#include ++ ++__ID("@(#) $Id$"); ++ ++#define CLASS_NVME "nvme" ++#define NVMEX "/dev/nvme[0-9]*" ++#define NVMEXNX "/dev/nvme[0-9]*n[0-9]*" ++ ++static void scan_controllers(hwNode & n) ++{ ++ glob_t entries; ++ size_t j; ++ ++ if(glob(NVMEX, 0, NULL, &entries) == 0) ++ { ++ for(j=0; j < entries.gl_pathc; j++) ++ { ++ if(matches(entries.gl_pathv[j], "^/dev/nvme[[:digit:]]+$")) ++ { ++ string businfo = ""; ++ string logicalname = ""; ++ hwNode *device = NULL; ++ ++ logicalname = basename(entries.gl_pathv[j]); ++ if (logicalname.empty()) ++ continue; ++ ++ businfo = sysfs::entry::byClass(CLASS_NVME, logicalname).businfo(); ++ ++ if (!businfo.empty()) ++ device = n.findChildByBusInfo(businfo); ++ ++ if (!device) ++ device = n.findChildByLogicalName(logicalname); ++ ++ if (!device) ++ { ++ hwNode *core = n.getChild("core"); ++ ++ if (core) ++ device = n.getChild("nvme"); ++ ++ if (core && !device) ++ device = core->addChild(hwNode("nvme", hw::storage)); ++ } ++ ++ if (!device) ++ device = n.addChild(hwNode("nvme", hw::storage)); ++ ++ if (device) ++ { ++ if(device->getBusInfo().empty()) ++ device->setBusInfo(businfo); ++ device->setLogicalName(logicalname); ++ device->claim(); ++ } ++ } ++ } ++ ++ globfree(&entries); ++ } ++} ++ ++static void scan_namespaces(hwNode & n) ++{ ++ glob_t entries; ++ size_t j; ++ ++ if(glob(NVMEXNX, 0, NULL, &entries) == 0) ++ { ++ for(j=0; j < entries.gl_pathc; j++) ++ { ++ if(matches(entries.gl_pathv[j], "^/dev/nvme[[:digit:]]+n[[:digit:]]+$")) ++ { ++ // We get this information from sysfs rather than doing an NVMe Identify command ++ // so they may not all be available from all kernels. ++ string path = entries.gl_pathv[j]; ++ string logicalname = ""; ++ string parentlogicalname = ""; ++ string model; ++ string serial; ++ string firmware_rev; ++ hwNode *parent = NULL; ++ hwNode device = hwNode("disk", hw::disk); ++ ++ logicalname = basename(entries.gl_pathv[j]); ++ if (logicalname.empty()) ++ continue; ++ ++ parentlogicalname = path.substr(0, path.find_last_of("n")); ++ ++ sysfs::entry e = sysfs::entry::byClass("block", logicalname); ++ ++ model = e.model(); ++ serial = e.serial(); ++ firmware_rev = e.firmware_rev(); ++ ++ device.setDescription("NVMe disk"); ++ device.setLogicalName(logicalname); ++ device.claim(); ++ ++ if (!model.empty()) ++ device.setProduct(model); ++ if (!serial.empty()) ++ device.setSerial(serial); ++ if (!firmware_rev.empty()) ++ device.setVersion(firmware_rev); ++ ++ scan_disk(device); ++ ++ if (!parentlogicalname.empty()) ++ parent = n.findChildByLogicalName(parentlogicalname); ++ ++ if (!parent) ++ { ++ hwNode *core = n.getChild("core"); ++ ++ if (core) ++ parent = n.getChild("nvme"); ++ ++ if (core && !parent) ++ parent = core->addChild(hwNode("nvme", hw::storage)); ++ } ++ ++ if (!parent) ++ parent = n.addChild(hwNode("nvme", hw::storage)); ++ ++ if (parent) ++ { ++ parent->addChild(device); ++ parent->claim(); ++ } ++ } ++ } ++ ++ globfree(&entries); ++ } ++ ++} ++ ++bool scan_nvme(hwNode & n) ++{ ++ scan_controllers(n); ++ ++ scan_namespaces(n); ++ ++ return false; ++} +Index: lshw-B.02.18+git.20191228/src/core/nvme.h +=================================================================== +--- /dev/null ++++ lshw-B.02.18+git.20191228/src/core/nvme.h +@@ -0,0 +1,7 @@ ++#ifndef _NVME_H_ ++#define _NVME_H_ ++ ++#include "hw.h" ++ ++bool scan_nvme(hwNode & n); ++#endif +Index: lshw-B.02.18+git.20191228/src/core/partitions.cc +=================================================================== +--- lshw-B.02.18+git.20191228.orig/src/core/partitions.cc ++++ lshw-B.02.18+git.20191228/src/core/partitions.cc +@@ -295,6 +295,7 @@ static bool guess_logicalname(source & s + struct stat buf; + char name[10]; + int dev = 0; ++ string devname; + + snprintf(name, sizeof(name), "%d", n); + if(disk.getBusInfo()!="") +@@ -304,9 +305,16 @@ static bool guess_logicalname(source & s + if(!S_ISBLK(buf.st_mode)) return false; + + if(s.diskname!="") +- dev = open_dev(buf.st_rdev + n, S_IFBLK, s.diskname+string(name)); ++ devname = s.diskname; + else +- dev = open_dev(buf.st_rdev + n, S_IFBLK, disk.getLogicalName()+string(name)); ++ devname = disk.getLogicalName(); ++ ++ // NVMe partitions are like /dev/nvme0n1p2 ++ if(matches(devname, "^/dev/nvme[[:digit:]]+n[[:digit:]]+$")) ++ devname += "p"; ++ devname += string(name); ++ ++ dev = open_dev(buf.st_rdev + n, S_IFBLK, devname); + + if(dev>=0) + { +@@ -330,10 +338,7 @@ static bool guess_logicalname(source & s + if(memcmp(buffer1, buffer2, BLOCKSIZE)==0) + { + partition.claim(); +- if(s.diskname!="") +- partition.setLogicalName(s.diskname+string(name)); +- else +- partition.setLogicalName(disk.getLogicalName()+string(name)); ++ partition.setLogicalName(devname); + return true; + } + } +Index: lshw-B.02.18+git.20191228/src/core/sysfs.cc +=================================================================== +--- lshw-B.02.18+git.20191228.orig/src/core/sysfs.cc ++++ lshw-B.02.18+git.20191228/src/core/sysfs.cc +@@ -368,6 +368,21 @@ string entry::vendor() const + return get_string(This->devpath+"/vendor"); + } + ++string entry::model() const ++{ ++ return get_string(This->devpath+"/model"); ++} ++ ++string entry::serial() const ++{ ++ return get_string(This->devpath+"/serial"); ++} ++ ++string entry::firmware_rev() const ++{ ++ return get_string(This->devpath+"/firmware_rev"); ++} ++ + vector < entry > sysfs::entries_by_bus(const string & busname) + { + vector < entry > result; +Index: lshw-B.02.18+git.20191228/src/core/sysfs.h +=================================================================== +--- lshw-B.02.18+git.20191228.orig/src/core/sysfs.h ++++ lshw-B.02.18+git.20191228/src/core/sysfs.h +@@ -28,6 +28,9 @@ namespace sysfs + string modalias() const; + string device() const; + string vendor() const; ++ string model() const; ++ string serial() const; ++ string firmware_rev() const; + entry parent() const; + string name_in_class(const string &) const; + string string_attr(const string & name, const string & def = "") const; diff --git a/lshw.changes b/lshw.changes index b44f270..6cc0dd0 100644 --- a/lshw.changes +++ b/lshw.changes @@ -1,3 +1,19 @@ +------------------------------------------------------------------- +Mon Mar 16 12:14:54 UTC 2020 - Martin Pluskal + +- Update to version B.02.18+git.20191228: + * fix #755: handle invalid FAT + * code clean-up + * volumes: Add support for detecting Apple APFS fstype + * partitions: Add Apple APFS GUID + * specfile: Fix version issue + * Do not show modified time with -notime option + * Update help message and man page +- Drop upstreamed patches: + * lshw-help-man.patch + * lshw-modified-time.patch +- Add lshw-nvme.patch to support nvme devices bsc#1161323 + ------------------------------------------------------------------- Thu Feb 20 08:15:44 UTC 2020 - Martin Pluskal diff --git a/lshw.spec b/lshw.spec index 66bc662..5dea6cb 100644 --- a/lshw.spec +++ b/lshw.spec @@ -18,7 +18,7 @@ Name: lshw -Version: B.02.18+git.20190613 +Version: B.02.18+git.20191228 Release: 0 Summary: HardWare LiSter License: GPL-2.0-only @@ -29,9 +29,8 @@ Source1: lshw.desktop.in Source2: lshw.png # PATCH-FIX-UPSTREAM lshw-display-latest-version.patch lshw-help-man.patch lshw-modified-time.patch bsc##1130818 Patch1: lshw-display-latest-version.patch -Patch2: lshw-help-man.patch -Patch3: lshw-modified-time.patch Patch4: lshw-add-notime-option-to-manpage.patch +Patch5: lshw-nvme.patch BuildRequires: gcc-c++ BuildRequires: hicolor-icon-theme BuildRequires: libpng-devel