アップグレード後にapt-getコマンドを実行する方法

アップグレード後にapt-getコマンドを実行する方法

最近良い人に会いました。checkrestart実行中のプロセスが最近更新されたライブラリの古いバージョンを使用していることを確認し、更新されたライブラリにロードするために再起動が必要かどうかを確認するツールです。現時点では、orをcheckrestart使用するたびに手動で呼び出す必要があります。apt-get upgradeaptitude upgrade

apt-get特定のパッケージをアップグレードした後にこれらのコマンドを自動的に呼び出す方法はありますか?aptitudeソリューションが適用されると、ボーナスポイントが提供されますunattended-upgrades

答え1

もう少し検索した後、私はすでに疑っていたことを発見しました。aptそれは多くのツールで使用されていますが、ほとんど文書化されていないように見える特定のイベントに対してコマンドを呼び出すフックセットを独自に提供します。

checkrestartパッケージのアップグレード後にツールを呼び出すのは非常に簡単です。次のコード行を/etc/apt/apt.conf既存のファイルの1つまたは新しいファイルに入れます/etc/apt/apt.conf.d/

DPkg::Post-Invoke-Success { '/usr/sbin/checkrestart';};

checkrestartdpkgこの関数は呼び出されるたびに呼び出されapt(もちろん依存する他のツールもapt含むaptitude)、正常に完了します。

答え2

これを行う方法はいくつかあります。

スクリプトの使用

迅速で汚い解決策は、apt-getorというスクリプトを作成し、aptitude次のように実際のプログラムを呼び出すことです。

#!/bin/bash
# filename: apt-get

# '$@' is all of the arguments passed to the script
/usr/bin/apt-get-bin "$@"
# or /usr/bin/aptitude-bin "$@"

if [[ $1 == *upgrade* ]] ; then
    checkrestart
fi

スクリプトを実行可能にします。chmod +x apt-get。ルートが所有するスクリプトを作成することもできますchown root apt-get; chgrp root apt-get。スクリプトにsetuidビットを設定しないように注意してください。攻撃者がスクリプトへの書き込みアクセス権を取得すると、スクリプトをすばやく簡単に変更してルートシェルを取得できるためです。

もちろん、この方法を使用するには、実際のバイナリを別の場所に移動し、シェルスクリプトをパスのどこかに移動する必要があります。ユーザースクリプトを配置する正しい場所はです/usr/local/bin。ただし、この場合、クリーンな状態を維持するには、バイナリを移動する前に実際に存在していた場所にスクリプトを配置する必要があります。

このようにバイナリをスクリプトに置き換えることはかなり邪魔になり、システムのすべてのユーザーに影響を与えます。あるいは、スクリプト名を次のように指定できますapt-get-cr。代わりにスクリプトを呼び出すことを忘れないでくださいapt-get。シェル関数を作成することもできます。

シェル関数の使用

apt-getバイナリを移動せずにコマンド名を保持するには、シェル機能を使用します。

apt-get() {
    # 'command' makes sure this function doesn't call itself.
    # You could also use a direct path the binary as shown above.
    command apt-get "$@"

    if [[ $1 == *upgrade* ]] ; then
        checkrestart
    fi
}

この機能をシェル構成(など)のどこかに配置し~/.bashrcます~/.zshrc

この方法は通常、スクリプト方法よりも邪魔にならない。また、通常、rootユーザーのみが可能なモバイルバイナリは必要ありません。

欠点は、シェル関数アプローチがシェル間で常に移植性に優れているわけではなく、本質的にスクリプトアプローチなどのグラフィカルインタフェース(ランチャーバーなど)ではうまく機能しないことです(ほとんどの場合、スクリプトを実行可能なバイナリファイルとして扱うすることができます)。 。

関連情報