Magaz, The Greek Linux Magazine
Magaz Logo

Επόμενο  Προηγούμενο  Περιεχόμενα

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 και θα δείτε τις δουλείες του.

Επόμενο  Προηγούμενο  Περιεχόμενα


Valid HTML 4.01!   Valid CSS!