#!/bin/bash . /etc/mpsd.conf . /root/bin/fonks.sh versiyon="0.1" paketdepo="/depo/paketler/" sunucu="192.168.3.193:8000/paketdepo/" git_sunucu="https://github.com/milisarge/malfs-milis" ikaynak="" betikad=${0##*/} kurulum_onay="evet" dokunulmaz="/etc/dokunulmaz" talimatname_dizin="/root/talimatname" kokdizin="/" icerik_ekle(){ paketad=`echo "$1" | cut -d'#' -f1` paketad=`basename $paketad` ryaz 34 $paketad" paketi kuruluyor." tar -C /tmp --extract --file=$1 .PRE 1 2> /tmp/$paketad_pre.log #kos-kur kontrolu if [ -f /tmp/.PRE ];then bash /tmp/.PRE rm /tmp/.PRE fi mkdir -p tmpk.$paketad tar xf $1 -C tmpk.$paketad && mkdir -p /var/lib/pkg/DB/"$paketad" && cp -avf tmpk.$paketad/* $kokdizin > tmpk.$paketad/kurulan && cat tmpk.$paketad/kurulan | cut -d '>' -f2 > /var/lib/pkg/DB/"$paketad"/kurulan #mv tmpk.$paketad/.MTREE /var/lib/pkg/DB/"$paketad"/files && mv tmpk.$paketad/.META /var/lib/pkg/DB/"$paketad"/META && #kur-kos calistirilmasi if [ -f tmpk.$paketad/.POST ];then bash tmpk.$paketad/.POST rm tmpk.$paketad/.POST fi #if [ -f $kokdizin.PRE ];then # rm $kokdizin.PRE #fi #if [ -f $kokdizin/.okubeni ];then # rm $kokdizin/.okubeni #fi #if [ -f $kokdizin/.README ];then # rm $kokdizin/.README #fi rm -r tmpk.$paketad if [ -f /etc/ld.so.conf ];then ldconfig fi ryaz 34 $paketad" paketi kuruldu." } paket_siles(){ local paket kkont sil_onay if [ -f $dokunulmaz ];then kkont=`kurulu_kontrol "$1"` if [ "$kkont" = "kurulu" ];then paket="$1" ryaz 34 $paket" paketi siliniyor." #while IFS='' read -r line || [[ -n "$line" ]]; do while read -r dosya do touch /tmp/$paket.sil if [[ $(grep -c $dosya $dokunulmaz) -eq 0 ]]; then echo "/$dosya" >> /tmp/$paket.sil #guvenlik amacli simdilik kapali #rm -r -f /$dosya fi done < /var/lib/pkg/DB/"$paket"/files while true; do read -p "$1 paketi kaldırılsın mı?" eh case $eh in [Ee]* ) sil_onay="e"; break;; [Hh]* ) break;; * ) echo "e veya h";; esac done 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." fi rm -f /tmp/$paket.sil else ryaz 31 "paket zaten kurulu değil!" fi else echo "kritik mesaj:$dokunulmaz dosyası yok." #tamirat cp /root/ayarlar/dokunulmaz /etc/ echo "dokunulmazlık tamiri yapıldı.,komutu yineleyiniz." fi } paket_sil(){ local paket kkont sil_onay paket="$1" if [ -f "/var/lib/pkg/DB/$paket/kurulan" ];then kkont=`kurulu_kontrol "$1"` if [ "$kkont" = "kurulu" ];then # #while IFS='' read -r line || [[ -n "$line" ]]; do cat /var/lib/pkg/DB/$paket/kurulan | cut -d '>' -f2 > /tmp/$paket.sil 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 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." fi rm -f /tmp/$paket.sil else ryaz 31 "paket zaten kurulu değil!" fi else echo "kritik mesaj:kurulanlar dosyası yok." 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 } derleme_listyap(){ bagimlist=`bagimlilar "$1"` for bagim in $bagimlist;do if [ "`cat derleme.liste | grep $bagim`" != "$bagim" ];then derleme_listyap "$bagim" fi done #if [ "`cat derleme.liste | grep $1`" != "$1" ];then # echo "derleme.liste yazılıyor:" "$1" # echo "$1" >> derleme.liste #fi if ! grep -Fxq "$1" derleme.liste then # echo "pas" #else ana="`find $talimatname_dizin -name $1`" echo ${ana#"$talimatname_dizin"} #sadece genel bagimliliklar derlenecek echo "$1" >> derleme.liste if [ -d "$talimatname_dizin/genel/$1" ];then echo "$1" >> genel.derleme.liste fi fi } derleme_listbilgi(){ ryaz 34 "yapim asamasında" } paket_derle_oto(){ for dpkt in `cat $1`;do echo $dpkt "derleniyor...." paket_derle $dpkt done } #otomatik derle kontrollu kur paket_derle_oto2(){ mps -dly "$1" > /dev/null && mps -odk genel.derleme.liste } paket_kur_oto(){ local kpkt pkt for kpkt in `cat $1`;do for pkt in `ls $kpkt* | cut -d'#' -f1`;do mps -k "$pkt#"* done done } paket_derle(){ 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 #versiyon kontrolunde acılacak #while true; do # read -p "$1 paketi zaten kurulu yine de derlensin mi?" eh # case $eh in # [Ee]* ) derleme_onay="e"; break;; # [Hh]* ) break;; # * ) echo "e veya h";; # esac #done derleme_onay="h" else derleme_onay="e" fi if [ "$derleme_onay" = "e" ];then echo "$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 ../ fi cd .. rm -r tmp."$1" else echo "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`" } kurulu_kontrol(){ if [ -d "/var/lib/pkg/DB/$1" ];then echo "kurulu" exit 1 fi echo "degil" } kaynakdizin_kontrol(){ if [ ! -d $DERLEME_KAYNAKDIZIN ];then mkdir $DERLEME_KAYNAKDIZIN fi } git_guncelle() { kaynakdizin_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." rsync -a $DERLEME_KAYNAKDIZIN/milis.git/talimatname/ $talimatname_dizin rsync -a $DERLEME_KAYNAKDIZIN/milis.git/bin/ `dirname $talimatname_dizin`/bin } paketvt_guncelle(){ wget -q --spider "$sunucu""paket.vt" #if wget -P /tmp -q "$sunucu""paket.vt" > /dev/null; then if [ $? -eq 0 ]; then echo "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 echo "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 echo "paket sunucu aktif" else echo "sunucu erişim dışı" exit 1 fi } paketvt_kontrol(){ mkdir -p /depo/paketler if [ ! -f /depo/paketler/paket.vt ];then touch /depo/paketler/paket.vt fi } yardim(){ echo "yardim" } ayarlar() { while [ "$1" ]; do case $1 in -i|--indir) ikaynak="ag" kurulum_onay="olumsuz";; -ik|--inku) ikaynak="ag" ;; -k|--yrku) ikaynak="yerel" ;; -sil|--pksl) paket_siles "$2" ;; -s|--pksil) paket_sil "$2" ;; -d|--pkde) kurulum_onay="olumsuz" paket_derle "$2" ;; -zd|--pkzde) zorla_derle="evet" kurulum_onay="olumsuz" paket_derle "$2" ;; -dk|--pkdk) paket_derle "$2" ;; -odk|--pkodk) paket_derle_oto "$2" ;; -odkk|--pkodk2) paket_derle_oto2 "$2" ;; -ok|--pkok) paket_kur_oto "$2" ;; -dly|--drly) if [ -f derleme.liste ];then mv derleme.liste derleme.liste.eski fi if [ -f genel.derleme.liste ];then mv genel.derleme.liste genel.derleme.liste.eski fi touch derleme.liste touch genel.derleme.liste derleme_listyap "$2" ;; -dlb|--drlb) derleme_listbilgi "$2";; -b|--pkbl) paket_bilgi "$2" ;; -bb|--pkbb) bagimli_bilgi "$2" | column -t;; -tb|--talb) talimat_bilgi "$2" | column -t;; -Ggit|--gitgun) git_guncelle ;; -G|--pvtg) paketvt_guncelle ;; -g|--pkgu) if [ ! "$2" ]; then echo "paket ismi eksik" exit 1 fi paket_guncelle "$2";; -kuko|--kurulu-kontrol) if [ ! "$2" ]; then echo "paket ismi eksik" exit 1 fi kurulu_kontrol "$2";; -suko) sunucu_kontrol ;; -cf|--config-file) if [ ! "$2" ]; then echo "ayardosyası gerek $1" exit 1 fi ayar_dosyasi="$2" shift ;; -v) echo "$betikad $versiyon" exit 0 ;; -h|--help) yardim exit 0 ;; esac shift done } ana(){ ayarlar "$@" if [ "$ikaynak" = "ag" ]; then echo "agdan cekiliyor:" "$2" #pkt=`cat "$paketdepo""paket.vt" | grep -w "$2" | cut -d' ' -f2` pkt=`cat "$paketdepo""paket.vt" | grep "$2"# | cut -d' ' -f2` 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" #mv /tmp/$pkt "$paketdepo" if [ "$kurulum_onay" = "evet" ];then kkont=`kurulu_kontrol "$2"` if [ "$kkont" = "degil" ];then icerik_ekle "$paketdepo$pkt" exit 1 else echo "paket zaten kurulu!" fi fi fi 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 while true; do read -p "$2 paketi zaten kurulu silinip kurulsun mu?" eh case $eh in [Ee]* ) silme="e"; break;; [Hh]* ) break;; * ) echo "e veya h";; esac done if [ "$silme" = "e" ];then paket_silyeni "$paketad" icerik_ekle "$2" fi fi else echo "yerelde mps paketi bulunamadı." fi fi } ana "$@"