123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- #!/bin/bash
- # The Qubes OS Project, http://www.qubes-os.org
- #
- # Copyright (C) 2013 Laszlo Zrubecz <mail@zrubi.hu>
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU General Public License
- # as published by the Free Software Foundation; either version 2
- # 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 General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; if not, write to the Free Software
- # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- VERSION=2.2
- COPY2VM="dom0"
- SUPPORT_FILES=0
- while [ $# -gt 0 ]; do
- case "$1" in
- -s |--support)
- SUPPORT_FILES=1
- ;;
- -* | -h | --help)
- echo -e "qubes-hcl-report v$VERSION"
- echo ""
- echo "This tool is used to gather basic hardware information for the Qubes HCL (Hardware Compatibility List)"
- echo "and copy the results to the given AppVM for the easy contribution."
- echo ""
- echo -e "Usage:\tqubes-hcl-report [OPTIONS] [<AppVM Name>]"
- echo -e "Options are:"
- echo -e "\t-h, --help\tDisplay this help text and exit."
- echo -e "\t-s, --support\tGenerate more detailed HCL Support Files"
- echo -e "\t\t\tWARNING: The HCL Support Files may contain numerous hardware details, including serial numbers."
- echo -e "\t\t\tIf, for privacy or security reasons, you do not wish to make this information public, "
- echo -e "\t\t\tplease do not send the .cpio.gz file to the public mailing list."
- echo ""
- echo -e "\t<AppVM Name>\tCopy the results to the given AppVM. The default is to keep it in dom0"
- echo ""
- exit
- ;;
- *)
- /usr/bin/qvm-check -q $1
- if [[ $? -eq 0 ]]
- then
- COPY2VM="$1"
- else
- echo -e "ERROR:\tAppVM with the name '$1' does not exist in the system!"
- exit 1
- fi
- ;;
- esac
- shift
- done
- DATE=`date +%Y%m%d-%H%M%S`
- TEMP_DIR=`mktemp --tmpdir -d HCL.XXXXXXXXXX`
- cat /etc/qubes-release > $TEMP_DIR/qubes-release
- cat /proc/cpuinfo > $TEMP_DIR/cpuinfo
- lspci -nnvk > $TEMP_DIR/lspci
- cat /proc/scsi/scsi > $TEMP_DIR/scsi
- sudo dmidecode > $TEMP_DIR/dmidecode
- xl info > $TEMP_DIR/xl-info
- xl dmesg > $TEMP_DIR/xl-dmesg
- BRAND=`cat $TEMP_DIR/dmidecode |grep -A9 "System Information" |grep "Manufacturer:" |cut -d ' ' -f2- |tr -s '[:blank:]' _`
- PRODUCT=`cat $TEMP_DIR/dmidecode |grep -A9 "System Information" |grep "Product Name:" |cut -d ' ' -f3- |tr -s '[:blank:]' _`
- if [[ $BRAND =~ "O.E.M" ]]
- then
- BRAND=`cat $TEMP_DIR/dmidecode |grep -A9 "Base Board Information" |grep "Manufacturer:" |cut -d ' ' -f2- |tr -s '[:blank:]' _`
- PRODUCT=`cat $TEMP_DIR/dmidecode |grep -A9 "Base Board Information" |grep "Product Name:" |cut -d ' ' -f3- |tr -s '[:blank:]' _`
- fi
- KERNEL=`uname -r |cut -d '.' -f-3`
- CPU=`cat $TEMP_DIR/cpuinfo |grep "model name" |sort -u |cut -d ' ' -f3-`
- CHIPSET=`cat $TEMP_DIR/lspci |grep "00:00.0.*Host bridge"`
- VGA=`cat $TEMP_DIR/lspci |grep "VGA\|Display" | sed -e "s/^/\t\t/"`
- NET=`cat $TEMP_DIR/lspci |lspci |grep "Network\|Ethernet" |sed -e "s/^/\t\t/"`
- SCSI=`cat $TEMP_DIR/scsi |grep Model |cut -d ':' -f3- | sed -e "s/^[[:space:]]*/\t\t/"`
- RAM=`cat $TEMP_DIR/xl-info |grep total_memory |cut -d ':' -f2 |tr -d ' '`
- BIOS=`cat $TEMP_DIR/dmidecode |grep -A9 "BIOS Information" |grep "Version" |cut -d ' ' -f2-`
- XEN_MAJOR=`cat $TEMP_DIR/xl-info |grep xen_major |cut -d: -f2 |tr -d ' '`
- XEN_MINOR=`cat $TEMP_DIR/xl-info |grep xen_minor |cut -d: -f2 |tr -d ' '`
- XEN_EXTRA=`cat $TEMP_DIR/xl-info |grep xen_extra |cut -d: -f2 |tr -d ' '`
- XL_VTX=`cat $TEMP_DIR/xl-info |grep xen_caps | grep hvm`
- XL_VTD=`cat $TEMP_DIR/xl-info |grep virt_caps |grep hvm_directio`
- FILENAME="Qubes-HCL-$BRAND-$PRODUCT-$DATE"
- if [[ $XL_VTX ]]
- then
- VTX="Active"
- HVM="good"
- else
- VTX="Not Active"
- HVM="bad"
- fi
- if [[ $XL_VTD ]]
- then
- VTD="Active"
- IOMMU="good"
- else
- VTD="Not Active"
- IOMMU="bad"
- fi
- cat /etc/qubes-release |tee $HOME/$FILENAME.txt
- echo
- echo -e "Model Name:\t$BRAND $PRODUCT" |tee -a $HOME/$FILENAME.txt
- echo -e "Kernel:\t\t$KERNEL" |tee -a $HOME/$FILENAME.txt
- echo -e "Xen:\t\t$XEN_MAJOR.$XEN_MINOR$XEN_EXTRA\n" |tee -a $HOME/$FILENAME.txt
- echo -e "RAM:\t\t$RAM Mb\n" |tee -a $HOME/$FILENAME.txt
- echo -e "CPU:\t\t$CPU" |tee -a $HOME/$FILENAME.txt
- echo -e "Chipset:\t$CHIPSET" |tee -a $HOME/$FILENAME.txt
- echo -e "VGA:$VGA\n" |tee -a $HOME/$FILENAME.txt
- echo -e "Net:$NET\n" |tee -a $HOME/$FILENAME.txt
- echo -e "SCSI:$SCSI\n" |tee -a $HOME/$FILENAME.txt
- echo -e "BIOS:\t\t$BIOS" |tee -a $HOME/$FILENAME.txt
- echo -e "VT-x:\t\t$VTX" |tee -a $HOME/$FILENAME.txt
- echo -e "VT-d:\t\t$VTD" |tee -a $HOME/$FILENAME.txt
- echo
- echo -e "
- >-->-->-->-->--> HCL Wiki format begins >-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->-->
- <!--
- Insert devices in alphabetical order.
- Change hcl-FIXME to appropriate class (see legend):
- hcl-good, hcl-bad, hcl-partial, hcl-unknown
- Go to https://groups.google.com/forum/#!forum/qubes-users and search
- the message containing the HCL report.
- Then click on "more message options" besides reply button and then on
- link and insert it into FIXLINK.
- -->
- <tr align='center'>
- <td rowspan='1'>
- $BRAND $PRODUCT<br>
- (CPU, Chipset, embedded VGA)
- </td>
- <td rowspan='1'>${BIOS}</td>\t\t\t\t<!-- BIOS version\t\t# reported BIOS version -->
- <td rowspan='1' class='hcl-${HVM}'></td>\t\t\t<!-- HVM\t\t\t# HVM can be created? -->
- <td rowspan='1' class='hcl-${IOMMU}'></td>\t\t\t<!-- IOMMU\t\t\t# PCI-Devices can be assigned to a HVM? -->
- <td rowspan='1' class='hcl-unknown'></td>\t\t<!-- TPM\t\t\t# Anti Evil Made works? -->
- <td rowspan='1'></td>\t\t\t\t\t<!-- spacing (QSL)\t\t# best achievable QSL - (Qubes Security Level) -->
- <td rowspan='1' class='hcl-FIXME'>R2</td>\t\t<!-- Qubes version\t\t# first reported Qubes version -->
- <td rowspan='1' class='hcl-FIXME'>${KERNEL}</td>\t<!-- dom0 kernel\t\t# Boots with this kernel version (refer to exact kernel version). -->
- <td rowspan='1' class='hcl-FIXME'>\n \n </td>\t\t\t\t\t\t\t<!-- Remarks -->
- <td rowspan='1' class='hcl-reportedby'>
- <a class='ext-link' href='FIXLINK'><span class='icon'></span>insert name</a>
- </td>\t\t\t\t\t\t\t<!-- Reported by -->
- </tr>
- <!--
- If you add a report to an existing device increment the rowspan of
- first entry for Device, BIOS, HVM, IOMMU, TPM, spacing(QSL)
- and append the following with the new report data filled in:
- -->
- <tr align='center'>
- <td rowspan='1' class='hcl-FIXME'>R2</td>\t\t<!-- Qubes version\t\t# latest reported Qubes version -->
- <td rowspan='1' class='hcl-FIXME'>${KERNEL}</td>\t<!-- dom0 kernel\t\t# Boots with this kernel version (refer to exact kernel version). -->
- <td rowspan='1' class='hcl-FIXME'>\n \n </td>\t\t\t\t\t\t\t<!-- Remarks -->
- <td rowspan='1' class='hcl-reportedby'>
- <a class='ext-link' href='FIXLINK'><span class='icon'></span>insert name</a>
- </td>\t\t\t\t\t\t\t<!-- Reported by -->
- </tr>
- " >> $HOME/$FILENAME.txt
- if [[ "$SUPPORT_FILES" == 1 ]]
- then
- # cpio
- cd $TEMP_DIR
- find -print0 |cpio --quiet -o -H crc --null |gzip >$HOME/$FILENAME.cpio.gz
- cd
- fi
- # Destination VM check
- if [[ "$COPY2VM" != "dom0" ]]
- then
- # Copy to VM
- qvm-start -q $COPY2VM 2>/dev/null
- if [[ -f "$HOME/$FILENAME.cpio.gz" ]]
- then
- cat $HOME/$FILENAME.cpio.gz | qvm-run -a -q --pass-io $COPY2VM "cat >/home/user/$FILENAME.cpio.gz"
- fi
- if [[ -f "$HOME/$FILENAME.txt" ]]
- then
- cat $HOME/$FILENAME.txt | qvm-run -a -q --pass-io $COPY2VM "cat >/home/user/$FILENAME.txt"
- fi
- fi
- echo -e "Qubes HCL Files are copied to: '$COPY2VM'"
- echo -e "\t$FILENAME.txt\t\t- HCL Info"
- if [[ "$SUPPORT_FILES" == 1 ]]
- then
- echo -e "\t$FILENAME.cpio.gz\t- HCL Support Files"
- fi
- echo
- # cleanup
- if [[ -d $TEMP_DIR ]]
- then
- rm -rf $TEMP_DIR
- fi
|