Add new cli option to read machine probe data from file

Allow user to specify a probert machine configuration file to be
used during the installer.  If presented with the config file
no probing of the host will occur.

In the case that disks don't have a size in the data collected then
they'll be marked as USED.

Add a few example machines and update the README on how to specify.

Signed-off-by: Ryan Harper <ryan.harper@canonical.com>
This commit is contained in:
Ryan Harper 2015-08-28 13:19:13 -05:00
parent 0100ed708c
commit 8a0e9ebdfd
14 changed files with 2770 additions and 40 deletions

View File

@ -17,6 +17,11 @@ INSTALLIMG=ubuntu-server-${STREAM}-${RELEASE}-${ARCH}-installer.img
INSTALLER_RESOURCES += $(shell find installer/resources -type f) INSTALLER_RESOURCES += $(shell find installer/resources -type f)
GITDEBDIR=/tmp/subiquity-deb GITDEBDIR=/tmp/subiquity-deb
DEBDIR=./debian DEBDIR=./debian
ifneq (,$(MACHINE))
MACHARGS=--machine=$(MACHINE)
endif
.PHONY: run clean .PHONY: run clean
all: dryrun all: dryrun
@ -33,7 +38,7 @@ dryrun:
$(MAKE) ui-view DRYRUN="--dry-run" $(MAKE) ui-view DRYRUN="--dry-run"
ui-view: ui-view:
(PYTHONPATH=$(PYTHONPATH) bin/$(PYTHONSRC) $(DRYRUN)) (PYTHONPATH=$(PYTHONPATH) bin/$(PYTHONSRC) $(DRYRUN) $(MACHARGS))
ui-view-serial: ui-view-serial:
(TERM=att4424 PYTHONPATH=$(PYTHONPATH) bin/$(PYTHONSRC) $(DRYRUN) --serial) (TERM=att4424 PYTHONPATH=$(PYTHONPATH) bin/$(PYTHONSRC) $(DRYRUN) --serial)

View File

@ -7,12 +7,11 @@
# running installer # running installer
`make run` `make run`
# running the UI locally # running the UI locally in dry-run mode
`make ui-view` `make`
with `--dry-run` # running the UI locally with a different machine profile (see examples/)
`MACHINE=examples/desktop.json make`
`make dryrun`
# overrides # overrides
``` ```

View File

@ -33,6 +33,9 @@ def parse_options(argv):
parser.add_argument('--serial', action='store_true', parser.add_argument('--serial', action='store_true',
dest='run_on_serial', dest='run_on_serial',
help='Run the installer over serial console.') help='Run the installer over serial console.')
parser.add_argument('--machine-config', metavar='CONFIG',
dest='machine_config',
help="Don't Probe. Use probe data file")
return parser.parse_args(argv) return parser.parse_args(argv)

948
examples/desktop.json Normal file
View File

@ -0,0 +1,948 @@
{
"network": {
"em1": {
"hardware": {
"DEVPATH": "/devices/pci0000:00/0000:00:19.0/net/em1",
"ID_BUS": "pci",
"ID_MM_CANDIDATE": "1",
"ID_MODEL_FROM_DATABASE": "82579LM Gigabit Network Connection",
"ID_MODEL_ID": "0x1502",
"ID_NET_DRIVER": "e1000e",
"ID_NET_LABEL_ONBOARD": "en Onboard LAN",
"ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link",
"ID_NET_NAME_MAC": "enx4437e683c1e3",
"ID_NET_NAME_ONBOARD": "eno1",
"ID_NET_NAME_PATH": "enp0s25",
"ID_OUI_FROM_DATABASE": "Hon Hai Precision Ind.Co.Ltd",
"ID_PATH": "pci-0000:00:19.0",
"ID_PATH_TAG": "pci-0000_00_19_0",
"ID_PCI_CLASS_FROM_DATABASE": "Network controller",
"ID_PCI_SUBCLASS_FROM_DATABASE": "Ethernet controller",
"ID_VENDOR_FROM_DATABASE": "Intel Corporation",
"ID_VENDOR_ID": "0x8086",
"IFINDEX": "2",
"INTERFACE": "em1",
"SUBSYSTEM": "net",
"SYSTEMD_ALIAS": "/sys/subsystem/net/devices/em1",
"SYSTEMD_WANTS": "ifup@em1.service",
"TAGS": ":systemd:",
"USEC_INITIALIZED": "3269",
"attrs": {
"addr_assign_type": "0",
"addr_len": "6",
"address": "44:37:e6:83:c1:e3",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": "1",
"carrier_changes": "2",
"dev_id": "0x0",
"dev_port": "0",
"device": null,
"dormant": "0",
"duplex": "full",
"flags": "0x1003",
"gro_flush_timeout": "0",
"ifalias": "",
"ifindex": "2",
"iflink": "2",
"link_mode": "0",
"mtu": "1500",
"name_assign_type": "4",
"netdev_group": "0",
"operstate": "up",
"phys_port_id": null,
"phys_switch_id": null,
"speed": "100",
"subsystem": "net",
"tx_queue_len": "1000",
"type": "1",
"uevent": "INTERFACE=em1\nIFINDEX=2"
}
},
"ip": {
"addr": "192.168.0.104",
"broadcast": "192.168.0.255",
"netmask": "255.255.255.0"
},
"type": "eth"
},
"lo": {
"hardware": {
"DEVPATH": "/devices/virtual/net/lo",
"ID_MM_CANDIDATE": "1",
"ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link",
"IFINDEX": "1",
"INTERFACE": "lo",
"SUBSYSTEM": "net",
"USEC_INITIALIZED": "216954",
"attrs": {
"addr_assign_type": "0",
"addr_len": "6",
"address": "00:00:00:00:00:00",
"broadcast": "00:00:00:00:00:00",
"carrier": "1",
"carrier_changes": "0",
"dev_id": "0x0",
"dev_port": "0",
"dormant": "0",
"duplex": null,
"flags": "0x9",
"gro_flush_timeout": "0",
"ifalias": "",
"ifindex": "1",
"iflink": "1",
"link_mode": "0",
"mtu": "65536",
"name_assign_type": null,
"netdev_group": "0",
"operstate": "unknown",
"phys_port_id": null,
"phys_switch_id": null,
"speed": null,
"subsystem": "net",
"tx_queue_len": "0",
"type": "772",
"uevent": "INTERFACE=lo\nIFINDEX=1"
}
},
"ip": {
"addr": "127.0.0.1",
"netmask": "255.0.0.0",
"peer": "127.0.0.1"
},
"type": "lo"
},
"lxcbr0": {
"hardware": {
"DEVPATH": "/devices/virtual/net/lxcbr0",
"DEVTYPE": "bridge",
"ID_MM_CANDIDATE": "1",
"ID_NET_DRIVER": "bridge",
"ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link",
"IFINDEX": "3",
"INTERFACE": "lxcbr0",
"SUBSYSTEM": "net",
"SYSTEMD_ALIAS": "/sys/subsystem/net/devices/lxcbr0",
"SYSTEMD_WANTS": "ifup@lxcbr0.service",
"TAGS": ":systemd:",
"USEC_INITIALIZED": "305347",
"attrs": {
"addr_assign_type": "1",
"addr_len": "6",
"address": "fe:97:6a:16:73:d9",
"brforward": "\ufffd\ufffdj\u0016s\ufffd\u0001\u0001",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": "1",
"carrier_changes": "4",
"dev_id": "0x0",
"dev_port": "0",
"dormant": "0",
"duplex": null,
"flags": "0x1003",
"gro_flush_timeout": "0",
"ifalias": "",
"ifindex": "3",
"iflink": "3",
"link_mode": "0",
"lower_vethGYDUSB": null,
"mtu": "1500",
"name_assign_type": null,
"netdev_group": "0",
"operstate": "up",
"phys_port_id": null,
"phys_switch_id": null,
"speed": null,
"subsystem": "net",
"tx_queue_len": "0",
"type": "1",
"uevent": "DEVTYPE=bridge\nINTERFACE=lxcbr0\nIFINDEX=3"
}
},
"ip": {
"addr": "10.0.3.1",
"broadcast": "10.0.3.1",
"netmask": "255.255.255.0"
},
"type": "bridge"
},
"vethGYDUSB": {
"hardware": {
"DEVPATH": "/devices/virtual/net/vethGYDUSB",
"ID_MM_CANDIDATE": "1",
"ID_NET_DRIVER": "veth",
"ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link",
"IFINDEX": "5",
"INTERFACE": "vethGYDUSB",
"SUBSYSTEM": "net",
"SYSTEMD_ALIAS": "/sys/subsystem/net/devices/vethGYDUSB",
"SYSTEMD_WANTS": "ifup@vethGYDUSB.service",
"TAGS": ":systemd:",
"USEC_INITIALIZED": "120121",
"attrs": {
"addr_assign_type": "3",
"addr_len": "6",
"address": "fe:97:6a:16:73:d9",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": "1",
"carrier_changes": "2",
"dev_id": "0x0",
"dev_port": "0",
"dormant": "0",
"duplex": "full",
"flags": "0x1303",
"gro_flush_timeout": "0",
"ifalias": "",
"ifindex": "5",
"iflink": "5",
"link_mode": "0",
"master": null,
"mtu": "1500",
"name_assign_type": "3",
"netdev_group": "0",
"operstate": "up",
"phys_port_id": null,
"phys_switch_id": null,
"speed": "10000",
"subsystem": "net",
"tx_queue_len": "1000",
"type": "1",
"uevent": "INTERFACE=vethGYDUSB\nIFINDEX=5",
"upper_lxcbr0": null
}
},
"ip": {
"addr": null,
"broadcast": null,
"netmask": null
},
"type": "eth"
},
"virbr0": {
"hardware": {
"DEVPATH": "/devices/virtual/net/virbr0",
"DEVTYPE": "bridge",
"ID_MM_CANDIDATE": "1",
"ID_NET_DRIVER": "bridge",
"ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link",
"IFINDEX": "6",
"INTERFACE": "virbr0",
"SUBSYSTEM": "net",
"SYSTEMD_ALIAS": "/sys/subsystem/net/devices/virbr0",
"SYSTEMD_WANTS": "ifup@virbr0.service",
"TAGS": ":systemd:",
"USEC_INITIALIZED": "762766",
"attrs": {
"addr_assign_type": "1",
"addr_len": "6",
"address": "52:54:00:b0:59:e2",
"brforward": "RT",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": "0",
"carrier_changes": "1",
"dev_id": "0x0",
"dev_port": "0",
"dormant": "0",
"duplex": null,
"flags": "0x1003",
"gro_flush_timeout": "0",
"ifalias": "",
"ifindex": "6",
"iflink": "6",
"link_mode": "0",
"lower_virbr0-nic": null,
"mtu": "1500",
"name_assign_type": null,
"netdev_group": "0",
"operstate": "down",
"phys_port_id": null,
"phys_switch_id": null,
"speed": null,
"subsystem": "net",
"tx_queue_len": "0",
"type": "1",
"uevent": "DEVTYPE=bridge\nINTERFACE=virbr0\nIFINDEX=6"
}
},
"ip": {
"addr": "192.168.122.1",
"broadcast": "192.168.122.255",
"netmask": "255.255.255.0"
},
"type": "bridge"
},
"virbr0-nic": {
"hardware": {
"DEVPATH": "/devices/virtual/net/virbr0-nic",
"ID_MM_CANDIDATE": "1",
"ID_NET_DRIVER": "tun",
"ID_NET_LINK_FILE": "/lib/systemd/network/99-default.link",
"IFINDEX": "7",
"INTERFACE": "virbr0-nic",
"SUBSYSTEM": "net",
"SYSTEMD_ALIAS": "/sys/subsystem/net/devices/virbr0-nic",
"SYSTEMD_WANTS": "ifup@virbr0-nic.service",
"TAGS": ":systemd:",
"USEC_INITIALIZED": "776315",
"attrs": {
"addr_assign_type": "3",
"addr_len": "6",
"address": "52:54:00:b0:59:e2",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": null,
"carrier_changes": "1",
"dev_id": "0x0",
"dev_port": "0",
"dormant": null,
"duplex": null,
"flags": "0x1302",
"gro_flush_timeout": "0",
"group": "-1",
"ifalias": "",
"ifindex": "7",
"iflink": "7",
"link_mode": "0",
"master": null,
"mtu": "1500",
"name_assign_type": null,
"netdev_group": "0",
"operstate": "down",
"owner": "-1",
"phys_port_id": null,
"phys_switch_id": null,
"speed": null,
"subsystem": "net",
"tun_flags": "0x1802",
"tx_queue_len": "500",
"type": "1",
"uevent": "INTERFACE=virbr0-nic\nIFINDEX=7",
"upper_virbr0": null
}
},
"ip": {
"addr": null,
"broadcast": null,
"netmask": null
},
"type": "tap"
}
},
"storage": {
"/dev/sda": {
"DEVLINKS": "/dev/disk/by-id/ata-ST3500413AS_Z2AMRTB6 /dev/disk/by-id/wwn-0x17872886972540801024x",
"DEVNAME": "/dev/sda",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"DEVTYPE": "disk",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "7200",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_MODEL": "ST3500413AS",
"ID_MODEL_ENC": "ST3500413AS\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_TABLE_TYPE": "gpt",
"ID_PART_TABLE_UUID": "225dc29d-bc21-4dd8-83fd-75c58f64c02b",
"ID_REVISION": "JC66",
"ID_SERIAL": "ST3500413AS_Z2AMRTB6",
"ID_SERIAL_SHORT": "Z2AMRTB6",
"ID_TYPE": "disk",
"ID_WWN": "0x17872886972540801024x",
"ID_WWN_WITH_EXTENSION": "0x17872886972540801024x",
"MAJOR": "8",
"MINOR": "0",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_ATA_SMART_IS_AVAILABLE": "1",
"UDISKS_PARTITION_TABLE": "1",
"UDISKS_PARTITION_TABLE_COUNT": "4",
"UDISKS_PARTITION_TABLE_SCHEME": "gpt",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "61132",
"attrs": {
"alignment_offset": "0",
"bdi": null,
"capability": "50",
"dev": "8:0",
"device": null,
"discard_alignment": "0",
"events": "",
"events_async": "",
"events_poll_msecs": "-1",
"ext_range": "256",
"inflight": " 0 0",
"range": "16",
"removable": "0",
"ro": "0",
"size": "500107862016",
"stat": " 265978 108238 9347116 3349936 1396011 1024491 38571922 35977524 0 10927124 39326468",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=0\nDEVNAME=sda\nDEVTYPE=disk"
}
},
"/dev/sda1": {
"DEVLINKS": "/dev/disk/by-id/ata-ST3500413AS_Z2AMRTB6-part1 /dev/disk/by-id/wwn-0x17872886972540801024x-part1 /dev/disk/by-partuuid/18a80974-9382-403e-8e3b-8b1f2de7ef58 /dev/disk/by-uuid/B2FE-9E05",
"DEVNAME": "/dev/sda1",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda1",
"DEVTYPE": "partition",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "7200",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_FS_TYPE": "vfat",
"ID_FS_USAGE": "filesystem",
"ID_FS_UUID": "B2FE-9E05",
"ID_FS_UUID_ENC": "B2FE-9E05",
"ID_FS_VERSION": "FAT32",
"ID_MODEL": "ST3500413AS",
"ID_MODEL_ENC": "ST3500413AS\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_ENTRY_DISK": "8:0",
"ID_PART_ENTRY_NUMBER": "1",
"ID_PART_ENTRY_OFFSET": "2048",
"ID_PART_ENTRY_SCHEME": "gpt",
"ID_PART_ENTRY_SIZE": "497664",
"ID_PART_ENTRY_TYPE": "c12a7328-f81f-11d2-ba4b-00a0c93ec93b",
"ID_PART_ENTRY_UUID": "18a80974-9382-403e-8e3b-8b1f2de7ef58",
"ID_PART_TABLE_TYPE": "gpt",
"ID_PART_TABLE_UUID": "225dc29d-bc21-4dd8-83fd-75c58f64c02b",
"ID_REVISION": "JC66",
"ID_SERIAL": "ST3500413AS_Z2AMRTB6",
"ID_SERIAL_SHORT": "Z2AMRTB6",
"ID_TYPE": "disk",
"ID_WWN": "0x17872886972540801024x",
"ID_WWN_WITH_EXTENSION": "0x17872886972540801024x",
"MAJOR": "8",
"MINOR": "1",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_IGNORE": "1",
"UDISKS_PARTITION": "1",
"UDISKS_PARTITION_ALIGNMENT_OFFSET": "0",
"UDISKS_PARTITION_NUMBER": "1",
"UDISKS_PARTITION_OFFSET": "1048576",
"UDISKS_PARTITION_SCHEME": "gpt",
"UDISKS_PARTITION_SIZE": "254803968",
"UDISKS_PARTITION_SLAVE": "/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"UDISKS_PARTITION_TYPE": "C12A7328-F81F-11D2-BA4B-00A0C93EC93B",
"UDISKS_PARTITION_UUID": "18A80974-9382-403E-8E3B-8B1F2DE7EF58",
"UDISKS_PRESENTATION_HIDE": "1",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "61164",
"attrs": {
"alignment_offset": "0",
"dev": "8:1",
"discard_alignment": "0",
"inflight": " 0 0",
"partition": "1",
"ro": "0",
"size": "254803968",
"start": "2048",
"stat": " 396 4 13520 3168 2 0 2 0 0 2996 3168",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=1\nDEVNAME=sda1\nDEVTYPE=partition"
}
},
"/dev/sda2": {
"DEVLINKS": "/dev/disk/by-id/ata-ST3500413AS_Z2AMRTB6-part2 /dev/disk/by-id/wwn-0x17872886972540801024x-part2 /dev/disk/by-partuuid/8794f286-bcbf-417c-9a08-a0891ecb4c74 /dev/disk/by-uuid/6de99199-d162-42e5-932f-33ec17f89593",
"DEVNAME": "/dev/sda2",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda2",
"DEVTYPE": "partition",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "7200",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_FS_TYPE": "ext4",
"ID_FS_USAGE": "filesystem",
"ID_FS_UUID": "6de99199-d162-42e5-932f-33ec17f89593",
"ID_FS_UUID_ENC": "6de99199-d162-42e5-932f-33ec17f89593",
"ID_FS_VERSION": "1.0",
"ID_MODEL": "ST3500413AS",
"ID_MODEL_ENC": "ST3500413AS\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_ENTRY_DISK": "8:0",
"ID_PART_ENTRY_NUMBER": "2",
"ID_PART_ENTRY_OFFSET": "499712",
"ID_PART_ENTRY_SCHEME": "gpt",
"ID_PART_ENTRY_SIZE": "195311616",
"ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4",
"ID_PART_ENTRY_UUID": "8794f286-bcbf-417c-9a08-a0891ecb4c74",
"ID_PART_TABLE_TYPE": "gpt",
"ID_PART_TABLE_UUID": "225dc29d-bc21-4dd8-83fd-75c58f64c02b",
"ID_REVISION": "JC66",
"ID_SERIAL": "ST3500413AS_Z2AMRTB6",
"ID_SERIAL_SHORT": "Z2AMRTB6",
"ID_TYPE": "disk",
"ID_WWN": "0x17872886972540801024x",
"ID_WWN_WITH_EXTENSION": "0x17872886972540801024x",
"MAJOR": "8",
"MINOR": "2",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_PARTITION": "1",
"UDISKS_PARTITION_ALIGNMENT_OFFSET": "0",
"UDISKS_PARTITION_NUMBER": "2",
"UDISKS_PARTITION_OFFSET": "255852544",
"UDISKS_PARTITION_SCHEME": "gpt",
"UDISKS_PARTITION_SIZE": "99999547392",
"UDISKS_PARTITION_SLAVE": "/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"UDISKS_PARTITION_TYPE": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
"UDISKS_PARTITION_UUID": "8794F286-BCBF-417C-9A08-A0891ECB4C74",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "61189",
"attrs": {
"alignment_offset": "0",
"dev": "8:2",
"discard_alignment": "0",
"inflight": " 0 0",
"partition": "2",
"ro": "0",
"size": "99999547392",
"start": "499712",
"stat": " 124143 58911 6838258 1546400 233387 219516 13535992 8206400 0 1924284 9752704",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=2\nDEVNAME=sda2\nDEVTYPE=partition"
}
},
"/dev/sda3": {
"DEVLINKS": "/dev/disk/by-id/ata-ST3500413AS_Z2AMRTB6-part3 /dev/disk/by-id/wwn-0x17872886972540801024x-part3 /dev/disk/by-partuuid/4ae1034a-dede-470b-85d8-57cfd33adf28 /dev/disk/by-uuid/73f31980-3482-4891-ac53-f994e75d1965",
"DEVNAME": "/dev/sda3",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda3",
"DEVTYPE": "partition",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "7200",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_FS_TYPE": "swap",
"ID_FS_USAGE": "other",
"ID_FS_UUID": "73f31980-3482-4891-ac53-f994e75d1965",
"ID_FS_UUID_ENC": "73f31980-3482-4891-ac53-f994e75d1965",
"ID_FS_VERSION": "1",
"ID_MODEL": "ST3500413AS",
"ID_MODEL_ENC": "ST3500413AS\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_ENTRY_DISK": "8:0",
"ID_PART_ENTRY_NUMBER": "3",
"ID_PART_ENTRY_OFFSET": "195811328",
"ID_PART_ENTRY_SCHEME": "gpt",
"ID_PART_ENTRY_SIZE": "29296640",
"ID_PART_ENTRY_TYPE": "0657fd6d-a4ab-43c4-84e5-0933c84b4f4f",
"ID_PART_ENTRY_UUID": "4ae1034a-dede-470b-85d8-57cfd33adf28",
"ID_PART_TABLE_TYPE": "gpt",
"ID_PART_TABLE_UUID": "225dc29d-bc21-4dd8-83fd-75c58f64c02b",
"ID_REVISION": "JC66",
"ID_SERIAL": "ST3500413AS_Z2AMRTB6",
"ID_SERIAL_SHORT": "Z2AMRTB6",
"ID_TYPE": "disk",
"ID_WWN": "0x17872886972540801024x",
"ID_WWN_WITH_EXTENSION": "0x17872886972540801024x",
"MAJOR": "8",
"MINOR": "3",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_PARTITION": "1",
"UDISKS_PARTITION_ALIGNMENT_OFFSET": "0",
"UDISKS_PARTITION_NUMBER": "3",
"UDISKS_PARTITION_OFFSET": "100255399936",
"UDISKS_PARTITION_SCHEME": "gpt",
"UDISKS_PARTITION_SIZE": "14999879680",
"UDISKS_PARTITION_SLAVE": "/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"UDISKS_PARTITION_TYPE": "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F",
"UDISKS_PARTITION_UUID": "4AE1034A-DEDE-470B-85D8-57CFD33ADF28",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "61203",
"attrs": {
"alignment_offset": "0",
"dev": "8:3",
"discard_alignment": "0",
"inflight": " 0 0",
"partition": "3",
"ro": "0",
"size": "14999879680",
"start": "195811328",
"stat": " 198 0 3592 1772 0 0 0 0 0 1480 1772",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=3\nDEVNAME=sda3\nDEVTYPE=partition"
}
},
"/dev/sda4": {
"DEVLINKS": "/dev/disk/by-id/ata-ST3500413AS_Z2AMRTB6-part4 /dev/disk/by-id/wwn-0x17872886972540801024x-part4 /dev/disk/by-partuuid/532cfca4-f3c3-481c-bf93-b48f40c4ea3e /dev/disk/by-uuid/184ba6a2-a7a9-4457-a504-68a06709aa24",
"DEVNAME": "/dev/sda4",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda4",
"DEVTYPE": "partition",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "78",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "7200",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_FS_TYPE": "ext4",
"ID_FS_USAGE": "filesystem",
"ID_FS_UUID": "184ba6a2-a7a9-4457-a504-68a06709aa24",
"ID_FS_UUID_ENC": "184ba6a2-a7a9-4457-a504-68a06709aa24",
"ID_FS_VERSION": "1.0",
"ID_MODEL": "ST3500413AS",
"ID_MODEL_ENC": "ST3500413AS\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_ENTRY_DISK": "8:0",
"ID_PART_ENTRY_NUMBER": "4",
"ID_PART_ENTRY_OFFSET": "225107968",
"ID_PART_ENTRY_SCHEME": "gpt",
"ID_PART_ENTRY_SIZE": "751663104",
"ID_PART_ENTRY_TYPE": "0fc63daf-8483-4772-8e79-3d69d8477de4",
"ID_PART_ENTRY_UUID": "532cfca4-f3c3-481c-bf93-b48f40c4ea3e",
"ID_PART_TABLE_TYPE": "gpt",
"ID_PART_TABLE_UUID": "225dc29d-bc21-4dd8-83fd-75c58f64c02b",
"ID_REVISION": "JC66",
"ID_SERIAL": "ST3500413AS_Z2AMRTB6",
"ID_SERIAL_SHORT": "Z2AMRTB6",
"ID_TYPE": "disk",
"ID_WWN": "0x17872886972540801024x",
"ID_WWN_WITH_EXTENSION": "0x17872886972540801024x",
"MAJOR": "8",
"MINOR": "4",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_PARTITION": "1",
"UDISKS_PARTITION_ALIGNMENT_OFFSET": "0",
"UDISKS_PARTITION_NUMBER": "4",
"UDISKS_PARTITION_OFFSET": "115255279616",
"UDISKS_PARTITION_SCHEME": "gpt",
"UDISKS_PARTITION_SIZE": "384851509248",
"UDISKS_PARTITION_SLAVE": "/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"UDISKS_PARTITION_TYPE": "0FC63DAF-8483-4772-8E79-3D69D8477DE4",
"UDISKS_PARTITION_UUID": "532CFCA4-F3C3-481C-BF93-B48F40C4EA3E",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "61223",
"attrs": {
"alignment_offset": "0",
"dev": "8:4",
"discard_alignment": "0",
"inflight": " 0 0",
"partition": "4",
"ro": "0",
"size": "384851509248",
"start": "225107968",
"stat": " 140106 49323 2473818 1794460 1017949 804975 25035928 25555888 0 7815888 27349416",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=4\nDEVNAME=sda4\nDEVTYPE=partition"
}
},
"/dev/sdb": {
"DEVLINKS": "/dev/disk/by-id/usb-Generic-_Compact_Flash_20060413092100000-0:0 /dev/disk/by-path/pci-0000:00:1d.0-usb-0:1.2:1.0-scsi-0:0:0:0",
"DEVNAME": "/dev/sdb",
"DEVPATH": "/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host6/target6:0:0/6:0:0:0/block/sdb",
"DEVTYPE": "disk",
"ID_BUS": "usb",
"ID_INSTANCE": "0:0",
"ID_MODEL": "Compact_Flash",
"ID_MODEL_ENC": "Compact\\x20Flash\\x20\\x20\\x20",
"ID_MODEL_ID": "0181",
"ID_PATH": "pci-0000:00:1d.0-usb-0:1.2:1.0-scsi-0:0:0:0",
"ID_PATH_TAG": "pci-0000_00_1d_0-usb-0_1_2_1_0-scsi-0_0_0_0",
"ID_REVISION": "1.00",
"ID_SERIAL": "Generic-_Compact_Flash_20060413092100000-0:0",
"ID_SERIAL_SHORT": "20060413092100000",
"ID_TYPE": "disk",
"ID_USB_DRIVER": "usb-storage",
"ID_USB_INTERFACES": ":080650:",
"ID_USB_INTERFACE_NUM": "00",
"ID_VENDOR": "Generic-",
"ID_VENDOR_ENC": "Generic-",
"ID_VENDOR_ID": "0bda",
"MAJOR": "8",
"MINOR": "16",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "75383",
"attrs": {
"alignment_offset": "0",
"bdi": null,
"capability": "51",
"dev": "8:16",
"device": null,
"discard_alignment": "0",
"events": "media_change",
"events_async": "",
"events_poll_msecs": "2000",
"ext_range": "256",
"inflight": " 0 0",
"range": "16",
"removable": "1",
"ro": "0",
"size": "0",
"stat": " 0 0 0 0 0 0 0 0 0 0 0",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=16\nDEVNAME=sdb\nDEVTYPE=disk"
}
},
"/dev/sdc": {
"DEVLINKS": "/dev/disk/by-id/usb-Generic-_SM_xD-Picture_20060413092100000-0:1 /dev/disk/by-path/pci-0000:00:1d.0-usb-0:1.2:1.0-scsi-0:0:0:1",
"DEVNAME": "/dev/sdc",
"DEVPATH": "/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host6/target6:0:0/6:0:0:1/block/sdc",
"DEVTYPE": "disk",
"ID_BUS": "usb",
"ID_INSTANCE": "0:1",
"ID_MODEL": "SM_xD-Picture",
"ID_MODEL_ENC": "SM\\x2fxD-Picture\\x20\\x20\\x20",
"ID_MODEL_ID": "0181",
"ID_PATH": "pci-0000:00:1d.0-usb-0:1.2:1.0-scsi-0:0:0:1",
"ID_PATH_TAG": "pci-0000_00_1d_0-usb-0_1_2_1_0-scsi-0_0_0_1",
"ID_REVISION": "1.00",
"ID_SERIAL": "Generic-_SM_xD-Picture_20060413092100000-0:1",
"ID_SERIAL_SHORT": "20060413092100000",
"ID_TYPE": "disk",
"ID_USB_DRIVER": "usb-storage",
"ID_USB_INTERFACES": ":080650:",
"ID_USB_INTERFACE_NUM": "00",
"ID_VENDOR": "Generic-",
"ID_VENDOR_ENC": "Generic-",
"ID_VENDOR_ID": "0bda",
"MAJOR": "8",
"MINOR": "32",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "75607",
"attrs": {
"alignment_offset": "0",
"bdi": null,
"capability": "51",
"dev": "8:32",
"device": null,
"discard_alignment": "0",
"events": "media_change",
"events_async": "",
"events_poll_msecs": "2000",
"ext_range": "256",
"inflight": " 0 0",
"range": "16",
"removable": "1",
"ro": "0",
"size": "0",
"stat": " 0 0 0 0 0 0 0 0 0 0 0",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=32\nDEVNAME=sdc\nDEVTYPE=disk"
}
},
"/dev/sdd": {
"DEVLINKS": "/dev/disk/by-id/usb-Generic-_SD_MMC_20060413092100000-0:2 /dev/disk/by-path/pci-0000:00:1d.0-usb-0:1.2:1.0-scsi-0:0:0:2",
"DEVNAME": "/dev/sdd",
"DEVPATH": "/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host6/target6:0:0/6:0:0:2/block/sdd",
"DEVTYPE": "disk",
"ID_BUS": "usb",
"ID_INSTANCE": "0:2",
"ID_MODEL": "SD_MMC",
"ID_MODEL_ENC": "SD\\x2fMMC\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_MODEL_ID": "0181",
"ID_PATH": "pci-0000:00:1d.0-usb-0:1.2:1.0-scsi-0:0:0:2",
"ID_PATH_TAG": "pci-0000_00_1d_0-usb-0_1_2_1_0-scsi-0_0_0_2",
"ID_REVISION": "1.00",
"ID_SERIAL": "Generic-_SD_MMC_20060413092100000-0:2",
"ID_SERIAL_SHORT": "20060413092100000",
"ID_TYPE": "disk",
"ID_USB_DRIVER": "usb-storage",
"ID_USB_INTERFACES": ":080650:",
"ID_USB_INTERFACE_NUM": "00",
"ID_VENDOR": "Generic-",
"ID_VENDOR_ENC": "Generic-",
"ID_VENDOR_ID": "0bda",
"MAJOR": "8",
"MINOR": "48",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "75828",
"attrs": {
"alignment_offset": "0",
"bdi": null,
"capability": "51",
"dev": "8:48",
"device": null,
"discard_alignment": "0",
"events": "media_change",
"events_async": "",
"events_poll_msecs": "2000",
"ext_range": "256",
"inflight": " 0 0",
"range": "16",
"removable": "1",
"ro": "0",
"size": "0",
"stat": " 0 0 0 0 0 0 0 0 0 0 0",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=48\nDEVNAME=sdd\nDEVTYPE=disk"
}
},
"/dev/sde": {
"DEVLINKS": "/dev/disk/by-id/usb-Generic-_MS_MS-Pro_HG_20060413092100000-0:3 /dev/disk/by-path/pci-0000:00:1d.0-usb-0:1.2:1.0-scsi-0:0:0:3",
"DEVNAME": "/dev/sde",
"DEVPATH": "/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host6/target6:0:0/6:0:0:3/block/sde",
"DEVTYPE": "disk",
"ID_BUS": "usb",
"ID_INSTANCE": "0:3",
"ID_MODEL": "MS_MS-Pro_HG",
"ID_MODEL_ENC": "MS\\x2fMS-Pro\\x2fHG\\x20\\x20\\x20\\x20",
"ID_MODEL_ID": "0181",
"ID_PATH": "pci-0000:00:1d.0-usb-0:1.2:1.0-scsi-0:0:0:3",
"ID_PATH_TAG": "pci-0000_00_1d_0-usb-0_1_2_1_0-scsi-0_0_0_3",
"ID_REVISION": "1.00",
"ID_SERIAL": "Generic-_MS_MS-Pro_HG_20060413092100000-0:3",
"ID_SERIAL_SHORT": "20060413092100000",
"ID_TYPE": "disk",
"ID_USB_DRIVER": "usb-storage",
"ID_USB_INTERFACES": ":080650:",
"ID_USB_INTERFACE_NUM": "00",
"ID_VENDOR": "Generic-",
"ID_VENDOR_ENC": "Generic-",
"ID_VENDOR_ID": "0bda",
"MAJOR": "8",
"MINOR": "64",
"SUBSYSTEM": "block",
"TAGS": ":systemd:",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "76087",
"attrs": {
"alignment_offset": "0",
"bdi": null,
"capability": "51",
"dev": "8:64",
"device": null,
"discard_alignment": "0",
"events": "media_change",
"events_async": "",
"events_poll_msecs": "2000",
"ext_range": "256",
"inflight": " 0 0",
"range": "16",
"removable": "1",
"ro": "0",
"size": "0",
"stat": " 0 0 0 0 0 0 0 0 0 0 0",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=64\nDEVNAME=sde\nDEVTYPE=disk"
}
},
"/dev/sr0": {
"DEVLINKS": "/dev/cdrom /dev/cdrw /dev/disk/by-id/ata-HL-DT-STDVD-RAM_GH70N_K4EC1F94009 /dev/dvd /dev/dvdrw",
"DEVNAME": "/dev/sr0",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata2/host1/target1:0:0/1:0:0:0/block/sr0",
"DEVTYPE": "disk",
"ID_ATA": "1",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_BUS": "ata",
"ID_CDROM": "1",
"ID_CDROM_CD": "1",
"ID_CDROM_CD_R": "1",
"ID_CDROM_CD_RW": "1",
"ID_CDROM_DVD": "1",
"ID_CDROM_DVD_PLUS_R": "1",
"ID_CDROM_DVD_PLUS_RW": "1",
"ID_CDROM_DVD_PLUS_R_DL": "1",
"ID_CDROM_DVD_R": "1",
"ID_CDROM_DVD_RAM": "1",
"ID_CDROM_DVD_RW": "1",
"ID_CDROM_MRW": "1",
"ID_CDROM_MRW_W": "1",
"ID_MODEL": "HL-DT-STDVD-RAM_GH70N",
"ID_MODEL_ENC": "HL-DT-STDVD-RAM\\x20GH70N\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_REVISION": "NYA2",
"ID_SERIAL": "HL-DT-STDVD-RAM_GH70N_K4EC1F94009",
"ID_SERIAL_SHORT": "K4EC1F94009",
"ID_TYPE": "cd",
"MAJOR": "11",
"MINOR": "0",
"SUBSYSTEM": "block",
"TAGS": ":seat:systemd:uaccess:",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "59556",
"attrs": {
"alignment_offset": "0",
"bdi": null,
"capability": "119",
"dev": "11:0",
"device": null,
"discard_alignment": "0",
"events": "media_change eject_request",
"events_async": "",
"events_poll_msecs": "2000",
"ext_range": "1",
"inflight": " 0 0",
"range": "1",
"removable": "1",
"ro": "0",
"size": "1073741312",
"stat": " 0 0 0 0 0 0 0 0 0 0 0",
"subsystem": "block",
"uevent": "MAJOR=11\nMINOR=0\nDEVNAME=sr0\nDEVTYPE=disk"
}
}
}
}

1116
examples/kriek.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,576 @@
{
"network": {
"eth0": {
"hardware": {
"DEVPATH": "/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2.1/3-2.1.1/3-2.1.1:1.0/net/eth0",
"ID_BUS": "usb",
"ID_MM_CANDIDATE": "1",
"ID_MODEL": "AX88179",
"ID_MODEL_ENC": "AX88179",
"ID_MODEL_ID": "1790",
"ID_NET_NAME_MAC": "enx000acd264533",
"ID_NET_NAME_PATH": "enp0s20u2u1u1",
"ID_OUI_FROM_DATABASE": "Sunrich Technology Limited",
"ID_REVISION": "0100",
"ID_SERIAL": "ASIX_Elec._Corp._AX88179_00000000000001",
"ID_SERIAL_SHORT": "00000000000001",
"ID_TYPE": "generic",
"ID_USB_CLASS_FROM_DATABASE": "Vendor Specific Class",
"ID_USB_DRIVER": "ax88179_178a",
"ID_USB_INTERFACES": ":ffff00:",
"ID_USB_INTERFACE_NUM": "00",
"ID_USB_SUBCLASS_FROM_DATABASE": "Vendor Specific Subclass",
"ID_VENDOR": "ASIX_Elec._Corp.",
"ID_VENDOR_ENC": "ASIX\\x20Elec.\\x20Corp.",
"ID_VENDOR_FROM_DATABASE": "ASIX Electronics Corp.",
"ID_VENDOR_ID": "0b95",
"IFINDEX": "3",
"INTERFACE": "eth0",
"SUBSYSTEM": "net",
"USEC_INITIALIZED": "33255",
"attrs": {
"addr_assign_type": "0",
"addr_len": "6",
"address": "00:0a:cd:26:45:33",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": "1",
"dev_id": "0x0",
"device": null,
"dormant": "0",
"duplex": "full",
"flags": "0x1003",
"ifalias": "",
"ifindex": "3",
"iflink": "3",
"link_mode": "0",
"mtu": "1500",
"netdev_group": "0",
"operstate": "up",
"phys_port_id": null,
"speed": "1000",
"subsystem": "net",
"tx_queue_len": "1000",
"type": "1",
"uevent": "INTERFACE=eth0\nIFINDEX=3"
}
},
"ip": {
"addr": "192.168.11.58",
"broadcast": "192.168.11.255",
"netmask": "255.255.255.0"
},
"type": "eth"
},
"lo": {
"hardware": {
"DEVPATH": "/devices/virtual/net/lo",
"ID_MM_CANDIDATE": "1",
"IFINDEX": "1",
"INTERFACE": "lo",
"SUBSYSTEM": "net",
"USEC_INITIALIZED": "11311",
"attrs": {
"addr_assign_type": "0",
"addr_len": "6",
"address": "00:00:00:00:00:00",
"broadcast": "00:00:00:00:00:00",
"carrier": "1",
"dev_id": "0x0",
"dormant": "0",
"duplex": null,
"flags": "0x9",
"ifalias": "",
"ifindex": "1",
"iflink": "1",
"link_mode": "0",
"mtu": "65536",
"netdev_group": "0",
"operstate": "unknown",
"phys_port_id": null,
"speed": null,
"subsystem": "net",
"tx_queue_len": "0",
"type": "772",
"uevent": "INTERFACE=lo\nIFINDEX=1"
}
},
"ip": {
"addr": "127.0.0.1",
"netmask": "255.0.0.0",
"peer": "127.0.0.1"
},
"type": "lo"
},
"lxcbr0": {
"hardware": {
"DEVPATH": "/devices/virtual/net/lxcbr0",
"DEVTYPE": "bridge",
"ID_MM_CANDIDATE": "1",
"IFINDEX": "4",
"INTERFACE": "lxcbr0",
"SUBSYSTEM": "net",
"USEC_INITIALIZED": "75746",
"attrs": {
"addr_assign_type": "1",
"addr_len": "6",
"address": "b2:ff:62:85:c0:08",
"brforward": "",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": "1",
"dev_id": "0x0",
"dormant": "0",
"duplex": null,
"flags": "0x1003",
"ifalias": "",
"ifindex": "4",
"iflink": "4",
"link_mode": "0",
"mtu": "1500",
"netdev_group": "0",
"operstate": "unknown",
"phys_port_id": null,
"speed": null,
"subsystem": "net",
"tx_queue_len": "0",
"type": "1",
"uevent": "DEVTYPE=bridge\nINTERFACE=lxcbr0\nIFINDEX=4"
}
},
"ip": {
"addr": "10.0.3.1",
"broadcast": "10.0.3.1",
"netmask": "255.255.255.0"
},
"type": "bridge"
},
"tun0": {
"hardware": {
"DEVPATH": "/devices/virtual/net/tun0",
"ID_MM_CANDIDATE": "1",
"IFINDEX": "7",
"INTERFACE": "tun0",
"SUBSYSTEM": "net",
"USEC_INITIALIZED": "277564657499",
"attrs": {
"addr_assign_type": "0",
"addr_len": "0",
"address": "",
"broadcast": "",
"carrier": "1",
"dev_id": "0x0",
"dormant": "0",
"duplex": "full",
"flags": "0x1091",
"group": "-1",
"ifalias": "",
"ifindex": "7",
"iflink": "7",
"link_mode": "0",
"mtu": "1500",
"netdev_group": "0",
"operstate": "unknown",
"owner": "-1",
"phys_port_id": null,
"speed": "10",
"subsystem": "net",
"tun_flags": "0x2001",
"tx_queue_len": "100",
"type": "65534",
"uevent": "INTERFACE=tun0\nIFINDEX=7"
}
},
"ip": {
"addr": "10.172.64.178",
"netmask": "255.255.192.0",
"peer": "10.172.127.255"
},
"type": "tun"
},
"virbr0": {
"hardware": {
"DEVPATH": "/devices/virtual/net/virbr0",
"DEVTYPE": "bridge",
"ID_MM_CANDIDATE": "1",
"IFINDEX": "5",
"INTERFACE": "virbr0",
"SUBSYSTEM": "net",
"USEC_INITIALIZED": "45457",
"attrs": {
"addr_assign_type": "1",
"addr_len": "6",
"address": "2a:fe:07:89:d2:81",
"brforward": "",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": "0",
"dev_id": "0x0",
"dormant": "0",
"duplex": null,
"flags": "0x1003",
"ifalias": "",
"ifindex": "5",
"iflink": "5",
"link_mode": "0",
"mtu": "1500",
"netdev_group": "0",
"operstate": "down",
"phys_port_id": null,
"speed": null,
"subsystem": "net",
"tx_queue_len": "0",
"type": "1",
"uevent": "DEVTYPE=bridge\nINTERFACE=virbr0\nIFINDEX=5"
}
},
"ip": {
"addr": "192.168.122.1",
"broadcast": "192.168.122.255",
"netmask": "255.255.255.0"
},
"type": "bridge"
},
"wlan0": {
"hardware": {
"DEVPATH": "/devices/pci0000:00/0000:00:1c.1/0000:03:00.0/net/wlan0",
"DEVTYPE": "wlan",
"ID_BUS": "pci",
"ID_MM_CANDIDATE": "1",
"ID_MODEL_FROM_DATABASE": "Centrino Advanced-N 6205 [Taylor Peak]",
"ID_MODEL_ID": "0x0085",
"ID_NET_NAME_MAC": "wlx843a4bcd1778",
"ID_NET_NAME_PATH": "wlp3s0",
"ID_OUI_FROM_DATABASE": "Intel Corporate",
"ID_PCI_CLASS_FROM_DATABASE": "Network controller",
"ID_PCI_SUBCLASS_FROM_DATABASE": "Network controller",
"ID_VENDOR_FROM_DATABASE": "Intel Corporation",
"ID_VENDOR_ID": "0x8086",
"IFINDEX": "2",
"INTERFACE": "wlan0",
"SUBSYSTEM": "net",
"USEC_INITIALIZED": "60258",
"attrs": {
"addr_assign_type": "0",
"addr_len": "6",
"address": "84:3a:4b:cd:17:78",
"broadcast": "ff:ff:ff:ff:ff:ff",
"carrier": "1",
"dev_id": "0x0",
"device": null,
"dormant": "0",
"duplex": null,
"flags": "0x1003",
"ifalias": "",
"ifindex": "2",
"iflink": "2",
"link_mode": "1",
"mtu": "1500",
"netdev_group": "0",
"operstate": "up",
"phy80211": null,
"phys_port_id": null,
"speed": null,
"subsystem": "net",
"tx_queue_len": "1000",
"type": "1",
"uevent": "DEVTYPE=wlan\nINTERFACE=wlan0\nIFINDEX=2"
}
},
"ip": {
"addr": "192.168.11.42",
"broadcast": "192.168.11.255",
"netmask": "255.255.255.0"
},
"type": "wlan"
}
},
"storage": {
"/dev/sda": {
"DEVLINKS": "/dev/disk/by-id/ata-SanDisk_SD5SG2128G1052E_133507400177 /dev/disk/by-id/wwn-0x5001b44a213e3df1",
"DEVNAME": "/dev/sda",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"DEVTYPE": "disk",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_APM": "1",
"ID_ATA_FEATURE_SET_APM_CURRENT_VALUE": "254",
"ID_ATA_FEATURE_SET_APM_ENABLED": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "12",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "2",
"ID_ATA_FEATURE_SET_SECURITY_FROZEN": "1",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "0",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_MODEL": "SanDisk_SD5SG2128G1052E",
"ID_MODEL_ENC": "SanDisk\\x20SD5SG2128G1052E\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_TABLE_TYPE": "dos",
"ID_REVISION": "10.04.01",
"ID_SERIAL": "SanDisk_SD5SG2128G1052E_133507400177",
"ID_SERIAL_SHORT": "133507400177",
"ID_TYPE": "disk",
"ID_WWN": "0x5001b44a213e3df1",
"ID_WWN_WITH_EXTENSION": "0x5001b44a213e3df1",
"MAJOR": "8",
"MINOR": "0",
"SUBSYSTEM": "block",
"UDISKS_ATA_SMART_IS_AVAILABLE": "1",
"UDISKS_PARTITION_TABLE": "1",
"UDISKS_PARTITION_TABLE_COUNT": "3",
"UDISKS_PARTITION_TABLE_SCHEME": "mbr",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "50985",
"attrs": {
"alignment_offset": "0",
"bdi": null,
"capability": "50",
"dev": "8:0",
"device": null,
"discard_alignment": "0",
"events": "",
"events_async": "",
"events_poll_msecs": "-1",
"ext_range": "256",
"inflight": " 0 0",
"range": "16",
"removable": "0",
"ro": "0",
"size": "128035676160",
"stat": " 5346540 346209 229685278 3580544 2106070 1770997 536661832 36300664 0 3541536 39891028",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=0\nDEVNAME=sda\nDEVTYPE=disk"
}
},
"/dev/sda1": {
"DEVLINKS": "/dev/disk/by-id/ata-SanDisk_SD5SG2128G1052E_133507400177-part1 /dev/disk/by-id/wwn-0x5001b44a213e3df1-part1 /dev/disk/by-uuid/aa553e3a-3e79-4f9f-8be3-e40e357c06f7",
"DEVNAME": "/dev/sda1",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda1",
"DEVTYPE": "partition",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_APM": "1",
"ID_ATA_FEATURE_SET_APM_CURRENT_VALUE": "128",
"ID_ATA_FEATURE_SET_APM_ENABLED": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "12",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "2",
"ID_ATA_FEATURE_SET_SECURITY_FROZEN": "1",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "0",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_FS_TYPE": "ext4",
"ID_FS_USAGE": "filesystem",
"ID_FS_UUID": "aa553e3a-3e79-4f9f-8be3-e40e357c06f7",
"ID_FS_UUID_ENC": "aa553e3a-3e79-4f9f-8be3-e40e357c06f7",
"ID_FS_VERSION": "1.0",
"ID_MODEL": "SanDisk_SD5SG2128G1052E",
"ID_MODEL_ENC": "SanDisk\\x20SD5SG2128G1052E\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_ENTRY_DISK": "8:0",
"ID_PART_ENTRY_FLAGS": "0x80",
"ID_PART_ENTRY_NUMBER": "1",
"ID_PART_ENTRY_OFFSET": "2048",
"ID_PART_ENTRY_SCHEME": "dos",
"ID_PART_ENTRY_SIZE": "233910272",
"ID_PART_ENTRY_TYPE": "0x83",
"ID_PART_TABLE_TYPE": "dos",
"ID_REVISION": "10.04.01",
"ID_SERIAL": "SanDisk_SD5SG2128G1052E_133507400177",
"ID_SERIAL_SHORT": "133507400177",
"ID_TYPE": "disk",
"ID_WWN": "0x5001b44a213e3df1",
"ID_WWN_WITH_EXTENSION": "0x5001b44a213e3df1",
"MAJOR": "8",
"MINOR": "1",
"SUBSYSTEM": "block",
"UDISKS_PARTITION": "1",
"UDISKS_PARTITION_ALIGNMENT_OFFSET": "0",
"UDISKS_PARTITION_FLAGS": "boot",
"UDISKS_PARTITION_NUMBER": "1",
"UDISKS_PARTITION_OFFSET": "1048576",
"UDISKS_PARTITION_SCHEME": "mbr",
"UDISKS_PARTITION_SIZE": "119762059264",
"UDISKS_PARTITION_SLAVE": "/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"UDISKS_PARTITION_TYPE": "0x83",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "51007",
"attrs": {
"alignment_offset": "0",
"dev": "8:1",
"discard_alignment": "0",
"inflight": " 0 0",
"partition": "1",
"ro": "0",
"size": "119762059264",
"start": "2048",
"stat": " 5276564 32864 226617690 3531412 1987700 1303538 532766640 36118768 0 3425928 39664340",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=1\nDEVNAME=sda1\nDEVTYPE=partition"
}
},
"/dev/sda2": {
"DEVLINKS": "/dev/disk/by-id/ata-SanDisk_SD5SG2128G1052E_133507400177-part2 /dev/disk/by-id/wwn-0x5001b44a213e3df1-part2",
"DEVNAME": "/dev/sda2",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda2",
"DEVTYPE": "partition",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_APM": "1",
"ID_ATA_FEATURE_SET_APM_CURRENT_VALUE": "128",
"ID_ATA_FEATURE_SET_APM_ENABLED": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "12",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "2",
"ID_ATA_FEATURE_SET_SECURITY_FROZEN": "1",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "0",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_MODEL": "SanDisk_SD5SG2128G1052E",
"ID_MODEL_ENC": "SanDisk\\x20SD5SG2128G1052E\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_ENTRY_DISK": "8:0",
"ID_PART_ENTRY_NUMBER": "2",
"ID_PART_ENTRY_OFFSET": "233914366",
"ID_PART_ENTRY_SCHEME": "dos",
"ID_PART_ENTRY_SIZE": "16154626",
"ID_PART_ENTRY_TYPE": "0x5",
"ID_PART_TABLE_TYPE": "dos",
"ID_REVISION": "10.04.01",
"ID_SERIAL": "SanDisk_SD5SG2128G1052E_133507400177",
"ID_SERIAL_SHORT": "133507400177",
"ID_TYPE": "disk",
"ID_WWN": "0x5001b44a213e3df1",
"ID_WWN_WITH_EXTENSION": "0x5001b44a213e3df1",
"MAJOR": "8",
"MINOR": "2",
"SUBSYSTEM": "block",
"UDISKS_PARTITION": "1",
"UDISKS_PARTITION_ALIGNMENT_OFFSET": "0",
"UDISKS_PARTITION_NUMBER": "2",
"UDISKS_PARTITION_OFFSET": "119764155392",
"UDISKS_PARTITION_SCHEME": "mbr",
"UDISKS_PARTITION_SIZE": "8271168512",
"UDISKS_PARTITION_SLAVE": "/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"UDISKS_PARTITION_TYPE": "0x05",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "51022",
"attrs": {
"alignment_offset": "0",
"dev": "8:2",
"discard_alignment": "0",
"inflight": " 0 0",
"partition": "2",
"ro": "0",
"size": "1024",
"start": "233914366",
"stat": " 2 0 4 0 0 0 0 0 0 0 0",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=2\nDEVNAME=sda2\nDEVTYPE=partition"
}
},
"/dev/sda5": {
"DEVLINKS": "/dev/disk/by-id/ata-SanDisk_SD5SG2128G1052E_133507400177-part5 /dev/disk/by-id/wwn-0x5001b44a213e3df1-part5 /dev/disk/by-uuid/d7de9528-c3f7-40ea-a43d-59c7d7beb216",
"DEVNAME": "/dev/sda5",
"DEVPATH": "/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda/sda5",
"DEVTYPE": "partition",
"ID_ATA": "1",
"ID_ATA_DOWNLOAD_MICROCODE": "1",
"ID_ATA_FEATURE_SET_APM": "1",
"ID_ATA_FEATURE_SET_APM_CURRENT_VALUE": "128",
"ID_ATA_FEATURE_SET_APM_ENABLED": "1",
"ID_ATA_FEATURE_SET_HPA": "1",
"ID_ATA_FEATURE_SET_HPA_ENABLED": "1",
"ID_ATA_FEATURE_SET_PM": "1",
"ID_ATA_FEATURE_SET_PM_ENABLED": "1",
"ID_ATA_FEATURE_SET_SECURITY": "1",
"ID_ATA_FEATURE_SET_SECURITY_ENABLED": "0",
"ID_ATA_FEATURE_SET_SECURITY_ENHANCED_ERASE_UNIT_MIN": "12",
"ID_ATA_FEATURE_SET_SECURITY_ERASE_UNIT_MIN": "2",
"ID_ATA_FEATURE_SET_SECURITY_FROZEN": "1",
"ID_ATA_FEATURE_SET_SMART": "1",
"ID_ATA_FEATURE_SET_SMART_ENABLED": "1",
"ID_ATA_ROTATION_RATE_RPM": "0",
"ID_ATA_SATA": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN1": "1",
"ID_ATA_SATA_SIGNAL_RATE_GEN2": "1",
"ID_ATA_WRITE_CACHE": "1",
"ID_ATA_WRITE_CACHE_ENABLED": "1",
"ID_BUS": "ata",
"ID_FS_TYPE": "swap",
"ID_FS_USAGE": "other",
"ID_FS_UUID": "d7de9528-c3f7-40ea-a43d-59c7d7beb216",
"ID_FS_UUID_ENC": "d7de9528-c3f7-40ea-a43d-59c7d7beb216",
"ID_FS_VERSION": "2",
"ID_MODEL": "SanDisk_SD5SG2128G1052E",
"ID_MODEL_ENC": "SanDisk\\x20SD5SG2128G1052E\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
"ID_PART_ENTRY_DISK": "8:0",
"ID_PART_ENTRY_NUMBER": "5",
"ID_PART_ENTRY_OFFSET": "233914368",
"ID_PART_ENTRY_SCHEME": "dos",
"ID_PART_ENTRY_SIZE": "16154624",
"ID_PART_ENTRY_TYPE": "0x82",
"ID_PART_TABLE_TYPE": "dos",
"ID_REVISION": "10.04.01",
"ID_SERIAL": "SanDisk_SD5SG2128G1052E_133507400177",
"ID_SERIAL_SHORT": "133507400177",
"ID_TYPE": "disk",
"ID_WWN": "0x5001b44a213e3df1",
"ID_WWN_WITH_EXTENSION": "0x5001b44a213e3df1",
"MAJOR": "8",
"MINOR": "5",
"SUBSYSTEM": "block",
"UDISKS_PARTITION": "1",
"UDISKS_PARTITION_ALIGNMENT_OFFSET": "0",
"UDISKS_PARTITION_NUMBER": "5",
"UDISKS_PARTITION_OFFSET": "119764156416",
"UDISKS_PARTITION_SCHEME": "mbr",
"UDISKS_PARTITION_SIZE": "8271167488",
"UDISKS_PARTITION_SLAVE": "/sys/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda",
"UDISKS_PARTITION_TYPE": "0x82",
"UDISKS_PRESENTATION_NOPOLICY": "0",
"USEC_INITIALIZED": "51035",
"attrs": {
"alignment_offset": "0",
"dev": "8:5",
"discard_alignment": "0",
"inflight": " 0 0",
"partition": "5",
"ro": "0",
"size": "8271167488",
"start": "233914368",
"stat": " 69635 313345 3064872 49080 19439 467459 3895192 91368 0 71388 140388",
"subsystem": "block",
"uevent": "MAJOR=8\nMINOR=5\nDEVNAME=sda5\nDEVTYPE=partition"
}
}
}
}

View File

@ -30,10 +30,11 @@ BIOS_GRUB_SIZE_BYTES = 2 * 1024 * 1024 # 2MiB
class FilesystemController(ControllerPolicy): class FilesystemController(ControllerPolicy):
def __init__(self, ui, signal): def __init__(self, ui, signal, prober):
self.ui = ui self.ui = ui
self.signal = signal self.signal = signal
self.model = FilesystemModel() self.prober = prober
self.model = FilesystemModel(prober)
def filesystem(self, reset=False): def filesystem(self, reset=False):
# FIXME: Is this the best way to zero out this list for a reset? # FIXME: Is this the best way to zero out this list for a reset?

View File

@ -20,10 +20,11 @@ from subiquity.ui.dummy import DummyView
class NetworkController(ControllerPolicy): class NetworkController(ControllerPolicy):
def __init__(self, ui, signal): def __init__(self, ui, signal, prober):
self.ui = ui self.ui = ui
self.signal = signal self.signal = signal
self.model = NetworkModel() self.prober = prober
self.model = NetworkModel(self.prober)
def network(self): def network(self):
title = "Network connections" title = "Network connections"

View File

@ -19,6 +19,7 @@ import urwid.curses_display
from tornado.ioloop import IOLoop from tornado.ioloop import IOLoop
from subiquity.signals import Signal from subiquity.signals import Signal
from subiquity.palette import STYLES, STYLES_MONO from subiquity.palette import STYLES, STYLES_MONO
from subiquity.prober import Prober
# Modes import ---------------------------------------------------------------- # Modes import ----------------------------------------------------------------
from subiquity.controllers import (WelcomeController, from subiquity.controllers import (WelcomeController,
@ -41,11 +42,13 @@ class Controller:
self.ui = ui self.ui = ui
self.opts = opts self.opts = opts
self.signal = Signal() self.signal = Signal()
self.prober = Prober(self.opts)
self.controllers = { self.controllers = {
"welcome": WelcomeController(self.ui, self.signal), "welcome": WelcomeController(self.ui, self.signal),
"installpath": InstallpathController(self.ui, self.signal), "installpath": InstallpathController(self.ui, self.signal),
"network": NetworkController(self.ui, self.signal), "network": NetworkController(self.ui, self.signal, self.prober),
"filesystem": FilesystemController(self.ui, self.signal), "filesystem": FilesystemController(self.ui, self.signal,
self.prober),
"identity": IdentityController(self.ui, self.signal), "identity": IdentityController(self.ui, self.signal),
"progress": InstallProgressController(self.ui, self.signal, "progress": InstallProgressController(self.ui, self.signal,
self.opts) self.opts)

View File

@ -75,6 +75,11 @@ class Disk():
sysblock = os.path.join('/sys/block', os.path.basename(devpath)) sysblock = os.path.join('/sys/block', os.path.basename(devpath))
nr_blocks_f = os.path.join(sysblock, 'size') nr_blocks_f = os.path.join(sysblock, 'size')
block_sz_f = os.path.join(sysblock, 'queue', 'logical_block_size') block_sz_f = os.path.join(sysblock, 'queue', 'logical_block_size')
if not os.path.exists(sysblock):
log.warn('disk at devpath:{} not present'.format(devpath))
return 0
with open(nr_blocks_f, 'r') as r: with open(nr_blocks_f, 'r') as r:
nr_blocks = int(r.read()) nr_blocks = int(r.read())
with open(block_sz_f, 'r') as r: with open(block_sz_f, 'r') as r:
@ -162,7 +167,7 @@ class Blockdev():
def available(self): def available(self):
''' return True if has free space or partitions not ''' return True if has free space or partitions not
assigned ''' assigned '''
if self.freespace > 0.0 or self.freepartition > 0.0: if self.freespace > 0.0:
return True return True
return False return False

View File

@ -14,12 +14,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import json import json
import argparse
import logging import logging
from .blockdev import Blockdev from .blockdev import Blockdev
from probert import prober
from probert.storage import StorageInfo
import math import math
from subiquity.model import ModelPolicy from subiquity.model import ModelPolicy
@ -89,14 +86,11 @@ class FilesystemModel(ModelPolicy):
'leave unformatted' 'leave unformatted'
] ]
def __init__(self): def __init__(self, prober):
self.storage = {} self.prober = prober
self.info = {} self.info = {}
self.devices = {} self.devices = {}
self.options = argparse.Namespace(probe_storage=True, self.storage = {}
probe_network=False)
self.prober = prober.Prober(self.options)
self.probe_storage()
def reset(self): def reset(self):
log.debug('FilesystemModel: resetting disks') log.debug('FilesystemModel: resetting disks')
@ -115,8 +109,9 @@ class FilesystemModel(ModelPolicy):
return self.fs_menu return self.fs_menu
def probe_storage(self): def probe_storage(self):
self.prober.probe() log.debug('model.probe_storage: probing storage')
self.storage = self.prober.get_results().get('storage') self.storage = self.prober.get_storage()
log.debug('got storage:\n{}'.format(self.storage))
# TODO: Put this into a logging namespace for probert # TODO: Put this into a logging namespace for probert
# since its quite a bit of log information. # since its quite a bit of log information.
# log.debug('storage probe data:\n{}'.format( # log.debug('storage probe data:\n{}'.format(
@ -131,15 +126,18 @@ class FilesystemModel(ModelPolicy):
log.debug('disk={}\n{}'.format(disk, log.debug('disk={}\n{}'.format(disk,
json.dumps(self.storage[disk], indent=4, json.dumps(self.storage[disk], indent=4,
sort_keys=True))) sort_keys=True)))
self.info[disk] = StorageInfo({disk: self.storage[disk]}) self.info[disk] = self.prober.get_storage_info(disk)
def get_disk(self, disk): def get_disk(self, disk):
log.debug('probe_storage: get_disk()')
if disk not in self.devices: if disk not in self.devices:
self.devices[disk] = Blockdev(disk, self.info[disk].serial, self.devices[disk] = Blockdev(disk, self.info[disk].serial,
self.info[disk].model) self.info[disk].model,
size=self.info[disk].size)
return self.devices[disk] return self.devices[disk]
def get_partitions(self): def get_partitions(self):
log.debug('probe_storage: get_partitions()')
partitions = [] partitions = []
for dev in self.devices.values(): for dev in self.devices.values():
partnames = [part.path for (num, part) in partnames = [part.path for (num, part) in
@ -147,13 +145,14 @@ class FilesystemModel(ModelPolicy):
partitions += partnames partitions += partnames
sorted(partitions) sorted(partitions)
log.debug('probe_storage: get_partitions() returns: {}'.format(partitions))
return partitions return partitions
def get_available_disks(self): def get_available_disks(self):
return sorted(self.info.keys()) return sorted(self.info.keys())
def get_used_disks(self): def get_used_disks(self):
return [dev.disk.path for dev in self.devices.values() return [dev.disk.devpath for dev in self.devices.values()
if dev.available is False] if dev.available is False]
def get_disk_info(self, disk): def get_disk_info(self, disk):

View File

@ -14,8 +14,6 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
import logging import logging
import argparse
from probert import prober
from subiquity.model import ModelPolicy from subiquity.model import ModelPolicy
@ -61,11 +59,9 @@ class NetworkModel(ModelPolicy):
'install_network_driver') 'install_network_driver')
] ]
def __init__(self): def __init__(self, prober):
self.prober = prober
self.network = {} self.network = {}
self.options = argparse.Namespace(probe_storage=False,
probe_network=True)
self.prober = prober.Prober(self.options)
def get_signal_by_name(self, selection): def get_signal_by_name(self, selection):
for x, y, z in self.get_signals(): for x, y, z in self.get_signals():
@ -79,8 +75,8 @@ class NetworkModel(ModelPolicy):
return self.additional_options return self.additional_options
def probe_network(self): def probe_network(self):
self.prober.probe() log.debug('model calling prober.get_network()')
self.network = self.prober.get_results().get('network') self.network = self.prober.get_network()
def get_interfaces(self): def get_interfaces(self):
VALID_NIC_TYPES = ['eth', 'wlan'] VALID_NIC_TYPES = ['eth', 'wlan']

64
subiquity/prober.py Normal file
View File

@ -0,0 +1,64 @@
# Copyright 2015 Canonical, Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import logging
import json
import os
from probert.storage import (Storage,
StorageInfo)
from probert.network import (Network,
NetworkInfo)
log = logging.getLogger('subiquity.prober')
class Prober():
def __init__(self, opts):
self.opts = opts
self.probe_data = {}
if self.opts.machine_config:
log.debug('User specified machine_config: {}'.format(
self.opts.machine_config))
if os.path.exists(self.opts.machine_config):
with open(self.opts.machine_config) as mc:
self.probe_data = json.load(mc)
log.debug('Prober() init finished, data:{}'.format(self.probe_data))
def get_network(self):
if 'network' not in self.probe_data:
log.debug('get_network: no network in probe_data, fetching')
network = Network()
results = network.probe()
self.probe_data['network'] = results
return self.probe_data['network']
def get_network_info(self, device):
''' Load a NetworkInfo class for specified device '''
return NetworkInfo({device: self.get_network().get(device)})
def get_storage(self):
''' Load a StorageInfo class. Probe if it's not present '''
if 'storage' not in self.probe_data:
log.debug('get_storage: no storage in probe_data, fetching')
storage = Storage()
results = storage.probe()
self.probe_data['storage'] = results
return self.probe_data['storage']
def get_storage_info(self, device):
''' Load a StorageInfo class for specified device '''
return StorageInfo({device: self.get_storage().get(device)})

View File

@ -284,9 +284,11 @@ class DiskPartitionView(WidgetWrap):
class FilesystemView(ViewPolicy): class FilesystemView(ViewPolicy):
def __init__(self, model, signal): def __init__(self, model, signal):
log.debug('FileSystemView init start()')
self.model = model self.model = model
self.signal = signal self.signal = signal
self.items = [] self.items = []
self.model.probe_storage() # probe before we complete
self.body = [ self.body = [
Padding.center_79(Text("FILE SYSTEM")), Padding.center_79(Text("FILE SYSTEM")),
Padding.center_79(self._build_partition_list()), Padding.center_79(self._build_partition_list()),
@ -296,27 +298,35 @@ class FilesystemView(ViewPolicy):
Padding.line_break(""), Padding.line_break(""),
Padding.center_79(self._build_menu()), Padding.center_79(self._build_menu()),
Padding.line_break(""), Padding.line_break(""),
self._build_used_disks(), Padding.center_79(self._build_used_disks()),
Padding.center_15(self._build_buttons()), Padding.center_15(self._build_buttons()),
] ]
super().__init__(ListBox(self.body)) super().__init__(ListBox(self.body))
log.debug('FileSystemView init complete()')
def _build_used_disks(self): def _build_used_disks(self):
log.debug('FileSystemView: building used disks')
pl = [] pl = []
for disk in self.model.get_used_disks(): for disk in self.model.get_used_disks():
pl.append(Text(disk.path)) log.debug('used disk: {}'.format(disk))
pl.append(Text(disk))
if len(pl): if len(pl):
return Padding.center_79(Text("USED DISKS"), return Pile([Text("USED DISKS"),
Padding.line_break(""), Padding.line_break("")] + pl +
Pile(pl)) [Padding.line_break("")]
)
return Pile(pl) return Pile(pl)
def _build_partition_list(self): def _build_partition_list(self):
log.debug('FileSystemView: building part list')
pl = [] pl = []
if len(self.model.get_partitions()) == 0: if len(self.model.get_partitions()) == 0:
pl.append(Color.info_minor( pl.append(Color.info_minor(
Text("No disks or partitions mounted"))) Text("No disks or partitions mounted")))
log.debug('FileSystemView: no partitions')
return Pile(pl) return Pile(pl)
log.debug('FileSystemView: weve got partitions!')
for dev in self.model.devices.values(): for dev in self.model.devices.values():
for mnt, size, fstype, path in dev.get_fs_table(): for mnt, size, fstype, path in dev.get_fs_table():
mnt = Text(mnt) mnt = Text(mnt)
@ -330,9 +340,11 @@ class FilesystemView(ViewPolicy):
mnt mnt
], 4) ], 4)
pl.append(partition_column) pl.append(partition_column)
log.debug('FileSystemView: build-part-list done')
return Pile(pl) return Pile(pl)
def _build_buttons(self): def _build_buttons(self):
log.debug('FileSystemView: building buttons')
buttons = [ buttons = [
Color.button(done_btn(on_press=self.done), Color.button(done_btn(on_press=self.done),
focus_map='button focus'), focus_map='button focus'),
@ -351,6 +363,7 @@ class FilesystemView(ViewPolicy):
return (rounded, percent) return (rounded, percent)
def _build_model_inputs(self): def _build_model_inputs(self):
log.debug('FileSystemView: building model inputs')
col_1 = [] col_1 = []
col_2 = [] col_2 = []
@ -378,6 +391,7 @@ class FilesystemView(ViewPolicy):
return Columns([(15, col_1), col_2], 2) return Columns([(15, col_1), col_2], 2)
def _build_menu(self): def _build_menu(self):
log.debug('FileSystemView: building menu')
opts = [] opts = []
for opt, sig, _ in self.model.get_menu(): for opt, sig, _ in self.model.get_menu():
opts.append( opts.append(