起動時間パラメータ(および/または実行中のカーネルの種類)に基づいて特定のカーネルモジュール、マウントポイント、および起動時間サービス(SystemdまたはOpenRC)を有効または無効にする方法はありますか?
さらに一歩進んで、初期化システムを同じように置き換えることができますか? (カーネルパラメータについて知っていますが、init=...
(例えば)systemdとOpenRCは同じインストールに共存し、起動時に勝手に交換できますか?
背景知識について(誰かがこれを覚えているほど年をとった場合)、私の考えは起動時にメニューから選択できるconfig.sys / autoexec.batに複数のシステム構成ファイルを持つDOS技術から来ました。
したがって、(純粋な例)GRUBに3つのメニュー項目が必要な場合は、次のようになります。
「ゲーム」:カスタムカーネルをロードし、独自のnvidiaドライバをロードし、optimus(またはvfioパススルー)を有効にしてX11から起動します。
「ワーク」:別のカーネルをロードし、Intelビデオドライバをロードし、暗号化されたワークパーティションをマウントしてからWaylandから起動します。
「サーバー」:3番目(待ち時間が長い)カーネルをロードし、特定の追加のバックグラウンドサービス(Webサーバー、SSHホスト、VMホストなど)を起動し、テキストコンソールから起動します。
上記は単なる例ですが、要点をご理解ください。
Linuxでそのようなことは可能ですか?
答え1
確かに。ディストリビューションによっては簡単でも難しいかもしれませんが、そうです。
モジュールの場合、このU&L投稿modules_load
モジュールをロードするためのカーネルパラメータも言及されています。この他の記事モジュールをブロックするためのパラメータがあります。 Arch Linuxではmkinitcpio
異なる構成で複数のカーネルイメージを作成するのは簡単です(少なくともプリロードされたモジュールなどの場合はありますが、ビルド構成ではありません)。
サービスのロード、ボリュームのマウントなどの場合、systemdは2つのユニットを依存関係チェーンの一部にし、操作を簡単にします。これによりgaming.target
、X11を起動するサービスである「ターゲット」を作成したり、インストール単位と作業パーティションを暗号化するデバイス単位、Waylandを起動する単位などで構成される「ターゲット」を作成したりできます。開始しようとしているターゲットは、以下を使用してカーネルコマンドラインの一部になります。Wants
Requires
WantedBy
RequiredBy
work.target
Wants
Requires
WantedBy
RequiredBy
systemd.unit
パラメーター(例えば、systemd.unit=gaming.target
またはsystemd.unit=work.target
)。
ターゲットはカーネルコマンドラインで設定し、モジュールもロードする必要があるため、ブートローダ設定を更新して、そのカーネルイメージとコマンドラインを使用して各ターゲットの別々のエントリを作成する必要があります。
Init システムの交換可能 - Ubuntu で systemd が初めて導入されたときに、Upstart と systemd の間の交換が可能でした。私はGentooがまだそれをサポートしていると思います。他のディストリビューションでは、誰かがデフォルトではなく初期化システムのサービス構成などを設定する必要があります(その人はおそらくあなたの可能性が高く、多くの作業が必要です)。