C# Geliştiricileri için Linux Paketlerini Güncelleme
[[academy-video-youtube({"vid": "WgU8TJs4UsQ", "start_time": "0", "title": "C# Geliştiricileri için Linux Paketlerini Güncelleme", "creator": "Tim Corey", "length": "8m 25s"})]]
C# uygulamalarını Linux üzerinde geliştirirken, sistem paketleriniz işletim sistemi ile ilgili olanlardan daha fazlasını etkiler. Web uygulamalarınızı test etmek için kullanılan tarayıcı motorlar, .NET SDK, paylaşılan kütüphaneler ve güvenlik yamaları tüm olarak paket yöneticisi aracılığıyla gelir. Güncel olmayan paketlerin çalıştırılması derleme sorunlarına, savunmasızlıklara veya en son .NET özellikleriyle uyumsuzluklara neden olabilir.
Tim Corey 'C# Geliştiricileri için Linux Paketlerini Güncelleme' başlıklı videosunda, daha geniş C# on Linux serisinin bir parçası olarak, Linux kurulumunu hem grafiksel Güncelleme Yöneticisi hem de komut satırı kullanarak güncel tutmayı anlatıyor. Bu makalede, her iki yöntemi de ele alacağız ve her komutun aslında ne yaptığını açacağız ve sisteminizi güncel tutmanın özellikle .NET geliştirme için neden önemli olduğunu açıklayacağız.
Linux Paket Yönetimi ve Windows Arasındaki Farklar
[0:00 - 0:38] Tim, Windows'dan gelen geliştiriciler için yaygın bir engel konusunu ele alarak başlar. Windows'ta, her uygulama genelde kendi güncellemelerini yönetir. Visual Studio, Edge'den bağımsız olarak güncellemeleri kontrol eder, ki bu da yazıcı sürücülerinizden ayrı bir şekilde güncellenir. Makinenizde yüklü olan her şeyi izleyen tek bir sistem yok.
Linux merkezi bir yaklaşım benimser. Apt (Gelişmiş Paket Aracı) gibi bir paket yöneticisi, resmi depolardan yüklenen her yazılım parçasını takip eder. Bir güncelleme çalıştırdığınızda, apt, aynı anda yüklenmiş olan her bir paket için depoları sorgular. Tarayıcı güncellemeleri, kütüphane yamaları, SDK yükseltmeleri ve güvenlik düzeltmeleri aynı hat üzerinden gelir.
C# geliştiricileri için, bunun gerçek sonuçları var. Örnek vermek gerekirse, .NET çalışma zamanınız, HTTPS çağrılarınızın bağlı olduğu OpenSSL kütüphaneleri ve uygulama bağlayıcı sistem seviyesi bağımlılıklar bu sistem tarafından yönetilir. Bir Windows olmayan platformda C# ile ilk kez başlıyorsanız, paket yöneticisinin nasıl çalıştığını bilmek, daha sonra gizemli yapı hatalarını takip etmekten sizi kurtarır. Bir tane apt upgrade tüm yığını hizalı tutar, bu da Windows'ta birçok ayrı güncelleyici arasında koordine etmeniz gereken bir şeydir.
GUI: Güncelleme Yöneticisi
[0:38 - 1:34] Görsel bir iş akışı tercih eden geliştiriciler için, Tim öncelikle Güncelleme Yöneticisi üzerinden geçer. Linux Mint, Windows Update'e benzer şekilde çalışan bir yöneticiyi içerir. Görev çubuğunun sağ alt köşesindeki küçük bir simge, Microsoft Edge, Firefox, curl, libssh ve daha fazlasının güncelleneceğini gösteren bir pencere açar. Her giriş mevcut sürümü, yeni sürümü ve indirme boyutunu gösterir.
Her paket varsayılan olarak seçilmiştir, ancak belirli bir güncellemeyi atlamak istiyorsanız öğeleri işaretini kaldırabilirsiniz. Bu, bir aracın belirli bir sürümünün projeniz için gerekli olduğunda ve ara işlerde değişmesini istemediğinizde kullanışlıdır.
Güncellemeleri Yükle'yi tıklarsınız, parola gelince girersiniz ve işlemin tamamlanmasını beklersiniz. Parola istemi, sistem paketlerini değiştirmenin idari bir eylem olduğu için vardır, ki bunu bir sonraki bölümde ele alacağız.
GUI'nin iyi bir şekilde şunu yapıyor: güncellemeleri risk seviyesine göre sınıflandırıyor ve sistem kararlılığını etkileyebilecek değişiklikler konusunda daha muhafazakar davranıyor. Linux'a yeni olan ve ayrıntılara çok fazla önem vermeden ortamını sağlıklı tutmak isteyen bir geliştirici için, Güncelleme Yöneticisi sağlam bir varsayılandır.
sudo'yu Anlama
[1:34 - 1:51] Terminale geçmeden önce, Tim, her komut satırı paket işlemlerinde görünen sudo kodunu açıklamak için bir an durur. Yazmaya başlamadan önce ne yaptığını anlamak faydalıdır. Çoğu Windows kullanıcı hesabı varsayılan olarak yönetici hesaplarıdır, bu size sistem yazılımlarını yükleme, kaldırma ve değiştirme konusunda tam erişim sağlar. Linux ise tam tersi bir yaklaşım izler: hesabınız sınırlı izinlerle çalışır ve yalnızca gerektiğinde yönetici ayrıcalıklarına yükseltirsiniz.
Bir komutu sudo ile öneklemek, kimliğinizi doğrulamak için bir parola istemini tetikler. Kimliğiniz doğrulandığında, komut kök ayrıcalıklarla çalıştırılır, ardından izinler normale döner. Paket yönetimi (yazılımı kurma, kaldırma veya güncelleme), makinedeki her uygulamayı etkileyebilecek sistem düzeyinde bir işlemdir, bu nedenle açık sudo öneki, başka bir şey yapmak istediğinizde sistem paketlerini yanlışlıkla değiştirmemenizi sağlar.
Windows kullandıysanız, bunu Administrator olarak Visual Studio'yu çalıştırmaya benzer olarak düşünün, ancak Linux'ta, tüm uygulamalar yerine bireysel komutları yükseltirsiniz. Bu daha hedefe yönelik bir modeldir.
Komut Satırı: apt update
[1:51 - 2:28] sudo ele alındıktan sonra, Tim terminale geçer. Orada çalışmak size güncelleme sürecinde daha ayrıntılı kontrol sağlar ve üç komutu sırayla yürütür. Her birinin ne yaptığını anlamak önemlidir çünkü isimlendirme yanıltıcıdır.
İlk komut:
sudo apt updatesudo apt updateYaygın bir varsayım bu komutun paketleri güncellediğidir. Öyle değildir. apt update paket dizinini, mevcut yazılımların yerel kataloğunu yeniler. Zamanla bu katalog, yeni sürümleri yayınlayan bakıcılarla bayat hale gelir, bu yüzden bu komut çalıştırıldığında, depo sunucularından en son sürümü indirir. Makinenizde herhangi bir yazılım değişikliği olmaz. Bu tamamen bilgi toplama adımıdır.
Çalıştırdıktan sonra, apt, daha yeni sürümleri mevcut olan paketlerin sayısını raporlar. Herhangi bir değişiklik yapmadan önce tam listeyi inceleyebilirsiniz:
apt list --upgradeableapt list --upgradeableBu size daha yeni sürümle mevcut olan her paketin satır satır görünümünü, mevcut sürüm ve yeni sürüm numaralarını içerir. Bu makinede .NET ile çalışıyorsanız, burası SDK güncellemelerini, çalışma zamanı yamalarını veya uygulamanızın bağlı olduğu kütüphanelerdeki değişiklikleri görebileceğiniz yerdir. Hangi .NET sürümlerinin makinenizde çalıştığını anlamak, belirli bir yükseltmenin güvenli olup olmadığını veya önce test edilmesi gerekip gerekmediğini karar vermenize yardımcı olur.
Komut Satırı: apt upgrade
[3:01 - 3:40] Dizin yenilendikten sonra, Tim ikinci komuta geçer — asıl olarak daha yeni sürümleri yükleyen komuta:
sudo apt upgradesudo apt upgradeİsimlendirmenin farkına varın: update en yeni bilgileri alır, upgrade ise paketleri değiştiren şeydir. Bu iki adımlı ayrım kasıtlıdır. "Nelerin mevcut olduğunu kontrol et" adımını "değişiklikleri uygula" adımından ayırır, böylece bir şey hareket etmeden önce inceleme yapma, araştırma yapma veya yedek alma zamanı sağlar.
Görünmeyen kısımda, upgrade neler yapacağı ve yapmayacağı konusunda katı kurallara uyar. Sistemde ki paketlerin daha yeni sürümlerini indirir ve yükler, ancak mevcut bir paketi kaldırmaz veya önceden var olmayan yeni bir paketi yüklemez. Daha yeni bir sürüm, kurulmamış bir bağımlılığa ihtiyaç duyduğunda, upgrade o paketi geri tutar, yeni bağımlılığı otomatik olarak almaktansa.
Avantajı öngörülebilirdir. .NET yığınızı güncel tutmak önemlidir, ancak bunu kontrol altında yapmak da önemlidir. Sistem, nelerin değişeceğine dair bir özetle sizi bilgilendirir ve devam etmeden önce onayınızı ister, yani sizin açık izniniz olmadan hiçbir şey olmaz.
Komut Satırı: apt full-upgrade
[3:40 - 4:19] Güvenli güncellemeler uygulandıktan sonra, Tim, upgrade tarafından kasten geriye bırakılan her şeyi ele almak için üçüncü komutu tanıtır:
sudo apt full-upgradesudo apt full-upgradefull-upgrade, upgrade'nun bilerek kaçındığı durumları ele alır. Bir paket güncellemesi yeni bağımlılıkların kurulmasını veya çakışan paketlerin kaldırılmasını gerekiyorsa, full-upgrade bunu yapacaktır. Kernel yükseltmeleri, önemli sistem kütüphanesi değişiklikleri ve işletim sistemi düzeyinde yamalar burada uygulanır.
Bunu ayrı bir adım olarak çalıştırmak katmanlı bir yaklaşım sağlar. Karmaşık bağımlılık çözümü sırasında bir şeyler ters giderse, zaten basit güncellemeleri uygulamışsınızdır ve sadece daha karmaşık olanları çözmeniz gerekir.
C# uygulamalarını Linux'ta derleyen bir yapı hattını yöneten ekipler için bu aşamalı iş akışı özellikle önemlidir. Otomatik CI/CD ortamında, yalnızca apt upgrade'yu çalıştırmayı kararlaştırabilirsiniz, full-upgrade'yı ise daha derin sistem değişikliklerinden sonra her şeyin derlenip geçip geçmediğini doğrulayabileceğiniz planlı bakım pencerelerine ayırarak.
Neden Paket Sayıları Farklı
[2:28 - 3:01] İnsanların sık sık kafasını karıştıran bir şey: Güncelleme Yöneticisi 23 güncelleme gösterirken, komut satırı 79 paket rapor edebilir. Bunlar farklı güncelleme setleri değildir; aynı sistem farklı şekilde sayılmıştır.
GUI, ilgili paketleri mantıksal birimler halinde gruplar. Güncelleme Yöneticisi'nde tek bir "Firefox güncellemesi" aslında Firefox ikili dosyası, yerelleştirme paketi, bağımlı olduğu ortak kütüphaneler ve bir yapılandırma paketi içerebilir, her biri apt tarafından ayrı bir paket olarak izlenir. Bu yüzden Güncelleme Yöneticisi'nin tek bir güncelleme olarak sunduğunu, apt dört veya beş bireysel paket yükseltmesi olarak listeleyebilir.
Bu bilgiyi bildiğinizde, tutarsızlığın şaşırtıcı olmaktan çıktığını görürsünüz. Birisi "güncellemem gereken 100 paket vardı" diyebilir ve Güncellemeler Yöneticiniz aynı değişiklik setini 30 güncelleme olarak gösterir.
Flatpak: Ayrı Bir Paket Yöneticisi
[5:56 - 6:41] Kolayca gözden kaçabilecek bir durum: Linux birden fazla paket yöneticisine sahip olabilir ve apt sadece kendi yönetimindeki paketleri bilmektedir. Flatpak, alternatiflerden biridir; kendi bağımlılıkları ile paketlenmiş uygulamaları, sistemin geri kalanından izole ederek çalıştıran bir sanal alan tabanlı sistemdir.
Flatpak üzerinden yazılım yüklediyseniz, apt upgrade çalıştırmak bu uygulamalara dokunmaz. Bunları ayrı olarak güncellemeniz gerekir:
flatpak list
flatpak updateflatpak list
flatpak updateflatpak list komutu, Flatpak aracılığıyla yüklenen her şeyi gösterir ve flatpak update bu paketleri en son sürümlerine getirir. Özellikle IDE'ler, veritabanı araçları veya iletişim uygulamaları yüklediyseniz, düzenli aralıklarla kontrol etmeyi alışkanlık haline getirin.
Linux'ta yazılımlar, apt, Flatpak, Snap veya hatta manuel yüklemeler aracılığıyla gelebilir. Her birinin kendi güncelleme mekanizması vardır, bu yüzden kapsamlı bir güncelleme rutini hepsini hesaba katmalıdır. Her uygulamanın kendi güncelleyicisiyle geleneksel olarak alışkınsanız, burada temel farklılık, hangi paket yöneticisinin hangi yazılım parçasına sahip olduğunu bilmek ve her biri için doğru güncelleme komutunu çalıştırmanız gerektiğidir.
Hangi Yöntemi Kullanmalısınız?
[4:19 - 5:32] Tim'in görüşü, her iki yaklaşımın da geçerli olduğu ve doğru seçimin iş akışınıza bağlı olduğudur. Görsel bir arayüzle daha rahat ediyorsanız, Güncelleme Yöneticisi, apt'in yaptığı aynı güncellemeleri basit bir tıklama ile yönetir. Komutları ezberlemeniz veya adımları yanlış sırada çalıştırma konusunda endişelenmeniz gerekmez. Bunu söyledikten sonra, komut satırı ile rahat olmak için iyi bir neden var: otomasyon. Tüm güncelleme dizilimini çalıştıran basit bir kabuk betiği oluşturabilir ve haftalık olarak cron kullanarak çalıştırılmasını planlayabilirsiniz. Sisteminizi güncel tutan üç satırlık bir betik, zamanla biriken türden küçük bir yatırımdır.
Otomasyonun ötesinde, komut satırı, duruma bağlı olarak belirli yükseltme seviyelerini seçerek uygulamanıza veya diğer araçlara borulama çıkışı aracılığıyla seçenekler sunar. Bu seçenekler GUI üzerinden mevcut değildir.
Yüklü Paketlerinizi Denetleme
[7:16 - 7:54] Güncelleme sürecinin bir yan etkisi de yararlıdır: güncelleme listenizi gözden geçirmek, sisteminizde yüklü olanların bir denetimini yapmak anlamına da gelir. Güncelleme kuyruğunda bir paket gördüğünüzde, onu hala ihtiyacınız olup olmadığını sormaya değer.
Ağırlıklı olarak Edge kullanıyorsanız ve güncelleme listesinde Firefox'u görebilir veya tam tersi. Web uygulamalarının çapraz tarayıcı testini yapmak için iki tarayıcıyı yüklü tutmanın anlamı olabilir, ancak daha geniş ilke, güncelleme listesinin geliştirme ortamınızın tam adım izini ortaya çıkardığıdır. Önceki bir projeden kalmış eski araçlar, bağımlılık olarak çekilmiş ve hiç temizlenmemiş geliştirme kütüphaneleri, altı ay önce yüklediğinizi unuttuğunuz paketler: hepsi burada görünür.
Böyle bir ev düzenlemesi beklediğinizden daha fazla fayda sağlar. Temiz bir geliştirme ortamı, ekip üyeleri arasında çoğaltılması daha kolaydır, kapsüllenmesi daha basittir ve "bu makinede çalışır" hataları üretme olasılığı daha düşüktür. Linux kutunuzda Dockerfile'ınza dahil olmayan paketler yüklüyse, üretimde mevcut olmayacak bir şeye güveniyor olabilirsiniz. C# uygulamalarınızı Docker'a dağıtmak ile aşina olmak, yerel paketleriniz ile üretim ortamınız arasındaki bu bağlantıyı çok daha somut hale getirir.
Sonuç
[7:54 - 8:25] Tim'in gösterdiği gibi, tüm süreç — ister Güncelleme Yöneticisi ister komut satırı ile yapın — en fazla birkaç dakika sürer ve OS düzeyinde teknik borç biriktirmenizi önler. Bunu haftalık bir alışkanlık haline getirmek, ara sıra yapılan bir işten çok daha güvenli ve geliştirme araçlarınız, çalışma zamanı bağımlılıklarınız ve sistem kütüphaneleriniz hizalı kalır, bu hizalama da çapraz platform C# geliştirmenin güvenilir olmasını sağlar, sinir bozucu olmasını değil.
Adım adım tam kılavuz için, Tim Corey'in videosunu YouTube kanalında inceleyin.

