Windows用户准备好使用apt-get了吗?

[原文发表地址]  Announcing the release of AMQP support with Windows Azure Service Bus

[原文发表时间] 2013-5-23 7:42 AM

image

它能做什么

Chocolatey 使得人们可以通过一个安装脚本的主目录快速地使用命令行来安装Windows应用程序。你可以安装Git,7Zip甚至Microsoft Office(如果已经获得密钥)。此技术的思想是用一个众所周知的密钥来实现无缝平滑地安装。

举个例子,一旦安装了Chocolatey,你可以采用如下命令行来安装应用程序:

  • cinst git
  • cinst 7zip
  • cinst ruby
  • cinst vlc

这是它的基本应用。

它的安装目录已经发展地如此完整,事实上,最近我想安装DosBox,这样就能玩Zork。我碰运气地运行了“const dosbox”,它居然成功安装了DosBox。这就是Chocolatey做的承诺。

启动Chocalatey

在开始安装之前,先安装Chocalatey包管理器。复制粘贴下列到你的命令行,并运行它。(一开始都会过分恐惧这一步)

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

想必你在做之前想知道哪些命令行即将作用于你的电脑,让我们来逐行解析。这就要启动PowerShell来做这项困难的工作。现在几乎所有的windows机器都有Powershell,也正是PowerShell使得Chocolatey工作的。

一些人拥有自定义配置文件,NoProfile会强制性切换到自定义配置文件来防止安装冲突。它执行从https://chocolatey.org/install.ps1/下载的PowerShell脚本。注意它的执行策略被设置为unrestricted。要明白,它是在执行从web上下载的代码,所以这不是一点风险没有。接着它会添加Chocolatey到你的路径下(在这个窗口下)这样你就可以立马使用它。以后Chocolatey会被自动添加到多个命令行窗口中.

现在请看https://chocolatey.org/install.ps1。这是段简短清晰易读的脚本代码。它用来下载Chocolatey安装zip文件(通常是个NuGet包),解压并且通过安装包中工具部分来运行脚本继续安装。

它如何工作

Chocolatey是一个引导程序。它使用PowerShell脚本和NuGet包格式为你安装应用程序。NuGet是Windows开发者用来在project级别导入库的包管理系统。Chocolatey(懂吗? Chocolatey Nu-Get?)扩展这个概念到在系统级别导入应用程序。

今天如果你想要7Zip,通常会google它,找到这个网站,找到最新版本或与你系统匹配的版本,下载并运行。点击若干个“下一步”,直到“完成”,或许还需要把它添加到你的path环境变量下。Chocolatey会为你做这些。

重复一遍,NuGet是为项目本地安装的类库,Chocolatey是为你的整个系统全局安装的应用程序。

Chocolatey采用包开发人员用来连续安装程序和构建依赖树的PowerShell脚本(你永远不用考虑它)。以一个Git安装脚本的内部结构为例:

你要采用的最重要部分就是第一行。注意这个Chocolatey脚本是从MySysGit网站上下载G

    1: try {
    2:   Install-ChocolateyPackage 'git.install' 'exe' '/VERYSILENT' 'https://msysgit.googlecode.com/files/Git-1.8.1.2-preview20130201.exe'
    3:  
    4:   #------- ADDITIONAL SETUP -------#
    5:   $is64bit = (Get-WmiObject Win32_Processor).AddressWidth -eq 64
    6:   $programFiles = $env:programfiles
    7:   if ($is64bit) {$programFiles = ${env:ProgramFiles(x86)}}
    8:   $gitPath = Join-Path $programFiles 'Git\cmd'
    9:  
   10:   Install-ChocolateyPath $gitPath 'user'
   11:  
   12: @"
   13:  
   14: Making GIT core.autocrlf false
   15: "@ | Write-Host
   16:  
   17:   #make GIT core.autocrlf false
   18:   &; "$env:comspec" '/c git config --global core.autocrlf false'
   19:  
   20:   Write-ChocolateySuccess 'git.install'
   21: } catch {
   22:   Write-ChocolateyFailure 'git.install' $($_.Exception.Message)
   23:   throw
   24: }

it的。Chocolatey并没有改变、生成或者hosting安装程序。它是在自动运行枯燥的获取软件操作,但是它仍旧总是从同一个地方获取软件。

高级配置

既然已经学习了基础知识—它们的确是很基础—这里有更深的Chocolatey知识去探究。除了cinst和cuninst,还有别的命令使得在Windows上安装东西更加简单。记住,这些命令都在你的PATH下,所以你可以随时调用它们。

每一个主要的源都可以被调用,使用带有-source参数的cinst命令 像 "cinst IISExpress - source WebPI" 或者使用下面指定的他们自己的别名.

Cwindowsfeatures - 如果你已经打开过添加/移除程序,然后点击安装Windows特性来安装IIS或Hyper-V,那么这个命令就适合你。

几个例子:

  • cwindowsfeatures  IIS-WebServerRole
  • cwindowsfeatures Microsoft-Hyper-V-All
  • cwindowsfeatures TelnetClient
    • 另外,你可以一直运行clist -source windowsfeatures来获取完整的列表。

cwebpi – 网站平台安装程序是一个下载任何你在Windows网站开发中可能需要的开发工具的强大图形用户界面。它是一个目录,一个安装程序,而且还是一个关联者。也包括集成了Chocolatey的命令行版本的WebPI,所以你可以:

  • cwebpi IISExpress

  • cwebpi VWDOrVs11AzurePack_2_0

    • 重复一遍, clist -source webpi 获取一个你能操作的列表。

Chocolatey命令参考中包含了更加完整的列表,它包括了Chocolatey是如何与Cygwin Gems和Python集成 的。

安全问题

image

这是一个棘手的事情。如何让一个系统在让你直接从互联网上快速、干净且简单的安装任何东西的同时,却不会直接安装一些有害的东西呢?你希望与服务器的交互是安全,包是可信的,但同时你也希望这些包从被上载后没有被篡改过。这样就不可避免的存在中间人攻击的威胁。你会想要留意恶意包且当有偷溜进入时启用快速拿下。

当然,安全顾虑并不是Chocolatey独有的。 自从包仓库生成之初,它便是其中一部分。NPM库在2012年三月有一个安全漏洞,andyet博客的家伙们围绕这个漏洞进行了探究,同样也指出了个人责任感也在发挥作用。

Linux的apt-get通过对密码学的恰当使用和效仿最佳实践解决了许多安全问题。在apt库中的包都添加SecureApp标记,当你使用第三方库或者安装没有标记的包时会发出警告。

Chocolatey团队已经很快的扑向了安全问题并且他们非常的可靠。他们在恰当的地方添加SSL并且关注到来的任务。如果Chocolatey得到大的(在我看来带宽和花费是一个大问题)也可能是非营利性组织的介入来不仅提供花费,而且提供安全审计和最佳实践,那就最好不过了。

Chocolatey的领头人Rob在其邮寄名单的一篇博文中,也是在2012年3月,讲了以下几点(我添加编辑过):

安全性是Chocolatey良好发展前景的很大一部分。当前我是负责人,每天都会收到邮件告知前一天加入的新包。我看着新作者们开发的所有包,典型地查看我与之保持良好联系的作者们开发的大多数新包的第一版。

我详细地与他人谈过每个包都有feed放缓的一面,每个新版本会在主feed展示之前通过。我在关注debian如何用多个feeds做事并想在那个方向进展.

安全性?将来我们将寻找一小组人组成nupkgs的审批机构。我们也讨论了向nupkg展示散列,并且可能让人们为安装程序指定一个散列,这样Chocolatey就可以在程序下载还未执行时就验证它。

image

我可以将一个Chocolatey包命名为"FormatMyHardDrive"吗?当然可以,就像我可以让你打开一个管理员提示窗口然后输入c:/q,你不会去做,对吧?;)

接下来?

当然,Chocolatey并不是必须被你的“Gender Non-Specific Non-Technical Parent”所用。而且它的确以Ninite GUI安装工具的形式拥有一定的“竞争力”。虽然还不至于成为“普普通通的张三李四”且只有有限的目录,Ninite却的确是填补了为超级用户快速获得他们想要的应用程序和工程的空白。

此外,Chocolatey真的是apt-get吗?它还没有安装系统级的包,不过没有理由它不能。其他开放源代码的项目如CoApp想要成为Windows app-get,不过CoApp更像一个“系统级的库、C++支持、且类似Unix的工程”而Chocolatey更像是一个“开发者和高级用户的工程和它们的依赖”。

Chocolatey的确安装了依赖,你可以尝试用对git有依赖的“cinst gitextensions”来查看。Chocolatey会遍历整个关系图然后在最终安装gitextensions前安装它所需要的东西。

Chocolatey,终究Windows自己在哪儿安装受控于不规则的路径控制和安装位置。因为Windows对事物没有正式的安装位置,并且Chocolatey先把自己放在了PATH下,可能出现奇怪的情况:安装在Chocolatey 外面的应用程序不参与安装在内部的应用程序的排队. 举个例子,几个月前,我用Chocolatey安装了Git,忘记了它的版本。然后自己安装了一个最新版本的Git。但是我一直遇到一个旧的git bug,因为Chocolatey的Git版本是“优先的”。我相信这类错误已经在最近的Chocolatey版本中修复了,但是重点是:如今对于在windows上低级别工程的安装,何时,何处结束很困难.

扩展

现在,我绝对没有要从Rob和团队手中拿走这项艰巨工作的意思,但是(我之前和Rob谈过这事)对于Chocolatey这个名字,让我觉得很难抉择。当然,“Chocolatey”有两种拼写方法,至少对我来说可靠地打出“Chocolatey”很艰难。-ey理论上说是一个合法的变形体,但是在Word里这种拼写会被标记上红色波浪线。更少除了是拼写,更多它是一个名字。它不像“npm”这样乏味,也不像“apt-get”这样严肃,没有“gem”诗意般的简洁。我意识到我们生活在一个围绕Hulu、Yahoo、Microsoft(严格的说,MICRO SOFT,那是什么?)和Google这样的公司名字的世界,但是值得指出的是一个好的名字的确会让一个项目上一个台阶。我不确定Chocolatey对这个项目来说是个合适的名字,但是这完全是我的观点。

我鼓励你,专业的读者,自己体验下Chocolatey!它是一个强大的工具,一个忙碌且正在成长中的社区且它本身就是一种有趣的技术。

Chocolatey(apt-get Windows版)用户们有没有在期待?赶快发表你的评论吧。


赞助商 : 强烈鸣谢SoftFluent本周的赞助!请查看他们巧妙地编写生成工具:Less Plumbing, More Productivity! Generate rock-solid foundations for your .NET applications from Visual Studio and focus on what matters!