The Essentials: After Windows Server 2019 Evaluation Installed – PART II
上一次写了 Windows Server 2019 装置提要 (及 VS 2019 Build Tool),而后形容了根本的装置后配置工作。不过这离我的指标——一个轻量级(22GB 之轻)的 MSVC 构建环境——还差得远。
所以持续追加配置过程中遇到的问题。如下。
装置后提要
装置 Chocolatey
装置 Chocolatey:
powershell Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
chocolatey 是一个命令行的包管理器。像 apt。
在 choco 官网的软件仓库页面能够查找特定的软件包:https://chocolatey.org/packages。
装置 nano 编辑器
用惯了命令行中的繁难编辑器,nano 能够满足少数的轻量级编辑需要。
装置它:
choco install -y nano
而后能够在命令行中间接 nano 1.txt
。
订正环境变量
在 Server Core 的命令行界面中,你默认处于 cmd 提示符下,能够输出命令“powershell”来进入到 PowerShell 提示符模式。
在 cmd 提示符中,set
和 set PATH
仍旧无效,能够用来显示全副或指定的环境变量,set PATH="%PATH%;xxx"
能够设置环境变量。
官网对此有阐明:对于环境变量 – PowerShell – Microsoft Docs
永恒订正环境变量
为了永久性地批改环境变量,须要利用 PowerShell 中提供的 Set-ItemProperty
接口。
如果你真的对 cmd 提示符下的永恒批改环境变量感兴趣,查看 SETX 命令的参考:
setx /?
有时候,你会发现,万能的重启十分有用:
shutdown -r -f
。幸好 server core 的重启往往十分快,至多是足够快了。
辅助函数
在 powershell 环境中,能够增加一组函数来简化环境变量的订正工作。首先进入到 PowerShell 提示符,而后粘贴上面的脚本:
function get_path () {
$val = Get-ItemProperty -Path HKCU:\Environment -Name Path
$val.path.Split(';')
# Write-Host $val.Replace(";","`n") -ForegroundColor Green
}
function set_path ($new_path) {
Set-ItemProperty -Path HKCU:\Environment -Name path -Value $new_path
Write-Host "The operation completed successfully.`n" -ForegroundColor Green
}
function add_path ($path) {
$val = Get-ItemProperty -Path HKCU:\Environment -Name path
$new_path = $val.path + ";" + $path.Trim()
Set-ItemProperty -Path HKCU:\Environment -Name path -Value $new_path
Write-Host "The operation completed successfully.`n" -ForegroundColor Green
}
function del_path ($path) {$path = ';' + ($path.Trim() -replace "\\","\\")
$val = Get-ItemProperty -Path HKCU:\Environment -Name Path
$old_path = $val.path
$flag = 0
# if the argument $path ends with a slash
if ($path.endswith("\\")) {
# if the path in the registry ends with a slash
if ($old_path -match $path) {
$new_path = $old_path -replace $path,""
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $new_path
$flag = 1
}
# if the path in the registry does not end with a slash
else {$path = $path.Substring(0,$path.LastIndexOf('\') - 1)
if ($old_path -match $path) {
$new_path = $old_path -replace $path,""
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $new_path
$flag = 1
}
}
}
# if the argument $path does not end with a slash
else {
# if the path in the registry ends with a slash
$path += "\\"
if ($old_path -match $path) {
$new_path = $old_path -replace $path,""
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $new_path
$flag = 1
}
else {
# if the path in the registry does not end with a slash
$path = $path.Substring(0,$path.LastIndexOf('\') - 1)
if ($old_path -match $path) {
$new_path = $old_path -replace $path,""
Set-ItemProperty -Path HKCU:\Environment -Name Path -Value $new_path
$flag = 1
}
}
}
if ($flag) {Write-Host "The operation completed successfully.`n" -ForegroundColor Green}
else {Write-Host "The operation failed.`n" -ForegroundColor Red}
}
就能够失去四个辅助函数。
Get_path
能够显示 PATH 的以后值;set_path "new_path_value"
和add_path "append_text"
能够设置 PATH 值;del_path "a_path_part"
能够删除一个 PATH 片段,PATH 变量的值是用分号分隔的多个片段。
将上述辅助函数永久化
在 cmd 提示符环境中,通过 nano 编辑文件 %USERPROFILE%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
,并将下面的代码追加到该文件中,当前每次启动 PowerShell,这几个辅助函数都将会主动失效了。
装置 vscode
一般来说,nano 能够满足咱们的大量空想。不过咱们还能够有更神奇的抉择,在 Server Core 中装置 Visual Studio Code,它不香吗!
去官网下载安装包,而后在服务器上执行该安装包。
例如:
curl -UseBasicParsing -Uri "https://code.visualstudio.com/sha/download?build=stable&os=win32-x64-user" -OutFile "vscode-user-setup-x64.exe"
.\vscode-user-setup-x64.exe
留神在 powershell 环境中,curl 实际上是 Invoke-WebRequest 的别名。如果你想查阅可用的命令行参数的话,应用“Invoke-WebRequest -?”。
如果你想要应用 GNU 的 curl 或者 wget,能够通过 chocolatey 形式装置它们。
如果你想要为所有用户装置 Visual Studio Code,下载安装包时留神抉择 System Installer。
参考(仅用做记录):
$Env:Path += "$Env:UserProfile\AppData\Local\Programs\Microsoft VS Code"
“c:\Program Files (x86)\Microsoft Visual Studio\Installer”
GUI?
在 server core 环境中,的的确确是能够装置 Visual Studio Code 的,它的运行有一点点好像的不同,但你应该是发觉不到的,
你可能会像我一样遇到没有文件对话框的问题。也就是说,在 vscode 窗口里 File Open 菜单命令是无响应的。但这难不倒咱们,在 cmd 提示符中用 code 1.txt
发动 vscode 编辑器就能够了。
例如这里:
康康,它的确可能工作,对于长期在 bash 环境中的人来说,这特么真的不合理,但又正当的很,不是吗?
装置 git
首先你须要下载 git for win 的安装包:这里。
在 Server Core 中能够间接运行安装包,有点违和(对于 SSH 惯了的人)然而行得通:
posh-git
posh-git 是一组整合脚本,帮忙你在 powershell 环境中更好滴应用 git 命令行,例如主动补全什么的。
能够通过 PowerShell 来装置 posh-git 模块,它的背地是通过 nuget 形式达成的:
Install-Module posh-git -Scope AllUsers -Force
如果只是想装置到以后用户,将 AllUsers
改为 CurrentUser
即可。
以上形式来自于 Git – Git in PowerShell
和 Visual Studio 2019 Build Tool 无关的
首先,在 Server Core 中装置了 VSBT 工具之后,环境变量并不会失去更新。你须要执行 VS 的 LaunchDevCmd.bat 来进入到 VSBT 的工作环境。
在工作环境中,什么 cmake,cl,dotnet,nmake,msbuild 等等等才会无效。
问题在于,LaunchDevCmd.bat 是暗藏的十分深的。它在 C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools
之中,这对于命令行环境来说,相对是超级解体的长文件名了。
所以你能够思考在 PATH 环境变量中追加该门路,例如:SETX PATH "%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools"
而后就能够间接键入 LaunchDevCmd.bat
来进入到 VSBT 的构建环境了。
vcpkg
为了装置一些公开的源码包,还须要 vcpkg 就绪。它的装置很简略(参考其官网):
cd %USERPROFILE%\
mkdir work
cd work
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.sh
等到它构建完了,就能够运行它了:
%USERPROFILE%\work\vcpkg\vcpkg list
%USERPROFILE%\work\vcpkg\vcpkg install yaml-cpp
在咱们的源码开发中,cmake 构建流程须要注入 vcpkg 管制文件:
# configure
cmake -DENABLE_AUTOMATE_TESTS=OFF -S . -B build/ -DCMAKE_TOOLCHAIN_FILE=%USERPROFILE%/work/vcpkg/scripts/buildsystems/vcpkg.cmake
# build
cmake --build build/
# install
cmake --build build/ --target install
如上
🔚
临时写这么多。