Linux için “Git” benzeri güncelleme yönetimini nasıl başarabilirim?


14

Linux sistemimin güncellemelerini Git'in yaptığı gibi "revizyonlar" içinde ileri geri hareket ettirerek yönetmek istiyorum . Bunu nasıl yapabilirim?


Linux / Unix sistemlerinin nasıl çalıştığının daha derin yönlerini ele alan bir Linux / Unix sistem yöneticisi olarak, Git benzeri bir revizyon sistemi gerektirmek için sistemlerinde ne tür değişiklikler yapılması gerektiğini hayal edemiyorum. Bu sistemlerde değişiklik yapan ana şey yazılım yüklemeleri ve yapılandırma dosyalarıdır. Yapılandırma dosyalarını manuel olarak yedeklemek ve takip etmek kolaydır. Ve “ayarla ve unut” zihniyetine düşüyor.
JakeGould

Yanıtlar:


12

Muhtemelen Nix paket yöneticisini kullanan NixOS'a bakmalısınız .

NixOS, sistem konfigürasyon yönetiminde son teknolojiyi geliştirmeyi amaçlayan bir GNU / Linux dağıtımıdır. Mevcut dağıtımlarda, yükseltmeler gibi işlemler tehlikelidir: bir paketi yükseltmek diğer paketlerin bozulmasına neden olabilir, tüm sistemi yükseltmek sıfırdan yeniden yüklemekten çok daha az güvenilirdir, bir yapılandırma değişikliğinin sonuçlarının ne olacağını güvenle test edemezsiniz, sistemdeki değişiklikleri kolayca geri alamazsınız, vb.


12

Muhtemelen aradığınız şey, yapılandırma yönetimi araçları olarak adlandırılır . Aralarından seçim yapabileceğiniz birkaç tane var ama hangisinin herhangi bir durumda en iyisi olduğu çok öznel.

Şahsen Kukla'nın başlaması oldukça kolay buldum , ancak diğer popüler seçenekler Tuz ve Ansible .


Zaten vagrant'ta kukla kullandım, ancak işletim
sistemimde

4
Yapılandırma yönetimi araçları genellikle "geri alma" işlevi sağlamaz. "Geri alma" sistemi havaya uçuruyor ve sistemi yeniden yapılandırmak için yapılandırma yönetimi aracını kullanıyor. Örneğin, işletim sistemini biçimlendirmek ve yeniden yüklemek için Razor gibi çıplak bir metal sağlama aracı kullanabilirsiniz. Ardından, konfigürasyonu uygulamak için Chef gibi bir araca dağıtılır.
ctc

2
Cadı amaçlanıyor mu? :)
Ruslan

Cfengine öldü mü? Sisadmin iken küçük kümemde kullanmaktan memnun olduğum bir şey almaya çalıştığımı hatırlıyorum. Ama hiç konuşlandırmadım.
Peter Cordes

Bu araçlardan herhangi biriyle, ana yapılandırma dosyalarınızı git'te tutarak sürüm kontrolü elde edersiniz. Onlardan aldığınız şey, tüm sistemin yapılandırmasını merkezileştirmek ve birkaç metin dosyasından birine indirmektir.
Peter Cordes

10

Bu, sorunuz için aşırıya kaçmış olabilir, ancak sistem düzeyinde / büyük değişiklikleri geri almanın en kolay yolu anlık görüntüdür:

https://en.wikipedia.org/wiki/Snapshot_%28computer_storage%29

Donanımınızın ayrıntılarından bahsetmediniz, ancak git'i bildiğiniz gibi görmek, daha karmaşık bir dosya sistemi kullanmakla ilgilenebileceğinizi hayal etmek için çok fazla bir şey olmazdı. Yeni nesil bir dosya sistemi kullanacak olsaydınız (click-bait-y adını görmezden gel), terminalinize delinmiş bir komutla tüm sisteminizi tamamen "geri sarabilirsiniz". Yapılan tüm değişiklikler çok az gecikme / çabayla geri alınacaktır. ZFS sizin için en iyi seçenektir ve sizin için buna değer bir şey olup olmadığını görmek için bu şaşırtıcı Ars makalesine başvurabilirsiniz (birçok başka harika özellik de vardır):

http://arstechnica.com/information-technology/2014/02/ars-walkthrough-using-the-zfs-next-gen-filesystem-on-linux/


2
Başka bir seçenek de BTW'nin Ubuntu, SUSE> = 11, Oracle'dan resmi kurumsal desteğe sahip olduğu btrfs. Hala gelişmiş ve blahblahblah ediliyor olsa da, olduğu pekala günlük masaüstü kullanımı ve performansı bakımından çok güvenilir.
Ignis

1
@ignis: Son zamanlarda RAID 5'e rağmen tutarsız ve kurtarılamayan bir Btrfs ile karşılaştım ve işte iki örnek daha duydum. Bu nedenle, üretim için hazır olmadığı konusunda bu uyarıları hafifçe göz ardı etmem. Karşılaşmadan önce kendime inanmak istemedim. Belki de kötü RAM'den kaynaklanmış olabilir, bu da ZFS halkının ECC bellek kullanımını şiddetle tavsiye etmesinin nedenlerinden biridir . Aynı şey Btrfs için de geçerli olabilir.
MVG

6

"Güncellemeler" ile ne kastettiğinize bağlı olarak, sistem yapılandırmasındaki değişiklikleri otomatik olarak kaydetmenize ve daha önceki yapılandırmalara dönmenize izin veren etckeeper gibi yapılandırma yönetimi araçlarıyla ilgilenebilirsiniz .

Git tanıdık bir araçsa ve "güncellemeler" ile "sistem paketlerinde güncellemeler" veya "sunucuda depolanan tüm dosyalarda güncellemeler" yerine "sistem yapılandırmasında güncellemeler" anlamına geliyorsa, aradığınız şey bu olabilir için.

Kukla, Ansible, Etckeeper vb.Gibi araçları kullansanız da, tüm domuzlara (örneğin başka bir cevapta belirtildiği gibi anlık görüntü) gitmeden veri kaybı olmadan temiz bir şekilde "geri" döndürülmesinin her zaman mümkün olmadığını düşünmeye değer. Doğru yaklaşım sizin durumunuza bağlı olacaktır (örneğin, geri çekme sırasında müşteri siparişlerini kaybedebileceğiniz bir üretim sistemi için anlık görüntü çekimi uygun değildir).



1

Tüm sisteminizi (çekirdek sürümü dahil) git gibi yönetmek istiyorsanız, NixOS'u arıyorsunuz .

Daha az ilgili bir sürüm için, neredeyse tüm unixlerden NixOS'un paket yöneticisi nix'i kullanabilirsiniz. Nix basit bir kullanıcı olarak kurulabilir, ancak root olarak kurmak daha kolaydır. Nix kurulduktan sonra, paketleri ayrıcalıklı olmayan bir kullanıcı olarak yüklemek için kullanabilirsiniz ve mevcut paket yöneticinizle sorunsuz çalışır ve çakışma olmadan çalışır. Nix'i sisteminizden tamamen kaldırmak da çok kolaydır, bu yüzden denememek için hiçbir bahane yoktur. ;-)

Sorunuzu doğrudan ele almak için Nix, kurulu tüm sisteminizi, bir git taahhüdü gibi, kurulu tüm paketlerin çok özel sürümlerine bir dizi işaretçi için bir işaretçi olarak tanımlar.

Nix bir paketi yükselttiğinde, paketler için yeni bir işaretçi grubuna işaret eden yeni bir ortam yaratır (çoğunlukla mevcut olanlara, güncellenmemiş paketler için; yine, bu çoğunlukla yeni bir git işlemine çok benzer. önceki değiştirilmemiş dosyaları ve değiştirilmiş dosyaların birkaç yeni sürümünü gösterir).

Tabii ki, ortamın önceki bir sürümüne geçmek ve inanıyorum ki, çatal (yani sondan daha eski olana dayanan yeni bir ortam oluşturmak). Belirli bir kabuk için bir ortam yüklenebilir (aslında, bir kabuk için kullanılabilen ortam değişkenleri kümesidir, dolayısıyla adı), böylece aynı makinedeki farklı projeler için kolayca farklı ortamlara sahip olabilirsiniz. Bağımlılık olmayan bir projenin bir kütüphanenin başka bir sürümüne ihtiyacı olduğu için artık bağımlılık sorunu yok!

NixOS bunu bir sonraki seviyeye taşıyor ve çekirdek dahil tüm bilgisayarınızı benzer bir şekilde yöneterek tüm makinenin çok düşük riskli yükseltmelerine izin veriyor.

Hepsini okumayı bitirmedim, ama ölümcül Nix haplarını Nix'e giriş olarak öneriyorum .


0

Deneme türü sizseniz, tüm dosya sisteminizi yerel bir git deposunda kontrol etmeyi deneyebilirsiniz. Bu ... ilginç olurdu, sanırım.

  1. git init kök dizinde /
  2. İçeriği sık sık değişen veya kontrol edilmemesi gereken dizinleri yok sayan kök için bir .gitignore oluşturun:
    • / dev
    • /Çalıştırmak
    • / tmp
    • / proc
    • / Lost + found
    • ...
  3. Dışlamak isteyebileceğiniz .gitignore özel dosya türlerine ekleyin:
    • * .Tmp
    • * .log
    • ...
  4. İle ilk içeriklerinizi ekleyin git add -A .
  5. Anlık görüntüyü git commit -m "Initial Snapshot"
  6. Bilgisayarınızı kullanın
  7. Periyodik olarak anlık görüntü git commit -Am "Snapshot X"veya benzeri öğeler ekleyin

Bazı faydaları:

  • Düzeltme geçmişi için benzer araçlar gitkve benzerigit diff
  • Git içeren tüm Livecd veya diğer işletim sistemleri yedeklerinizi geri yükleyebilir
  • Tüm sisteminizi github'a kadar itebilir ve diğer makinelere geri yükleyebilir veya insanlarla paylaşabilirsiniz ...?
  • Dallanma hızlı ve sezgisel olacaktır
  • /, git dizini kökünüzdeki kaynak koduna benzer şekilde sisteminizi kötüye kullanma ve daha maceraperest olma konusunda ilham verir.
  • Sonraki her anlık görüntü, diğer bazı yedekleme çözümlerine kıyasla nispeten küçük olacaktır
  • / Etc içindeki yapılandırma değişikliklerini incelemek ve izlemek için harika olurdu
  • Buna öncülük edebilir ve ona linit - linux diyebilirsiniz.
  • rezillik

Bazı tuhaflıklar şunları içerebilir:

  • Önemli değişiklikleri içeren şubeleri veya revizyonları veya sistemi çalıştırırken kullanılan dosyalarda yapılan değişiklikleri geri yükleyemez / ödeyemezsiniz - belki de bu amaçla git ile minimal önyükleme USB'sine sahip olabilirsiniz.
  • Oldukça büyük başlangıç ​​taahhütleri
  • Sonraki .git dizinlerinde kontrol edildi -?
  • git umarım kökte bir kaynak kodu dizinindeyken beklendiği gibi çalışır git kapsayıcıya .
  • / etc / passwd ve / etc / shadow, kullanıcıları korumak ve izlemek ve onları diğer makinelere geri yüklemek için depoya dahil edilmelidir, ancak artık görüntüleme erişimi olan (belki github'da) herkes içerik, izinler, ve kullanıcılarınızın şifre karmaları.

3
Git izinleri düzgün işlemeyeceği için bu yaklaşım büyük olasılıkla korkunç bir şekilde başarısız olacaktır. Tüm bunları kök olarak yaptığınızı varsayarsak, tüm dosya sistemini kök olarak seçersiniz ve bu da yazma işlemlerini bozar. Örneğin, bir anlık görüntü alırsınız, geri yüklersiniz, apache günlük dizini sahibi kök olur (http yerine), apache dizine yazamaz, başlatılamaz. Bunu biliyorum, çünkü benzer bir şey denedim, ama çok daha küçük bir ölçekte ve hatta bununla ilgili sorunlar vardı.
Tuncay Göncüoğlu

Başka bir cevapta önerildiği gibi Nix'e bir göz atın;)
Michael Pankov

Bunu bildiğim iyi oldu! Betiklerim
klondaki

Öyle görünüyorsa, tam izinleri ve sahipliklerini koruyacak ek araçlar olduğu görülmektedir. Böyle bir araç git-cache-meta ve İşte bir liste
Ehryk
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.