Δημοσιεύτηκε: 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.
2. Η ίδια ακριβώς ενέργεια με πιο πάνω, αλλά τώρα χρησιμοποιούμε τον Upstart του Ubuntu, ώστε η ενέργεια αυτή να γίνεται αυτόματα κάθε φορά που επιλέγουμε επανεκκίνηση ή τερματισμό του υπολογιστή.
Θα πρέπει να αποθηκεύσουμε το παρακάτω κείμενο με όνομα <ότι_μας_βολεύει.conf> (το .conf έχει σημασία) στον κατάλογο /etc/init/ του Ubuntu. Φυσικά, αλλάζουμε και εδώ το mydistro με ότι μας βολεύει και υπάρχουν και οι ίδιες προϋποθέσεις (κάθε διανομή είναι προσαρτημένη στο /mnt/όνομα_διανομής.
Το αρχείο αυτό εκτελείται αυτόματα από το σύστημα χωρίς να χρειάζεται να είναι εκτελέσιμο.
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