スクリプトをapt-getにフックする


17

私は/tmp別のパーティションにあり、でマウントしていnoexecます。Debianを使用しています。

一部のパッケージのインストール後スクリプトはから実行する必要があるため、一部のパッケージのインストールは失敗します/tmp

単純なスクリプトを「フック」して、apt-getapt-getに毎回実行し、に再マウント/tmpすることが可能かどうか疑問に思っていましたexec。同様に、終了noexec後に再マウントしapt-getます。

回答:


26

dpkgのフックシステムを使用して再マウントできます/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として保存してください他のユーザーはそれを望まないでしょう;また、それがあなたのパスにあることを確認してください)。次に、「real-apt-get」を呼び出す代わりに、フルパス/ usr / bin / apt-getを使用します。その後、スクリプトを壊すことなく、問題なく更新を取得できます。(これは、PATHの/ usr / binの前にある/ usr / local / binに依存しています-Debianのデフォルト)。
ジェレミーデイビス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.