Настройка Git-сервера и Linux-клиента
Настройка Git-сервера и Linux-клиента
Дата изменения статьи: 05-02-2014
Из черновика по настройке "Ubuntu 12.04". Основное по настройке Git-сервера на домашнем компьютере с операционной системой Windows XP и ноутбука с операционной системой Ubuntu, как клиента для работы с Windows Git-сервером.
Необходимость настройки такой системы может показаться сомнительной, если рассуждать о построении распределенных систем управления версиями файлов (СУВ) (англ. Version Control System, VCS или Revision Control System, RCS ) в масштабах предприятия. Скорее всего в любой крупной или средней компании будет изначально выбрана в качестве серверной платформы операционная система Unix. Совсем иначе выбор происходит, когда необходимо построить СУВ в домашних условиях. Есть рабочий компьютер, названный "WS", с пакетом графическим программ и операционной системой Windows XP. Есть рабочий ноутбук, названный "U1", с WiFi подключением к сети, с оперционной системой Linux Ubuntu 12.04 и со всеми вытекающими отсюда благоприятными последствиями.
Вся основная работа по программированию, написанию статей для блога, подготовка отчетов и прочих офисных документов выполняется на этом ноутбуке. Даже примитивная обработка фотоматериалов тоже выполняется на этом ноутбуке. Поэтому, вполне предсказуемо, что потребовался инструмент для хранения копий и синхронизации рабочих файлов, в частности программного кода, на сервере (полу-сервере).
Разобравшись со всеми конфликтными случаями, которые происходили во время настройки системы, я представляю готовый комплект для установки СУВ в домашней сети. Подробно об этом я изложил ниже. Но вначале, чтобы ориентироваться что за чем идет, я составил план действий.
Краткий план действий
Установить программу "msysgit" на сервер WS.
Установить программу "CopSSH" на сервер WS.
Дополнительные настройки: 3.1. Создать пару ключей для доступа по SSH (секретный и публичный ключ). 3.2. Подготовка тестового репозитория на сервере.
Клонирование репозитория с сервера WS на рабочий ноутбук U1.
Подробное описание установки
1. Установка msysgit на сервер WS.
Программа "msysgit" — это Git для Windows. Загрузить программу: "Git-1.8.5.2-preview20131230.exe" (~15 Mb). После установки программа занимает приблизительно 240 МБ на жестком диске.
Хочется сразу отметить, что эта программа не является серверным приложением. Из чего можно заключить, во время запуска компьютера эта программа не загружается в память как служба или как обычное приложение на автозагрузке. Это приложение не висит в памяти в ожидании событий. Программа работает при вводе команд пользователем с bash-консоли или через графический интерфейс Windows (GUI).
Программа "msysgit" обеспечивает полный функционал СУВ для работы с Git-репозиториями. Компьютер, с установленной только "msysgit" уже может выполнять функции обычного Git-клиента. Например, можно полноценно работать с такими сервисами, как "GitHub.com" или "Google Code".
Взаимодействуя с SSH-сервером, о котором пойдет речь дальше, "msysgit" выполняет свою работу подобно серверному приложению. В таком симбиозе "msysgit" послушно выполняет все команды, поступающие через ssh-протокол.
Замечания по установке "msysgit"...
При установке рекомендую выбрать параметр "Checkout as-is, commit as-is", чтобы Git не участвовал в замене символов "конец строки" в текстовых файлах.
А чтобы можно было работать с файлами Windows и Unix стилей без повреждений текста, рекомендую пользоваться такими текстовыми редакторами, которые умеют сохранять текст в разных форматах, например, "Sublime Text 2" и "Notepad++".
Затем нужно приписать дополнительные пути в переменную окружения PATH. Открыть "Панель управления" —> "Переменные среды" —> "Переменные среды пользователя". И добавить к переменной PATH еще вот такую строку:
;d:\prg\Git;d:\prg\Git\libexec\git-cored:\prg\Git\bin
Выполняя тестовые подключения, без этих дополнительных путей ssh-клиент будет выдавать различные ошибки, например:
sh: git-upload-pack: command not found fatal: The remote end hung up unexpectedly
2. Установка CopSSH на сервер WS.
Программа "CopSSH" — OpenSSH для Windows, другими словами — это SSH-сервер. Загрузить программу: "CopSSH_4.7.1_Personal_Installer.zip" (~15 Mb). После установки программа занимает приблизительно 47 МБ на жестком диске.
Как видно на первой картинке ("Select destination location"), я выполнял установку программы в каталог с именем "d:\Prg\ICW". После завершения установки программы необходимо зайти в домашнюю папку "d:\Prg\ICW\home" и создать там папку с именем текущего пользователя Windows. Например, пользователю Windows с логином "tolik" необходимо будет создать папку "d:\Prg\ICW\home\tolik".
В эту папку на следующих этапах настройки будут помещены ключи для авторизации по SSH-протоколу. А также в этой папке будут располагаться репозитории.
Настройка SSH на сервере.
Чтобы запустить службу "SSH-сервер" необходимо снять символ комментирования ("#") у нескольких строчек конфигурации "sshd_config" (сервер) и "ssh_config" (клиент). Эти файлы находятся в каталоге "d:\prg\ICW\etc".
В файле "ssh_config" необходимо открыть, изменить и/или добавить строки:
Host * RSAAuthentication yes PasswordAuthentication yes Port 4837
В файле "sshd_config" необходимо открыть, изменить и/или добавить строки:
Port 4837 PubkeyAuthentication yes MaxSessions 10
Пример готовых конфигурационных файлов находится в репозитории на сайте GitHub.com .
Запуск сервера выполняется командой "d:\prg\ICW\bin\sshd.exe". Остановка сервера выполняется через "Диспетчер задач".
Проверить успешность первого запуска можно при помощи команды:
netstat -an
Если среди открытых портов есть порт 4837 — это значит, что SSH-сервер успешно запустился.
3. Дополнительные настройки
3.1. Создание пары ключей для соединения по протоколу SSH.
Для того чтобы создать секретный и публичный ключи необходимо перейти на ноутбук с ОС Linux. В терминале следует выполнить вот такую строчку:
$ ssh-keygen -t rsa -b 4096 -C "my-key-1" -f mykey1.ppk
Если в процессе создания ключа не задать пароль, то в будущем не придется при каждом использовании ключа вводить пароль. Но такое использование ключа — это потенциально небезопасное заниятие.
Итак, в результате работы генератора ключей получаются два файла. Первый файл содержит секретный ключ, второй — публичный.
-rw------- 1 musket musket 3243 Янв 31 23:29 mykey1.ppk -rw-r--r-- 1 musket musket 734 Янв 31 23:29 mykey1.ppk.pub
Секретный и публичный ключи необходимо переместить в папку "~/.ssh/". Затем к секретному ключу "mykey1.ppk" установить права доступа (0600), если окажется, что после создания файла у него установились другие права доступа.
$ chmod 0600 mykey1.ppk
Внимание! Установка прав — обязательное условие для работы протокола, иначе SSH не разрешит использовать ключ!
Затем публичный ключ из файла "mykey1.ppk.pub" нужно перенести на сервер WS и добавить в файл "d:\Prg\ICW\home\tolik\.ssh\authorized_keys". Если домашней папки пользователя еще не существует на сервер, то ее необходимо создать. Переносится файл любым доступным способом: на дискете, при помощи флеш-носителя или средствами любого доступного сетевого сервиса.
Если в файле "authorized_keys" уже размещаются какие-то ключи, то важно их не удалить и не повредить. Безопаснее всего свой публичный ключ добавить в конец файла "authorized_keys" с новой строки.
Теперь можно проверить доступность SSH-сервера. Предварительно рекомендую перезапустить SSH-сервер на сервере WS. Затем в ноутбуке U1 в терминале запустить команду:
$ ssh -v -ltolik -i~/.ssh/mykey1.ppk 192.168.0.10 -p4837 'echo $PATH' |grep Git
Эта команда выполняет подключение SSH-клиента к SSH-серверу. Коснусь подробнее её параметров...
Параметр "-v" выводить на экран подробный отчет о выполненных действиях. Параметр "-l" — имя аккаунта на стороне сервера WS. Через параметр "-i" передается файл с ключом. Следующим идет IP адрес сервера WS. Так как, скорее всего, в домашней сети не настроена служба для преобразования адресов в имена, то рекомендую использовать IP-адреса. Параметр "-p" — порт подключения. Так как сервер настроен на порт 4837, то тут необходимо явно указать этот порт. Параметр в одинарных кавычках — команда, которая должна выполниться на серверной стороне после успешного подключения. В данном примере команда выводит на экран содержимое переменной окружения "PATH". "|grep Git" — выделить цветом совпадающий текст. Так как в переменной "PATH" находится много текстовой информации, то эта команда значительно упростит поиск путей, ведущих к Git на сервере WS.
Если соединение произошло и пути к Git найдены, то можно переходить к следующему этапу.
3.2. Подготовка тестового репозитория.
Создать тестовый репозиторий на сервере WS можно несколькими способами, но я расскажу как это сделать через bash, который уже установлен вместе с программой Git.
Запускается bash из "Пуск" —> "Программы" —> "Git" —> "Git Bash".
Далее перейти в домашний каталог и создать там новый репозиторий:
$ cd /d/prg/ICW/home/tolik $ mkdir myrepo1
Внимание! Git считает, что домашняя папка пользователя находится в "C:\Program Files\tolik", а CopSSH считает, что домашняя папка — "D:\prg\ICW\home\tolik". Но так как за взаимодействие с клиентами по сети будет отвечать CopSSH, то репозиторий необходимо организовывать в его домашней папке.
Далее заходим в каталог myrepo1 и создаем репозиторий (инициализация репозитория):
$ cd myrepo1 $ git init
Выходим из каталога с новым репозиторием и создаем голый репозиторий — копирование структуры нового репозитория:
$ cd .. $ git clone --bare myrepo1 myrepo1.git
Последняя команда создает копию структуры репозитория myrepo1 в каталоге myrepo1.git. Сейчас в каталоге "myrepo1.git" находится готовая структура репозитория для работы различных клиентов в сети. Оригинальный репозиторий "myrepo1" можно удалить, он больше не пригодится.
4. Клонирование репозитория с сервера WS на рабочий ноутбук U1.
Выполняется этот этап на рабочем ноутбуке U1. Если предыдущие пункты этого плана были завершены успешно, то скорее всего следующая команда выполнит клонирование проекта с сервера WS на рабочий ноутбук U1.
$ cd ~/my_test_projects $ git clone ssh://[email protected]:4837/~/myrepo1.git
В случае успеха, после операции клонирования на экране останется приблизительно вот такое сообщение:
Cloning into 'myrepo1'... warning: You appear to have cloned an empty repository.
Дополнительная проверка клонированного репозитория:
$ cd myrepo1 $ echo stroka 1.1. >>f1.txt $ echo stroka 2.1. >>f2.txt $ git add . $ git commit -am "my first commit #1" $ git push origin master
Ответ последней команды:
Counting objects: 4, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (4/4), 285 bytes, done. Total 4 (delta 0), reused 0 (delta 0) To ssh://[email protected]:4837/~/myrepo1.git * [new branch] master -> master
Если ранее было успешно выполненно клонирование репозитория с сервера, то теперь не должно возникнуть трудностей при отправке измененного репозитория обратно на сервер. При условии, что репозиторий никто удаленно больше не менял с момента последнего клонирования.
Заключение
Если все пункты моего плана были выполнены успешно, то теперь можно занятся переносом репозитория из домашней папки пользователя в более укромное место. Но об этом уже в следующий раз, при условии, что эта тема будет интересна.
Вопросы "в студии"...
Пользуетесь ли вы дома программой Git? Как часто? С какими файлами программа работает превосходно, а с какими файлами лучше не связываться?
Используют ли СУВ блоггеры, писатели, юристы и люди других профессий и интересов для написания статей, составления документов и т.д.? Или это все таки инструмент только программистов?
Есть ли возможность настроить CopSSH для нескольких аккаунтов? Если кто сталкивался с этой задачей то буду признателен, если подскажете хорошие источники с информацией.












