Sida 1 av 1

Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 14:16
av CryingFreeman
Jag sitter och klurar på ett problem.

Jag behöver få fram en lista på installerade paket på en maskin. Listan får inte ha någon redundans, dvs. de paket som står där ska kunna installera ett komplett system utan att ett paketnamn används två gånger utan istället tillfredsställs genom dependencies. Istället för att ange alla paket som finns i ubuntu-desktop ska jag alltså bara behöva ange ubuntu-desktop i listan.

Syftet med detta är att få en så komprimerad lista som möjligt.

En alternativ lösning på problemet skulle kunna vara att ha en komplett lista, för att sedan stryka paket utifrån dependencies till metapaket som ubuntu-desktop, build-essential, ubuntu-restricted-extras osv.

Jag hoppas att ni förstår hur jag menar. Jag är ingen scriptkung, men jag börjar inse att det är dags att lära sig ...

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 14:23
av Osprey
Att få fram en lista över vilka paket som är installerade på en burk är inga större problem, men att se eller ta reda på vilka som är installerade direkt och vilka som är det via beroenden är nog betydligt värre... :-\

Men det kanske finns någon som vet...?

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 14:40
av CryingFreeman
Hade en tanke om att man kanske skulle kunna använda apt-rdepends, men jag vet inte riktigt hur man ska kunna få fram informationen som jag vill åt..

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 15:33
av Osprey
CryingFreeman skrev:Hade en tanke om att man kanske skulle kunna använda apt-rdepends, men jag vet inte riktigt hur man ska kunna få fram informationen som jag vill åt..
Hmmm, kikade lite på det och det kanske går... ska titta lite mer på det, för det vore himla spännande om det går... O0

Provade förresten att köra rdepends på coreutils just nu, och det blev en hiskelig lista... men med lite sortering löser man det mesta... ;)

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 18:09
av Konservburk
CryingFreeman skrev:En alternativ lösning på problemet skulle kunna vara att ha en komplett lista, för att sedan stryka paket utifrån dependencies
Det borde ju gå att angripa problemet från det hållet. Så låt oss utgå ifrån en komplett lista över alla installerade paket:

Kod: Markera allt

dpkg --get-selections
Min tanke är att vi sedan går igenom listan paket för paket och helt enkelt testar vilka som går att avinstallera rakt av utan att det finns andra paket som kommer att sakna dem:

Kod: Markera allt

dpkg --no-act --purge
Detta är då bara en simulerad avinstallation och det borde endast lyckas för de paket som inte är beroenden till något/några andra installerade paket. Det blir förstås en massa skräp-utdata som vi inte är intresserade av, men den kan vi lätt göra oss av med genom att stänga stdout och stderr:

Kod: Markera allt

>&- 2>&-
Sen ska det bara vara att skriva ut paketnamnet i de fall den simulerade avinstallationen lyckades. Se efter vad som finns i $? eller använd en vanlig if-sats eller kör helt enkelt med && rakt av. Jag tänker mig något i den här stilen:

Kod: Markera allt

dpkg --get-selections |
while read pkg state
do dpkg --no-act --purge "$pkg" >&- 2>&- && echo "$pkg"
done
Kanske inte världens snabbaste metod, men den borde åtminstone ge det resultat du är ute efter.

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 21:07
av CryingFreeman
Funkade inte riktigt som det var tänkt (ingen output alls), men jag ska fortsätta att labba lite. :) Tack för hjälpen!

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 21:10
av Konservburk
CryingFreeman skrev:Funkade inte riktigt som det var tänkt (ingen output alls), men jag ska fortsätta att labba lite. :) Tack för hjälpen!
Lät du den köra klart? Den var inte jättesnabb när jag testade.

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 22:43
av Osprey
Jag provade och den skapar en rätt snygg lista, men den fick med en hel del lib:ar (dvs. libxxxx),,,

Rimligtvis borde de allra flesta av dessa vara installerade för att något program är beroende av dem, istället för att de som det verkar är explicit installerade eftersom inget verkar vara beroende av dem...

Vad kan vara orsaken till detta..?

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 23:07
av andol
Osprey skrev:Jag provade och den skapar en rätt snygg lista, men den fick med en hel del lib:ar (dvs. libxxxx),,,

Rimligtvis borde de allra flesta av dessa vara installerade för att något program är beroende av dem, istället för att de som det verkar är explicit installerade eftersom inget verkar vara beroende av dem...

Vad kan vara orsaken till detta..?
Gissningsvis så är de definierade i default-seeden alternativt installerade som ett Recommends.

Re: Få fram minsta antalet paket som behöver installeras

Postat: 04 maj 2010, 23:09
av Konservburk
CryingFreeman skrev:Funkade inte riktigt som det var tänkt (ingen output alls), men jag ska fortsätta att labba lite. :) Tack för hjälpen!
Jag upptäckte just att den av någon anledning inte gillar när man stängt stdout utan att vara root... vilket är ganska konstigt. Kör in skiten i /dev/null istället så borde det gå bättre för dig:

Kod: Markera allt

dpkg --get-selections |
while read pkg state
do dpkg --no-act --purge "$pkg" >/dev/null 2>&1 && echo "$pkg"
done

Re: Få fram minsta antalet paket som behöver installeras

Postat: 05 maj 2010, 07:38
av Ulsak
Hepp, jag hade förmånen att kunna hänga med min idol konservburk på releaseträffen nyssens. Det är också alltid roligt att se honom i aktion här på forumet. Jag ville också ta mig en liten kik på hur det ser ut för min del med installerade paket så daskade in detta kommando:

Kod: Markera allt

dpkg --get-selections
Initialt såg det ju bra om inte det vore att jag kan alfabetet även för de bokstäver som kommer före "O" . I själva verket verkar det som om alla paket som borde listats före openoffice.org-hyphenation har klippts av. Vad gör jag för fel?

Re: Få fram minsta antalet paket som behöver installeras

Postat: 05 maj 2010, 07:43
av Osprey
Ulsak skrev:Initialt såg det ju bra om inte det vore att jag kan alfabetet även för de bokstäver som kommer före "O" . I själva verket verkar det som om alla paket som borde listats före openoffice.org-hyphenation har klippts av. Vad gör jag för fel?
Det är inte så enkelt att de bara "scrollar upp över kanten"..?

Prova isåfall med:

Kod: Markera allt

dpkg --get-selections | more
Eller för den delen less om du vill...

Re: Få fram minsta antalet paket som behöver installeras

Postat: 05 maj 2010, 07:49
av Ulsak
less is more.. :) ( ja, jag tycker fortfarande det är roligt) more gjorde jobbet...men jag är lite smådum och försökte flagga less, insåg inte att det ska vara pipe.

Re: Få fram minsta antalet paket som behöver installeras

Postat: 05 maj 2010, 07:59
av dmz
Ulsak skrev: Initialt såg det ju bra om inte det vore att jag kan alfabetet även för de bokstäver som kommer före "O" . I själva verket verkar det som om alla paket som borde listats före openoffice.org-hyphenation har klippts av. Vad gör jag för fel?
Givet att du scrollade upp och det tog stopp, så har din buffer i terminalen tagit slut.
Gör så som osprey sade och använd en pager, t.ex less eller more.

@Osprey: less is more then less, and most is most. :)
Jag föredrar dock vim själv eftersom man får alla fina funktioner gratis även i sin pager då.

Re: Få fram minsta antalet paket som behöver installeras

Postat: 05 maj 2010, 17:49
av CryingFreeman
Konservburk skrev:
CryingFreeman skrev:Funkade inte riktigt som det var tänkt (ingen output alls), men jag ska fortsätta att labba lite. :) Tack för hjälpen!
Jag upptäckte just att den av någon anledning inte gillar när man stängt stdout utan att vara root... vilket är ganska konstigt. Kör in skiten i /dev/null istället så borde det gå bättre för dig:

Kod: Markera allt

dpkg --get-selections |
while read pkg state
do dpkg --no-act --purge "$pkg" >/dev/null 2>&1 && echo "$pkg"
done
Det är så j-vla underbart att ha privilegiet att få hänga med alla begåvade människor som finns på det här forumet! :D

Funkade ju klockrent!