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

Как я домашний Git-сервер Gogs на Alpine linux устанавливал

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

(с) Властелин Колец: Братство Кольца

С чего всё началось

Мне захотелось завести себе домашний Git-сервер, чтобы практиковаться в разработке и развёртывании пет-проектов. Плюс спокойнее, когда твои наработки лежат не только на github.

В качестве операционной системы выбрал Alpine linux, так как меня заинтересовали её возможности. Был опыт размещения на ней небольшого сервиса. Понравилось, что в ней нет ничего лишнего, а ещё она очень лёгкая в плане системных ресурсов.

Исходные данные

В распоряжении был гипервизор на Proxmox 6.1-3, контейнер с системой Alpine просто взял из шаблонов (template) - Alpine Linux 3.12 Kernel 5.3.10-1-pve on an x86_64.

Реализацию Git-сервера выбирал из числа открытых и бесплатных проектов. Решил взять для начала, тот у которого меньше настроек и лишних плюшек. Мне нужен git-сервер, который не требователен к ресурсам и наличием базовых операций. Остановился на проекте Gogs.io.

Причины такого выбора:

  1. знакомый интерфейс, т.к. использую на работе;

  2. написан на Golang - значит довольно шустрый;

  3. минимальный набор настроек и функционала;

  4. нормальная документация.

Мой гипервизор пока обладает скромным железом. В распоряжении только:

  • ЦПУ - 4 x AMD Ryzen 3 1200 Quad-Core

  • ОЗУ - 8 Гб

  • Диски - два SSD в ZFS

Из них 1-2 Гб ОЗУ забирает ОС гипервизора. Значит на контейнеры и виртуалки остаётся не так много ресурсов. Решил, что для 1-2 пользователей git-сервера хватит одного ядра, 512 Мб ОЗУ и 8 Гб диска.

Запуск контейнера с ОС Alpine

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

С другой стороны, никто не мешает развернуть любую ОС и поставить нужный сервис из её пакетов. Например в Alpine так:

alpine:~# apk search zabbix

Подготовка системы

Сменил имя хоста сервера:

alpine:~# hostname gogs-githost

Вначале я установил openssh и nano для его настройки, чтобы нормально подключаться по ssh:

gogs-githost:~# apk add openssh nano

Далее добавил демон в автозагрузку:

gogs-githost:~# rc-update add sshd

Поправил конфиг /etc/ssh/sshd_config и убрал комментарии строк:

...Port 22PermitRootLogin yes...

Всё, запустил демон:

gogs-githost:~# /etc/init.d/sshd start

Установка сервиса Gogs

Попытка первая

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

gogs-githost:~# apk add gogsfetch http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86_64/APKINDEX.tar.gzfetch http://dl-cdn.alpinelinux.org/alpine/v3.12/community/x86_64/APKINDEX.tar.gz(1/8) Installing ca-certificates (20191127-r4)(2/8) Installing nghttp2-libs (1.41.0-r0)(3/8) Installing libcurl (7.69.1-r3)(4/8) Installing expat (2.2.9-r1)(5/8) Installing pcre2 (10.35-r0)(6/8) Installing git (2.26.3-r0)(7/8) Installing gogs (0.11.91-r1)Executing gogs-0.11.91-r1.pre-install(8/8) Installing gogs-openrc (0.11.91-r1)Executing busybox-1.31.1-r19.triggerExecuting ca-certificates-20191127-r4.triggerOK: 89 MiB in 38 packages

В результате, система помимо самого сервиса gogs установила ещё и дополнительные пакеты, например сам git. Пробую запустить сервер и получаю ошибку:

gogs-githost:~# gogs web2021/03/18 20:13:42 [ WARN] Custom config '/usr/bin/custom/conf/app.ini' not found, ignore this if you're running first time2021/03/18 20:13:42 [TRACE] Custom path: /usr/bin/custom2021/03/18 20:13:42 [TRACE] Log path: /usr/bin/log2021/03/18 20:13:42 [TRACE] Log Mode: Console (Trace)2021/03/18 20:13:42 [ INFO] Gogs 0.11.91.08112021/03/18 20:13:42 [ INFO] Cache Service Enabled2021/03/18 20:13:42 [ INFO] Session Service Enabled2021/03/18 20:13:42 [ INFO] SQLite3 Supported2021/03/18 20:13:42 [ INFO] Run Mode: Development2021/03/18 20:13:42 [FATAL] [...gogs/gogs/cmd/web.go:66 checkVersion()] Fail to read 'templates/.VERSION': open /usr/bin/templates/.VERSION: no such file or directory

Как мы видим, ему не хватает конфига и структуры каталогов для работы. Проверил каталог /usr/bin, там оказался лишь одинокий исполняемый файл gogs.

Попытка вторая

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

Тогда решил пойти другим путём - в документации Gogs описывается установка под популярные дистрибутивы Linux. Обнаружил там таблицу архивов под две версии Gogs, поэтому проверил, какой установился у меня на Alpine:

gogs-githost:~# gogs -vGogs version 0.11.91.0811

Решил попробовать вот этот. Скопировал его в директорию /opt на Alpine:

gogs-githost:/opt# wget https://dl.gogs.io/0.11.91/gogs_0.11.91_linux_amd64.tar.gz

Распаковал:

gogs-githost:/opt# tar -xvf gogs_0.11.91_linux_amd64.tar.gz

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

gogs-githost:/opt# chown -R root:root gogs

Попробовал запустить и получил странную ошибку (спойлер: не удивительно, ведь С-компиляторы разные на Alpine это mysl, но об этом я узнаю позже):

gogs-githost:/opt/gogs# ./gogs web-ash: ./gogs: not found

Тогда то мне и пришла дикая идея подсунуть gogs из Alpine пакетов:

gogs-githost:/opt/gogs# cp /usr/bin/gogs gogs

И бинго! Сервер стартанул и я даже смог его настроить из веб-интерфейса. Но это был не конец

Попытка третья

Несмотря на охватившую меня эйфорию, радости и я у мамки сисадмин! весь следующий день я провёл в раздумьях. Мне не верилось, что в таком перспективном проекте как Alpine, есть место битому пакету. Чувство, что ошибка на моей стороне, не давала покоя.

Я нашел телеграм-чат по Alpine и (увы) на ломаном инглише объяснил свою проблему. Меня направили проверять конфиги в репозитории пакета gogs проекта Alpine.

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

gogs-githost:~# gogs web -c /etc/gogs/conf/app.ini2021/03/20 19:22:47 [TRACE] Custom path: /usr/bin/custom2021/03/20 19:22:47 [TRACE] Log path: /var/log/gogs2021/03/20 19:22:47 [TRACE] Log Mode: File (Info)2021/03/20 19:22:47 [ INFO] Gogs 0.11.91.0811

Дальше настраивал по этому видео-уроку, начиная с момента про настройку из веб-интерфейса.

Конечно, это не полная настройка. При настройке из GUI, я выяснил, что нужно ещё ставить bash.

Кроме этого, нужно настроить автозапуск сервера. Вернее, он уже есть - /etc/init.d/gogs, но не работает:

#!/sbin/openrc-runname=gogsconffile="$GOGS_CUSTOM/conf/app.ini"command="/usr/bin/gogs"command_args="web -c $conffile"start_stop_daemon_args="${GOGS_USER:+--user} $GOGS_USER --env GOGS_CUSTOM=$GOGS_CUSTOM"pidfile="/var/run/gogs.pid"command_background="yes"depend() {        use logger dns        need net        after firewall}

Путём перебора вариантов пришёл к такому:

#!/sbin/openrc-runname=gogsconffile="/etc/gogs/conf/app.ini"command="/usr/bin/gogs"command_args="web -c $conffile"start_stop_daemon_args="${GOGS_USER:+--user} root --env GOGS_CUSTOM=/etc/gogs"pidfile="/var/run/gogs.pid"command_background="yes"depend() {        use logger dns        need net        after firewall}

Грубо, но да - я просто вместо переменных прописал путь и пользователя (того, которого задавал при настройке из веб-интерфейса). Возможно на этот момент мне указывали в чатике Alpine?

Как на самом деле нужно было

После такого долгого пути экспериментов и щупанья головой стены на прочность, меня осенило! Сервер не нужно запускать вручную, он должен стартовать вместе с системой. Значит, его надо настроить по аналогии с openssh.

Снова решил проверить - клонировал контейнер с Alpine и уже настроенным ssh. А дальше всё оказалось очень просто:

alpine:~# apk add gogsalpine:~# rc-update add gogs * service gogs added to runlevel defaultalpine:~# /etc/init.d/gogs start * Starting gogs ...                                                                     [ ok ]alpine:~# rc-statusRunlevel: default networking                                                                    [  started  ] sshd                                                                             [  started  ] crond                                                                            [  started  ] gogs                                                                             [  started  ]

Этого действительно достаточно, чтобы запустить свой Git-сервер (если вас устраивает БД SQLite). Теперь можно идти на веб-интерфейс, у меня это был http://192.168.50.205:3000, и делать базовые настройки.

Заключение

Этой статьёй я хочу обратить внимание на важность документации и навыков по ОС Linux. Скорее всего, опытные линуксоиды сразу поняли в чём дело и от души посмеялись над моим дилетанством. Что ж, теперь мне и самому забавно, каким извилистым был мой путь =).

Но правда также и в том, что простой справки по развороту именно пакета gogs на Alpine я не нашёл. Надеюсь, моя статья будет полезна тем, кто задумает нечто подобное.

Источник: habr.com
К списку статей
Опубликовано: 24.03.2021 18:04:11
0

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

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

Настройка linux

Git

Alpine-linux

Gogs

Категории

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

  • Имя: Макс
    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