Skripta sluizi sa preuzimanje kompresovanih arhiva sa ftp sajta i azuriranje sistema. Moze da koristi onima koji azuriraju svoj NetBSD sistem koristici snapshot-ove. U skripti sam u pocetku koristio corpocesse pa zbog toga ksh, lenj sam da to prebacim u Bourne shell skriptu.
#!/bin/ksh
# getsets.ksh v.0.2
# dalibor Dot gudzic At gmail Dot com
# www.bsdserbia.org
# 11/2009
#
DWNLD_DIR="/home/soxxx/netbsd_sets"
FTP_SAJT="http://nyftp.netbsd.org"
FTP_OPCIJE="ftp -o -"
FTP_RELENG="pub/NetBSD-daily"
TAG="netbsd-5"
VERZIJA="$(awk -F\' '/BUILDID/ { print $2 }' /etc/release)"
set -A SETOVI "base.tgz comp.tgz etc.tgz kern-GENERIC.tgz man.tgz misc.tgz tests.tgz \
text.tgz xbase.tgz xcomp.tgz xetc.tgz xfont.tgz xserver.tgz"
f_koriscenje() {
cat <<EOF
Pokretanje skripte: ${0##*/} <getsets | installkernel | installsets | etcupdate | help>
getsets - Preuzimanje setova sa ftp servera
installkernel - Ekstraktovanje i instaliranje GENERIC kernela
installsets - Instaliranje setova
etcupdate - Azuriranje, spajanje konfiguracionih fajlova u /etc direktorijumu
help - Prikaz pravilnog pokretanja skripte
Osim u slucaju preuzimanja setova, za pravilno izvrsenje skripte potrebno je skriptu pokrenuti sa:
sudo ${0##*/} parametar
EOF
}
f_provera_greske() {
greska=$?
print ""
test "greska" -eq "$1" && print "$2" && exit $1
}
if [[ $# -ne 1 ]]
then
print "Greska: potreban je (samo) jedan parametar za izvrsenje skripte jebi ga."
f_koriscenje
exit 1
fi
case $1 in
getsets)
NOVA_VERZIJA=$(ftp -o - $FTP_SAJT/$FTP_RELENG/$TAG/ | \
awk '{ if(match($0, "[0-9]+Z")) {
print substr($0, RSTART, RLENGTH)
}
}' | sort -r | head -1)
if [[ $NOVA_VERZIJA == $VERZIJA ]]; then
print "Yo, nema novih setova za azuriranje, prekidam skriptu."
exit 0
else
VERZIJA=$NOVA_VERZIJA
print "Nova verzija je: $VERZIJA"
FTP_PUTANJA="$FTP_RELENG/$TAG/$VERZIJA/i386/binary/sets"
print -n "Proveravamo dali postoji direktorijum 'i386'..."
ftp -o - $FTP_SAJT/$FTP_RELENG/$TAG/$VERZIJA | \
awk '/i386/ {tu_je=1}
END{ if(tu_je)
{
print " prisutan na casu, nastavljamo."
}else{
print " odsutan. Neopravdani izostanak."
exit 33;
}
}'
f_provera_greske 33 "Prekidam skriptu."
print "Proveravamo unose..."
ftp -o - $FTP_SAJT/$FTP_PUTANJA/ | \
awk -v S="$SETOVI" 'BEGIN {
split(S " SHA512 MD5", niz_setova)
}
{
for(i in niz_setova) {
if($0 ~ niz_setova[i]) {
nadjeno_niz[niz_setova[i]]++
}
}
}
END {
for(j in niz_setova) {
if(niz_setova[j] in nadjeno_niz) {
print "Set " niz_setova[j] " je na serveru."
} else {
print "Set " niz_setova[j] " nije pronadjen na serveru."
n++
}
} if(n>0)
exit 44;
}'
f_provera_greske 44 "Neki setovi nisu nadjeni. Prekidam skriptu."
if [[ $(pwd) != $DWNLD_DIR ]]; then
print "Prelazim u $DWNLD_DIR"
cd $DWNLD_DIR
f_provera_greske 1 "Greska prilikom prelaska u $DWNLD_DIR."
fi
for SET in ${SETOVI[@]}; do
print "Skidam set ==> $SET..."
ftp $FTP_SAJT/$FTP_PUTANJA/$SET
f_provera_greske 1 "Greska prilikom preuzimanja seta $SET."
done
fi
;;
installkernel)
if [ -f $DWNLD_DIR/kern-GENERIC.tgz ]; then
print "Cuvamo stari kernel kao netbsd.old..."
/bin/mv /netbsd /netbsd.old
f_provera_greske 1 "Greska prilikom kopiranja kernela."
print "Ekstraktujemo GENERIC kernel u / ..."
/usr/bin/progress -zf $DWNLD_DIR/kern-GENERIC.tgz /bin/tar -C / -xpf -
f_provera_greske 1 "Greska prilikom ekstraktovanja kernela."
print ""
print -n "Novi kernel ekstraktovan, restart sistema za ucitavanje novog kernela ( da/ne ): "
while read ODGOVOR; do
case $ODGOVOR in
[Dd]|[Dd][Aa])
sync; sync; shutdown -r now ;;
[Nn]|[Nn][Ee])
print "Novi kernel ce se ucitati prilikom sledeceg podizanja sistema."
exit ;;
*)
print "Odgovori sa [d]a ili [n]e"
continue ;;
esac
done
else
print "kern-GENERIC ne postoji" && exit 1
fi
;;
installsets)
print "Proveravamo validnost arhiva:"; print ""
for SET in ${SETOVI[@]}; do
[[ $SET == "kern-GENERIC.tgz" ]] && continue
print -n "Testiram arhivu ==> $SET ..."
/bin/tar -tzvf $DWNLD_DIR/$SET >/dev/null 2>&1 && print " moze da prodje."
f_provera_greske 1 " shajt, nesto smrdi u arhivi $SET. Prekidam skriptu"
done
print
print "Sve arhive su (valjda) ispravne. :-) Nastavljamo dalje..."
for SET in ${SETOVI[@]}; do
[[ ($SET == "etc.tgz") || ($SET == "xetc.tgz") || ($SET == "kern-GENERIC.tgz") ]] && continue
print "Ekstraktujem set ==> $SET..."
/usr/bin/progress -zf $DWNLD_DIR/$SET /rescue/tar -C / -xpf -
f_provera_greske 1 "Greska prilikom ekstraktovanja seta $SET."
done
;;
etcupdate)
/usr/sbin/etcupdate -s $DWNLD_DIR/etc.tgz -s $DWNLD_DIR/xetc.tgz
;;
help)
f_koriscenje
;;
*)
print ""
print "Greska: nepoznati perametar $1"
print ""
f_koriscenje
exit 1
;;
esac
Skripta "u akciji":
Skidanje setova:
nbsd$ ./getset.script getsets
Nova verzija je 200909140000Z
Prelazim u /home/soxxx/netbsd_sets
Skidam set ==> base..tgz..
Requesting http://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-5/200909140000Z/i386/binary/sets/base.tgz
100% |*****************************************************************************| 26241 KiB 189.47 KiB/s 00:00 ETA
26870857 bytes retrieved in 02:18 (189.47 KiB/s)
Skidam set ==> comp.tgz...
Requesting http://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-5/200909140000Z/i386/binary/sets/comp.tgz
100% |*****************************************************************************| 37822 KiB 189.44 KiB/s 00:00 ETA
38730622 bytes retrieved in 03:19 (189.44 KiB/s)
Skidam set ==> etc.tgz...
Requesting http://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-5/200909140000Z/i386/binary/sets/etc.tgz
100% |*****************************************************************************| 367 KiB 157.78 KiB/s 00:00 ETA
376257 bytes retrieved in 00:02 (157.75 KiB/s)
Skidam set ==> kern-GENERIC.tgz...
Requesting http://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-5/200909140000Z/i386/binary/sets/kern-GENERIC.tgz
32% |************************
Instaliranje kernela:
nbsd$ sudo ./getset.script installkernel
Cuvamo stari kernel kao netbsd.old...
Ekstraktujemo GENERIC kernel u / ...
100% |*****************************************************************************| 11470 KiB 41.90 MiB/s 00:00 ETA
Novi kernel ekstraktovan, restart sistema za ucitavanje novog kernela ( da/ne ): n
Novi kernel ce se ucitati prilikom sledeceg podizanja sistema.
Instaliranje setova:
nbsd$ sudo ./getset.script installsets
Ekstraktujem set ==> base.tgz...
100% |**************************************************************************************| 77550 KiB 9.82 MiB/s 00:00 ETA
Ekstraktujem set ==> comp.tgz...
100% |**************************************************************************************| 130 MiB 9.22 MiB/s 00:00 ETA
Ekstraktujem set ==> kern-GENERIC.tgz...
100% |**************************************************************************************| 11470 KiB 36.95 MiB/s 00:00 ETA
Ekstraktujem set ==> man.tgz...
100% |**************************************************************************************| 50790 KiB 13.91 MiB/s 00:00 ETA
Ekstraktujem set ==> misc.tgz...
100% |**************************************************************************************| 12310 KiB 23.33 MiB/s 00:00 ETA
Ekstraktujem set ==> tests.tgz...
100% |**************************************************************************************| 8410 KiB 5.73 MiB/s 00:00 ETA
Ekstraktujem set ==> text.tgz...
100% |**************************************************************************************| 9830 KiB 18.97 MiB/s 00:00 ETA
Ekstraktujem set ==> xbase.tgz...
82% |**********************************************************************
|