faSTart

Witold Filipczyk juandon w poczta.onet.pl
Czw, 10 Sty 2002, 13:27:54 CET


Kiedyś pisałem jak chciałbym, żeby wyglądała instalacja.
Tu zamieszczam przykładowe skrypty:
---model01.sh---
#!/bin/sh
a=1
read nr
while [ -n "$nr" ]
do
	while [ $a -lt $nr ]
	do
		echo 0
		let a=a+1
	done
	echo 1
	read nr
done
------
---lista.sh---
#!/bin/sh
echo "<menu width=70 height=20 id=packages>"
a=1
read name install
while [ -n "$name" ]
do
	echo "<item id=$a checked=${install:-0}>$name"
	let a=a+1
	read name install
done
echo "</menu>"
echo "<button>"
------
---scal.sh---
#!/bin/sh
scal () {
	sorted=""
	result="$result $1"
	linia=`head -n $1 dependencies | tail -n 1`
	shift
	for i in $linia
	do
		while [ $1 ]
		do
			if [ $1 -gt $i ]
			then
				sorted="$sorted $1"
				shift
			elif [ $1 -eq $i ]
			then
				shift
				break
			else break
			fi
		done
		sorted="$sorted $i"
	done
	sorted="$sorted $@"
}

# lineno - number of current line	
# result - numbers of packages to install

eval `cat coinst | ./model01.sh | paste spis - | ./lista.sh | dml`
sorted=""
for i in $packages
do
	sorted="$i $sorted"
done

result=""
while [ "$sorted" != " " ]
do
	scal $sorted
#	echo $sorted
done

echo $result
-------

W pliku 'spis' znajdują się posortowane według ważności nazwy pakietów
lub cokolwiek innego co można wyświetlić.

W pliku 'coinst' numery pakietów z pliku 'spis', które chcemy zainstalować
domyślnie.

W pliku 'dependencies' znajdują się zależności:
W linii N znajdują się numery pakietów od których bezpośrednio zależy
pakiet nr N posortowane malejąco lub nic jeśli pakiet jest niezależny.
Niech w linii N będą C B A.  Spełniają one zależność N>C>B>A, np. N=15
i w 15 linii:
13 12 7 5

Odpala się program ./scal.sh i na wyjściu dostaje numery pakietów, które
trzeba zainstalować (teraz są uporządkowane malejąco, ale odwrócić to to
żaden problem).
Z numerów pakietów wygenerować plik z nazwami pakietów do zainstalowania
to też pryszcz.

Teraz to jest przygotowane do wersji "izi".  W przypadku standard
w niektórych miejscach przydałyby się radio-buttons, ale nie wiem jak
to zrobić w dml-u.
HINT: checked może mieć dużo wartości (np. parzysta>0) oznacza grupę,
a nieparzysta (parzysta+1) wybrany radio-button.

Skrypty (programy) generujące pliki 'spis' i 'dependencies' też zrobię,
chyba że ktoś napisze je wcześniej.

WF



Więcej informacji o liście dyskusyjnej pld-installer