So aktualisieren Sie burg nach einem Kernel-Update automatisch

7

Nach jedem Kernel-Update muss ich update-burgmanuell ausführen . Wie mache ich es automatisch?

Jumbli
quelle

Antworten:

8

Eine andere Methode für Sie ist das Bearbeiten /etc/kernel-img.conf

do_symlinks = yes
relative_links = yes
do_bootloader = no
do_bootfloppy = no
do_initrd = yes
link_in_boot = no
postinst_hook = update-burg
postrm_hook = update-burg

Von: https://bugs.launchpad.net/burg/+bug/594431 (ein Fehlerbericht spiegelt Ihre Erfahrung wider)

Dies kann in ähnlicher Weise durch Updates gelöscht werden, aber wie es ist /etc/, sollten Sie (glaube ich) eine Aufforderung erhalten, Ihre vorhandene Konfiguration beizubehalten, wenn ein Update eintritt.

Wie die Leute im Bug weiter sagen, ist dies immer noch nicht ideal, da es jede Möglichkeit gibt, dass jemand sowohl Burg als auch Grub ausführen oder zumindest die beiden synchron halten möchte.

Sie könnten noch einen Schritt weiter gehen und ein neues Skript wie das folgende schreiben:

#!/bin/sh
set -e
exec update-grub "$@"
exec update-burg "$@"

Speichern Sie es wie /usr/sbin/update-bootloaders, chmod +xes, und dann steckt update-bootloadersin /etc/kernel-img.confanstelle von update-gruboder update-burg.

Ich denke, auf lange Sicht muss ein alternativesSystem für verschiedene Bootloader eingerichtet werden, wie es für Java, Audio und andere austauschbare Subsysteme existiert.

Oli
quelle
Ich denke, deine Antwort ist besser (kürzer), aber ich ändere grub erst vor ~ 1 Jahr auf burg und habe absolut kein Problem.
Extender
2
Ich habe gerade ein Upgrade (mit Update-Manager) durchgeführt und Burg (auf MBR) wurde während des Upgrades von grub überschrieben. Ich musste burg neu installieren. Nach dieser Erfahrung habe ich mich entschlossen, Maden ganz zu entfernen (hoffe, es gibt keine Madenabhängigkeit für Burg).
Jumbli
3

Wird normalerweise update-grubangerufen. Dies ist nur etwas, was passiert. Das System erwartet, dass grub der Bootloader ist. Angenommen, Sie werden grub nie wieder verwenden, können Sie Folgendes tun:

cd /usr/sbin/
sudo mv update-grub update-grub.backup
sudo ln -s update-burg update-grub

Dies bewegt sich update-grubaus dem Weg und erzeugt an seiner Stelle einen Symlink, der tatsächlich ausgeführt wird update-burg. Wenn also ein neuer Kernel installiert wird, ruft er auf, update-grubwelcher tatsächlich ist update-burg.

Hacky, aber es sollte funktionieren.

Umkehren:

cd /usr/sbin/
sudo rm update-grub # this is only a symlink
sudo mv update-grub.backup update-grub
Oli
quelle
Sind Sie sicher, dass ein Update oder etwas den Symlink nicht stört?
Jumbli
Es wurde eine weitere Antwort veröffentlicht, die gegenüber Aktualisierungen etwas widerstandsfähiger sein sollte. Ich werde dies hier als schnellen und schmutzigen Ersatz belassen.
Oli
1

Wenn Sie die Gewohnheit haben sudo apt-get upgrade, Ihre Pakete und Kernel zu aktualisieren, löst das folgende Skript Ihr Problem und ist zu 100% resistent gegen Aktualisierungen:

#!/bin/bash
# Check what kernels are installed.
KERLST=`ls /boot | grep vmlinu`

# Do updates.
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade

# Update burg if kernels changed. 
if [ "$KERLST" != "`ls /boot | grep vmlinu`" ]; then
    sudo update-burg
fi

Speichern ist als Textdatei apgrade.sh und markieren Sie es als ausführbar. Dieses Skript führt jedes mögliche Update durch, prüft, ob sich die Kernelliste geändert hat, und aktualisiert burg, falls dies der Fall ist. Ich benutze es seit 10.04 (an einen Alias ​​gebunden) und keine Updates haben es bisher kaputt gemacht.

Wenn Sie Ihre Aktualisierungen jedoch manuell über synaptisch durchführen möchten, ist die Methode von Oli möglicherweise besser.

Malabarba
quelle
Sie können es an einen Alias ​​binden, indem Sie in Ihre Datei "~ / .bash_aliases" gehen und die Zeile "alias apgrade = '~ / apgrade.sh'" (ohne doppelte Anführungszeichen) hinzufügen. Die Änderung wird wirksam, sobald Sie ein neues Terminal öffnen. Ich habe festgestellt, dass dies die perfekte Methode zum Aktualisieren ist, da nur vier Tastendrücke in einem Terminal erforderlich sind (ap <TAB> <ENTER>) und der Rest automatisch erfolgt.
Malabarba
Sie können es einfach einfügen ~/bin(und die .sh-Erweiterung entfernen), wenn Sie es als ausführen möchten aupgrade.
Oli
Tatsächlich. Ich bevorzuge Aliase, da sie durch Kopieren der Datei .bash_aliases leicht auf neue Installationen übertragen werden können. Aber es ist ganz und gar eine Frage der Präferenz.
Malabarba
1

Vielen Dank!

Ich habe ein Skript erstellt, das auf den hilfreichsten / am besten bewerteten Informationen basiert, die hier bereitgestellt werden. Eine subtile Änderung besteht darin, dass die ausführbaren Dateien des Bootloaders nicht mehr ausgeführt werden (wie im Fall von Grub, das beendet wird; daher werden die Skript-Exits und andere Loader nicht ausgeführt (@ Ubuntu11)).

Das Skript kann für mehrere Bootloader konfiguriert werden .. (wenn die ausführbare Datei update-nameund in ist /usr/sbin;-).

Es könnte erweitert werden, um ausführbare Aktualisierungsdateien zuzulassen, die dies nicht sind update-name. Verwenden Sie dazu möglicherweise name:execWerte in der Konfigurationsvariablen des Bootloaders und teilen Sie die Variable auf. Ändern Sie dann den Ausführungsbefehl entsprechend (wahrscheinlich müsste eine andere Sprache verwendet werden, damit dies elegant ist).

#!/bin/sh
# #################################################################
#
# Updates (multiple) bootloaders after kernel update.
#
# @shell bash
# @see http://askubuntu.com/questions/4905/how-to-automatically-update-burg-after-a-kernel-update
#
# #################################################################
#
# Install:
#
# -----------------------------------------------------------------
# * Save as:   /usr/sbin/update-bootloaders
# * Then:      chmod +x /usr/sbin/update-bootloaders
# * Edit /etc/kernel-img.conf and append/replace the following parameters:
# ** postinst_hook = update-bootloaders
# ** postrm_hook = update-bootloaders
#
# #################################################################
#
# Configuration:
#
# -----------------------------------------------------------------
# BOOTLOADERS: configuration variable to list bootloaders
BOOTLOADERS="grub burg"
#
# #################################################################
set -e
for BOOTLOADER in ${BOOTLOADERS}; do
    EXEC="/usr/sbin/update-${BOOTLOADER}"
    if [ -x ${EXEC} ]; then
        echo "Updating ${BOOTLOADER}..."
        ${EXEC} "$@"
    fi
done
# eof
Thf
quelle