| 1 | #!/bin/bash |
|---|
| 2 | NAMES=$1 |
|---|
| 3 | shift |
|---|
| 4 | |
|---|
| 5 | |
|---|
| 6 | |
|---|
| 7 | for A in $*; do |
|---|
| 8 | if [ $A == "rebuild" ]; then |
|---|
| 9 | BUILDCHECK=1 |
|---|
| 10 | elif [ $A == "reboot" ] ; then |
|---|
| 11 | REBOOT=1 |
|---|
| 12 | else |
|---|
| 13 | TARGETS="$TARGETS $A" |
|---|
| 14 | fi |
|---|
| 15 | done |
|---|
| 16 | |
|---|
| 17 | if ! [ "$NAMES" ]; then |
|---|
| 18 | echo "Usage: ./remoteinstall '<pkgname pkgname ...>' <root@targethost1> <root@targethost2...> [rebuild] [reboot]" |
|---|
| 19 | echo "If rebuild is specified, the packages will be rebuild-checked." |
|---|
| 20 | echo "If reboot is specified, the box will be rebooted after installing. usefull for kernels" |
|---|
| 21 | echo |
|---|
| 22 | echo "To specify ssh/scp options such as a different port:" |
|---|
| 23 | echo 'OPTS="-o port=10022" ./remoteinstall <pkgname> <root@targethost>' |
|---|
| 24 | echo |
|---|
| 25 | echo "Specify multiple targets this way in an easy way:" |
|---|
| 26 | echo "./remoteinstall packagename 192.168.0.{123,5,21,43}" |
|---|
| 27 | exit 1 |
|---|
| 28 | fi |
|---|
| 29 | |
|---|
| 30 | for TARGET in $TARGETS; do |
|---|
| 31 | ./sshkeyfix $TARGET |
|---|
| 32 | done |
|---|
| 33 | |
|---|
| 34 | for NAME in $NAMES; do |
|---|
| 35 | |
|---|
| 36 | if [ "$BUILDCHECK" ]; then |
|---|
| 37 | echo "* Build check:" |
|---|
| 38 | ./rebuildcheck $NAME '|' $* || exit 1 |
|---|
| 39 | fi |
|---|
| 40 | |
|---|
| 41 | echo -n "* Package $NAME zoeken:" |
|---|
| 42 | PKG=`./findpkg "$NAME"` || exit 1 |
|---|
| 43 | BASE=`basename "$PKG"` || exit 1 |
|---|
| 44 | echo $PKG; |
|---|
| 45 | |
|---|
| 46 | export OPTS |
|---|
| 47 | echo "* install:" |
|---|
| 48 | |
|---|
| 49 | for TARGET in $TARGETS; do |
|---|
| 50 | ( |
|---|
| 51 | echo "Uploading and installing" |
|---|
| 52 | if scp $OPTS $PKG $TARGET:/tmp/$BASE && |
|---|
| 53 | ssh $OPTS $TARGET "cd / && syn3-update /tmp/$BASE && rm /tmp/$BASE"; then |
|---|
| 54 | echo "Install on $TARGET OK" |
|---|
| 55 | else |
|---|
| 56 | echo "######################## INSTALL ON $TARGET FAILED! ######## " |
|---|
| 57 | fi |
|---|
| 58 | ) | sed -u "s/^/$TARGET: /" & |
|---|
| 59 | done |
|---|
| 60 | |
|---|
| 61 | wait |
|---|
| 62 | done |
|---|
| 63 | |
|---|
| 64 | #run postinstallers |
|---|
| 65 | for TARGET in $TARGETS; do |
|---|
| 66 | ( |
|---|
| 67 | if ssh $OPTS $TARGET "cd /; postinst.sh"; then |
|---|
| 68 | echo "Install on $TARGET OK" |
|---|
| 69 | if [ "$REBOOT" ]; then |
|---|
| 70 | echo "Rebooting box!" |
|---|
| 71 | ssh $OPTS $TARGET "reboot" |
|---|
| 72 | fi |
|---|
| 73 | else |
|---|
| 74 | echo "######################## INSTALL ON $TARGET FAILED! ######## " |
|---|
| 75 | fi |
|---|
| 76 | ) | sed -u "s/^/$TARGET: /" & |
|---|
| 77 | done |
|---|
| 78 | |
|---|
| 79 | wait |
|---|
| 80 | |
|---|
| 81 | |
|---|
| 82 | echo "All installs done" |
|---|