Windows下非常好用的包管理器scoop介紹

以前我寫過文章介紹過Windows下的包管理器Chocolatey,而Chocolatey並不是唯一的選擇。還有一個很流行的選擇就是scoop。原來我用Chocolatey比較多一點,但是後來因為我發現Chocolatey安裝的JDK等軟件更新的時候路徑會發生變化,每次更新都需要重新配置一遍路徑,比較麻煩。於是就把這些軟件切換到了scoop上,scoop可以用current文件夾保持路徑不變,這一點非常方便。

安裝scoop

scoop安裝非常簡單,無需UAC,打開powershell輸入下面命令即可。

iwr -useb get.scoop.sh | iex

如果遇到問題,可能需要修改一下腳本的執行權限。

Set-ExecutionPolicy RemoteSigned -scope CurrentUser

scoop會安裝在~/scoop文件夾下,如果希望安裝到其他位置,也是可以的,修改一下SCOOP環境變量即可。

$env:SCOOP='C:scoop'  [environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')  iwr -useb get.scoop.sh | iex

使用scoop

如果要查看scoop幫助,輸入help子命令即可。其實最常用的也就是install、uninstall、update、search這幾個。

scoop help

如果你是第一次使用scoop,可能發現有些軟件居然沒有。這就要介紹scoop的另外一個概念——bucket了。說白了bucket就是一個github倉庫,裏面包含了很多軟件的JSON配置文件,scoop會讀取這些配置文件來安裝軟件。默認情況下scoop只啟用了main bucket,裏面只包含了一些最常用的命令行程序,如果你想安裝其他程序,需要手動添加一下bucket。

首先看看有什麼bucket,例如extras是一些額外的帶圖形界面的程序,其他幾個bucket看名字就懂了。

PS> scoop bucket known  main  extras  versions  nightlies  nirsoft  php  nerd-fonts  nonportable  java  games  jetbrains

如果你準備安裝某個bucket下的軟件,首先要添加它,然後就可以搜索並安裝這些軟件了。

scoop bucket add extras

將來如果準備更新scoop,簡單輸入update子命令即可。

scoop update

如果要更新某個軟件,輸入軟件名即可,如果要更新所有軟件,輸入星號即可。

scoop update curl  scoop update *

配置scoop

如果你希望scoop可以多個連接同時下載,可以安裝aria2軟件包,之後scoop就會自動利用aria2來同時下載文件。

scoop install aria2

如果你在使用aria2下載的時候遇到了問題,可以關閉aria2下載功能。

scoop config aria2-enabled false

如果下載速度比較慢,而且你有代理的話,也可以讓scoop通過代理來下載軟件。

scoop config proxy localhost:10800

編寫清單文件

前面提到過,scoop是基於JSON文件來尋找並下載軟件包的。我們也可以通過編寫JSON清單文件的方式來添加自己的軟件包,整個過程非常簡單。

例如gost這個工具,它是一個go語言編寫的安全隧道,支持多種類型的協議。我們可以通過gost的ssh功能在Windows系統下啟動一個ssh服務端。當然第一步自然就是要安裝gost了。它的清單文件就可以寫成這樣。

{      "version": "2.11.0",      "architecture": {          "64bit": {              "url": "https://github.com/ginuerzh/gost/releases/download/v2.11.0/gost-windows-amd64-2.11.0.zip",              "hash": "FAB6245393DE83443AE134E689B14548E6CE9C6F7688B8250D9C19AD6D78F478"          },          "32bit": {              "url": "https://github.com/ginuerzh/gost/releases/download/v2.11.0/gost-windows-386-2.11.0.zip",              "hash": "2EA47564BC04C9D54FA2524AF7501BD9916855523232AD340BF3EC76854637E1"          }      },      "license": {          "identifier": "MIT",          "url": "https://github.com/ginuerzh/gost/blob/master/LICENSE"      },      "homepage": "https://github.com/ginuerzh/gost",      "bin": "gost-windows-amd64.exe"  }

簡單說明一下這幾個屬性:

  • version,軟件的版本號,必須屬性。
  • architecture,軟件的架構, 32位或者64位。如果軟件同時支持兩種那麼就可以像上面這樣分別設置兩個版本的文件地址和哈希值。
  • url,下載包的地址,如果是zip、7z、tar.gz等格式,scoop會自動解壓壓縮包。
  • hash,下載包的哈希校驗值,默認是SHA256,但是你也可以使用其他算法。雖然這個屬性不是必須的,但是推薦填寫, 有助於保證下載的文件完整性。
  • license,軟件的許可協議。
  • homepage,軟件主頁地址。
  • bin,軟件的入口程序,scoop會把它添加到自己的環境變量中以便我們可以從命令行訪問。

當然為了能夠比較方便的獲取文件校驗碼,我甚至還額外編寫了一個powershell腳本,來下載並獲取壓縮包校驗值。腳本會輸出成JSON片段文件,可以直接複製粘貼到上面的JSON中。

# This script is used to get sha256 hash of gost files.    $version = '2.11.0'  $url32 = "https://github.com/ginuerzh/gost/releases/download/v$version/gost-windows-386-$version.zip"  $url64 = "https://github.com/ginuerzh/gost/releases/download/v$version/gost-windows-amd64-$version.zip"    $gost32file = 'gost32.zip'  $gost64file = 'gost64.zip'  Invoke-WebRequest $url32 -OutFile $gost32file  Invoke-WebRequest $url64 -OutFile $gost64file    $hash32 = (Get-FileHash $gost32file -Algorithm SHA256).Hash  $hash64 = (Get-FileHash $gost64file -Algorithm SHA256).Hash    Write-Output """url"":""$url32"","  Write-Output """hash"":""$hash32"""  Write-Output """url"":""$url64"","  Write-Output """hash"":""$hash64"""    Remove-Item -Path $gost32file, $gost64file

有了清單文件,就可以使用scoop安裝gost了,既可以從本地的清單文件安裝,也可以從遠程的清單文件安裝。大家也可以通過這種方式,來維護自己的安裝源。

scoop install https://raw.githubusercontent.com/techstay/my-scoop-list/master/gost.json

當然本文介紹的也只是scoop的一個方面,scoop其實還有很多特性,具體幫助信息可以參考scoop的文檔,詳細介紹了scoop的各項功能。

https://github.com/lukesampson/scoop/wiki