--- /dev/null
+grml-hwinfo for Debian
+----------------------
+
+Notice that dependencies are minimal so it's possible to use
+grml-hwinfo also with a very minimalistic setup. Just install all
+suggests/recommends to get a full featured grml-hwinfo.
+
+ -- Michael Prokop <mika@grml.org>, Thu, 28 Jul 2005 08:50:04 +0200
--- /dev/null
+grml-hwinfo (0.3-1) unstable; urgency=low
+
+ * Fix: append output of for-loop to files (avoids possible
+ overwriting of files).
+
+ -- Michael Prokop <mika@grml.org> Thu, 10 Aug 2006 00:17:59 +0200
+
+grml-hwinfo (0.2-3) unstable; urgency=low
+
+ * Send errors from sfdisk and fdisk to an error file as
+ unpartitioned disks report errors.
+ * It's linux-image-... and not kernel-image... anymore.
+
+ -- Michael Prokop <mika@grml.org> Thu, 6 Apr 2006 16:04:51 +0200
+
+grml-hwinfo (0.2-2) unstable; urgency=low
+
+ * Check for existence of /proc/ide/ide?/hd?/geometry before
+ grepping.
+
+ -- Michael Prokop <mika@grml.org> Tue, 4 Apr 2006 23:41:04 +0200
+
+grml-hwinfo (0.2-1) unstable; urgency=low
+
+ * Fixed the "not running as root" problem.
+ * Send error/warning output of sysdump to sysdump.error.
+ * Changed pcmcia-cs in Suggested: to pcmcia-utils.
+
+ -- Michael Prokop <mika@grml.org> Mon, 3 Apr 2006 22:23:31 +0200
+
+grml-hwinfo (0.1-1) unstable; urgency=low
+
+ * Initial release.
+
+ -- Michael Prokop <mika@grml.org> Thu, 28 Jul 2005 08:50:04 +0200
+
--- /dev/null
+Source: grml-hwinfo
+Section: grml
+Priority: optional
+Maintainer: Michael Prokop <mika@grml.org>
+Build-Depends: debhelper (>= 4.0.0)
+Standards-Version: 3.6.2
+
+Package: grml-hwinfo
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, sysfsutils
+Suggests: hwinfo, usbutils, pcmcia-utils, net-tools, iproute, powermgmt-base, acpi, xviddetect, xbase-clients, xresprobe, dmidecode, hdparm, parted-bf, smartmontools,
+Conflicts: grml-scripts (<= 0.4-15)
+Description: collect hardware information
+ This tool collects information regarding hardware. It can be
+ run as normal user to collect some basic information or with
+ root permissions to collect as much information as possible. A
+ file named info.tar.bz2 will be created in the current directory
+ where all information is collected.
--- /dev/null
+This package was debianized by Michael Prokop <mika@grml.org> on
+Thu, 28 Jul 2005 08:50:04 +0200.
+
+It was downloaded from http://grml.org/
+
+Copyright Holder: Michael Prokop <mika@grml.org>
+
+License:
+
+ This software is copyright (c) 2004-2005 by Michael Prokop.
+
+ This package 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; version 2 dated June, 1991.
+
+ This package 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 package; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA.
+
+On Debian GNU/Linux systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
--- /dev/null
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+build: build-stamp
+
+build-stamp:
+ dh_testdir
+
+ touch build-stamp
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ # Add here commands to install the package into debian/grml-hwinfo.
+ install -m 755 grml-hwinfo $(CURDIR)/debian/grml-hwinfo/usr/bin/
+ install -m 755 sysdump $(CURDIR)/debian/grml-hwinfo/usr/bin/
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+ dh_installchangelogs
+ dh_installdocs
+ dh_installman grml-hwinfo.1
+ dh_link
+ dh_strip
+ dh_compress
+ dh_fixperms
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install
--- /dev/null
+#!/bin/sh
+# Filename: grml-hwinfo
+# Purpose: get hardware information
+# Authors: grml-team (grml.org), (c) Michael Prokop <mika@grml.org>
+# Bug-Reports: see http://grml.org/bugs/
+# License: This file is licensed under the GPL v2.
+# Latest change: Don Aug 10 00:17:56 CEST 2006 [mika]
+################################################################################
+# Notice: Some ideas have been taken from
+# http://club.black.co.at/david/hwdb/infodump
+# by David Schmitt <david@schmitt.edv-bus.at>
+################################################################################
+
+# variables
+UNAME=$(uname -r)
+PN=$(basename $0)
+VERSION='0.2'
+if [[ -z "$INFOFILE" ]]; then
+ INFOFILE='info.tar.bz2'
+fi
+
+# echo a list of all disks and their size
+# taken from http://cvs.debian.org/fai/lib/disk-info
+function diskandsize() {
+ local isdisk major minor blocks device suffix
+ while read major minor blocks device suffix; do
+ isdisk=1
+ # skip ide cdrom
+ [ -f /proc/ide/$device/media ] && grep -q cdrom /proc/ide/$device/media && isdisk=0
+ [ $isdisk -eq 1 ] && echo "$device $blocks"
+ done
+}
+
+function list_disks() {
+# print only every second entry; used by disk_info
+i=0
+for ent in $@; do
+ if [ $i -eq 0 ]; then
+ echo $ent
+ i=1
+ else
+ i=0
+ fi
+done
+}
+
+function disk_info() {
+ # the variable holds a space separated list of devices and their block size
+ device_size=`grep -E ' cciss/c.d.$| ida/c.d.$| rd/c.d.$| hd.$| sd.$|/disc$' /proc/partitions | diskandsize`
+# grep -E ' cciss/c.d.\b| ida/c.d.\b| rd/c.d.\b| hd.\b| sd.\b|/disc\b' /proc/partitions | diskandsize
+
+ # a list of all local disks, without size
+ disklist=`list_disks $device_size`
+}
+
+echo "Running grml-hwinfo ${VERSION} - collecting hardware information."
+echo "Please send feedback, bugreports, feature requests to Michael Prokop <mika@grml.org>."
+echo ""
+
+mkdir info || exit -1
+(
+ cd info
+
+ echo "Generating hardware information report using file $INFOFILE."
+ echo "This might take a few seconds/minutes. Please be patient..."
+
+# some sysinfo
+ date > date
+ if [ -r /etc/grml_version ] ; then
+ cat /etc/grml_version > grml_version
+ else
+ echo "This does not seem to be a grml system. Continuing anyway..."
+ fi
+ cat /etc/debian_version > debian_version
+ uname -a > uname
+
+# disks / devices
+ [ -f /proc/scsi/scsi ] && cat /proc/scsi/scsi > scsi
+ (lspci; lspci -n) | sort > lspci
+ [ -r /proc/bus/pnp ] && lspnp > lspnp
+ [ -r /proc/bus/usb ] && lsusb > lsusb
+ cat /proc/partitions > partitions
+ [ -r /proc/ide/ide?/hd?/geometry ] && grep . /proc/ide/ide?/hd?/geometry /dev/null | sed -e 's#/proc/ide/ide./##' > proc_ide
+ df -h > df 2>/dev/null
+ for i in free lsmod mount lsdev ; do
+ $i > $i
+ done
+
+# proc stuff
+ for i in cpuinfo interrupts cmdline devices dma fb iomem ioports \
+ mdstat meminfo modules mtrr pci version ; do
+ [ -r /proc/$i ] && cat /proc/$i > proc_$i
+ done
+ [[ -x `which sysdump` ]] && sysdump > sysdump 2>sysdump.error
+# for sysnet in `find /proc/sys/net/*/ -type f | grep -v flush`; do cat $sysnet >> sysnet ; done
+
+# log
+ dmesg > dmesg.cur
+
+# hwinfo
+ [[ -x `which discover` ]] && discover -v --type-summary --enable-bus all > discover 2> discover.2
+ [[ -x `which hwinfo` ]] && hwinfo log=hwinfo
+
+# net stuff
+ [[ -x `which ifconfig` ]] && ifconfig -v -a > ifconfig
+ [[ -x `which ip` ]] && ip route show > ip_route
+ [[ -x `which ip` ]] && ip link show > ip_link
+ [[ -x `which route` ]] && route -n > route
+
+# software
+ dpkg --get-selections > dpkg_get_selections
+ COLUMNS=300 dpkg --list > dpkg_list
+ COLUMNS=1000 dpkg -l linux-image-$UNAME | grep linux-image-$UNAME | tr -s ' ' > running_kernel
+
+# powermanagement
+ [[ -x `which laptop-detect` ]] && laptop-detect 1>/dev/null 2>/dev/null && echo "0" > laptop_detected
+ [[ -x `which acpi_available` ]] && acpi_available && cat /proc/acpi/info > acpi_info
+ [[ -x `which acpi` ]] && acpi > acpi 2> acpi.error && acpi -v > acpi.version
+ [ -r /proc/apm/ ] && apm > acpi
+
+# kernel stuff
+ if [ -r /proc/config.gz ] ; then
+ zcat /proc/config.gz > kernelconfig
+ else
+ [ -r /boot/config-$UNAME ] && cat /boot/config-$UNAME > kernelconfig
+ fi
+
+# X stuff
+ if [ -n "${DISPLAY}" ] ; then
+ [[ -x `which xviddetect` ]] && xviddetect > xviddetect
+ [[ -x `which xvidtune` ]] && xvidtune -show > xdivtune
+ [[ -x `which xrandr` ]] && xrandr > xrandr
+ [[ -x `which xdpyinfo` ]] && xdpyinfo > xdpyinfo
+ X -version 1> x_version 2>&1
+ fi
+
+ for i in Xorg.0.log Xorg.7.log Xorg.8.log XFree86.0.log XFree86.7.log XFree86.8.log dmesg ; do
+ cp /var/log/$i log_$i 2>/dev/null
+ done
+
+ cp /etc/X11/xorg.conf xorg.conf 2>/dev/null
+ cp /etc/modules modules 2>/dev/null
+ cp /etc/X11/XF86Config-4 XF86Config-4 2>/dev/null
+
+# not available:
+# sysinfo -class device -level all
+
+# as root:
+if [ $UID != 0 ] ; then
+ echo "not running as root" > root
+ NOTROOT="yes"
+else
+ echo "running as root" > root
+ disk_info
+ [[ -x `which sfdisk` ]] && sfdisk -d > sfdisk 2>sfdisk.error
+ [[ -x `which ddcprobe` ]] && ddcprobe > ddcprobe
+ [[ -x `which dmidecode` ]] && dmidecode > dmidecode
+ for disk in $disklist; do
+ [[ -x `which smartctl` ]] && smartctl -i /dev/$disk >> smartctl
+ [[ -x `which hdparm` ]] && hdparm -iv /dev/$disk >> hdparm
+ [[ -x `which fdisk` ]] && fdisk -lu /dev/$disk >> fdisk 2>>fdisk.error
+ [[ -x `which parted` ]] && parted -s /dev/$disk print >> parted
+ LC_ALL=C file -s /dev/$disk?* | grep -v ": empty" >> file_disk
+ done
+fi
+)
+
+tar jcf $INFOFILE info/ && rm -Rf info/
+
+echo ""
+[ -n "$NOTROOT" ] && echo "Notice: you are running $PN without root permissions! Not all information could be collected!"
+echo ""
+[ -r "$INFOFILE" ] && echo "$INFOFILE ($(ls -ahl $INFOFILE | awk '{print $5}')) has been generated."
+echo ""
+
+#echo ""
+#echo 'Thanks for collecting this information!'
+#echo ""
+#echo "Please fill out this form and send it together with $INFOFILE ($(ls -ahl $INFOFILE | awk '{print $5}')) to"
+#echo " Michael Prokop <mika@grml.org>"
+#echo ""
+#
+#cat <<EOF
+#Class: <Laptop/Desktop/Server/built-to-order/self-assembled>
+#Manufacturer:
+#Model:
+#Distributor: <Where did you buy it>
+#Bought in: <Country and Date>
+#
+#Components/Options: <If the PC was built-to-order or self assembled, please
+# list the options or components you used>
+#
+#Additional Notes:
+#
+#EOF
+
+## END OF FILE##################################################################
--- /dev/null
+.\" Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH GRML-HWINFO 1 "Juli 28, 2005"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+grml-hwinfo \- collect hardware information
+.SH SYNOPSIS
+.B grml-hwinfo
+.SH DESCRIPTION
+This manual page documents briefly the
+.B grml-hwinfo
+command.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
+.\" respectively.
+\fBgrml-hwinfo\fP is a program that collects information regarding hardware.
+.SH OPTIONS
+This program does not support any options. Either run it as normal user to collect some basic
+information or run it with root permissions to collect as much information as possible. Temporary files
+will be written to a directory namend info in current directory, a file namend info.tar.bz2 will be
+generated. Set environment variable INFOFILE if you want to use different name for infofile, e.g. run
+grml-hwinfo via 'INFOFILE=foobar.tar.bz2 grml-hwinfo' to generate the report in the file foobar.tar.bz2.
+.SH AUTHOR
+grml-hwinfo was written by Michael Prokop <mika@grml.org>.
+.PP
+This manual page was written by Michael Prokop <mika@grml.org>,
+for the Debian project (but may be used by others).
--- /dev/null
+#!/usr/bin/perl
+#
+# sysdump - dump /sys to a textformat
+#
+# Copyright 2005 David Schmitt <david@schmitt.edv-bus.at>
+#
+# 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+# Version 0.1: Initial prototype
+#
+
+use warnings;
+use strict;
+
+$| = 1;
+
+#my $basedir = `systool -m`;
+#chomp $basedir;
+my $basedir = '/sys';
+
+sub dump_dir($$)
+{
+ my $level = shift;
+ my $dir = shift;
+
+ opendir(DIR, $dir) || die "can't opendir $dir: $!";
+ my @entries = grep { !/^\.\.?/ } readdir(DIR);
+ closedir(DIR);
+
+ #print " "x$level;
+ print $dir, ":\n";
+
+ foreach my $entry (sort @entries)
+ {
+ dump_entry($level + 1, "$dir/$entry");
+ }
+}
+
+sub dump_link($$)
+{
+ my $level = shift;
+ my $link = shift;
+
+ #print " "x$level;
+ print $link, " -> ", readlink($link), "\n";
+}
+
+sub dump_value($$)
+{
+ my $level = shift;
+ my $file = shift;
+
+ open (FILE, "<$file") || die "can't open $file: $!";
+
+ my $value;
+ { local $/;
+ $value = <FILE>;
+ $value = defined($value)?$value:"undef";
+ }
+ chomp $value;
+ close FILE;
+
+ #print " "x$level;
+ print $file, " = '", $value, "'\n";
+}
+
+sub dump_entry($$)
+{
+ my $level = shift;
+ my $file = shift;
+
+ return dump_link($level, $file) if -l $file;
+ return dump_dir($level, $file) if -d $file;
+ return dump_value($level, $file) if -r $file;
+}
+
+dump_dir(0, $basedir);
+