在windows环境安装WSL2
WSL2 搭建 Windows 更好用的开发环境:
第 1 步,启用 WSL 不管我们想要使用哪个版本的 WSL,都首先需要启用它。我们以管理员身份打开 PowerShell 工具并运行以下命令。
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
第 2 步,启用“虚拟机平台” WSL 2 需要启用 Windows 10 的 “虚拟机平台” 特性。它独立于 Hyper-V,并提供了一些在 Linux 的 Windows 子系统新版本中可用的更有趣的平台集成。
要在 Windows 10(2004)上启用虚拟机平台,请以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
为了确保所有相关部件都整齐到位,我们应该在此时重启系统,否则可能会发现事情没按预期进行。
第 3 步,设置 WSL 2 为默认值 以管理员身份打开 PowerShell,然后运行以下命令以将 WSL 2 设置为 WSL 的默认版本:
wsl --set-default-version 2
第 4 步,安装一个 Linux 发行版 有了 WSL 和必要的虚拟化技术,接下来我们要做的就是从 Microsoft Store 中选择并安装 Linux 发行版。
有几种不同的发行版可供选择,包括 OpenSUSE、Pengwin、Fedora Remix 和 Alpine Linux。但是我个人推荐(自然地)Ubuntu 20.04 LTS(尽管也有 18.04 LTS 和 16.04 LTS 可用)。
wsl --install -d Ubuntu-20.04
第 5 步,使用 WSL 2
PS C:\WINDOWS\system32>wsl.exe --set-version Ubuntu 2
wsl -d Ubuntu-20.04
➜ System32 cat /etc/issue
Ubuntu 20.04.6 LTS \n \l
用 Root 用户登录 Linux 系统,并创建普通用户。
通过一个普通用户的身份来进行项目的开发,创建方法如下:
# useradd going # 创建 going 用户,通过 going 用户登录开发机进行开发
# passwd going # 设置密码
Changing password for user going.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
不仅如此,使用普通用户登录和操作开发机也可以保证系统的安全性,这是一个比较好的习惯,所以我们在日常开发中也要尽量避免使用 Root 用户。
添加 sudoers
为普通账号添加Root 的权限。
# sed -i '/^root.*ALL=(ALL).*ALL/a\going\tALL=(ALL) \tALL' /etc/sudoers
用新的用户名(going)和密码登录 Linux 服务器。这一步也可以验证普通用户是否创建成功。
部署zsh开发环境
通过脚本安装zsh
#################################
# 快速初始化 WSL-Ubuntu 开发环境
#################################
# 更新 package
sudo apt update -y && sudo apt upgrade -y
# 安装 zsh
sudo apt install zsh -y
# 安装 oh-my-zsh
wget <https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh> -O - | zsh || true
# 安装命令补全和高亮插件
git clone <https://github.com/zsh-users/zsh-syntax-highlighting.git> ~/.oh-my-zsh/plugins/zsh-syntax-highlighting
git clone <https://github.com/zsh-users/zsh-autosuggestions> ~/.oh-my-zsh/plugins/zsh-autosuggestions
sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions zsh-syntax-highlighting)/g' ~/.zshrc
# 列表形式显示所有文件详情
echo 'alias ll="ls -alF"' >> ~/.zshrc
# 删除文件前需确认
echo 'alias rm="rm -i"' >> ~/.zshrc
./install-zsh.sh
zsh
将 zsh 设置为默认的shell
sudo chsh -s /bin/zsh
配置 $HOME/.zshrc 文件
我们登录新服务器后的第一步就是配置$HOME/.zshrc文件,以使 Linux 登录 shell 更加易用,例如配置 LANG 解决中文乱码,配置 PS1 可以避免整行都是文件路径,并将$HOME/bin 加入到 PATH 路径中。配置后的内容如下:
# .zshrc
# Source global definitions
if [ -f /etc/zshrc ]; then
. /etc/zshrc
fi
# User specific environment
# Basic envs
export LANG="en_US.UTF-8" # 设置系统语言为 en_US.UTF-8,避免终端出现中文乱码
export PS1='[\u@dev \W]\$ ' # 默认的 PS1 设置会展示全部的路径,为了防止过长,这里只展示:"用户名@dev 最后的目录名"
export WORKSPACE="$HOME/workspace" # 设置工作目录
export PATH=$HOME/bin:$PATH # 将 $HOME/bin 目录加入到 PATH 变量中
# Default entry folder
cd $WORKSPACE # 登录系统,默认进入 workspace 目录
# User specific environment
# Basic envs
export LANG="en_US.UTF-8" # 设置系统语言为 en_US.UTF-8,避免终端出现中文乱码
export PS1='[\u@dev \W]\$ ' # 默认的 PS1 设置会展示全部的路径,为了防止过长,这里只展示:"用户名@dev 最后的目录名"
export WORKSPACE="$HOME/workspace" # 设置工作目录
export PATH=$HOME/bin:$PATH # 将 $HOME/bin 目录加入到 PATH 变量中
# Default entry folder
cd $WORKSPACE # 登录系统,默认进入 workspace 目录
依赖安装和配置
在 Ubuntu系统上安装系统会依赖一些类库和工具,我们统一安装依赖和配置。安装和配置步骤如下。
安装依赖。
首先,安装所需工具的依赖,安装命令如下:
$ sudo apt install -y make autoconf automake cmake perl-CPAN libcurl-devel libtool gcc gcc-c++ glibc-headers zlib-devel git-lfs telnet ctags lrzsz jq expat-devel openssl-devel git
检查git的版本:
➜ ~ git version
git version 2.25.1
配置 Git。我们直接执行如下命令配置 Git:
$ git config --global user.name "Your name" # 用户名改成自己的
$ git config --global user.email "Your Email" # 邮箱改成自己的
$ git config --global credential.helper store # 设置 Git,保存用户名和密码
$ git config --global core.longpaths true # 解决 Git 中 'Filename too long' 的错误
$ git config --global core.quotepath off # 关闭转义字符
$ git lfs install --skip-repo # 支持克隆大于 100M 的文件
$ git config --global core.ignorecase false # 启用 git 大小写敏感
$ git config --global url."<https://github.com.cnpmjs.org/>".insteadOf "<https://github.com/>" # 可选性,修改github镜像网站
Go 编译环境安装和配置
我们知道,Go 是一门编译型语言,我们需要将代码编译成可执行的二进制文件。因此我们需要安装 Go 编译环境。 除了 Go,我们也会用 gRPC 框架展示 RPC 通信协议的用法,所以我们也需要将 ProtoBuf 的.proto 文件编译成 Go 语言的接口。因此,我们也需要安装 ProtoBuf 的编译环境。
安装 Go 语言相对来说比较简单,我们只需要下载源码包、设置相应的环境变量即可。首先,我们从 Go 语言官方网站下载对应的 Go 安装包以及源码包,下载最新版本:
$ wget <https://golang.google.cn/dl/go1.22.0.linux-amd64.tar.gz> -O /tmp/go1.22.0.linux-amd64.tar.gz
接着,我们完成解压和安装,命令如下:
$ mkdir -p $HOME/go
$ tar -xvzf /tmp/go1.22.0.linux-amd64.tar.gz -C $HOME/go
$ mv $HOME/go/go $HOME/go/go1.22.0
最后,我们执行以下命令,将下列环境变量追加到$HOME/.bashrc 文件中。
tee -a $HOME/.bashrc <<'EOF'
# Go envs
export GOVERSION=go1.22.0 # Go 版本设置
export GO_INSTALL_DIR=$HOME/go # Go 安装目录
export GOROOT=$GO_INSTALL_DIR/$GOVERSION # GOROOT 设置
export GOPATH=$WORKSPACE/golang # GOPATH 设置
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH # 将 Go 语言自带的和通过 go install 安装的二进制文件加入到 PATH 路径中
export GO111MODULE="on" # 开启 Go moudles 特性
export GOPROXY=https://goproxy.cn,direct # 安装 Go 模块时,代理服务器设置
export GOPRIVATE=
export GOSUMDB=off # 关闭校验 Go 依赖包的哈希值
EOF
为什么要增加这么多环境变量呢?这是因为,Go 语言是通过一系列的环境变量来控制 Go 编译器行为的。因此,我们一定要理解每一个环境变量的含义。
因为 Go 以后会用 Go modules 来管理依赖,所以建议将 GO111MODULE 设置为 on。 在使用模块的时候,$GOPATH 是无意义的,不过它还是会把下载的依赖储存在$GOPATH/pkg/mod 目录中,也会把 go install 的二进制文件存放在$GOPATH/bin 目录中。
另外,我们还要将$GOPATH/bin、$GOROOT/bin 加入到 Linux 可执行文件搜索路径中。这样一来,我们就可以直接在 bash shell 中执行 go 自带的命令,以及通过 go install 安装的命令。
最后就是进行测试了,如果我们执行 go version 命令可以成功输出 Go 的版本,就说明 Go 编译环境安装成功。具体的命令如下:
$ go version
go version go1.22.0 linu x/amd64
安装Docker
通过脚本快速安装docker
curl -fsSL <https://get.docker.com> -o install-docker.sh
sudo chmod u+x install-docker.sh
sudo ./install-docker.sh.
检查Docker是否安装成功
➜ ~ sudo docker version
[sudo] password for going:
Client: Docker Engine - Community
Version: 25.0.3
API version: 1.44
Go version: go1.21.6
Git commit: 4debf41
Built: Tue Feb 6 21:14:17 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 25.0.3
API version: 1.44 (minimum version 1.24)
Go version: go1.21.6
Git commit: f417435
Built: Tue Feb 6 21:14:17 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.28
GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
添加K8S和Docker的常用命令快捷方式到 ~/.zshrc
# add
## kubernetes
alias kctx=kubectx
alias kns=kubens
alias kubectl='kubecolor'
alias k=kubectl
alias kg='kubecolor get'
alias kd='kubecolor delete'
alias kdes='kubecolor describe'
alias ka='kubecolor apply'
alias kei='kubectl exec -it'
alias ktree='kubectl tree'
alias kl='kubectl logs'
alias klf='kubectl logs -f'
# docker
alias dp='docker ps'
alias dei='docker exec -it'
alias dia='docker iamges -a'
alias dlf='docker logs -f'
function kubectl_get_info() {
cluster=$(kubectl config current-context)
namespace=$(kubectl config view --minify --output 'jsonpath={..namespace}')
#kubectl get pod "$@"
alias kci="kubectl_get_info"
测试命令快捷方式是否生效
# source
source ~/.zshrc
# test
➜ helm-expose-controller kci
Cluster: kind-test
Namespace: expose
➜ helm-expose-controller kg pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-76f75df574-2xpv8 1/1 Running 1 (47h ago) 7d23h
coredns-76f75df574-ncccv 1/1 Running 1 (47h ago) 7d23h
etcd-test-control-plane 1/1 Running 1 (47h ago) 7d23h
kindnet-cvbck 1/1 Running 1 (47h ago) 7d23h
kube-apiserver-test-control-plane 1/1 Running 1 (47h ago) 7d23h
kube-controller-manager-test-control-plane 1/1 Running 1 (47h ago) 7d23h
kube-proxy-9428x 1/1 Running 1 (47h ago) 7d23h
环境配置完毕