#!/bin/bash . /etc/mpsd.conf . /root/bin/fonks.sh versiyon="0.4" iletisim="milisarge@gmail.com" paketdepo="/depo/paketler/" sunucu="192.168.1.66:8000/" #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" lokal="tr" docsil="evet" yerelsil="evet" 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 kkont=`kurulu_kontrol "$1"` if [ "$kkont" = "kurulu" ];then if [ -f "/var/lib/pkg/DB/$paket/kurulan" ];then 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." fi rm -f /tmp/$paket.sil else ryaz 31 "kritik mesaj:kurulanlar dosyası yok." fi else ryaz 32 "paket zaten kurulu değil!" fi } paket_bilgi(){ 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 } 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"` for bagim in $bagimlist;do if [ "`cat tumbag.liste | grep $bagim`" != "$bagim" ];then derleme_listyap "$bagim" fi done #if [ "`cat tumbag.liste | grep $1`" != "$1" ];then # echo "tumbag.liste yazılıyor:" "$1" # echo "$1" >> tumbag.liste #fi if ! grep -Fxq "$1" tumbag.liste then # echo "pas" #else 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 } 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" > /dev/null && mps -derlist bag.liste } paket_kur_oto(){ 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(){ local kpkt pkt pak for kpkt in `cat $1`;do for pkt in `ls $kpkt* | cut -d'#' -f1`;do pak=`ls "$pkt#"*` mps -k2 "$pak" done done } #otomatik kontrollu kur paket_kur_oto2(){ mps -dly "$1" > /dev/null && mps -ok bag.liste } paket_inkur_liste(){ local kpkt pkt pak for kpkt in `cat $1`;do mps -ik "$kpkt" done } #otomatik kontrollu kur paket_inkur_oto(){ mps -dly "$1" > /dev/null && paket_inkur_liste bag.liste rm bag.liste tumbag.liste } paket_sil_oto(){ local spkt for spkt in `cat $1`;do oto_silme="evet" paket_sil "$spkt" "$oto_silme" done } 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`" 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 } 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`" } 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 } 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 } 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 bsdtar -P -r -f $TARIHCE_DIZIN/"$t_isim"-pkvt.tar $VT lzip -9 $TARIHCE_DIZIN/"$t_isim"-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 -vf hedef.pkvt simdiki.pkvt > sil.liste grep -vf 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 -ok 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 } loglama(){ logdizin_kontrol echo "$(date +'%F %T') $1" >> "$kokdizin/$LOGDIZIN/mps.log" } 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 else cd milis.git git pull fi ryaz 33 "yerele eşitleniyor." rm -r $talimatname_dizin/* rsync -a $DERLEME_KAYNAKDIZIN/milis.git/talimatname/ $talimatname_dizin rm -r `dirname $talimatname_dizin`/bin/* rsync -a $DERLEME_KAYNAKDIZIN/milis.git/bin/ `dirname $talimatname_dizin`/bin rm -r `dirname $talimatname_dizin`/ayarlar/* rsync -a $DERLEME_KAYNAKDIZIN/milis.git/ayarlar/ `dirname $talimatname_dizin`/ayarlar } paketvt_guncelle(){ wget -q --spider "$sunucu""paket.vt" #if wget -P /tmp -q "$sunucu""paket.vt" > /dev/null; then if [ $? -eq 0 ]; then 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 -P "$paketdepo" "$sunucu""paket.vt" #rm /tmp/paket.vt* 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 } 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." } 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|--pksil) paket_sil "$2" ;; -d|--pkde) zorla_derle="yok" kurulum_onay="olumsuz" paket_derle "$2" ;; -zd|--pkzde) zorla_derle="evet" kurulum_onay="olumsuz" paket_derle "$2" ;; -dk|--pkdk) paket_derle "$2" ;; -derlist) paket_derle_liste "$2" ;; -derle) paket_derle_kur "$2" ;; -ok|--pkok) paket_kur_oto "$2" ;; -okl|--pkokl) paket_kur_liste "$2" ;; -ko|--pkko) paket_kur_oto2 "$2" ;; -kurul) paket_inkur_liste "$2" ;; -kur) paket_inkur_oto "$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" ;; -bb|--pkbb) bagimli_bilgi "$2" | column -t;; -tb|--pktb) ters_bagimli "$2" ;; -tbk|--pktbk) ters_bagimli_kontrol "$2" ;; -talb|--talb) talimat_bilgi "$2" | column -t;; -Ggit|--gitgun) git_guncelle ;; -G|--pvtg) paketvt_guncelle ;; -g|--pkgu) if [ ! "$2" ]; then ryaz 31 "paket ismi eksik" exit 1 fi paket_guncelle "$2";; -kk|--kurulu-kontrol) if [ ! "$2" ]; then ryaz 31 "paket ismi eksik" exit 1 fi ryaz 31 `kurulu_kontrol "$2"`;; -suko) sunucu_kontrol ;; -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 veritabanini gunceller -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(){ ayarlar "$@" if [ "$ikaynak" = "ag" ]; then local kontroldeg kkont=`kurulu_kontrol "$2"` if [ "$kkont" = "degil" ] || [ "$tekrarkur" = "evet" ];then echo "agdan cekiliyor:" "$2" pkt=`cat "$paketdepo""paket.vt" | grep "^$2 " | cut -d' ' -f3` echo $pkt if [ ! -z "$pkt" -a "$pkt" != "" ]; then cpaket="${pkt/'#'/'%23'}" #paket sunucuda varsa wget -q --spider "$sunucu$cpaket" #if wget -P /tmp -q "$sunucu$cpaket" > /dev/null; then if [ $? -eq 0 ]; then wget -nc -P "$paketdepo" "$sunucu$cpaket" if [ -f "$paketde""popaket.vt" ];then ekontdeg=`cat "$paketdepo""paket.vt" | grep "^$2 " | cut -d' ' -f2` mkontdeg=`md5sum $pkt | cut -d' ' -f1` fi if [ "$ekontdeg" != "$mkontdeg" ];then rm -f $pkt wget -nc -P "$paketdepo" "$sunucu$cpaket" fi if [ "$kurulum_onay" = "evet" ];then if [ "$tekrarkur" = "evet" ];then paket_sil "$2" "evet" fi icerik_ekle "$paketdepo$pkt" exit 1 fi fi else ryaz 31 "paket sunucuda yok!( mps -G komutuyla güncelleme yapınız. )" fi else ryaz 31 "$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 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 } ana "$@" #31 kirmizi #32 yesil #33 sari #34 mavi #34 mor