Русский
Русский
English
Статистика
Реклама

Установка и настройка cSvn

cSvn это web-интерфейс к Subversion репозиториям. Основу cSvn представляет CGI-скрипт написанный на языке С.


В данной статье рассматривается установка и настройка cSvn для работы с использованием Nginx + uWsgi. Настройка серверных компонентов достаточно проста и практически не отличается от настройки cGit.


На стороне клиента работает элементарный JavaScript составляющий не более 350 строк и таблица стилей размером 24K в распакованном виде. Markdown-тексты обрабатываются на стороне сервера с помощью библиотеки md4c, которая успешно зарекомендовала себя в проекте KDE Plasma.


Стоит заметить, что с помощью cSvn можно просматривать не только собственные репозитории, но и настроить просмотр сторонних ресурсов по протоколам HTTPS и SVN.



Требования к системе


cSvn использует библиотеки libpcre2, md4c, libmagic, входящую в состав пакета File и libxml2. На сервере должны быть установлены: HTTP сервер Nginx, сервер uWsgi и, разумеется Apache Subversion.


Инсталляция продуктов


cSvn пакет состоит из двух частей. Первая представляет собой обычный Linux демон, который отвечает за разбор конфигурационного файла /etc/csvnrc. Вторая непосредственно является CGI-скриптом, отвечающим на HTTP запросы клиента. Обе части устанавливаются одновременно.


Исходные тексты


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


svn checkout svn://radix.pro/csvn/trunk csvn

Если использован второй способ, то перед сборкой пакета необходимо приготовить исходные тексты для их последующего конфигурирования. Для этого нужно воспользоваться скриптом bootstrap:


cd csvn./bootstarp

который установит Autotools средства, соберет коллекцию aclocal.m4 и создаст configure скрипт.


Сборка пакета


Сборка и установка cSvn ни чем не отличается от любых других продуктов, использующих средства Autoconf, Automake:


./configure --prefix=/usr \            --sysconfdir=/etc \            --with-config=/etc/csvnrc \            --with-controldir=/etc/rc.d \            --with-logrotatedir=/etc/logrotate.d \            --with-scriptdir=/var/www/htdocs/csvn \            --with-homedir=/var/lib/csvn \            --with-logdir=/var/log \            --with-piddir=/var/runmakemake install

Здесь, параметр --with-scriptdir определяет место установки CGI-скрипта и связанных с ним файлов, необходимых для работы сервера cSvn. Далее, в описании настроек сервера Nginx, мы будем использовать именно этот каталог. Разумеется, пользователи могут настроить работу cSvn и виртуального HTTP сервера относительно любого другоро каталога.


Права доступа


После инсталляции пакета cSvn необходимо отдать права на каталог /var/www/htdocs/csvn пользователю, от имени которого работает Nginx:


  chown -R nginx:nginx /var/www/htdocs/csvn


Subversion репозитории


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


На странице руководства csvnrc(5) приведен рабочий файл конфигурации сервера:


/etc/csvnrc:
svn-utc-offset = +0300;checkout-prefix-readonly = 'svn://radix.pro';checkout-prefix          = 'svn+ssh://svn@radix.pro';branches = 'branches';trunk    = 'trunk';tags     = 'tags';snapshots = 'tar.xz';css = '/.csvn/css/csvn.css';logo = '/.csvn/pixmaps/csvn-banner-280x280.png';logo-alt = "Radix.pro";logo-link = "https://radix.pro";main-menu-logo = '/.csvn/pixmaps/logo/SVN-logo-white-744x744.svg';favicon-path = '/.csvn/pixmaps/favicon';syntax-highlight-css = '_csvn.css';header = '/.csvn/html/header.html';footer = '/.csvn/html/footer.html';page-size = 200;owner = "Andrey V.Kosteltsev";author = "Andrey V.Kosteltsev";title = "Radix.pro SVN Repositories";description = "Subversion repositories hosted at radix.pro (St.-Petersburg)";keywords = "cSvn repositories";copyright = " Andrey V. Kosteltsev, 2019  2020.";copyright-notice = "Where any material of this site is being reproduced, published or issued to others the reference to the source is obligatory.";home-page = "https://radix.pro/";section "Tools" {  repo 'csvn' {    owner = "Andrey V.Kosteltsev";    title = "cSvn CGI Script";    description = "cSvn CGI Script  is a web frontend for Subversion Repositories";    home-page = "https://radix.pro/";  }}

Его можно использовать как начальный шаблон.


После создания конфигурационного файла /etc/csvnrc можно проверить работу csvnd(8) демона.


В случае работы на системе с BSD-like инициализацией, для запуска csvnd(8) демона достаточно выполнить команду


/etc/rc.d/rc.csvnd start

Для систем использующих systemd, необходимо воспользоваться утилитой systemctl:


systemctl enable csvnd.servicesystemctl start csvnd.service

Здесь необходимо упомянуть следующее...

При сборке и установке исходного пакета cSvn, устанавливается start/stop скрипт /etc/rc.d/rc.csvnd. Если же речь идет о системах использующих systemd, то для установки cSvn лучше использовать бинарный RPM или pacman пакет, поскольку в таких пакетах файл /etc/rc.d/rc.csvnd заменяется на Systemd Unit,


/usr/lib/systemd/system/csvnd.service:
[Unit]Description=The cSvn daemonAfter=network.target[Service]PIDFile=/var/run/csvnd.pidExecStart=/usr/sbin/csvnd --daemonize --inotify --config=/etc/csvnrcExecReload=/bin/kill -s HUP $MAINPIDExecStop=/bin/kill -s TERM $MAINPID[Install]WantedBy=multi-user.target

устанавливаемый в каталог /usr/lib/systemd/system.


Если для используемой вами системы еще не создан пакет cSvn, то вы его можете приготовить самостоятельно, по инструкциям, приведенным к каталоге doc/build-packages.


Если же вы не хотите создавать пакет для вашей системы, то вы можете просто поместить файл csvnd.service в каталог /usr/lib/systemd/system/ и выполнить запуск демона самостоятельно.



После запуска csvnd(8) демона надо убедиться в существовании файла /dev/shm/csvn.bcf и, в случае его отсутствия посмотреть на ошибки приведенные в /var/log/csvnd.log файле.


Настройка uWsgi


Поскольку на этапе конфигурирования мы выбрали для инсталляции cSvn CGI-скрипта каталог /var/www/htdocs/csvn/, файл /etc/uwsgi/csvn.ini должен ваглядеть следующим образом:


/etc/uwsgi/csvn.ini:
[uwsgi]master          = trueplugins         = cgisocket          = /run/uwsgi/%n.sockuid             = nginxgid             = nginxprocname-master = uwsgi csvnprocesses       = 1threads         = 2cgi             = /var/www/htdocs/csvn/csvn.cgi

Здесь переменная cgi устанавливает полное имя CGI-скрипта cSvn.


Для запуска uWsgi демона на системах с BSD-like инициализацией, такой как Slackware, необходимо создать start/stop скрипт следующего вида:


/ets/rc.d/rc.csvn-uwsgi:
#!/bin/sh## uWSGI daemon control script.#CONF=csvnBIN=/usr/bin/uwsgiCONFDIR=/etc/uwsgiPID=/var/run/$CONF-uwsgi.piduwsgi_start() {  # Sanity checks.  if [ ! -r $CONFDIR/csvn.ini ]; then # no config files, exit:    echo "There are config files in $CONFDIR directory. Abort."    exit 1  fi  if [ -s $PID ]; then    echo "uWSGI for cSvn appears to already be running?"    exit 1  fi  echo "Starting uWSGI for cSvn server daemon..."  if [ -x $BIN ]; then    /bin/mkdir -p /run/uwsgi    /bin/chown nginx:nginx /run/uwsgi    /bin/chmod 0755 /run/uwsgi    $BIN --thunder-lock --pidfile $PID --daemonize /var/log/csvn-uwsgi.log --ini $CONFDIR/$CONF.ini  fi}uwsgi_stop() {  echo "Shutdown uWSGI for cSvn gracefully..."  /bin/kill -INT $(cat $PID)  /bin/rm -f $PID}uwsgi_reload() {  echo "Reloading uWSGI for cSvn configuration..."  kill -HUP $(cat $PID)}uwsgi_restart() {  uwsgi_stop  sleep 3  uwsgi_start}case "$1" in  start)    uwsgi_start    ;;  stop)    uwsgi_stop    ;;  reload)    uwsgi_reload    ;;  restart)    uwsgi_restart    ;;  *)  echo "usage: `basename $0` {start|stop|reload|restart}"esac

Дать ему права на выполнение


  chmod a+x /ets/rc.d/rc.csvn-uwsgi

и добавить следующие строчки в файлы /etc/rc.d/rc.M, /etc/rc.d/rc.6, соответственно:


/etc/rc.d/rc.M:
# Start uWSGI for cSvn server:if [ -x /etc/rc.d/rc.csvn-uwsgi ]; then  /etc/rc.d/rc.csvn-uwsgi startfi

/etc/rc.d/rc.6:
# Stop uWSGI for cSvn server:if [ -x /etc/rc.d/rc.csvn-uwsgi ]; then  /etc/rc.d/rc.csvn-uwsgi stopfi


Настройка Nginx


Конфигурационный файл, для выбранного нами каталога установки и домена csvn.example.org должен выглядеть следующим образом:


/etc/nginx/vhosts/csvn.example.org.conf:
## cSvn server:#    server {        listen 80;        server_name csvn.example.org;        return 301 https://csvn.example.org$request_uri;    }    server {        listen 443 ssl;        server_name csvn.example.org;        root /var/www/htdocs/csvn;        charset UTF-8;        #        # see:        #   https://developer.mozilla.org/en-US/docs/Web/Security/HTTP_strict_transport_security ,        #   https://raymii.org/s/tutorials/HTTP_Strict_Transport_Security_for_Apache_NGINX_and_Lighttpd.html        #        # see also: http://classically.me/blogs/how-clear-hsts-settings-major-browsers        # and do not include includeSubdomains; parameter into line:        #        add_header Strict-Transport-Security "max-age=63072000; preload";        error_log /var/log/nginx/csvn.example.org-error.log;        access_log /var/log/nginx/csvn.example.org-access.log;        keepalive_timeout        60;        ssl_certificate          /etc/letsencrypt/live/csvn.example.org/fullchain.pem;        ssl_certificate_key      /etc/letsencrypt/live/csvn.example.org/privkey.pem;        ssl_trusted_certificate  /etc/letsencrypt/live/csvn.example.org/chain.pem;        ssl_protocols            SSLv3 TLSv1 TLSv1.1 TLSv1.2;        ssl_ciphers              "RC4:HIGH:!aNULL:!MD5:!kEDH";        gzip on;        gzip_disable "msie6";        gzip_comp_level 6;        gzip_min_length 1100;        gzip_buffers 16 8k;        gzip_proxied any;        gzip_types text/plain text/css text/js text/xml text/javascript                   image/svg+xml image/gif image/jpeg image/png                   application/json application/x-javascript application/xml application/xml+rss application/javascript                   font/truetype font/opentype application/font-woff application/font-woff2                   application/x-font-ttf application/x-font-opentype application/vnd.ms-fontobject application/font-sfnt;        #        # Serve static content with nginx        #        #        # Rewrite rules for versioning CSS + JS thtouh filemtime directive        #        location ~* ^.+.(css|js)$ {            rewrite ^(.+).(d+).(css|js)$ $1.$3 last;            expires 31536000s;            access_log off;            log_not_found off;            add_header Pragma public;            add_header Cache-Control "max-age=31536000, public";        }        #        # Caching of static files        #        location ~* .(eot|gif|gz|gzip|ico|jpg|jpeg|otf|pdf|png|svg|svgz|swf|tar|t?gz|woff|zip)$ {            expires 31536000s;            access_log off;            log_not_found off;            add_header Pragma public;            add_header Cache-Control "max-age=31536000, public";        }        location ~ ^/favicon.ico$ {            root /u3/nginx/vhosts/csvn;            access_log off;            log_not_found off;            expires 30d;        }        location = /robots.txt {            allow all;            log_not_found off;            access_log off;        }        location / {            try_files $uri @csvn;        }        location @csvn {            gzip off;            include uwsgi_params;            uwsgi_modifier1 9;            uwsgi_pass unix:/run/uwsgi/csvn.sock;        }    }

После создания файла /etc/nginx/vhosts/csvn.example.org.conf его необходимо включить в основной конфигурационный файл Nginx:


/etc/nginx/nginx.conf:
    include /etc/nginx/vhosts/csvn.example.org.conf;

После запуска uWsgi и Nginx можно заняться настройкой репозториев используя руководство csvnrc(5).



Заключительная настройка


Все необходимые файлы для работы на стороне web-клиента находятся в каталоге /var/www/htdocs/csvn/.csvn/. Редактируя файл /.csvn/html/header.html и меняя значения переменных в файле /etc/csvnrc, пользователь может сменить favicon.ico, поменять тему подсветки синтаксиса, выбрать изображения для собственных репозиториев, задать ключевые слова для поисковых систем, а также выполнить множество других настроек своего сервера.


Внешний вид интерфейса определяется единственным CSS-файлом и поэтому, пользователь может поменять тему web-интерфейса так, как ему будет необходимо.


Посмотреть на рабочую копию cSvn сервера можно здесь.

Источник: habr.com
К списку статей
Опубликовано: 14.11.2020 22:12:09
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Open source

Системы управления версиями

Subversion

Svn

Csvn

Cgit

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru