Wenn Sie ein Paket mit aktualisieren oder neu installieren dpkg
(und letztendlich mit allem, was es verwendet, wie z. B. apt-get usw.), werden die vorhandenen Dateien gesichert, indem vor dem Ersetzen ein fester Link zu der Datei erstellt wird. Wenn das Entpacken fehlschlägt, können die vorhandenen Dateien problemlos wiederhergestellt werden. Das ist großartig, da es das Betriebssystem vor schlechten Dingen schützt.
Außer ... es funktioniert nur, wenn Ihr Dateisystem feste Links unterstützt . Nicht alle Dateisysteme - wie z. B. FAT-Dateisysteme.
Ich arbeite an einer Debian-Distribution für eine bestimmte eingebettete ARM-Plattform, und die Boot-Umgebung erfordert, dass sich bestimmte Dateien (einschließlich des Kernels) auf einem FAT-Dateisystem befinden, damit der Boot-Code sie finden und laden kann.
Wenn Sie das Kernel-Paket (oder ein anderes Paket, das Dateien in dieser FAT-Partition enthält) aktualisieren, schlägt die Installation fehl mit:
dpkg: error processing archive linux-image3.18.11+_3.18.11.2.armadillian_armhf.deb (--install):
unable to make backup link of `./boot/vmlinuz-3.18.11+' before installing new version: Operation not permitted
Und das ganze Upgrade schlägt fehl.
Ich habe das Web durchsucht und die einzigen Referenzen, die ich finden kann, sind bestimmte Personen mit bestimmten Problemen bei bestimmten Upgrades. Die Antwort lautet normalerweise "Delete /boot/vmlinuz-3.18.11+ and try again" und ja, das behebt dieses spezifische Problem.
Aber das ist nicht die Antwort für mich. Ich bin ein OS-Distributor und kein OS-Benutzer. Daher benötige ich eine Möglichkeit, dies zu beheben, bei der der Endbenutzer seine Kerneldateien nicht manuell löscht, bevor er ein Upgrade durchführt. Ich brauche eine Möglichkeit, dpkg anzuweisen, Dateien unter / boot "zu kopieren, nicht fest zu verknüpfen" (oder alle Dateien, obwohl dies den Aktualisierungsvorgang etwas verlangsamen würde), oder noch besser "Wenn ein fester Link fehlschlägt, beschwere dich nicht, kopiere es stattdessen ".
Ich habe solche Dinge wie die --force-unsafe-io
und sogar --force-all
Flaggen ausprobiert dpkg
, aber nichts hat irgendeinen Effekt.