Vasárnap délutáni kockulás: Windows 10 package management

Van az úgy, hogy az ember felkel vasárnap, főz magának valamit ebédre, majd utána jobb program híján leül a gép elé. Miután "kiolvasta az internetet" (elolvasott minden említésre méltó új emailt, blog-, fórum-, twitter- és facebookbejegyzést, unatkozni kezd. Ez akár odáig fajulhat, hogy a lakásban körülnézve realizálja, hogy nem ártana porszívózni. :) Szűk negyedóra után az immár tiszta lakásban járva egy kört megint azon tanakodik, hogy mivel is kéne elütni az időt. Ekkor elkezd csinálni valami hasznosat. :)

Az általam egyik leginkább várt Windows 10 újítás a beépített package management, leánykori nevén OneGet. Az egyik insider buildben már kipróbáltam egy 7-zip telepítés erejéig, az szépen működött is, de várható volt, hogy a végleges kiadásban kicsit máshogy fog működni. Két lényeges változást emelnék ki, az egyik, hogy megváltozott a név OneGetről PackageManagementre, a másik, hogy eltávolították a Chocolatey providert az alaptelepítésből, cserébe (?) elérhető a PowerShell Gallery.

Egy TechNet blogbejegyzés elolvasása után gondoltam megnézem egyáltalán mi elérhető az alaptelepítésben, így a bejegyzésben is említett PSReadline csomagra kerestem rá, ami nem várt eredményt adott:


PS C:\> Find-Package PSReadline
WARNING: Unable to find package provider 'NuGet'.
WARNING: The specified PackageManagement provider 'NuGet' is not available.
Find-Package : No match was found for the specified search criteria and package name 'PSReadline'.
At line:1 char:1
+ Find-Package PSReadline
+ ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Microsoft.Power...ets.FindPackage:FindPackage) [Find-Package], Exception
    + FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.FindPackage

Ez két okból is érdekes, egyrészt se a providerek, se a source-ök között nem láttam listázva a NuGet-et:


PS C:\> Get-PackageProvider

Name                     Version          DynamicOptions
----                     -------          --------------
Programs                 10.0.10240.16384 {IncludeWindowsInstaller, IncludeSystemComponent}
msu                      10.0.10240.16384 {}
msi                      10.0.10240.16384 {AdditionalArguments}
PSModule                 1.0.0.0          {PackageManagementProvider, Location, InstallUpdate, InstallationPolicy...}


PS C:\> Get-PackageSource

Name                             ProviderName     IsTrusted  IsRegistered IsValidated  Location
----                             ------------     ---------  ------------ -----------  --------
PSGallery                        PSModule         False      True         False        https://www.powershellgallery.com/api/v2/

Másrészt egy warning még nem ok arra, hogy a PSGalleryből elérhető csomag keresése is meghiúsuljon.
Az interneten persze semmi találat nem volt a warningra, más keresések meg túl általánosra sikerültek, nem vittek közelebb a megoldáshoz.

Egy hirtelen ötlettől vezérelve kiadtam az alábbi parancsot:


PS C:\> Find-Package

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

Name                           Version          Source           Summary
----                           -------          ------           -------
xFirefox                       1.0.0            https://www.p...
PSReadline                     1.0.0.13         https://www.p...
...

Érdekes, így meg felajánlotta, hogy letölti a hiányzó providert, és már meg is találta a PSGallery csomagjait. Arra tippelek, hogy a szintén telepített Visual Studio 2015 Community Edition-nel érkező NuGet beregisztrálta valahová magát, amiből a PackageManagement is dolgozik, csak nem volt teljes a konfiguráció.

Persze ez így még elég sovány, jó lenne feltelepíteni pár igazi programot. (A PSGallery leginkább PowerShell cmdleteket és egyéb resourceokat tartalmaz, a NuGet pedig development libraryket.) Mi sem egyszerűbb, már ismerem a trükköt*:


PS C:\> Find-Package -ProviderName Chocolatey 7zip

The provider 'chocolatey v2.8.5.130' is not installed.
chocolatey may be manually downloaded from https://oneget.org/ChocolateyPrototype-2.8.5.130.exe and installed.
Would you like PackageManagement to automatically download and install 'chocolatey' now?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): y

Name                           Version          Source           Summary
----                           -------          ------           -------
7zip                           9.38             chocolatey       7-Zip is a file archiver with a high compression ratio.

*: Ami annyiból áll, hogy ha bármelyik PackageManagement cmdlet ismeretlen providerrel találkozik, megpróbálja megkeresni, és ha megtalálja, automatikusan fel is ajánlja a telepítését.

Nálam valamiért a Windows 10 upgrade visszaállította az execution policyt Restrictedre, a Chocolatey viszont így nem működik megfelelően, ezért ki kellett adnom egy

Set-ExecutionPolicy RemoteSigned

parancsot. Így már minden akadály elhárult:


PS C:\> Install-Package -ProviderName Chocolatey -Name 7zip

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

The package(s) come from a package source that is not marked as trusted.
Are you sure you want to install software from 'C:\Users\Bat\AppData\Local\Temp\chocolatey\7zip.install\7zip.installinstall.msi'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): y

Name                           Version          Source           Summary
----                           -------          ------           -------
7zip.install                   9.38             chocolatey       7-Zip is a file archiver with a high compression ratio.
7zip                           9.38             chocolatey       7-Zip is a file archiver with a high compression ratio.

Természetesen működik is, illetve ezután már a telepített programok listájában is megjelenik:


PS C:\> Get-Package 7zip

Name                           Version          Source           Summary
----                           -------          ------           -------
7zip                           9.38             C:\Chocolatey... 7-Zip is a file archiver with a high compression ratio.
7zip.install                   9.38             C:\Chocolatey... 7-Zip is a file archiver with a high compression ratio.

Kíváncsiságból megnéztem az uninstallt is, az ugyan lefut, de a programot ténylegesen nem távolítja el. Amit még nem tudok, hogy a frissítés hogyan megy, tippre újra le kell futtatni az Install-Package-et. Ha így van, az összes program frissítése sem sokkal bonyolultabb, csak össze kell pipeolni a Get-Package-dzsel. :)

Hozzászólások

Egyebkent csak szerintem indul gyorsabban a powershell W10 alatt, vagy mas is tapasztalt hasonlot?

Hát nem egy pacman(vagy egy random linux csomagkezelő).....

Yum-ot ismerem csak, ott bármilyen külső repot felvehetsz, a yum install akarmi.rpm pedig úgy telepít, hogy a függőségeket is felrakja közben. A yum remove úgy távolít el csomagot, hogy a csak vele kapcsolatosakat is leszedi.
Telepíthető egyszerre vele az operációs rendszer frissítése, és a programok újabb verziói.
Van hozzá egy pár kattingatós felület is, akinek ez a vágya.
Nem utolsó sorban csak akkor csinál valamit ha ÉN AKAROM.
És mindez kb. már 10 éve.

Ez nagy igazság. Vigyázni kell a külső csomagszállítókkal, egyszerre többfélét (azonos területről) nem célszerű alkalmazni.
Windows-ban talán majd akkor lesz ilyen gond, ha egyes programoknak lesz MS tárolóban (régebbi) és a gyártónál (frissebb) verziója.
Ami még eszembe jutott, kevés esetben kell olyan telepítő linux alá ami win alatt megszokott. Next-Next-Next-Express(meglepi)/Custom-Hova települjőn-Next-Next-Next-Tegyen ikont-Indítsa el-Finish

na ja :) yum install foobar (Y) (next/finish) :)

és hogy foobar hova települt, ahova a packager gondolta hogy jó helyen lesz. :)
Na jó, nagy általánosságban a /usr alá, ami Winen mondjuk megfelelhet egy Program Files -nak. Eltekintve attól, hogy a libek linuxon is /usr/lib* alá kerülnek, Winen adott esetben Windows\System* foo. Bár nem minden esetben.

"Winen adott esetben Windows\System* foo"

Szeretném megjegyezni, hogy időközben átléptünk a harmadik évezredbe. Ha valamely program írója feltétlen oda akar elhelyezni valamit, az az esetek 99,9%-ában faszkorbáccsal honorálandó.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Itt nem repókat hanem providereket vehetsz fel, más az absztrakció de azért hasonló célt szolgál. Függőségkezelés szintén a provider feladata, de megoldható. Mivel van Windows update provider, a frissítések kezelésére itt is van valamilyen lehetőség. Gui meg eddig is volt, itt a powershell interfész az újdonság.

Elobb feltalaljak a "parancssort" azthiszem "core" valami.
Most a package managementet "apt, yum, whatever", mi lesz a kovetkezo az X ? :D

http://karikasostor.hu - Az autentikus zajforrás.

Emberunk a Server Core-ra gondolt IMHO.

Amugy meg, a fene tudja. Neha a PowerShelles parancsok iszonyatos modon lassuak, elobb szednem ossze Linux alatt a megfelelo infokat, mire o kiad egy darab kimenetet, raadasul az output rendszerint nincs dokumentalva, csak a bemenet.
--
Blog | @hron84
Üzemeltető macik