init.dスクリプトをオフラインで有効にするには?

init.dスクリプトをオフラインで有効にするには?

私の問題は簡単ですが、オンラインで解決策を見つけることができません。 init.dスクリプトを含むファイルシステムがあります。システムが最初に起動したときにこのスクリプトを実行したいと思います。どうすればいいですか?可能であれば、init.dシンボリックリンクを手動で生成することを避けたいと思います。

編集:私はDebian 4.19を使用しています。 init.dスクリプトを含むファイルシステムは、最終システムのrootfsです。最初の起動とは、コンピュータの電源が入っているファイルシステムで初めて起動するときにスクリプトを実行したいということです(私が使用するカーネルも初めて起動しますが、それは重要ではないと思います)。このinit.dスクリプトを維持し、可能であれば他のサービス管理に移動したくありません。基本的に問題は簡単です。起動したいLinuxファイルシステムにアクセスでき、システム全体を起動せずにinit.dスクリプトを有効にしたいと思います。

ベストアンサー1

まず、「Debian 4.19」は存在しません。おそらく、次の Debian システムを見ているでしょう。Linuxカーネルバージョン4.19これは次のことを意味します。Debian 10(「buster」、約2週間前にDebian 11がリリースされ、「oldstable」になったバージョン)。

Debian は Debian 8 から使用してきましたが、systemdまだ SysVinit の互換性とは異なる初期化システムを交換するオプションがありますsystemd。 Debian 10でSysVinitを使用することが実際にどのように実用的であるかはわかりませんが、今システム統合の利点はsystemdsystemd

たとえば、Debian 10インストールルートパーティションを含むディスクがあり、/dev/sdXNシステムが実際に起動する前にinit.dスクリプトを追加するように変更したいとします。

ディスクを他のシステムにマウントできます。

mount /dev/sdXN /mnt

次に、新しくインストールされたディレクトリにスクリプトをコピーします/etc/init.d/

cp /some/where/myscript /mnt/etc/init.d/
chmod a+rx /mnt/etc/init.d/myscript

注:systemd互換性のために、スクリプトは始めにLSBスタイルのコメントブロックを含めて依存関係を文書化し、起動systemd時に早期に実行されるのを防ぐ必要があります。このDebian Wikiの記事を参照してくださいまたはinsserv(8)マニュアルページ詳細については。

デフォルトでは、スクリプトの先頭には次のコメントブロックが必要です。コメント以外の行の前に:

### BEGIN INIT INFO
# Provides:          myscript
# Required-Start:    $local_fs $syslog $network
# Required-Stop:     $local_fs $syslog $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start myscript at boot time
# Description:       Enable service provided by myscript.
### END INIT INFO

Required-Startスクリプトの要件に応じて行を調整する必要があります。Required-Stop

スクリプトの準備ができたら、chroot新しいインストールに移動して実行できます。update-rc.dinit.d シンボリックリンクを生成するツールです。ただし、実際のchrootコマンドを実行する前にファイルシステムをマウントする必要があります。/procそれ/sys以外の/dev場合は、多くの操作を実行できません。

mount -t proc none /mnt/proc
mount -t sysfs none /mnt/sys
mount -o rbind /dev /mnt/dev
chroot /mnt /bin/bash  # From this point on, /mnt will be this session's root directory

これで、セッションが新しくインストールされた環境内で実行され、システムがすでに新しいインストールを実行しているかのように、そのインストールツールのほとんどを使用できるようになります。したがって、次のupdate-rc.dコマンドを使用できます。

/usr/sbin/update-rc.d myscript defaults

その後、chrootを元に戻し、新しくマウントされたルートファイルシステムをアンマウントしてプロセスをきちんと終了できます。

exit  # back to having the real root directory
umount /mnt/dev
umount /mnt/proc
umount /mnt/sys
umount /mnt

(非アクティブインストールのルートファイルシステムをマウントする手順は、破損したブートローダの回復や忘れたルートパスワードの変更など、多くのメンテナンスやトラブルシューティングの状況に適用されます。この場合、ルートファイルシステムをマウントする必要がない場合があります。 . 非アクティブな/procインストール/sys

おすすめ記事