Windows下非常好用的包管理器scoop介紹
- 2020 年 4 月 9 日
- 筆記
以前我寫過文章介紹過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