Как установить Mercurial на shared-хостинг

За все время опыта веб-разработки приходилось сталкиваться с различными хостингами на которых работали сайты: от тех, на которых поддерживаются только текстовые форматы (а-ля narod.ru) до виртуальных машин, на которых есть root доступ.

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

Задача была выполнена, и как она была решена — пошагово описано ниже.

1. Доступ к shared хостингу должен выполнятся по ssh. Подключаемся к хостингу:

$ ssh user@host 

2. Зайти в домашнюю директорию. Все действия будут выполнятся относительно неё:

$ cd ~ 

2. Проверяем, что на shared хостинге установлен python:

$ python --version Python 2.6.6 $ 

4. Создаем директорию python, для того чтобы там разместить модули, которые потребуются для работы mercurial, но которых нет на shared хостинге:

$ mkdir -p python 

5. Скачать исходный код Mercurial www.mercurial-scm.org/release:

$ wget https://www.mercurial-scm.org/release/mercurial-3.7.tar.gz 

6. Извлечь содержимое архива в текущую директорию:

$ tar xvf mercurial-3.7.tar.gz 

7. Переименовываем папку в mercurial:

$ mv mercurial-3.7 mercurial -v 

8. Перейти в папку mercurial:

$ cd mercurial 

9. Устанавливаем mercurial из исходных кодов:

$ python setup.py --pure build_py -c -d . build_ext -i build_mo --force 

10. Так как установка из исходных кодов считается нестандартной то необходимо проделать следующее для установки модулей:

$ python setup.py --pure install --prefix ../../python --force 

11. Если установка прошла корректно, то в директории ~/python/lib{type}/python{version}/site-packages/ будет следующий список файлов:

$ ls -l ~/python/lib64/python3.7/site-packages/ 
total 12 
drwxr-xr-x 5 user group 4096 Oct 2 2014 hgext
drwxr-xr-x 6 user group 4096 Oct 2 2014 mercurial 
-rw-r--r-- 1 user group 238 Oct 2 2014 mercurial-3.7-py3.7.egg-info

А в директории ~/python/bin/ будет содержатся скомпилированный hg:

$ ls ~/python/bin/ -l
total 4
-rwxr-xr-x 1 user group 770 Oct 1 2014 hg

12. Создаем файл .profile или .bash_profile (зависит от настроек shared-хостинга), если такового нет:

$ touch ~/.profile 

13. В файл записываем следующее:

export PATH=~/python/bin:$PATH
export PYTHONPATH=~/python/lib64/python3.7/site-packages 

Первая строка добавляет в переменную окружения PATH путь к папке с Mercurial. Вторая строка добавляет путь к модулям python. Добавление этих строк позволяет работать с Mercurial в интерактивном режиме.

14. Для проверки, что все сделано корректно необходимо создать новое подключение ssh и проверить работоспособность Mercurial:

$ hg --version 

Если все сделано верно, то будет показано сообщение вида:

Mercurial Distributed SCM (version 3.7)
Copyright (C) 2005-2016 Matt Mackall <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.> and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE

15. Для работы Mercurial в не интерактивном режиме необходимо добавить файл .bashrc:

export PATH=~/python/bin:$PATH export PYTHONPATH=~/python/lib64/python3.7/site-packages 

После сохранения изменений необходимо попробовать выполнить команду в не интерактивном режиме:

$ ssh user@host hg --version 

Если будет показано сообщение вида:

Mercurial Distributed SCM (version 3.7)
Copyright (C) 2005-2016 Matt Mackall <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.> and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

то настройка завершена. Если будет сообщение вида:

sh: hg: command not found 

Это говорит о том, что shared-хостинг не позволяет пользователю переопределять .bashrc.

Можно передать нужные переменные окружения непосредственно при выполнении команды в не интерактивном режиме:

$ssh user@host "export PATH=~/python/bin:$PATH;declare -x PYTHONPATH=~/python/lib64/python3.7/site-packages;hg --version" 

Должно быть показано сообщение вида:

Mercurial Distributed SCM (version 3.7)
Copyright (C) 2005-2016 Matt Mackall <Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.> and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

При работе с удаленным репозиторием размещенном на shared-хостинге наличие переменных окружения требуется для команд выполняющих подключение к удаленному репозиторию:

  • clone
  • outgoing
  • incoming
  • pull
  • push

Для подключения необходимых переменных окружения необходимо воспользоваться опцией --config, добавив путь к hg:

$ hg --config ui.remotecmd='export "PATH=~/python/bin:$PATH";export "PYTHONPATH=~/python/lib64/python3.7/site-packages";~/python/bin/hg' inc 

Либо указать эту настройку в .hg/hgrc в секции [ui]:

[ui]
config ui.remotecmd = export "PATH=~/python/bin:$PATH";export "PYTHONPATH=~/python/lib64/python3.7/site-packages";~/python/bin/hg

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

В этом случаем можно создать алиас в .bash_profile на машине, подключающейся к shared-хостингу, для команды hg с этим параметром:

alias hg="hg --config ui.remotecmd='export "PATH=~/python/bin:$PATH";export "PYTHONPATH=~/python/lib64/python2.6/site-packages";~/python/bin/hg'" 

После этого можно выполнять команды в привычном виде:

$ hg inc 

Ссылки на использованные материалы:

  1. Installing Mercurial on a Shared Web Server without Root Access
  2. Installing Python Modules
  3. Python Windows Install (Описание для Windows, но Windows тут не использовался)
  4. Mercurial — CommonProblems
  5. Configuration files for Mercurial
  6. Linux man page — bash
Автор: Владислав, Источник
 

Добавить комментарий


Защитный код
Обновить