skrypt do tunningu PLD po instalacji (niedokładnie)

Przemysław Staniszewski peyrol w gmail.com
Sob, 17 Cze 2006, 15:49:14 CEST


Witajcie! :)

 Kiedyś sobie myślałem że jak będę się zajmował większą ilością
komputerów, przydała by się paczka tgz wystawiona online oraz inne
pliczki (nazwijmy je tunningowe) tgz, które po rozpakowaniu przemieniają
czystą instalację w spersonalizowaną instalację. Oczywiście nigdy nie
nadszedł taki czas - nigdy się nie zająłem żadnymi instalacjami PLD,
oprócz swojego użytku oczywiście. :( Ale.. w owym czasie gdy o tym
myślałem, popełniłem pewien skrypt.

 Wersja dla  całej instalacji siedzi w załącznika (jeszcze miałem gdzieś
wersję dla shella, niewiele się różniącą). Wiem wiem, w tym momencie
straciłem całą reputację, której nigdy nie miałem. Ale co mi tam.
Działanie jest następujące: wrzucam do katalogu bin w roocie (albo
gdziekolwiek indziej) gdzie $PATH sięga i używam : thost /etc/plik - w
tym momencie zostanie stworzony katalog /root/tune_host_spool . Znajdzie
się w nim katalog etc a później plik 'plik'. Oczywiście obydwa (etc i
plik) będą miały zachowane swoje rzeczywiste prawa.

Zalety:
* przy większej ilości komputerów nie robimy backupów całego filesystemu
(w sumie z drugiej strony przy cenach dzisiejszych nośników)
Wady:
* zmęczyłem się pisaniem emaila :/ styka

 Zatem to tyle jeśli chodzi o to co kiedyś tam zrobiłem.

Zwracam się do Was z pytaniem czy istnieje coś podobnego już w naszej
dystrybucji, obojętnie w czym napisane. Czy macie jakieś własne skrypty
do postawienia naszej dystrybucji w jak najkrótszym czasie?

Zawsze chciałem posłać maila w tej sprawie - trochę późno ale co tam.

Z drugiej strony można sobie wszystko poustawiać - wrzucić w tgz.

Pozdrawiam
-- 

Przemysław Staniszewski


-------------- następna część ---------
#!/bin/bash
# Przemysław Staniszewski peyrol w gmail.com

umask 000
TUNEDIR=${TUNEDIR:=$HOME/tune_host_spool}
TUNEEXPORT=${TUNEDIR:=$HOME/tune_host.tar.gz}

#SCIEZKA_TWORCY=""

#1 trzeba znalezc pozycje wzgledem katalogu home
# wobec tego bedzie mogl sie zaczynac od ~ lub / lub ./
# byc moze rozwijac za pomoca expr


# -- funkcje
zamien_notacje(){
Z0=`echo $1|sed -e 's#^\(.\).*#\1#'`
Z1=`echo $1|sed -e 's#^.\(.\).*#\1#'`
Z2=`echo $1|sed -e 's#^\(.\)\{2\}\(.\).*#\2#'`
Z3=`echo $1|sed -e 's#^\(.\)\{3\}\(.\).*#\2#'`
Z4=`echo $1|sed -e 's#^\(.\)\{4\}\(.\).*#\2#'`
Z5=`echo $1|sed -e 's#^\(.\)\{5\}\(.\).*#\2#'`
Z6=`echo $1|sed -e 's#^\(.\)\{6\}\(.\).*#\2#'`
Z7=`echo $1|sed -e 's#^\(.\)\{7\}\(.\).*#\2#'`
Z8=`echo $1|sed -e 's#^\(.\)\{8\}\(.\).*#\2#'`
Z9=`echo $1|sed -e 's#^\(.\)\{9\}\(.\).*#\2#'`

WL=0
GR=0
IN=0
TR=0
ETR=0
WL=0
INN=0

sprawdz(){
# $1 - dla kogo
# $2 - co
case $2 in 
	r)
	(( TR += 4 ))
	;;
	w)
	(( TR += 2 ))
	;;
	x)
	(( TR += 1 ))
	;;
	s)
	if [ "$1" == "WL" ]; then
	(( ETR += 4 ))
	else
	(( ETR += 2 ))
	fi
	;;
	t)
	(( ETR += 1 ))
	;;
	*)
	;;
esac

case $1 in
	WL)
	(( WL += TR ))
	;;
	GR)
	(( GR += TR ))
	;;
	INN)
	(( INN += TR ))
	;;
	*)
	;;
esac
TR=0
}

for i in `seq 0 3 `
do
CO=Z${i}
eval CO=\$$CO
sprawdz WL $CO
done

for i in `seq 4 6 `
do
CO=Z${i}
eval CO=\$$CO
sprawdz GR $CO
done

for i in `seq 7 9 `
do
CO=Z${i}
eval CO=\$$CO
sprawdz INN $CO
done

NOTACJA=$ETR$WL$GR$INN
chmod $NOTACJA $2
}

stworz_strukture1(){
# funckcja przyjmuje katalog za argument i sprawdza czy ten
# katalog istnieje. Tworzy sobie sciezki az znajdzie pierwszy
# istniejacy. Pozniej tworzy katalog i od najglebszej pozycji
# zmienia prawa katalogow jesli zostala ustawiona zmienna globalna
# rowniez prawa zostaja ustawione.

# czy jest sens zachowywac uprawnienia skoro przypadek uzycia 
# moze je pominac i uzyc mkdir -p . Z drugiej jednak strony
# w skrypcie działa umask i mkdir -p nie oddaje glebi cp -a (;

#	echo TEST $1
	LOKAKT=$1
	LOKNAD=`dirname $LOKAKT`
	
	if  [ -d "${LOKAKT}" ]
	then
	export SCIEZKI_KONIEC="$LOKAKT"
	else

# jesli przyjmie sie katalog w katatalogu domowym to nadrzednym bedzie
# tune. wowczas nie nalezy tworzyc a skopiowac dany katalog.
# rozwiazaniem jest rozroznienie czy podajemy katalog czy plik. Jesli
# katalog to na wejscie funckji nalezy podac nadrzedny wzgledem niego
# jesli jednak tak sie zrobi to bedzie sie sprawdzalo za 1 podejsciem
# czy istnieje katalog poziom wyzej od korzenia. dlatego trzeba w
# funkcji wywolujacej ta sprawdzac czy nie podaje sie korzenia

		(( SCIEZEK_ILOSC += 1 ))
		export SCIEZKA_TWORCY${SCIEZEK_ILOSC}="${LOKAKT}"
		# dlaczego export a nie np set? set nie zadzialallo
#		set SCIEZKA_TWORCY${SCIEZEK_ILOSC}="${LOKAKT}"
#		sleep 1
		stworz_strukture1 $LOKNAD

# ten kod zostanie wykonany po kazdym wyjsciu rekurencyjnego wywolania
# oprocz ostatniego

#		unset "$SCIEZKA_TWORCY${SCIEZEK_ILOSC}"
		AKT=$'SCIEZKA_TWORCY'"${SCIEZEK_ILOSC}"
		eval AKT=\$$AKT
# tutaj AKT zawiera polaczona sciezke i numer
		
# Tutaj powinno sie znalezc pobranie praw a nie tworzenie 
# katalogu. ustawianie ich od dolu do gory poniewaz
# moze sie zdarzyc ze odbiore sobie prawo zapisu
		
		#mkdir $AKT
		#unset SCIEZKA_TWORCY${SCIEZEK_ILOSC}
		#(( SCIEZEK_ILOSC -= 1 ))
	fi

	unset AKT
}

stworz_strukture2(){
echo "Punktem zaczepienia jest:"
echo " $SCIEZKI_KONIEC"

RUNDA=1

while [ "$RUNDA" -le "$SCIEZEK_ILOSC"  ]
do
AKT=$'SCIEZKA_TWORCY'"${RUNDA}"
eval AKT=\$$AKT
AKT1=${AKT#$TUNEDIR/}
OWNER=`ls -ldn $AKT1|sed -e 's#^[^ ]*[ ]*[0-9]\+[ ]\+\([0-9]\+\).*#\1#'`
GROUP=`ls -ldn $AKT1|sed -e 's#^[^ ]*[ ]*\([0-9]\+[ ]\+\)\{2\}\([0-9]\+\).*#\2#'`
chown $OWNER.$GROUP $AKT
zamien_notacje `ls -ld $AKT1|sed -e 's#^\(.\{10\}\).*#\1#'` $AKT


unset "SCIEZKA_TWORCY${RUNDA}"
(( RUNDA +=1 ))
done
unset SCIEZEK_ILOSC
unset AKT
}

stworz_strukture(){
export SCIEZEK_ILOSC=0
stworz_strukture1 $1 # pobranie praw
mkdir -p $1
stworz_strukture2 # ustawienie praw
}


stworz_lustro(){
# to co chcemy zachowac bez czlonu ${HOME}
CEL=${1#${HOME}/}
# odzwierciedlenie w TUNEDIR
LUSTRO="${TUNEDIR}/${CEL}"


if [ ! -d "${TUNEDIR}" ]; then
echo "Uwaga brakuje katalogu korzenia dla lustra."
mkdir -p ${TUNEDIR} && chmod 0700 "${TUNEDIR}" && echo "Utworzono."
fi

if [ -a "${LUSTRO}" ]
then 
echo 'Cel zostal wczesniej odwzorowany,nadpisac ? [t/[^t]]'
read -s -n 1 ODP

[ "$ODP" != "t" ] && echo "Moze to i lepiej." && exit 0

fi

# musi stworzyc drzewo nadrzednych plikow
# test wylapuje czy wskazuje dowiazanie na katalog czy na plik

#1) Cel znajduje sie w na poziomie katalogu domowego

	if [ "${LUSTRO}" = "${TUNEDIR}" ] ; then
	
		cp -v -a $1 ${TUNEDIR}
		# czy powinno podarzac za dowiazaniami? TAK
		
	else
#2) Cel nie znajduje sie w kat. domowym
	
		stworz_strukture `dirname ${LUSTRO}`
		echo "Queen Chamber Created [;"
		
		# kopiuje 1 kat wyzej
		cp -v -a $1 `dirname ${LUSTRO}` 
	fi
}
		
cel_nalezy_do_usera(){
SKAD=`echo $1|sed -n -e 's#^\('${HOME}'\)/.*#\1#p'`
if [ "$SKAD" != "$HOME" ]; then
echo nie czytasz ze swego katalogu domowego '('$1')'
exit 1
fi
}

funkcja_rozw1(){
COROZW=`echo $1|sed -n -e 's#^\([^/]*\).*#\1#p'`
if [ "$COROZW" == ".."  ]; then
COROZW2=`echo $1|sed -n -e 's#^.\{3\}##p'`
(( ILE +=1 ))
funkcja_rozw1 $COROZW2
fi
}

funkcja_rozw(){
ILE=0
funkcja_rozw1 $1
while [ "$ILE" -gt 0 ]
do
cd ..
(( ILE -= 1 ))
done
COROZW3=`echo $1|sed -n -e 's#^\(\.\./\)*##p'`
DOPRZEGRANIA=$PWD/$COROZW3
}

rozwin_sciezke(){
ZNAKP=`echo $1|sed -e 's#^\(.\).*#\1#'`

case $ZNAKP in
	/|~)
	DOPRZEGRANIA=$1
	;;
	..|.|*)
	funkcja_rozw $1
	;;
esac
}

while [ "$#" -gt 0 ]
do
rozwin_sciezke $1
#cel_nalezy_do_usera $DOPRZEGRANIA
stworz_lustro $DOPRZEGRANIA
shift 

done

# komentarze koncowe:
# pozostale rzeczy z kartki dorobic




Więcej informacji o liście pld-users-pl