milis/bin/mps

488 lines
10 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
. /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 > /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_sil(){
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_silyeni(){
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/htop/kurulan | cut -d '>' -f2 > /tmp/$paket.sil
while true; do
ryaz 34 $paket" $1 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" ];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
}
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" ;;
-s|--pksl)
paket_sil "$2" ;;
-si|--pksil)
paket_silyeni "$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";;
-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_sil "$paketad"
icerik_ekle "$2"
fi
fi
else
echo "yerelde mps paketi bulunamadı."
fi
fi
}
ana "$@"