milis/bin/mps

416 lines
8.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
. /etc/mpsd.conf
versiyon="0.1"
paketdepo="/depo/paketler/"
sunucu="192.168.3.193:8000/paketdepo/"
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`
echo $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
tar xf $1 -C $kokdizin &&
mkdir -p /var/lib/pkg/DB/"$paketad" &&
mv $kokdizin/.MTREE /var/lib/pkg/DB/"$paketad"/files &&
mv $kokdizin/.META /var/lib/pkg/DB/"$paketad"/META &&
#kur-kos calistirilmasi
if [ -f $kokdizin.POST ];then
bash $kokdizin.POST
rm $kokdizin.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
if [ -f /etc/ld.so.conf ];then
ldconfig
fi
echo $paketad" paketi kuruldu."
}
paket_sil(){
local paket kkont sil_onay
if [ -f $dokunulmaz ];then
kkont=`kurulu_kontrol "$1"`
if [ "$kkont" = "kurulu" ];then
paket="$1"
echo $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" &&
echo $paket" paketi silindi."
fi
rm -f /tmp/$paket.sil
else
echo "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_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(){
echo "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(){
if [ ! -d $PKGMK_SOURCE_DIR ];then
mkdir $PKGMK_SOURCE_DIR
fi
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" ];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"
}
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."
}
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" ;;
-s|--pksl)
paket_sil "$2" ;;
-d|--pkde)
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" | column -t;;
-b|--pkbl)
paket_bilgi "$2" ;;
-bb|--pkbb)
bagimli_bilgi "$2" | column -t;;
-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_sil "$paketad"
icerik_ekle "$2"
fi
fi
else
echo "yerelde mps paketi bulunamadı."
fi
fi
}
ana "$@"