乐趣区

关于运维:Windows-Server-2019-安装提要-及-VS-2019-Build-Tool-续

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 提示符中,setset 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

如上

🔚

临时写这么多。

退出移动版