Apt-Get for Windows - OneGet and Chocolatey on Windows 10
In 2013 I asked the questions "Is the Windows user ready for apt-get?" As with nearly all my blog posts, the comments are better than the post itself. ;)
Now it's 2015 and many of us are upgrading to Windows 10. One of the little gems in Windows 10 that no one is talking about (yet) is OneGet. You can read about OneGet architecture here.
It's easy (and wrong) to just say that One-Get is Apt-Get for Windows. But OneGet isn't actually a package manager. It's more clever and cooler than that. It's a package manager manager.
OneGet is a Manager of Package Managers
Go out to you Windows 10 PowerShell prompt now and type "Get-PackageProvider" and you'll see the package managers you have registered with OneGet today.
C:\> Get-PackageProvider
Name Version
---- -------
Programs 10.0.10240.16384
msu 10.0.10240.16384
msi 10.0.10240.16384
PSModule 1.0.0.0
Usually programs are installed with things like MSIs, for example, so there's a provider for that. You can type "Get-Package" and see the programs AND packages on your machine:
C:\> Get-Package
Name Version
---- -------
123D Design R1.6 1.6.41
Windows Driver Package - Ge... 06/04/2011 8....
Windows Driver Package - Ge... 06/19/2014 8....
Windows Driver Package - FT... 01/27/2014 2....
JRuby 1.7.19 1.7.19
Windows Driver Package - ST... 11/09/2009 3....
EPSON NX410 Series Printer ...
Intel Edison Device USB driver 1.2.1
Since it's PowerShell, you can sort and filter and what-not to your heart's delight.
OneGet isn't Microsoft's Chocolately
Chocolatey is an open source apt-get-like machine-wide package manager that you can use today, even if you don't have Windows 10.
OneGet isn't Microsoft's version of Chocolately. But there is a beta/preview Chocolatey provider that plugs into OneGet so you can use OneGet to get Chocolatey packages and install them.
Other things worth noting, even though OneGet is in the box for Windows 10, you can still run it on Windows 7 and Windows 2008 R2. Plus, OneGet isn't done and it's open source so there's lots of cool possibilities.
Oh, and an important naming point. Just like "Chromium" is the open source browser and "Chrome" is the Google packaged instance of that project, "OneGet" is the open source project and what ships with Windows 10 is just generically "PackageManagement." Just a good reminder of the relationship between open source projects and their shipping counterparts.
Installing VLC using OneGet and Chocolatey on Windows 10
Example time. You've got a new Windows 10 machine and you want to get VLC. You can (and should) totally get it from the Windows Store, but let's get it using Package Management.
Here I need to get the beta Chocotlatey provider first, and once, with "get-packageprovider -name chocolatey." Also, when I install a package for the first time it will prompt to download NuGet as well. I will answer Yes to both.
NOTE: You can also install Chocolatey explicitly with "install-package –provider bootstrap chocolatey"
Now I can just "install-package vlc" and it will get it from the Chocolatey repository.
C:\> get-packageprovider -name chocolatey
The provider 'chocolatey v2.8.5.130' is not installed.
chocolatey may be manually downloaded from https://oneget.org/ChocolateyPr30.exe and installed.
Would you like PackageManagement to automatically download and install 'chocolatey'?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y
Name Version
---- -------
Chocolatey 2.8.5.130
C:\> install-package vlc
The provider 'nuget v2.8.5.127' is not installed.
nuget may be manually downloaded from https://oneget.org/nuget-anycpu-2.8.5.127.exe and installed.
Would you like PackageManagement to automatically download and install 'nuget' now?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): y
The package(s) come from a package source that is not marked as trusted.
Are you sure you want to install software from 'chocolatey'?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): y
Name Version Source Summary
---- ------- ------ -------
vlc 2.2.1.20150630 chocolatey VLC Media Player
Boom. Now VLC is installed. It's early days but it's interesting stuff!
You can read about the available OneGet cmdlets at https://github.com/OneGet/oneget/wiki/cmdlets.
For example here I can find the latest version of zoomit.
C:\> find-package -name zoomit
Name Version Source
---- ------- ------
zoomit 4.50 chocolate
Just to be clear, with regards to OneGet and Chocolatey.
- It's an unsupported version of Chocolatey provider in a GitHub repo
- Folks can download it using OneGet cmdlets and then using the unsupported provider, you can download Chocolatey packages.
- Microsoft is working with the community to take ownership of Chocolatey provider.
And again, you can use Chocolatey TODAY on your Windows 7 and up machines as it is.
Managing MSI-installed Programs with OneGet and PackageManagement
OneGet and PackageManagement in Windows 10 lets you manage package managers of all kinds to control what's installed one your machines. For example, I can uninstall an MSI installed program like this. This is just like visiting Add/Remove Programs (ARP) and uninstalling, except I did it from the command line!
C:\> Uninstall-Package join.me.launcher
Name Version
---- -------
join.me.launcher 1.0.368.0
MSI and Chocolately are just the start for OneGet. What if one package management API could also get Python or PHP packages? Windows Store apps?
Donate to help Chocolatey
Last, but definitely not least, it's important to remember that Chocolatey and the Chocolatey Repository of Packages can use your help and sponsorship. Head over to https://chocolatey.org/ and scroll to the bottom and click Donate and you can Paypal or use your Credit Card to help them out.
SOCIAL: Hey folks, please do follow me on Facebook https://fb.me/scott.hanselman or Twitter! https://twitter.com/shanselman
Sponsor: Big thanks to our friends at Infragistics for sponsoring the feed this week! Responsive web design on any browser, any platform and any device with Infragistics jQuery/HTML5 Controls. Get super-charged performance with the world’s fastest HTML5 Grid -Download for free now!
About Scott
Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.
About Newsletter
Do any of these package managers allow you to specify an iso that's already been downloaded to prevent having to get that 4GB iso every time the package is installed? I've started using Boxstarter for small developer tools and Windows features, but it's not feasible for large applications like visual studio since I don't know yet how to say "I've already got the iso".
Thanks
Get-Package -Name {packageName}to get the installation location.
This does not take away from the awesomeness that is OneGet, but it still hinders the usability.
@Jabe, "C:\Chocolatey" was the original Chocolatey install path, so it just seems that the oneget-chocolatey provider is currently a couple releases behind Chocolatey upstream. Hopefully the provider will be updated soon to use the latest and greatest Chocolatey.
Another issue is that it assumes the first argument is an executable, which means you can't pass in cmdlets.
This is a better approximation of Linux's su rather than sudo.
NuGet, MyGet, Chocolatey, OneGet… what?! People ask questions and occasionally can’t see the forest for the trees. Here’s a quick recap:
NuGet: a solution-level package management tool, used to manage software dependencies within the scope of a solution. It is accompanied by the NuGet Gallery, the home of many if not all .NET open source components.
Chocolatey: a system-level package management tool, used to manage software installations on a Windows system. It (currently) leverages PowerShell and NuGet, supports the Web Platform Installer (WebPI), MSI, RubyGems and many more, and is accompanied by the Chocolatey Gallery where you can find many popular software packages. Rob describes Chocolatey as somewhat like “apt-get”, but with Windows in mind.
MyGet: a hosted NuGet package server where you can create and secure your own feeds. In essence, MyGet is able to host vanilla NuGet feeds, as well as Chocolatey feeds.
OneGet: a a unified interface to package management systems (see above)
http://www.xavierdecoster.com/using-myget-as-a-oneget-package-source
And more, and more:
PSGet and PSReadLine https://github.com/lzybkr/PSReadLine
From the blog post:
Plus, OneGet isn't done and it's open source so there's lots of cool possibilities.
and
It's an unsupported version of Chocolatey provider in a GitHub repo
Hopefully, this system can still provide things like automatic updates.
@David Sounds like a bug in the Chocolatey provider to me. OneGet does not assume you need to be an administrator to do anything (that would not be true of all packaging systems, for example if you install Python as a non-admin user, a Python provider would be able to install packages for it as that user), so it's up to individual providers to figure this out and elevate when necessary.
Set-ExecutionPolicy Bypass
The dedication that patently goes into choco is inspiring. However it pains me to see package management for windows run on a part time, extreme hobbiest, donation basis.
Am looking forward to Hashicorp and other players in this field getting involved too.
I think I'd just like to see a real apt-get on windows, whether that means Microsoft writing their own implementation for one-get or them backing something else like choco.
It's a long road but Windows is so far behind linux in some aspects - like apt-get - and as a Windows user I wish Microsoft would get there a bit quicker. 2016 (Windows Server) is too far away.
Embryonic yes, but a good start none-the-less. Fingers crossed this will iterate fast.
Name Version DynamicOptions
---- ------- --------------
Programs 10.0.10122.0 {IncludeWindowsInstaller, IncludeSystemComponent}
msu 10.0.10122.0 {}
msi 10.0.10122.0 {AdditionalArguments}
PSModule 10.0.10122.0 {PackageManagementProvider, Location, InstallUpdate, InstallationPolicy...}
Chocolatey 2.8.5.101 {SkipDependencies, ContinueOnFailure, ExcludeVersion, ForceX86...}
NuGet 2.8.5.101 {Destination, SkipDependencies, ContinueOnFailure, ExcludeVersion...}
So, next problem-- uninstall-package doesn't work! It removes the package from the package-management directory, so powershell/oneget/whatever you call it _thinks_ the package was removed, but I can still run it and was forced to use the graphical uninstaller.
Another major missing feature with powershell windows package-management is that there's no "upgrade" command. In my ubuntu box, I simply run "apt-get update" to refresh all the repositories followed by "apt-get upgrade" to upgrade all my packages. As far as I can tell, there is no equivalent to either command in windows package-management-- it works on individual packages only and does not maintain a local repository cache.
So... baby steps. It's pretty far from feature-parity with yum or apt, and it's not ready to actually be used, but it's encouraging.
It makes me nervous when I see that Firefox (for example) is uploaded/maintained by someone other than Mozilla.
Likely something not supported by Win 10 Enterprise, or else restricted by policy, so nothing to worry about. Plus, I can just install Chocolatey directly and use it as before.
WARNING: Unable to find package provider 'chocolatey'.
Any ideas?
From radhamohan singh techie
One of the nice features of Zero Install is side-by-side installation allowing multiple versions of apps, clean uninstalls and no DLL hell. Full disclosure: I'm the main Windows dev on the project.
I am using Win10 Build 10240 - 32 Bit.
Regards,
Peter
Regards,
Peter
This blog post is the clearest yet since the Windows 10 release, so Scott, if you know any of them, be sure to tell them when you meet them that Windows 10 has been released, and they need to get their act together. Start blogging, update those websites, remove those beta/preview feeds, edit those GitHub wiki's and readmes, and start tweeting!
I think it can be great for pro users and developers, but not with Chocolatey. As someone else said, Chocolatey is just wrapping .exe in .ps1, usually to add --silent switches. One should never just download and run installers, yet this is what Chocolatey will end up encouraging.
The only way forward is installations that are purely based on declarative syntax, not executable code. The trusted installer will simply copy files, nothing more. And apps will remain sandboxed, not registry access, just file in their own install dir, in temp, and in their own dir in user data.
1. First, run PowerShell as Administrator, otherwise nothing will work and it will silently fail (yes, it's annoying).
2. Run Set-ExecutionPolicy RemoteSigned in the console.
3. Run the commands in Scott's blog post to enable Chocolatey provider and install packages (such as vlc).
4. Chocolatey, for now, does not add its bin directory to %PATH% environment variable, therefore command-line packages (those without an installer) might not work when you type their name. Therefore add C:\Chocolatey\bin (not sure about the exact path) to your PATH environment variable and relaunch your console.
http://www.sysadmit.com/2015/08/windows-oneget-y-chocolatey.html
Until all you need is 'apt-get install mc' on a newly created VM it's all great. But when you need some particular version of some particular software, you are googling for all that repositories, which are maintained by god knows who, and you don't really know if it will be available next time you need it.
All this just to package code and install apps. I think you can do better so much better than this over there.
Comments are closed.