Я хочу управлять обновлениями моей системы Linux так же, как это делает Git , имея возможность перемещаться вперед и назад в рамках «ревизий». Как я мог это сделать?
Я хочу управлять обновлениями моей системы Linux так же, как это делает Git , имея возможность перемещаться вперед и назад в рамках «ревизий». Как я мог это сделать?
Ответы:
Возможно, вам стоит взглянуть на NixOS , которая использует менеджер пакетов Nix .
NixOS - это дистрибутив GNU / Linux, целью которого является улучшение уровня управления конфигурацией системы. В существующих дистрибутивах такие действия, как обновление, опасны: обновление пакета может привести к поломке других пакетов, обновление всей системы гораздо менее надежно, чем переустановка с нуля, вы не можете безопасно проверить, какими будут результаты изменения конфигурации, Вы не можете легко отменить изменения в системе и так далее.
То, что вы, вероятно, ищете, называется инструментами управления конфигурацией . Есть несколько вариантов на выбор, но это очень субъективно, какой из них лучше в любой ситуации.
Я лично нашел, что с Puppet довольно легко начать, но другие популярные варианты - это Salt и Ansible .
Вероятно, это излишне для вашего вопроса, но самый простой способ вернуть системные изменения / массовые изменения - это сделать снимок:
https://en.wikipedia.org/wiki/Snapshot_%28computer_storage%29
Вы не упомянули специфику вашей установки, но, поскольку вы знакомы с git, было бы не слишком сложно представить, что вас может заинтересовать использование более сложной файловой системы. Если бы вы использовали файловую систему следующего поколения (игнорируйте название click-bait-y), вы бы смогли полностью «перемотать» всю вашу систему с помощью простой команды, введенной в ваш терминал. Любые сделанные изменения будут отменены с минимальными задержками / усилиями. ZFS будет вашим лучшим выбором, и вы можете обратиться к этой удивительной статье Ars, чтобы узнать, может ли она чего-то стоить для вас (есть также много, много других замечательных функций):
В зависимости от того, что вы подразумеваете под «обновлениями», вас могут заинтересовать такие инструменты управления конфигурацией, как etckeeper , которые позволяют автоматически записывать изменения в конфигурацию системы и возвращаться к более ранним конфигурациям.
Если Git - знакомый инструмент, и если под «обновлениями» вы подразумеваете «обновления конфигурации системы», а не «обновления системных пакетов» или «обновления всех файлов, хранящихся на сервере», то это может быть то, что вы ищете за.
Стоит учесть, что независимо от того, используете ли вы такие инструменты, как Puppet, Ansible, Etckeeper и т. Д., Не всегда возможно выполнить «откат» без потери данных, если только вы не проделаете всю работу (например, снимок, как упомянуто в другом ответе). Правильный подход будет зависеть от вашей ситуации (например, моментальный снимок не подходит для производственной системы, где вы можете потерять заказы клиентов при откате).
Я использовал OpenVMS в прошлом, он поставляется по умолчанию с файловой системой управления версиями .
Если такие инструменты, как puppet, не заходят достаточно далеко, возможно, вы ищете файловые системы управления версиями.
Если вы действительно хотите управлять всей своей системой (включая версию ядра), например, git, вы ищете NixOS .
Для менее вовлеченной версии вы можете использовать менеджер пакетов NixOS, nix, практически из любого unix. Nix может быть установлен как простой пользователь, хотя его проще установить как root. После установки nix вы можете использовать его для установки пакетов как непривилегированный пользователь, и он отлично работает вместе с вашим существующим менеджером пакетов, без конфликтов. Также очень легко полностью удалить nix из вашей системы, так что на самом деле нет никаких оснований не попробовать его. ;-)
Чтобы напрямую ответить на ваш вопрос, Nix определяет вашу полную установленную систему как среду, которая, как и git commit, является указателем на набор указателей на очень конкретные версии всех установленных пакетов.
Когда Nix обновляет пакет, он создает новую среду, которая указывает на новый набор указателей на пакеты (в основном на существующие, для пакетов, которые не были обновлены; опять же, это очень похоже на новый коммит git, который в основном указывает на предыдущие неизмененные файлы и несколько новых версий измененных файлов).
Конечно, тривиально переключиться на предыдущую версию среды и, я полагаю, разветвить (т.е. создать новую среду, основанную на более старой, чем последняя). Среда может быть загружена для конкретной оболочки (фактически это набор переменных среды, доступных для оболочки, отсюда и название), поэтому вы также можете довольно легко иметь разные среды для разных проектов на одном компьютере. Больше никаких проблем с зависимостями, потому что несвязанный проект нуждается в другой версии библиотеки!
NixOS выводит это на новый уровень и аналогичным образом управляет всем вашим компьютером, включая ядро, что позволяет производить обновление всей машины с очень низким риском.
Я не закончил читать их все, но я рекомендую таблетки от Nix Леталмана как введение в Nix.
Если вы экспериментальный тип, вы можете попробовать просто проверить всю файловую систему в локальном git-репозитории. Это было бы ... интересно, я думаю.
git init
в корневом каталоге /
git add -A .
git commit -m "Initial Snapshot"
git commit -Am "Snapshot X"
или аналогичныеНекоторые преимущества будут:
gitk
иgit diff
Некоторые странности могут включать в себя:
git
надеюсь, что вы работаете, как и ожидалось, когда вы находитесь в каталоге исходного кода, вложенном в корневой git
контейнер.