WSLに基づいてFedoraでサービスを開始するには?

WSLに基づいてFedoraでサービスを開始するには?

Linux 2 Windows サブシステムに Fedora 33 があります。

sshdを実行したいです。このために私は努力しました

$ sudo systemctl start sshd

しかし、エラーメッセージが表示されました。

System has not been booted with systemd as init system (PID 1). Can't operate

このエラーメッセージを検索しています。

https://linuxhandbook.com/system-has-not-been-booted-with-systemd/

この場合、サービスコマンドを使用することをお勧めします。試してみましたが、こんな感じです。

Redirecting to /bin/systemctl start sshd.service

だから同じエラーが発生しました。

WSL2ベースのFedora 33で何ができますか?

アップデート:以下の説明に従って、クラウドイメージとwslコマンドを使用してWSLにFedoraをインストールしました。

https://fedoramagazine.org/wsl-fedora-33/

答え1

私はfedora 35を使用していますが、他のFedoraバージョンでも動作できます。
NotTheDr01dsが言ったように、fedoraはそれをサポートしませんservice start sshd。したがって、コマンドを使用してsshdを手動で実行できますnohup /usr/sbin/sshd -D > sshd.log 2>&1 &。または、wslのシステム操作を実行する必要があります。
genieはfedoraをサポートしているので、これを使用してシステムを操作してみてください。
プロジェクトURLは次のとおりです。https://github.com/arkane-systems/genie

  1. このページからrpmパッケージをダウンロードできます。https://github.com/arkane-systems/genie/releases

  2. 次のコマンドを使用して genie-*.x86_64.rpm をインストールします。dnf install

  3. コマンドでGenieを使うgenie -s

  4. systemctlを使用したsshdの起動systemctl start sshd

Transport endpoint is not connected手順4でエラーが発生する可能性があります。これは wsl ldconfig の既知の問題が原因で発生します。

問題を解決するには、以下の手順に従ってください。
https://github.com/microsoft/WSL/issues/5548#issuecomment-990521993
https://github.com/microsoft/WSL/issues/5548#issuecomment-912495487

答え2

どのようにインストールしたかは言及していませんが、指示に似ているとします。ここ。私はFedoraを使ったことがないので、高速なchrootインスタンスをロードするためにFedoraを使用することにしました。Fedora-コンテナ-ベース上記の手順を次のように使用してください。一部のchroot関連情報

私の考えでは、Fedoraは「オールイン」されており、systemdおそらく私が見た他のほとんどのディストリビューションよりもそうです。たとえば、Ubuntuではまだコマンドを使用できますが、serviceFedoraはsystemdとにかくコマンドをリダイレクトします。 Fedoraでは初期化スクリプトも見つかりません。すべてサービスファイルsshです。systemd

このブログ投稿これを裏付けるためにFedoraを例に挙げたようです。ほとんどの人に良いアドバイスをたくさん提供します。その他提供する:

  • 実行したいサービスのDockerfileを見て、サービスを開始および停止する方法を確認してください。
  • とにかくDockerまたはPodmanコンテナを使用してください。

sshd提案は良いですが、私の考えにはあまり役に立ちません。

だから私の提案を追加します。systemdサービスを構成し、開始(および停止/再起動)するための手順を理解するには、マニュアルを参照してください。

sshdFedoraの場合、systemdサービス(usr/lib/systemd/system/sshd.service)にはホストキーが生成されたかどうかを検出し、ホストキーがない場合(インストール後すぐに生成されるなど)、それを検出する依存関係があります。 systemd(私の考えでは - 私は読書サービスの専門家であると主張することはできません。)

したがって、まずこの手順を手動で実行する必要があります(まだ実行していない場合)。

/usr/libexec/openssh/sshd-keygen ecdsa
/usr/libexec/openssh/sshd-keygen rsa
/usr/libexec/openssh/sshd-keygen ed25519

個人的な提案/追加のヒント - sshdポートを22以外のポートに変更します。インストールするWindowsオープンSSHサーバーWindowsホストでは、これによりホスト上のすべてのWSLインスタンスに簡単にプロキシを適用できます。

次に、使用したコマンドと同じコマンドを使用して手動でサービスを開始しますsystemd(上記の.serviceファイルを参照)。

/usr/sbin/sshd

chrootこれはFedora 33環境で動作します。

考えてみることもできます。監督者PID 1 init または他の PID 1 init の代わりにsystemdサービスを管理します。私はこれをDockerコンテナで使用し、単純なサービスを開始/停止/再起動するのに効果的です。独自の設定を適用する必要がありますが、簡単です。最後に、サービスが予期せず停止した場合は、管理効率と弾力性を高めることをお勧めします。

WSLを使用しているので注意すべきもう1つのことは、sshdWSL2インスタンスがWindowsホストの背後にある仮想NICで常に疑似NAT方式であることを覚えておいてください。これはssh、ネットワーク(またはWSL2のすべてのサービス)の他のコンピュータからアクセスするために追加の努力が必要であることを意味します。私の答えを見てください。ここそしてここそのテーマに。

答え3

ここを見てください:

https://gist.github.com/djfdyuruiry/6720faa3f9fc59bfdf6284ee1f41f950

こんにちはkh

関連情報