This commit is contained in:
milisbir 2018-01-26 04:42:01 +02:00
parent eb613d81a2
commit 5d32fc3ee0
1 changed files with 98 additions and 71 deletions

169
bin/mps
View File

@ -1,6 +1,6 @@
#!/bin/bash #!/bin/bash
versiyon="1.1.8 Milis Paket Sistemi" versiyon="1.1.9 Milis Paket Sistemi"
iletisim="milisarge@gmail.com" iletisim="milisarge@gmail.com"
betikad=${0##*/} betikad=${0##*/}
@ -129,8 +129,8 @@ hata_olustu(){
"_talimatsiz_dizin") "_talimatsiz_dizin")
_mesaj="$_talimatsiz_dizin" _mesaj="$_talimatsiz_dizin"
;; ;;
"_paket_adi_gerekli") "_talimat_bulunamadi")
_mesaj="$_paket_adi_gerekli" _mesaj="$_talimat_bulunamadi"
;; ;;
*) *)
_mesaj="böyle bir hata yok" _mesaj="böyle bir hata yok"
@ -735,10 +735,13 @@ gerekleri_dosyala(){
gerekleri_listele(){ gerekleri_listele(){
derleme_listyap_kontrol derleme_listyap_kontrol
local _paket _konum local _paket _konum _pkvt
_konum="$talimatname $ektalimatname" _konum="$talimatname $ektalimatname"
[ $1 ] && _paket=$1 || hata_olustu "_talimat_bulunamadi" [ $1 ] && _paket=$1 || hata_olustu "_talimat_bulunamadi"
echo $_paket | awk -v arama_konum="$_konum" ''' _pkvt=""
[ "$2" = "--kurulu_atla" ] && _pkvt="$VT"
echo $_paket | awk -v arama_konum="$_konum" -v PKVT="$_pkvt" \
'''
function gerekbul(paket,gerekler) { function gerekbul(paket,gerekler) {
if (ISLENDI[paket]) { if (ISLENDI[paket]) {
return return
@ -752,8 +755,12 @@ gerekleri_listele(){
if ( i > 1 && length(gerekler[i]) > 0 ){ if ( i > 1 && length(gerekler[i]) > 0 ){
ara=gerekler[i] ara=gerekler[i]
konum=talimat_bul(ara); konum=talimat_bul(ara);
if (konum != ""){ if (konum != ""){
gerekbul(konum); if (length(PKVT) > 0 ){
(kk(PKVT "/" ara))? yaz("."):gerekbul(konum)
}
else {gerekbul(konum)}
} }
} }
} }
@ -766,7 +773,15 @@ gerekleri_listele(){
system("echo $(basename $(dirname " paket ")) >> gerek.liste") system("echo $(basename $(dirname " paket ")) >> gerek.liste")
close(paket) close(paket)
} }
# kurulu kontrol
function kk(p) {
return !system("test -d \""p"\"");
}
function yaz(_param){
printf _param
}
function talimat_bul(ara){ function talimat_bul(ara){
cmd= "find " arama_konum " -name " ara " | head -n1 " cmd= "find " arama_konum " -name " ara " | head -n1 "
#print cmd #print cmd
@ -829,7 +844,7 @@ kly_yeni(){
fi fi
} }
derleme_listyap(){ derleme_listyap_eski(){
ryaz 32 "$1 $_gerekler_belirleniyor" ryaz 32 "$1 $_gerekler_belirleniyor"
dlyD="" dlyD=""
dlymap="" dlymap=""
@ -838,6 +853,11 @@ derleme_listyap(){
echo "${dlyD}" echo "${dlyD}"
} }
derleme_listyap(){
ryaz 32 "$1 $_gerekler_belirleniyor"
gerekleri_listele $@
}
kurulum_listyap(){ kurulum_listyap(){
klyD="" klyD=""
klymap="" klymap=""
@ -967,17 +987,18 @@ paket_inkur_oto(){
local konum anakonum kurdurum _agdan_kur_onay local konum anakonum kurdurum _agdan_kur_onay
derleme_listyap_kontrol derleme_listyap_kontrol
kurulum_listyap "$1" | grep "bulunamadı" #kurulum_listyap "$1" | grep "bulunamadı"
local kpkt derleme_listyap $1 "--kurulu_atla"
for paketkonum in `cat gerek.konum.liste`;do
for kpkt in `cat gerek.liste`;do
# önce talimat-anatalimat karşılaştırması yapılır. # önce talimat-anatalimat karşılaştırması yapılır.
kpkt=`basename $paketkonum`
konum="`find "$talimatname" -name $kpkt`" konum="`find "$talimatname" -name $kpkt`"
anakonum="`find "$anatalimatname" -name $kpkt`" anakonum="`find "$anatalimatname" -name $kpkt`"
ekkonum="`find "$ektalimatname" -name $kpkt`" ekkonum="`find "$ektalimatname" -name $kpkt`"
if [ -f "$anakonum/talimat" ];then if [ -f "$anakonum/talimat" ];then
# depo ve talimatname sürüm kontrolü # depo ve talimatname sürüm kontrolü
_gncdurum=$(surum_karsilastir ${kpkt}) _gncdurum=""
[ "$(kurulu_kontrol ${kpkt})" = "kurulu" ] && _gncdurum=$(surum_karsilastir ${kpkt})
_agdan_kur_onay="x" _agdan_kur_onay="x"
if [ "${_gncdurum}" == "degil" ];then if [ "${_gncdurum}" == "degil" ];then
_agdan_kur_onay="h" _agdan_kur_onay="h"
@ -988,9 +1009,10 @@ paket_inkur_oto(){
$_yaz_uyari "$kpkt talimat eşitsizliğinden atlandı." $_yaz_uyari "$kpkt talimat eşitsizliğinden atlandı."
fi fi
[ $_agdan_kur_onay == "x" ] && exit 1 [ $_agdan_kur_onay == "x" ] && exit 1
[ $_agdan_kur_onay == "e" ] && agdan_kur "$kpkt" "$cikti" [ $_agdan_kur_onay == "e" ] && agdan_kur "$kpkt" "$_cikti"
# ek talimatlar için sürüm karşılaştırma henüz yok.farklı depolara bakılarak sağlanacak
elif [ -f "$ekkonum/talimat" ];then elif [ -f "$ekkonum/talimat" ];then
agdan_kur "$kpkt" "$cikti" agdan_kur "$kpkt" "$_cikti"
else else
$_yaz_uyari "$kpkt talimatı bulunamadı!" $_yaz_uyari "$kpkt talimatı bulunamadı!"
fi fi
@ -1022,29 +1044,40 @@ paket_sil_oto_onayli(){
done done
} }
paket_sil_gerekli(){ paket_sil_gereklerle(){
local _onay _tbs local _onay _tbs _tbsnc _paket _ustgerek
if [ -d $VT/$1 ];then [ $1 ] && _paket="$1" || hata_olustu "_paket_adi_gerekli"
bagimli_bilgi_dosyala "$1" if [ -d $VT/${_paket} ];then
rm -f /tmp/$1.silinecekler bagimli_bilgi_dosyala "${_paket}"
touch /tmp/$1.silinecekler rm -f /tmp/${_paket}.silinecekler
_tbsnc=$(ters_bagimli_bilgi $1 "kurulu") touch /tmp/${_paket}.silinecekler
_tbs=$(echo $_tbsnc | wc -l) _tbsnc=$(ters_bagimli_bilgi ${_paket} "kurulu")
if [ -z "${_tbsnc}" ];then _tbs=0
else _tbs=$(echo "$_tbsnc" | wc -l)
fi
if [ $_tbs -gt 0 ];then if [ $_tbs -gt 0 ];then
ryaz 31 "$1 silinemez." ryaz 31 "${_paket} silinemez."
echo "ters gerekleri: $_tbsnc" echo "ters gerekleri:";echo "$_tbsnc"
exit 1 exit 1
fi fi
for pkaltb in $(tac /tmp/$1.gerekler.liste);do for pkaltb in $(cat /tmp/${_paket}.gerekler.liste);do
if [ -d $VT/$pkaltb ];then if [ -d $VT/$pkaltb ];then
tbsonuc="" _tbsnc=""
tbsonuc=$(ters_bagimli_bilgi $pkaltb "kurulu") _tbsnc=$(ters_bagimli_bilgi $pkaltb "kurulu")
if [ $(echo $tbsonuc | wc -l) -eq 0 ];then if [ -z "${_tbsnc}" ];then _tbs=0
else _tbs=$(echo "$_tbsnc" | wc -l)
fi
echo "$pkaltb >"
if [ -f ${pkaltb}.tbk.txt ];then
_ustgerek=$(cat /tmp/${_paket}.silinecekler | grep -f ${pkaltb}.tbk.txt)
[ ${_ustgerek} ] && _tbs=0
fi
if [ $_tbs -eq 0 ];then
ryaz 32 "$pkaltb silinebilir." ryaz 32 "$pkaltb silinebilir."
echo "$pkaltb" >> /tmp/$1.silinecekler echo "$pkaltb" >> /tmp/${_paket}.silinecekler
elif [ "$tbsonuc" = "$1" ];then elif [ "$_tbsnc" = "${_paket}" ];then
ryaz 32 "$pkaltb silinebilir." ryaz 32 "$pkaltb silinebilir."
echo "$pkaltb" >> /tmp/$1.silinecekler echo "$pkaltb" >> /tmp/${_paket}.silinecekler
else else
ryaz 31 "$pkaltb silinemez." ryaz 31 "$pkaltb silinemez."
echo "ters gerekleri: $tbsonuc" echo "ters gerekleri: $tbsonuc"
@ -1056,14 +1089,14 @@ paket_sil_gerekli(){
_onay="onay" _onay="onay"
# otomatik onay verme durum kontrolü # otomatik onay verme durum kontrolü
if [ ! -z "$2" ];then _onay="$2";fi if [ ! -z "$2" ];then _onay="$2";fi
#cat /tmp/$1.silinecekler #cat /tmp/${_paket}.silinecekler
if [ $_onay = "oto" ];then if [ $_onay = "oto" ];then
paket_sil_oto "/tmp/$1.silinecekler" paket_sil_oto "/tmp/${_paket}.silinecekler"
else else
paket_sil_oto_onayli "/tmp/$1.silinecekler" paket_sil_oto_onayli "/tmp/${_paket}.silinecekler"
fi fi
else else
ryaz 32 "$_zaten $1 $_paket_kurulu_degil" ryaz 32 "$_zaten ${_paket} $_paket_kurulu_degil"
exit 1 exit 1
fi fi
} }
@ -1101,7 +1134,7 @@ paket_guncelle_oto(){
paket_guncelle "$kpkt" paket_guncelle "$kpkt"
fi fi
done done
rm gerek.konum.liste gerek.liste listeleri_temizle
} }
dongu_gosterge(){ dongu_gosterge(){
@ -1530,7 +1563,7 @@ ters_bagimli_bilgi(){
local gtbpaket _sadece_kurulu local gtbpaket _sadece_kurulu
_sadece_kurulu="hepsi" _sadece_kurulu="hepsi"
gtbpaket=$1 gtbpaket=$1
if [ ! -z "$2" ];then _sadece_kurulu="$2";fi [ "$2" ] && _sadece_kurulu="$2"
tbgdosya=$(mktemp) tbgdosya=$(mktemp)
grep -rli "\s${gtbpaket}\s.*Gerekler\|Gerekler.*\s${gtbpaket}\s" $talimatname > $tbgdosya ; grep -rli "\s${gtbpaket}\s.*Gerekler\|Gerekler.*\s${gtbpaket}\s" $talimatname > $tbgdosya ;
grep -rli "\s${gtbpaket}\s.*Gerekler\|Gerekler.*\s${gtbpaket}\s" $ektalimatname >> $tbgdosya ; grep -rli "\s${gtbpaket}\s.*Gerekler\|Gerekler.*\s${gtbpaket}\s" $ektalimatname >> $tbgdosya ;
@ -1647,19 +1680,6 @@ silme_etkilenen_kontrol(){
done done
} }
# bir paket ile kurulacak yeni paketlerin listesini verir.
# comm yerine diff li çözüm olacak
yeni_kurulacak_paketler(){
[ -f /tmp/mevcut_kurulu.liste ] && rm -rf /tmp/mevcut_kurulu.liste
ls $VT > /tmp/mevcut_kurulu.liste
derleme_listyap $1 &> /dev/null
comm -13 <(sort /tmp/mevcut_kurulu.liste) <(sort gerek.liste)
#diff --changed-group-format='***%>' --unchanged-group-format='' --new-group-format='+++%>' \
#/tmp/mevcut_kurulu.liste gerek.liste | cut -d' ' -f1 | sort -d
[ -f gerek.liste ] && rm -rf gerek.liste
[ -f gerek.konum.liste ] && rm -rf gerek.konum.liste
}
# güncellemelerin alınması talimatname üzerinden # güncellemelerin alınması talimatname üzerinden
guncellemeler(){ guncellemeler(){
#diff --changed-group-format='***%>' --unchanged-group-format='' --new-group-format='+++%>' \ #diff --changed-group-format='***%>' --unchanged-group-format='' --new-group-format='+++%>' \
@ -2542,9 +2562,15 @@ yuzdelik_filtre ()
done done
} }
listeleri_temizle(){
[ -f gerek.liste ] && rm -rf gerek.liste
[ -f gerek.konum.liste ] && rm -rf gerek.konum.liste
}
paket_indir(){ paket_indir(){
if [ -f "$paketdepo""paket.vt" ];then if [ -f "$paketdepo""paket.vt" ];then
local pkt cikti _yaz _yaz_uyari local _ipaket pkt cikti _yaz _yaz_uyari
[ $1 ] && _ipaket="$1" || hata_olustu "_paket_adi_gerekli"
cikti="--renkli" cikti="--renkli"
if [ "$2" ]; then if [ "$2" ]; then
cikti="$2" cikti="$2"
@ -2567,20 +2593,20 @@ paket_indir(){
else else
pktvt="paket${i-1}.vt" pktvt="paket${i-1}.vt"
fi fi
pkt=`cat "$paketdepo$pktvt" | grep "^$1 " | cut -d' ' -f3` pkt=`cat "$paketdepo$pktvt" | grep "^${_ipaket} " | cut -d' ' -f3`
#ryaz 32 "$1 paketi $pktsunucu altında aranıyor" #ryaz 32 "${_ipaket} paketi $pktsunucu altında aranıyor"
if [ $pkt ];then if [ $pkt ];then
#ryaz 32 "$1 paketi $pktsunucu altında bulundu" #ryaz 32 "${_ipaket} paketi $pktsunucu altında bulundu"
ekontdeg=`cat "$paketdepo$pktvt" | grep "^$1 " | cut -d' ' -f2` ekontdeg=`cat "$paketdepo$pktvt" | grep "^${_ipaket} " | cut -d' ' -f2`
cpaket="${pkt/'#'/'%23'}" cpaket="${pkt/'#'/'%23'}"
#paketin sunucuda varlık kontrolu #paketin sunucuda varlık kontrolu
wget -q --spider "$pktsunucu$cpaket" wget -q --spider "$pktsunucu$cpaket"
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
$_yaz "$1 $_indiriliyor" $_yaz "${_ipaket} $_indiriliyor"
if [ "$cikti" == "--normal" ];then if [ "$cikti" == "--normal" ];then
wget --progress=dot:force -nc --no-check-certificate -P "$paketdepo" "$pktsunucu$cpaket" 2>&1 | tee /tmp/$1_indirme.log | sed -u -n 's/[0-9]*%/&/p' wget --progress=dot:force -nc --no-check-certificate -P "$paketdepo" "$pktsunucu$cpaket" 2>&1 | tee /tmp/${_ipaket}_indirme.log | sed -u -n 's/[0-9]*%/&/p'
else else
wget --no-check-certificate -nc -q --show-progress -P "$paketdepo" "$pktsunucu$cpaket" #2>&1 | tee /tmp/$1_indirme.log wget --no-check-certificate -nc -q --show-progress -P "$paketdepo" "$pktsunucu$cpaket" #2>&1 | tee /tmp/${_ipaket}_indirme.log
fi fi
if [[ "$?" != 0 ]]; then if [[ "$?" != 0 ]]; then
$_yaz_uyari "indirme hatalı" $_yaz_uyari "indirme hatalı"
@ -2591,16 +2617,16 @@ paket_indir(){
$_yaz_uyari "$_shasum_uyumsuzluk,paket tekrar indiriliyor." $_yaz_uyari "$_shasum_uyumsuzluk,paket tekrar indiriliyor."
hataloglama "sha1sum uyusmaslik tespit edildi,paket tekrar indiriliyor." hataloglama "sha1sum uyusmaslik tespit edildi,paket tekrar indiriliyor."
rm -f "$paketdepo$pkt" rm -f "$paketdepo$pkt"
paket_indir "$1" "$cikti" paket_indir "${_ipaket}" "$cikti"
#else #else
#ryaz 32 "$_zaten $1 $_paket_onbellek_depoda_var" #ryaz 32 "$_zaten ${_ipaket} $_paket_onbellek_depoda_var"
fi fi
fi fi
else else
$_yaz_uyari "$1 paketi bulunamadı $pktsunucu dan silinmiş olmalı!" $_yaz_uyari "${_ipaket} paketi bulunamadı $pktsunucu dan silinmiş olmalı!"
fi fi
else else
$_yaz_uyari "$pktsunucu $1 paketi bulunmuyor!" $_yaz_uyari "$pktsunucu ${_ipaket} paketi bulunmuyor!"
fi fi
done done
else else
@ -2744,11 +2770,11 @@ ayarlar() {
exit 0 ;; exit 0 ;;
### mps -S paketismi = ilgili paketi altbağımlılıklarını da sorarak kaldırır. ### mps -S paketismi = ilgili paketi altbağımlılıklarını da sorarak kaldırır.
-S) -S)
paket_sil_gerekli "$2" paket_sil_gereklerle "$2"
exit 0 ;; exit 0 ;;
### mps -Sz paketismi = ilgili paketi altbağımlılıklarını da sormadan sırayla kaldırır. ### mps -Sz paketismi = ilgili paketi altbağımlılıklarını da sormadan sırayla kaldırır.
-Sz) -Sz)
paket_sil_gerekli "$2" "oto" paket_sil_gereklerle "$2" "oto"
exit 0 ;; exit 0 ;;
### mps ara aranan = paket isimleri ve açıklamalarında anahtar kelime arar. ### mps ara aranan = paket isimleri ve açıklamalarında anahtar kelime arar.
-pa|ara) -pa|ara)
@ -3030,17 +3056,18 @@ ayarlar() {
exit 0 ;; exit 0 ;;
### mps -dly paketismi = ilgili paketin genel ve tüm bağımlılık listesini verir,oluşturur. ### mps -dly paketismi = ilgili paketin genel ve tüm bağımlılık listesini verir,oluşturur.
-dly|dliste) -dly|dliste)
derleme_listyap "$2" shift
exit 0 ;; derleme_listyap "$@"
glist)
gerekleri_listele "$2"
exit 0 ;; exit 0 ;;
### mps -kly paketismi = ilgili paketin ve kurulması gereken altgereklerini verir,oluştur. ### mps -kly paketismi = ilgili paketin ve kurulması gereken altgereklerini verir,oluştur.
-kly) -kly)
kurulum_listyap "$2" ;; kurulum_listyap "$2"
exit 0 ;;
### mps -ykp paketismi = ilgili paketin kurulmak istenirse,kurulacak yeni paketleri listeler. ### mps -ykp paketismi = ilgili paketin kurulmak istenirse,kurulacak yeni paketleri listeler.
-ykp) -ykp)
yeni_kurulacak_paketler "$2" #yeni_kurulacak_paketler "$2"
derleme_listyap "$2" "--kurulu_atla"
listeleri_temizle
exit 0 ;; exit 0 ;;
#sunucu bilgisi alma #sunucu bilgisi alma
-sun2|sunucu) -sun2|sunucu)