WSL & Ubuntu、initファイルを移動する方法

WSL & Ubuntu、initファイルを移動する方法

私は WSL に開発環境を展開しました。とても満足しています。唯一の問題は、initシステムのルート パスにファイルが存在することです。

ルートサブディレクトリ

私のクライアントの1つにはディレクトリが必要で/initこれは変更できない制約です。

言うまでもなく、これにより、私が新しく見つけたエキサイティングな wsl 開発環境がこのプロジェクトに使用できなくなります。

wsl ファイルのパスを変更する方法はありますかinit?

答え1

回答が遅くなりました。最初に言及したプロジェクトはほぼ間違いなく終了しており、今後誰もこのニーズを抱えることはないと思われます。しかし、まあ、やってみます...

chroot jail を作成します。root として次の操作を実行します。

  • chroot の場所を作成します。 sudo mkdir /newroot; cd /newroot
  • 内部の必要なディレクトリをすべて再作成/バインドマウントしますnewroot
    • mkdir usr; mount --bind /usr usr
    • mkdir etc; mount --bind /etc etc
    • mkdir root
    • mkdir -p /home/user; mount --bind /home/user home/user(WSl インスタンスのデフォルトのユーザー名に置き換えます)。
    • mkdir var; mount --bind /var var
    • mkdir dev; mount --bind /dev dev
    • その他の必要なディレクトリについても同様です。
  • ディストリビューションのルート ディレクトリのシンボリック リンクに注意してください。たとえば、少なくとも Ubuntu では次のものも必要です。
    • ln -s usr/lib lib
    • ln -s usr/lib32 lib32
    • 等々 ...
  • mount -t proc none proc
  • mkdir init(顧客は初期化を要求したディレクトリ「本当の」ルートinitではなくファイル

ここで、wsl セッションを起動するには、 のショートカットを設定します。もちろん、wsl -u root -e sh -c "cd /newroot; exec /usr/sbin/chroot /newroot/" su - usernameデフォルトを置き換えます。username

これにより、ユーザーは、選択したディレクトリ構造のみを使用して chroot jail に起動されます。当然、ファイルではなくディレクトリが含まれinitますinit

答え2

tl;dr:/initファイルは削除できませんランニングWSL ディストリビューション。サブシステムがそのファイルを使用しており、実行中の WSL ディストリビューション内のすべてのプロセスがそこからフォークされるためです。

  • では、何ができるでしょうか?ファイルはロックされたディストリビューションを実行している間、サブシステムによって実行されます。回避策は、実行中のディストリビューションを待つか終了することです。wsl.exe --terminate Distroコマンドを使用します。ここで、Distro終了したい実行中のWSLディストリビューションの名前です。ディストリビューションがインストールされているフォルダーに移動し、これまたはこれファイルを削除しますinit

  • または、WSL ディストリビューション全体の tarball を作成する場合は、実行中のディストリビューションを終了する必要はありません。tarball を作成し、init を除外します。

cd /
tar -cpf backup.tar --exclude=/backup.tar --exclude=/init --xattrs --one-file-system /

このコマンドを実行する前に、すべてのコマンドライン オプションを確認してください。ファイルの権限を保持する必要があります。

  • initファイルはどこから来るのでしょうか?initファイルはMicrosoft WSL開発者によって作成され、似ていないsystemd、sysVinit、その他の従来のGNU/Linux initシステムで実行できます。実際のファイルは ですSystem32\lxss\tools\init。ディストリビューションが起動されると、Linux Subsystem Manager Service (LXSS) は、そのファイルをrootfsフォルダにコピーします ( CopyFileW()Win32 APIを使用)。WSL2 まず\toolsフォルダーは 9p プロトコルでマウントされ、その後上記のように使用されます。

関連情報