Browse Source

Initial import

Georgi Chorbadzhiyski 21 years ago
commit
be20d98f32
3 changed files with 320 additions and 0 deletions
  1. 10
    0
      ChangeLog
  2. 49
    0
      config.sh
  3. 261
    0
      slcheck.sh

+ 10
- 0
ChangeLog View File

@@ -0,0 +1,10 @@
1
+#
2
+# $Id: ChangeLog,v 1.1 2003/01/05 08:26:12 gf Exp $
3
+#
4
+
5
+ v1.00 - 05 Jan 2003
6
+   Download package list from slackware mirror
7
+   Generate "smart" upgrade scripts that download packages
8
+   Automatic upgrade mode - this allows easy upgrading of many machines at once
9
+   Manual upgrade mode - just copy upgrade scripts to machines
10
+

+ 49
- 0
config.sh View File

@@ -0,0 +1,49 @@
1
+#!/bin/sh
2
+# SlackCheck configuration file
3
+#
4
+# $Id: config.sh,v 1.1 2003/01/05 08:26:12 gf Exp $
5
+#
6
+
7
+PATH="/bin:/usr/bin:/usr/local/bin"
8
+
9
+# Hosts that will be updated
10
+SLACK_HOSTS="router ns work man host gf pl300 sounder game noname"
11
+
12
+# Where to look for updates
13
+DL_HOST="http://mirrors.unixsol.org/slackware/current/slackware"
14
+#DL_HOST="http://www.slackware.at/data/slackware-current/slackware"
15
+#DL_HOST="http://ftp.planetmirror.com/pub/slackware/slackware-current/slackware"
16
+#DL_HOST="ftp://ftp.slackware.com/pub/slackware/slackware-current/slackware"
17
+
18
+# This program will be used to download files from web
19
+DL_PRG="wget"
20
+DL_PRG_OPTS="-nv"
21
+
22
+# Used for ftp downloads
23
+echo $DL_HOST | grep ^ftp://
24
+if [ $? = 0 ]
25
+then
26
+	DL_PRG="wget"
27
+	DL_PRG_OPTS="-nv --passive"
28
+fi
29
+
30
+# These programs will be used in collection and updating hosts
31
+RSH_LISTS="ssh"
32
+RSH_UPGRADE="ssh -l root"
33
+
34
+# NO NEED TO TOUCH ANYTHING BELLOW THIS LINE :)
35
+DIR_PKG="packages"        # Package lists directory
36
+DIR_UPD="updates"         # Update scripts directory
37
+
38
+FILE_NEWEST="PKG_LAST"    # Latest packages filename
39
+FILE_UNKPACKS="Non_dist-" # Non distro packages per host
40
+FILE_UPDATES="Updates-"   # Update script per host
41
+
42
+REMOTE_DIR="Updates"      # Upgrated packages will be DLed here (on the remote machine)
43
+
44
+if [ "$INC_CONFIG" != "0" ]
45
+then
46
+	echo "Do not run $0 directly. Run ./slcheck.sh instead!"
47
+fi
48
+INC_CONFIG="1"
49
+

+ 261
- 0
slcheck.sh View File

@@ -0,0 +1,261 @@
1
+#!/bin/sh
2
+# SlackCheck
3
+#
4
+# $Id: slcheck.sh,v 1.1 2003/01/05 08:26:12 gf Exp $
5
+#
6
+# Copyright (c) 2002 Georgi Chorbadzhiyski, Sofia, Bulgaria
7
+# All rights reserved.
8
+#
9
+# Redistribution and use of this script, with or without modification, is
10
+# permitted provided that the following conditions are met:
11
+#
12
+# 1. Redistributions of this script must retain the above copyright
13
+#    notice, this list of conditions and the following disclaimer.
14
+#
15
+#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
16
+#  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
17
+#  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
18
+#  EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
19
+#  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20
+#  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21
+#  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22
+#  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23
+#  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
24
+#  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+#
26
+
27
+echo "SlackCheck v1.00"
28
+echo
29
+
30
+cd $(dirname $0)
31
+
32
+INC_CONFIG="0"
33
+. ./config.sh
34
+
35
+if [ "$INC_CONFIG" = "0" ]
36
+then
37
+	echo "Error including ./config.sh"
38
+	exit
39
+fi
40
+
41
+VALID_OPTS="--sync --collect --gen --dist --upgrade"
42
+
43
+# Show usage information
44
+usage() {
45
+	echo "Usage: $(basename $0) [options]"
46
+	echo
47
+	echo " OPTIONS:"
48
+	echo "   --sync      Get newest list of packages"
49
+	echo "   --collect   Collect list of installed packages from hosts"
50
+	echo "   --gen       Generate upgrade scripts"
51
+	echo "   --dist      Copy upgrade scripts to hosts"
52
+	echo "   --upgrade   Upgrade hosts using generated scripts"
53
+	echo
54
+	echo " MAIN CONFIGURATION (to change edit config.sh):"
55
+	echo "    Hosts that will be upgraded:"
56
+	echo "        $SLACK_HOSTS"
57
+	echo
58
+	echo "    Packages are downloaded from:"
59
+	echo "        $DL_HOST"
60
+	echo
61
+	echo " QUICK USAGE:"
62
+	echo "   Run:  $(basename $0) --sync --collect --gen"
63
+	echo "   Edit: ${DIR_UPD}/${FILE_UPDATES}*"
64
+	echo "   Run:  $(basename $0) --dist (for manual upgrade after that)"
65
+	echo "    or"
66
+	echo "   Run:  $(basename $0) --upgrade (for automatic upgrade)"
67
+	echo
68
+	exit 1
69
+}
70
+
71
+# Download newest package list
72
+sync_master_list() {
73
+	echo -n "Getting newest package list. "
74
+	mkdir $DIR_PKG 2>/dev/null
75
+	cd $DIR_PKG
76
+	TMPDIR=".Tmp"
77
+	rm -rf $TMPDIR 2>/dev/null
78
+	mkdir $TMPDIR && cd $TMPDIR
79
+	# The actual download
80
+	${DL_PRG} ${DL_PRG_OPTS} ${DL_HOST}/CHECKSUMS
81
+	# Parse file
82
+	grep .tgz$ CHECKSUMS | cut -d" " -f3 | sed -e 's|.tgz||;s|\./||' > ../${FILE_NEWEST}
83
+	cd ..
84
+	rm -rf $TMPDIR 2>/dev/null
85
+	echo "Done."
86
+}
87
+
88
+# Generate list of packages for every host
89
+collect_package_lists() {
90
+	for HOST in $SLACK_HOSTS
91
+	do
92
+		echo -n "Collection package list from \"$HOST\". "
93
+		# Localhost
94
+		if [ "$HOST" == "$(hostname)" -o "$HOST" == "$(hostname -a)" ]; then
95
+			ls /var/log/packages > ${DIR_PKG}/$HOST
96
+		# Remote host
97
+		else
98
+			${RSH_LISTS} $HOST "ls /var/log/packages" > ${DIR_PKG}/${HOST}.tmp
99
+			mv ${DIR_PKG}/${HOST}.tmp ${DIR_PKG}/${HOST}
100
+		fi
101
+		echo "Done."
102
+	done
103
+}
104
+
105
+# Used by generate_upgrade_scripts()
106
+package_name() {
107
+	name=$(echo $1 | rev | cut -d- -f4- | rev)
108
+	if [ "$name" = "" ]; then
109
+		echo $1
110
+	else
111
+		echo $name
112
+	fi
113
+}
114
+
115
+# Generate upgrade scripts
116
+generate_upgrade_scripts() {
117
+	mkdir ${DIR_UPD} 2>/dev/null
118
+	for i in $SLACK_HOSTS
119
+	do
120
+		# Remove directory
121
+		host=$(echo $i | cut -d/ -f2)
122
+		# Check if package list exist
123
+		if [ -f ${DIR_PKG}/${host} ]
124
+		then
125
+			echo -n "Generating upgrade script for \"$host\". "
126
+			# Cleanup old files
127
+			rm ${DIR_UPD}/${FILE_UNKPACKS}${host}  >/dev/null 2>&1
128
+			rm ${DIR_UPD}/${FILE_UPDATES}${host}   >/dev/null 2>&1
129
+			rm ${DIR_UPD}/${FILE_UPDATES}${host}.* >/dev/null 2>&1
130
+			# For each package
131
+			while read mypack; do
132
+				mypack=$(echo "$mypack" | tr -s ' ' | cut -d" " -f11)
133
+				# Check if package exist in the distro packages
134
+				grep $mypack ${DIR_PKG}/${FILE_NEWEST} >/dev/null 2>&1
135
+				if [ $? != 0 ]
136
+				then
137
+					pkgname=$(package_name $mypack)
138
+					newpkg=$(grep /${pkgname}-[0-9] ${DIR_PKG}/${FILE_NEWEST})
139
+					if [ $? = 0 ]
140
+					then
141
+						newpkg=$(echo $newpkg | cut -f1 -d" ")
142
+						pkgdir=$(dirname $newpkg)
143
+						pkgname=$(basename $newpkg)
144
+						tgz="${pkgname}.tgz"
145
+						tgzpath="${pkgdir}/${pkgname}.tgz"
146
+						echo "\
147
+[ -f ${tgz} ] || ${DL_PRG} ${DL_PRG_OPTS} \${URL}/${tgzpath}" \
148
+							>> ${DIR_UPD}/${FILE_UPDATES}${host}.get
149
+
150
+						echo "\
151
+[ -f ${tgz} ] && upgradepkg ${pkgname} # EXISTING: ${mypack}" \
152
+							>> ${DIR_UPD}/${FILE_UPDATES}${host}.up
153
+					# Add to unknown packages
154
+					else
155
+						echo "$mypack" >> ${DIR_UPD}/${FILE_UNKPACKS}${host}
156
+					fi
157
+				fi
158
+			done < ${DIR_PKG}/$i
159
+			# Add intereter
160
+			if [ -f ${DIR_UPD}/${FILE_UPDATES}${host}.get ]
161
+			then
162
+				(echo '#!/bin/sh'
163
+				 echo
164
+				 echo "which ${DL_PRG} >/dev/null 2>&1"
165
+				 echo "if [ \$? != 0 ]; then"
166
+				 echo "	echo \"Can't find \\\"${DL_PRG}\\\" in \$PATH. Exiting.\""
167
+				 echo "	exit 1"
168
+				 echo "fi"
169
+				 echo
170
+				 echo "URL=\"${DL_HOST}\""
171
+				 echo
172
+				 echo "rm -rf ${REMOTE_DIR} 2>/dev/null"
173
+				 echo "mkdir ${REMOTE_DIR} && cd ${REMOTE_DIR}"
174
+				 echo
175
+				 cat ${DIR_UPD}/${FILE_UPDATES}${host}.get
176
+				 echo
177
+				 cat ${DIR_UPD}/${FILE_UPDATES}${host}.up
178
+				 echo
179
+				 echo "cd .."
180
+				 echo "rm -rf ${REMOTE_DIR} 2>/dev/null"
181
+				 echo
182
+				) > ${DIR_UPD}/${FILE_UPDATES}${host}
183
+			fi
184
+			# Cleanup
185
+			rm ${DIR_UPD}/${FILE_UPDATES}${host}.* >/dev/null 2>&1
186
+			echo "Done."
187
+		fi
188
+	done
189
+}
190
+
191
+# Upgrade remote hosts
192
+upgrade_machines() {
193
+	NOW=$(date +%Y-%m-%d)
194
+	for HOST in $SLACK_HOSTS
195
+	do
196
+		if [ -f ${DIR_UPD}/${FILE_UPDATES}${HOST} ]
197
+		then
198
+			echo "Upgrating \"$HOST\". "
199
+			cat ${DIR_UPD}/${FILE_UPDATES}${HOST} | \
200
+				${RSH_UPGRADE} ${HOST} \
201
+					"cat - > ${FILE_UPDATES}${HOST}_${NOW}; \
202
+					/bin/sh ${FILE_UPDATES}${HOST}_${NOW};"
203
+		fi
204
+	done
205
+}
206
+
207
+# Send upgrade scripts to hosts
208
+distribute_up_scripts() {
209
+	NOW=$(date +%Y-%m-%d)
210
+	for HOST in $SLACK_HOSTS
211
+	do
212
+		if [ -f ${DIR_UPD}/${FILE_UPDATES}${HOST} ]
213
+		then
214
+			echo "Copying upgrade script to \"$HOST\". "
215
+			cat ${DIR_UPD}/${FILE_UPDATES}${HOST} | \
216
+				${RSH_UPGRADE} ${HOST} \
217
+					"cat - > ${FILE_UPDATES}${HOST}_${NOW}"
218
+		fi
219
+	done
220
+}
221
+
222
+# Check validity of command line arguments
223
+[ $# -lt 1 ] && usage
224
+for opt in $@; do
225
+	ok="0"
226
+	for valid in $VALID_OPTS; do
227
+		if [ "$valid" = "$opt" ]; then
228
+			ok="1"
229
+			break
230
+		fi
231
+	done
232
+	[ "$ok" = "0" ] && echo "Unknown parameter: $opt"
233
+	[ "$ok" = "0" ] && usage
234
+done
235
+
236
+# Process command line arguments
237
+while [ "$1" != "" ]; do
238
+	param=$1
239
+	shift
240
+	case "$param" in
241
+		--sync)
242
+			sync_master_list
243
+		;;
244
+		--collect)
245
+			collect_package_lists
246
+		;;
247
+		--gen)
248
+			generate_upgrade_scripts
249
+		;;
250
+		--dist)
251
+			distribute_up_scripts
252
+		;;
253
+		--upgrade)
254
+			upgrade_machines
255
+		;;
256
+		*)
257
+			usage
258
+		;;
259
+	esac
260
+done
261
+

Loading…
Cancel
Save