ソースからアプリケーションをインストールする最後のステップとして、rootとしてmake install
を実行することには常に消極的です。結局のところ、Makefileから任意のコードを実行することができます。適切な引用符がないために、Makefileコマンドは、ソースコードディレクトリ外のファイルを含め、削除するはずのないものを削除することはすでに私に起こりました。
このため、make install
をrootとして実行しないようにし、rootとしてのアクティビティを、任意のコードを実行しない基本的な操作(ファイルのコピーやアーカイブの抽出など)に制限する方法を探しています。
いくつか検索したところ、ほとんどのソースパッケージ(少なくともautotoolsまたはcmakeを使用するもの)では、コンパイルに使用されるPREFIXとは異なるディレクトリにインストールできることがわかりました。DESTDIR環境変数で目的の場所を指定するだけです。
私は次のことをすることになりました:
firejail --x11=none --net=none --whitelist="$PWD" # Enter sandbox
./configure # (or similar)
make
DESTDIR=dest make install # install application into dest
exit # from firejail
pkgname="$(basename "$PWD")" # (or specify desired package name manually)
fakeroot tar czf "$pkgname.tgz" -C dest . # pack the installed files into a .tgz archive
fakeroot alien --version=$(date +%F) -k "$pkgname.tgz" # create a .deb package from the .tgz archive
最後のコマンドでSudo alien -i
の代わりにfakeroot alien
を使用して、パッケージをすぐにインストールすることもできます。または、アプリケーションをパッケージに変換したくない場合は、最後の行(alien
を呼び出す)をSudo tar xzf "$pkgname.tgz" -C /
に置き換えて、パッケージをrootとして抽出できます。
ここで注意すべきいくつかの事柄:
checkinstall
を放棄し、代わりにalien
を使用しました。これは、ファイル操作の監視と取り消しを醜く信頼性の低いハッキングに依存しないため、少しクリーンで安全なソリューションです。