milis/bin/mps

665 lines
14 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"
iletisim="milisarge@gmail.com"
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="/"
VT="/var/lib/pkg/DB"
TARIHCE_DIZIN="/var/lib/pkg/tarihce"
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 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 "------------------"
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."
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
}
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...."
zorla_derle="yok"
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 pak
for kpkt in `cat $1`;do
for pkt in `ls $kpkt* | cut -d'#' -f1`;do
pak=`ls "$pkt#"*`
mps -k "$pak"
done
done
}
#otomatik derle kontrollu kur
paket_kur_oto2(){
mps -dly "$1" > /dev/null && mps -ok genel.derleme.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`
}
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 "/var/lib/pkg/DB/$1" ];then
echo "kurulu"
exit 1
fi
echo "degil"
}
kaynakdizin_kontrol(){
if [ ! -d $DERLEME_KAYNAKDIZIN ];then
mkdir $DERLEME_KAYNAKDIZIN
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
}
log_tutma(){
echo "$(date +'%F %T') - $1 - paket" >> test.log
}
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."
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
}
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
}
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)
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" ;;
-odk|--pkodk)
paket_derle_oto "$2" ;;
-odkk|--pkodk2)
paket_derle_oto2 "$2" ;;
-ok|--pkok)
paket_kur_oto "$2" ;;
-ko|--pkko)
paket_kur_oto2 "$2" ;;
-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 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|--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
}
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
rya 31 "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
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
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