[debian] check dependencies .deb-file

Pagina: 1
Acties:

  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Ik probeer een scriptje te maken, dat :

Een .deb-file controleert op dependencies en eigenlijk alleen actie onderneemt als er dependencies zijn die niet geinstalleerd zijn.

Hierna moet dan die .deb-file uitgepakt worden naar een directory.
(waarschijnlijk gewoon met dpkg -x)

Probleem is dus dat ik zonder een programma als dselect, aptitude of synaptic niet kan achterhalen hoe ik apt (dpkg) laat zoeken naar de dependencies...
Kan iemand met wat meer verstand van apt en dpkg me hier misschien mee helpen ?

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • RG
  • Registratie: Augustus 2000
  • Laatst online: 28-11-2025

RG

Lambda

De dependency info zit in het archief, dus dan zul je het toch eerst moeten uitpakken vrees ik...

[deze advertentieruimte is te koop]


  • ajvdvegt
  • Registratie: Maart 2000
  • Laatst online: 04-12-2025
Als je even op DebianPlanet.org kijkt, zie je daar een link naar een IBM-handleiding staan hoe je .debs maakt, en a.d.h. daarvan kan je ze ook vast wel weer uitpakken om de info er uit te halen die je wilt.
edit: Hmm, bij nader inzien is dat misschien niet helemaal wat je wilt, maar op deze manier kan je wel je probleem oplossen volgens mij.

[ Voor 26% gewijzigd door ajvdvegt op 07-08-2003 10:23 ]

I don't kill flies, but I like to mess with their minds. I hold them above globes. They freak out and yell "Whooa, I'm *way* too high." -- Bruce Baum


  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
kahlan:/var/cache/apt/archives# dpkg --info pstoedit_3.33-9_i386.deb 
 new debian package, version 2.0.
 size 131226 bytes: control archive= 1230 bytes.
     594 bytes,    13 lines      control              
     860 bytes,    13 lines      md5sums              
     212 bytes,     7 lines   *  postinst             #!/bin/sh
     160 bytes,    13 lines   *  preinst              #!/bin/sh
     216 bytes,     8 lines   *  prerm                #!/bin/sh
 Package: pstoedit
 Version: 3.33-9
 Section: graphics
 Priority: optional
 Architecture: i386
 Depends: libc6 (>= 2.3.1-1), libgcc1 (>= 1:3.3-1), libpstoedit0 (>= 3.33), libstdc++5 (>= 1:3.3-1), gs
 Suggests: xfig|ivtools-bin|tgif|transfig
 Installed-Size: 610
 Maintainer: J.H.M. Dassen (Ray) <jdassen@debian.org>
 Description: PostScript and PDF files to editable vector graphics converter
  pstoedit converts Postscript and PDF files to various editable
  vector graphic formats including tgif, xfig, PDF graphics, gnuplot format,
  idraw, MetaPost, GNU Metafile, PIC, Kontour and flattened PostScript.

En nee, pstoedit is op dit moment niet geinstalleerd bij mij ;)

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Sorry mensen... blijkbaar ben ik niet duidelijk geweest (terwijl ik dat toch echt dacht van wel)
Ik kan inderdaad met dpkg -I (=--info) wel bekijken wat de dependencies zijn en dan zelf controleren of ik die heb of niet, maar dat is dus niet mijn bedoeling... (ik schrijf een scriptje)

Als beste voorbeeld kan ik denk ik synaptic nemen.
In dit programma klik je op een pakket in een lijst en heb je onderaan het beeldscherm in een tab de dependencies staan. Blijkbaar kan synaptic ook ergens nagaan of ik die heb geinstalleerd (kijken via dpkg -l |less ?!) en geeft niet geinstalleerde in het rood aan...

Zoiets als dit wil ik dus op kleinere schaal doen met mijn scriptje..
Hopelijk ben ik duidelijk genoeg geweest met dit voorbeeld.
In ieder geval bedankt voor de reacties en ik hoop dat er nog meer komen ;)

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • deadinspace
  • Registratie: Juni 2001
  • Laatst online: 02-05 18:38

deadinspace

The what goes where now?

aptitude haalt die informatie (net als apt en dselect) waarschijnlijk uit /var/lib/dpkg/available .

  • moto-moi
  • Registratie: Juli 2001
  • Laatst online: 09-06-2011

moto-moi

Ja, ik haat jou ook :w

MichielioZ schreef op 07 augustus 2003 @ 14:15:
Sorry mensen... blijkbaar ben ik niet duidelijk geweest (terwijl ik dat toch echt dacht van wel)
Ik kan inderdaad met dpkg -I (=--info) wel bekijken wat de dependencies zijn en dan zelf controleren of ik die heb of niet, maar dat is dus niet mijn bedoeling... (ik schrijf een scriptje)
Dus je wel dat zelf uit kunnen zoeken ?
OK, dan moet je dus in /var/lib/dpkg/status door worstelen. In /var/lib/dpkg/available staan trouwens alle packages opgenoemd, ook degenen die niet zijn geinstalleerd.

God, root, what is difference? | Talga Vassternich | IBM zuigt


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Bedankt voor de reactie(s).
Ik heb al gezocht in /var/lib/dpkg/available...
Ik kan dus inderdaad handmatig bekijken wat de dependencies zijn van een pakket.
Mijn probleem is dus vooral : het script moet deze checken t.o.v. de geinstalleerde pakketten... (moet te doen zijn in bash, toch ?)
Misschien moet ik met "grep" werken, maar dan zou ik niet weten hoe ik de dependencies "los" van elkaar krijg.
En dan nog zou ik die weer moeten vergelijken met een file waarin alle geinstalleerde pakketten staan...
Phoeh, het klinkt moeilijker dan het waarschijnlijk hoeft te zijn...
(misschien is er zelfs al ergens een scriptje te vinden die dit doet ? Ik ga zoeken :))
Hopelijk vind ik (dankzij jullie, posters) een oplossing voor dit...

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 03-05 19:14
Uit de output van 'dpkg-deb -f <deb-file> Depends' haal je alle dependencies. Dan kun je met dpkg -s <dependency-naam> de control-fields krijgen van een dependency. Die kun je dan parsen op 'Status: install ok installed' en na de versie info uit het Version field gehaald te hebben kun je met dpkg --compare-versions checken of de goede versie geinstalleerd is.

Mag ik trouwens vragen waarom je dit scriptje wilt hebben?

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Ik gebruik dit scriptje voor "morphix-remastering" (www.morphix.org).
Ik schrijf hiervoor een script-gebaseerde manier om makkelijk de cd naar je hand te zetten.
(zie ook http://www.geocities.com/michielioz/ voor de 1ste versie)

Met morphix kan je van een programma een "module" maken, die je op de CD zet, waardoor die geladen wordt tijdens de CD-boot (het is een livecd-distro)..
Nou wil ik dus een scriptje maken, dat controleert of een .deb-file geen conflicten heeft, zodat de file uitgepakt kan worden en er zo'n "module" van gemaakt kan worden.

Ik ben er net achtergekomen dat #apt-cache depends <packagename> een output geeft van de dependencies. (zelfde als de 'dpkg-deb -f' als hierboven geopperd ?)
Op zich heb ik een beetje moeite (ben niet bepaald een debian/linux-guru) om de rest van Johannes z'n post te volgen...
Ik snap de opzet, maar zou niet weten met welke commando's ik moet beginnen in het script.
In ieder geval erg bedankt Johannes, want als ik het goed heb, heb je een oplossing gevonden ?! ;)
Ik zal m'n best doen om het te leren begrijpen ... :P

[ Voor 5% gewijzigd door MichielioZ op 07-08-2003 18:20 ]

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 03-05 19:14
Ik denk niet dat je hiervoor 'apt-cache depends' kan gebruiken. Zoals al aan de naam van het programma is te zien haalt het zijn informatie uit de cache van apt ;). Jij wil echter de informatie uit een .deb-file halen, waarvoor je toch echt dpkg-deb zult moeten gebruiken.

Maar verder begrijp ik toch nog niet helemaal wat je precies wil. Paar vraagjes:

'Remastering' is een eigen customized ISO maken met Morphix als basis?
Je wil dus checken of binnen de tree die een ISO zal worden (MD in Trom toch?) het installeren van een package geen conflicten of onvervulde dependencies zal opleveren?

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Reactie op Johannes :

Aha, en ik maar denken dat apt-cache die dependencies juist uit de .deb-file haalde...
Om op je 2 vragen terug te komen : Ja ... en Ja... :)
Als ik je vragen bekijk, begrijp je juist precies wat ik wil :P

Er is ook nog een apt-cache commando met "unmet", maar aangezien apt-cache volgens jou niet gaat werken, zal ik kijken of zoiets er ook is voor dpkg-deb.
Ik was namelijk van plan (nog geen idee hoe precies) om #apt-cache unmet | ??? : dus met een pipe voor 1 file te laten zoeken (ipv het hele systeem).
Mocht je (=Johannes), of iemand anders natuurlijk, hier iets op weten met dpkg-deb, dan houd ik me warm aanbevolen ...

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 03-05 19:14
MichielioZ schreef op 07 augustus 2003 @ 19:09:

Om op je 2 vragen terug te komen : Ja ... en Ja... :)
Als ik je vragen bekijk, begrijp je juist precies wat ik wil :P
Ik wilde het even zeker weten, voor ik verder ging. :)
Er is ook nog een apt-cache commando met "unmet", maar aangezien apt-cache volgens jou niet gaat werken, zal ik kijken of zoiets er ook is voor dpkg-deb.
Ik was namelijk van plan (nog geen idee hoe precies) om #apt-cache unmet | ??? : dus met een pipe voor 1 file te laten zoeken (ipv het hele systeem).
Mocht je (=Johannes), of iemand anders natuurlijk, hier iets op weten met dpkg-deb, dan houd ik me warm aanbevolen ...
Als je alleen met .deb-files gaat werken, dan heb je aan apt helemaal niets. dpkg handelt de .debs af, APT is een laag daarbovenop die je o.a. packages automatisch laat upgraden. Daarom kan APT ook samenwerken met RPM, dan handelt RPM ipv dpkg de low-level bestanden af. Mag ik je aanraden om iig de introductie van de APT-HOWTO te lezen?

Verder zie ik dat je chroot al gebruikt in je programma om aptitude/dselect op te starten. Waarom gebruik je chroot dan niet ook om met apt-get packages hierin te installeren? Want als je zelf dependencies gaat checken van een .deb dan ben je eigenlijk apt's werk aan het overnemen.

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Reactie op Johannes :

Je hebt helemaal gelijk !!
Ik kom er net ook zelf achter dat ik het een beetje "te" uitgebreidt heb willen aanpakken...;)
Ik kan namelijk gewoon in de chroot #apt-get install -b <packagename> doen en dan download ie gelijk alle dependencies (als het goed is wel :)).

Enige probleempje wat overblijft is, om bijvoorbeeld 3 .deb-files uit te pakken naar 1 directory... dit gaat natuurlijk wel, maar dan moet ik alle pakketten los selecteren... '*.deb' werkt namelijk niet voor 'dpkg -x' ... enig idee ?
(Ik weet straks natuurlijk niet welke .deb files een gebruiker heeft gedownload... vandaar)

Erg bedankt voor de hulp... ik ben weer een heel stuk verder in de richting !

[ Voor 4% gewijzigd door MichielioZ op 07-08-2003 22:29 ]

Iedereen wil terug naar de natuur, maar niemand wil lopend...


  • Johannes
  • Registratie: Juni 2000
  • Laatst online: 03-05 19:14
MichielioZ schreef op 07 August 2003 @ 22:24:
Ik kan namelijk gewoon in de chroot #apt-get install -b <packagename> doen en dan download ie gelijk alle dependencies (als het goed is wel :)).
Waarom -b? Dat is alleen nodig om source packages te builden na downloaden, niet als je binary packages downt (zoals je met apt-get install doet).
Enige probleempje wat overblijft is, om bijvoorbeeld 3 .deb-files uit te pakken naar 1 directory... dit gaat natuurlijk wel, maar dan moet ik alle pakketten los selecteren... '*.deb' werkt namelijk niet voor 'dpkg -x' ... enig idee ?
(Ik weet straks natuurlijk niet welke .deb files een gebruiker heeft gedownload... vandaar)
code:
1
for DEB in ls *.deb; do dpkg -x $DEB; done

Maar hoezo wil je dan nu nog steeds .deb-files gebruiken? Als je chrooted apt-get install laat draaien dan komen toch alle files op de goede plaats terecht, dan heb je toch geen dpkg -x meer nodig?

Uit volle borst op weg naar nergens / Zonder reden zonder doel
Met m'n zeden en m'n zonden / En mijn angstig voorgevoel
Laat mij mijn kont tegen de krib / Laat mij dit goddeloze lied
Hef jij je handen maar ten hemel / Maar red mij niet


  • MichielioZ
  • Registratie: Augustus 2001
  • Laatst online: 17-02 21:23
Sorry voor die -b, dat had inderdaad -d moeten zijn ;)

Ik weet dat met apt-get install in chroot de pakketten worden geinstalleerd, maar dat wil ik dus juist niet...
De pakketten moeten worden uitgepakt naar een directory, waarna er een "module" van gemaakt wordt, zodat je uiteindelijk een module hebt die je wel/niet aan je CD kan toevoegen als je wel/niet dat programma nodig hebt...
(modulaire opbouw van morphix is hiervoor juist gemaakt..)

Hardstikke bedankt iig voor je code... ik heb zelf nog nooit met 'for' gewerkt (meestal gewoon met 'while' en/of 'if' kunnen ondervangen), maar dit is een mooi stukje om te gebruiken... zit toch geen copyright op he ? ;)

Iedereen wil terug naar de natuur, maar niemand wil lopend...

Pagina: 1