aboutsummaryrefslogtreecommitdiff
path: root/handlers/sys
blob: 9b836a7efce3ce43191c51f5e6dba05f6dfe6c80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#
# this handler will save various reports of vital system information.
# by default, all the reports are enabled and are saved in /var/backups.
#
# (1) a list of all the packages installed and removed.
#     this file can be used to restore the state of installed packages
#     by running "dpkg --set-selections < dpkg-selections.txt
# 
# (2) the partition table of all disks. 
#     this partition table can be used to format another disk of
#     the same size. this can be handy if using software raid and 
#     you have a disk go bad. just replace the disk and partition it
#     by running "sfdisk /dev/sdb < partitions.sdb.txt"
#     (MAKE SURE YOU PARTITION THE CORRECT DISK!!!)
#
# (3) hardware information. 
#     write to a text file the important things which hwinfo can gleen.
#

getconf packages yes
getconf packagesfile /var/backups/dpkg-selections.txt

getconf partitions yes
getconf partitionsfile /var/backups/partitions.__star__.txt

getconf hardware yes
getconf hardwarefile /var/backups/hardware.txt

# See if vservers are configured
if [ "$vservers" = "yes" ]
then
	if [ ! -d $VROOTDIR ]
	then
		fatal "vservers enabled, but $VROOTDIR does not exist!"
	else
		info "vserver method enabled"
		usevserver=1
	fi
fi

if [ "$packages" == "yes" ]; then
	if [ $usevserver ]
	then
		for vserver in `ls $VROOTDIR |grep -v lost+found`
		do
			running=`vserver-info $vserver RUNNING`
			if [ $running = 1]; then
			    if [ ! -x "`$VSERVER $vserver exec which dpkg`" ]; then
				warning "can't find dpkg in vserver $vserver, skipping installed packages report."
				nodpkg="$nodpkg $vserver"
			    fi
			else
			    warning "vserver $vserver is not running, skipping installed packages report."
			    nodpkg="$nodpkg $vserver"
			fi

		done
	else
		if [ ! -x "`which dpkg`" ]; then
			warning "can't find dpkg, skipping installed packages report."
			packages="no"
		fi
	fi
fi

if [ "$partitions" == "yes" ]; then
	if [ ! -x "`which sfdisk`" ]; then
		warning "can't find sfdisk, skipping partition report."
		partitions="no"
	fi
	if [ ! -x "`which hwinfo`" ]; then
		warning "can't find hwinfo, skipping partition report."
		partitions="no"
	fi
fi

if [ "$hardware" == "yes" ]; then
	if [ ! -x "`which hwinfo`" ]; then
		warning "can't find hwinfo, skipping hardware report."
		hardware="no"
	fi
fi

## PACKAGES ##############################

#
# here we grab a list of the packages installed and removed.
#

if [ $usevserver ]
then
	for vserver in `ls $VROOTDIR | grep -v $nodpkg | grep -v lost+found`
	do
		debug "$VSERVER $vserver exec dpkg --get-selections > $VROOTDIR/$vserver$packagesfile"
		$VSERVER $vserver exec dpkg --get-selections > $VROOTDIR/$vserver$packagesfile
	done
fi

# We want to perform this on the host as well
if [ "$packages" == "yes" ]; then
	debug "dpkg --get-selections > $packagesfile"
	dpkg --get-selections > $packagesfile
fi


## PARTITIONS #############################

# here we use sfdisk to dump a listing of all the partitions. 
# these files can be used to directly partition a disk of the same size.

if [ "$partitions" == "yes" ]; then
	devices=`hwinfo --disk | grep "Device File" | cut -d\  -f5`
	for dev in $devices; do
		[ -b $dev ] || continue
		label=${dev#/dev/}
		label=${label//\//-}
		outputfile=${partitionsfile//__star__/$label}
		debug "sfdisk -d $dev > $outputfile"
		sfdisk -d $dev > $outputfile
	done
fi

## HARDWARE #############################

#
# here we use hwinfo to dump a table listing all the
# information we can find on the hardware of this machine
# 

if [ "$hardware" == "yes" ]; then
	if [ -f $hardwarefile ]; then
		rm $hardwarefile
	fi
	touch $hardwarefile
	echo -e "\n\n====================== summary ======================\n" >>  $hardwarefile
	debug "hwinfo --short --cpu --network --disk --pci  >> $hardwarefile"
	hwinfo --short --cpu --network --disk --pci  >> $hardwarefile
	for flag in cpu network disk bios pci; do
		echo -e "\n\n====================== $flag ======================\n" >>  $hardwarefile
		hwinfo --$flag >> $hardwarefile
	done
fi