#!/bin/bash # riippuvuudet - selvitä Redhat-asennuksen (oletuksena full install) # sisällä kustakin paketista mistä paketeistä se itse riippuu ja mitkä # paketit riippuvat siitä # # (c) 2004-02-11 Helsingin yliopisto; Launo Tuuri, Arsi Moilanen # # Mieleen tulleet tavat selvittää riippuvuudet # # - comps.packages -tiedosto asennuspuussa, sen parsiminen # # - rpm -qa --qf "%{NAME}\n" ja tulosteesta uusi syöte rpm:n # kyselymalleilla %{PROVIDES} %{FILEREQUIRE} # # tuottivat vajavaisia tuloksia ilmoittamatta kaikkia riippuvuuksia! # Menetelmäksi valittiin nyt "rpm -e --test". RPM-tietokannan suora käyttö # Perlillä tai Pythonilla olisi varmasti parempi (etenkin nopeampi?) # ratkaisu, ja sitä harkitaan seuraavissa versioissa # tulostiedostojen nimet (skripti kirjoittaa päälle) # tmp=`uuidgen` ll='lapset_lkm.txt' la='lapset_aak.txt' vl='vanhemmat_lkm.txt' va='vanhemmat_aak.txt' export tmp ll la vl va # selvitä lapset, talleta väliaikaistiedostoon # rpm -qa | sed -e 's/^\(.*\)-.*-.*$/\1/' | while read p; do printf "%-35s" $p rpm -e --test $p 2>&1 | \ sed -ne '/^\t/s/^.* \(.*\)-.*-.*$/\1/p' | sort -u | xargs echo done > $tmp # jokaisen paketin "lapset", järjestä sekä lapsien lukumäärän että # paketin nimen mukaan; listan alkioina listoja, joitten ensimmäinen alkio # on paketti ja loput lapsia # perl -ane 'push @arr, [ @F ]; END { open(LL, ">", $ENV{"ll"}) || die; @lkm = sort { $#$b <=> $#$a } @arr; for $i ( 0 .. $#lkm ) { printf LL "%4d %-28s ", $#{ $lkm[$i] }, $lkm[$i][0]; print LL " @{ $lkm[$i] }[ 1 .. $#{ $lkm[$i] }]\n"; } open(LA, ">", $ENV{"la"}) || die; @aak = sort { $a->[0] cmp $b->[0] } @arr; for $i ( 0 .. $#aak ) { printf LA "%4d %-28s ", $#{ $aak[$i] }, $aak[$i][0]; print LA " @{ $aak[$i] }[ 1 .. $#{ $aak[$i] }]\n"; } }' $tmp # jokaisen paketin "vanhemmat", järjestä sekä paketin nimen että vanhempien # lukumäärän mukaan; hashin avaimina paketteja ja arvoina lista vanhemmista # perl -ane 'for $i ( @F[1 .. $#F] ) { push( @{ $h{$i} }, $F[0] ) } END { open (VA, ">", $ENV{"va"}) || die; for $i ( sort keys %h ) { printf VA "%4d %-28s ", scalar( @{ $h{$i} } ), $i; print VA join(" ", @{ $h{$i} }), "\n"; } }' $tmp sort -rn $va > $vl # siivoa väliaikaistiedosto # rm -f $tmp