Я хочу управлять обновлениями моей системы Linux аналогично тому, как это делает Git , благодаря возможности перемещаться вперед и назад в рамках "ревизий". Как я мог это сделать?
7 ответов
То, что вы, вероятно, ищете, называется инструментами управления конфигурацией. Есть несколько вариантов на выбор, но очень субъективно, какой из них лучше в любой ситуации.
Я лично нашел, что с Puppet довольно легко начать, но другие популярные варианты - это Salt и Ansible.
Возможно, вам стоит взглянуть на NixOS, которая использует менеджер пакетов Nix.
NixOS - это дистрибутив GNU/Linux, целью которого является улучшение уровня управления конфигурацией системы. В существующих дистрибутивах такие действия, как обновление, опасны: обновление пакета может привести к поломке других пакетов, обновление всей системы гораздо менее надежно, чем переустановка с нуля, вы не можете безопасно проверить, какими будут результаты изменения конфигурации, Вы не можете легко отменить изменения в системе и так далее.
Вероятно, это излишне для вашего вопроса, но самый простой способ вернуть системные изменения / массовые изменения - это сделать снимок:
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
в корневом каталоге/
- Создайте .gitignore для корня, который игнорирует каталоги, содержимое которых часто изменяется или не должно быть зарегистрировано:
- / DEV
- /бежать
- / TMP
- / Proc
- / Пропало + найдено
- ...
- Добавьте к .gitignore определенные типы файлов, которые вы можете исключить:
- * .tmp
- *.журнал
- ...
- Добавьте исходное содержимое с помощью
git add -A .
- Зафиксируйте снимок с помощью
git commit -m "Initial Snapshot"
- Используйте свой компьютер
- Периодически добавляйте снимки
git commit -Am "Snapshot X"
или аналогичные
Некоторые преимущества будут:
- Знакомые инструменты для истории изменений, такие как
gitk
иgit diff
- Любая livecd или другая операционная система с git может восстановить ваши резервные копии
- Вы можете перенести всю свою систему на github и восстановить ее на других машинах или поделиться ею с людьми ...?
- Ветвление будет быстрым и интуитивно понятным
- /, каталог git в вашем корне вселил бы уверенность в злоупотреблении вашей системой и был бы более предприимчивым, как исходный код
- Каждый последующий снимок будет относительно небольшим по сравнению с некоторыми другими решениями для резервного копирования.
- Было бы здорово просматривать и отслеживать изменения конфигурации в /etc
- Вы могли бы пионером этого и назвать это linit - linux в git.
- гнусность
Некоторые странности могут включать в себя:
- Вряд ли вы могли бы восстанавливать / извлекать ветки или ревизии со значительными изменениями или изменениями в файлах, которые используются во время работы системы - возможно, для этой цели у вас был бы минимальный загрузочный USB с git
- Довольно большие начальные коммиты
- Проверено в последующих каталогах .git -?
git
работает должным образом, когда вы находитесь в каталоге с исходным кодом, вложенном в корневой контейнерgit
.- / etc / passwd и / etc / shadow должны быть включены в репозиторий для обслуживания и отслеживания пользователей и восстановления их на других компьютерах, но теперь любой, у кого есть доступ к представлению (возможно, на github), может видеть конфиденциальную информацию, такую как содержимое, разрешения, и хеши паролей ваших пользователей.