💾 Archived View for magaz.hellug.gr › 14 › 04_rpm › index.gmi captured on 2024-08-31 at 12:12:56. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2024-02-05)

-=-=-=-=-=-=-

RPM και ο κόσμος του.

Παύλος Παρίσσης(mailto:surfking@ath.forthnet.gr)
Απρ 1999

Το παρόν άρθρο έχει σαν σκοπό να δώσει συμβουλές και ιδέες για την αντιμετώπιση μερικών προβλημάτων με την εγκατάσταση προγραμμάτων με το Red Hat Package Manager γνωστό σε όλους σαν rpm.

1. Προβλήματα...και ...Λύσεις

2. Τι είναι τα Dependencies

3. Tips

4. Πηγή νέων rpms και πληροφοριών.

5. Επίλογος

[1. Προβλήματα...και ...Λύσεις]

Λοιπόν μόλις κατεβάσατε την νέα έκδοση του αγαπημένου σας προγράμματος και τρέχετε να την βάλετε. Αλλά δεν μπορείτε διότι δεν έχετε την νέα έκδοση της Ζ βιβλιοθήκης και το πρόγραμμα την ζητάει επίμονα βγάζοντας σας το μήνυμα: "failed dependencies Ζlib is needed by Υ-program.i386.rpm". "Ε, θα πάω κατεβάσω την νέα έκδοση και τέλος" λέτε. Αμ δε, μόλις πάτε να την βάλετε ένα σωρό προγράμματα φωνάζουν λέγοντας σας ότι αυτά τρέχουν μόνο με την ήδη υπάρχουσα έκδοση της περιβόητης βιβλιοθήκης βγάζοντας σας το μύνημα:"Ζlib.1 is needed by control-panel-3.7-4". 'Ετσι μένετε χωρίς την νέα έκδοση και με ένα πρόβλημα να προστίθεται στην λίστα μαζί με τα άλλα. Αλλά το Linux δεν αφήνει κανέναν παραπονεμένο και σας δίνει την λύση. Για να γίνω πιο κατανοητός θα περιγράψω την λύση με ένα παράδειγμα. 'Εχουμε και λέμε, το Υ-program.i386.rpm πακέτο για να δουλέψει θέλει την Ζlib-1.1.5 βιβλιοθήκη και εσείς έχετε την Zlib-1.0.2 και όταν πάτε να βάλετε την νέα βιβλιοθήκη πολλά άλλα πακέτα αρχίζουν να ουρλιάζουν, τι κάνουμε τώρα;

Μια εύκολη λύση είναι να κατεβάσουμε το source του Υ-program.i386.rpm,θα είναι της μορφής Υ-program.src.rpm., και να "κτίσουμε" στην έκδοση της βιβλιοθήκης που είδη έχουμε. Το "κτίσιμο " γίνετε με τα παρακάτω βήματα:

rpm --rebuild Υ-program.src.rpm
cd /usr/src/redhat/RPMS/i386
rpm -Uvh Υ-program.i386.rpm


Για να γίνει το κτίσιμο ΠΡΕΠΕΙ να έχετε το devel πακέτο της "Ζlib" εάν θέλει μια μόνο βιβλιοθήκη εάν θέλει πάνω από μία τότε ΠΡΕΠΕΙ να έχετε τα devel πακέτα των βιβλιοθηκών αυτών. Επιπλέον ΠΡΕΠΕΙ να έχετε το "patch-2.5-4.i386.rpm" ή νεώτερη έκδοση. O παραπάνω τρόπος δούλεψε στο "licq-0.60-3.i386.rpm" το οποίο θέλει την "libstdc++2.9.0" βιβλιοθήκη και εγώ είχα την "libstdc++2.8.0", έτσι κατέβασα το "licq-0.60-3.src.rpm" και το έκανα rebuild χωρίς να βάλω την "libstdc++2.9.0" βιβλιοθήκη. Δυστυχώς αυτός ο τρόπος δεν δουλεύει σε όλες τις περιπτώσεις. Πιο συγκεκριμένα, εάν ένα πρόγραμμα θέλει την Ζ-1.2lib και εσείς έχετε την Ζ-1.0lib το κτίσιμο δεν πρόκειται να γίνει διότι το πρόγραμμα τρέχει με functions ή άλλα σημαντικά στοιχεία που περιέχονται μόνο στην νέα βιβλιοθήκη. π.χ. το "gftp-1.12.i386.rpm" θέλει την 1.1.13 έκδοση των gtk+ και glib βιβλιοθηκών και εγώ είχα την 1.0.6 και όταν πήγα να βάλω τις νέες βιβλιοθήκες φώναζαν 3-4 πακέτα. Επιπλέον το rebuild με τις υπάρχουσες βιβλιοθήκες δεν έδινε λύση. Σε αυτή τη περίπτωση έκανα τα παρακάτω:

1.

Απεγκατάσταση των πακέτων που φώναζαν όταν προσπάθησα να βάλω τις νέες βιβλιοθήκες

"rpm -e paketo"

2.

Απεγκατάσταση των βιβλιοθηκών που είχα ήδη στο σύστημα μου, είναι σίγουρο ότι θα πρέπει να δώσετε "--nodeps"

"rpm -e --nodeps paketo"

3.

Εγκατάσταση των νέων βιβλιοθηκών

"rpm -ivh paketo"

4.

rebuild των source(καλύτερα είναι να βρείτε τις νέες εκδόσεις των source) πακέτων που φώναζαν και εγκατάσταση των binary που δημιουργούνται.

5.

Εγκατάσταση του προγράμματος που για χάρη του έκανα τα παραπάνω

"rpm -ivh paketo"

Αυτός είναι ένας "γενικός" τρόπος ΑΛΛΑ για τις νέες gtk+ και glib βιβλιοθήκες χρειάστηκε ειδική μεταχείριση. Εάν θέλετε πληροφορίες σχετικά με αυτές τις βιβλιοθήκες mail me. Εμένα τα gimp-1.0.1, nessus, usermode, usernet, control-panel και imlib μου έλεγαν ότι τρέχουν μόνο με την υπάρχουσες εκδόσεις των βιβλιοθηκών ΑΛΛΑ παρατήρησα ότι το gimp και nessus τρέχουν με την νέα βιβλιοθήκη χωρίς να τα κάνω rebuild και ούτε να τα βγάλω. Τα άλλα όμως δεν το γλίτωσαν την απομάκρυνση τους και κτίσιμο τους με τις νέες βιβλιοθήκες. 'Αρα, πρώτα δοκιμάζουμε να κάνουμε κτίσιμο με τις υπάρχουσες βιβλιοθήκες και μετά τον 2ο τρόπο. Διότι είναι και χρονοβόρος αλλά και μπορεί να ΜΗΝ δουλέψει για αυτό αναλογιστείτε εάν το ένα και μοναδικό νέο πρόγραμμα που θέλετε αξίζει την φασαρία. Το "gftp" δεν την άξιζε αλλά εγώ το έκανα επειδή είχα πεισμώσει να βρω την λύση.

[2. Τι είναι τα Dependencies]

Σε αυτό το σημείο θα προσπαθήσω να εξηγήσω τι ακριβώς είναι το "failed dependencies" και σε ποιες περιπτώσεις εμφανίζεται. Δυστυχώς η εμφάνιση του μηνύματος αυτού δεν σημαίνει πάντα ότι έχουμε το ίδιο πρόβλημα άρα και την ίδια αντιμετώπιση. Μερικές φορές υπάρχει διαφορετική εξήγηση και αντιμετώπιση για την κάθε εμφάνιση του μηνύματος "failed dependencies".

Λοιπόν αρχίζουμε. Ο κάθε κατασκευαστής πακέτων rpm μέσα στο spec αρχείο του έχει και μία γραμμή

"Requires: files..."

έτσι κάθε πακέτο που έχει αυτή την γραμμή πριν γίνει το install ενεργοποιείτε ένας εσωτερικός αλγόριθμος που ψάχνει να βρει τα αρχεία αυτά στην βάση δεδομένων του rpm. πχ το πακέτο Υ-program.i386.rpm έχει στο spec αρχείο την γραμμή\

"Requires: perl imlib.so.1 /bin/sh"

έτσι για να γίνει η εγκατάσταση πρέπει να βρεθούν τα αρχεία αυτά στην βάση δεδομένων του rpm.Τα μήνυμα που παίρνουμε σε αυτές τις περιπτώσεις είναι το ακόλουθο:

"failed dependencies:
         imlib.so.1 is needed by Υ-program.i386.rpm"


Ο ίδιος αλγόριθμος ενεργοποιείτε όταν πάμε να βγάλουμε ή να αναβαθμίσουμε ένα πακέτο στο οποίο βασίζεται ένα άλλο, γίνετε ένας έλεγχος στην βάση δεδομένων για να δει εάν με την απομάκρυνση ή την αναβάθμιση του πακέτου θα υπάρξει παραβίαση των dependencies εάν κάποιο άλλο πακέτο απαιτεί κάποια αρχεία που υπάρχουν μόνο στο πακέτο που προσπαθούμε να απομακρύνουμε ή να αναβαθμίσουμε. Το μήνυμα που παίρνουμε όταν πάμε να βγάλουμε ή να αναβαθμίσουμε το "Fsail-1.2" πακέτο που περιέχει το "Fsail.so.1" αρχείο το οποίο το χεριάζετε ένα άλλο πακέτο για να δουλέψει είναι το:\

"Fsail.so.1 is need by Gdesk-1.1"

Το μήνυμα "failed dependencies Ζlib is needed by Υ-program.i386.rpm" δεν σημαίνει απαραίτητα ότι δεν έχετε την συγκεκριμένη βιβλιοθήκη αλλά ότι έχετε μια πιο νέα/παλιά βιβλιοθήκη από την οποία το πακέτο κτίστηκε και για αυτό το κτίσιμο με τις υπάρχουσες βιβλιοθήκες δίνει μερικές φορές την λύση. Διότι μπορούμε να κτίσουμε το πακέτο έναντι των βιβλιοθηκών που ήδη έχουμε και το πακέτο να μπορεί να δουλεύει με αυτές.

Για παράδειγμα όταν πήγα να βάλω ένα πακέτο και μου έλεγε ότι θέλει π.χ. "libkdecore.so.1" έδινα ένα "rpm -qp --requires paketo" και μου έλεγε "kdelibs =1.0 και libkdecore.so.1..........." Το "libkdecore.so.1" αρχείο περιέχεται μέσα στο "kdelibs-1.0" και εγώ είχα "kdelibs-1.1" και φυσικά το "libkdecore.so.2" και όχι το "libkdecore.so.1" έτσι δεν δούλευε το πακέτο , ούτε το --nodeps έδινε λύση. Η λύση δόθηκε κάνοντας rebuild το πακέτο. Για αυτό το πρόβλημα υπάρχει εξήγηση, όπως σε όλα τα προβλήματα:) Το ότι το spec αρχείο λεει "kdelibs =1.0" μπορεί να σημαίνει ότι ο packager έχει το KDE 1.0 στο σύστημα του και με αποτέλεσμα να αναφέρετε σε αυτή την έκδοση της βιβλιοθήκης το spec αρχείο. Διότι το RPM κάνει "link" στις υπάρχουσες βιβλιοθήκες που υπάρχουν στο σύστημα όταν το πακέτο κτίζετε, Θυμάστε για το "licq" και την "libstdc++ 2.9.0" βιβλιοθήκη που όπως αποδείχθηκε δεν χρειαζόταν; Προφανώς το licq κτίστηκε σε σύστημα με την 2.9.0 έκδοση της "libstdc++" βιβλιοθήκης. Επιπλέον πολλές φορές νέες εκδόσεις βιβλιοθηκών είναι ασύμβατες προς στις πίσω εκδόσεις πχ η "Gtk+" βιβλιοθήκη ειδικά η 1.2 έκδοση στην οποία έχουν διαγράψει μερικές λειτουργίες δεν είναι συμβατή με την 1.0 έκδοση, έτσι το rpm επίτηδες δημιουργεί "links" με ένα συγκεκριμένο πακέτο διότι δουλεύει μόνο με αυτήν την έκδοση του πακέτου, θυμάστε το "gftp" και την "gtk+1.13" βιβλιοθήκη που με τις υπάρχουσες βιβλιοθήκες δεν έδινε λύση το κτίσιμο;

Πολλές φορές το "failed dependencies" είναι "false alarm". Τι θέλω να πω, όπως αποδείχθηκε δύο πακέτα δουλεύουν χωρίς προβλήματα με τις νέες βιβλιοθήκες παρόλο ότι έλεγαν το αντίθετο. Για παράδειγμα, το "XFGreekFNTS-1.1.noarch.rpm" όταν πάμε να το εγκαταστήσουμε με "-ivh" σε S.u.S.E. 5.3 & 6.0 λεει ότι θέλει το "XFree86 3.3.1" αλλά εάν δώσουμε "-ivh --nodeps" δουλεύει μια χαρά. Με απλά λόγια κάντε ένα "rpm -Uvh --nodeps paketo" πριν κάνετε οτιδήποτε μπορεί το πρόγραμμα να δουλέψει, ΠΡΟΣΟΧΗ μόνο σε προγράμματα και ΟΧΙ σε βιβλιοθήκες και άλλα σημαντικά πακέτα πχ modutils, initscripts κλπ. 'Αλλωστε το "--nodeps" το χρησιμοποιούμε σπάνια διότι αγνοεί τα dependencies ενός πακέτου και είναι 99% σίγουρο ότι το πακέτο ΔΕΝ θα δουλέψει:(. Η συγκεκριμένη περίπτωση μπορεί να έχει την εξήγηση της στο γεγονός ότι το rpm μερικές φορές δεν κάνει σωστά τις συγκρίσεις με τις εκδόσεις τα >,< και = μερικές φορές δεν τα αντιλαμβάνεται σωστά.

Όλα αυτά είναι τεχνικά θέματα που εμάς τους απλούς θνητούς μας μπερδεύουν και σε τελική ανάλυση δεν θέλουμε να μας απασχολούν. Για αυτό υπάρχουν άνθρωποι σαν τον Ryan Weaver πού λύνουν τέτοιου είδους προβλήματα. Μια βόλτα από http://www.redhat.com[1] και θα δείτε τις δουλείες του.

1: http://www.redhat.com

[3. Tips]

Όταν κατεβάζετε ένα πακέτο και πριν το κάνετε εγκατάσταση δώστε\

"rpm -K --nopgp paketo "

και πρέπει να πάρετε "size md5 OK" εάν πάρετε διάφορα errors ΞΑΝΑ κατεβάστε το από άλλον ftp server διότι το πακέτο έχει αλλοιωθεί και ΔΕΝ πρόκειται να δουλέψει σωστά.

Πριν κάνετε εγκατάσταση ή αναβάθμιση ή διαγραφή ενός πακέτο δώστε\

"rpm -ivh --test onoma_paketou" ή
"rpm -Uvh --test onoma_paketou" ή
"rpm -e --test onoma_paketou"

εάν δεν βγάλει τίποτα τα σκυλιά είναι δεμένα και προχωράτε άφοβα στην εγκατάσταση ή αναβάθμιση ή διαγραφή.

Όταν κάνετε διάφορα κόλπα με βιβλιοθήκες ΝΑ ΕΧΕΤΕ ΠΑΝΤΑ τις υπάρχουσες εκδόσεις σε μια γωνία.

Εάν θέλετε κατεβάστε το purp (πρέπει να έχετε τα ncurses) δουλεύει σε φιλικό γραφικό περιβάλλον και έχει δύο χαρακτηριστικά που είναι ιδιαίτερα χρήσιμα

1. μπορείς και βλέπεις τα script που εκτελούνται πριν την εγκατάσταση και μετά την απομάκρυνση του πακέτου.

2. βλέπεις τα dependencies ενός πακέτου.

τα π��ραπάνω γίνονται και με εντολές "rpm -q --provides --requires --scripts paketo" αλλά είναι πολύ χρήσιμο όταν θέλετε να "ρωτήσετε" και δείτε πολλά διαφορετικά πακέτα χωρίς να είστε υποχρεωμένοι να θυμάστε το ακριβές όνομα τους. ΠΡΟΣΟΧΗ ΜΗΝ ΚΑΝΕΤΕ INSTALL, UPGRADE ΚΑΙ ERASE από το purp διότι αγνοεί τα dependencies ενός πακέτου.

Όταν κάντε εγκατάσταση ενός πακέτου να δίνετε "-Uvh", ξέρω...ξέρω το "-U" είναι για αναβάθμιση αλλά εάν δώσετε "-i" αντί "-U" θα δημιουργηθεί πρόβλημα όταν έχετε την προηγούμενη έκδοση του πακέτου εγκαταστημένη. Για αυτό δίνετε ΠΑΝΤΑ "-U" έχετε δεν έχετε το προηγούμενης έκδοσης πακέτο το νέο θα μπει κανονικά. Εγώ όταν πήγα να βάλω την νέα έκδοση του "ghostscript" έδωσα "-i" αντί "-U" και η "gs" εντολή δεν δούλευε καθόλου.

Μην κατεβάζετε σαν τρελοί ότι νέο βγει. Να βάζετε νέα πακέτα μόνο και όταν οι εφαρμογές σας το απαιτούν ή οι νέες έχουν bug fixes. Αναφέρομαι σε βιβλιοθήκες OXI σε προγράμματα.

Αν αντιμετωπίζετε προβλήματα με πακέτα ρίξτε ένα mail στο κατασκευαστή του rpm διότι πολλές φορές έχουν bugs, με "rpm -qip paketo" βλέπουμε τις πληροφορίες ενός πακέτου που ΔΕΝ έχουμε κάνει εγκατάσταση.

Πολλές φορές κάποια πακέτα θα χρειάζονται ειδική μεταχείριση όπως XFree86, Gnome, KDE, βιβλιοθήκες κλπ. για αυτό είναι καλό πριν κάνετε κάτι να διαβάζετε τα docs που είδη υπάρχουν στο σύστημα σας ή εάν δεν υπάρχουν στις σχετικές σελίδες των πακέτων αυτών.

'Οταν ένα πακέτο Α απαιτεί το Β και το Β με την σειρά του απαιτεί το Α ο σωστός τρόπος εγκατάστασης είναι να δώσετε "rpm -ivh *.rpm" μέσα σε ένα κατάλογο που έχετε ΜΟΝΟ αυτά τα δύο πακέτα. Με "*" το rpm ψάχνει στον κατάλογο και λύνει τα dependencies που υπάρχουν μεταξύ των πακέτων αυτών.

Διαβάστε το manual του rpm για περισσότερα.

Ο 2ος ΤΡΟΠΟΣ ΔΟΥΛΕΨΕ ΣΤΟ ΣΥΣΤΗΜΑ ΜΟΥ (REDHAT 5.1) ΔΕΝ ΕΓΓΥΩΜΑΙ ΟΤΙ ΘΑ ΔΟΥΛΕΨΕΙ ΣΕ ΟΛΑ ΤΑ DISTRIBUTIONS

[4. Πηγή νέων rpms και πληροφοριών.]

Το rpmfind.net είναι μία καλή πηγή νέων rpm η οποία διαφέρει από τους άλλους τόπους επειδή σου λεει το κάθε πακέτο τι αρχεία παρέχει και τι απαιτεί και εάν δεν έχεις ένα αρχείο που το απαιτεί το πακέτο που θέλετε να κατεβάσετε, κάνοντας κλικ σε αυτό σε πάει στο πακέτο που το έχει! Επιπλέον τα πακέτα είναι και σε αλφαβητική σειρά κάτι που ελαττώνει το χρόνο της αναζήτησης ενός συγκεκριμένου πακέτου. Πριν κατεβάσετε πακέτα >1.5-2ΜΒ κάντε μία αναζήτηση στο http://ftpsearch.lycos.com[2] είναι σχεδόν σίγούρο ότι θα τα βρείτε σε έναν "κοντινό" ftp server. Η RedHat έχει μια λίστα για rpm στην οποία μπορείτε να βρείτε σημαντικές πληροφορίες για rpm πακέτα http://archive.redhat.com[3] Τέλος το http://www.rpm.org[4] είναι ένα καλό σημείο να ξεκινήσετε για να βρείτε πακέτα και πληροφορίες.

2: http://ftpsearch.lycos.com

3: http://archive.redhat.com

4: http://www.rpm.org

[5. Επίλογος]

Ελπίζω να ξεδιάλυνα μερικά πράγματα σχετικά με τα dependencies και να έδωσα μερικές ιδέες για την σωστή εγκατάσταση των πακέτων rpm. Πάντως όταν παίζετε με βγάλε-βάλε βιβλιοθηκών να είστε ιδιαίτερα προσεκτικοί για να μην κάνετε καμία ζημία. Εγώ έκανα αρκετές αλλά ήμουν τυχερός και τα κόλπα πού έκανα δούλεψαν και κατάφερα να επαναφέρω το σύστημα στην σωστή κατάσταση. Αλλά δεν είναι κάθε μέρα Κυριακή:)

Πριν κλείσω αυτό το άρθρο θέλω να ευχαριστήσω τον Γιάννη Γαλανομάτη για τις σημαντικές παρατηρήσεις του και τον Troy Engel για τις πολύτιμες συμβουλές που μου έδωσε.

Αρχική Σελίδα