Jak mogę uzyskać zarządzanie aktualizacjami w stylu „Git” dla systemu Linux?

14

Chcę zarządzać aktualizacjami mojego systemu Linux w podobny sposób, jak robi to Git , dzięki możliwości poruszania się w przód iw tył w ramach „wersji”. Jak mogłem to zrobić?

Patrick Villela
źródło
Jako administrator systemów Linux / Unix, który zajmuje się głębszymi aspektami działania systemów Linux / Unix, nie mogę sobie wyobrazić, jakie zmiany należałoby wprowadzić w ich systemie, aby wymagały systemu weryfikacji podobnego do Git. Najważniejsze, co zmienia się w tych systemach, to instalacje oprogramowania i pliki konfiguracyjne. Pliki konfiguracyjne są łatwe do ręcznego tworzenia kopii zapasowych i śledzenia. I wpada w sposób myślenia „ustaw i zapomnij”.
JakeGould,

Odpowiedzi:

12

Prawdopodobnie powinieneś spojrzeć na NixOS , który używa menedżera pakietów Nix .

NixOS to dystrybucja GNU / Linux, której celem jest poprawa stanu wiedzy w zakresie zarządzania konfiguracją systemu. W istniejących dystrybucjach działania takie jak uaktualnienia są niebezpieczne: uaktualnienie pakietu może spowodować uszkodzenie innych pakietów, uaktualnienie całego systemu jest znacznie mniej niezawodne niż ponowna instalacja od zera, nie można bezpiecznie przetestować, jakie będą skutki zmiany konfiguracji, nie można łatwo cofnąć zmian w systemie i tak dalej.

użytkownik408342
źródło
12

To, czego prawdopodobnie szukasz, to narzędzia do zarządzania konfiguracją . Istnieje kilka do wyboru, ale jest bardzo subiektywne, który z nich jest najlepszy w każdej sytuacji.

Osobiście uznałem, że Puppet jest dość łatwy do rozpoczęcia, ale inne popularne opcje to Salt i Ansible .

Nifle
źródło
Używałem już marionetki w włóczęgi, ale nie pamiętam, aby kiedykolwiek mogłem cofnąć jakieś niechlujne rzeczy, które zrobiłem w moim systemie operacyjnym ...
Patrick Villela,
4
Narzędzia do zarządzania konfiguracją zasadniczo nie zapewniają funkcji „przywracania”. „Wycofywanie” powoduje zdmuchnięcie systemu i użycie narzędzia do zarządzania konfiguracją do ponownej konfiguracji systemu. Na przykład możesz użyć narzędzia do obsługi administracyjnej bez systemu operacyjnego, takiego jak Razor, do sformatowania i ponownej instalacji systemu operacyjnego. Następnie przekazuje narzędzie takie jak Szef kuchni, aby zastosować konfigurację.
ctc
2
Czy wiedźma jest przeznaczona? :)
Ruslan
Czy cfengine nie żyje? Pamiętam, jak próbowałem zdobyć coś, z czego z przyjemnością korzystałem w moim małym klastrze, gdy byłem administratorem systemu. Ale nigdy go nie wdrożyłem.
Peter Cordes
Za pomocą dowolnego z tych narzędzi można uzyskać kontrolę wersji, utrzymując główne pliki konfiguracyjne w git. Dostajesz od nich centralizację i redukcję konfiguracji całego systemu do jednego z kilku plików tekstowych.
Peter Cordes
10

Jest to prawdopodobnie przesada w przypadku twojego pytania, ale najłatwiejszym sposobem na przywrócenie zmian na poziomie systemu / masywnych jest migawka:

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

Nie wspomniałeś o szczegółach swojego sprzętu, ale widząc, że znasz git, nietrudno byłoby wyobrazić sobie, że możesz być zainteresowany bardziej złożonym systemem plików. Jeśli użyjesz systemu plików nowej generacji (zignoruj ​​nazwę kliknięcia-przynęty-y), będziesz w stanie całkowicie „przewinąć” cały system za pomocą zwykłego polecenia wciśniętego w terminal. Wszelkie wprowadzone zmiany zostaną cofnięte przy bardzo niewielkim opóźnieniu / wysiłku. ZFS byłby twoim najlepszym wyborem i możesz zapoznać się z tym niesamowitym artykułem Ars, aby sprawdzić, czy może być dla Ciebie coś wartego (istnieje również wiele innych wspaniałych funkcji):

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

ebrious
źródło
2
Inną opcją są btrfs, które BTW ma oficjalne wsparcie dla przedsiębiorstw z Ubuntu, SUSE> = 11, Oracle. Chociaż wciąż jest rozwijany i blablahblah, jest niezawodny w codziennym użytkowaniu komputera i działa cholernie dobrze.
ignis
1
@ignis: Niedawno spotkałem niespójnych i niemożliwych do odzyskania Btrfs pomimo RAID 5 pod spodem i słyszałem o dwóch innych przypadkach w pracy. Dlatego nie zlekceważę tych ostrzeżeń, że nie jest gotowy do użytku produkcyjnego. Nie chciałem w to uwierzyć, zanim go spotkałem. Być może przyczyną była zła pamięć RAM, co jest jednym z powodów, dla których ludzie ZFS zdecydowanie zalecają korzystanie z pamięci ECC. Myślę, że to samo może dotyczyć Btrfs.
MvG
6

W zależności od tego, co rozumiesz przez „aktualizacje”, możesz zainteresować się narzędziami do zarządzania konfiguracjami, takimi jak etckeeper , które umożliwiają automatyczne zapisywanie zmian w konfiguracji systemu i powrót do wcześniejszych konfiguracji.

Jeśli Git jest znanym narzędziem, a jeśli przez „aktualizacje” rozumiesz „aktualizacje konfiguracji systemu” w przeciwieństwie do „aktualizacji pakietów systemowych” lub „aktualizacji wszystkich plików przechowywanych na serwerze”, może to być to, czego szukasz dla.

Warto wziąć pod uwagę, że niezależnie od tego, czy używasz narzędzi takich jak Puppet, Ansible, Etckeeper itp., Nie zawsze jest możliwe „czyste wycofanie” bez utraty danych, chyba że przejdziesz całą akcję (np. Migawki, jak wspomniano w innej odpowiedzi). Właściwe podejście będzie zależeć od twojej sytuacji (np. Migawki nie byłyby odpowiednie dla systemu produkcyjnego, w którym możesz stracić zamówienia klientów podczas wycofywania).

Chris Burgess
źródło
2

W przeszłości korzystałem z OpenVMS , domyślnie jest on wyposażony w system plików z wersjami .

Jeśli narzędzia takie jak marionetka nie posuną się wystarczająco daleko, być może potrzebujesz systemu plików z wersjami.

Niels van Reijmersdal
źródło
1

Jeśli naprawdę chcesz zarządzać całym systemem (w tym wersją jądra) jak git, szukasz NixOS .

W przypadku wersji mniej zaangażowanej możesz użyć menedżera pakietów NixOS, nix, z prawie każdego Uniksa. Nix można zainstalować jako prosty użytkownik, chociaż łatwiej jest zainstalować go jako root. Po zainstalowaniu nixa można go używać do instalowania pakietów jako użytkownik nieuprzywilejowany, i działa on poprawnie wraz z istniejącym menedżerem pakietów, bez żadnych konfliktów. Bardzo łatwo jest całkowicie usunąć nix z systemu, więc naprawdę nie ma wymówki, aby go nie wypróbować. ;-)

Aby bezpośrednio odpowiedzieć na twoje pytanie, Nix definiuje twój kompletnie zainstalowany system jako środowisko, które jest, podobnie jak git commit, wskaźnikiem do zestawu wskaźników do bardzo specyficznych wersji wszystkich zainstalowanych pakietów.

Kiedy Nix aktualizuje pakiet, tworzy nowe środowisko, które wskazuje na nowy zestaw wskaźników do pakietów (głównie do istniejących, dla pakietów, które nie zostały zaktualizowane; ponownie, jest to bardzo podobne do nowego git commit, który głównie wskazuje poprzednie niezmienione pliki i kilka nowych wersji zmodyfikowanych plików).

Oczywiście przejście do poprzedniej wersji środowiska i, jak sądzę, rozwidlenie (tj. Stworzenie nowego środowiska opartego na starszym od ostatniego) jest banalne. Środowisko można załadować dla konkretnej powłoki (w rzeczywistości jest to zestaw zmiennych środowiskowych dostępnych dla powłoki, stąd nazwa), dzięki czemu można również całkiem łatwo mieć różne środowiska dla różnych projektów na tym samym komputerze. Nigdy więcej problemów z zależnością, ponieważ niepowiązany projekt potrzebuje innej wersji biblioteki!

NixOS przenosi to na wyższy poziom i zarządza całym komputerem, w tym jądrem, w podobny sposób, pozwalając na bardzo niskie ryzyko aktualizacji całej maszyny.

Nie skończyłem czytać ich wszystkich, ale polecam śmiertelne pigułki Nix jako wstęp do Nix.

Gary Verhaegen
źródło
0

Jeśli jesteś typem eksperymentalnym, możesz spróbować po prostu sprawdzić cały system plików w lokalnym repozytorium git. Myślę, że byłoby to ... interesujące.

  1. git init w katalogu głównym /
  2. Zbuduj .gitignore dla roota, który ignoruje katalogi, których zawartość zmienia się często lub nie powinna być rejestrowana:
    • / dev
    • /biegać
    • / tmp
    • / proc
    • / lost + found
    • ...
  3. Dodaj do określonych typów plików .gitignore, które możesz wykluczyć:
    • * .tmp
    • *.log
    • ...
  4. Dodaj swoją początkową zawartość za pomocą git add -A .
  5. Zatwierdź migawkę za pomocą git commit -m "Initial Snapshot"
  6. Użyj swojego komputera
  7. Okresowo dodawaj migawki git commit -Am "Snapshot X"lub podobne

Niektóre korzyści to:

  • Znane narzędzia do historii zmian, takie jak gitkigit diff
  • Każdy program livecd lub inny system operacyjny z git może przywrócić kopie zapasowe
  • Możesz wypchnąć cały system do github i przywrócić go na inne maszyny lub udostępnić go ludziom ...?
  • Rozgałęzienie byłoby szybkie i intuicyjne
  • /, katalog git w katalogu głównym zainspiruje Cię do nadużywania systemu i będzie bardziej ryzykowny, podobny do kodu źródłowego
  • Każda kolejna migawka byłaby względnie mała w porównaniu z innymi rozwiązaniami do tworzenia kopii zapasowych
  • Byłoby niesamowite przeglądanie i śledzenie zmian konfiguracji w / etc
  • Możesz być pionierem tego i nazwać to linit - linux w git.
  • Hańba

Niektóre osobliwości mogą obejmować:

  • Jest mało prawdopodobne, aby można było przywrócić / wyrejestrować gałęzie lub wersje z istotnymi zmianami lub zmianami plików używanych podczas działania systemu - być może mieć w tym celu minimalny rozruchowy USB z git
  • Raczej duże początkowe zatwierdzenia
  • Sprawdzane w kolejnych katalogach .git -?
  • gitmam nadzieję, że działamy zgodnie z oczekiwaniami, gdy jesteś w katalogu kodu źródłowego zagnieżdżonym w gitkontenerze głównym .
  • Pliki / etc / passwd i / etc / shadow musiałyby zostać uwzględnione w repozytorium, aby utrzymywać i śledzić użytkowników oraz przywracać ich na inne komputery, ale teraz każdy, kto ma dostęp do widoku (być może na github), może zobaczyć poufne informacje, takie jak zawartość, uprawnienia, i hashe użytkowników.
Ehryk
źródło
3
Takie podejście najprawdopodobniej okropnie zawiodłoby, ponieważ git nie będzie poprawnie obsługiwał uprawnień. Zakładając, że robisz to wszystko jako root, zasadniczo wybierałeś cały system plików do rootowania, a to z kolei zakłóciłoby operacje zapisu. Na przykład, robisz migawkę, przywracasz ją, właściciel katalogu dziennika apache staje się rootem (zamiast http), apache nie może zapisać do katalogu, nie uruchamia się. Wiem o tym, ponieważ próbowałem podobnej rzeczy, ale na znacznie mniejszą skalę, a nawet na tym były problemy.
Tuncay Göncüoğlu
Spójrz na Nix, jak zasugerowano w innej odpowiedzi;)
Michael Pankov
Dobrze wiedzieć! Myślałem, że obsługuje uprawnienia, przynajmniej oktet, ponieważ moje skrypty zachowują flagę x na klonie, ale nie myślałem o własności pliku i grupy
Ehryk
Wygląda na to, że istnieją dodatkowe narzędzia, które zachowają pełne uprawnienia i prawa własności, jeśli tego wymagają. Jednym z takich narzędzi jest git-cache-meta , a oto lista
Ehryk