前言
很多情况下代码开发需要依赖 Linux 系统,比如安装 Docker 容器来实现代码隔离,然而问题是大部分同学的电脑都是 Windows 系统,这时就会出现大量报错,经历过的同学一定是边踩坑边落泪。
如何免费拥有一台 Linux 服务器呢?
- 薅各大云厂商的羊毛,很多厂商对学生都会有优惠,羊毛不薅白不薅,不过问题是不可能让你一直白嫖啊,你总有花钱的时候。
- 在自己的 Windows 电脑上安装一个 Linux 子系统,随时随地都能本地跑代码,装好一次一劳永逸,针对初学 Linux 开发来说足够使用了。
那么,如何在 Windows 电脑上安装 Linux 子系统呢? 这里也有两种方式:
- 安装虚拟机软件,比如 VMware Workstation Player
- 使用自带的WSL,Windows Subsystem for Linux
对于早期的 Win 操作系统,通常都会采用第一种方式进行安装,而对于 Win10 Win11 系统来说,笔者优先推荐第2种方式,原因下面说,本篇文章我会带大家实践第 2 种方式,分分钟时间搞定一台 Linux 服务器!
一、 什么是WSL和WSL2
WSL:全称为Windows Subsystem for Linux,这是微软官方开发的适用于 Linux 的 Windows 子系统,可让开发人员直接在 Windows 上按原样运行 GNU/Linux 环境,且不会产生传统虚拟机或双启动设置开销。
WSL2:具有WSL1的优点,但使用实际的Linux内核,因而性能更好。
WSL有什么优势:
- VMware等虚拟机软件资源消耗大、启动慢、运行效率低。
- WSL几乎能运行完整的操作系统,资源消耗小、启动快、切换快
对于没有用过虚拟机软件安装Linux系统的小伙伴而言,直接无脑用WSL2完事!
二、如何安装
2.1、开启虚拟化
检查cpu是否开启了虚拟化功能,一般是默认开启的,如果没有,就需要进入bios界面打开2
2.2、打开控制面板,进入windows程序和功能,勾选虚拟化平台跟适用于windows的linux子系统
如果没有Hyper-V
选项的,按照以下步骤
- 添加一个文件
Hyper-V.bat
添加以下内容,并双击运行后重启电脑
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL
pause
查看自己电脑的windows版本是否符合WSL2的要求
查看自己的操作系统版本:win+R打窗口,输入winver
便可得到操作系统的内部版本如下:
如果要使用命令行
启用适用于Windows的Linux子系统,则以管理员身份打开windows powershell,输入如下指令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
启动虚拟机功能,在安装WSL2之前,必须启动虚拟机功能,同样在power shell中输入如下指令:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
2.3、 根据提示操作,然后重启电脑
2.4、下载Linux内核更新包
- 检查是否有wsl , 执行wsl --help 命令查看
- 如果有, 不用在重复安装.设置wsl2默认版本即可,wsl --set-default-version 2 通过该命令设置
- 如没有,则需下载安装 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
点击适用于 x64 计算机的 WSL2 Linux 内核更新包下载后,安装即可。
2.5、将 WSL 2 设置为默认版本
在powershell中输入如下指令:
wsl --set-default-version 2
便可将wsl的版本设置为wsl2。这里为了设置生效,重启计算机。
2.6、安装Ubuntu-20.04
我们想要在D盘安装wsl,而不是在C盘,装在C盘虽然启动要快一点,但是不建议,C盘尽量保持干净,任何软件也不要装在C盘,不然后面你的电脑会很卡,后续他要安装的所有东西都会在C盘,后期马上爆红的。具体步骤如下:
2.6.1、在D盘创建文件夹
现在D盘下创建一个名为linux的文件夹。注:这个文件夹的名字以及路径可以自由修改。
2.6.2、下载Ubuntu-20.04
在powershell中进入linux文件夹内,输入如下指令:
Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing
这里的https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx
是可变的,根据你想要安装的版本,选择不同的包链接。在这个网址列出的不同Linux子系统的链接地址。回车即可进行下载。
2.6.3、启动Ubuntu-20.04
在powershell中输入如下指令,便可成功创建启动wsl2。
Rename-Item .\Ubuntu20.04.appx Ubuntu.zip
Expand-Archive .\Ubuntu.zip -Verbose
cd .\Ubuntu\
.\ubuntu2004.exe
运行.exe
后需要设置用户名和密码,设置完成后即可成功进入wsl
。
后续如何打开和关闭系统呢:
# 打开
cd D:\linux\Ubuntu
.\ubuntu2004.exe
# 关闭
wsl --shutdown
也可以直接切换控制台,点击下拉箭头,找到Ubuntu
4. 查看wsl的版本
在powershell中输入如下指令查看wsl的版本:
wsl -l -v
查看Ubuntu是否启动
查看文件目录
df -h
注意
- 在上述所有的过程中使用powershell的地方,都要使用管理员身份打开powershell。
- 如果把安装的Linux子系统搞坏了,想要删除怎么办,同样在powershell中输入如下指令便可删除:
wsl --unregister Ubuntu-20.04
三、登陆Linux安装软件
3.0. 如何查看 IP 地址
- Windows: 终端输入
ipconfig
- Linux: 有如下三种方式
ifconfig # 需要 sudo apt install net-tools
hostname -I
ip addr show eth0
3.1 VScode如何访问Linux
打开vscode - 安装wsl插件,然后点击左下角的ssh -> Connect to WSL,可以登陆这台 Linux 服务器了
3.2 安装 ssh
(远程登陆+文件传输)
Linux 中安装 ssh:
sudo apt install openssh-server
sudo service ssh start # 启动
sudo service ssh status # 查看启动状态
远程登陆:
ssh user_xxx@172.17.4.63
文件传输:
scp xxx.file user_xxx@172.17.4.63:~/datasets/
此时远程登陆和文件传输,都会出现如下报错:
user_xxx@172.17.4.63: Permission denied (publickey).
这是因为 Linux 拒绝访问,有两种方式解决:
- 开启密码验证
- 使用密钥认证
3.2.1 开启密码验证
在 Linux 服务器上,vim 打开/etc/ssh/sshd_config
,然后修改其中的PasswordAuthentication值为 yes ,然后重启 ssh 服务。
sudo vim /etc/ssh/sshd_config # PasswordAuthentication改为yes
sudo service ssh restart
按 i 进行编辑 ,Esc退出编辑,输入 :wq 退出编辑文件
3.2.2 使用密钥认证
如果你觉得每次都要开启密码认证,非常麻烦,可以考虑使用密钥认证。你需要在Windows机器上生成一个SSH密钥对,然后将公钥添加到 Linux 的~/.ssh/authorized_keys
文件中。 具体而言:
首先需要下载并安装Git for Windows,然后打开Git Bash终端:
# windows上生成SSH密钥对
ssh-keygen
在.ssh文件夹中生成了密钥文件,其中id_rsa是私钥,id_rsa.pub是公钥。然后将id_rsa.pub中的内容复制到 Linux 的~/.ssh/authorized_keys
文件中。
3.3 安装 Docker
先安装一些依赖
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y
添加docker官网 GPG 密钥、设置stable 仓库
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
正确执行为会打印“OK”。
过程中可能存在问题:报错
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to download.docker.com:443
gpg: no valid OpenPGP data found.
这说明连接异常,更换阿里云进行配置GPG 密钥(如下图),以及设置stable仓库
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
安装 Docker
sudo apt-get update
sudo apt install docker-ce docker-ce-cli containerd.io
安装完成,Docker 服务将会自动启动。你可以输入下面的命令,验证它:
docker --version
sudo systemctl status docker
但安装过程中,可能报错如下:
invoke-rc.d:syntax error: unknown option ".-skip-systemd-native"
dpkg: error processing package docker-ce(--configure):
installed docker-ce package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
docker-ce
E:Sub-process /usr/bin/dpkg returnedan error code (1)
————————————————
则需执行以下操作:
cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo apt-get install docker-ce docker-ce-cli containerd.io
查阅安装的版本
如果有需要的话,安装历史版本的docker
apt list -a docker-ce ## 查看 Docker 软件源中所有可用的版本
sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io
Docher 版本的固定
如果你想阻止 Docker 自动更新,锁住它的版本:
<span style="color:#000000"><span style="background-color:#fafafa"><code class="language-bash"><span style="color:#dd4a68">sudo</span> apt-mark hold docker-ce</code></span></span>
设置非root用户的权限
默认情况下,只有 root 或者 有 sudo 权限的用户可以执行 Docker 命令。
想要以非 root 用户执行 Docker 命令,需要将用户添加到 Docker 用户组,该用户组在 Docker_ce 软件包安装过程中被创建。输入:
sudo usermod -aG docker $USER ## $USER是一个环境变量,代表当前用户名。
登出,并且重新登录,以便用户组会员信息刷新。
安装docker-compose
可选,安装命令如下。(实际上就是从github的releases中下载对应系统版本的docker-compose程序文件,授予执行权限即可)
sudo curl -L “https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-$(uname -m)” -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
Docker的测试
Docker Hub是一个云端服务,主要用来储存 公有和私有源中的 Docker 镜像。默认情况下,Docker可以从 从 Docker Hub 拉取镜像。
运行个docker的hello-word,执行docker命令如下:
docker container run hello-world