Windows 10 Yenilikleri – PowerShell 5 ile Paket Yönetimi OneGet
Microsoft dünyasında paket yönetimi deyince MSI, MSP, MSU, APPX ve ZAP vb. paketleri aklımıza gelmektedir. Bu uzantılardaki uygulama kurulum paketleri kullanılarak uygulamanın tamamı, belirli bir modülü ya da uygulamaya ait yamaların kurulumu yerel olarak ilgili sistemin üzerinde ya da uzaktan dağıtım araçları ile gerçekleştirilir. Linux, Unix ya da MacOS dünyasında ise Apt-Get, YUM, RPM, HomeBrew vb. araçlar kullanılarak yerel olarak hazırlanmış bir paket sunucusundan ya da internet ağında bulunan paket kaynakları kullanılarak istenilen uygulama paketine ulaşılarak gerçekleştirilir. Özellikle Linux, Unix dünyasında çalışan BT profesyonellerinin sıklıkla kullanmış oldukları bir yönetim modülüdür, paket yönetimi.
Microsoft Windows 10 ve Windows Server 2016 geliştirme sürecinde yeni nesil işletim sistemleri ile beraber gelecek olan Windows Management Framework 5.0 ile birlikte öne çıkan yeniliklerden biri de “Paket Yönetimi”.
Hatırlarsanız, Nisan 2014 tarihinde “Windows Management Framework (WMF) V5 Preview” Microsoft tarafından tüm dünyaya duyurulmuştu. Zaman içerisinde yeni sürümlerle geliştirilen WMF 5.0 Preview paketinin son versiyonu Nisan 2015 tarihinde duyuruldu. İçerisinde özellikle BT yöneticileri için kurumsal altyapılarda ağ yönetimini amaçlayan yeni cmdlet komutlarını da içeren bu paket içerisinde aşağıdaki alanlarda yenilikler geliyor :
· Windows PowerShell 5.0
· Windows PowerShell Integrated Scripting Environment
· Windows PowerShell Desired State Configuration
· Network Switch Cmdlets
· Package Management (OneGet)
· Software Inventory Logging
Windows Management Framework (WMF) V5 ile Windows PowerShell 5.0 versiyonu geliyor. Windows PowerShell 5.0 ile çok sayıda yenilik bizleri bekliyor. Bu yeniliklerin listesini Windows Server vNext 2016 Technical Preview 2 Yenilikleri – Bölüm2 makalesindeki “PowerShell İle Neler Geliyor?” başlığı altında bulabilirsiniz. Bu yenilikleri makalelerle sizlerle paylaşmaya devam ediyor olacağız.
Windows Management Framework V5 Preview April 2015 paketine http://www.microsoft.com/en-us/download/details.aspx?id=46889 adresinden ulaşabilirsiniz.
Windows Management Framework V5 Preview April 2015 paketi için desteklenen işletim sistemleri :
· Windows Server 2012 R2
· Windows 8.1 Pro
· Windows 8.1 Enterprise
· Windows Server 2012
· Windows 7 SP1
· Windows Server 2008 R2 SP1
Windows Management Framework V5 paketi Microsoft .NET Framework 4.5 gereksinimi duyar. Microsoft .NET Framework 4.5 paketini Microsoft Download Center adresinden indirebilirsiniz.
Windows Management Framework V5 ile Windows PowerShell komut satırında gelen en önemli yeniliklerden biri de OneGet paket yönetim modülüdür. Windows 10 Technical Preview ve Windows Server 2016 Technical Preview işletim sistemleri üzerinde yerleşik olarak geliyor.
Teknik olarak OneGet bir “paket-yöneticisi” değildir. OneGet’i “genişletilmiş paket-yönetim-iskeleti” ya da “genişletilmiş paket-yönetim-çerçevesi” (package management framework)” olarak tanımlamak daha doğru olacaktır. Bir diğer ifadeyle paket-yönetim-yöneticisi de diyebiliriz. OneGet, paket yönetim eklentileri ile paket kaynakları eklenerek genişletilebilir. Bu paket kaynakları merkezi bir depolama havuzundan yüklenebilirler. PackageManagement(OneGet) yerleşik olarak aşağıdaki paket kaynağı ile gelmektedir:
· Chocolatey
Chocolatey dışında da ilave paket kaynakları eklenebilmektedir. Bu konuda detayları makalemizin ilerleyen kısımlarında uygulamalı olarak görüyor olacağız.
Mimari Yapısı
WMF 5.0 ile gelen paket yönetim altyapısı bir paket yönetim kaynağıdır. Kullanıcılara sağlamış olduğu tümleşik PowerShell arabirimi ile istenen paket kaynakları içerisinde uygulama arama, keşfetme, yükleme/kaldırma, paket envanteri oluşturma gibi operasyonlara imkan tanır. Yine çekirdek yapısında barındırdığı API’lar vasıtasıyla farklı kurulum ve yönetim teknolojilerine sahip paket sağlayıcılar üzerinden paket kaynaklarına erişimi gerçekleştirmeye imkan tanıyan bir mimariye sahiptir.
BT yöneticileri ve son kullanıcılar PowerShell 5.0 ile gelen “OneGet” paket-yönetimi modülü içerisinde gelen cmdlet’leri kullanarak aşağıdaki işlemleri gerçekleştirebilirler:
· Paket Yükleme
· Paket Kaldırma
· Paket Havuzuna Ekleme
· Paket Havuzundan Çıkarma
· Paket Havuzundan Sorgulama
· Paketin sistem üzerinde yüklü olup olmadığını sorgulama
Yukarıdaki işlemleri gerçekleştirmek için WMF 5.0 ile paket yönetim altyapısında aşağıdaki bileşenler geliyor:
· PackageManagement Core bileşeni
· Cmdlet’leri içeren PowerShell modülü
· Paket yönetim sağlayıcılar
· Paket kaynakları
Yerleşik olarak gelen paket yönetim sağlayıcılar:
· Bootstrap provider : daha fazla paket sağlayıcının nereden alınabileceğini bilen sağlayıcı
· MSI Provider : MSI paketlerini yönetir.
· MSU provider : Microsoft güncelleme paketlerini yönetir.
· Programs provider : Program Ekle/Kaldır altındaki envanteri yönetir.
· PowerShellGet : PowerShell modüllerine erişimi sağlar.
Paket Yönetim Uygulama Adımları :
Altyapı ve mimarisi ile ilgili bu kadar bilgiden sonra artık uygulamalı olarak paket yönetim adımlarını birlikte inceleyelim.
Öncelikle PowerShell versiyonunun bir kontrolünü yapıyoruz:
Gördüğünüz üzere Windows PowerShell 5.0 versiyonuna sahibiz. Ben uygulamaları bir Windows 10 Insider Preview üzerinde gerçekleştiriyoruz. Sizler benzer uygulamaları Windows Server 2016 Technical Preview 2 üzerinde de gerçekleştirebilirsiniz. Zira her iki versiyon da PowerShell 5.0 ile geliyor. Ayrıca Windows 7, Windows 8, Windows 8.1, Windows Server 2008 R2,Windows Server 2012, Windows Server 2012 R2 işletim sistemleri üzerinde de PowerShell versiyonunu WMF 5.0 ile PowerShell 5.0 sürümüne yükselterek gerçekleştirebilirsiniz.
PowerShell versiyonumuzu kontrol ettikten sonra şimdi de PackageManagement paket yönetim modülünü kontrol edelim. Bunun için de aşağıdak cmdlet çalıştırıyoruz:
Paket yönetim modülü WMF 5.0’ın ilk sürümlerinde “OneGet” olarak gelirken son sürümde “PackageManagement” olarak değişmiştir. Açık kaynak olarak yürütülen projede ise module ismi hala “OneGet” olarak devam etmektedir. Açık kaynak projesine https://github.com/OneGet adresinden erişilebilir.
Şimdi de PackageManagement modülü içerisinde gelen cmdletlerin listesini kontrol ediyoruz:
Gördüğünüz gibi paket yönetiminde üç seviyede yönetim sağlanıyor : paket sağlayıcı (provider), paket kaynağı ve paket.
Yukarıdaki resimde de listelenen cmdlet’lerin tamamı isminden de fonksiyonunu açığa çıkartıyor. Kısaca yaptıkları işlemleri açıklayacak olursak:
· Find-Package : Paket aramak ve keşfetmek için kullanılır.
· Get-Package : Yüklü paket listesini getirir.
· Install-Package : Paket yüklemesi yapar.
· Save-Package : Paketi bilgisayarınızda farklı bir konuma indirir. Yükleme yapmaz.
· Uninstall-Package : Yüklü paketi bilgisayarınızdan kaldırır.
· Get-Packageprovider : Paket sağlayıcıları listeler. Örneğin; Chocolatey.
· Get-PackageSource : Bilgisayarınızda kayıtlı paket kaynaklarını listeler.
· Register-PackageSource : Tanımlanan bir paket sağlayıcı için paket kaynağı ekler.
· Set-PackageSource : Tanımlanan paket sağlayıcı için paket kaynağını değiştirir.
· Unregister-PackageSource : Tanımlanan paket sağlayıcıya ait kayıtlı bir paket kaynağını kaldırır.
Paketlerin Keşfedilmesi:
Paket keşfi yaparken “Find-Package” cmdlet kullanıyoruz. İhtiyaç durumuna göre ilgili parametreleri de kullanarak hızlıca istenilen pakete ulaşmak mümkündür.
Öncelikle Get-PackageSource cmdlet ile paket kaynakları listesine bir göz atalım.
Hali hazırda henüz tanımlı bir paket kaynağı olmadığı için “Unable to find package sources” uyarı mesajını alıyoruz. Bu mesaj sonrasında aşağıdaki komutu çalıştırarak an itibariyle paket kaynağında kaç adet paketin olduğunun bir ölçümünü yapıyoruz.
Gördüğünüz gibi sistemde ilk kurulum anı itibariyle paket kaynağı tanımlı olmadığı için paket sayısı “0”. Dolayısıyla aşağıdaki şekilde de görülen Find-Package cmdlet kullanarak 7Zip ya da Zoomit gibi uygulama paketlerinin olup olmadığını sorguladığımızda da bu isimlerde bir paketin bulunamadığı mesajıyla karşılaşıyoruz.
Yukarıda da ifade ettiğimiz “BootStrap” isimli sağlayıcıyı kullanarak daha fazla paket sağlayıcıyı kaynağı nasıl bulabileceğimizin listesini veren aşağıdaki cmdlet çalıştırıyoruz. Dikkat ederseniz daha fazla paket bulmak için ProviderName parametresine değer olarak “BootStrap” tanımladık.
Bu komuttan sonra da aşağıdaki komutu çalıştırarak “Chocolatey” isimli sağlayıcının var olup olmadığını sorguluyoruz. Ve karşımıza gelen mesajda Chocolatey v2.8.5.101 sürümünün sistemde yüklü olmadığı, elle yükleyebileceğimiz adres bilgisini belirtip, otomatik olarak indirmek için “[Y] Yes” tuşuna basmamızı istiyor.
“Y” ile Chocolatey paket sağlayıcısını bilgisayarımıza indiriyoruz.
İndirme süreci başarıyla tamamlandıktan sonra Get-PackageProvider cmdlet ile paket sağlayıcı listesine baktığımız da Chocolatey geldiğini aşağıdaki şekildeki gibi göreceksiniz.
Get-PackageProvider cmdlet ile –Name parametresine Chocolatey değerini göstererek sadece ilgili paket sağlayıcı bilgilerini de aşağıdaki şekildeki gibi sorgulayabilirsiniz.
Artık paketleri sorgulayabileceğimiz bir paket sağlayıcımız oldu. Şimdi bu paket sağlayıcıyı kullanarak paketlerin keşfine ya da sorgulanmasına başlayabiliriz.
Öncelikle yukarıda “0” sonucunu aldığımız aşağıdaki komutu çalıştırarak an itibariyle paket kaynağında kaç adet paketin olduğunun tekrar ölçümünü yapıyoruz:
Paket kaynağında toplamda 2697 adet paket olduğu istatistiksel bilgisini almış olduk.
Paket sorgulaması için Find-Package cmdlet kullanıyoruz. Aşağıdaki şekilde görülen komut ile Chocolatey paket sağlayıcıyı kullanarak ismi 7Zip olan bir paket var mı sorguladığımızda paketle ilgili bilgiler karşımıza gelecektir.
Benzer şekilde yine aşağıdaki şekilde görülen komut ile Chocolatey paket sağlayıcıyı kullanarak ismi Zoomit ve Notepad2 olan paketlerin var olup olmadığını sorguladığımızda paketle ilgili bilgiler yine karşımıza gelecektir.
Aşağıdaki komut kullanılarak Chocolatey paket sağlayıcı ile kullanılabilen tüm paketlerin listesini grafiksel bir ızgara listeleme nesnesine listeleyebiliriz.
İsteğe bağlı olarak Export-Csv cmdlet ile paket listesini bir CSV dosyasına da çıktı olarak aktarabilirsiniz.
Paketlerin Yüklenmesi:
Paketi keşfedip bulduktan sonra basit bir biçimde herhangi bir paket kaynağı belirtmeden versiyon bilgisini belirterek ilgili paketi doğru kaynaktan bilgisayarınıza yükleyebilirsiniz.
Yukarıdaki şekilde de görüldüğü üzere Find-Package ile 7Zip isimli paket bulunduktan sonra hemen altındaki satırda Install-Package cmdlet kullanılarak yükleme işlemi gerçekleştiriliyor. Yükleme başlamadan paket kaynağının henüz güvenilen bir kaynak olarak atanmadığını, yine de paketi bu kaynaktan yüklemek isteyip istemediğimizle ilgili onayı karşımıza getiriyor. “Y” ile onaylıyoruz ve paket yükleme süreci başlayarak tamamlanıyor.
Yükleme sonrası get-package cmdlet ile yüklü paket listesine baktığımızda 7Zip paketinin listelendiğini göreceksiniz.
Benzer şekilde Zoomit ve Notepad2 paketlerini de yüklüyoruz:
Paketleri yüklerken sizden onay almasını isterseniz de –Confirm parametresi ile birlikte kullanabilirsiniz:
Paket Envanterinin Sorgulanması:
Yerel bilgisayarınızda yüklü paketlerin kontrolü için Get-Package cmdlet kullanabilirsiniz.
Yukarıdaki yüklemeler sonrasında get-package cmdlet ile yüklü paket listesine baktığımızda yüklenen tüm paketlerin listede geldiğini göreceksiniz:
Get-Package cmdlet ile çok fazla paket yüklü olduğu durumlarda –Provider parametresi kullanılarak paket sağlayıcıya göre de filtreleme yapılabilir.
Aşağıdaki şekilde kullanımda olduğu gibi “Programs” isimli özel bir sağlayıcı ile kayıtlı MSI paketleri kullanılarak yüklenen paketler listelenebilir. –IncludeWindowsInstaller parametresi ile Add-Remove Programs ile karşılaştırılarak kaydedilip yüklenen MSI paketleri listelenir.
Uygulamaların Çalıştırılması:
Paket yükleme işlemi tamamlandıktan sonra aşağıdaki şekilde görüldüğü gibi ilgili uygulamayı çalıştırabilirsiniz:
Modül Yükleme:
PackageManagement modülü kullanılarak çeşitli paket kaynakları kaydedilebilir. Varsayılan olarak PSModule sağlayıcısını kullanan PSGallery ile isteğe bağlı PowerShell modülleri kolayca indirilip yüklenebilir.
Örneğin yukarıdaki şekilde görüldüğü gibi PSCX paketi kullanılarak ilgili modül yüklenmiştir.
Paketlerin Kaldırılması:
Yüklü olan bir paketi kaldırmak için de Uninstall-Package cmdlet kullanıyoruz. Örneğin; yüklü olan Notepad2 paketini kaldırmak için aşağıdaki komutu çalıştırıyoruz:
Kaldırma işlemi başarıyla tamamlandıktan sonra Get-Package cmdlet ile kontrol ettiğimizde artık Notepad2 cmdlet listelenmediğini göreceksiniz.
Paket Kaynağının Güvenilir Olarak Atanması:
Paketleri indirdiğimiz paket kaynakları varsayılan olarak güvenilir olarak yapılandırılmamıştır. Bundan dolayı da ilgili kaynaktan her paket indirdiğinizde “güvenlilir olarak atanmamış, yine de bu kaynaktan paket yüklemek istiyormusunuz?” diye soracaktır.
Bu uyarı ile karşılaşmamak için aşağıdaki şekilde görüldüğü gibi Set-PackageSource cmdlet ile paket kaynağı güvenilir bir kaynak olarak atanabilir.
Böylece Chocolatey isimli paket kaynağı güvenilen bir kaynak olarak belirlendi ve bundan böyle bu kaynaktan paket indirirken güvenilirlik ile ilgili uyarı mesajı almıyor olacağız.
Paket Kaynağının Kaldırılması:
Daha önce paket sağlayıcısı için atanmış olan bir paket kaynağını kaldırmak ya da silmek için de Unregister-PackageSource cmdlet’i aşağıdaki şekilde kullanıyoruz:
Bu komut sonrasında tekrar paket kaynakları listesini sorgulayınca herhangi bir paket kaynağının bulunamadığı uyarısı gelecektir.
Paket Kaynağının Kaydedilmesi:
Herhangi bir paket sağlayıcısına bir paket kaynağını kaydetmek için de Register-PackageSource cmdlet kullanıyoruz.
ÖZETLE
Microsoft Windows 10 ve Windows Server 2016 geliştirme süreci devam ediyor. Ve bu süreçte her iki işletim sistemi ile beraber çok sayıda yenilik bizleri bekliyor. Bu yeniliklerden bir tanesi de Windows Management Framework 5.0 ile birlikte öne çıkan “Paket Yönetimi”. Bu makalemizde detaylı olarak Windows PowerShell 5.0 ile paket yönetimini ele aldık. Yeni nesil işletim sistemlerinde gelen yenilikleri incelemeye devam edeceğimiz bir sonraki makalemizde görüşmek dileğiyle, hoşçakalın.
Mesut ALADAĞ.
Microsoft MVP, MCT
www.mesutaladag.com / www.twitter.com/mesutaladag
Merhaba,
Bilgisayarda bulunan tüm programların listesini alacak şekilde yanında şuan ki sürümleri ve yeni sürümlerini gösterdiği bir komut vardı aklıma gelmiyor da bilen birisi var mıdır?