📌

Rocky Linux@WSL1

2022/10/18に公開

目的

  1. windows10にlinux環境を構築し, スパコンセンター等外部の計算機にsshでアクセスする
  2. macのterminalと同じようにアプリをクリックするだけでterminalを起動できるようにする
  3. 科学技術計算機管理の経験からRedhat系のOSを採用したいのでCentOSの後継Rockyを導入する
  4. windows10起動後, 煩わしい事前操作なしにアプリを開くようにterminalを開く

Ubuntuやwindows11+WSLgはもっと楽という話もあるが,今回はRocky9@windows10で.

windowsでの設定

Rocky linuxのdownload / install

https://github.com/rocky-linux/sig-cloud-instance-images/tree/Rocky-9.0.20220720-Base-x86_64
からlayer.tar.xzをdownloadし解凍する.

$ wget https://github.com/rocky-linux/sig-cloud-instance-images/blob/Rocky-9.0.20220720-Base-x86_64/layer.tar.xz
$ xz -dv layer.tar.xz

予めwindows上の任意の場所にRocky9フォルダを作成しておきlayer.tarをRocky9へ移動しておく.

PowerShell(管理者)> wsl --import Rocky9 . layer.tar --version 2

のようにしてimportする.
https://learn.microsoft.com/ja-jp/windows/wsl/compare-versions
を読んだ上でWSL1で運用したいが, WSL1でdnf 利用する時にはerrorがでるため,まずはWSL2で環境を用意し, その後WSL1に変更することにする.以下wslコマンドのまとめ.

PowerShell(管理者)> wsl -l -v # importされたOS確認
PowerShell(管理者)> wsl -d Rocky9 # 起動.
PowerShell(管理者)> wsl --shutdown # shutdown
PowerShell(管理者)> wsl --unregister Rocky9 # uninstall
PowerShell(管理者)> wsl --set-version Rocky9 1 # WSL1/WSL2の切り替え

Rocky9内での設定

# dnf update -y

windows機からwsl上のRocky9へsshでログインするためにRocky9上でssh-serverを立ち上げる.しかしsystemctlがPID 1で起動していないため対策が必要.
https://github.com/arkane-systems/genie/releases
からgenieをdownload / install (参考: https://www.netmarvs.com/archives/5597)

# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# dnf install daemonize -y
# dnf install wget -y
# wget https://github.com/arkane-systems/genie/releases/download/v2.5/genie-2.5-1.fc36.x86_64.rpm
# dnf install ./genie-2.5-1.fc36.x86_64.rpm
# genie -s

(daemonizeのために8が必要)これでgenie -sを実行したあとにはsystemctlが使えるようになる.(Ctrl-Dするとgenieから抜け再びsystemctlが使えなくなる)

通常のtool群

# dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
# dnf groupinstall "Development Tools" -y
# dnf install openssh* iproute vim passwd wget xterm x11* procps-ng gnuplot -y
# passwd

wsl1でsystemctlを使うためにpython3で書かれたsystemctl3.pyに置き換える

# cd /usr/bin
# mv systemctl systemctl.org
# wget https://raw.githubusercontent.com/gdraheim/docker-systemctl-replacement/master/files/docker/systemctl3.py
# mv systemctl3.py systemctl 
# chmod +x systemctl

sshの設定

# grep PasswordAuth /etc/ssh/sshd_config
PasswordAuthentication yes
# systemctl start sshd.service

上記コマンドによりwindowsセキュリティ警告が出てくるので許可する.
一般ユーザの作成

# useradd foo
# passwd foo

wslから一度抜け,WSL2からWSL1へ変換.

PowerShell> wsl --set-version Rocky9 1

一般ユーザで入り直す

PowerShell> wsl -d Rocky9 -u foo
$ ssh hoge.server.com

外部サーバへアクセスできることを確認する.
外部サーバがCentOS7で構築されている場合などのときに以下のようなerrorで接続できない場合

$ ssh XXX.XXX.XXX.XXX
ssh_dispatch_run_fatal: Connection to XXX.XXX.XXX.XXX port 22: error in libcrypto

https://www.dell.com/support/kbdoc/ja-jp/000201024/rhel9からrhel6へのssh接続が失敗する
を参考に以下のコマンドでSHA1暗号化ポリシーをアクティブにすることで接続できるようになる.

# update-crypto-policies --set DEFAULT:SHA1

再びwindowsでの設定

ssh-server@Rocky9の自動起動

https://qiita.com/nashi2603/items/d0645305b137017b91b0
https://pc-karuma.net/windows-10-task-schedule-without-uac-prompt/
を使ってwindows機再起動した時の設定を自動で行う

Xwindow systemの構築

xmingあるいはVcXsrvをinstallする.
http://www.straightrunning.com/XmingNotes/
https://sourceforge.net/projects/vcxsrv/
以下の設定で保存すれば以降このファイルからxtermでRocky9へアクセス可能.

Discussion