[megoldva] Telepített csomagok eredetük szerinti listázása

Fórumok

Üdv,

Lehet kicsit bonyolúltan fogalmaztam, de tömör akartam lenni ;)

Hogyan tudnám Debian alatt kilistáztatni a telepített csomagokat az szerint, hogy honnét (melyik repo listából) került telepítésre??

Az '/etc/apt/sources.list'-emben extraként egyedül a Debian Multimedia repo van benne. Arra lenne szükségem, hogy azokat a csomagokat ki tudjam listázni, amelyek ebből a multimedia repo-ból lettek feltelepítve.

A probléma forrása az (amellyel valszeg többen is találkoztak már), hogy a vlc videó lejátszása nem működik Debian Lenny-m alatt egy frissítés óta. A neten megtaláltam a megoldást és tudni, hogy mely csomagokat kellene eltávolítani, majd a Multimedia repo nélkül újratelepíteni, de én mégis kíváncsi lennék rá, hogyan lehetne így listázni a már telepített csomagokat.

Minden ötletet előre is köszi.
(Man oldalakban és neten sem találtam semmi infót sem a dpkg-vel, sem apt-cache-sel és hasonlókkal kapcsolatban)

Hozzászólások

grep "Package:" /var/lib/apt/lists/*Packages > ide_ird_listat.txt
Ez speciel az osszes repot nezi es kiirja egy file-ba.

Ha *Packages helyett megadod a nevet (ami szinten Packages-re vegzodik), akkor csak azt a repot nezi:
grep "Package:" /var/lib/apt/lists/http.us.debian*testing*Packages > ide_ird_listat.txt
Ez csak az amcsi Debian szerverrol, testingbol szarmazo csomagok.

grep -A2 "Package:" /var/lib/apt/lists/*Packages > ide_ird_listat.txt

Ez a neven kivul kiirja a prioritast es a szekciot is (x11, kde, admin, stb)

Ha mar kigyujtotted, onnan mondjuk egy ujabb greppel mar konnyen lehet mazsolazni (csovezni is lehet persze a grepeket, ahogy gondolod)

Nagyon köszi. Így tényleg egyszerűen tudom listázni az adott repo-ban található csomag neveket.

Viszont ezek közül ki kellene választanom a telepítettet is. Habár asszem azt le tudom scriptezni, hogy 'dpkg -l' -ben megnézem, hogy 'ii' van-e a csomag neve mellett (ha van), és akkor tudom hogy telepített.

Egyszerűbb ötlet esetleg? :)

/var/lib/dpkg/info konyvtarban van az osszes telepitett csomag (list, post/preinst, post/prerm meg anyamtyukja dolgok.) Neha itt szoktam kiloni az utkozeseket :) Pl. ha az xy csomag nem megy fel, mert az xy-1 csomagban van az /usr/share/doc/xy/copyrigth.gz , akkor az xy-1.list filebol nyugodt szivvel torlom az erre vonatkozo bejegyzest es megszunt a gond.

keresem a választ. a "vrms" sem írja ki, hogy mi települt egyéb helyről, kivéve "contrib" és "non-free".

Megoldottam végre a kérdést, köszönet a segítségért a hozzászólóknak. Írtam rá egy script-et, ami kilistázza az adott repo-ból telepített csomagokat:

szerk.: Magyarázatnak annyi, hogy csinál egy listát, ami az összes telepített csomag nevét tartalmazza, meg csinál még egyet, ami az adott repo teljes telepíthető csomag lista nevét tartalmazza, majd ezt összehasonlítja és kiírja az egyező neveket.

Megjegyzés: ha a csomagnév mindkét repo-ban megtalálható (main és multimedia pl.), akkor is kiírásra kerül.


# --------------------------------------------------
# LIST PACKAGES INSTALLED FROM PARTICULAR REPOSITORY
# --------------------------------------------------

# MULTIMEDIA LENNY (benne kell hogy legyen a sources.list-ben és kell egy update is, hogy meg legyen a lista)
# echo "deb http://www.debian-multimedia.org lenny main" >> /etc/apt/sources.list
# apt-get update


#LIST=/var/lib/apt/lists/*contrib*Packages
#LIST=/var/lib/apt/lists/*non-free*Packages
LIST=/var/lib/apt/lists/*debian-multimedia*Packages

TEMP=`mktemp -d temp_directory_for_list.XXXXXXXX`
cd $TEMP


dpkg -l | grep -i "^ii" | tr -s " " "," | cut -d"," -f2 > list1
cat $LIST | grep -i "^Package:" | tr -s " " "," | cut -d"," -f2 > list2


diff -u list1 list2 | grep "^ " | tr -d " "

cd ..
rm -rf $TEMP

Még egy megoldás, talán még jobb. Ez a script az összes olyan telepített csomag nevét kilistázza, amely NEM a main tárolóból lett telepítve:


# --------------------------------------------------
#   LIST PACKAGES INSTALLED FROM OUTSIDE OF MAIN
# --------------------------------------------------


# (main and security packages together)
LIST=/var/lib/apt/lists/*main*Packages


TEMP=`mktemp -d temp_directory_for_list.XXXXXXXX`
cd $TEMP


dpkg -l | grep -i "^ii" | tr -s " " "," | cut -d"," -f2 > list1
cat $LIST | grep -i "^Package:" | tr -s " " "," | cut -d"," -f2 > list2

diff -u list1 list2 | grep -v "^@" | grep -v "^--" | grep "^-" | cut -b2-100


cd ..
rm -rf $TEMP