Αναγνώριση εγκατάστασης σε Btrfs από os-prober  Το θέμα επιλύθηκε

Εκδόσεις Ubuntu υπό ανάπτυξη (alpha, beta κλπ), δοκιμές (testing) και σφάλματα (bugs).
Eδώ συζητάμε για την εκάστοτε δοκιμαστική έκδοση του Ubuntu.

Συντονιστής: Geochr

Κανόνες Δ. Συζήτησης
Στην ενότητα αυτή συζητάμε θέματα και προβλήματα που αφορούν μόνο τις εκάστοτε υπό ανάπτυξη/δοκιμαστικές εκδόσεις του Ubuntu και των παραγώγων του.
Οι εκδόσεις υπό ανάπτυξη είναι δοκιμαστικές για τους προγραμματιστές και όσους συμμετέχουν στην διαδικασία με διορθώσεις, αναφορές bugs κτλ. Δεν συστήνονται για χρήστες καθώς μπορεί να έχουν αρκετά σφάλματα.
Αν ενδιαφέρεστε για συμμετοχή σε δοκιμές (testing) των υπό ανάπτυξη εκδόσεων του Ubuntu, δείτε πληροφορίες εδώ: https://wiki.ubuntu.com/GreekTeam/QA.

Αναγνώριση εγκατάστασης σε Btrfs από os-prober  Το θέμα επιλύθηκε

Δημοσίευσηαπό fkol k4 » 09 Δεκ 2013, 15:40

Το θέμα αυτό αφορά λογισμικό το οποίο βρίσκεται υπό ανάπτυξη και δεν θεωρείται σταθερό και κατάλληλο για καθημερινή χρήση από αρχάριους χρήστες.
Αν δεν έχετε διάθεση για πειραματισμό, παρακαλώ μην πάρετε το setup που αναγράφεται παρακάτω ως προτεινόμενο.


Για το θέμα τελικά βρέθηκαν δύο λύσεις:
- Η 1η από τον Learner στη δημοσίευση #5 και χρησιμοποιεί τη δυνατότητα chainloading του Grub 2.
- H 2η από τον fkol k4 στη δημοσίευση #8 και χρησιμοποιεί την αυτόματη αποκοπή καταχώρισης για τη δημιουργία custom αρχείου για τον Grub 2.
Έτσι, είναι στην επιλογή του κάθε χρήστη το πως θα επιλέξει να λύσει κάποιο ανάλογο θέμα αν κάποτε υπάρξει τέτοια ανάγκη.


Με την αγορά του καινούριου SSD, αποφάσισα να πειραματιστώ και με το επερχόμενο σύστημα αρχείων Btrfs, μιας και εκτός των άλλων προηγμένων χαρακτηριστικών του, παρουσιάζει και βελτιστοποιήσεις για τη χρήση του με δίσκους SSD.
Έτσι, τον ρόλο του κυρίως λειτουργικού μου έχει αναλάβει πλέον μια εγκατάσταση Ubuntu 14.04 development edition με Unity (φυσικά!!!) γραφικό περιβάλλον, εγκαταστημένη σε ένα Btrfs partition.

To Btrfs partition χωρίζεται σε δύο subvolumes ( /@ και /@home ). Αυτό είναι προεπιλογή του εγκαταστάτη του Ubuntu.
To subvolume /@ διαχειρίζεται το ριζικό διαμέρισμα ( / για τις συνήθεις εγκαταστάσεις σε ext4) και το /@home τον κατάλογο χρηστών ( /home για τις συνήθεις εγκαταστάσεις σε ext4).

Όταν γίνει εκκίνηση του λειτουργικού που βρίσκεται στο Btrfs partition, ο διαχωρισμός αυτός γίνεται σε επίπεδο «λογικών τόμων» από το ίδιο το Btrfs. Έτσι, ο κατάλογος /boot βρίσκεται στην θέση που βρίσκεται πάντα για μια εγκατάσταση Linux, ως υποκατάλογος 1ου επιπέδου (έχει σημασία αυτό).

Στο σύστημα υπάρχουν και άλλες εγκαταστάσεις Linux, και επειδή το σύστημα αρχείων Btrfs όπως και η έκδοση 14.04 βρίσκονται ακόμη υπό ανάπτυξη, αλλά και για λόγους πειραματισμού.
Προς το παρόν, οι δύο ακόμη εγκατεστημένες διανομές είναι ένα Debian unstable (sid) με περιβάλλον Gnome Shell και ένα Lubuntu 13.10, και τα δύο εκ των οποίων είναι εγκαταστημένα σε partition με σύστημα αρχείων ext4.

Οπότε, φτάσαμε στο πρόβλημα...
Το πρόβλημα είναι πως το os-prober όταν εκτελείται από οποιαδήποτε από τις άλλες δύο διανομές, ψάχνει για κάποιον /boot κατάλογο, ώστε να εντοπίσει τα υπόλοιπα λειτουργικά Linux.
Όταν όμως το Btrfs partition εξετάζεται εξωτερικά, ο κατάλογος /boot δεν βρίσκεται στην συνηθισμένη θέση, αλλά στο subvolume @ του διαμερίσματος, δηλαδή στην φαίνεται ως /@/boot/
Έτσι, ένα Btrfs partition είναι «αόρατο» για τον Grub2 των άλλων λειτουργικών (υπάρχει σχετικό bug γι αυτό εδώ ή και εδώ).
Σε συνδυασμό με ένα grub-install από ένα από τα άλλα λειτουργικά, αυτό σημαίνει πως η εγκατάσταση του Ubuntu 14.04 δεν είναι πια διαθέσιμη, αν και υπάρχει και είναι σε καλή κατάσταση (στη διάθεσή σας για ερωτήσεις σχετικά με την - σύντομη ως τώρα - εμπειρία μου με το btrfs).

Ευτυχώς με μια προσάρτηση του Ubuntu 14.04, μπορούμε να πάρουμε τις καταχωρίσεις από το δικό του αρχείο /boot/brub/grub.cgf και να τις προσθέσουμε χειροκίνητα στο εκάστοτε /etc/grub.d/40_custom ώστε να έχουμε την επιλογή να εκκινήσουμε και το Ubuntu 14.04.

Αυτός όμως ο τρόπος είναι αρκετά μπελαλίδικος, μιας και αυτό πρέπει να γίνεται ξανά κάθε φορά που θα ενημερώνεται ο πυρήνας του Ubuntu 14.04 (κάτι που προβλέπεται να γίνεται αρκετά συχνά).
Σκέφτομαι μια από τις παρακάτω λύσεις:
  • Κάποια μετατροπή του /etc/grub.d/30_os-prober ώστε να ψάχνει και στο /@/boot/ αντί μόνο στο /boot. Αυτό το βλέπω μάλλον δύσκολο.
  • Κάποιον τρόπο ώστε να παίρνω αυτόματα σε κάποιο αρχείο το κομμάτι της καταχώρισης του Ubuntu 14.04 (δημιουργείται από το /etc/grub.d/10_linux κατά το update-grub του Ubuntu 14.04) ώστε να ανανεώνω με κάποιον τρόπο αυτόματα το /etc/grub.d/40_custom του Debian και του Lubuntu.
    Αυτό φαίνεται κάπως απλούστερο.

Οποιαδήποτε ιδέα, ακόμα και ως απλό hint, είναι ευπρόσδεκτη. :wave:

Μιας και το θέμα πραγματεύεται κυρίως το «πείραγμα» αρχείων που βρίσκονται στο /etc/grub.d/ τα οποία είναι shell scripts, ίσως η κατάλληλη ενότητα να μην είναι η «λειτουργικό σύστημα» που επέλεξα, αλλά η «ανάπτυξη λογισμικού». Αν κριθεί σκόπιμο, ας γίνει μεταφορά από κάποιο μέλος της συντονιστικής ομάδας.

Τελευταία επεξεργασία από fkol k4 και 10 Δεκ 2013, 13:00, έχει επεξεργασθεί 2 φορά/ες συνολικά
Γνώσεις: Linux: ★★★☆☆ Προγραμματισμός: ★☆☆☆☆ Αγγλικά: ★★★★★
Η υπογραφή μου
Οδηγίες για αρχάριους στο Ubuntu (12.04 LTS)Οδηγοί του forum
Άβαταρ μέλους
fkol k4
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4829
Εγγραφή: 28 Φεβ 2011, 22:56
Τοποθεσία: Αθήνα
Launchpad: fkol-k4
IRC: fkol_k4
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό eliasps » 09 Δεκ 2013, 16:47

Δεν χρειάζεται κάποια μεταφορά του θέματος. Απλά αν θες βάλε ένα alert στην αρχή της δημοσίευσης που να ενημερώνει τους χρήστες πως πρόκειται για "πείραμα" και αλλαγές που δεν πρέπει να δοκιμάσουν χωρίς λόγο. Δηλαδή πως όλα όσα αναγράφονται στη συνέχεια είναι για λόγους δοκιμών και μόνο, προς το παρόν τουλάχιστον.

Αρκετά ενδιαφέρον θέμα. Θα κάνω κάτι παρόμοιο σήμερα και θα ενημερώσω.
Όσο για τις προτάσεις σου είναι σωστές και εφικτές και οι δύο.
Ωστόσο, τουλάχιστον για τώρα μέχρι να μάθουμε περισσότερα για το σύστημα, θεωρώ πως το καλύτερο είναι η δημιουργία ενός script που να τροποποιεί κατάλληλα τις διαδικασίες που γίνονται στην ενημέρωση του συστήματος όταν υπάρχει νέος πυρήνας, ώστε να ψάχνει στα σωστά σημεία για το /@/boot.
Μετά την δημιουργία του script μπορεί να δημιουργηθεί ένα bash alias που με μία εντολή να κάνει τις κατάλληλες ενέργειες.
Λίγο ανορθόδοξος τρόπος, αλλά ευκολότερος από την τοπική τροποποίηση του κώδικα των αντίστοιχων προγραμμάτων που κάνουν τη συγκεκριμένη δουλειά.

Θα έχω νεότερα το βράδυ, που θα έχω κάνει την εγκατάσταση.
Άβαταρ μέλους
eliasps
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4017
Εγγραφή: 16 Δεκ 2011, 22:25
Τοποθεσία: Αθήνα, Αττική
Launchpad: eliasps
IRC: eliasps
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό Learner » 09 Δεκ 2013, 21:11

fkol k4 έγραψε:Το πρόβλημα είναι πως το os-prober όταν εκτελείται από οποιαδήποτε από τις άλλες δύο διανομές, ψάχνει για κάποιον /boot κατάλογο, ώστε να εντοπίσει τα υπόλοιπα λειτουργικά Linux.

Φαντάζομαι ότι το ευκολότερο workaround θα είναι να εγκαταστήσεις τον grub της 14.04 (ή τέλος πάντως του λειτουργικού που έχει το Btrfs) στο MBR.

Αυτό το σύμβολο @ είναι υποχρεωτικό ; Δηλαδή δοκίμασες να το αφαιρέσεις από το fstab να δεις τι θα γίνει ;
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9765
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTux
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό fkol k4 » 09 Δεκ 2013, 22:03

Learner έγραψε:Φαντάζομαι ότι το ευκολότερο workaround θα είναι να εγκαταστήσεις τον grub της 14.04 (ή τέλος πάντως του λειτουργικού που έχει το Btrfs) στο MBR.

Το ευκολότερο (ως τώρα) είναι να παίρνω χειροκίνητα το κομμάτι που χρειάζομαι ως 40_custom και να το αντιγράφω με ένα σκριπτάκι σε όλες τις άλλες διανομές.
Αν έχω σταθερά τον grub της 14.04 στο MBR, τότε κάθε φορά που κάποια από τις άλλες διανομές θα ενημερώνει πυρήνα, θα πρέπει να κάνω επανεκκίνηση από την 14.04 και να ενημερώνω τον grub.
Ούτε να το σκέφτομαι δεν θέλω :shifty:
Learner έγραψε:Αυτό το σύμβολο @ είναι υποχρεωτικό ; Δηλαδή δοκίμασες να το αφαιρέσεις από το fstab να δεις τι θα γίνει ;

Ναι, είναι υποχρεωτικό, δεν υπάρχει στο fstab, το δημιουργεί το ίδιο το btrfs.
Αυτό δεν είναι κάποιος φάκελος 1ου επιπέδου, λογίζεται ως δευτερεύον διαμέρισμα μέσα στο 1ο. 'Οπως και να προσαρτηθεί το διαμέρισμα, το σύμβολο @ συμβολίζει ένα subvolume του διαμερίσματος.

Με λίγο παραπάνω ψάξιμο που έκανα και με βάση τα όσα λίγα καταλαβαίνω από bash, για το ότι το os-prober δεν βλέπει τo Ubuntu 14.04 δεν φταίει το ίδιο το 30_os-prober, αλλά μάλλον το /usr/sbin/grub-mkconfig

Παρακάτω το κομμάτι του που νομίζω πως «κάνει τη ζημιά»:
Μορφοποιημένος Κώδικας: Επιλογή όλων
# Device containing our userland.  Typically used for root= parameter.
GRUB_DEVICE="`${grub_probe} --target=device /`"
GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true

# Device containing our /boot partition. Usually the same as GRUB_DEVICE.
GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true

Εδώ, να συμπληρώσω πως λόγω της φύσης του btrfs, ο κατάλογος /boot/ μπορεί να βρίσκεται είτε εντός του κεντρικού subvolume (πχ Ubuntu default) οπότε και φαίνεται ως /@/boot/, είτε σε δικό του ξεχωριστό subvolume (πχ openSUSE default), οπότε και φαίνεται ως /@boot/, κάτι που το κάνει αρκετά πιο πολύπλοκο στην πράξη.
Γνώσεις: Linux: ★★★☆☆ Προγραμματισμός: ★☆☆☆☆ Αγγλικά: ★★★★★
Η υπογραφή μου
Οδηγίες για αρχάριους στο Ubuntu (12.04 LTS)Οδηγοί του forum
Άβαταρ μέλους
fkol k4
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4829
Εγγραφή: 28 Φεβ 2011, 22:56
Τοποθεσία: Αθήνα
Launchpad: fkol-k4
IRC: fkol_k4
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό Learner » 10 Δεκ 2013, 00:04

Διάβασε μια μαγκιά που περιγράφει αυτός εδώ. Αν την κατάλαβα σωστά, είναι καλή μαγκιά.

Κάνεις install τον grub στα partitions της κάθε διανομής και μετά σε έναν κύριο grub που έχεις (μόνιμα) τον βάζεις να κάνει point στο configuration αρχείο της εκάστοτε διανομής.
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9765
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTux
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό fkol k4 » 10 Δεκ 2013, 02:03

Είσαι ωραίος! :clap:

Λοιπόν, δοκίμασα το chainloading. Έφτιαξα ένα 40_custom στο Ubuntu 14.04 με μια καταχώριση chainloading για το Lubuntu 13.10.
Στο Lubuntu έδωσα grub-install στο διαμέρισμα που βρίσκεται το λειτουργικό.
Αν και πήρα το παρακάτω σφάλμα,
Μορφοποιημένος Κώδικας: Επιλογή όλων
Lubuntu 13.10 - 3.11.0-14-generic:~$ sudo grub-install --force /dev/sda3
/usr/sbin/grub-bios-setup: warning: File system `ext2' doesn't support embedding.
/usr/sbin/grub-bios-setup: warning: Η ενσωμάτωση είναι αδύνατη. Ο GRUB δύναται μόνον να εγκατασταθεί σ' αυτό το σύνολο με την χρήση λιστών μπλοκ. Όμως, οι λίστες μπλοκ είναι αναξιόπιστες και η χρήση τους δεν συνιστάται..
Installation finished. No error reported.
η εγκατάσταση έγινε κανονικά (όπως αναφέρει και η τελευταία πρόταση του μηνύματος) και το chainloading δούλεψε. :thumbup:
Υποθέτω πως αυτό που μένει να κάνω είναι να προσθέσω στο 40_custom καταχωρίσεις chainloading για κάθε λειτουργικό ξεχωριστά.

Θα ήθελα όμως να δούμε και την περίπτωση της αυτόματης προσθήκης του 40_custom σε όλες τις άλλες διανομές μιας και κάτι τέτοιο είναι πιο ευέλικτο.
Αυτό που θέλω να κάνω είναι να «κόψω» από το /boot/grub/grub.cfg ένα κομμάτι που ξεκινά με "### BEGIN /etc/grub.d/10_linux ###" και καταλήγει σε "### END /etc/grub.d/10_linux ###".
Αν τα strings αυτά τα βάλω στην sed, οι κάθετοι μου χαλάνε τη σύνταξή της. Έτσι, προσπαθώ να κόψω τις ανάλογες γραμμές.
Βρίσκω την 1η με
Κώδικας: Επιλογή όλων
echo $( cat -n /boot/grub/grub.cfg | grep "### BEGIN /etc/grub.d/10_linux ###") | cut -c1-3
και την 2η με
Κώδικας: Επιλογή όλων
echo $( cat -n /boot/grub/grub.cfg | grep "### END /etc/grub.d/10_linux ###") | cut -c1-3

Έτσι, μπορώ να δώσω την
Κώδικας: Επιλογή όλων
sed -n 'αποτέλεσμα-1,αποτέλεσμα-2`p' /boot/grub/grub.cfg
και να αποσπάσω το κομμάτι που θέλω.
Όταν λοιπόν δίνω την sed με τους αριθμούς γραμμών, η εντολή εκτελείται κανονικά.
Αν όμως αποθηκεύσω τους 2 αριθμούς σε μεταβλητές, πχ με
Μορφοποιημένος Κώδικας: Επιλογή όλων
fs=`echo $( cat -n /boot/grub/grub.cfg | grep "### BEGIN /etc/grub.d/10_linux ###") | cut -c1-3`
fe=`echo $( cat -n /boot/grub/grub.cfg | grep "### END /etc/grub.d/10_linux ###") | cut -c1-3`

και μετά βάλω τις μεταβλητές στην sed, τότε δεν μου επιστρέφει αποτέλεσμα.

Ξέρει κάποιος πως μπορώ να χρησιμοποιήσω τις μεταβλητές $fs και $fe στην sed ή κάποιον άλλον τρόπο αυτοματοποίησης της διαδικασίας;
Γνώσεις: Linux: ★★★☆☆ Προγραμματισμός: ★☆☆☆☆ Αγγλικά: ★★★★★
Η υπογραφή μου
Οδηγίες για αρχάριους στο Ubuntu (12.04 LTS)Οδηγοί του forum
Άβαταρ μέλους
fkol k4
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4829
Εγγραφή: 28 Φεβ 2011, 22:56
Τοποθεσία: Αθήνα
Launchpad: fkol-k4
IRC: fkol_k4
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό Learner » 10 Δεκ 2013, 10:53

fkol k4 έγραψε:Αυτό που θέλω να κάνω είναι να «κόψω» από το /boot/grub/grub.cfg ένα κομμάτι που ξεκινά με "### BEGIN /etc/grub.d/10_linux ###" και καταλήγει σε "### END /etc/grub.d/10_linux ###".

Αν οι γραμμές είναι στανταρτ, τότε μπορείς να χρησιμοποιήσεις κατάλληλα την grep με το -A . Δηλαδή
Κώδικας: Επιλογή όλων
grep -A20
θα εμφανίσει τις 20 γραμμές κάτω από το ### BEGIN /etc/grub.d/10_linux ### . Μετά με pipe στην sed μπορείς να κόψεις τα comments . Χρησιμοποίησε αντί για κάθετο , το σύμβολο @.

Π.χ
Κώδικας: Επιλογή όλων
cat /boot/grub/grub.cfg | grep -A 20 "### END /etc/grub.d/10_linux ###" | sed 's@### END /etc/grub.d/10_linux ###@@g'
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9765
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTux
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό fkol k4 » 10 Δεκ 2013, 12:35

Learner έγραψε:Αν οι γραμμές είναι στανταρτ, τότε μπορείς να χρησιμοποιήσεις κατάλληλα την grep με το -A

Δυστυχώς δεν είναι, μόνο η 1η γραμμή είναι στανταρντ, στο δικό μου σύστημα είναι η 123.
Η 2η γραμμή αλλάζει καθώς προστίθενται πυρήνες στο Ubuntu 14.04 και μετατίθεται όλο και πιο κάτω στο αρχείο, ωσότου διαγραφεί κάποιος και επανέλθει.

Το βρήκα όμως :clap: :D :D :D

Μπορώ να ενσωματώσω χαρακτήρες slash στην sed όπως και τα κενά στο τερματικό, χρησιμοποιώντας backslash μπροστά τους.
Οπότε, η
Κώδικας: Επιλογή όλων
sed '/### BEGIN \/etc\/grub.d\/10_linux ###/,/### END \/etc\/grub.d\/10_linux ###/!d' /boot/grub/grub.cfg
μου δίνει το κομμάτι που χρειάζομαι :clap:
Έτσι, το μόνο που έχω να κάνω είναι ένα script που με αυτή την εντολή δημιουργεί ένα αρχείο 40_custom και στη συνέχεια το αντιγράφει στο /etc/grub.d/ κάθε διανομής μετά την ενημέρωση του grub.

Μη σου πω πως θα το κάνω ένα upstart script :ugeek: που θα κάνει αυτή τη δουλειά στο σβήσιμο και την επανεκκίνηση για να είμαστε σίγουροι :mrgreen:

Οκ, μιας και έχουμε δύο λύσεις, θα τις ενσωματώσω στο 1ο ποστ με συνδέσμους και θα βάλω το τικ εκεί! :clap:
Thanks παιδιά!!! :bow:

Off topic:
Εννοείται πως αυτό το κομμάτι θα ενσωματωθεί σε μελλοντικό οδηγό για btrfs και multiboot που ετοιμάζω... :shifty:
Γνώσεις: Linux: ★★★☆☆ Προγραμματισμός: ★☆☆☆☆ Αγγλικά: ★★★★★
Η υπογραφή μου
Οδηγίες για αρχάριους στο Ubuntu (12.04 LTS)Οδηγοί του forum
Άβαταρ μέλους
fkol k4
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4829
Εγγραφή: 28 Φεβ 2011, 22:56
Τοποθεσία: Αθήνα
Launchpad: fkol-k4
IRC: fkol_k4
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό Learner » 10 Δεκ 2013, 13:45

fkol k4 έγραψε:Μπορώ να ενσωματώσω χαρακτήρες slash στην sed όπως και τα κενά στο τερματικό, χρησιμοποιώντας backslash μπροστά τους.

Ναι,
ή το σύμβολο @. Εγώ αυτό χρησιμοποιώ για να μην γεμίζω backslash. ;)
About Me
NickTux@GitHub

Spoiler: show
1. Ubuntu 18.04 LTS
2. Intel Core i3 CPU M 380 2.53GHz ‖ RAM 6GB ‖ Acer Aspire 5733
3. Intel Integrated Graphics [8086:0046] {i915}
4. wlan0: Atheros Inc. AR9485 Wireless Network Adapter [168c:0032] (rev 01)
Άβαταρ μέλους
Learner
Συντονιστής
Συντονιστής
 
Δημοσιεύσεις: 9765
Εγγραφή: 08 Νοέμ 2010, 21:24
Τοποθεσία: Αθήνα
Launchpad: nicktux
IRC: NickTux
Εκτύπωση

Re: Αναγνώριση εγκατάστασης σε Btrfs από os-prober

Δημοσίευσηαπό fkol k4 » 10 Δεκ 2013, 16:50

Παρακάτω, δύο λύσεις αυτοματοποίησης που έφτιαξα για όποιον κάνει ίδιου τύπου εγκατάσταση και θελήσει να λύσει το ίδιο πρόβλημα:

1. Bash script που δημιουργεί ένα αρχείο τύπου 40_custom-mydistro (αλλάξτε το mydistro σε ό,τι σας βολεύει) και το προσθέτει στο /etc/grub.d/ κάθε προσαρτημένης διανομής χωρίς να πειράζει το πρωτότυπο 40_custom.
Υποθέτω πως κάθε διανομή έχει προσαρτηθεί στο /mnt/ με κάποιο όνομα. Πχ /mnt/διανομή-1, /mnt/διανομή-2 κτλ (αυτό σε εμένα γίνεται αυτόματα μέσω του αρχείου /etc/fstab) και πως και οι υπόλοιπες διανομές χρησιμοποιούν Grub 2.
Το script προσθέτει το αρχείο σε οποιαδήποτε προσαρτημένη διανομή, είτε χρησιμοποιεί ext2, ext3, ext4 ή btrfs σύστημα αρχείων και είτε ο κατάλογος /etc/ της προσαρτημένης διανομής βρίσκεται στο κεντρικό subvolume είτε σε δικό του (στην περίπτωση που έχουμε και άλλη btrfs διανομή στο σύστημά μας)
Εκτελείται με sudo.
Μορφοποιημένος Κώδικας: Επιλογή όλων
#!/bin/bash
# Filename_________: custom-grub-entry
# Filetype_________: Bash script
# Short description: Adds a custom grub config file to every mounted linux distribution

# ┌──────────────┐
# │ Script start │
# └──────────────┘

# Create working directory
mkdir -p /tmp/custom-grub

# Creating custom grub entry beginning
echo '#!/bin/sh' > /tmp/custom-grub/40_custom-mydistro
echo 'exec tail -n +3 $0' >> /tmp/custom-grub/40_custom-mydistro
echo '# This file provides an easy way to add custom menu entries. Simply type the' >> /tmp/custom-grub/40_custom-mydistro
echo '# menu entries you want to add after this comment. Be careful not to change' >> /tmp/custom-grub/40_custom-mydistro
echo '# the <exec tail> line above.' >> /tmp/custom-grub/40_custom-mydistro
echo ' ' >> /tmp/custom-grub/40_custom-mydistro

# Creating the rest of custom grub entry
sed '/### BEGIN \/etc\/grub.d\/10_linux ###/,/### END \/etc\/grub.d\/10_linux ###/!d' /boot/grub/grub.cfg > /tmp/custom-grub/stage1
sed '/menuentry/,/### END \/etc\/grub.d\/10_linux ###/!d' /tmp/custom-grub/stage1 >> /tmp/custom-grub/40_custom-mydistro

# Making custom grub entry file executable
chmod +x /tmp/custom-grub/40_custom-mydistro

# Copy custom grub entry file to all mounted distros using extX and btrfs partitions
for i in $(ls /mnt/)
do
if [ -d /mnt/"$i"/etc/grub.d ]
then
cp /tmp/custom-grub/40_custom-mydistro /mnt/"$i"/etc/grub.d/40_custom-mydistro
fi
if [ -d /mnt/"$i"/@/etc/grub.d ]
then
cp /tmp/custom-grub/40_custom-mydistro /mnt/"$i"/@/etc/grub.d/40_custom-mydistro
fi
if [ -d /mnt/"$i"/@etc/grub.d ]
then
cp /tmp/custom-grub/40_custom-mydistro /mnt/"$i"/@etc/grub.d/40_custom-mydistro
fi
done


2. Η ίδια ακριβώς ενέργεια με πιο πάνω, αλλά τώρα χρησιμοποιούμε τον Upstart του Ubuntu, ώστε η ενέργεια αυτή να γίνεται αυτόματα κάθε φορά που επιλέγουμε επανεκκίνηση ή τερματισμό του υπολογιστή.
Θα πρέπει να αποθηκεύσουμε το παρακάτω κείμενο με όνομα <ότι_μας_βολεύει.conf> (το .conf έχει σημασία) στον κατάλογο /etc/init/ του Ubuntu. Φυσικά, αλλάζουμε και εδώ το mydistro με ότι μας βολεύει και υπάρχουν και οι ίδιες προϋποθέσεις (κάθε διανομή είναι προσαρτημένη στο /mnt/όνομα_διανομής.
Το αρχείο αυτό εκτελείται αυτόματα από το σύστημα χωρίς να χρειάζεται να είναι εκτελέσιμο.
Μορφοποιημένος Κώδικας: Επιλογή όλων
description "Creating custom grub entry file"

start on runlevel [06]

script
# Create working directory
mkdir -p /tmp/custom-grub

# Creating custom grub entry beginning
echo '#!/bin/sh' > /tmp/custom-grub/40_custom-mydistro
echo 'exec tail -n +3 $0' >> /tmp/custom-grub/40_custom-mydistro
echo '# This file provides an easy way to add custom menu entries. Simply type the' >> /tmp/custom-grub/40_custom-mydistro
echo '# menu entries you want to add after this comment. Be careful not to change' >> /tmp/custom-grub/40_custom-mydistro
echo '# the <exec tail> line above.' >> /tmp/custom-grub/40_custom-mydistro
echo ' ' >> /tmp/custom-grub/40_custom-mydistro

# Creating the rest of custom grub entry
sed '/### BEGIN \/etc\/grub.d\/10_linux ###/,/### END \/etc\/grub.d\/10_linux ###/!d' /boot/grub/grub.cfg > /tmp/custom-grub/stage1
sed '/menuentry/,/### END \/etc\/grub.d\/10_linux ###/!d' /tmp/custom-grub/stage1 >> /tmp/custom-grub/40_custom-mydistro

# Making custom grub entry file executable
chmod +x /tmp/custom-grub/40_custom-mydistro

# Copy custom grub entry file to all mounted distros using extX and btrfs partitions
for i in $(ls /mnt/)
do
if [ -d /mnt/"$i"/etc/grub.d ]
then
cp /tmp/custom-grub/40_custom-mydistro /mnt/"$i"/etc/grub.d/40_custom-mydistro
fi

if [ -d /mnt/"$i"/@/etc/grub.d ]
then
cp /tmp/custom-grub/40_custom-mydistro /mnt/"$i"/@/etc/grub.d/40_custom-mydistro
fi

if [ -d /mnt/"$i"/@etc/grub.d ]
then
cp /tmp/custom-grub/40_custom-mydistro /mnt/"$i"/@etc/grub.d/40_custom-mydistro
fi
done

end script

Creative Commons License
Η εργασία υπάγεται στην άδεια Creative Commons Αναφορά-Παρόμοια διανομή 3.0 Ελλάδα
Τελευταία επεξεργασία από fkol k4 και 19 Δεκ 2013, 00:57, έχει επεξεργασθεί 2 φορά/ες συνολικά
Γνώσεις: Linux: ★★★☆☆ Προγραμματισμός: ★☆☆☆☆ Αγγλικά: ★★★★★
Η υπογραφή μου
Οδηγίες για αρχάριους στο Ubuntu (12.04 LTS)Οδηγοί του forum
Άβαταρ μέλους
fkol k4
antiwinTUX
antiwinTUX
 
Δημοσιεύσεις: 4829
Εγγραφή: 28 Φεβ 2011, 22:56
Τοποθεσία: Αθήνα
Launchpad: fkol-k4
IRC: fkol_k4
Εκτύπωση

Επόμενο

Επιστροφή στο Ubuntu +1

cron