Get JSON export to work

This commit is contained in:
Raphaël Numbus
2026-03-29 13:42:32 +02:00
parent 06f299727c
commit d857e0d4ac
+62 -42
View File
@@ -66,7 +66,7 @@ hardware_detection() {
### --> Get hardware information ### --> Get hardware information
local TMPFILE="/tmp/hw_detection.json" local TMPFILE="/tmp/hw_detection.json"
ssh_to_host 'bash -s' << SSHEND PASS="${LIVE_TARGET_PASSWD}" ssh_to_host "PASS=\"\$PASS\" bash -s" << 'SSHEND'
TARGET_GRAPHICS="false" TARGET_GRAPHICS="false"
TARGET_GRAPHICS_BRAND=() TARGET_GRAPHICS_BRAND=()
@@ -77,79 +77,99 @@ for brand in Intel AMD NVIDIA; do
fi fi
done done
ls /dev/dri/ > /dev/null 2>&1 | grep -iq "renderD128" && TARGET_GRAPHICS_RENDERER="true" || TARGET_GRAPHICS_RENDERER="false" ls /dev/dri/ 2>/dev/null | grep -iq "renderD128" && TARGET_GRAPHICS_RENDERER="true" || TARGET_GRAPHICS_RENDERER="false"
lsusb > /dev/null 2>&1 | grep -iq "google" && TARGET_USB_CORAL="true" || TARGET_USB_CORAL="false" lsusb 2>/dev/null | grep -iq "google" && TARGET_USB_CORAL="true" || TARGET_USB_CORAL="false"
lspci -nn > /dev/null 2>&1 | grep -iq "089a" && TARGET_PCIE_CORAL="true" || TARGET_PCIE_CORAL="false" lspci -nn 2>/dev/null | grep -iq "089a" && TARGET_PCIE_CORAL="true" || TARGET_PCIE_CORAL="false"
ls /dev/serial/by-id/ > /dev/null 2>&1 | grep -i "zigbee" && TARGET_ZIGBEE_DEVICE=\$(ls /dev/serial/by-id/ > /dev/null 2>&1 | grep -i "zigbee" | head -n 1) || TARGET_ZIGBEE_DEVICE="" TARGET_ZIGBEE_DEVICE=$(ls /dev/serial/by-id/ 2>/dev/null | grep -i "zigbee" | head -n 1 || echo "")
TARGET_INTERFACE=\$(ip -4 route show default | awk '{print \$5}' | head -n1) TARGET_INTERFACE=$(ip -4 route show default | awk '{print $5}' | head -n1)
if ls -l /sys/class/tpm/tpm0/ > /dev/null 2>&1; then if ls -l /sys/class/tpm/tpm0/ > /dev/null 2>&1; then
TARGET_TPM="true" TARGET_TPM="true"
TARGET_TPM_VERSION=\$(cat /sys/class/tpm/tpm0/tpm_version_major) TARGET_TPM_VERSION=$(cat /sys/class/tpm/tpm0/tpm_version_major)
else else
TARGET_TPM="false" TARGET_TPM="false"
TARGET_TPM_VERSION="N/A" TARGET_TPM_VERSION="N/A"
fi fi
HDD=1
DISK_DEVPATH=() DISK_DEVPATH=()
DISK_NAME=() DISK_NAME=()
DISK_TYPE=() DISK_TYPE=()
DISK_HEALTH=() DISK_HEALTH=()
DISK_ID=() DISK_ID=()
DISK_SIZE=()
for DISK in \$(lsblk -x SIZE -d -n -e 7,11 -o NAME); do for DISK in $(lsblk -x SIZE -d -n -e 7,11 -o NAME); do
# Disk name and simple path # Disk name and simple path
DISK_DEVPATH+=("/dev/\$DISK") DISK_DEVPATH+=("/dev/$DISK")
DISK_NAME+=("\$DISK") DISK_NAME+=("$DISK")
# Disk type # Disk type
HDD=\$(cat /sys/block/\$DISK/queue/rotational) ROTATIONAL=$(cat "/sys/block/$DISK/queue/rotational")
TRANSPORT_PROTOCOL=\$(lsblk -x SIZE -d -n -e 7,11 -o TRAN /dev/\$DISK) TRANSPORT=$(lsblk -d -n -o TRAN "/dev/$DISK" 2>/dev/null || echo "sata")
if [[ "\$DISK" == "nvme*" ]]; then DISK_TYPE+=("NVMe"); if [[ "$DISK" == nvme* ]]; then DISK_TYPE+=("NVMe");
elif [[ "\$HDD" -eq 1 ]]; then DISK_TYPE+=("HDD"); elif [[ "$ROTATIONAL" -eq 1 ]]; then DISK_TYPE+=("HDD");
elif [[ "\$TRANSPORT_PROTOCOL" == "usb" ]]; then DISK_TYPE+=("USB"); elif [[ "$TRANSPORT" == "usb" ]]; then DISK_TYPE+=("USB");
elif [[ "\$HDD" -eq 0 ]]; then DISK_TYPE+=("SSD"); elif [[ "$ROTATIONAL" -eq 0 ]]; then DISK_TYPE+=("SSD");
else DISK_TYPE+=("Other") else DISK_TYPE+=("Other")
fi fi
# Disk health # Disk health
if [[ \$(echo "${LIVE_TARGET_PASSWD}" | sudo -S smartctl -H /dev/\$DISK 2>/dev/null | grep 'self-assessment' | awk '{print \$6}') == "PASSED" ]]; then if [[ $(echo "$PASS" | sudo -S smartctl -H "/dev/$DISK" 2>/dev/null | grep 'result:' | awk '{print $NF}') == "PASSED" ]]; then
DISK_HEALTH+=("PASSED") DISK_HEALTH+=("PASSED")
else else
DISK_HEALTH+=("N/A") DISK_HEALTH+=("N/A")
fi fi
# Disk ID # Disk ID
DISK_ID+=("\$(ls -l /dev/disk/by-id | grep -m1 "../../\$DISK" | awk '{print "/dev/disk/by-id/" \$9}')") DISK_ID+=("$(ls -l /dev/disk/by-id 2>/dev/null | grep -m1 "../../$DISK" | awk '{print "/dev/disk/by-id/" $9}')")
DISK_SIZE+=("\$(lsblk -x SIZE -d -n -e 7,11 -o SIZE /dev/\$DISK)") DISK_SIZE+=("$(lsblk -d -n -o SIZE "/dev/$DISK")")
done done
disk_args=() # Prepare disk flat array for jq positional arguments
for i in "\${!DISK_NAME[@]}"; do DISK_ARGS=()
disk_args+=("\${DISK_NAME[\$i]}" "\${DISK_DEVPATH[\$i]}" "\${DISK_TYPE[\$i]}" "\${DISK_HEALTH[\$i]}" "\${DISK_ID[\$i]}" "\${DISK_SIZE[\$i]}") for i in "${!DISK_NAME[@]}"; do
DISK_ARGS+=("${DISK_NAME[$i]}" "${DISK_DEVPATH[$i]}" "${DISK_TYPE[$i]}" "${DISK_HEALTH[$i]}" "${DISK_ID[$i]}" "${DISK_SIZE[$i]}")
done done
nix-shell -p jq --run "jq -n \\ # Export scalars to environment so JQ can access them cleanly via 'env'
--argjson graphics_enabled \"\$TARGET_GRAPHICS\" \\ export TARGET_GRAPHICS TARGET_GRAPHICS_RENDERER TARGET_USB_CORAL TARGET_PCIE_CORAL TARGET_TPM TARGET_TPM_VERSION TARGET_ZIGBEE_DEVICE TARGET_INTERFACE
--argjson graphics_brands \"\$(nix-shell -p jq --run \"jq -n '\\\$ARGS.positional' --args \\\"\${TARGET_GRAPHICS_BRAND[@]}\\\"\" jq)\" \\ export TARGET_GRAPHICS_BRAND_STR="${TARGET_GRAPHICS_BRAND[*]}"
--argjson graphics_renderer \"\$TARGET_GRAPHICS_RENDERER\" \\
--argjson tpu_usb \"\$TARGET_USB_CORAL\" \\ # Generate JSON using a clean heredoc for the filter to avoid backslash escaping
--argjson tpu_pcie \"\$TARGET_PCIE_CORAL\" \\ nix-shell -p jq --run "jq -n -f /dev/stdin --args \"\${DISK_ARGS[@]}\"" << 'JQ_FILTER' > "$TMPFILE"
--argjson tpm_enabled \"\$TARGET_TPM\" \\ {
--arg tpm_version \"\$TARGET_TPM_VERSION\" \\ graphics: {
--arg zigbee_device \"\$TARGET_ZIGBEE_DEVICE\" \\ enabled: (env.TARGET_GRAPHICS == "true"),
--arg interface \"\$TARGET_INTERFACE\" \\ brands: (env.TARGET_GRAPHICS_BRAND_STR | split(" ") | map(select(length > 0))),
--argjson disks \"\$(nix-shell -p jq --run \"jq -n '[range(\\\$ARGS.positional | length / 6) as \\\$i | {name: \\\$ARGS.positional[\\\$i*6], path: \\\$ARGS.positional[\\\$i*6+1], type: \\\$ARGS.positional[\\\$i*6+2], health: \\\$ARGS.positional[\\\$i*6+3], id: \\\$ARGS.positional[\\\$i*6+4], size: \\\$ARGS.positional[\\\$i*6+5]}]' --args \\\"\${disk_args[@]}\\\"\" jq)\" \\ renderer: (env.TARGET_GRAPHICS_RENDERER == "true")
'{ },
graphics: { enabled: \$graphics_enabled, brands: \$graphics_brands, renderer: \$graphics_renderer }, tpu: {
tpu: { usb: \$tpu_usb, pcie: \$tpu_pcie }, usb: (env.TARGET_USB_CORAL == "true"),
tpm: { enabled: \$tpm_enabled, version: \$tpm_version }, pcie: (env.TARGET_PCIE_CORAL == "true")
zigbee: { device: \$zigbee_device }, },
network: { interface: \$interface }, tpm: {
disks: \$disks enabled: (env.TARGET_TPM == "true"),
}'" > "${TMPFILE}" version: (env.TARGET_TPM_VERSION | tonumber? // .)
},
zigbee: {
device: env.TARGET_ZIGBEE_DEVICE
},
network: {
interface: env.TARGET_INTERFACE
},
disks: [
$ARGS.positional | range(0; length; 6) as $i | {
name: .[$i],
path: .[$i+1],
type: .[$i+2],
health: .[$i+3],
id: .[$i+4],
size: .[$i+5]
}
]
}
JQ_FILTER
SSHEND SSHEND
### Get hardware information <-- ### Get hardware information <--