Skip to forum content
BSD Srbija
Zajednica korisnika BSD/UNIX sistema Srbije
You are not logged in. Please login or register.
Active topics Unanswered topics
IRC Kanal
Zvanični IRC kanal BSD Srbije se nalazi na: irc.freenode.net #bsdsrbija. Pozivamo vas sve da nam se pridružite u ćaskanju.
BSD Srbija » NetBSD opšte teme » Skripta za azuriranje NetBSD sistema koristeci snapshot setove
Pages: 1
You must login or register to post a reply
Posts [ 8 ]
- soxxx
- Administrator
- Offline
- From: Kosovo
- Registered: 08-11-2005
- Posts: 988
Topic: Skripta za azuriranje NetBSD sistema koristeci snapshot setove
Skripta ima dosta komentara tako da necu komentarisati nego samo nalepiti skriptu:
#!/bin/ksh
#
# dalibor Dot gudzic At gmail Dot com
# www.bsd-srbija.org
# 09/2009
#
# Skripta sluzi za preuzimanje instalacionih setova sa ftp servera
# koji se onda koriste za azuriranje NetBSD sistema tako sto ih ekstraktujemo
# i na kraju uklonimo zastarele fajlove koristeci etcupdate i postinstall. Prilikom azuriranja
# prvo instaliramo kernel i ako je sve u redu nakon podizanja sistema sa novim kernelom tek
# onda nastavljamo sa instaliranjem setova. Prvo cemo definisati neke stvari koje su nam
# potrebne dalje u skripti tako da ubuduce ne moramo da menjamo samu skriptu
# nego samo vrednosti ovih varijabli
#
#
# Direktorijum gde ce se cuvati preuzeti setovi
#
DWNLD_DIR="/home/soxxx/netbsd_sets"
#
# FTP server sa kojeg preuzimamo setove i putanja
#
FTP_SAJT="http://nyftp.netbsd.org" #FTP_SAJT="ftp://ftp.fr.netbsd.org"
FTP_RELENG="pub/NetBSD-daily"
#
# Verzija NetBSD-a za koju preuzimamo setove
#
TAG="netbsd-5"
#
# Belezimo staru verziju i pravimo niz sa imenima setova
#
VERZIJA="$(awk -F\' '/BUILDID/ { print $2 }' /etc/release)"
set -A SETOVI "base comp etc kern-GENERIC man misc tests text xbase xcomp xetc xfont xserver"
#
# Fukcija koja objasnjava pravilno pokretanje skripte
#
f_koriscenje() {
cat <<EOF
Pokretanje skripte: ${0##*/} <getsets | installkernel | installsets | postinstall | etcupdate | help>
getsets - Preuzimanje setova sa ftp servera
installkernel - Ekstraktovanje i instaliranje GENERIC kernela
installsets - Instaliranje setova
postinstall - Uklanjanje starih sistemskih fajlova
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
}
#
# Proveravamo broj parametara
#
if [ $# != 1 ]
then
print "Greska: potreban je (samo) jedan parametar za izvrsenje skripte jebi ga."
f_koriscenje
exit 1
fi
#
# Koristimo case petlju za dobijanje zadatog parametra. U slucaju da je parametar nepoznat,
# ispisujemo poruku o gresci
#
case $1 in
getsets)
#
# Proveravamo dali postoji novija verzija na FTP serveru od one koju vec koristimo
#
NOVA_VERZIJA=$(ftp -o - $FTP_SAJT/$FTP_RELENG/$TAG/ | sed -Ene 's|.*href="([0-9]+[^/]*).*|\1|p' | sort -r | head -1)
# awk verzija
# 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
else
VERZIJA=$NOVA_VERZIJA
FTP_PUTANJA="$FTP_RELENG/$TAG/$VERZIJA/i386/binary/sets"
print "Nova verzija je $VERZIJA."
#
# Proveravamo dali smo u direktorijumu za smestaj setova
#
if [[ $(pwd) != $DWNLD_DIR ]]; then
print "Prelazim u $DWNLD_DIR"
cd $DWNLD_DIR
fi
#
# Koristimo for petlju za skidanje setova i ispisujemo poruku za svaki
#
for SET in ${SETOVI[@]}; do
print "Skidam $SET set..."
ftp $FTP_SAJT/$FTP_PUTANJA/${SET}.tgz
done
fi
;;
installkernel)
#
# Cuvamo stari kernel tako da u slucaju da nesto krene pogresno uvek mozemo
# da se vratimo i prilikom podizanja sistema ucitamo stari kernel
#
if [ -f $DWNLD_DIR/kern-GENERIC.tgz ]; then
print "Cuvamo stari kernel kao netbsd.old..."
mv /netbsd /netbsd.old || ( print "Greska prilikom kopiranja" && exit 1 )
print "Ekstraktujemo GENERIC kernel u / ..."
progress -zf $DWNLD_DIR/kern-GENERIC.tgz /rescue/tar -C / -xpf - || \
( print "Greska prilikom ekstraktovanja kernela" && exit 1 )
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)
#
# Instaliramo svaki set osim 'etc.tgz' i 'xetc.tgz'. Koristimo progress komandu za ugodne trenutke
#
for SET in ${SETOVI[@]}; do
[[ ($SET == "etc") || ($SET == "xetc") ]] && continue
print "Ekstraktujem set $SET..."
progress -zf $DWNLD_DIR/$SET.tgz /rescue/tar -C / -xpf -
done
;;
etcupdate)
#
# Azuriramo /etc direktorijum
#
/usr/sbin/etcupdate -s $DWNLD_DIR/etc.tgz -s $DWNLD_DIR/xetc.tgz
;;
postinstall)
#
# Proveravamo zaostale i nepotrebne fajlove
#
/usr/sbin/postinstall -s $DWNLD_DIR/etc.tgz -s $DWNLD_DIR/xetc.tgz check
#/usr/sbin/postinstall -s ~/etc.tgz fix
;;
help)
f_koriscenje
;;
*)
print ""
print "Greska: nepoznati perametar $1"
print ""
f_koriscenje
exit 1
;;
esac
Ah da, da objasnim zasto ksh a ne sh; skripta je prvobitno koristila coprocess, to je opcija koja je dostupna samo u ksh (i odnedavno u bash). Kada su preselili NetBSD-daily na http:// server nisam mogao vise da koristim tu opciju pa sam jednostavno izmenio skriptu. Naravno previse sam lenj da skriptu izmenim na sh, a jedino arrays treba da se srede. Ali ipak...
:D
Evo i na pastebin ko zeli highlighted opcije: http://bsdsrbija.pastebin.com/m4d9d2797
The best way to learn UNIX is to play with it, and the harder you play, the more you learn.
If you play hard enough, you'll break something for sure, and having to fix a badly broken system is arguably the fastest way of all to learn. -Michael Lucas, AbsoluteBSD
- soxxx
- Administrator
- Offline
- From: Kosovo
- Registered: 08-11-2005
- Posts: 988
Re: Skripta za azuriranje NetBSD sistema koristeci snapshot setove
Ko ne zeli komentare moze da ih ukloni sa sledecom sed skripticom:
$ cat nokoment.sed
1!{
/^[[:blank:]]*#/d;
/./,/^$/!d;
}
$ sed -f nokoment.sed getsets.ksh > getsets_bez_komentara.ksh
Edit: pojednostavljen regex
The best way to learn UNIX is to play with it, and the harder you play, the more you learn.
If you play hard enough, you'll break something for sure, and having to fix a badly broken system is arguably the fastest way of all to learn. -Michael Lucas, AbsoluteBSD
- soxxx
- Administrator
- Offline
- From: Kosovo
- Registered: 08-11-2005
- Posts: 988
Re: Skripta za azuriranje NetBSD sistema koristeci snapshot setove
A evo i skripte "u akciji":
Skidanje setova:
nbsd$ ./getset.script getsets
Nova verzija je 200909140000Z
Prelazim u /home/soxxx/netbsd_sets
Skidam base set...
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 comp set...
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 etc set...
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 kern-GENERIC set...
Requesting http://nyftp.netbsd.org/pub/NetBSD-daily/netbsd-5/200909140000Z/i386/binary/sets/kern-GENERIC.tgz
32% |************************ | 1632 KiB 181.04 KiB/s 00:18 ETA
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...
100% |**************************************************************************************| 77550 KiB 9.82 MiB/s 00:00 ETA
Ekstraktujem set comp...
100% |**************************************************************************************| 130 MiB 9.22 MiB/s 00:00 ETA
Ekstraktujem set kern-GENERIC...
100% |**************************************************************************************| 11470 KiB 36.95 MiB/s 00:00 ETA
Ekstraktujem set man...
100% |**************************************************************************************| 50790 KiB 13.91 MiB/s 00:00 ETA
Ekstraktujem set misc...
100% |**************************************************************************************| 12310 KiB 23.33 MiB/s 00:00 ETA
Ekstraktujem set tests...
100% |**************************************************************************************| 8410 KiB 5.73 MiB/s 00:00 ETA
Ekstraktujem set text...
100% |**************************************************************************************| 9830 KiB 18.97 MiB/s 00:00 ETA
Ekstraktujem set xbase...
82% |********************************************************************** | 17399 KiB 8.47 MiB/s 00:00 ETA
The best way to learn UNIX is to play with it, and the harder you play, the more you learn.
If you play hard enough, you'll break something for sure, and having to fix a badly broken system is arguably the fastest way of all to learn. -Michael Lucas, AbsoluteBSD

- *BSD
- Dominus Liminis
- Offline
- Registered: 28-02-2007
- Posts: 411
Re: Skripta za azuriranje NetBSD sistema koristeci snapshot setove
E, svaka ti dala za ovo, evo bas se zadnjih dana nesto smaram sa NetBSD-om. Ovo ce mi dobro doci, posto sam slab sa skriptingom.
Nego, soxxx, primetio sam da ti od svihBSD-ova, najvise lezi NetBSD, ili mi se cini?
"If 386BSD had been available when I started on Linux, Linux would probably never had happened." Linus Torvalds
- soxxx
- Administrator
- Offline
- From: Kosovo
- Registered: 08-11-2005
- Posts: 988
Re: Skripta za azuriranje NetBSD sistema koristeci snapshot setove
Ma BSD je BSD...salim se, koristim ja i OpenBSD i FreeBSD, ali sam trenutno nesto zastao na NetBSD... 
Inace verujem da skripta uz neke izmene moze da se preuredi da radi i na ostalim BSD sistemima, tako da nije vezana za NetBSD.
The best way to learn UNIX is to play with it, and the harder you play, the more you learn.
If you play hard enough, you'll break something for sure, and having to fix a badly broken system is arguably the fastest way of all to learn. -Michael Lucas, AbsoluteBSD
- soxxx
- Administrator
- Offline
- From: Kosovo
- Registered: 08-11-2005
- Posts: 988
Re: Skripta za azuriranje NetBSD sistema koristeci snapshot setove
Evo novije verzije skripte. Ispravio sam nekoliko gresaka, uklonio postinstall (pokrece se na kraju etcupdate) i dodao dosta provera. Uklonio sam sve komentare. Zasto? Pitajte meku.
Ocekujem komentare i kritike za poboljsanje skripte. 
#!/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
The best way to learn UNIX is to play with it, and the harder you play, the more you learn.
If you play hard enough, you'll break something for sure, and having to fix a badly broken system is arguably the fastest way of all to learn. -Michael Lucas, AbsoluteBSD
- Registered: 29-05-2009
- Posts: 81
Re: Skripta za azuriranje NetBSD sistema koristeci snapshot setove
soxxx wrote: Uklonio sam sve komentare. Zasto? Pitajte meku. 
Svaka cast i hvala na trudu. Ja cu da kritikujem kad jos malo porastem, a za sada samo da kazem da se meni vise svidjalo sa komentarima. 
- soxxx
- Administrator
- Offline
- From: Kosovo
- Registered: 08-11-2005
- Posts: 988
Re: Skripta za azuriranje NetBSD sistema koristeci snapshot setove
Imas u gornjoj skripti vise manje posto nju necu da skidam za sada. Ako nesto nije jasno naravno slobdno pitaj, tu smo da pojasnimo koliko mozemo. 
The best way to learn UNIX is to play with it, and the harder you play, the more you learn.
If you play hard enough, you'll break something for sure, and having to fix a badly broken system is arguably the fastest way of all to learn. -Michael Lucas, AbsoluteBSD
Topic options
RSS topic feed
Pages: 1
You must login or register to post a reply
BSD Srbija » NetBSD opšte teme » Skripta za azuriranje NetBSD sistema koristeci snapshot setove