Как мне получить управление обновлениями в стиле «Git» для Linux?

14

Я хочу управлять обновлениями моей системы Linux так же, как это делает Git , имея возможность перемещаться вперед и назад в рамках «ревизий». Как я мог это сделать?

Патрик Виллела
источник
Как системный администратор Linux / Unix, который имеет дело с более глубокими аспектами работы систем Linux / Unix, я не могу представить, какие изменения нужно было бы внести в их систему, чтобы потребовать Git-подобную систему ревизий. Главное, что получает изменения в этих системах - это установка программного обеспечения и файлов конфигурации. Конфиг-файлы легко резервировать вручную и отслеживать. И это попадает в мышление «установи и забудь».
JakeGould

Ответы:

12

Возможно, вам стоит взглянуть на NixOS , которая использует менеджер пакетов Nix .

NixOS - это дистрибутив GNU / Linux, целью которого является улучшение уровня управления конфигурацией системы. В существующих дистрибутивах такие действия, как обновление, опасны: обновление пакета может привести к поломке других пакетов, обновление всей системы гораздо менее надежно, чем переустановка с нуля, вы не можете безопасно проверить, какими будут результаты изменения конфигурации, Вы не можете легко отменить изменения в системе и так далее.

user408342
источник
12

То, что вы, вероятно, ищете, называется инструментами управления конфигурацией . Есть несколько вариантов на выбор, но это очень субъективно, какой из них лучше в любой ситуации.

Я лично нашел, что с Puppet довольно легко начать, но другие популярные варианты - это Salt и Ansible .

Nifle
источник
Я уже использовал Puppet в Vagrant, но я не помню, чтобы когда-либо был в состоянии отменить некоторые грязные вещи, которые я сделал в моей ОС ...
Патрик Виллела
4
Инструменты управления конфигурацией, как правило, не предоставляют функции «отката». «Откат» уничтожает систему и использует инструмент управления конфигурацией для перенастройки системы. Например, для форматирования и переустановки ОС вы можете использовать инструмент для подготовки с нуля, такой как Razor. Затем он передает такой инструмент, как Chef, чтобы применить конфигурацию.
ctc
2
Ведьма предназначена? :)
Руслан
Cfengine мертв? Я помню, как пытался получить что-то, чем я был доволен, для использования в моем маленьком кластере, когда я был системным администратором. Но я никогда не заканчивал тем, что развернул это.
Питер Кордес
С помощью любого из этих инструментов вы получаете контроль версий, сохраняя свои основные конфигурационные файлы в git. От них вы получаете централизацию и сведение конфигурации всей системы к одному из нескольких текстовых файлов.
Питер Кордес
10

Вероятно, это излишне для вашего вопроса, но самый простой способ вернуть системные изменения / массовые изменения - это сделать снимок:

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

Вы не упомянули специфику вашей установки, но, поскольку вы знакомы с git, было бы не слишком сложно представить, что вас может заинтересовать использование более сложной файловой системы. Если бы вы использовали файловую систему следующего поколения (игнорируйте название click-bait-y), вы бы смогли полностью «перемотать» всю вашу систему с помощью простой команды, введенной в ваш терминал. Любые сделанные изменения будут отменены с минимальными задержками / усилиями. ZFS будет вашим лучшим выбором, и вы можете обратиться к этой удивительной статье Ars, чтобы узнать, может ли она чего-то стоить для вас (есть также много, много других замечательных функций):

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

опьяневший
источник
2
Другим вариантом является btrfs, который BTW имеет официальную поддержку предприятия от Ubuntu, SUSE> = 11, Oracle. Несмотря на то, что все еще разрабатываются и blahblahblah, она является надежной для использования настольного повседневного и выполняет чертовски хорошо.
ignis
1
@ignis: я недавно столкнулся с несовместимыми и невосстановимыми Btrfs, несмотря на RAID 5 под ним, и услышал о двух других экземплярах в работе. Поэтому я бы не стал игнорировать эти предупреждения о том, что он не готов к использованию. Я не хотел верить этому сам, пока не столкнулся с этим. Возможно, это произошло из-за плохой оперативной памяти, что является одной из причин, по которой сотрудники ZFS настоятельно рекомендуют использовать память ECC. Я думаю, то же самое может относиться к Btrfs.
MvG
6

В зависимости от того, что вы подразумеваете под «обновлениями», вас могут заинтересовать такие инструменты управления конфигурацией, как etckeeper , которые позволяют автоматически записывать изменения в конфигурацию системы и возвращаться к более ранним конфигурациям.

Если Git - знакомый инструмент, и если под «обновлениями» вы подразумеваете «обновления конфигурации системы», а не «обновления системных пакетов» или «обновления всех файлов, хранящихся на сервере», то это может быть то, что вы ищете за.

Стоит учесть, что независимо от того, используете ли вы такие инструменты, как Puppet, Ansible, Etckeeper и т. Д., Не всегда возможно выполнить «откат» без потери данных, если только вы не проделаете всю работу (например, снимок, как упомянуто в другом ответе). Правильный подход будет зависеть от вашей ситуации (например, моментальный снимок не подходит для производственной системы, где вы можете потерять заказы клиентов при откате).

Крис Берджесс
источник
1

Если вы действительно хотите управлять всей своей системой (включая версию ядра), например, git, вы ищете NixOS .

Для менее вовлеченной версии вы можете использовать менеджер пакетов NixOS, nix, практически из любого unix. Nix может быть установлен как простой пользователь, хотя его проще установить как root. После установки nix вы можете использовать его для установки пакетов как непривилегированный пользователь, и он отлично работает вместе с вашим существующим менеджером пакетов, без конфликтов. Также очень легко полностью удалить nix из вашей системы, так что на самом деле нет никаких оснований не попробовать его. ;-)

Чтобы напрямую ответить на ваш вопрос, Nix определяет вашу полную установленную систему как среду, которая, как и git commit, является указателем на набор указателей на очень конкретные версии всех установленных пакетов.

Когда Nix обновляет пакет, он создает новую среду, которая указывает на новый набор указателей на пакеты (в основном на существующие, для пакетов, которые не были обновлены; опять же, это очень похоже на новый коммит git, который в основном указывает на предыдущие неизмененные файлы и несколько новых версий измененных файлов).

Конечно, тривиально переключиться на предыдущую версию среды и, я полагаю, разветвить (т.е. создать новую среду, основанную на более старой, чем последняя). Среда может быть загружена для конкретной оболочки (фактически это набор переменных среды, доступных для оболочки, отсюда и название), поэтому вы также можете довольно легко иметь разные среды для разных проектов на одном компьютере. Больше никаких проблем с зависимостями, потому что несвязанный проект нуждается в другой версии библиотеки!

NixOS выводит это на новый уровень и аналогичным образом управляет всем вашим компьютером, включая ядро, что позволяет производить обновление всей машины с очень низким риском.

Я не закончил читать их все, но я рекомендую таблетки от Nix Леталмана как введение в Nix.

Гари Верхеген
источник
0

Если вы экспериментальный тип, вы можете попробовать просто проверить всю файловую систему в локальном git-репозитории. Это было бы ... интересно, я думаю.

  1. git init в корневом каталоге /
  2. Создайте .gitignore для корня, который игнорирует каталоги, содержимое которых часто изменяется или не должно быть зарегистрировано:
    • / DEV
    • /бегать
    • / TMP
    • / Proc
    • / Потерял + FOUND
    • ...
  3. Добавьте к .gitignore определенные типы файлов, которые вы можете исключить:
    • * .tmp
    • *.журнал
    • ...
  4. Добавьте ваше начальное содержание с git add -A .
  5. Зафиксируйте снимок с git commit -m "Initial Snapshot"
  6. Используйте свой компьютер
  7. Периодически добавлять снимки 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), может видеть конфиденциальную информацию, такую ​​как содержимое, разрешения, и хеши паролей ваших пользователей.
Ehryk
источник
3
Этот подход, скорее всего, потерпит неудачу, так как git не будет правильно обрабатывать разрешения. Предполагая, что вы делаете все это от имени пользователя root, вы фактически преобразуете всю файловую систему в root, а это, в свою очередь, нарушает операции записи. Например, вы делаете снимок, восстанавливаете его, владелец каталога журнала apache становится root (вместо http), apache не может записать в каталог, не запускается. Я знаю это, потому что я пробовал подобное, но в гораздо меньших масштабах, и даже в этом, были проблемы.
Tuncay Göncüoğlu
Взгляните на Nix, как предложено в другом ответе;)
Михаил Панков
Хорошо знать! Я думал, что он обрабатывает разрешения, по крайней мере, октет, так как мои сценарии сохраняют флаг x на клоне, но я не думал о владении файлами и группами
Эрик
Похоже, что существуют дополнительные инструменты, которые сохранят полные права и права собственности, если вам это потребуется. Одним из таких инструментов является git-cache-meta , и вот список
Ehryk