MatthewKing / DeviceId

A simple library providing functionality to generate a 'device ID' that can be used to uniquely identify a computer.
MIT License
722 stars 118 forks source link

lsblk issue on CentOs 7 #53

Open zerowebcorp opened 2 years ago

zerowebcorp commented 2 years ago

Hello, I have used this in one of our apps which has been deployed on a CentOs 7 OS. This is failing because the command "lsblk -f -J" doesn't return a valid result on CentOS

`[root@eu~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core) [root@eu-p-mongo-2 ~]# lsblk -f -J lsblk: invalid option -- 'J'

Usage: lsblk [options] [ ...]

Options: -a, --all print all devices -b, --bytes print SIZE in bytes rather than in human readable format -d, --nodeps don't print slaves or holders -D, --discard print discard capabilities -e, --exclude exclude devices by major number (default: RAM disks) -I, --include show only devices with specified major numbers -f, --fs output info about filesystems -h, --help usage information (this) -i, --ascii use ascii characters only -m, --perms output info about permissions -l, --list use list format output -n, --noheadings don't print headings -o, --output output columns -p, --paths print complate device path -P, --pairs use key="value" output format -r, --raw use raw output format -s, --inverse inverse dependencies -t, --topology output info about topology -S, --scsi output info about SCSI devices

-h, --help display this help and exit -V, --version output version information and exit

Available columns (for --output): NAME device name KNAME internal kernel device name MAJ:MIN major:minor device number FSTYPE filesystem type MOUNTPOINT where the device is mounted LABEL filesystem LABEL UUID filesystem UUID PARTLABEL partition LABEL PARTUUID partition UUID RA read-ahead of the device RO read-only device RM removable device MODEL device identifier SERIAL disk serial number SIZE size of the device STATE state of the device OWNER user name GROUP group name MODE device node permissions ALIGNMENT alignment offset MIN-IO minimum I/O size OPT-IO optimal I/O size PHY-SEC physical sector size LOG-SEC logical sector size ROTA rotational device SCHED I/O scheduler name RQ-SIZE request queue size TYPE device type DISC-ALN discard alignment offset DISC-GRAN discard granularity DISC-MAX discard max bytes DISC-ZERO discard zeroes data WSAME write same max bytes WWN unique storage identifier RAND adds randomness PKNAME internal parent kernel device name HCTL Host:Channel:Target:Lun for SCSI TRAN device transport type REV device revision VENDOR device vendor

For more details see lsblk(8). [root@eu ~]# `

Praveen-g99 commented 1 year ago

I am also facing same issue.

Praveen-g99 commented 1 year ago

lsblk: invalid option -- 'J'

Usage: lsblk [options] [ ...]

Options: -a, --all print all devices -b, --bytes print SIZE in bytes rather than in human readable format -d, --nodeps don't print slaves or holders -D, --discard print discard capabilities -e, --exclude exclude devices by major number (default: RAM disks) -I, --include show only devices with specified major numbers -f, --fs output info about filesystems -h, --help usage information (this) -i, --ascii use ascii characters only -m, --perms output info about permissions -l, --list use list format output -n, --noheadings don't print headings -o, --output output columns -p, --paths print complate device path -P, --pairs use key="value" output format -r, --raw use raw output format -s, --inverse inverse dependencies -t, --topology output info about topology -S, --scsi output info about SCSI devices

-h, --help display this help and exit -V, --version output version information and exit

Available columns (for --output): NAME device name KNAME internal kernel device name MAJ:MIN major:minor device number FSTYPE filesystem type MOUNTPOINT where the device is mounted LABEL filesystem LABEL UUID filesystem UUID PARTLABEL partition LABEL PARTUUID partition UUID RA read-ahead of the device RO read-only device RM removable device MODEL device identifier SERIAL disk serial number SIZE size of the device STATE state of the device OWNER user name GROUP group name MODE device node permissions ALIGNMENT alignment offset MIN-IO minimum I/O size OPT-IO optimal I/O size PHY-SEC physical sector size LOG-SEC logical sector size ROTA rotational device SCHED I/O scheduler name RQ-SIZE request queue size TYPE device type DISC-ALN discard alignment offset DISC-GRAN discard granularity DISC-MAX discard max bytes DISC-ZERO discard zeroes data WSAME write same max bytes WWN unique storage identifier RAND adds randomness PKNAME internal parent kernel device name HCTL Host:Channel:Target:Lun for SCSI TRAN device transport type REV device revision VENDOR device vendor

For more details see lsblk(8). Unhandled exception. System.Text.Json.JsonException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Path: $ | LineNumber: 0 | BytePositionInLine: 0. ---> System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0. at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan1 bytes) at System.Text.Json.Utf8JsonReader.Read() at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) --- End of inner exception stack trace --- at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex) at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan1 utf8Json, JsonTypeInfo jsonTypeInfo, Nullable1 actualByteCount) at System.Text.Json.JsonSerializer.ReadFromSpan[TValue](ReadOnlySpan1 json, JsonTypeInfo jsonTypeInfo) at System.Text.Json.JsonSerializer.Deserialize[TValue](String json, JsonSerializerOptions options) at DeviceId.Linux.Components.LinuxRootDriveSerialNumberDeviceIdComponent.GetValue() at DeviceId.Formatters.HashDeviceIdFormatter.<>c.b__3_1(KeyValuePair2 x) at System.Linq.Enumerable.SelectIPartitionIterator2.PreallocatingToArray(Int32 count) at System.Linq.Enumerable.SelectIPartitionIterator2.ToArray() at System.Linq.Enumerable.ToArray[TSource](IEnumerable1 source) at DeviceId.Formatters.HashDeviceIdFormatter.GetDeviceId(IDictionary`2 components) at DeviceId.DeviceIdBuilder.ToString() at uOPCSuite.DeviceId.Program.Main(String[] args) in D:\uOPCSuite.DeviceId\Program.cs:line 10 Aborted (core dumped)

weidesh commented 1 year ago

looks like CentOS 7.9 is using lsblk from util-linux 2.23.2 image until util-linux v2.27 util-linux v2.27 Release Note the --json was added to lsblk by Karel Zak it is an incompatible version of lsblk, or the CentOS 7.9 is not directly supported. A workaround is required.

MatthewKing commented 1 year ago

This is something that is going to require community contribution from a regular Linux user.

weidesh commented 1 year ago

yeah, that's definitely.