accrocher un script à apt-get

17

J'ai /tmpsur une partition séparée, et monté avec noexec. J'utilise Debian.

L'installation de certains packages échoue, car les scripts de post-installation de certains packages doivent être exécutés à partir de /tmp.

Je me demandais s'il serait possible de « crochet » un script simple apt-get, qui serait exécuté à chaque fois avant apt-getet remonter /tmpà exec. Et de même, remontez-le noexecaprès la apt-getfin.

user1968963
la source

Réponses:

26

Vous pouvez utiliser dpkgle système de crochet de pour le remonter - mettez-le dans /etc/apt/apt.conf.d/00exectmp:

DPkg::Pre-Invoke {"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount /tmp";};  
Chris Down
la source
-1

Mumble, vous pouvez simplement le remplacer apt-getpar un de vos scripts.

Passez apt-getà real-apt-get, puis créez un script appelé apt-getcomme celui-ci:

#!/bin/sh

mount -o remount -o ... /tmp
real-apt-get "$@"
mount -o remount -o ... -o noexec /tmp

En tout cas, je n'aime pas cette solution. Il est plus facile de modifier la variable d'environnement de répertoire temporaire lorsque vous en avez besoin. Quelque chose comme (style sh):

mkdir /root/mytmp
TMPDIR=/root/mytmp
export TMPDIR
apt-get ...
rm -rf /root/mytmp

De cette façon, apt-get utilisera /root/mytmpun répertoire temporaire. Pas besoin de changer le système.

andcoz
la source
3
... jusqu'à ce que le aptpackage soit mis à niveau, bien sûr. Je ne recommande pas de jouer avec les fichiers fournis par les packages.
reinierpost
Selon le commentaire précédent, le remplacement des binaires fournis par le package est une très mauvaise idée ...! La réponse acceptée est supérieure, mais même si vous vouliez aller de l'avant avec quelque chose comme ça, enregistrez plutôt le script sous / usr / local / bin / apt-get (ou mieux encore, probablement ~ / bin / apt-get en supposant aucun autre utilisateur ne le voudra; assurez-vous également qu'il se trouve sur votre chemin). Ensuite, au lieu d'appeler "real-apt-get", utilisez simplement le chemin complet / usr / bin / apt-get. Ensuite, vous pouvez obtenir des mises à jour sans problème, sans casser votre script. (Cela repose sur / usr / local / bin avant / usr / bin dans PATH - par défaut dans Debian).
Jeremy Davis