#!/bin/bash
. /etc/mpsd.conf
if [ -f /etc/mps.conf ];then
. /etc/mps.conf
fi
. /root/bin/fonks.sh
versiyon="0.9.3"
iletisim="milisarge@gmail.com"
paketdepo="/depo/paketler/"
if [ -z ${sunucu+:} ]; then
	sunucu="127.0.0.1:8000/"
fi
#sunucu="http://milis.gungre.ch/packages/"
git_sunucu="https://github.com/milisarge/malfs-milis"
ikaynak=""
betikad=${0##*/}
kurulum_onay="evet"
talimatname_dizin="/root/talimatname"
kokdizin="/"
VT="/var/lib/pkg/DB"
TARIHCE_DIZIN="/var/lib/pkg/tarihce"
LOGDIZIN="/var/log/mps"
tekrarkur="hayir"
logdosya=/var/log/mps/mps.log
#temel paket koruma
tpk="evet"
if [ -z ${lokal+:} ]; then
	lokal="tr"
fi
if [ -z ${docsil+:} ]; then
	docsil="evet"
fi
if [ -z ${yerelsil+:} ]; then
	yerelsil="evet"
fi


icerik_ekle(){
	paketad=`echo "$1" | cut -d'#' -f1`	
	paketad=`basename $paketad`
	ryaz 34 $paketad" paketi kuruluyor-> $kokdizin" 
	tar -C /tmp --extract --file=$1 .PRE 1 2> /tmp/$paketad_pre.log
	#kos-kur kontrolu
	if [ -f /tmp/.PRE ];then
		if [ "$kokdizin" == "/" ];then
			bash  /tmp/.PRE
		else
			cp /tmp/.PRE $kokdizin/tmp/$paketad.PRE
		fi
		rm  /tmp/.PRE
	fi
	mkdir -p kur.$paketad &&
	tar xf $1 -C kur.$paketad && 
	#istenmeyen yerellerin silinmesi
	if [ -d kur.$paketad/usr/share/locale ] && [ "$yerelsil" == "evet" ];then
		for lkl in `ls kur.$paketad/usr/share/locale/`;do
			if [ "$lkl" != "$lokal" ];then rm -r kur.$paketad/usr/share/locale/$lkl; fi
		done
	fi
	#doc dizini silinmesi
	if [ -d kur.$paketad/usr/share/doc ] && [ "$docsil" == "evet" ];then
		rm -r kur.$paketad/usr/share/doc
	fi
	mkdir -p $kokdizin/var/lib/pkg/DB/"$paketad" && 
	cp -v -afr kur.$paketad/* $kokdizin > kur.$paketad/kurulan 
	cp kur.$paketad/kurulan /tmp/ &&cat kur.$paketad/kurulan | cut -d '>' -f2 > $kokdizin/var/lib/pkg/DB/"$paketad"/kurulan &&
	#mv  kur.$paketad/.MTREE /var/lib/pkg/DB/"$paketad"/files &&
	mv  kur.$paketad/.META $kokdizin/var/lib/pkg/DB/"$paketad"/META &&
	
	#kur-kos calistirilmasi
	if [ -f kur.$paketad/.POST ];then
		if [ "$kokdizin" == "/" ];then
			bash  kur.$paketad/.POST
		else
			cp kur.$paketad/.POST $kokdizin/tmp/$paketad.POST
		fi
		rm  kur.$paketad/.POST
	fi
	
	rm -r kur.$paketad
	if [ -f $kokdizin/etc/ld.so.conf ];then
		ldconfig -r $kokdizin
	fi
	ryaz 34 $paketad" paketi kuruldu."
	loglama "$paketad paketi kuruldu."
	
}

paket_sil(){
	local paket kkont sil_onay oto_silme
	paket="$1"
	if [ "$2" ]; then
		oto_silme="$2"
	fi
	if [ "$tpk" = "evet" ] && [ -d "$talimatname_dizin/temel/$1" ];then
		ryaz 31 "$1 temel sistem paketidir.Silinemez!!!"
	else
		kkont=`kurulu_kontrol "$1"`
		if [ "$kkont" = "kurulu" ];then
			if [ -f "/var/lib/pkg/DB/$paket/kurulan" ];then
                #dizin koruma
                kurban_kurtar $1
				cat /var/lib/pkg/DB/$paket/kurulan | cut -d '>' -f2 > /tmp/$paket.sil
				ryaz 31 "ters bagimliliklar"
				ryaz 31 "------------------"
				ters_bagimli_kontrol "$paket"
				ryaz 31 "------------------"
				ryaz 31 "kurban dosyalar"
				ryaz 31 "------------------"
				silme_kurban_kontrol /tmp/$paket.sil
				ryaz 31 "------------------"
				if [ "$oto_silme" = "evet" ];then
					sil_onay="e"
				else
					while true; do
						ryaz 34 $paket" paketi kaldırılsın mı?";read -p "e veya h-> " eh
						case $eh in
							[Ee]* ) sil_onay="e"; break;;
							[Hh]* ) break;;
							* ) echo "e veya h";;
						esac
					done
				fi
				if [ "$sil_onay" = "e" ];then
					xargs rm -r -f < /tmp/$paket.sil &&
					rm -r -f /var/lib/pkg/DB/"$paket" &&
					ryaz 34 $paket" paketi silindi."
					loglama "$paket paketi silindi."
					rm -f /tmp/$paket.sil
				else
					rm -f /tmp/$paket.sil
				fi
				
			else
				ryaz 31 "kritik mesaj:kurulanlar dosyası yok." 
			fi
		else
			ryaz 32 "paket zaten kurulu değil!"
		fi
	fi

}
paket_ara(){
	paket="$1"
	for pkt in `cat /depo/paketler/paket.vt  | grep $paket |  awk '{print $1}'`; do
		pakdesc=$(find /root/talimatname -name "$pkt" | xargs -I %  sed -n '1{p;q}' %/talimat | sed s'/# Description: //g');
		ryaz 34 "$pkt - $pakdesc";
	done
}
kelime_bul(){
	grep --color -H -ri "$1" /root/talimatname/
}
paket_bilgi2(){
	local paket kkont
	kkont=`kurulu_kontrol "$1"`
	if [ "$kkont" = "kurulu" ];then
		paket="$1"
		cat /var/lib/pkg/DB/"$paket"/META
	else
		echo "paket kurulu değil!"
	fi

}

paket_bilgi(){
	local paket kkont
	kkont=`kurulu_kontrol "$1"`
	if [ "$kkont" = "kurulu" ];then
		paket="$1"
		satir=`sed -n '1p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "AD:" ${satir:1:${#satir}-1} 
		satir=`sed -n '2p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "TN:" ${satir:1:${#satir}-1} 
		satir=`sed -n '3p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "UR:" ${satir:1:${#satir}-1} 
		satir=`sed -n '4p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "YP:" ${satir:1:${#satir}-1} 
		satir=`sed -n '5p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "PK:" ${satir:1:${#satir}-1} 
		satir=`sed -n '6p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "--:" ${satir:1:${#satir}-1} 
		satir=`sed -n '7p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "VS:" ${satir:1:${#satir}-1}
		satir=`sed -n '8p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "RL:" ${satir:1:${#satir}-1}
		satir=`sed -n '9p' <  /var/lib/pkg/DB/"$paket"/META`
		ryaz 32 "DZ:" `date -d @${satir:1:${#satir}-1}`
	else
		echo "paket kurulu değil!"
	fi

}

yeniden_paketle(){
		cd $1
		bsdtar -r -f  ../"$1".mps .META
		bsdtar -r -f  ../"$1".mps *
		cd ..
		lzip -9 "$1".mps
}

derleme_listyap(){
	bagimlist=`bagimlilar "$1"`

	if [ "$bagimlist" != "talimatyok" ];then
		for bagim in $bagimlist;do
			
			if [ "`cat tumbag.liste | grep $bagim`" != "$bagim" ];then
				derleme_listyap "$bagim"
			fi
			
		done
		
		if  ! grep -Fxq "$1" tumbag.liste
		then
			ana="`find $talimatname_dizin -name $1`"
			echo ${ana#"$talimatname_dizin"}
			#sadece genel bagimliliklar derlenecek
			echo "$1" >> tumbag.liste 
			if [ -d "$talimatname_dizin/genel/$1" ];then
				echo "$1" >> bag.liste 
			fi
		fi
	else
		ryaz 31 "$1 talimatı bulunamadı."
		exit 1 
	fi
}

derleme_listbilgi(){
	ryaz 34 "yapim asamasında"
}

paket_derle_liste(){
	for dpkt in `cat $1`;do
		echo $dpkt "derleniyor...."
		zorla_derle="yok"
		paket_derle $dpkt
	done
}
#otomatik derle kontrollu kur
paket_derle_kur(){
	tekrarkur="hayir"
	mps -dly "$1"  && mps -derlist bag.liste
}

oto_derle_kur_paketle(){
	mps -G
	mps -kur $1 &&
	if [ -f  "$talimatname_dizin/genel/$1/$1.sira" ];then
		ryaz 32 "sıralı derleme yapılacak."
		mps -derlist "$talimatname_dizin/genel/$1/$1.sira"
	else
		mps -derle $1
	fi 
}

paket_kur_oto(){
	local kpkt pkt pak kliste
	if [ "$1" = "-H" ];then
		ls *.mps.lz > "otokur.list"
		kliste="otokur.list"
	else
		kliste="$1"
	fi
	for kpkt in `cat $kliste`;do
		for pkt in `ls $kpkt* | cut -d'#' -f1`;do
			pak=`ls "$pkt#"*`
			mps -k "$pak" && mps -kur "$pkt"
		done
	done
	rm -rf otokur.list
}

paket_kur_oto_zorla(){
	local kpkt pkt pak kliste
	if [ "$1" = "-H" ];then
		ls *.mps.lz > "otokur.list"
		kliste="otokur.list"
	else
		kliste="$1"
	fi
	for kpkt in `cat $kliste`;do
		for pkt in `ls $kpkt* | cut -d'#' -f1`;do
			pak=`ls "$pkt#"*`
			paket_sil "$pkt" "evet"
			mps -k "$pak" && mps -kur "$pkt"
		done
	done
	rm -rf otokur.list
}

paket_kur_liste(){
	local kpkt pkt pak
	for kpkt in `cat $1`;do
		for pkt in `ls $kpkt* | cut -d'#' -f1`;do
			pak=`ls "$pkt#"*`
			mps -k "$pak"
		done
	done
}

paket_kur_liste_zorla(){
	local kpkt pkt pak
	for kpkt in `cat $1`;do
		for pkt in `ls $kpkt* | cut -d'#' -f1`;do
			pak=`ls "$pkt#"*`
			paket_sil "$kpkt" "evet"
			mps -k "$pak"
		done
	done
}

#otomatik kontrollu kur
paket_kur_oto2(){
	mps -dly "$1" > /dev/null && mps -ok bag.liste
}

paket_inkur_liste_direk(){
	local kpkt
	for kpkt in `cat $1`;do
		mps -ik "$kpkt"
	done
}

paket_inkur_liste(){
	local kpkt
	for kpkt in `cat $1`;do
		mps -kur "$kpkt"
	done
}

#otomatik kontrollu kur
paket_inkur_oto(){
	mps -dly "$1" | grep "bulunamadı"
	#derleme_listyap "$1" > mps.log &&
	local kpkt
	for kpkt in `cat bag.liste`;do
		mps -ik "$kpkt"
	done
	rm -rf *.liste *.eski
}

paket_sil_oto(){
	local spkt
	for spkt in `cat $1`;do
		oto_silme="evet"
		paket_sil "$spkt" "$oto_silme"
	done
}

paket_sil_oto_onayli(){
	local spkt
	cat $1
	for spkt in `cat $1`;do
		paket_sil "$spkt"
	done
}

paketsiz_talimatlar(){
	for talimat in `ls $talimatname_dizin/genel`;do
		if [[ ! $(cat $paketdepo/paket.vt | grep  $talimat#) ]] ;then 
			echo $talimat 
		fi
	done
}

paket_guncelle(){
	surum_kontrol $1
	devir_kontrol $1
}

paket_guncelle_oto(){
	mps -dly "$1" > /dev/null &&
	local kpkt
	for kpkt in `cat bag.liste`;do
		mps -g "$kpkt"
	done
	rm bag.liste tumbag.liste
}

sistem_guncelle(){
	local kpkt
	mps -GG 
	mps -G
	for kpkt in `mps -kl`;do
		paket_guncelle "$kpkt"
	done
}

surum_kontrol(){
	local ksurum version pkt dusuk yuksek durum
	durum="belirsiz"
	satir=`sed -n '7p' <  /var/lib/pkg/DB/"$1"/META`
	ksurum=${satir:1:${#satir}-1} 
	pkt="`find $talimatname_dizin -name $1`"
	source $pkt/talimat
	dusuk=`echo -e "$ksurum\n$version" | sort -V | head -n1`
	
	if [ "$ksurum" = "$version" ];then
		durum="guncel"
		ryaz 33 "$1 sürümü güncel"
	else
		if [ "$ksurum" = "$dusuk" ];then
			durum="yukselt"
		else
			durum="dusur"
		fi
		gun_onay="h"
		if [ "$durum" <> "guncel" ];then
			while true; do
				ryaz 34 "$1 sürüm $durum""me işlemi uygulanacak. $ksurum <> $version ";read -p "e veya h-> " eh
				case $eh in
					[Ee]* ) gun_onay="e"; break;;
					[Hh]* ) break;;
					* ) echo "e veya h";;
				esac
			done	
			if [ "$gun_onay" = "e" ];then
				paket_sil "$1" "evet"
				mps -ik $1
				ryaz 33 "$1 sürüm güncellemesi yapıldı"
			else
				ryaz 31 "$1 sürüm güncellemesi yapılmadı"
			fi
		fi
	fi
	
}

devir_kontrol(){
	local kdevir release pkt dusuk yuksek durum gun_onay
	durum="belirsiz"
	satir=`sed -n '8p' <  /var/lib/pkg/DB/"$1"/META`
	kdevir=${satir:1:${#satir}-1} 
	pkt="`find $talimatname_dizin -name $1`"
	source $pkt/talimat
	dusuk=`echo -e "$kdevir\n$release" | sort -V | head -n1`
	
	if [ "$kdevir" = "$release" ];then
		durum="guncel"
		ryaz 33 "$1 deviri güncel"
	else
		if [ "$kdevir" = "$dusuk" ];then
			durum="yukselt"
		else
			durum="dusur"
		fi
		gun_onay="h"
		if [ "$durum" <> "guncel" ];then
			while true; do
				ryaz 34 "$1 devir $durum""me işlemi uygulanacak. $kdevir <> $release ";read -p "e veya h-> " eh
				case $eh in
					[Ee]* ) gun_onay="e"; break;;
					[Hh]* ) break;;
					* ) echo "e veya h";;
				esac
			done	
			if [ "$gun_onay" = "e" ];then
				paket_sil "$1" "evet"
				mps -ik $1
				ryaz 33 "$1 devir güncellemesi yapıldı"
			else
				ryaz 31 "$1 devir güncellemesi yapılmadı"
			fi
		fi
	fi 
}
   
paket_derle(){
	#eski derleme kalıntılarını temizle
	if [ -d tmp.* ];then
		rm -r tmp.*
	fi
	kaynakdizin_kontrol
	local konum derleme_onay eh bagimd
	derleme_onay="h"
	konum="`find "$talimatname_dizin" -name $1`"
	if [ -d "$konum" ];then
		mkdir -p tmp."$1" 
		cp -a $konum/* tmp."$1"/
		cd tmp."$1"
		if [ "`kurulu_kontrol "$1"`" = "kurulu" ] && [ "$zorla_derle" = "yok" ];then
			derleme_onay="h"
		else
			echo "-----"
			derleme_onay="e"
		fi 
		if [ "$derleme_onay" = "e" ];then
			ryaz 33 "$1" "derleniyor...."
			#mpsd -d > /dev/null
			#mpsd -d
			echo "------------------------"
			mpsd -d 2>&1|tee /tmp/"$1".log
			if ( grep "^=======>" /tmp/"$1".log| tail -1 |grep "ERROR"  > /dev/null);then
				echo "derleme sisteminde hata oluştu -----> " /tmp/"$1".log
				exit 1
			fi
			if [ "$kurulum_onay" = "evet" ];then
				for kpkt in `ls $1* | cut -d'#' -f1`;do
					mps -k "$kpkt#"*
				done	
			fi
			mv *.mps.lz ../
		else
			ryaz 32 "paket zaten kurulu,yine de derlemek için:
			mps -zd $1"
		fi 
		cd ..
		rm -r tmp."$1"
	else
		ryaz 31 "talimat dosyası bulunamadı."
	fi

}


bagimlilar(){
	local bagimd konum
	konum="`find "$talimatname_dizin" -name $1`"
	if [ -f "$konum/talimat" ];then
		bagimd=`cat $konum/talimat | grep "Depends on" | cut -d':' -f2`
											   
		if [ -n "$bagimd" ]; then
			bagimd=`echo "$bagimd" | sed 's/,/ /g'`
			#sıralı gösterme
			echo `echo "$bagimd" | sed 's/,/ /g'`
		fi
	else
		echo "talimatyok"
		exit 1
	fi
}

bagimli_bilgi(){
	local bagimd konum bag
	konum="`find "$talimatname_dizin" -name $1`"
	bagimd=`cat $konum/talimat | grep "Depends" | cut -d':' -f2`
	if [ -n "$bagimd" ]; then
		bagimd=`echo "$bagimd" | sed 's/,/ /g'`
		#sıralı gösterme
		#echo `echo "$bagimd" | sed 's/,/ /g'`
		#kurulu kontrollu gosterim
		for bag in $bagimd;do
			echo $bag "`kurulu_kontrol $bag`"
		done
	fi
	echo "$1" "`kurulu_kontrol $1`"
	
}

bagimli_bilgi_dosyala(){
	rm -f "$1.gerekler.liste"
	local bagimd konum bag
	konum="`find "$talimatname_dizin" -name $1`"
	bagimd=`cat $konum/talimat | grep "Depends" | cut -d':' -f2`
	if [ -n "$bagimd" ]; then
		bagimd=`echo "$bagimd" | sed 's/,/ /g'`
		#sıralı gösterme
		#echo `echo "$bagimd" | sed 's/,/ /g'`
		#kurulu kontrollu gosterim
		for bag in $bagimd;do
			echo $bag >> "$1.gerekler.liste"
		done
	fi
	echo "$1" >> "$1.gerekler.liste"
	
}

ters_bagimli(){
	local ara
	ara=" $1 "
	sy=`grep -o "/" <<<"$talimatname_dizin" | wc -l`
	grep -rli "$ara" "$talimatname_dizin" | cut -d'/' -f`expr $sy + 3`
}

silme_kurban_kontrol(){
	local dizin
	for f in $(cat $1) ; do 
		dizin="${f%\'}"
		dizin="${dizin#\'}"
		if [ -d "$dizin" ];then
			for g in `ls "$dizin"` ; do 
				if ! grep -Fxq " '$dizin/$g'" "$1"
				then
					echo "$dizin/$g"
				fi
			done
		fi
	done
}

log_analiz(){
	local zaman durum
	zaman=$1
	durum=$2
	if [ -f "/var/log/mps/mps.log" ];then
		cat $logdosya | grep "$zaman" | grep "$durum" | cut -d' ' -f3
	else
		ryaz 31 "mps.log bulunamadı!"
	fi
}

kurban_kurtar(){
	local dizin paket
	paket=$1
	if [ -f /var/lib/pkg/DB/$paket/kurulan ];then
		cat /var/lib/pkg/DB/$paket/kurulan | cut -d '>' -f2 > /tmp/$paket.sil
		for f in $(cat /tmp/$paket.sil) ; do 
			dizin="${f%\'}"
			dizin="${dizin#\'}"
			if [ -d "$dizin" ];then
				for g in `ls "$dizin"` ; do 
					if ! grep -Fxq " '$dizin/$g'" "/tmp/$paket.sil"
					then
						if [ -f /tmp/$paket.kurtar ];then
							rm /tmp/$paket.kurtar
						fi
						echo " '$dizin'" >> "/tmp/$paket.kurtar"
					fi
				done
			fi
		done
		if [ -f /tmp/$paket.kurtar ];then
			mv /var/lib/pkg/DB/$paket/kurulan /var/lib/pkg/DB/$paket/ilk.kurulan
			grep -v -F -x -f "/tmp/$paket.kurtar" "/tmp/$paket.sil" > /var/lib/pkg/DB/$paket/kurulan
			ryaz 32 "$paket kurban dosyaları kurtarıldı."
		else
			ryaz 32 "$paket kurban dosyası yok."
		fi
		rm -f /tmp/$paket.sil
	else
		ryaz 31 "kurulan paket yok!"
	fi
}

ters_bagimli_kontrol(){
	ters_bagimli "$1" | sort > tersb.liste
	ls /var/lib/pkg/DB/ | sed  "/$1/d" | sort  > simdiki.liste
	comm -12 tersb.liste simdiki.liste
	rm tersb.liste simdiki.liste
}

kurulu_kontrol(){
	if [ -d "$kokdizin/var/lib/pkg/DB/$1" ];then
		echo "kurulu"
		exit 1
	fi
	echo "degil"
}

sistem_kur(){
	local spaket
	for spaket in `cat $1`;do 
		./$betikad -ik "$spaket" -kok $2;
	done
}

kaynakdizin_kontrol(){
	if [ ! -d $DERLEME_KAYNAKDIZIN ];then
		mkdir $DERLEME_KAYNAKDIZIN
	fi
}

logdizin_kontrol(){
	if [ ! -d $kokdizin$LOGDIZIN ];then
		mkdir $kokdizin$LOGDIZIN	
	fi
	if [ ! -d $kokdizin$LOGDIZIN/derleme ];then
		mkdir $kokdizin$LOGDIZIN/derleme
	fi
	if [ ! -f $kokdizin$LOGDIZIN/mps.log ];then
		touch $kokdizin$LOGDIZIN/mps.log
	fi
}

tarihce_dkontrol(){
	if [ ! -d $TARIHCE_DIZIN ];then
		mkdir $TARIHCE_DIZIN
	fi
}

temel_tarihce_kontrol(){
	if [ ! -f $TARIHCE_DIZIN/temel-pkvt.tar.lz ];then
		tarihce_olustur "temel"
	fi
}

tarihce_liste(){
	tarihce_dkontrol
	ls $TARIHCE_DIZIN/

}

tarihce_yap(){
	tarihce_dkontrol
	local t_isim
	if [ "$temel_tarihce" = "evet" ];then
		t_isim="temel"
	else
		t_isim=`date +%m-%d-%y.%H%M%S`
	fi
	tarihce_olustur "$t_isim"
}

tarihce_olustur(){
	bsdtar -P -r -f $TARIHCE_DIZIN/"$1"-pkvt.tar $VT
	lzip -9 $TARIHCE_DIZIN/"$1"-pkvt.tar
}

tarihce_yukle(){
	tarihce_dkontrol
	local islem_onay cikis
	sil_onay="h"
	if [ -f $TARIHCE_DIZIN/"$1-pkvt.tar.lz" ];then
		bsdtar -p -o -C /tmp -xf $TARIHCE_DIZIN/"$1-pkvt.tar.lz" 2>/dev/null
		ls /tmp/var/lib/pkg/DB/ > hedef.pkvt
		ls /var/lib/pkg/DB/ > simdiki.pkvt
		grep -v -F -x -f hedef.pkvt simdiki.pkvt > sil.liste
		grep -v -F -x -f simdiki.pkvt hedef.pkvt > kur.liste
		#rm hedef.pkvt simdiki.pkvt
		rm -r /tmp/var
		cikis=""
		if [ -s sil.liste ];then
			ryaz 32 "silinecekler"
			ryaz 32 "------------"
			cat sil.liste
		fi
		
		if [ -s kur.liste ];then
			ryaz 32 "kurulacaklar"
			ryaz 32 "------------"
			cat kur.liste
		fi
		if [ ! -s sil.liste ] && [ ! -s kur.liste ];then
			ryaz 32 "sistem zaten hedef durumda!"
			exit 1
		fi
		while true; do
			ryaz 34 "otomatik geri dönüşüm başlasın mı?";read -p "e veya h-> " eh
			case $eh in
				[Ee]* ) islem_onay="e"; break;;
				[Hh]* ) break;;
				* ) echo "e veya h";;
			esac
		done
		if [ "$islem_onay" = "e" ];then
			mps -os sil.liste
			mps -kurul kur.liste
			mv sil.liste silinenler.liste
			mv kur.liste kurulanlar.liste
			exit 1
		fi
		mv sil.liste sil_iptal.liste	
		mv kur.liste kur_iptal.liste	
	else
		ryaz 31 "ilgili tarihce dosyası bulunamadı!"
	fi
}

tarihce_sil(){
	tarihce_dkontrol
	if [ -f $TARIHCE_DIZIN/"$1-pkvt.tar.lz" ];then
		rm -f $TARIHCE_DIZIN/"$1-pkvt.tar.lz"
	else
		ryaz 31 "ilgili tarihce dosyası bulunamadı!"
	fi
}

sunucu_ayarla(){
	wget -q --spider "$1/paket.vt"
	yenisun="$1"
	if [ $? -eq 0 ]; then
		sed -i.bak 's/^\(sunucu=\).*/\1"xverix\/"/' /etc/mps.conf
		sed -i "s|xverix|$1|" /etc/mps.conf
		mps -sun
	else
		ryaz 31 "Tanımsız paket sunucusu!"
	fi
}

loglama(){
	logdizin_kontrol
	echo "$(date +'%F %T') $1" >> "$kokdizin/$LOGDIZIN/mps.log"
}

dosyadan_talimat_islem(){
	local dosya
	dosya=$1
	urlkont='(https?|ftp|file)://[-A-Za-z0-9\+&@#/%?=~_|!:,.;]*[-A-Za-z0-9\+&@#/%=~_|]'
	if [[ $dosya =~ $urlkont ]]
	then 
		ryaz 32 "talimat linkten cekilecek"
		gdosya=`mktemp`
		wget $2 $dosya -O $gdosya
		dosya=$gdosya
	fi
	if [[ $2 =~ "-6" ]]; then 
		ryaz 32 "talimat linkten cekilecek"
		gdosya=`mktemp`
		wget $2 $dosya -O $gdosya
		dosya=$gdosya
	fi
	if [ ! -f $dosya ];then
		ryaz 31 "$dosya talimat dosyasi yok!"
		exit 1
	fi
	
	local paketisim
	paketisim=`grep -ri 'name=' $dosya | cut -d'=' -f 2`
	if [ ! -n "$paketisim" ]; then
		ryaz 31 "paket ismi degiskeni bulunamadı!"
		exit 1
	fi
	if [ ! -f /root/talimatname/genel/$paketisim ];then
		mkdir /root/talimatname/genel/$paketisim
		cp -f $dosya /root/talimatname/genel/$paketisim/talimat
		ryaz 32 "$paketisim talimatı hazırlandı."
	else
		ryaz 31 "$paketisim talimatı zaten talimatnamede var!"
	fi
}

talimat_olustur(){
if [ "$1" = '?' ];then
	ryaz 34 "kullanım : mps -to paket_ismi"
else
	local name
	name=$1
	mkdir -p $name
	tee "$name/talimat" > /dev/null <<EOF
# description:x
# url:x
# packager:milisarge
# Depends on: 

name=$name
version=1
release=1
source=()

build () {
	cd name-version
	./autogen.sh
	./configure --prefix=/usr
	make
	make DESTDIR=$PKG install
}

EOF
	ryaz 34 $name "talimatı oluşturuldu."
fi
}

git_guncelle() {
	kaynakdizin_kontrol
	gitayar_kontrol
	cd $DERLEME_KAYNAKDIZIN
	#git sunucudan guncelleme
	ryaz 33 "git sunucudan güncelleme çekiliyor."
	if [ ! -d milis.git ];then
		git clone $git_sunucu milis.git
		rsync -av /sources/milis.git/rootfs/* /
	else
		cd milis.git
		git pull
	fi
	cd `dirname $talimatname_dizin`
	ryaz 33 "yerele eşitleniyor."
	rm -r $talimatname_dizin
	mkdir -p $talimatname_dizin
	rsync -aviz -q --delete $DERLEME_KAYNAKDIZIN/milis.git/talimatname/ $talimatname_dizin
	rm -r `dirname $talimatname_dizin`/bin/*
	rsync -aviz -q --delete $DERLEME_KAYNAKDIZIN/milis.git/bin/ `dirname $talimatname_dizin`/bin
	rm -r `dirname $talimatname_dizin`/ayarlar/*
	rsync -aviz -q --delete $DERLEME_KAYNAKDIZIN/milis.git/ayarlar/ `dirname $talimatname_dizin`/ayarlar
	#ikili dosyaların /usr/bin altına kısayol atılması
	for i in /root/bin/*; do
		j=`basename $i`
		if [ ! -f /usr/bin/$j ];then
			ln -s /root/bin/$j /usr/bin/$j
		fi
	done
}

git_proje_kur(){
	local proje proj_dizin git_link
	git_link="https://github.com/milisarge"
	proje="$1"
	proj_dizin="/opt"
	mkdir -p $proj_dizin
	if [ -d "$proj_dizin/$proje" ];then
		cd $proj_dizin/$proje
		git pull
		
		if [ -f mops ];then
			. mops
			mops_gun
		fi	
	else
		git clone "$git_link/$proje" "$proj_dizin/$proje"
		cd $proj_dizin/$proje
		
		if [ -f mops ];then
			. mops
			mops_kur
			mops_sil
			mops_gun
		fi
	fi
	
}	

paketvt_guncelle(){
	temel_tarihce_kontrol
	wget -q --spider "$sunucu""paket.vt"
	#if wget -P /tmp -q "$sunucu""paket.vt" > /dev/null; then
	if [ $? -eq 0 ]; then	
		ryaz 32 $sunucu
		ryaz 32 "paket veritabanı guncellenıyor." "$paketdepo""paket.vt"
		if [ -f "$paketdepo""paket.vt" ];then
			mv "$paketdepo""paket.vt" "$paketdepo""paket.vt.eski"
		fi
		wget -q --show-progress -P "$paketdepo" "$sunucu""paket.vt"
		#rm /tmp/paket.vt*
		mps -kudo
		exit 1
	fi
	ryaz 31 "paket veritabanı guncelleme olumsuz."
}

talimat_bilgi(){
	local konum HEAD
	konum="`find "$talimatname_dizin" -name $1`"
	HEAD=`grep -B 12 "build()" $konum/talimat`
	echo $HEAD
}

sistem_kontrol(){
	paketvt_kontrol
	sunucu_kontrol
}

sunucu_kontrol(){
	wget -q --spider $sunucu
	if [ $? -eq 0 ]; then
		ryaz 32 "paket sunucu aktif"
	else
		ryaz 31 "sunucu erişim dışı"
		exit 1
	fi
}	

gitayar_kontrol(){
	if [ ! -f /root/.gitconfig ];then
		git_ssl_iptal
		git_otokimlik
	fi
}

kurulum_dogrulama(){
	for kuruland in `ls $VT`
	do
		if [ ! -f "$VT/$kuruland/kurulan" ]; then
			ryaz 32 "$kuruland hasarlı kurulum tesbiti!"
			rm -r $VT/$kuruland
			mps -i $kuruland
			mps -k "$paketdepo/$kuruland"*.mps.lz
			ryaz 32  "$kuruland hasarlı kurulum onarıldı."
		fi
	done
}

kurulum_dosya_listele(){
	cat "$VT/$1/kurulan"
}

paketvt_kontrol(){
	mkdir -p /depo/paketler
	if [ ! -f /depo/paketler/paket.vt ];then
		touch /depo/paketler/paket.vt
	fi
}

pvt_olustur(){
	if [ ! -f paket.vt ];then
		touch paket.vt
	fi
	if [ -f "paket.vt" ];then
			mv "paket.vt" "paket.vt.eski"
	fi
	ryaz 32 "paket.vt oluşturuluyor...."
	for paket in `ls *.mps.lz`
	do
		paketad="`echo $paket|cut -d "#" -f1`"
		shaek=`sha1sum $paket`
		
		echo $paketad $shaek  >> paket.vt  
	done
	ryaz 32 "paket.vt oluşturuldu."
}

paket_indir(){
	local pkt
	if [ -f "$paketdepo""paket.vt" ];then
		pkt=`cat "$paketdepo""paket.vt" | grep "^$1 " | cut -d' ' -f3`
		ekontdeg=`cat "$paketdepo""paket.vt" | grep "^$1 " | cut -d' ' -f2`
		cpaket="${pkt/'#'/'%23'}"
		wget  -nc -q --show-progress -P "$paketdepo" "$sunucu$cpaket"
		if [[ "$?" != 0 ]]; then
			ryaz 31 "indirme hatalı"
		else
			ryaz 34 "$1 indirildi"
		fi
		mkontdeg=`sha1sum "$paketdepo$pkt" | cut -d' ' -f1`
		if [ "$ekontdeg" != "$mkontdeg" ];then
			ryaz 31 "sha1sum uyusmaslik tesbit edildi,paket tekrar indiriliyor."
			rm -f "$paketdepo$pkt" 
			paket_indir "$1" 
		fi
	fi
	
	
}

yardim(){
 echo "yardim"
}


ayarlar() {
	
	while [ "$1" ]; do
		case $1 in
			-i|--indir)
				ikaynak="ag" 
				kurulum_onay="olumsuz";;
			-ik|--inku)
				if [ "$3" == "-kok" ] && [ -d "$4" ]; then
					kokdizin="$4"
				fi
				ikaynak="ag" ;;
			-ikz|--inkuzo)
				ikaynak="ag" 
				tekrarkur="evet" ;;
			-k|--yrku)
				if [ "$3" == "-kok" ] && [ -d "$4" ]; then
					kokdizin="$4"
					tekrarkur="evet"
				fi
				ikaynak="yerel" ;;
			-s|sil)
				if [[ "$2" == "py-"* ]]; then
					pypaket=`echo "$2" | cut -d'-' -f 2`
					echo $pypaket "pip2 ile silinecek"
					pip uninstall $pypaket
					exit 1
				fi
				if [[ "$2" == "py3-"* ]]; then
					pypaket=`echo "$2" | cut -d'-' -f 2`
					echo $pypaket "pip3 ile silinecek"
					pip3 uninstall $pypaket
					exit 1
				fi
				paket_sil "$2" ;;
			-sz|zorsil)
				paket_sil "$2" "evet";;	
			-S|silgrub)
				mps -bbd "$2"
				paket_sil_oto_onayli "$2.gerekler.liste" ;;
			-pa|ara)
				paket_ara "$2" ;;
			bul)
				kelime_bul "$2" ;;
			-d|--pkde)
				zorla_derle="yok"
				kurulum_onay="olumsuz"
				paket_derle "$2" ;;
			-zd|--pkzde)
				zorla_derle="evet"
				kurulum_onay="olumsuz"
				paket_derle "$2" ;;
			odkp)
				oto_derle_kur_paketle "$2" ;;	
			-dk|--pkdk)
				paket_derle "$2" ;;	
			-derlist)
				paket_derle_liste "$2" ;;	
			-derle)
				paket_derle_kur "$2" ;;	
			-ok|--pkok)
				paket_kur_oto "$2" ;;
			-okz)
				paket_kur_oto_zorla "$2" ;;	
			-okl|--pkokl)
				paket_kur_liste "$2" ;;
			-oklz)
				paket_kur_liste_zorla "$2" ;;	
			-kh)
				local templist
				templist=`mktemp`
				ls *.mps.lz > $templist
				mps -okz -H $templist ;;
			-ko|--pkko)
				paket_kur_oto2 "$2" ;;	
			-kuruld)
				paket_inkur_liste_direk "$2" ;;
			-kurul)
				paket_inkur_liste "$2" ;;
			-kur)
				paket_inkur_oto "$2" ;;	
			 kur)
				if [[ "$2" == "py-"* ]]; then
					pypaket=`echo "$2" | cut -d'-' -f 2`
					echo $pypaket "pip2 ile kurulacak"
					pip install $pypaket
					exit 1
				fi
				if [[ "$2" == "py3-"* ]]; then
					pypaket=`echo "$2" | cut -d'-' -f 2`
					echo $pypaket "pip3 ile kurulacak"
					pip3 install $pypaket
					exit 1
				fi
				if [[ "$2" == *"mps.lz"* ]]; then
					if [ "$3" == "-kok" ] && [ -d "$4" ]; then
						kokdizin="$4"
						tekrarkur="evet"
					fi
					ikaynak="yerel" 
				else
					paket_inkur_oto "$2" 
				fi ;;
			gitkur)
				git_proje_kur "$2" ;;
			kurkos)
				local pkt
				pkt="`find $talimatname_dizin -name $2`"
				if [ -f  $pkt/$2.kur-kos ];then
					bash $pkt/$2.kur-kos
				else
					ryaz 31 "$2 kur-kos yok!"
				fi ;;
			koskur)
				local pkt
				pkt="`find $talimatname_dizin -name $2`"
				if [ -f  $pkt/$2.kos-kur ];then
					bash $pkt/$2.kos-kur
				else
					ryaz 31 "$2 kos-kur yok!"
				fi ;;
			silkos)
				local pkt
				pkt="`find $talimatname_dizin -name $2`"
				if [ -f  $pkt/$2.sil-kos ];then
					bash $pkt/$2.sil-kos
				else
					ryaz 31 "$2 kur-kos yok!"
				fi ;;
			kossil)
				local pkt
				pkt="`find $talimatname_dizin -name $2`"
				if [ -f  $pkt/$2.kos-sil ];then
					bash $pkt/$2.kos-sil
				else
					ryaz 31 "$2 kur-kos yok!"
				fi ;;
			-kdl)
				if [ ! "$2" ]; then
					ryaz 31 "paket ismi eksik"
					exit 1
				fi
				kurulum_dosya_listele "$2" ;;	
			-pak|--paketle)
				if [ ! "$2" ]; then
					ryaz 31 "paketlenecek dizin ismi eksik"
					exit 1
				fi
				yeniden_paketle "$2" ;;
			-psk|--paksiskur)
				if [ ! "$2" ]; then
					ryaz 31 "paket liste yok"
					exit 1
				fi
				if [ ! "$3" ]; then
					ryaz 31 "hedef dizin yok"
					exit 1
				fi
				sistem_kur "$2" "$3" ;;
			-po)
				pvt_olustur ;;
			-os|--pkos)
				if [ ! "$2" ]; then
					ryaz 31 "silme listesi yok"
					exit 1
				fi
				paket_sil_oto "$2" ;;	
			-kl|--kurulu-liste)
				ls $VT ;;	
			-dly|--drly)
				if [ -f tumbag.liste ];then
					mv tumbag.liste tumbag.liste.eski
				fi
				if [ -f bag.liste ];then
					mv bag.liste bag.liste.eski
				fi
				touch tumbag.liste 
				touch bag.liste 
				derleme_listyap "$2" ;;	
			-dlb|--drlb)
				derleme_listbilgi "$2";;	
			-b|--pkbl)
				paket_bilgi "$2" ;;
			#sunucu bilgisi alma
			-sun|sunucu)
				ryaz 32 $sunucu ;;
			sun)
				if [ ! "$2" ]; then
					ryaz 31 "sunucu bilgi eksik"
					exit 1
				fi
				sunucu_ayarla  "$2" ;;
			-bb|--pkbb)
				bagimli_bilgi "$2" | column -t;;
			-bbd)
				bagimli_bilgi_dosyala "$2" ;;
			-tb|--pktb)
				ters_bagimli "$2" ;;
			-tbk|--pktbk)
				ters_bagimli_kontrol "$2" ;;
			-talb|--talb)
				talimat_bilgi "$2" | column -t;;
			-to)
				if [ ! "$2" ]; then
					ryaz 31 "talimat ismi eksik"
					exit 1
				fi
				talimat_olustur "$2" ;;
			log)
				local logyardim
				logyardim="mps log zaman durum (ör: mps log 2017-01-01 silindi)"
				if [ ! "$2" ]; then
					ryaz 31 "zaman parametresi eksik"
					ryaz 32 $logyardim
					exit 1
				fi
				if [ ! "$3" ]; then
					ryaz 31 "durum parametresi eksik"
					ryaz 32 $logyardim
					exit 1
				fi
				log_analiz "$2" "$3" ;;
			guncelle)
				mps -GG && mps -G ;;
			-Ggit|-GG)
				git_guncelle ;;
			-G|--pvtg)
				paketvt_guncelle
				mps -kudo ;;
			#komple kurulu sistemin guncellenmesi
			-GS)
				sistem_guncelle ;;
			#tekil paket guncelleme-single package updating
			-g|--pkgu)
				if [ ! "$2" ]; then
					ryaz 31 "paket ismi eksik"
					exit 1
				fi
				paket_guncelle "$2";;
			#bagimliliklariyla beraber paket guncelleme-package updating with depencies
			-go|--pkgo)
				if [ ! "$2" ]; then
					ryaz 31 "paket ismi eksik"
					exit 1
				fi
				paket_guncelle_oto "$2";;
			-kk|--kurulu-kontrol)
				if [ ! "$2" ]; then
					ryaz 31 "paket ismi eksik"
					exit 1
				fi
				ryaz 31 `kurulu_kontrol "$2"`;;
			-kudo)
				kurulum_dogrulama ;;
			-kdk)
				kurban_kurtar $2 ;;
			-suko)
				sunucu_kontrol ;;
			-pot)
				paketsiz_talimatlar ;;
			-dota)
				dosyadan_talimat_islem $2 $3 ;;
			-cf|--config-file)
				if [ ! "$2" ]; then
					echo "ayardosyası gerek $1"
					exit 1
				fi
				ayar_dosyasi="$2"
				shift ;;
			-tro)
				tarihce_yap ;;
			-trot)
				temel_tarihce="evet"
				tarihce_yap ;;
			-try)
				if [ ! "$2" ]; then
					ryaz 31 "tarihce dosyasi eksik $1"
					exit 1
				fi
					tarihce_yukle "$2"
					shift ;;
			-trl)
				tarihce_liste ;;
			-trs)
				if [ ! "$2" ]; then
					ryaz 31 "parametre eksik $1"
					exit 1
				fi
					tarihce_sil "$2"
					shift ;;
			-v)
				ryaz 33 "$betikad $versiyon  $iletisim" 
				exit 0 ;;
			-h|--help)
				yardim
				exit 0 ;;
			
		esac
		shift
	done
}

yardim() {
    cat <<_EOF
    
$betikad $versiyon Milis Paket Sistemi

Secenekler:
 -G			ikili paket veritabanını günceller
 -Ggit			git sunucusundan talimatname ve sistem gunceller
 -kur paket_ismi	ilgili paketi bagimliliklariyla agdan cekip kurar
 -s paket_ismi		ilgili paketi kaldirir
 -k paket_ismi		yereldeki paketi bagimliliksiz kurar
 -kl			kurulu paket listesini verir
 -kk paket_ismi		ilgili paketin kurulu olma durumunu verir
 -d paket_ismi		ilgili paketin talimat dosyasına göre 
			sadece derler,paketler
 -derle paket_ismi	ilgili paketin talimat dosyasına göre bagimliliklariyla 
			beraber derler,paketler ve kurar.

_EOF
    exit 1
}

ana(){
if [ `id -u` = 0 ] ; then	
	ayarlar "$@"

	if [ "$ikaynak" = "ag" ]; then
		local kontroldeg
		kkont=`kurulu_kontrol "$2"`
		if [ "$kkont" = "degil" ] || [ "$tekrarkur" = "evet" ];then
			pkt=`cat "$paketdepo""paket.vt" | grep "^$2 " | cut -d' ' -f3` 
			if [ ! -z "$pkt" -a "$pkt" != "" ]; then
				cpaket="${pkt/'#'/'%23'}"
				ryaz 33 "agdan cekiliyor:" "$2"
				#paket sunucuda varsa
				wget -q --spider "$sunucu$cpaket"
				#if wget -P /tmp -q "$sunucu$cpaket" > /dev/null; then
				if [ $? -eq 0 ]; then
					#wget  -P "$paketdepo" "$sunucu$cpaket"
					paket_indir "$2"
					
					if [ "$kurulum_onay" = "evet" ];then
						if [ "$tekrarkur" = "evet" ];then
							paket_sil "$2" "evet"
						fi
						icerik_ekle "$paketdepo$pkt"
						exit 1
					fi
				else
					ryaz 31 "paket sunucuda yok!"
				fi
			else
				ryaz 31 "$2 paket sunucuda yok!( mps -G komutuyla güncelleme yapınız. )"
			fi
		else
			ryaz 32 "$2 paketi zaten kurulu!"
		fi
		exit 1
	fi

	if [ "$ikaynak" = "yerel" ]; then
		local silme
		pkontrol=`basename $2 | grep -w "mps.lz"`
		if [ ! -z "$pkontrol" -a "$pkontrol" != "" ]; then
			paketad=`echo "$2" | cut -d'#' -f1`	
			kkont=`kurulu_kontrol "$paketad"`
			if [ "$kkont" = "degil" ];then
				icerik_ekle "$2"
			else
				echo $tekrarkur
				if [ "$tekrarkur" = "hayir" ];then
					while true; do
						ryaz 31 "$2 paketi zaten kurulu silinip kurulsun mu?"
						read -p "e veya h -> " eh
						case $eh in
							[Ee]* ) silme="e"; break;;
							[Hh]* ) break;;
							* ) echo "e veya h";;
						esac
					done
				fi
				if [ "$silme" = "e" ];then
					ryaz 33 "silinecekelerin kontrolu için"
					paket_sil "$paketad"
					icerik_ekle "$2"
				fi
			fi
		else
			ryaz 31 "yerelde mps paketi bulunamadı."
		fi
	fi
else
	sudo mps "$@"
fi
}
ana "$@"


#31 kirmizi
#32 yesil
#33 sari
#34 mavi
#34 mor