Γιατί εμφανίζεται η προειδοποίηση εκκαθάρισης διαδρομών του vpnc σε ένα container
Η εκκαθάριση της προσωρινής μνήμης διαδρομών είναι κατάλοιπο πυρήνα που δεν κρατά πια αυτή τη μνήμη· το σφάλμα μόνο-ανάγνωσης προέρχεται από την προσάρτηση του container, όχι από τη σήραγγα.
Τα φρέσκα αρχεία καταγραφής container συχνά τελειώνουν με ένα παράπονο Read-only file system για το /proc/sys/net/ipv4/route/flush, και αυτή η γραμμή κατηγορείται για μια σήραγγα που μπορεί να είναι απόλυτα υγιής. Η εγγραφή πίσω της στοχεύει μια καταχώριση πυρήνα που δεν κάνει πλέον τίποτα χρήσιμο αφού η προσωρινή μνήμη διαδρομών IPv4 έχει φύγει. Μέσα σε ένα container το /proc/sys προσαρτάται μόνο για ανάγνωση, οπότε η ανακατεύθυνση απορρίπτεται πριν φτάσει οποιαδήποτε τιμή και το κέλυφος εκτυπώνει αυτή την απόρριψη. Μια λειτουργική σήραγγα μπορεί να εκτυπώνει αυτή την προειδοποίηση όσο η παλιά γραμμή μένει στο σενάριο, και το --privileged δεν κάνει ποτέ την εγγραφή ουσιαστική.
Τι προσπαθούσε να εκκαθαρίσει το σενάριο
Τα παλαιότερα σενάρια σύνδεσης τελείωναν με καθαρισμό της προσωρινής μνήμης: γράψιμο μιας τιμής σε αρχείο ελέγχου του πυρήνα και αίτημα στη στοίβα IPv4 να πετάξει την προσωρινή μνήμη δρομολόγησης, ώστε μια νέα διαδρομή σήραγγας να επιλεγεί χωρίς αναμονή να λήξουν οι παλιές καταχωρίσεις. Το αρχείο απευθυνόταν κάτω από το /proc/sys/net/ipv4/, που έκανε τη λειτουργία ανακατεύθυνση κελύφους και όχι εντολή δρομολόγησης. Ο πυρήνας 3.6 αφαίρεσε αυτή τη μνήμη, και μαζί της τον λόγο ύπαρξης της εκκαθάρισης. Τίποτα στην τρέχουσα διαδρομή δεδομένων δεν εξαρτάται από αυτή την εγγραφή.
Η ίδια η καταχώριση επιβίωσε ως παλαιό αρχείο μόνο-εγγραφής, οπότε ένα σενάριο που γράφει ακόμα σε αυτό φτάνει σε πραγματική διαδρομή και πραγματικό έλεγχο δικαιωμάτων. Σε έναν υπολογιστή η εγγραφή επιστρέφει επιτυχία και δεν αλλάζει τίποτα. Σε ένα container η ίδια ανακατεύθυνση χτυπά ένα /proc/sys μόνο-ανάγνωσης και αποτυγχάνει με EROFS, το οποίο το κέλυφος εκτυπώνει ως μήνυμα συστήματος αρχείων μόνο-ανάγνωσης. Σε πυρήνες όπου η διαδρομή πραγματικά λείπει η διατύπωση γίνεται No such file or directory, και το συμπέρασμα δεν αλλάζει.
Τα δύο σφάλματα λένε διαφορετικά πράγματα, και η διαφορά αξίζει να μένει ξεκάθαρη. Το Read-only file system σημαίνει ότι ο πυρήνας έφτασε σε μια καταχώριση και αρνήθηκε την εγγραφή· το No such file or directory σημαίνει ότι η καταχώριση έφυγε. Κανένα μήνυμα δεν αναφέρεται στη συσκευή της σήραγγας, τις διαδρομές ή την επίλυση ονομάτων, οπότε κανένα δεν μπορεί να δικαιολογήσει περισσότερα προνόμια.
Η σειρά κάνει το μήνυμα να φαίνεται αιτιατό. Ένα σενάριο σύνδεσης εγκαθιστά διαδρομές, αλλάζει κατάσταση διεπαφής και ξαναγράφει την επίλυση ονομάτων πριν φτάσει στον καθαρισμό στο τέλος, οπότε η τελευταία γραμμή που εκτυπώνεται είναι αυτή που αναφέρουν οι άνθρωποι ακόμα και όταν κάθε βήμα που μετράει επέστρεψε επιτυχία. Μια σήραγγα που στήνεται και μεταφέρει κίνηση ενώ εκτυπώνει αυτή την προειδοποίηση ταιριάζει ακριβώς στον μηχανισμό παραπάνω.
Ελέγξτε την προσάρτηση και τη διαδρομή πριν προσθέσετε προνόμια
Τρεις αναγνώσεις ξεχωρίζουν μια καλλυντική προειδοποίηση από μια πραγματική αποτυχία: αν το εγκατεστημένο σενάριο κρατά ακόμα τη γραμμή, πώς προσαρτάται το /proc/sys και πού πηγαίνει πραγματικά η κίνηση της εφαρμογής. Εκτελέστε τις στον ίδιο χώρο ονομάτων του container ή στον υπολογιστή όπου εμφανίστηκε η προειδοποίηση, γιατί ένας έλεγχος σε άσχετο μηχάνημα απαντά σε άλλη ερώτηση.
grep -n 'ipv4/route/flush' /usr/share/vpnc-scripts/vpnc-script
findmnt -no OPTIONS /proc/sys
ip -4 route get 10.20.5.10Η απάντηση του grep είναι πιο αδύναμη απ' ό,τι φαίνεται, γιατί μια ανεύρεση αποδεικνύει ότι η γραμμή υπάρχει, όχι ότι εκτελείται χωρίς φρουρά· ένα συντηρούμενο σενάριο μπορεί να κρατά την εγγραφή μέσα σε φρουρά που την παρακάμπτει. Το findmnt -no OPTIONS /proc/sys λύνει την προσάρτηση άμεσα, και το ro σε αυτή την έξοδο σημαίνει ότι κάθε εγγραφή κάτω από αυτό το σημείο απορρίπτεται ό,τι κι αν κάνει το σενάριο. Η αναζήτηση διαδρομής δείχνει έπειτα αν ο προορισμός που χρειάζεται η εφαρμογή επιλύεται μέσω της διεπαφής της σήραγγας ή μέσω της προεπιλεγμένης πύλης του container. Μια αναζήτηση που διαλέγει την προεπιλεγμένη πύλη σημαίνει ότι η σήραγγα σηκώθηκε και τίποτα δεν δρομολογείται σε αυτήν, που είναι πρόβλημα δρομολόγησης και όχι προνομίων.
Από πού έρχεται στην πραγματικότητα η διόρθωση
Η συντηρούμενη διόρθωση ζει στο σενάριο και όχι στις σημαίες του container. Το upstream vpnc-script άλλαξε το πώς χειρίζεται αυτή τη λειτουργία, οπότε συγκρίνετε το αντίγραφο μέσα στην εικόνα με το τρέχον upstream και ενημερώστε μέσω του πακέτου ή της κατασκευής εικόνας που το παρέχει. Ένα χειροκίνητα επεξεργασμένο αρχείο μέσα σε container που τρέχει δεν είναι ελέγξιμο και δεν θα επιβιώσει στην επόμενη κατασκευή.
Το --privileged τεκμηριώνεται ως χορήγηση όλων των δυνατοτήτων συν ευρεία πρόσβαση συσκευών, μια μεγάλη παραχώρηση για ένα μήνυμα που δεν αλλάζει τίποτα, οπότε ονομάστε τη δυνατότητα που λείπει αν πραγματικά λείπει κάποια. Μετά την ενημέρωση, επαναλάβετε την αναζήτηση διαδρομής και αφήστε μια εφαρμογή να χρησιμοποιήσει τη σήραγγα, γιατί ένα ήσυχο αρχείο καταγραφής και μια λειτουργική σύνδεση είναι ξεχωριστά αποτελέσματα.