Поиск по сайту:

Как использовать Git для управления файлами конфигурации пользователя на Linux VPS


Статус: устарело

В этой статье рассматривается версия Ubuntu, которая больше не поддерживается. Если вы в настоящее время используете сервер под управлением Ubuntu 12.04, мы настоятельно рекомендуем обновить или перейти на поддерживаемую версию Ubuntu:

  • Обновите Ubuntu до версии 14.04.
  • Обновление Ubuntu 14.04 до Ubuntu 16.04
  • Перенесите данные сервера в поддерживаемую версию.

Причина:

Смотрите вместо этого:

Введение

Когда вы работаете с машинами Linux, вы, вероятно, начнете довольно сильно настраивать свою среду. Некоторые широко используемые приложения, такие как текстовые редакторы, настолько настраиваемые, что немодифицированные версии могут показаться совершенно другими программами.

Для настройки ваших конфигураций может потребоваться довольно много работы, и часто вы будете вносить незначительные изменения по мере изменения вашего использования с течением времени. Это может быть сложно сделать только на одном компьютере, но когда вы хотите синхронизировать свои настройки на нескольких машинах, все может быстро стать сложным и громоздким.

В этой статье мы обсудим один из подходов к работе со сложными конфигурационными файлами, которые вы хотите использовать на разных машинах. Мы будем использовать контроль версий git для управления нашими важными файлами. Затем мы можем загрузить их в удаленный репозиторий, а затем перенести эти файлы на другие компьютеры.

Мы будем демонстрировать эти идеи на машине с Ubuntu 12.04, но из-за природы git и файлов конфигурации, которые мы будем использовать, любой достаточно современный дистрибутив Linux должен работать аналогичным образом.

Основная идея

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

Мы предположим, что у вас есть один компьютер с тяжелой конфигурацией, которая уже выполняется. Это система, которую мы будем использовать для создания нашего репозитория git. Мы добавим соответствующие файлы в репозиторий, а затем отправим их в наш удаленный репозиторий git.

Удаленный репозиторий git будет местом, где мы можем хранить наши данные конфигурации. Он должен быть доступен для всех других машин, на которых мы можем захотеть разместить наши файлы конфигурации. Некоторые люди чувствуют себя комфортно, используя общедоступное пространство, такое как GitHub, для размещения своих файлов, но это сопряжено с риском случайного перемещения конфиденциальных данных в общедоступное место.

Вместо этого в нашем руководстве мы будем использовать GitLab, решение для самостоятельного размещения git-репозитория, которое вы можете установить и использовать на своих компьютерах. DigitalOcean предоставляет установочный образ GitLab одним щелчком мыши, чтобы вы могли создать предварительно настроенный GitLab VPS. Мы также расскажем, как установить GitLab самостоятельно, если вы хотите пойти по этому пути.

После того, как наши файлы конфигурации находятся в нашем удаленном репозитории git, мы можем перенести файлы на новые системы для реализации наших настроек.

Какие типы файлов мы должны зафиксировать?

Несмотря на то, что существует множество различных уровней настройки новых систем, некоторые типы файлов и настроек больше подходят для этого типа решения, чем другие.

Файлы со значениями, сильно зависящими от системы, вероятно, следует обрабатывать либо вручную, либо с помощью какого-либо другого метода, например системы управления конфигурацией, такой как Chef, Puppet или Ansible.

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

Конфигурация для инструментов и файлов пользовательской среды лучше всего подходит для этого типа решения. Такие вещи, как настройки для vim, emacs, screen, tmux, bash и т. д., являются отличными кандидатами для такого типа конфигурации.

Как правило, хорошим эмпирическим правилом является то, что можно использовать любой «точечный файл» (скрытый файл конфигурации, расположенный в вашем домашнем каталоге), который не содержит конфиденциальных или сильно зависящих от компьютера настроек. Если вы используете собственную альтернативу GitHub , как и GitLab, вы можете включать файлы с конфиденциальной информацией на свой страх и риск.

Настройка вашей сеялки

Мы будем ссылаться на компьютер, на котором уже были изменены файлы конфигурации, которые вы хотели бы использовать, как на «исходную» машину. Это будет место, где происходят наши файлы конфигурации.

Нам нужно убедиться, что у нас установлен git, чтобы мы действительно могли реализовать синхронизацию конфигурации. Установите git из репозиториев, предоставленных вашим дистрибутивом. Для Ubuntu эти команды должны работать:

sudo apt-get update
sudo apt-get install git

После того, как мы установили git, мы должны установить некоторые детали конфигурации, которые будут содержать наши сообщения фиксации в чистоте. Замените свое имя и адрес электронной почты в следующих командах:

<пред>

На данный момент у нас есть несколько различных подходов, которые мы можем использовать. Позвольте мне объяснить каждый из них по очереди, так как этот выбор повлияет на то, как мы будем действовать позже.

Использование всего домашнего каталога в качестве репозитория Git

Возможно, самый простой подход, который у нас есть, — это просто инициализировать репозиторий git в нашем домашнем каталоге. Преимущество этого подхода в том, что он очень прост и прямолинеен, но по ходу дела он может запутаться.

Мы можем начать этот метод, набрав:

cd ~
git init

Репозиторий git будет создан в нашем домашнем каталоге. Если мы увидим состояние наших файлов, мы увидим, что есть много файлов, помеченных как «неотслеживаемые»:

git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	.bash_history
#	.bash_logout
#	.bashrc
#	.gitconfig
#	.profile
#	.screenrc
#	.ssh/
#	.viminfo
#	.vimrc
nothing added to commit but untracked files present (use "git add" to track)

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

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

git add .bashrc
git add .vimrc
. . .

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

Мы можем сделать это, создав в нашем каталоге файл .gitignore с подстановочным знаком, который будет соответствовать всему:

echo "*" > .gitignore

Если мы сделаем это и проверим статус нашего репо, вы увидите, что там нечего отслеживать:

git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

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

git add -f .bashrc
git add -f .vimrc
. . .

В любом случае вам нужно зафиксировать изменения, когда вы закончите:

git commit -m "Initial configuration commit"

Создание каталога конфигурации для хранения файлов

Альтернативный подход к созданию репозитория git, охватывающего весь ваш домашний каталог, заключается в создании отдельного каталога специально для отслеживания этих файлов.

Для целей этого руководства мы будем называть этот каталог configs:

cd ~
mkdir configs

Мы можем войти в этот каталог, а затем инициализировать здесь репозиторий git вместо домашнего каталога:

cd configs
git init

Теперь у нас есть репозиторий git, но внутри нет никаких файлов. Мы хотим поместить наши файлы в этот каталог, чтобы их можно было зафиксировать в нашей системе контроля версий, но мы также хотим, чтобы наши файлы были доступны в домашнем каталоге, чтобы программы могли их правильно найти.

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

Для каждого файла это будет выглядеть так:

mv ~/.vimrc .
ln -s .vimrc ~/
mv ~/.bashrc .
ls -s .vimrc ~/
. . .

Теперь у нас есть все наши фактические файлы конфигурации в нашем каталоге ~/configs и символические ссылки на эти файлы в нашем домашнем каталоге.

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

git add .

И тогда мы можем зафиксировать их следующим образом:

git commit -m "Initial configuration commit"

Этот подход упрощает работу с git, но, возможно, немного усложняет фактическое управление вашими файлами.

Отделение каталога Git от рабочего дерева

Третий подход пытается решить некоторые проблемы, связанные с попыткой создать версию самого домашнего каталога. Он отделяет реальный репозиторий git от места, откуда он извлекает файлы.

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

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

Однако мы можем заставить git использовать отдельный рабочий каталог.

Мы можем начать так же, как и в предыдущем варианте, создав отдельный каталог для нашей конфигурации:

cd ~
mkdir configs

Снова перейдите в каталог, а затем инициализируйте репозиторий git:

cd configs
git init

Чтобы показать вам, как все изменится, давайте прямо сейчас посмотрим, что говорит git status:

git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

В настоящее время рабочим каталогом является каталог ~/configs, в котором находится репозиторий. Здесь нет файлов, поэтому он отображается как пустой, и нечего коммитить.

Теперь мы делаем вещи немного по-другому. Мы начнем с указания другого рабочего каталога с помощью параметра конфигурации git core.worktree:

git config core.worktree "../../"

Это устанавливает рабочий каталог относительно пути к каталогу .git. Первый ../ относится к каталогу ~/configs, а второй указывает нам на один шаг дальше к нашему домашнему каталогу.

По сути, мы сказали git: «Храните репозиторий здесь, но файлы, которыми вы управляете, находятся на два уровня выше репозитория».

Чтобы увидеть, что изменилось, мы можем снова проверить статус:

git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       ../.bash_history
#       ../.bash_logout
#       ../.bashrc
#       ../.gitconfig
#       ../.lesshst
#       ../.profile
#       ../.screenrc
#       ../.ssh/
#       ../.viminfo
#       ../.vimrc
nothing added to commit but untracked files present (use "git add" to track)

Вы можете видеть, что git теперь ссылается на файлы в домашнем каталоге.

Теперь мы можем добавлять файлы, ссылаясь на них по отношению к домашнему каталогу:

git add ~/.vimrc
git add ~/.screenrc
git add ~/.bashrc
. . .

Затем мы можем зафиксировать следующим образом:

git commit -m "Initial configuration commit"

В каталоге, чтобы git снова собрал все части вместе, если вам нужно будет извлечь информацию позже, вам нужно поместить файл /.git:

cd ~
nano .git

Внутри все, что вам нужно, это строка, которая направляет git к файлу репо:

<пред>

Это позволит все работать гладко.

Настройка удаленного сервера Git

В зависимости от ваших потребностей существует множество вариантов настройки удаленного репозитория для хранения ваших файлов.

Очевидным выбором было бы отправить репозиторий конфигурации на GitHub. Это может быть отличным подходом для некоторых людей, но имейте в виду, что он может привести к случайному раскрытию конфиденциальных данных.

Если вы хотите избежать этого, отправляя данные в свой частный репозиторий git, GitLab — отличный выбор.

В DigitalOcean вы можете использовать изображение GitLab одним щелчком мыши, чтобы сразу же взяться за дело.

Другой вариант — установить GitLab самостоятельно. Это руководство расскажет вам, как установить и настроить GitLab на вашем собственном сервере.

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

Как только вы создадите пустой репозиторий, GitHub или GitLab предоставят вам страницу с командами о том, как загрузить файлы конфигурации в репозиторий. Скорее всего, вы захотите нажать кнопку, чтобы переключиться на команды HTTP вместо SSH, если вы еще не добавили ключи SSH.

Это будет выглядеть примерно так:

Используйте предложения команд, чтобы получить вашу конфигурацию в удаленный репозиторий. Скорее всего, это будет что-то вроде:

<пред>

Это отправит вашу конфигурацию в репозиторий GitLab.

Извлечение конфигурации из удаленного репозитория

Теперь, когда у нас есть файлы конфигурации в нашем удаленном репозитории, мы можем получить их с других компьютеров. Мы будем называть сервер, на который мы хотим добавить наши файлы конфигурации, нашей «целевой» машиной.

На целевой машине убедитесь, что у вас установлен git. В Ubuntu это снова будет выполнено следующим образом:

sudo apt-get update
sudo apt-get install git

После того, как вы это установили, вы должны снова установить свои основные переменные конфигурации:

<пред>

Следующий шаг снова зависит от того, как вы хотите, чтобы эта машина взаимодействовала с файлами репозитория git.

Поместите домашний каталог под контроль версий

Если вы хотите, чтобы весь домашний каталог находился под контролем версий git, вы должны запустить там пустой репозиторий git:

cd ~
git init

Отсюда мы можем добавить репозиторий GitHub или GitLab в качестве источника этого репозитория:

<пред>

После этого нам нужно будет сделать что-то немного другое, если у нас уже есть файлы на этом компьютере, которые могут конфликтовать с тем, что находится в нашем репо. Например, файл ~/.bashrc обычно включается по умолчанию для каждого пользователя.

Одним из вариантов было бы удалить или переместить каждый файл, который конфликтует с файлами нашего репо. Однако мы также можем просто указать git перезаписать все конфликтующие файлы удаленными версиями.

Мы можем сделать это, сначала загрузив удаленные файлы, а затем сказав git сбросить до самой последней фиксации, которая должна быть нашей удаленной версией:

git fetch --all
git reset --hard origin/master

Это должно перенести все удаленные файлы на нашу новую машину.

Вы можете легко изменить файлы на этом компьютере и отправить их обратно в удаленное хранилище:

echo "# a comment" >> .bashrc
git add .bashrc
git commit -m "test"
git push origin master

Используйте отдельный каталог конфигурации

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

Нам просто нужен URL-адрес, который снова ссылается на наш удаленный репозиторий. На этот раз мы просто будем использовать клон вместо инициализации нового репозитория git:

<пред>

Теперь мы можем перейти в наш недавно клонированный каталог:

cd configs

В нем будут все наши файлы конфигурации. Затем мы можем связать их по отдельности в наш домашний каталог:

ln -s .vimrc ~/
ln -s .screenrc ~/

Опять же, вам может понадобиться переместить или удалить файлы, конфликтующие с новыми файлами:

rm ~/.bashrc
ln -s .bashrc ~/

Это более ручной процесс, но вы можете более точно контролировать, какие файлы вы хотите активировать на этом компьютере.

Реализовать отдельный репозиторий и каталог Git

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

Отличие этого метода в том, что, поскольку мы хотим, чтобы репозиторий выгружал свои файлы непосредственно в наш домашний каталог, мы не будем извлекать какие-либо файлы во время клонирования:

<пред>

Теперь нам нужно сообщить git, что мы хотим распаковать наши файлы в каталог, расположенный на два уровня выше каталога ~/configs/.git (домашнего каталога):

cd configs
git config core.worktree "../../"

Теперь мы можем явно извлекать файлы. Опять же, нам нужно заставить git перезаписать наши текущие файлы. Мы можем сделать это, «сбросив» обратно в состояние, в котором файлы находились в нашем удаленном репо:

git reset --hard origin/master

Теперь ваши файлы конфигурации должны быть доступны на вашем новом компьютере.

Заключение

Теперь у вас должно быть несколько вариантов того, как сохранить ваши личные файлы конфигурации в системе контроля версий. Постоянно внося изменения в файлы конфигурации в удаленный репозиторий, вы сможете быстро и без усилий воссоздать наиболее важные части своей среды на удаленных машинах.

Джастин Эллингвуд