计算化学公社

 找回密码 Forget password
 注册 Register
Views: 1118|回复 Reply: 1

[虚拟机] 基于 docker 为 wsl 安装 centos7

[复制链接 Copy URL]

169

帖子

1

威望

3339

eV
积分
3528

Level 5 (御坂)

发表于 Post on 2022-4-29 10:17:43 | 显示全部楼层 Show all |阅读模式 Reading model
本帖最后由 highlight 于 2022-4-29 12:24 编辑

前情提要:
假设你遇到了这么一种场景,需要在手头的 windows 电脑上用 wsl 编译一个应用,然后移植到 centos7 的超算或服务器上。
而此时如果使用 Microsoft Store 免费提供的 ubuntu-20.04 或 openeuler(据说基于 centos8),大概率在移植后会遇到 glibc 版本不匹配问题。
这时候你或许就需要一个 centos7 版本的 wsl 了。

实现方法:
本质就是在 wsl 中加载打包好的 docker 镜像,https://docs.microsoft.com/zh-cn/windows/wsl/use-custom-distro

操作:
1. 安装 wsl2。注意:必须是 wsl2,旧版本需要升级 https://docs.microsoft.com/zh-cn/windows/wsl/install-manual
2. 安装 Microsoft Store 中的 ubuntu-20.04
3. windows 系统安装 docker-desktop,然后 运行
4. 进入 Linux shell (此事时为 ubuntu-20.04 镜像)执行操作:
  1. # 拉取镜像
  2. docker pull centos:centos7
  3. # 运行容器实例
  4. docker run -t centos:centos7 bash ls /
  5. # 查看 容器ID
  6. docker container ls -a
  7. # 导出,注意:win 的磁盘都自动挂在 /mnt 下
  8. export {容器ID} > {tar存放位置}/centos.tar
复制代码

5. 打开 PowerShell
  1. # 导入,注意路径里应该是 \ 还是 /
  2. wsl --import CentOS7 {给容器预留的目录} {tar存放位置}\centos7.tar
复制代码

6. 此时 cnetos7 已经安装完成,可以在 Linux shell 里折腾些你习惯的装机后配置了。
7. 若是需要将 cnetos7 设为默认 linux shell,可在 PowerShell 执行
  1. wslconfig /set-default CentOS7
复制代码

8. 若是需要修改 wsl 使用的核数/内存,只需要 建立/修改
  1. # C:\Users\{用户名}\.wslconfig
  2. [wsl2]
  3. processors=8
  4. memory=8GB
  5. swap=8GB
  6. localhostForwarding=true
复制代码


PS:
注意使用机器的指令集,据说 12 代酷睿 i 系列封杀了 avx512

评分 Rate

参与人数
Participants 1
威望 +1 收起 理由
Reason
sobereva + 1

查看全部评分 View all ratings

390

帖子

1

威望

2032

eV
积分
2442

Level 5 (御坂)

发表于 Post on 2022-4-30 05:54:31 | 显示全部楼层 Show all
本帖最后由 Daniel_Arndt 于 2022-5-1 11:53 编辑

其实WSL1也是可以的,我当时装的是CentOS 8,后来把CentOS 8迁移到了AlmaLinux(当时我想装的是AlmaLinux的WSL1,但实践过程中发现用AlmaLinux官方提供的docker来安装WSL1的话,会出的问题比从CentOS的WSL1迁移到AlmaLinux的WSL1会出的问题还多,现在其实没必要像我当初一样折腾了,AlmaLinux官方于2022年4月1日提供了“AlmaLinux 8 WSL”,可以从Microsoft Store安装 https://apps.microsoft.com/store ... ?hl=en-us&gl=US )。

创建D:\wsl1文件夹,从 https://github.com/CentOS/sig-cl ... layer.x86_64.tar.xz 下载CentOS-8-Container-8.1.1911-20200113.3-layer.x86_64.tar.xz,放到D:\wsl1文件夹下。从 https://github.com/DDoSolitary/LxRunOffline/releases 下载LxRunOffline-v3.5.0-msvc.zip,把压缩包里面的LxRunOffline.exe和LxRunOfflineShellExt.dll放到C:\Windows\System32文件夹。然后创建D:\wsl1\centos文件夹,在Windows命令提示符中运行“LxRunOffline install -n CentOS -d D:\wsl1\centos -f D:\wsl1\CentOS-8-Container-8.1.1911-20200113.3-layer.x86_64.tar.xz -s”,然后桌面上就会出现一个CentOS的快捷方式。

接着打开CentOS,运行“yum update”、“yum install passwd”(此docker中一开始是没有安装passwd的,必须手动安装),然后才可以给root设置密码、创建带密码的普通用户。

WSL里面运行“yum”命令时,可能会报错:
RPM: error: db5 error(-30969) from dbenv->open: BDB0091 DB_VERSION_MISMATCH: Database environment version mismatch
RPM: error: cannot open Packages index using db5 -  (-30969)
RPM: error: cannot open Packages database in /var/lib/rpm
The downloaded packages were saved in cache until the next successful transaction.
You can remove cached packages by executing 'yum clean packages'.
Error: Could not run transaction.
解决方案是先运行“rm /var/lib/rpm/.rpm.lock”,再运行“yum clean packages”。

如果想修改WSL的默认用户的话,照着这个网页 https://superuser.com/questions/ ... nstalled-wsl-distro 操作即可。如果想把WSL1里面的CentOS 8迁移到AlmaLinux的话,照着这个网页 https://cloudlinuxtech.com/migrate-from-centos-8-to-almalinux-8/ 操作即可。需要注意的是WSL1没有GRUB( https://github.com/microsoft/WSL/issues/1965 ),因而运行“bash almalinux-deploy.sh”后的输出应该是下面这样的,无需为最后的“ERROR”操心:
Complete!
Run dnf distro-sync -y                                                OK
Restoring of alternatives is done                                     OK
Install AlmaLinux kernel                                              ERROR
/usr/sbin/grub2-probe: error: failed to get canonical path of `rootfs'.

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2023-2-7 03:12 , Processed in 0.329441 second(s), 23 queries .

快速回复 返回顶部 返回列表 Return to list