-- Leo's gemini proxy

-- Connecting to dmntv.ru:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=ru-RU

Сервер Gemini на Raspberry Pi


(памятка/инструкция, краткое пошаговое руководство)


Железяки


Нам потребуется:


Raspberry Pi

В моем случае это будет Raspberry Pi Zero 2 W


Зарядное устройство (блок питания)

Все модели работают на мощности 5,1 В, но Raspberry Pi 4 и 400 требуют 3A, в то время как другие модели могут нормально работать на 2,5 А.


Кабель соединяющий зарядное устройство и Raspberry Pi с соответствующим коннектором (если такового нет в блоке питания)

Raspberry Pi 4 и 400 питается от разъема USB C, Raspberry Pi Zero 2 W (как в моем случае) от Micro USB.


Micro SD карта (и Card Reader если такового нет в вашем компьютере)

Минимальная необходимая емкость составляет 8 ГБ, но для облегченной версии, в принципе, хватит и 4ГБ.


Ну и, само-собой, какой-нибудь компьютер чтобы записать OS на карту памяти

Я буду делать это на Mac Book Air, но это не имеет принципиального значения.


Далее нам потребуется Raspberry Pi Imager


Raspberry Pi Imager - это быстрый и простой способ установить Raspberry Pi OS и другие операционные системы нашу карту. Скачиваем и устанавливаем Raspberry Pi Imager (MacOS / Windows / Linux), засовываем карту в кард-ридер и запускаем Raspberry Pi Imager. Форматируем карту в FAT32. Выбираем операционную систему (в моем случае, я выберу Raspberry Pi OS (other) > Raspberry Pi OS Lite 32-bit (без десктопного окружения)). Выбираем нашу карту (как цель записи). Нажимаем на иконку выбора параметров (шестерёнка в правом нижнем углу). И заполняем:


Hostname (оставляем, например, raspberry )

Включаем SSH > Использовать пароль

Придумываем (и запоминаем) логин и пароль

Заполняем параметры WLAN (имя и пароль нашей WiFi сети)

А также далее по необходимости: страна / временная зона / раскладка клавиатуры и пр.

И нажимаем SAVE (сохранить)


Возвращаемся на основной экран и нажимает кнопку WRITE (записать). Соглашаемся с предупреждением о том, что все данные на карте будут потеряны и ждем.


Через какое-то время (которое зависит от скорости интернет соединения, выбранного дистрибутива, скорости карты и прочих вспышек на Солнце) если вы поставили галочку «оповестить о завершении» - вы услышите звуковой сигнал (в моем случае это заняло минут пять). Это значит, что всё готово. Карту можно извлечь из кард-лидера (он больше не понадобится) и установить в Raspberry Pi.


Всё! Готово. Можно переходить к настройке, подключению к сети и установке дополнительного программного обеспечения.


Подключение Raspberry Pi к сети


Если вы всё сделали правильно и не допустили ошибок когда в дополнительных настройках указывали имя, логин и пароль вашей WiFi сети, то ваша Raspberry Pi уже в сети. Нам остается узнать её IP адрес, чтобы мы могли к ней подключиться.


Узнать список всех ваших подключенных устройств можно в панели управления вашим роутером. У меня это AirPort и там список всех подключенных устройств есть сразу же на первом экране. Запоминаем (или записываем) адрес нашей Raspberry Pi.


Я думаю, что будет проще если мы закрепим какой-то конкретный IP адрес за нашей Raspberry Pi. Для этого нам также понадобится узнать её MAC-адрес (уникальный идентификатор сетевого оборудования). Это тоже можно узнать в панели управления вашим роутером. У меня это AirPort и там необходимо выбрать наше устройство и во всплывающем окне строка аппаратный адрес и есть тот самый, нужный нам, MAC-адрес. Также запоминаем (или записываем) его.


Далее в панели управления роутером, мы должны найти раздел, который должен называться как-нибудь (в зависимости от производителя и модели вашего роутера) типа: «DHCP резервирование» и зарезервировать конкретный IP адрес за устройством с конкретным MAC-адресом. Подразумевается что вы их помните (или записывали), я же предупреждал.


Также, чтобы как говориться, два раза не ходить - там же, где-то рядом, есть раздел который должен называться как-нибудь (в зависимости от производителя и модели вашего роутера) типа: «Настройки портов». И там вы можете указать - обращения на какие порты пропускать и перенаправлять на вашу Raspberry Pi. Это нужно того если вы хотите иметь доступ к вашей Raspberry Pi не только внутри вашей локальной сети, но и из глобальной (интернета). То есть, если вы захотите настроить вашу Raspberry Pi как, например, веб-сервер, то в этом случае нужно пропускать и перенаправлять обращения на 80-ый (стандартный http) и 433-ий (шифрованный https) порты. Доступ по SSH (по умолчанию) настроен на 22-ой порт, ну и так далее, в зависимости от того, что вам надо. Если доступ из глобальной сети (интернета) не нужен, то и делать это также не нужно. Внутри уже всё работает.


После сохраняем и перегружаем роутер, чтобы настройки вступили в силу. И теперь мы знаем адрес по которому можно заходить на нашу Raspberry Pi. Это тот адрес, который мы для неё зарезервировали.


Подключение к Raspberry Pi


Чтобы удаленно подключится к Raspberry Pi нам понадобится терминал. В Linux и MacOS, он само-собой и так уже есть. Про Windows я мало чего могу сказать. Я не использовал Windows уже более 20-ти лет и многое уже забыл, а то, что помню касается Windows 98 и ещё более старших версий (и немного WinXP помню). Но я не уверен, что сейчас, кто-то в здравом уме использует Win98 или WinXP. Но в те времена для подключения к *NIX машинам использовали программу PUTTY. Вероятно сейчас есть какие-то современные программы, вероятно и терминал туда уже завезли - не буду утверждать ничего конкретного, но, на крайний случай PUTTY - тоже подходит.


В общем, открываем терминал и подключаемся по протоколу SSH. К тому адресу который мы зарезервировали для нашей Raspberry Pi. С логином и паролем который мы указали на этапе выбора дополнительных параметров когда записывали на карту Raspberry Pi OS при помощи Raspberry Pi Imager.

ssh user@host

Например:

ssh root@10.0.0.10

Вводим пароль. Добрый вечер, я - диспетчер. Добро пожаловать. Мы на месте. В домашней директории нашего пользователя, на нашей Raspberry Pi.

Далее можно крутить и настраивать то, что хочется, но я думаю, что первым делом имеет смысл сделать следующие вещи:

sudo raspi-config

В окне конфинурации обновить raspi-config. Пункт UPDATE.

И развернуть файловую систему до размеров всей карты памяти.

Advanced Options > Expand Filesystem

А также, обновить список пакетов из репозиториев

sudo apt update

И наконец, обновить пакеты

sudo apt full-upgrade

Всё остальное по мере надобности и/или необходимости. Но, в принципе, уже можно начинать играться и устанавливать и настраивать всякие «нужности» и прочие «полезности».


Установка настройка и запуск Gemini сервера Agate


Удаленно заходим на нашу Raspberry Pi

(user - наш пользователь, host - наш IP адрес)

ssh user@host

Создаем директорию gemini

(подразумевается что мы находимся в нашей домашней директории)

mkdir gemini

Внутри директории gemini создадим две поддиректории bin и public

(для файлов сервера и файлов/страничек которые сервер будет отдавать на внешние запросы)

mkdir gemini/bin gemini/public

Ставим Agate


Я решил, что проще всего будет использовать Agate. Это простой сервер для протокола Gemini.


Домашняя страница

Предварительно скомпилированные двоичные файлы pre-compiled binary


Нам нужен тот который подходит под нашу систему. Я буду ставить на Raspberry Pi Zero 2 W и значит мне нужен:

agate.armv7-unknown-linux-gnueabihf.gz

Команда uname вывоводит информацию о системе. Например uname -a выводит полную информацию.

uname -a

А например name -m выводит имя аппаратного имени машины.

uname -m

В моем случае (Raspberry Pi Zero 2 W), мы получим armv7l

Скачиваем подходящий нам предварительно скомпилированный двоичный файл

wget https://github.com/mbrubeck/agate/releases/download/v3.3.0/agate.armv7-unknown-linux-gnueabihf.gz

И распаковываем его

gunzip agate.armv7-unknown-linux-gnueabihf.gz

Перемещаем его в созданную ранее директорию bin и переименовываем в agate

mv agate.armv7-unknown-linux-gnueabihf gemini/bin/agate

Даем права на «выполнение» файла

chmod +x gemini/bin/agate

Теперь создадим наш первый «индексный» файл

nano gemini/public/index.gmi

Напишем туда что-нибудь типа:

# Hello!
This is my first page in Gemini Space

Запуск


Запускаем сервер с указанием пути до нашей public директории, портом (1965), именем и языком

/home/gemini/bin/agate --content /home/gemini/public/ --addr [::]:1965 --addr 0.0.0.0:1965 --hostname example.com --lang ru-RU

Сертификат


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


Также, я думаю, для удобства, имеет смысл перенести их в директорию bin

mv .certificates/ gemini/bin/.cert

Настройка автоматического запуска


Для этого создадим файл в директории /etc/systemd/system/

sudo nano /etc/systemd/system/agate.service

Разместим там следующие иструкции

(Подставляя правильные пути для двоичного файла, публичной директории и директории сертификатов указав нашего пользователя)

[Unit]
Description=agate
After=network.target

[Service]
User=user
Type=simple
ExecStart=/home/gemini/bin/agate --content /home/gemini/public/ --addr [::]:1965 --addr 0.0.0.0:1965 --hostname example.ru  --certs /home/dmntv/gemini/bin/.cert --lang ru-RU

[Install]
WantedBy=default.target

Управление


Запустить службу

sudo systemctl start agate

Остановить службу

sudo systemctl stор agate

Показать состояние службы

sudo systemctl status agate

Добавить службу в автозагрузку

sudo systemctl enable agate

Обновить конфигурацию после внесения изменений

sudo systemctl daemon-reload

Посмотреть полный список всех опций команды systemctl

systemctl --help

-- Response ended

-- Page fetched on Mon May 13 09:23:14 2024