以前我寫(xiě)過(guò)文章介紹過(guò)Windows下的包管理器Chocolatey,而Chocolatey并不是唯一的選擇丹鸿。還有一個(gè)很流行的選擇就是scoop崔梗。原來(lái)我用Chocolatey比較多一點(diǎn),但是后來(lái)因?yàn)槲野l(fā)現(xiàn)Chocolatey安裝的JDK等軟件更新的時(shí)候路徑會(huì)發(fā)生變化九榔,每次更新都需要重新配置一遍路徑兽埃,比較麻煩侥钳。于是就把這些軟件切換到了scoop上,scoop可以用current文件夾保持路徑不變柄错,這一點(diǎn)非常方便舷夺。
安裝scoop
scoop安裝非常簡(jiǎn)單,無(wú)需UAC售貌,打開(kāi)powershell輸入下面命令即可给猾。
iwr -useb get.scoop.sh | iex
如果遇到問(wèn)題,可能需要修改一下腳本的執(zhí)行權(quán)限趁矾。
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
scoop會(huì)安裝在~/scoop
文件夾下耙册,如果希望安裝到其他位置给僵,也是可以的毫捣,修改一下SCOOP環(huán)境變量即可。
$env:SCOOP='C:\scoop'
[environment]::setEnvironmentVariable('SCOOP',$env:SCOOP,'User')
iwr -useb get.scoop.sh | iex
使用scoop
如果要查看scoop幫助帝际,輸入help子命令即可蔓同。其實(shí)最常用的也就是install、uninstall蹲诀、update斑粱、search這幾個(gè)。
scoop help
如果你是第一次使用scoop脯爪,可能發(fā)現(xiàn)有些軟件居然沒(méi)有则北。這就要介紹scoop的另外一個(gè)概念——bucket了。說(shuō)白了bucket就是一個(gè)github倉(cāng)庫(kù)痕慢,里面包含了很多軟件的JSON配置文件尚揣,scoop會(huì)讀取這些配置文件來(lái)安裝軟件。默認(rèn)情況下scoop只啟用了main bucket掖举,里面只包含了一些最常用的命令行程序快骗,如果你想安裝其他程序,需要手動(dòng)添加一下bucket。
首先看看有什么bucket方篮,例如extras是一些額外的帶圖形界面的程序名秀,其他幾個(gè)bucket看名字就懂了。
PS> scoop bucket known
main
extras
versions
nightlies
nirsoft
php
nerd-fonts
nonportable
java
games
jetbrains
如果你準(zhǔn)備安裝某個(gè)bucket下的軟件藕溅,首先要添加它匕得,然后就可以搜索并安裝這些軟件了。
scoop bucket add extras
將來(lái)如果準(zhǔn)備更新scoop巾表,簡(jiǎn)單輸入update子命令即可耗跛。
scoop update
如果要更新某個(gè)軟件,輸入軟件名即可攒发,如果要更新所有軟件调塌,輸入星號(hào)即可。
scoop update curl
scoop update *
配置scoop
如果你希望scoop可以多個(gè)連接同時(shí)下載惠猿,可以安裝aria2軟件包羔砾,之后scoop就會(huì)自動(dòng)利用aria2來(lái)同時(shí)下載文件。
scoop install aria2
如果你在使用aria2下載的時(shí)候遇到了問(wèn)題偶妖,可以關(guān)閉aria2下載功能姜凄。
scoop config aria2-enabled false
如果下載速度比較慢,而且你有代理的話(huà)趾访,也可以讓scoop通過(guò)代理來(lái)下載軟件态秧。
scoop config proxy localhost:10800
編寫(xiě)清單文件
前面提到過(guò),scoop是基于JSON文件來(lái)尋找并下載軟件包的扼鞋。我們也可以通過(guò)編寫(xiě)JSON清單文件的方式來(lái)添加自己的軟件包申鱼,整個(gè)過(guò)程非常簡(jiǎn)單。
例如gost這個(gè)工具云头,它是一個(gè)go語(yǔ)言編寫(xiě)的安全隧道捐友,支持多種類(lèi)型的協(xié)議。我們可以通過(guò)gost的ssh功能在Windows系統(tǒng)下啟動(dòng)一個(gè)ssh服務(wù)端溃槐。當(dāng)然第一步自然就是要安裝gost了匣砖。它的清單文件就可以寫(xiě)成這樣。
{
"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"
}
簡(jiǎn)單說(shuō)明一下這幾個(gè)屬性:
- version昏滴,軟件的版本號(hào)猴鲫,必須屬性。
- architecture谣殊,軟件的架構(gòu)拂共, 32位或者64位。如果軟件同時(shí)支持兩種那么就可以像上面這樣分別設(shè)置兩個(gè)版本的文件地址和哈希值蟹倾。
- url匣缘,下載包的地址猖闪,如果是zip、7z肌厨、tar.gz等格式培慌,scoop會(huì)自動(dòng)解壓壓縮包。
- hash柑爸,下載包的哈希校驗(yàn)值吵护,默認(rèn)是SHA256,但是你也可以使用其他算法表鳍。雖然這個(gè)屬性不是必須的馅而,但是推薦填寫(xiě), 有助于保證下載的文件完整性譬圣。
- license瓮恭,軟件的許可協(xié)議。
- homepage厘熟,軟件主頁(yè)地址屯蹦。
- bin,軟件的入口程序绳姨,scoop會(huì)把它添加到自己的環(huán)境變量中以便我們可以從命令行訪(fǎng)問(wèn)登澜。
當(dāng)然為了能夠比較方便的獲取文件校驗(yàn)碼,我甚至還額外編寫(xiě)了一個(gè)powershell腳本飘庄,來(lái)下載并獲取壓縮包校驗(yàn)值脑蠕。腳本會(huì)輸出成JSON片段文件,可以直接復(fù)制粘貼到上面的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了,既可以從本地的清單文件安裝切揭,也可以從遠(yuǎn)程的清單文件安裝狞甚。大家也可以通過(guò)這種方式锁摔,來(lái)維護(hù)自己的安裝源廓旬。
scoop install https://raw.githubusercontent.com/techstay/my-scoop-list/master/gost.json
當(dāng)然本文介紹的也只是scoop的一個(gè)方面,scoop其實(shí)還有很多特性谐腰,具體幫助信息可以參考scoop的文檔孕豹,詳細(xì)介紹了scoop的各項(xiàng)功能。
https://github.com/lukesampson/scoop/wiki