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ć?
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ć?
Odpowiedzi:
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.
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 .
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):
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).
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.
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.
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.
git init
w katalogu głównym /
git add -A .
git commit -m "Initial Snapshot"
git commit -Am "Snapshot X"
lub podobneNiektóre korzyści to:
gitk
igit diff
Niektóre osobliwości mogą obejmować:
git
mam nadzieję, że działamy zgodnie z oczekiwaniami, gdy jesteś w katalogu kodu źródłowego zagnieżdżonym w git
kontenerze głównym .