挂钩脚本以获取


17

/tmp在一个单独的分区上,并安装了noexec。我正在使用Debian。

某些软件包的安装失败,因为某些软件包的安装后脚本需要从运行/tmp

我想知道是否有可能将一个简单的脚本“挂钩”到apt-get该脚本,该脚本将在每次之前运行apt-get并重新安装/tmpexec。同样,它重新安装到noexecapt-get完成。

Answers:


26

您可以使用dpkg的hook系统重新安装它-将其放入/etc/apt/apt.conf.d/00exectmp

DPkg::Pre-Invoke {"mount -o remount,exec /tmp";};
DPkg::Post-Invoke {"mount -o remount /tmp";};  

-1

喃喃自语,您只需替换apt-get为您自己的脚本即可。

移动apt-getreal-apt-get,然后,创建一个名为脚本apt-get像这样的:

#!/bin/sh

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

无论如何,我都不喜欢这种解决方案。在需要时更容易更改临时目录环境变量。像(sh风格):

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

这种方式apt-get将/root/mytmp用作临时目录。无需更改系统。


3
...,直到apt升级包为止。我不建议您弄乱软件包提供的文件。
reinierpost

根据先前的评论,覆盖软件包提供的二进制文件是一个非常糟糕的主意……!可接受的答案是比较好的,但是即使您确实想继续执行类似的操作,也可以将脚本另存为/ usr / local / bin / apt-get(或者更好的是,假设〜/ bin / apt-get没有其他用户会想要它;也请确保它在您的路径中)。然后,不使用“ real-apt-get”,而是使用完整路径/ usr / bin / apt-get。这样,您就可以毫无问题地获得更新,而无需破坏脚本。(这取决于PATH中/ usr / bin之前的/ usr / local / bin-Debian中的默认值)。
杰里米·戴维斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.