![ソースからアプリケーションをインストールする最後のステップでrootでmakeを実行しないようにするにはどうすればよいですか? [コピー]](https://linux33.com/image/133729/%E3%82%BD%E3%83%BC%E3%82%B9%E3%81%8B%E3%82%89%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B%E6%9C%80%E5%BE%8C%E3%81%AE%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E3%81%A7root%E3%81%A7make%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%97%E3%81%AA%E3%81%84%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
make install
私は、ソースからアプリケーションをインストールする最後のステップとしてrootとして実行することをいつも気にしません。結局、Makefileで任意のコードを実行できます。適切な引用不足のため、Makefileコマンドがソースコードディレクトリの外側のファイルを含めてはいけない項目を削除するという状況に直面しました。
make install
だから私はrootとして実行するのを避け、rootとしての活動を任意のコードを実行しない基本的なタスク(ファイルのコピーやアーカイブの抽出)に制限する方法を探しています。
答え1
検索の後、ほとんどのソースパッケージ(少なくとも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
、これはファイルの操作を観察して元に戻すために醜くて信頼できないハッキングに頼らないため、少しクリーンで安全なソリューションです。