在Scott Hanselman的2014開發人員大補帖發現好東西 – Chocolatey。(發音近似"敲可題",字面的意思是顏色或味道像巧克力一樣)

每回新裝機的重要工作之一是安裝一堆常備小工具如: 7-Zip、Notepad++、Sysinternals、Fiddler、Filezilla、LinqPad、KeePass...。之前的SOP是Google關鍵字 -> 找到官方網站 -> 下載 -> 安裝,說來不複雜,但同樣動作重複十來次就是件煩人事兒;另一種做法是自行整理常用工具安裝檔,放在USB碟或網路上備用,但搜羅軟體及持續更新還是得花功夫。相形之下,Linux只需apt-get加軟體簡稱就能下載安裝,不禁令人羡慕。

NuGet的出現改變了"東市買駿馬,西市買鞍韉"的程式庫繁瑣安裝程序;Chocolatey則透過PowerShell Script結合NuGet套件格式,試圖提供單一指令完成Windows的程式下載安裝,營造類似apt-get的便利性,甚至也跟NuGet一樣可處理相依性,例如: 使用軟體A必須先安裝程式B,安裝軟體A時Chocolatey會自動先下載安裝程式B。

【安裝程序】

要安裝Chocolatey,只需要一行指令完成(先決條件是Windows要裝妥PowerShell,Windows 7、Windows 2008 R2之後的OS版本應已內建PowerShell 2.0,舊版OS則需自行安裝),開個DOS命令列視窗執行以下指令:

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin

這樣就搞定了。

如果有Visual Studio及NuGet,也可透過Package Manager Console執行以下三行指令(Chocolatey套件在執行完Initialize-Chocolatey安裝好C:\Chocolatey目錄後就可以移除):

Install-Package chocolatey
Initialize-Chocolatey
Uninstall-Package chocolatey

使用NuGet管理介面也可以下載及移除(但仍需手動透過Package Manager Console執行Initialize-Chocolatey,感覺並沒有簡便太多)

比較之下,使用DOS命令列指令複雜像咒語但步驟最少,NuGet指令明確但程序多,大家可自行選擇喜歡的方式安裝。

【使用方式】

裝好Chocolatey後,預設在系統碟會新增一個Chocolatey目錄(安裝於C:\Chocolatey主要考量共用性及避免動用管理者權限,但使用者亦可自訂目錄),但透過Chocolatey安裝的軟體則視其配置需求,有的會安裝在C:\Chocolatey\lib下,有些則仍得安裝在Program Files,視各軟體包(Package)而定。Chocolate的軟體包裡並不包含軟體安裝檔或程式,實際上仍由該軟體官方網站或github、SourceForge等來源下載,Chocolatey只透過PowerShell Script讓使用者快速由指定位置取得軟體並完成安裝。

就以安裝7-Zip為例。開啟PowerShell視窗後可先使用"clist 7zip"列出7-Zip相關的軟體包,但一般常會遇到一個困擾,出現多個同名軟體包,不知道要裝哪一個? 例如7zip就就有"7zip", "7zip.install", "7zip.commandline"三個項目(有時還會看到.app、.tool、.portable等結尾)。如果同一個軟體包有多個結尾不同的版本,依據FAQ其區別如下:

  • 未加註結尾
    為Virtual Package,主要供相依性管理用途。安裝7zip.install或7zip.commandline後,Chocolatey會認定Virtual Package 7zip已安裝好,若其他軟體依賴7zip,檢查對象為7zip,以涵蓋使用者安裝7zip.install或7zip.commandline的兩種情境。
  • .install(舊名稱為.app,建議一律改用.install)
    指透過MSI、Setup.exe安裝檔安裝,可能會更動Registry、Program Files目錄、系統檔案等,常需升級管理者權限,移除時需透過解除安裝程序。
  • .portable(舊名稱為.commandline、.tool,建議一律改用.portable)
    即所謂綠色軟體,只複製檔案至單一目錄,不需更動Registry、系統檔案,移除時刪除檔案即可,但會損失如副檔名關聯、右鍵選單等系統整合功能。

找到程式包正確名稱,使用"cinst 7zip.install"就可以完成安裝,連安裝程式的操作介面都沒出現,咻咻咻就安裝完成,很酷吧!!

至於Chocolate現在提供哪些軟體,除了用clist猜關鍵字外,也可以透過Chocolatey網站瀏覽尋找:

【關於資安?】

只需下個指令,對來源一無所知就能無聲無息把軟體裝好,興奮之餘也不免擔心: 會不會下載到被植入病毒或木馬的髒東西? 或是被自動安裝一併掛入廣告軟體或間諜軟體等寄生蟲?

依Chocolatey團隊領導者Rob的說法(見Scott文章的Security Issue一節),軟體包在新上線前都經Rob自己審核過,隨著規模擴大未來或許會成立專門的小組負責審核。而依規定,所有軟體包必須符合以下原則(參考):

  • 不包含非法(盜版)軟體、垃圾軟體、惡意程式
  • 軟體需對其他使用者有用,只適用極特定環境的程式就免了
  • 使用無聲安裝模式(Slient Mode,指不需使用者輸入任何選項就完成安裝)時不可包含廣告、間諜軟體或不相干的附贈軟體
  • 不要重複加入已有其他程式包提供過的程式,應利用相依性
  • 宜將軟體包拆解細分以利組合相依
  • 一律使用直覺的小寫名稱

由以上資訊,Chocolatey的軟體包上線前會經過人工審視,並有嚴格的合法及安全性要求。會不會有任何人為疏失的可能性? 我相信是存在的,但應與從github、SourceForge或其他Freeware軟體蒐集網站取得的風險相去不遠,在我可接受範圍內,決定開始享受Chocolatey帶來的便利。順便照慣例高呼: 你是我的巧克力 Chocolatey好威呀!


Comments

Be the first to post a comment

Post a comment