一部のアプリケーションをインストールすると、インストール時に自動的に実行されるアプリケーションからプロセスまたはサービスが開始される場合があります。それらを起動せずにインストールする方法は?
chroot
必要なパッケージをインストールします。もちろん、ドライバー、特にGPUドライバーは存在しないため、インストールする必要があります。
一部のアプリケーションをインストールすると、インストール時に自動的に実行されるアプリケーションからプロセスまたはサービスが開始される場合があります。それらを起動せずにインストールする方法は?
chroot
必要なパッケージをインストールします。もちろん、ドライバー、特にGPUドライバーは存在しないため、インストールする必要があります。
回答:
少しハックがありますが、これを行うには非常に信頼できる方法がありますが、これは自動化されたインストールスクリプトでしばらくの間使用しています。
最初に、たとえば/root/fake
を/bin/true
呼び出すディレクトリへのシンボリックリンクを含むディレクトリを作成します。
initctl
invoke-rc.d
restart
start
stop
start-stop-daemon
service
deb-systemd-helper
また、何もせずに成功を返すbashスクリプトにすることもできます。
次に、$PATH
パッケージをインストールする際の先頭にそのディレクトリを含めます。
PATH=/root/fake:$PATH apt-get install whatever
これは、initramfsの作成などが行われている間、デーモンの起動/再起動を防ぐだけです。
パッケージのインストールおよび削除時に実行されているスクリプトinvoke-rc.d
、またはサービスを開始および停止するための前述のコマンドの実行。ただし、絶対パスで呼び出すことはありません(少なくとも、そうなるものには遭遇していません)。
そのため、の先頭に偽の「操作なし」コマンドを挿入することにより$PATH
、実際のコマンドが呼び出されることはありません。
サービスの開始/停止に使用されるコマンドのみが偽装されているため、他のすべて、特にinitramfs-imagesの更新/作成などの重要なタスクは引き続き機能します。
ln -s
、たとえばこの場合に作成できますln -s /bin/true /root/fake/initctl
。
invoke-rc.d
と責任があります。
$PATH
変数の先頭に偽のコマンドを使用してディレクトリを配置すると、invoke-rc.d
デーモンへのすべての呼び出しやデーモンの起動と停止に使用できるその他の呼び出しは、偽のコマンドを使用します。つまり、絶対パスで呼び出されない限り、これに遭遇したことはありません。
/bin/true
ですか?また、パッケージに関係する残りのコマンドは何ですか?それらは指定されたものによって軌道外に投げられません$PATH
か?
バックグラウンドデーモンはで起動されますinvoke-rc.d
。これにより、現在のシステムランレベルで実行することは想定されていないrcスクリプトがデーモンに起動されないようになります。環境変数RUNLEVELを設定することにより、現在のシステムのランレベルの概念をオーバーライドできます。ランレベル0と6で実行するものは何もありませんが、invoke-rc.d
これらのランレベルを使用すると、バグが発生し、とにかく物事が実行されるようです。ほとんどのデーモンはランレベル1で実行されないため、次のようにインストール時にデーモンが開始されないようにすることができます。
sudo RUNLEVEL=1 apt-get install redis-server
chroot
必要なパッケージをインストールします。実行が開始されたため、時々、ubuntu(ライブCD)セッションを終了します。とにかく、私が尋ねたいのは、どのようにこれを使用RUNLEVEL
するのchroot
ですか?
invoke-rc.d
私が直面した問題の原因はバギーにある可能性はありますか?
invoke-rc.d
。これはどのパッケージですか?
インストール--no-triggers
を行う際には、コマンドラインオプションを使用する必要があると思いますdpkg
。このようなもの:
dpkg -i --no-triggers SomeBigPackage.deb
この設定を永続化してapt-get install
トリガーを実行しないようにするには、次の場所にカスタムdpkg構成ファイルを作成します/etc/dpkg/dpkg.cfg.d/custom
。
# Install packages without starting background processes and services
# See http://askubuntu.com/q/74061
no-triggers
dpkgは、トリガーが実行されていなくても、実行されたとしてトリガーを記録することに注意してください。
$ sudo apt-get install redis-server
…
Starting redis-server: redis-server.
$ service redis-server status
redis-server is not running
または、インストーラースクリプトにservice
コマンドを実行させて、新しいサービスをオフにすることもできます。
service name_of_service stop
apt-get
同等?または、直接使用するか何かをインストールするかどうかでdpkg
実行するように設定する方法はありますか?--no-triggers
dpkg
apt-get
私がやったことは、パッケージをインストールするときにdebootstrapが何をするかをエミュレートすることです。ただし、dpkg-divertを使用しました。
まず、実際のファイルを邪魔にならない場所に移動します。
dpkg-divert --add --rename --local /sbin/start-stop-daemon
dpkg-divert --add --rename --local /sbin/initctl
次に、ダミーバージョンを作成します。
echo \
"#!/bin/sh
echo
echo \"Warning: Fake start-stop-daemon called, doing nothing\"" > "/sbin/start-stop-daemon"
chmod 755 "/sbin/start-stop-daemon"
echo \
"#!/bin/sh
echo
echo \"Warning: Fake initctl called, doing nothing\"" > "/sbin/initctl"
chmod 755 "/sbin/initctl"
次に、apt-getのアップグレード、インストールなどを行ってから、次のコマンドでクリーンアップします。
rm /sbin/initctl /sbin/start-stop-daemon
dpkg-divert --remove --rename /sbin/initctl
dpkg-divert --remove --rename /sbin/start-stop-daemon
私は、スタート/ストップサービスに使用することができ、他のコマンドがある知っているが、debootstrapのは気にstart-stop-daemon
してinitctl
私はスーツに続いたので、。