『壹』 scoop install dark安裝失敗
1 概述
作為一名使用 win10 的開發者,搭建開發環境往往是一件比較痛苦的事,需要從網上下載各種軟體,在電腦上配置不同軟體運行環境,對軟體進行各種設置,不僅耗時,而且容易出現各種問題。搭建的環境還會存在下面一些問題:
安裝大量程序造成路徑污染。安裝和卸載比較麻煩。開發環境不能遷移,重裝系統或者換電腦需要重新搭建開發環境。軟體版本不好控制。為了解決上面這些問題,我們可以使用 WSL+Docker+Scoop 搭建開發環境,取代通過圖形界面安裝軟體和 VMware 安裝 Linux 環境的傳統方式。
WSL 是適用於 Linux 的 Windows 子系統, 可讓開發人員按原樣運行 GNU/Linux 環境 - 包括大多數命令行工具、實用工具和應用程序 - 且不會產生傳統虛擬機或雙啟動設置開銷。
Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發布到任何流行的 Linux 機器或 Windows 機器上。
Scoop 是 Windows 的命令行安裝程序,可以讓我們從命令行以最小的安裝量安裝程序, 它消除了安裝界面和安裝程序造成的路徑污染,它安裝和卸載軟體只需一行命令就可以完成,它還可以隨意切換軟體的版本。
一個完整的開發環境組成:首先使用 WSL 搭建一個 Linux 環境,然後在 Linux 環境里安裝 Docker 應用,使用 Docker 來安裝一些常用軟體,比如資料庫、web 環境等,Scoop 則是在本機上安裝一些開發用到的軟體,比如 jdk、maven、idea 等。WSL 和 Scoop 都是比較容易備份和還原的,這兩個搭建好了,我們利用備份還原可以快速在另一台機器上搭建同樣的一套環境,下面是搭建環境的具體流程。
2 WSL
2.1 WSL 安裝
使用 WINDOWS 鍵 + R,輸入 winver,檢查 win10 版本,確保內部版本號是 18362.1049 以上,否則更新 win10 到最新版本。
圖片
2. 以管理員身份打開 PowerShell 並運行下面命令:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
圖片
3. 重新啟動計算機。
4. 下載 Linux內核更新包[1],然後安裝。
5. 將 wsl2 設置為默認版本, 以管理員身份打開 PowerShell 並運行下面命令:
wsl --set-default-version 2
圖片
6. 安裝 Ubuntu 20.04 LTS, 打開 Microsoft Store[2],搜索 Ubuntu 20.04 LTS[3] 安裝, 安裝完成後打開 Ubuntu 20.04 LTS, 等候幾分鍾會提示設置用戶名和密碼,如果不設置用戶名和密碼直接關閉窗口則默認以 root 登錄,這里我們直接關閉窗口,不設置用戶名和密碼。
圖片
7. 然後重新打開 Ubuntu 20.04 LTS 就會進入 Ubuntu 20.04 LTS了,我們也可以在 powershell 使用 wsl 這個命令進入 Ubuntu 20.04 LTS。
2.2 WSL 配置
WSL 每次啟動後,windows 都會給它分配一個隨機的 IP 地址,這樣是不利於我們訪問 docker 里的服務的,為了解決這個問題,我們可以創建一個腳本文件 wsl2-ip.bat來給 wsl 分配一個固定的 IP,在每次啟動 wsl 後用管理員許可權運行這個腳本,文件內容如下:
@echo off
setlocal enabledelayedexpansion
:: set wsl2 ip
wsl -u root ip addr | findstr "192.168.169.2" > nul
if !errorlevel! equ 0 (
echo wsl ip has set
) else (
wsl -d Ubuntu-20.04 -u root ip addr add 192.168.169.2/28 broadcast 192.168.169.15 dev eth0 label eth0:1
echo set wsl ip success: 192.168.169.2
)
:: set windows ip
ipconfig | findstr "192.168.169.1" > nul
if !errorlevel! equ 0 (
echo windows ip has set
) else (
netsh interface ip add address "vEthernet (WSL)" 192.168.169.1 255.255.255.240
echo set windows ip success: 192.168.169.1
)
pause
其中 192.168.169.2 表示 Linux 的 IP 地址, 192.168.169.1 表示主機的 IP 地址。
有時會遇到 Ubuntu 20.04 LTS 無法連接網路,這個非常重要,我們可以運行下面命令解決:
sed -i '4d' /etc/resolv.conf
sed -i '3a\nameserver 8.8.8.8' /etc/resolv.conf
sed -i '4a\nameserver 114.114.114.114' /etc/resolv.conf
2.3 Ubuntu 配置
2.3.1 替換鏡像源
1. 備份 sources.list 文件,運行下面命令:
mv /etc/apt/sources.list /etc/apt/sources.list.bak
2. 創建 source.list 文件,運行下面命令:vim /etc/apt/sources.list
3. 然後在文件里添加下面內容,下面源任選其一即可。
# 清華源
# 默認注釋了源碼鏡像以提高 apt update 速度,如有需要可自行取消注釋
deb https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal-security main restricted universe multiverse
# 預發布軟體源,不建議啟用
# deb https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.e.cn/ubuntu/ focal-proposed main restricted universe multiverse
# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
#deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
#deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
#deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
#deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
#deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
# 中科大源
deb https://mirrors.ustc.e.cn/ubuntu/ focal main restricted universe multiverse
#deb-src https://mirrors.ustc.e.cn/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.ustc.e.cn/ubuntu/ focal-updates main restricted universe multiverse
#deb-src https://mirrors.ustc.e.cn/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.ustc.e.cn/ubuntu/ focal-backports main restricted universe multiverse
#deb-src https://mirrors.ustc.e.cn/ubuntu/ focal-backports main restricted universe multiverse
deb https://mirrors.ustc.e.cn/ubuntu/ focal-security main restricted universe multiverse
#deb-src https://mirrors.ustc.e.cn/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.ustc.e.cn/ubuntu/ focal-proposed main restricted universe multiverse
#deb-src https://mirrors.ustc.e.cn/ubuntu/ focal-proposed main restricted universe multiverse
#網易163源
deb http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
#deb-src http://mirrors.163.com/ubuntu/ focal main restricted universe multiverse
#deb-src http://mirrors.163.com/ubuntu/ focal-security main restricted universe multiverse
#deb-src http://mirrors.163.com/ubuntu/ focal-updates main restricted universe multiverse
#deb-src http://mirrors.163.com/ubuntu/ focal-proposed main restricted universe multiverse
#deb-src http://mirrors.163.com/ubuntu/ focal-backports main restricted universe multiverse
4. 進行更新,運行下面命令:
apt update
apt upgrade -y
2.3.2 開啟 systemctl
安裝 daemonize 和fontconfig 軟體,運行下面命令:apt install -y fontconfig daemonize
2. 運行 vim /etc/profile 命令,在末尾添加下面內容:
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
if [ -z "$SYSTEMD_PID" ]; then
sudo /usr/bin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
SYSTEMD_PID=$(ps -ef | grep '/lib/systemd/systemd --system-unit=basic.target$' | grep -v unshare | awk '{print $2}')
fi
if [ -n "$SYSTEMD_PID" ] && [ "$SYSTEMD_PID" != "1" ]; then
exec sudo /usr/bin/nsenter -t $SYSTEMD_PID -a su - $LOGNAME
fi
3. 運行 vim /etc/sudoers 命令,在末尾添加下面內容:
%sudo ALL=(ALL) NOPASSWD: /usr/sbin/daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
%sudo ALL=(ALL) NOPASSWD: /usr/bin/nsenter -t [0-9]* -a su - [a-zA-Z0-9]*
4. 刷新 profile 文件,運行下面命令:
source /etc/profile
2.3.2 開啟 ssh
設置 root 賬號的密碼,用作後續登陸使用,運行下面命令:passwd root
圖片
2. 備份原始的 sshd_config,運行下面命令:
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
3. 修改 sshd_config 文件,運行下面命令:
sed -i '15c Port 22' /etc/ssh/sshd_config
sed -i '17c ListenAddress 0.0.0.0' /etc/ssh/sshd_config
sed -i '34c PermitRootLogin yes' /etc/ssh/sshd_config
sed -i '58c PasswordAuthentication yes' /etc/ssh/sshd_config
4. 重啟 sshd,運行下面命令
systemctl restart sshd
2.4 Docker 安裝與配置
官方和阿里的源選擇其一,建議使用阿里源,速度快。
2.4.1 官方安裝
1. 卸載舊版本,運行下面命令:
apt-get remove docker docker-engine docker.io containerd runc
2. 更新 apt 軟體包索引並安裝軟體包以允許 apt 通過 HTTPS 使用存儲庫,運行下面命令:
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
3. 添加 Docker 的官方 GPG 密鑰,運行下面命令:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
4. 設置穩定的存儲庫,運行下面命令:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. 安裝最新版本的 Docker Engine 和容器,運行下面命令:
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
apt-mark hold docker-ce docker-ce-cli containerd.io
2.4.2 阿里源安裝
卸載舊版本,運行下面命令:apt-get remove docker docker-engine docker.io containerd runc
2. 更新 apt 軟體包索引並安裝軟體包以允許 apt 通過 HTTPS 使用存儲庫,運行下面命令:
apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release
3. 添加 Docker 的阿里 GPG 密鑰,運行下面命令:
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
4. 設置穩定的存儲庫,運行下面命令:
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
5. 安裝最新版本的 Docker Engine 和容器,運行下面命令:
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
apt-mark hold docker-ce docker-ce-cli containerd.io
2.4.3 配置鏡像加速
創建 /etc/docker/daemon.json 文件,並填寫以下內容:
{
"registry-mirrors": ["https://docker.mirrors.ustc.e.cn/"]
}
3 Scoop
3.1 Scoop 安裝
1. 以管理員許可權打開 PowerShell 。
2. 自定義用戶軟體和全局軟體安裝位置,運行下面命令:
$env:SCOOP='D:\Softwares\Scoop\LocalApps'
[Environment]::SetEnvironmentVariable('SCOOP', $env:SCOOP, 'User')
$env:SCOOP_GLOBAL='D:\Softwares\Scoop\GlobalApps'
[Environment]::SetEnvironmentVariable('SCOOP_GLOBAL', $env:SCOOP_GLOBAL, 'Machine')
圖片
3. 配置安全策略以及安裝 Scoop,運行下面命令:
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
圖片
3.2 安裝失敗解決方案如果發生下面錯誤,這是因為網路原因無法訪問 GitHub。
圖片
2. 訪問 IP地址查詢網站[4],輸入raw.githubusercontent.com域名,查詢對應的 IP 地址。
圖片
3. 配置 C:\Windows\System32\drivers\etc\hosts文件,在修改前賦予 hosts 文件讀寫許可權。
圖片
圖片
圖片
4. 修改 host 文件內容如下,第一列是查詢出來的ip地址,第二列是其對應的域名,中間有個空格。
圖片
5. 保存後重新運行安裝命令。
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
3.3 Scoop 配置
安裝 Scoop 運行所需要的基礎軟體:scoop install sudo
sudo scoop install 7zip git innounp dark -g
圖片
2. 運行下面命令,檢查Scoop還存在的問題,輸入提示運行的命令,來解決存在的問題,如果你使用的安裝路徑不是我的路徑,請修改命令中的軟體安裝位置:
scoop checkup
Add-MpPreference -ExclusionPath 'D:\Softwares\Scoop\LocalApps'
Add-MpPreference -ExclusionPath 'D:\Softwares\Scoop\GlobalApps'
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1
圖片
3. 配置軟體倉庫,官方軟體倉庫目前收錄的軟體很少,不足以支持我們的使用,添加下面的軟體倉庫,能讓我們安裝更多的軟體:
scoop bucket add extras
scoop bucket add versions
scoop bucket add nightlies
scoop bucket add nirsoft
scoop bucket add php
scoop bucket add nerd-fonts
scoop bucket add nonportable
scoop bucket add java
scoop bucket add games
scoop bucket add jetbrains
scoop bucket add dorado https://github.com/chawyehsu/dorado
scoop bucket add Ash258 https://github.com/Ash258/Scoop-Ash258.git
scoop bucket add pleiades https://github.com/jfut/scoop-pleiades.git
scoop bucket add Scoop-Apps https://github.com/ACooper81/scoop-apps
scoop bucket add scoop-zapps https://github.com/kkzzhou/scoop-zapps
scoop bucket add lemon https://github.com/hoilc/scoop-lemon
scoop bucket add raresoft https://github.com/L-Trump/scoop-raresoft
圖片
4. 如果軟體倉庫添加失敗,還是因為網路的原因,大家可以把這些倉庫 fork 到自己的碼雲賬戶下,然後再添加。
5. 使用 aria2 來加速軟體的安裝:
scoop install aria2 -g
scoop config aria2-max-connection-per-server 16
scoop config aria2-split 16
scoop config aria2-min-split-size 1M
如果想關閉 aria2,可以運行 scoop config aria2-enabled false命令。
3.4 Scoop 常用命令
# 搜索app
scoop search <應用名>
# 檢查哪些軟體有更新
scoop status
# 版本切換
scoop reset <應用名>@<版本切換>
# 禁止某app更新
scoop hold <應用名>
# 更新所有app
scoop update *
# 安裝app
scoop install <應用名>
#全局安裝app
scoop install -g <應用名>
#安裝extras軟體源下的app
scoop install extras/<應用名>
# 卸載app
scoop uninstall <應用名>
# 卸載全局安裝的app
scoop uninstall -g <應用名>
4 總結
開發環境軟體的安裝與配置到這里就完成了,利用上面這些軟體,你可以快速搭建 Java、Go、C++、Python等開發環境。
參考資料
[1]Linux內核更新包: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
[2]Microsoft Store: https://aka.ms/wslstore
[3]Ubuntu 20.04 LTS: https://www.microsoft.com/store/apps/9n6svws3rx71
[4]IP地址查詢網站: https://www.ipaddress.com/