Одним из лучших качеств Linux и похожих на неё операционных систем является возможность их глубокой настройки. Если вам что-то не нравится — высоки шансы того, что вы легко сможете это изменить, подправив какой-нибудь файл. Например, рассмотрим bash — командную оболочку, по любым меркам, весьма популярную. Если вам нужно поменять приглашение командной строки — это вполне осуществимо. Если нужно, чтобы клавиша

Если некто работает за единственным компьютером, то никаких проблем с настройками у него не возникает. Он вносит в файл
На самом деле, существует несколько способов синхронизации настроек Linux-систем. Так как эти настройки обычно хранятся в каких-то файлах, для решения нашей задачи можно воспользоваться практически любым механизмом синхронизации. На это придётся потратить некоторое время, но в результате можно будет добиться желаемого. Предположим, можно положить все конфигурационные файлы в одну директорию, а затем поместить символьные ссылки на эти файлы в нужные места домашней директории. Далее, можно, используя
Если вы знакомы с Git, то вы уже догадываетесь о ещё одном варианте решения этой задачи. Тут, кроме того, вдобавок к возможности синхронизации настроек, у вас будет ещё и возможность знать о том, что и когда менялось в ваших конфигурационных файлах. На самом деле, я, в материале о необычных способах использования Git, уже об этом рассказывал, демонстрируя мою систему синхронизации настроек, основанную на Git. Недавно, правда, я обнаружил, что появилась система, названная chezmoi, которая написана на Go, и в которой используется подход к синхронизации настроек, совершенно не похожий на мой.
В соответствии с данными из репозитория проекта,
Выглядит всё это очень интересно. Порядок установки утилиты в разных операционных системах имеет собственные особенности, соответствующие инструкции можно найти в репозитории проекта.
Исполняемый файл, дающий доступ к возможностям
Когда в систему добавляют новый файл, его копия помещается в директорию
Если бы только этим возможности
Представим, что на настольном компьютере вам нужно использовать особенное приглашение командной строки. А на сервере, на файрволе и на Raspberry Pi-компьютерах вас устроит обычное приглашение. Это значит, что на каждом из компьютеров, в файле
Сделать это можно, добавив соответствующие записи в раздел
Для того чтобы добавить в систему некий файл, который будет использоваться в качестве шаблона (например — файл
Благодаря возможностям используемого в
Предполагается, что для организации синхронизации файлов будет использоваться некая система контроля версий. Другими словами, настраивая новый компьютер или обновляя настройки некоей машины вы производите синхронизацию содержимого директории
Это значит, конечно, что хранимые файлы будут настолько «приватными», насколько это позволяет система контроля версий. Если вы опубликуете свои конфигурационные файлы в общедоступной системе — это значит, что ни о какой «приватности» речи уже не идёт. Один из способов решения этой проблемы заключается в использовании системы шаблонизации, и в том, чтобы не обрабатывать с помощью системы контроля версий конфигурационный файл. А он, так как уникален для каждого компьютера, в любом случае не должен обрабатываться с помощью системы контроля версий. Это, кроме прочего, означает, что его нужно хранить не так, как другие файлы.
Предположим, в вашем конфигурационном файле имеется такая запись:
Пароль надо хранить в секрете. А в общедоступных файлах может использоваться такая конструкция:
При работе с
Если говорить о системах контроля версий, то в
Есть и команды, позволяющие просто получить полный набор конфигурационных файлов или экспортировать конфигурацию. Почитать об этих командах можно в репозитории проекта. По умолчанию вся работа ведётся в домашней директории, но, если надо, можно настроить программу и на работу с другой целевой директорией.
В целом можно отметить, что
Уникальный файл с настройками
А для работы моей системы очень важно применение именно приватного репозитория — если только того, кто ей пользуется, не волнует попадание его конфигурационных файлов в общий доступ. Но при этом все файлы обрабатываются с помощью системы контроля версий. Система позволяет быть в курсе всех изменений без необходимости использования шаблонов, на освоение которых нужно определённое время. Достаточно лишь расположить настройки в соответствующих файлах. Единственная возможность, которую я вполне могу добавить в свою систему, вдохновившись
Но этим и хороша Linux. Тут имеется множество способов решения одной и той же задачи. Если не нравится что-то одно — можно найти что-то другое. А если ничего не нравится — можно без особых сложностей создать что-то своё. Это же, правда, создаёт определённые проблемы при использовании Linux многими обычными людьми, которые не привыкли к подобному. Они не стремятся выбирать из множества вариантов, им нужно простое и понятное рабочее решение. А в сообществе, сложившемся вокруг Linux, наоборот, принято постоянно всё со всем сравнивать и с жаром спорить о том, что лучше —
Как вы синхронизируете настройки на разных Linux-машинах?


Tab
позволяла бы автоматически дополнять имена файлов без учёта регистра — это тоже не проблема. Обычно подобные настройки выполняются в одном из так называемых «файлов профиля», вроде .bashrc
, находящихся в домашней директории пользователя.
Если некто работает за единственным компьютером, то никаких проблем с настройками у него не возникает. Он вносит в файл
.bashrc
, и в другие подобные файлы, необходимые изменения, настраивает систему под себя, и работает в той среде, которая ведёт себя так, как ему того хочется. Проблемы появляются тогда, когда кому-то приходится пользоваться несколькими компьютерами. Возможно, речь идёт о веб-сервере, о настольном компьютере, о машине, играющей роль файрвола, и о нескольких десятках Raspberry Pi. Как настроить все эти системы одинаково? И как, после того, как они все одинаково настроены, поддерживать настройки в актуальном состоянии?
Все переводы серии
Кунг-фу стиля Linux: удобная работа с файлами по SSH
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов
Несколько вариантов синхронизации настроек
На самом деле, существует несколько способов синхронизации настроек Linux-систем. Так как эти настройки обычно хранятся в каких-то файлах, для решения нашей задачи можно воспользоваться практически любым механизмом синхронизации. На это придётся потратить некоторое время, но в результате можно будет добиться желаемого. Предположим, можно положить все конфигурационные файлы в одну директорию, а затем поместить символьные ссылки на эти файлы в нужные места домашней директории. Далее, можно, используя
rsync
, синхронизировать эту папку между различными системами.Если вы знакомы с Git, то вы уже догадываетесь о ещё одном варианте решения этой задачи. Тут, кроме того, вдобавок к возможности синхронизации настроек, у вас будет ещё и возможность знать о том, что и когда менялось в ваших конфигурационных файлах. На самом деле, я, в материале о необычных способах использования Git, уже об этом рассказывал, демонстрируя мою систему синхронизации настроек, основанную на Git. Недавно, правда, я обнаружил, что появилась система, названная chezmoi, которая написана на Go, и в которой используется подход к синхронизации настроек, совершенно не похожий на мой.
Возможности chezmoi
В соответствии с данными из репозитория проекта,
chezmoi
предлагает пользователю следующие возможности:- Декларативное описание желаемого состояния файлов домашней директории.
- Использование шаблонов для создания файлов.
- Безопасность работы обеспечивается интеграцией с Bitwarden, с LastPass и с некоторыми программами для локального хранения ключей.
- Поддержка атомарной обработки обновлений. Это защищает систему от попадания в «промежуточное» состояние.
- Поддержка нескольких операционных систем.
- Пользователю сообщается о действиях, которые планируется выполнить, поддерживается режим «пробного запуска».
- Высокая скорость работы, возможность выбора используемой совместно с
chezmoi
системы контроля версий.
Выглядит всё это очень интересно. Порядок установки утилиты в разных операционных системах имеет собственные особенности, соответствующие инструкции можно найти в репозитории проекта.
Использование chezmoi
Исполняемый файл, дающий доступ к возможностям
chezmoi
, что неудивительно, повторяет название проекта. Он поддерживает несколько команд, среди которых хотелось бы отметить следующие:add
— добавление файла в состав файлов, которыми управляет система.edit
— редактирование файла.diff
— выяснение того, какие изменения, если таковые имеются, ожидают включения в рабочую версию файла.apply
— включение изменений, ожидающих одобрения, в рабочую версию файла.
Когда в систему добавляют новый файл, его копия помещается в директорию
~/.local/share/chezmoi
. Для обеспечения совместимости с системами контроля версий chezmoi
игнорирует файлы, находящиеся в этой директории, имя которых начинается с точки. Поэтому, если в систему добавить, например, файл .bashrc
, он будет автоматически переименован в dot_bashrc
.Если бы только этим возможности
chezmoi
и ограничивались, то в этой утилите не было бы ничего примечательного. Самое интересное тут — это синхронизация копий файлов. Для решения данной задачи chezmoi
использует внешнюю систему контроля версий. А что происходит в том случае, если на некоторых компьютерах, настройки которых синхронизируются, нужны некие особенные параметры?Поддержка особенных настроек
Представим, что на настольном компьютере вам нужно использовать особенное приглашение командной строки. А на сервере, на файрволе и на Raspberry Pi-компьютерах вас устроит обычное приглашение. Это значит, что на каждом из компьютеров, в файле
.bashrc
, должно присутствовать особое значение параметра PS1
.Сделать это можно, добавив соответствующие записи в раздел
data
файла chezmoi.yaml
. На самом деле, тут можно использовать различные форматы, в частности — JSON
и TOML
. Этот файл уникален для каждого компьютера. Он позволяет вносить изменения в шаблонные файлы. Например, chezmoi.yaml
настольного компьютера может содержать запись о PS1String
, описывающую сложные настройки приглашения командной строки, а в таком же файле для Raspberry Pi похожая запись будет уже устроена гораздо проще.Для того чтобы добавить в систему некий файл, который будет использоваться в качестве шаблона (например — файл
.bashrc
), нужно воспользоваться опцией -T
команды add
. Файл шаблона, основанного на .bashrc
будет иметь имя dot_bashrc.tmpl
. Благодаря стандартным механизмам шаблонизации Go в распоряжении пользователя chezmoi
имеется множество опций. Кроме того, chezmoi
позволяет пользоваться переменными, которые, например, позволяют работать с именем компьютера и с именем пользователя, с идентификаторами ОС и архитектуры.Благодаря возможностям используемого в
chezmoi
языка шаблонов, у пользователя есть гораздо больше свободы, чем простое использование переменных. В шаблонах, в частности, можно пользоваться условными конструкциями. Выглядеть это, например, может так:# общие настройки
export EDITOR=vi
# настройки, зависящие от имени компьютера
{{- if eq .chezmoi.hostname "work-laptop" }}
# это попадёт лишь в ~/<code>.bashrc</code> компьютера work-laptop
{{- end }}
Безопасность
Chezmoi
распознаёт приватные файлы и соответствующим образом их обрабатывает. Так, приватной является директория chezmoi
, система использует префикс private_
при назначении имён приватным файлам (например, имя такого файла может выглядеть как private_dot_bashrc
).Предполагается, что для организации синхронизации файлов будет использоваться некая система контроля версий. Другими словами, настраивая новый компьютер или обновляя настройки некоей машины вы производите синхронизацию содержимого директории
chezmoi
с копией настроек, хранящейся в системе контроля версий. Затем всё что нужно настраивается в конфигурационном файле и применяются изменения, возможно — с предварительной проверкой того, какие именно изменения будут применены.Это значит, конечно, что хранимые файлы будут настолько «приватными», насколько это позволяет система контроля версий. Если вы опубликуете свои конфигурационные файлы в общедоступной системе — это значит, что ни о какой «приватности» речи уже не идёт. Один из способов решения этой проблемы заключается в использовании системы шаблонизации, и в том, чтобы не обрабатывать с помощью системы контроля версий конфигурационный файл. А он, так как уникален для каждого компьютера, в любом случае не должен обрабатываться с помощью системы контроля версий. Это, кроме прочего, означает, что его нужно хранить не так, как другие файлы.
Предположим, в вашем конфигурационном файле имеется такая запись:
hackaday:
password: 0xdeadbeef
Пароль надо хранить в секрете. А в общедоступных файлах может использоваться такая конструкция:
password = {{ .hackaday.password }}
При работе с
chezmoi
ещё можно пользоваться конфигурационными файлами, зашифрованными с помощью gpg
.Система контроля версий
Если говорить о системах контроля версий, то в
chezmoi
имеются команды для отправки материалов в поддерживаемые системы контроля версий и, соответственно, команды для загрузки данных. По умолчанию используется git
, но есть и другие варианты, вроде hg
. Соответствующие настройки выполняются в конфигурационном файле.Есть и команды, позволяющие просто получить полный набор конфигурационных файлов или экспортировать конфигурацию. Почитать об этих командах можно в репозитории проекта. По умолчанию вся работа ведётся в домашней директории, но, если надо, можно настроить программу и на работу с другой целевой директорией.
Итоги
В целом можно отметить, что
chezmoi
кажется хорошо продуманным проектом. Но я не увидел здесь чего-то такого, что заставило бы меня перейти на chezmoi
с моей системы синхронизации настроек. Если бы я наткнулся на chezmoi
тогда, когда только размышлял о способе решения рассматриваемой задачи, то я, вероятно, воспользовался бы именно этим проектом, а не создавал бы собственный. Я не спорю с тем, что система шаблонизации chezmoi
очень хороша, но моя система достигает похожего эффекта, выбирая разные файлы в зависимости от окружения.Уникальный файл с настройками
chezmoi
сложно обрабатывать с помощью системы контроля версий. Да пользователи обычно и не стремятся этого делать. Если репозиторий, используемый для хранения настроек, является приватным, или если приватную информацию не включают в конфигурационные файлы, можно поместить в эту систему и варианты файла с настройками chezmoi
(скажем, там может быть вариант этого файла для Raspberry Pi и для обычных компьютеров). Затем, при первоначальной настройке компьютера, можно переименовать подходящий файл. Но более вероятно то, что файл с настройками системы будут просто копировать. У подхода, в соответствии с которым конфигурационный файл chezmoi
не обрабатывают средствами системы контроля версий, есть преимущество, заключающееся в том, что, если всё правильно настроить, то для хранения данных можно безопасно использовать общедоступный репозиторий.А для работы моей системы очень важно применение именно приватного репозитория — если только того, кто ей пользуется, не волнует попадание его конфигурационных файлов в общий доступ. Но при этом все файлы обрабатываются с помощью системы контроля версий. Система позволяет быть в курсе всех изменений без необходимости использования шаблонов, на освоение которых нужно определённое время. Достаточно лишь расположить настройки в соответствующих файлах. Единственная возможность, которую я вполне могу добавить в свою систему, вдохновившись
chezmoi
, это возможность добавления в неё новых файлов, за которыми осуществляется наблюдение. Хотя моя система и позволяет синхронизировать настройки, сейчас файлы в неё надо добавлять вручную. Файл перемещают в особую директорию, после чего добавляют записи о файле в систему и создают символическую ссылку.Но этим и хороша Linux. Тут имеется множество способов решения одной и той же задачи. Если не нравится что-то одно — можно найти что-то другое. А если ничего не нравится — можно без особых сложностей создать что-то своё. Это же, правда, создаёт определённые проблемы при использовании Linux многими обычными людьми, которые не привыкли к подобному. Они не стремятся выбирать из множества вариантов, им нужно простое и понятное рабочее решение. А в сообществе, сложившемся вокруг Linux, наоборот, принято постоянно всё со всем сравнивать и с жаром спорить о том, что лучше —
emacs
или vi
, C или Python.Как вы синхронизируете настройки на разных Linux-машинах?
Все переводы серии
Кунг-фу стиля Linux: удобная работа с файлами по SSH
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов
Кунг-фу стиля Linux: мониторинг дисковой подсистемы
Кунг-фу стиля Linux: глобальный поиск и замена строк с помощью ripgrep
Кунг-фу стиля Linux: упрощение работы с awk
Кунг-фу стиля Linux: наблюдение за файловой системой
Кунг-фу стиля Linux: наблюдение за файлами
Кунг-фу стиля Linux: удобный доступ к справке при работе с bash
Кунг-фу стиля Linux: великая сила make
Кунг-фу стиля Linux: устранение неполадок в работе incron
Кунг-фу стиля Linux: расшаривание терминала в браузере
Кунг-фу стиля Linux: синхронизация настроек
Кунг-фу стиля Linux: бесплатный VPN по SSH
Кунг-фу стиля Linux: превращение веб-приложений в полноценные программы
Кунг-фу стиля Linux: утилита marker и меню для командной строки
Кунг-фу стиля Linux: sudo и поворот двух ключей
Кунг-фу стиля Linux: программное управление окнами
Кунг-фу стиля Linux: организация работы программ после выхода из системы
Кунг-фу стиля Linux: регулярные выражения
Кунг-фу стиля Linux: запуск команд
Кунг-фу стиля Linux: разбираемся с последовательными портами
Кунг-фу стиля Linux: базы данных — это файловые системы нового уровня
Кунг-фу стиля Linux: о повторении кое-каких событий сетевой истории
Кунг-фу стиля Linux: PDF для пингвинов

