SVN для NAS под Synology DSM 7.2. Записки Linux дилетанта

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
| Гайд | HDD, SSD, флешки, прочие носители информации

Гайд по установке SVN сервера на современных NAS от компании Synology. С небольшим лирическим отступлением в начале.

Содержание

Преамбула

Впервые с NAS от Synology я встретился в 2017 году, когда у меня уже был некоторый опыт использования небольшого домашнего сервера, который я использовал для торрентов, гордо называя его NAS :-) Потом помог человечку одному завести небольшой двухдисковый NAS. Он использовался в качестве сетевого архива фоток. У меня к этому времени уже начали формироваться новые пожелания для своего NAS, в частности, кроме торрентов и свалки, эээ, бэкапа разной инфы хотелось иметь и свой SVN сервер. И вот, после простого создания базовых сервисов того NAS-а, я с удивлением обнаруживаю, что там есть легко устанавливаемые приложения и для торрента, и для SVN — это помимо всего прочего. C тех пор я крепко задумался о NAS именно от Synology. Но меня сильно смущало использование тех ARM со смешными скоростями, что были в их первых домашних NAS. Даже с базовыми сервисами они всё-таки тормозили. Ставить на них чего-то большее явно было бы тем ещё удовольствием.

Вскоре после этого появились NAS на Celeron. Получше, чем на ARM предыдущих поколений, но всё ещё не то. Но начал присматриваться. Попытался собрать сервер с NAS самостоятельно из остатков своих прошлых компов. Зря что ли 10 лет назад открыл тему NAS своими руками, которая за это время уже показывает 18 серию. Но понял, что цена этого пути на нормальной базе в реальности будет стоить не меньше, чем купить готовое устройство с массой готовых приложений. Да ещё эти бесконечные sudo -l gbt+ … И тут появляется DS1621+ на AMD Ryzen — а вот это уже интересно. И CPU явно побыстрее, чем Целероны, хоть это и не десктопные камни. Но для домашнего NAS DS1621+ великоват, да и цена не радует. В-общем, дождался DS923+, скидок на Black Friday — и вот оно, счастье в отдельно взятом домашнем офисе инженера.

Что такое «не везёт» и как с ним бороться

Поскрёб по сусекам, наскрёб на них три 3ТБ диска + 1ТБ диск Hitachi, купленные примерно в 2018 году специально для такого случая. Да, по нынешним временам это не самая умопомрачительная ёмкость. Почитав, как одну из веток форума, так и информацию на сайте Synology, в частности, об SHR, поиграв с Synology Raid Calculator, понял что всё не так уж грустно и печально. Пока будет 6.2ТБ, как начнутся проблемы либо с местом, либо с дисками, найду что-то побольше на очередной распродаже и поменяю.

А вот с софтом случилась неприятность. Synology убрала поддержку SVN при апгрейде своей системы с DSM6 на DSM7, что, вообще говоря, явилось шоком для большого количества пользователей NAS этой компании. Счастье в отдельно взятом домашнем офисе превратилось в некоторое уныние. Обращение за помощью в тему форума, посвящённую этим NAS, привело, для начала, к вопросу типа: «Зачем нужен SVN, если есть Git?» Да какая вам разница? Потом пошли «советы» через губу от завсегдатаев ветки: докер, проброс портов и реальный буллинг. В-общем, конечно плевать на буллинг, но в условиях отсутствия работы модератора это создаёт не самую приятную атмосферу. Хорошо, что среди участников ветки есть Кирилл Кочетков — дал ссылки на свои три статьи по построению домашней сети (ну, это я уже знал) и подключению Synology NAS к ней. Кое-что полезное я оттуда подчерпнул. Особенно из Строим домашнюю сеть. Сетевой накопитель Также Кирилл нашёл для меня несколько ссылок на докеры с SVN от различных авторов и подсказал, какой по его мнению, наиболее интересный. И англоязычный форум, где поднималась тема установки SVN на DSM7. Пора было выходить из уныния.

Поискал в сети информацию по докерам. Примерно понял, что это такое. Нашёл ещё SVN докеры, почитал документацию к ним. Все авторы уже имели ранее svn в своих системах, пути были настроены, порты настроены, а тут надо всё с нуля. Первую реальную помощь мне оказал модератор англоязычного форума, имеющий опыт не только в NAS, но и в Линуксе. Ради меня он поставил к себе один из серверов, хотя ему он был совсем не нужен и терпеливо отвечал на мои дилетантские вопросы. В общем, сервер я поставил, но, как оказалось, веб интерфейс у него был, но GUI не было. А я, как человек, измученный нарзаном, привык обращаться через графическую оболочку. Что делать дальше тот модератор не знал. Стал искать дальше. И всё-таки нашёл, то, что хотел. Более того, GUI показался мне даже более мощным, чем те, с которыми работал. Давал больше возможностей по управлению репозиториями и правами пользователей. И есть инструкция по установке. На французском языке, но кого это волнует в наше время. Проследовал по инструкции и, о чудо, оно заработало!!! НО!!! Как всегда — не работали пара заявленных возможностей (каких именно — будет ниже). Причём в документации было указано, как исправить это безобразие. Всего лишь поменять ключи в файле config. ini Всё бы ничего, но этот файл внутри докера и напрямую к нему доступа нет. И тут я снова залип. Открыл тему в форуме ixbt про программы в Unix. Описал проблему, спросил может знает кто, как с докером работать. И что вы думаете, один из первых вопросов: «Зачем SVN, если есть Git?» Да что ж вам неймётся то!!! И снова никакой помощи. Линуксоид нынче не торт… Но, как говорилось в тележурнале моего детства «Хочу всё знать»: «Мы не привыкли отступать!»

На сцену выступили… ChatGPT и Bard (Google AI). Сейчас могу сказать, что для нормального линуксоида задача минут на 30, ну может час максимум. Мне при помощи этих систем пришлось потратить суммарно около недели. Но оно того стоило — всё работает. И действительно с бОльшими возможностями по управлению, чем в других системах. Что касается самих систем AI понял один момент: нельзя с ними чататься очень долго. При длинном чате они теряют контекст общения, не могут отследить, какие результаты уже получены и тупят. Причём по-разному: ChatGPT начинает ходить по кругу, повторяя одно и то же. Bard начинает жаловаться: «Я только лингвистическая модель, не могу помочь с этим» :-)

Да, прелюдия несколько затянулась. Пора бы приступить непосредственно к акту…

Ставим SVN docker на DSM7.2

Здесь я опишу, как ставить SVN docker на новый NAS, который ещё не виден в интернете. Те, у кого доступ к интернету давно настроен или не нужен, могут его пропустить. Да, у меня стоит англоязычный интерфейс. Привычка такая. Думаю, это не должно сильно мешать при использовании русскоязычного интерфейса.

Первый шаг: подключаем NAS к интернету

По умолчанию DSM7.2 подключает NAS через механизм, названный QuickConnect, но данный интерфейс не подходит для подключения сервера SVN. Ему нужен IP адрес, неважно в виде цифр или строки. В статье Кирилла хорошо расписано про подключение портов, в новой DSM немного другой GUI, но в целом проблем вызвать не должно. Но хотелось бы добавить, что сейчас Synology предоставляет возможность выбора различных адресов хоста, которые можно использовать для доступа к своему NAS и SVN снаружи через DDNS

Установка имени хоста
Шаг второй и основной: собственно установка SVN сервера
Устанавливаем Докер

В DSM7.2. он называтеся Container Manager. Устанавливается, как любое другое приложение системы

Докер
Скачиваем образ SVN сервера

Заходим в Registry, находим clamy54/svn-svnadmin и скачиваем его.

Скачиваем нужный образ

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

  1. https://hub.docker.com/r/clamy54/svn-svnadmin — сам образ на хабе докеров
  2. https://github.com/clamy54/docker-svn-iF.SVNAdmin — Исходники этого контейнера. Может кто захочет создать свою версию :-) Состоит из двух частей — обрезанная Ubuntu и GUI для веб интерфейса к администрированию сервера
  3. https://github.com/mfreiholz/iF.SVNAdmin — Исходники GUI
  4. https://svnadmin.insanefactory.com/documentation/ — документация по этому GUI. К сожалению, весьма скудная, но мне помогла.
  5. https://www.be-root.com/2021/11/25/synology-et-serveur-svn/ — страница на сайте автора докера по установке на французском языке, но кого это волнует при наличии онлайнового переводчика. Правда, перевод на русский язык весьма оригинальный — «subversion tools» переводится, как «подрывная деятельность», так что лучше ограничиться переводом на английский. :)

Ну и автор использует DSM 7.0 в то время, как актуальная версия DSM 7.2, в котором менюшки немного другие. Это один из моментов, который подвиг меня написать свои заметки по этому докеру. Может кому-то ещё пригодится. К тому же автор не довёл дело до конца.

Создание папок для SVN

Для начала при помощи File Station в директории docker создать папку svn  — корневая папка для SVN сервера. И уже в этом корне следующие папки, которые необходимы для работы сервера:

  1. keys — служебные файлы сервера, сертификаты и что-то ещё, необходимое для его работы
  2. dav_svn — файлы логинов и паролей пользователей. Пароли, естественно, в зашифрованном виде.
  3. svn  — пользовательские проекты.
  4. conf — для файла конфигурации. Автор контейнера не предлагает создание этой папки, это уже создано мной в процессе настройки для файла config.ini. Можно было бы его записать в keys, и это было бы достаточно логично. Но это может быть рисковано при апдейте контейнера, который не требует наличия такого файла.
Структура папок для SVN сервера

HW, FW, fpga — это уже дополнительные папки для моих различных проектов. Об этом — позже.

Запуск установки докера

Здесь всё очевидно — выделить образ и нажать кнопку Run.

Запуск установки докера
Создание контейнера

Вводим имя контейнера и разрешаем автоматический рестарт сервера при перезагрузке NAS. Нажимаем Next.

Создание контейнера
Настройка портов и путей соответствия локальных папок папкам контейнера
Настройка контейнера

Для начала устанавливаем порты для обращения к заданным портам контейнера. Порт 443 используется для доступа серверу по интерфейсу svn://. Порт 80 — для обращения по http:// В принципе, порт 443 обычно никем больше не используется, поэтому в первом столбце можно его просто повторить. А вот порт обычно 80 используется для веб страниц — поэтому лучше его поменять. Но как справедливо писал Кирилл Кочетков в своих статьях, лучше поменять порты на какие-то другие нестандартные. Например, на год рождения любимой тёщи. Меньше вероятность, что кто-то попробует пробиться на Ваш NAS. Доступные номера портов — от 1024 до 65535.

Далее связываем локальные папки, которые былм созданы при помощи File Station с внутренними папками контейнера. Для чего кликаем на кнопке «+ Add Folder» и поочерёдно назначаем соответствие папок: keys, dav_svn и svn. Папку conf пока не трогаем. После нажатия кнопки Select будет появляться часть таблички, где в первом стольбце указан путь к локальной папке, а в центральную часть надо вписать путь к папке в контейнере. После заполнения всех трёх путей должна получиться следующая таблица:

Карта папок

После чего нажимаем Next и… собственно первичная настройка на этом закончена. Просто запускаем наш сервер:

Запуск сервера

Можно к нему обратиться по внутренней сети http://<nas_address>:10080 - ну, или год рождения любимой тёщи 😀, в зависимости от того, что было поставлено в настройках. В результате чего будет предложено ввести ваш логин и пароль. По умолчанию первый вход идёт с именем пользователя и паролем admin/admin. Естестественно пароль затем лучше изменить.

Первый логин на сервер.

Дальше для знакомых с SVN будет всё более-менее понятно.

Настройка роутера

Сервер запущен. Но если хочется пользоваться им не только из внутренней сети, но и из интернета, то надо обратиться к настройкам роутера. Для этого надо прокинуть адреса внешних портов на внутренние порты, используемые сервером. Кстати, никогда не подумал бы, что английское «forwarding ports», к которому я привык в своём роутере, в русскоязычном IT обозначается, как «прокидывание портов», хотя смысл очевиден. Когда мне выдали это выражение в форуме, решил, что это сленг мамкиных компьютерщиков. Но GPT объяснил мне, что это сейчас общепринятый термин в русскоязычной IT среде. В-общем, давайте прокинем порты :-)

Конечно во всех роутерах интерфейс настройки немного разный. В моём Asus это выглядит следующим образом:

Прокидывание портов для сервера в роутере Asus

Как здесь видно, для File Station оставлен тот же порт, как и в статье Кирилла, для SVN те порты, что назначили ранее (например 10080 и 10443). Локальный IP адрес у всех трёх сервисов, естественно, одинаков. Port range (почему range…) — можно поставить те же, что и локально, но если хочется полностью запутать вероятных хакеров, которым вдруг стал интересен Ваш NAS, то можно поставить совсем другие. Главное — не забывать допустимый диапазон от 1024 до 65535.

Да, я обозначил, что на хх443 порту у меня сидит протокол https для моего SVN — это ошибка. Это для протокола svn://, которым я всё равно не пользуюсь. Но это чисто внутреннее название, ни на что не влияет.

После того, как нажали на Apply и подождали перезагрузки роутера можно в строке браузера ввести http://<внешний адрес>:<номер порта>/ и после согласия с браузером, что понимаете все риски, связанные с протоколом http:// получаете доступ к своему SVN через интернет.

Шаг третий: Добавляем недобавленное

«Хорошо, поздравляю, сервер заработал», — скажет нетерпеливый читатель: «А где же Linux?»

«Спокойствие, только спокойствие» (c)Карлсон. Подходим и к этому. Я, как человек, привыкший к GUI для администрирования SVN серверов был крайне удивлён, что пакет iF. SVNAdmin не предоставляет некоторых базовых возможностей:

  1. Можно создать репозиторий, но нельзя его удалить. При том, что пользователям можно дать права на удаление проектов. Да, администратор может зайти на NAS и просто удалить соответствующую папку с проектом, но не через SVN.
  2. Нет кнопки получения ссылки на репозиторий.
  3. Невозможно создать модель: один репозиторий — много проектов. Только один репозиторий — один проект. Причём интерфейс сделан так, что теоретически возможно, но на практике получается только один проект, но в дополнительной папке. Лично я больше привык к модели 1:1, так что мне это не будет мешать, но как-то это неправильно.

Что двигало автором этого веб интерфейса для таких ограничений — непонятно. Но, как оказалось, в крайне скудной одностраничной документации есть указание для исправления первых двух пунктов. Надо всего лишь поменять пару ключей в файле config.ini. Bingo! Но есть одна тонкость. Сам пакет рассчитан на установку админом того Линукса, куда ставится этот пакет. У нас же докер, внутрь которого обычный пользователь не полезет. Пришлось перекквалифицироваться в необычного, по причинам, указанным в начале статьи. Благо, ChatGPT и Bard доступны и в их базе данных, безусловно, есть информация о системных возможностях Линукса. Да, для того, чтобы вытащить нужную информацию, приходится потратить некоторое время, но куда ещё можно податься Linux дилетанту… Что же, пора показать результат бдений с этими ИИ.

Достучаться до Linux

Для начала надо разрешить доступ к системе через любимый линуксоидами терминал. Ну какой же Linux без треминала. Для этого надо зайти в Control Panel -> Terminal & SNMP и разрешить Telnet и SSH

Доступ через терминал

После чего запускаем любимую терминальную программу (обычно рекомендуют Putty, но я предпочитаю Tera Term), вводим имя хоста (внутренний адрес или его имя во внутренней сети), убеждаемся, что номер порта соответствует номеру порта в NAS, SSH выбран, версия SSH2, кликаем на кнопке OK,

Подключение к терминалу

вводим свои имя администратора и пароль, снова OK и вот он сладкий момент для каждого линуксоида — чёрный терминал с командной строкой

Окно терминала.

Впрочем, в Tera Term цвет терминала, как и фонт и его цвет, можно настроить под себя.

Получаем доступ к config. ini

Как уже было сказано ранее, у нас нет доступа к файлу config. ini, чтобы внести туда необходимые изменения в соответствии с документацией. Точнее, истинный линуксоид быстро разберётся и сможет отредактировать этот файл и внутри докера в строчном редакторе vi. Но это точно не путь дилетанта. Да и, скорее всего, пойдя по этому пути, придётся менять этот файл каждый раз при перезапуске контейнера. Вот этого дилетантам точно не надо. От слова совсем. Но, к нашему дилетантскому счастью, докер устроен так, что если связать некий внутрениий файл контейнера с файлом с таким же именем, но снаружи, то при каждом перезапуске он будет использовать этот внешний файл. Помните папку /svn/conf directory, про которую я писал выше при настройке контейнера. Вот сейчас мы и вынесем нужный нам файл в эту папку. В результате моих изысканий при помощи ИИ выяснилось, что необходимый файл в контейнере находится по пути: /var/www/html/data/config.ini. Можно, конечно воспользоваться этим послезнанием, но мало ли кто-нибудь когда-нибудь сделает апдейт этого контейнера и переместит этот файл в другое место. Так что лучше уточнить, что он именно там. Две следующие команды проверяют путь к нужному файлу и копируют его в папку снаружи контейнера:

sudo docker exec -it /<svn-name> find / -name config.ini 
sudo docker cp <svn-name>:/var/www/html/data/config.ini /volume1/docker/svn/conf/config.ini

Напоминалка для дилетантов.

  1. sudo — притворяемся крутым администратором системы (super user). При этом система захочет уточнить этот статус и запросит пароль. Самое противное, что при вводе пароля в этом случае на экране терминала ничего не происходит. Если пароль введён правильно, то результатом будет указанная выше строка пути к файлу config. ini
  2. <svn-name> — сюда вводится внутреннее имя NAS или его IP адрес
  3. cd — Change Directory — перейти в другую папку. Применим чуть ниже.
  4. ls — List — аналог dir в системах от Microsoft.

Файл мы скопировали, казалось бы пора его редактировать. Но не тут-то было. Он скопирован из-под аккаунта администратора и по умолчанию менять и удалять его может только администратор. системы. Для того, чтобы редактировать его с помощью встроенного в DSM текствого редактора надо поменять права доступа к нему, а для этого по-нашему, по-дилетантски добраться до папки, где он находится. Используем для этого пару команд:

cd .. // перейти на уровень вверх
ls    // прочитать директорию

до тех пор, пока после ls в списке файлов не появится название volume1

Поиск нужной папки

После чего вставляем ещё аналогичную пару команд и меняем права доступа к файлу config. ini

cd volume1/docker/svn/conf/ // идём сразу в нужную папку
ls                          // На всякий случай убеждаемся, что нужный файл находится на месте
sudo chmod 777 config.ini   // меняем права доступа к файлу для всех пользователей

Уфф. В целом с Линуксом для данной задачи закончили. Ну, почти. Зависит от желания некоторого расширения возможностей сервера. Но пока да, можно отдышаться.

Размораживаем замороженные возможности

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

Остановка SVN
  1. Открываем File Station
  2. Проходим в docker/svn/conf
  3. Открываем файл config. ini в текстовом редакторе системы.
  4. В самом низу этого файла есть секция [GUI]
  5. В этой секции надо поменять ключ RepositoryDeleteEnabled. Строчка должна выглядеть так: RepositoryDeleteEnabled=true
  6. Добавляем строку CustomDirectoryListing=http://<svn-address>:<svn-port>/svn/%1/%2
  7. Сохраняем файл.
  8. Останавливаем контейнер
  9. Заходим в Settings и нажимаем кнопку +Add File
  10. Добавляем строку для config. ini (см. ниже)
  11. Сохраняем изменения и нажимаем на Start.
Добавление файла конфигурации в пути сервера

После внесённых изменений и перезапуска сервера уже можно работать с достаточным уровнем комфорта.

Добавлена кнопка удаления
Добавлены ссылки на ветки репозитория

Главное — при добавлении новых пользователей не забывать про установку уровня их прав.

Недостроенное. Задачки для недилетантов

Многопроектный репозиторий

SVN, как упоминалось ранее, может работать в двух режимах:

  1. Один репозиторий, один проект. При этом каждый новый проект начинается с rev.1 и последовательно добавляет по единичке на каждый новый commit (сохранение текущего положения проекта). Лично для меня это наиболее привычный режим. Я бы сказал, что это режим для разработчиков.
  2. Один репозторий, много проектов. Нумерация версий сквозная для всех проектов. Т. е., например, открыли первый проект. Он начался с rev. 1. Сделали несколько коммитов, дошли до rev.5. Потом создали второй проект, ему сразу присвоен rev. 6 И начинается свистопляска — каждый коммит увеличивает не порядок внесения изменений в проект, а в репозиторий. И у каждого проекта получаются прыжки между номерами версий, причём прыжки могут быть через сколько угодной ступеней. Если, скажем, у меня текущая версия проекта 233, то это совсем не значит, что предыдущая была 232, а не 172. Зато как удобно администратору — можно единым махом снести на хрен весь репозиторий со всеми проектами для очистки дискового пространства.

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

Создание многопроектного репозитория

Но вот только в таком случае в каждом мультипроектном репозитории получается создать только один проект. Попытка создания следующего вызывает ошибку. Хорошо, что хотя бы сервер не рушится :-)

============================================

Создание нескольких рабочих пространств/папок для репозиториев

Это разновидность первого режима. Просто создаются папки и в каждой можно добавлять репозитории первого типа. Довольно удобная штука. Выглядит это следующим образом:

Создание репозиториев в различных папках

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

Соответственно, при управлении репозиториями можно сразу определить к чему относится тот или иной проект

Управление репозиториями в различных папках

Так вот, создать проекты в этих директориях можно, но вот работать с ними — нет. Помните строчку их config. ini: CustomDirectoryListing=http://<svn-address>:<svn-port>/svn/%1/%2 ? Так вот, для моего набора типов проектов нужно иметь возможность вместо строки svn подставлять строчки hw, fw, fpga. Сделать какую-то привязку этого листинга к нужной папке репозитория.

=================================================

Скорее всего для решения этих двух задачек надо просто добавить какие-то строки в config.ini. Но для этого либо досконально знать команды управления svn, либо разобраться в исходниках используемого интерфейса, написанного, насколько я понял, на PHP. Либо и то, и другое. В общем занятие для недилетанта. Не исключаю, что для него это будет как два байта переслать :-)

Возвращение к истокам/Линуксу. Подготовка для многопапочного репозитория

В документации к iF. SVNAdmin есть упоминание о таком режиме использования. С примерами. Почему я и думаю, что это должно оказаться не особо сложным. Шаги для создания таких папок следующие

Добавление ключей в config. ini

Открываем в текстовом редакторе локальный файл config.ini. Там уже есть такие строки:

[Repositories:svnclient]
SVNParentPath=/var/svn
SvnExecutable=/usr/bin/svn
SvnAdminExecutable=/usr/bin/svnadmin

Добавляем в него после этой секции дополнительные (применительно к тем папкам, что я показал выше)

[Repositories:svnclient:1]
SVNParentPath=/var/hw
Description=Hardware Projects

[Repositories:svnclient:2]
SVNParentPath=/var/fw
Description=Firmware Projects

[Repositories:svnclient:3]
SVNParentPath=/var/fpga
Description=Verilog Projects

И сохраняем файл.

Ещё немного Линукса. Создаём папки для других репозиториев

Заходим в терминальную программу с SSH и прописываем следующие строки:

sudo docker exec -it <Имя SVN> /bin/sh  // запуск shell внутри контейнера, указанного в скобках
ls                                      // на всякий случай читаем директорий, чтобы убедиться, что папка var на месте
mkdir var/fw                            // создание папки fw или той, что надо
chmod 777 var/fw                        // "танцуют все!"

При необходимости последние две строки повторить для каждого нового репозитория. Но название папки для репозитория должно быть только маленькими буквами. Не спрашивайте меня почему :-).

Ну, теперь выдыхаем: пока Linux. До новых встреч!

Подключение локальных папок для новых репозиториев

Собственно, тут уже после всего, что прошли, совсем просто и очевидно 😀

Остановить контейнер, прописать соответствия путей, запустить контейнер. Это делали и ранее. Укажу только пути

Дополнительные репозитории

Но напоминаю, пока кто-нибудь не подскажет нужные изменения в config. ini, пользоваться ими не получится. Если только не редактировать файл конфигурации каждый раз.

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

Чтобы не было вопросов типа «Почему не Git»

Потому что гладиолус. Вот очень хорошая и простая статья Git vs SVN: What Is The Difference?

Дисклеймер для GreenPeace

Во время установки SVN сервера на NAS ни один линуксоид не пострадал!

Автор не входит в состав редакции iXBT.com (подробнее »)

59 комментариев

B
Я для эксперимента поднял SVN, чтобы семплы для музыки хранить, т.к. там 13000+ файлов. Появляется новый комп — я туда накатываю DAW. А вот семплы бегать синхронизировать между компами — не очень. Поначалу терпимо было, конечно, а потом разрозлось и превратилось в хаос. Поэтому решил протестить. И оказалось удобно. Поработал, наплодил семплов, запушил. Все. Не потеряется.
Разве что постоянно забываю пароль от учетки svn и приходится гуглить, как его вскрыть.
Ну и вопрос инфраструктуры по части железа продумать надо.
C
Очень хороший пример с музыкальными сэмплами. Судя по статье SVN vs. Git в конце блога, SVN как раз более приспособлен для работы с бинарными файлами, чем Git :-)
А касаемо пароля — это стандартная проблема :-) Но если использовать в качестве клиента Tortoise SVN, то его не придётся вспоминать каждый раз.
Mindkiller
Прочитал статью несколько раз, но так и не понял, что такое SVN и зачем оно вообще нужно.
С
subversion, лучшая централизованная система контроля версий.
Нынче не модно, нынче модно распределённый git (который 99% используют как централизованный и страдают непонятно зачем).
Mindkiller
Да страдают-то в основном невинные люди в итоге, которые далеки от этих непонятных технологий. Например, когда ни в чём не повинный человек заходит на гитхаб, чтобы скачать там программу — обычно это заканчивается матами, закрытием окна и поиском альтернатив. Потому что вместо кнопочки СКАЧАТЬ ему настойчиво предлагают какие-то лицензии, README.MD, пул-реквесты, экшны и ещё гору непонятных слов. А самой программы нигде нет. Т.е. люди хорошо разбираются в матане, в дифуре, офигенно программят на С++, но не могут дать человеческую ссылку на свои труды. А потом удивляются, что никто их не понимает.
С
Ещё одна ошибка — гитхаб это не git.
Ну и кнопка «Releases» там обычно есть, всегда в одном месте, если автор вообще релизит что-то кроме исходников.
С
Ну и да, забавное сочетание ранта и юзерпика :-)
Mindkiller
А что не так с авой? Там чёрт с трезубцем.
Mindkiller
А, вам, наверное, показалось, что парень, имеющий какое-то отношение к FreeBSD, не должен жаловаться на git и svn? Так я не разработчик, просто так получилось, что есть у меня десяток серверов на фряхе. И иногда по определённым причинам меня не устраивает ядро GENERIC и приходится собирать кастомную конуру. Когда-то давным-давно исходники релизов с патченной конурой можно было просто взять и скачать. Но потом всё стало гораздо сложнее. Сначала их заставили добывать через svn. Ну ладно, разрабочики сжалились и выпустили svnup, чтобы люди, далёкие от разработки, не выносили себе мозг и просто закачивали нужную конуру. А пару лет назад эти недотёпы решили, что svn — не модно. И перешли на git. Конечно, они выпустили gitup. Но проблема в том, что эта софтина на VDS-ках с 1 Гб. оперативки убивается системой из-за непомерного аппетита. А у меня таких VDS-ок большинство. Поэтому приходится страдать, собирать нужное ядро на домашнем нетбуке и потом вкорячивать его по разным местам.

Казалось бы, что сложного-то — скачать архив и распаковать. Но надо зачем-то ставить некий git, который тянет за собой ни больше ни меньше 100 Мб. зависимостей и который ни для чего, кроме как для закачки свежих исходников ядра, использоваться не будет. Могли бы уж как-то на FTP выкладывать или ещё куда. Но нет. Надо чтобы было модно и чтобы суровые бородатые админы страдали.
C
Угу, git этим славен, что для того, чтобы просто пользоваться выложенным ты должен скачать себе сервер и притащить к себе всю помойку. :)
С
Я так-то как раз разработчик.
И, да, релизные исходники можно просто взять и скачать — https://download.freebsd.org/releases/arm64/14.0-RELEASE/src.txz (архитектура не важна, во всех именно этот тарболл идентичный по понятным причинам).
А для stable / current всегда надо было что-то использовать — cvs (или cvsup, который был написан на Modula-3, что добавляло веселья), svn (svnup), теперь git (gitup).
Увы, да, gitup жрёт память как не в себя. Я тоже не очень доволен переходом на git, потому что всё равно это централизованный репозиторий и, в отличе от Linux, никто не кросс-опыляется помимо центрального репо. Но проблема тут даже не техническая была а социальная — проект реально терял молодых контрибьюторов, которые привыкли уже к git'у и ничего другого не видели. Можно сказать «такие не нужны» — но это типичынй подоход бородатых мужиков в свитерах с оленями, время которы (жалей или не жалей) ушло. И именно такой подход отпугивает ещё больше людей сам по себе. Говорить людям что им тут не рады по такому поводу — плохая идея. А проекту и так людей не хвтататет.
А вот переход на svn я поддерживал всеми руками и ногами потому что CVS был чудовищен, конечно. Для своего времени Ок, но эти времена вышли гораздо раньше чем проект спохватился.
Mindkiller
Ну мне-то на боевых серверах нужны релизы с патчами. Дырявый релиз да, можно скачать. А с залатанными дырами (типа сегодняшнего 14.0-p4) — только через git выпрашивать.
С
Патчи есть все тут https://www.freebsd.org/security/patches/
Ничего кроме этого в -pX релизы не попадает.
Отличие этих патчей только в том, что почему-то ими не обновляется собственно версия системы (они патчат только собственно проблему) и в `uname -a` будет не видно какие патчи есть, а какие — нет.
К сожалению, всё это фигово документировано, признаю.
Но можно брать src.txz от релиза и прикладывать эти патчи системным `patch` без всякого git'а.
А, ну и смотреть что фиксят патчи понятно можно в
https://www.freebsd.org/security/advisories/
https://www.freebsd.org/security/notices/
Но если у вас серверов хотя бы десяток и все на одной версии то проще завести билд-систему хотя бы и в виртуалке, билдить один раз (+спец-ядра раз они вам нужны) и раскатывать на все из одного вашего источника. Чем ребилдить каждый сервер отдельно.
С
Хотя я вас обманул, снепшоты время от времени тоже выкладывают: https://download.freebsd.org/snapshots/amd64/14.0-STABLE/ но не могу сказать с какой регулярностью (там и CURRENT есть и оба поддерживаемых релиза).
H
Интересный, опыт, но что в итоге:
1. Денег на NAS ввалил.
2. Пресловутого «сухо и комфортно» не получил — решать задачи все равно пришлось руками и головой * время (консоль, докер и вот это вот все). Причем, натягивая сову на глобус, получил опыт, который с вероятностью 99% мало где применишь. Прикручивал бы все это к обычному debian-у, опыт был бы универсален и применим потом на любом сервере, да и решалась бы задача проще. Да и банальное обновление прошивки может опять чего-нибудь сломать.
3. Ресурсов и масштабирования у железки нет, 2 ядра х 4 гб. х 4 диска.
… итого, мотив таких покупок IT специалистом от меня все так же ускользает.
C
Не забываем, что я не IT специалист. Я инженер электронщик с уровнем продвинутого пользователя и некоторым опытом в использовании Линукса. Что и отражено в заголовке.
1. Самосборный серверок у меня был. Попробовал небольшой NAS от другой компании — для человека, далёкого от вообще любых программистских утех, только фоточки хранить. Да бэкап документов каких. Не зашло. Поменяли на Synology с его инфраструктурой и стало понятно, как это должно быть.
Всё остальное описано выше.
2. И что? Это для меня не основное поле деятельности. :-) Мне надо было для себя восстановить то, что Synology убрала в новой версии системы. Оказалось, что решение есть, но несколько недоделанное. Разобрался, доделал до уровня, с которым могу работать. Если кто-то продвинется дальше, с удовольствием сделаю апдейт. С дебианом или любым другим вариантом Линукса я бы возился гораздо дольше. Проверено.
3. Можно добавить памяти до 32ГБ, 10гбитную сеть, ещё до 5 дисков в дополнительной коробке, подключаемой к этой, SSD для кэширования данных. Только зачем всё это для домашнего аппарата? Вот работу с камерой видеонаблюдения — это да, полезно добавить. Такая возможность есть из коробки. Чуть позже сделаю. Но это стандартная вещь для такого NAS, там никаких докеров не надо будет.
В итоге я получил свой SVN для моих проектов, который не зависит от внешних условий. Поскольку бесплатных SVN серверов в сети не осталось. Да и те, что были, бесплатно предлагали смешные объёмы.
f
Здесь все тоже делается в копипаст пары строк. Но у самурая есть только путь…
Ни кто не мешал зайти по ssh и 1 командой сделать контейнер и 3 задать права на файлы, причем права в проводнике на папку задаются быстрее…
Q
Ответ на вопрос «зачем svn, когда есть git» так и остался за кадром, жаль. Очень любопытно.
ЗЫ А нет, увидел ссылку в конце :))
С
А зачем git если не нужна распределённость? Что бы страдать от ущербности UX git'а?
C
Ну да, стоило просто дочитать до конца :-)
mal4ik
очередной вброс на тему что со мной не так)) кек
нет что бы давно реализоваться на какой либо итх платформе через линухпамойку и узпакоится, надо покупать дорогое решение с компактным дизайном, перекоряченным для стандартных там эндюзерских задач ос и рассказывать как я это сумел в бложиках, ахахаха
чтож))))))
Mindkiller
Без нетиповых решений жизнь скучна.
mal4ik
только это не повод писать в бложиках, а возможно скрипт для автоматизации сиих действий что бы потом запилить для повторителей через свой акк на гитхабе)
C
Ну, кто Вам может помешать написать скрипт для автоматизации? Я же указал, что нормальный линуксоид всё, что написано, может сделать минут за 30-60. Даже без автоматизации. Но вот только не осталось таких, кто может предложить это сделать.
mal4ik
никто) там выше указание как это делается, могу пересказать если не совсем понятно)
C
Указывать мы все умеем. :) А вот самим сделать у большинства рукм не доходят.
f
Все что написал этот «автор» есть в описании контейнера, где его с его вопросами «послали в пешее путешествие» как и в теме на форуме, так как читать описание ему не с руки.
По сути вся статья сводится к
1. включить в сино ssh/telnet (описание есть в штатной документации).
2. Создать согласно документации к контейнеру необходимые каталоги которые будут монтироваться к контейнеру и дать им права everyone r/w (все делается из проводника syno).
3. Выполнить команду на создание контейнера в консоли (команду взять из описание контейнера, пути подставить свои).
Вот и вся статья. Тут на гитхаб не тянет… В форуме ему это уже писали…
mal4ik
так это и на хобот не тянет, но тем не менее)
C
Действительно, на хрена покупать разные специализированные решения от ведущих производителей, если всё можно сделать из овна и палок.
Mindkiller
Но у синолоджей всё-таки особая специализация. Как и у вашего RT-AX58U, на котором (неожиданно!) тоже можно поднять сервер svn и, наверное, даже с меньшими телодвижениями, чем на NAS-е.
C
Да, Synology специализируется на создании NAS и data servers для малого и среднего бизнеса, а также для домашнего пользования. И занимается этим очень успешно.
А с чего сделан вывод, что у меня RT-AX58U?
Да, svn server можно поднять на любом устройстве под управлением Linux. «Даже из обыкновенной табуретки можно гнать самогон. Некоторые любят табуретовку». Но я из крепких напитков предпочитаю коньяк. :)
Mindkiller
А с чего сделан вывод, что у меня RT-AX58U?

Да на самом деле на всех асусовских роутерах стоит банальный AsusWRT, так что вонзить из репозиториев какой-нибудь svn-сервер можно почти на любом. Главное чтобы в свежей прошивке для вашей модели включался ssh-доступ.
C
И с какой скоростью он будет это делать? RAID из 4 дисков он тоже сможет обеспечить? А видеонаблюдение поддерживает? А cloud service? А бэкап по расписанию?
Mindkiller
Зачем всё смешивать в одну кучу? У вас уже есть RAID из 5 дисков на NAS. Что мешает настроить svn-сервер на роутере так, чтобы он использовал папки на NAS-е? Я думаю ничего. А скорость будет ограничена линком между роутером и NAS (при работе в локальной сети) или тарифом провайдера (при доступе из интернета).
C
У меня есть RAID из 4х дисков на NAS. Для этого NAS есть куча программ, которые на нём можно установить изначаально. И есть система докеров позволяющая установить то, что чего там нет по какой-то причине. При этом стоит достаточно мощный процессор, который всё это тянет.
Зачем мне влезать в прошивку роутера, который по умолчагнию не предназначен для того, чтобы в него влезали? Да, некоторые линуксоиды этим занимаются. Но я не линуксоид, мне нужен рабочий инструмент, а не получать удовольствие от хаканья прошивки роутера :)
Mindkiller
я не линуксоид, мне нужен рабочий инструмент, а не получать удовольствие от хаканья прошивки роутера

Но вы же получили какое-то удовольствие от того, что залезли в консоль вашего дорогущего NAS-а, признайтесь? Даже заюзали докер, который используется совершенно для других целей и в данном случае не более чем костыль. Думаю, если бы вы зашли в консоль вашего дорогущего роутера, у которого (на секундочку) мощнейший многоядерный ARM-процессор и 512 Мб. ОЗУ — вы бы получили не меньшее удовольствие. В качестве бонуса как минимум не пришлось бы ещё порты пробрасывать.

А ещё мне что-то подсказывает, что владельцев роутеров ASUS, которым жизненно необходим svn, на несколько порядков больше владельцев дорогущего NAS-а, которым тоже необходим svn. Так что статья «Поднимаем SVN на роутере ASUS. Записки Linux дилетанта» привлекла бы куда больше внимания.
C
Вчера на работе я получил удовольствие от того, что отладил расширитель импульса от лазера длительностью 1.5 нс до 8нс, который уже можно подавать на вход FPGA. Это 1/10 часть от одного из моих текущих проектов. При этом я пользовался очень хорошей компактной паяльной станцией и великолепным 4х канальным осциллографом от Tektronix с полосгой 1ГГц и частотой сэмплирования 8ГГц. Вот там я получал удовольствие от процесса, когда думаешь, что надо сделать, а не как.
А разбираться какую команду вписать в терминал, чтобы получить нужный мне эффект? Причём в деле, в котором нормальный линуксоид этого неудобства просто не заметил бы. Ну, такое себе удовольствие, честно говоря. Я в прошлом году купил себе лопату из титана для работ на участке. Хорошая лопата, нравится. Но процесс покупки… ммм… удовольствие, равное вбиванию командых строк.
Эээ… это Вы роутер за $60 (сейчас на ebay — $20) считаете дорогущим? Боюсь, у нас разные понятия о том, что дорого. Хотя, да, я бы тоже предпочёл 8 лет назад потратить на него в 2 раза меньше при тех же параметрах :-)
Думаю, что для владельцев роутеров от Asus, которые получают удовольствие от влезания в его систему, установка Apache сервера и оболочки для SVN Admin не представляет большого труда :)
Mindkiller
Вот там я получал удовольствие от процесса, когда думаешь, что надо сделать, а не как.

Тогда тем более вы выбрали неправильный путь. Можете сравнить с вашими мучениями на досуге.

У вас, кстати, всё было бы проще, поскольку хранилище на отдельной железке, а не на USB. И прошивка от Merlin сейчас не нужна для SSH-доступа — эту функцию, как любят говорить адепты SVN-а, замерджили в AsusWRT. Но если вы действительно используете неподдерживаемый и явно дырявый роутер из 2016 года (что немного странно с учётом дорогущего NAS-а и титановой лопаты видеонаблюдения в домашней сети) — тогда, конечно, возможны нюансы.
C
Сравнил. Получил бы ещё больше мучений.
1. Человек использует только протокол svn, я использую http
2. Он использует один диск USB, у меня используется NAS через TCP/IP. Как сменить одно на другое, мне, как Линукс дилетанту (и я это не скрываю), неведомо. Т.е. ещё больше проблем.
3. Есть у меня такая дурная привычка, как управлять SVN сервером не через командную строку, а через GUI веб браузера. Что ещё можно требовать с Линукс дилетанта. А у этого автора GUI не предусмотрен.
4. Вишенка на торте: «The ssh+svn access is not yet tried». Т.е. до конца процесс не доведён. И, учитывая, что писалось это December 13, 2016, не думаю, что он дальше развил это направление. Скорее тоже перенёс на NAS.
используете неподдерживаемый и явно дырявый роутер из 2016 года

Вот впечатали, так впечатали!!! :-) Роутер прекрасно работает с 2017 года и выполняет ту работу, для которой он покупался. Ради чего мне его менять? Ради сомнительного удовольствия лазить в его мозги?
И что Вы так печётесь о моих деньгах? NAS на самом деле, не слишком дорогой — $480. Я же писал в блоге — попробовал я запустить сервер на старом железе. Запустил. Потратил на это, кстати. меньше времени, чем на этот SVN. Почитал соответствующую ветку на форуме. Приинул цены и понял, что для того, чтобы получить примерно то же, что может NAS надо потратить только на железо около $400 и потратить кучу времени на то, что в DSM даётся из коробки. Ей богу, $80 разницы того не стоят.
Mindkiller
Роутер прекрасно работает с 2017 года и выполняет ту работу, для которой он покупался. Ради чего мне его менять?

Я не знаю, какой у вас роутер. Допустим, это RT-AC66U или того хуже RT-N66U. Не так уж важно, оба уже не поддерживаются производителем. И если поискать по базам уязвимостей, то окажется, что в этих роутерах гора незакрытых дыр, в том числе класса RCE. При таких раскладах рано или поздно роутер попадёт в ботнет. И если с вашего роутера будет зафиксирована какая-нибудь вредоносная активность — к вам обязательно нагрянут компетентные органы, можете не сомневаться. И впаяют вам суровую административку вроде 14.3 КоАП с соответствующим штрафом, а то и вообще 272-274 УК с дальнейшим путешествием в ближайшую ИК на несколько лет. И все ваши «Это не я, это злобные хакеры!», слёзы и всхлипывания никого интересовать не будут. С таким же успехом можно оставить где-нибудь открытый автомобиль с ключом зажигания и лелеять надежду, что никто никогда его не угонит и не собьёт человек десять.
C
И даже не эти. ) Слава богу, что я не нахожусь под юрисдикцией КоАП, а то и вообще 272-274 УК.
Кстати, а почему бы Вам не написать блог о роутерах разных поколений и/или уровней? И вместо того, чтобы распылять свои знания, сконцетрировать их в одном месте. Поможете другим избежать уголовной ответственности по незнанию.
Mindkiller
Ахахаххааааааа… Похоже вы даже не заглянули ко мне в профиль. Уж 12 лет как веду блог с остросюжетными триллерами. В том числе и о роутерах.
f
В США с этим ещё хуже. Знакомому за скачивание торрента с мультиком ребенку вкатили штраф в 2500$. И это он ещё легко отделался…
mal4ik
так вы прямо по дороге ноете что вот дескать коробка хорошая, но дисков у меня для нее чет мало) при этом покупаете топовую четырехдисковую коробку, используя всего два)) так то лучше сделали из говна и палок, и уже там гланды по методе как выше написали)
C
Вообще-то заняты все 4 слота. Читайте повнимательнее.
mal4ik
простите) тогда удачных операций на этих 4 дисках)
C
Благодарю Вас, сэр :)

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

Сейчас на главной

Новости

Публикации

Обзор Atvel Zorro Z5 slim: тонкий робот-мойщик окон. Моет даже на окнах с решеткой

Источник: bestrobot.info Atvel Zorro Z5 Slim — оригинальный мойщик квадратного типа. После установки на окно Г-образная ручка складывается в углубление на корпусе, в результате толщина...

Как наточить ножницы в домашних условиях

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

Почему производители так любят «дробные» размеры: 15.67 сантиметра, дюймы и хитрые китайцы

Давайте проведём небольшой эксперимент. Прислоните линейку к любому техническому устройству — скажем, материнской плате, видеокарте, монитору или даже крышке багажника старого «Жигуля»....

Хаотичное обучение: новый подход к развитию интеллекта у машин

Забудьте о строгих алгоритмах и бесконечных циклах проб и ошибок. Будущее робототехники приходит из неожиданного источника — из хаоса. Инженеры Северо-Западного университета совершили...

Обзор IO Nova & Nova Pro: лучшие мыши с Российской гарантией?

Перед Новым Годом IO представила свою линейку игровых мышек, в которой с момента выпуска и по сей день лишь 2 модели: IO Nova и IO Nova Pro. IO — это Российская компания,...

Обзор FiiO Jade Audio JT1: полноразмерные наушники с теплым и атмосферным звучанием и гарнитурным кабелем

Модель FiiO JT1 вышла примерно пол года назад. Это не первые полноразмерные наушники уже достаточно известного производителя аудиотехники FiiO, но первые в бюджетном сегменте. И судя по тому, что...