ServerAdmin.ru
32.3K subscribers
1.17K photos
72 videos
29 files
3.18K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Ресурс включён в перечень Роскомнадзора
Download Telegram
В последнее время навводили кучу запретов на загрузку софта с IP адресов РФ. Я покажу на наглядном примере, как поднять свой deb репозиторий, наполнить его санкционным софтом и использовать в своей инфраструктуре.

Пример будет не гипотетический, а самый что ни на есть актуальный. Допустим, нам надо на парке серверов обновить filebeat от компании elastic, которая закрыла доступ к своим публичным репозиториям с территории РФ. Я включил прокси, скачал через браузер пакет filebeat-8.4.3-amd64.deb.

Далее идём на сервер с Debian, где будем настраивать локальный репозиторий с помощью aptly.
# apt install aptly

Создаём конфиг /etc/aptly.conf. Содержимое берём из документации, где меняем только rootDir и имя FileSystemPublishEndpoints.

{
 "rootDir": "/mnt/repo",
 "downloadConcurrency": 4,
 "downloadSpeedLimit": 0,
 "architectures": [],
 "dependencyFollowSuggests": false,
 "dependencyFollowRecommends": false,
 "dependencyFollowAllVariants": false,
 "dependencyFollowSource": false,
 "dependencyVerboseResolve": false,
 "gpgDisableSign": false,
 "gpgDisableVerify": false,
 "gpgProvider": "gpg",
 "downloadSourcePackages": false,
 "skipLegacyPool": true,
 "ppaDistributorID": "elk",
 "ppaCodename": "",
 "FileSystemPublishEndpoints": {
  "elkrepo": {
   "rootDir": "/var/www/aptly",
   "linkMethod": "symlink",
   "verifyMethod": "md5"
  }
 },
 "enableMetricsEndpoint": false
}

Создаём необходимые директории:
# mkdir -p /mnt/repo /var/www/aptly

Создаю репозиторий для Debian 11:
# aptly repo create -distribution="bullseye" elk
Копирую на сервер пакет и добавляю его в репозиторий:
# aptly repo add elk ~/filebeat-8.4.3-amd64.deb

Создаю gpg ключ для репозитория:
# gpg --default-new-key-algo rsa4096 --gen-key --keyring pubring
Real name: elkrepo

Публикуем репозиторий с этим ключом:
# aptly publish repo elk

Далее вам нужно поднять любой веб сервер и настроить через него доступ к директории /var/www/aptly. Если не хочется это делать, можно запустить сам aptly как веб сервер (дефолтный порт 8080):
# aptly serve

Он автоматом создаст и опубликует директорию /mnt/repo/public. Для удобства можно туда выгрузить публичный ключ:
# gpg --export --armor > /mnt/repo/public/elkrepo.asc

Можно зайти браузером на 8080 порт сервера и посмотреть содержимое репозитория вместе с gpg ключом.

Теперь идём на клиенты и подключаем репозиторий. Для этого создаём файл /etc/apt/sources.list.d/elk_repo.list:

deb http://10.20.1.56:8080 bullseye main

Обновляем пакеты и устанавливаем или обновляем filebeat:
# apt update && apt install filebeat

Инструкцию написал и проверил лично, так как надо было для дела. Можете заполнить этот репозиторий всеми пакетами elastic и пользоваться.

#debian #elk #aptly
👍123👎4
Забавная история случилась с моим репозиторием для ELK Stack. Специально расположил его на VPS, арендованном в USA, чтобы было удобнее скачивать новые пакеты и обновлять репозитории. И вот на днях решил в очередной раз его обновить и очень удивился, когда не смог ничего скачать по свежим ссылкам. Получал ERROR 403: Forbidden. Проверил на другом иностранном сервере, скачал без проблем. То есть мой VPS забанили. Не понятно, в рамках чего это было сделано. Кто-то стуканул или какая-то другая причина. Обновлял я в ручном режиме и запросами не спамил. IP (188.227.57.126) по всем базам сшашный.

Пришлось через другой сервер качать и обновлять репозиторий. Теперь его можно и в Россию вернуть. Один фиг качать через прокладки придётся. Я там всю структуру переделал, добавив сразу Debian 11 и 12, чтобы удобнее было. Настроил всё с помощью aptly, так что сразу кратко все команды приведу, а то постоянно забываю и приходится каждый раз в документацию лезть, когда с ним работаешь.

Ставим:
# apt install aptly

Конфиг /etc/aptly.conf:
{
 "rootDir": "/mnt/aptly",
 "downloadConcurrency": 4,
 "downloadSpeedLimit": 0,
 "architectures": [],
 "dependencyFollowSuggests": false,
 "dependencyFollowRecommends": false,
 "dependencyFollowAllVariants": false,
 "dependencyFollowSource": false,
 "dependencyVerboseResolve": false,
 "gpgDisableSign": false,
 "gpgDisableVerify": false,
 "gpgProvider": "gpg",
 "downloadSourcePackages": false,
 "skipLegacyPool": true,
 "ppaDistributorID": "elastic",
 "ppaCodename": "",
 "FileSystemPublishEndpoints": {
 "elastic": {
  "rootDir": "/mnt/aptly",
  "linkMethod": "symlink",
  "verifyMethod": "md5"
 }
 },
 "enableMetricsEndpoint": false
}

Под репы выделил каталог /mnt/aptly. Создаём 2 репозитория:
# aptly repo create -comment="Elastic repo" -component="main" \
-distribution="bullseye" -architectures="amd64" elastic-bullseye
# aptly repo create -comment="Elastic repo" -component="main" \
-distribution="bookworm" -architectures="amd64" elastic-bookworm

Добавляем туда пакеты:
# aptly repo add elastic-bullseye elasticsearch-8.9.2-amd64.deb
.......

# aptly repo add elastic-bookworm elasticsearch-8.9.2-amd64.deb
.......

Создаю gpg ключ для репозиториев:
# gpg --default-new-key-algo rsa4096 --gen-key --keyring pubring

Публикую репозитории:
# aptly publish repo elastic-bullseye
# aptly publish repo elastic-bookworm

В директории /mnt/aptly появляются две директории: db, public. Ту, что public, надо опубликовать через web сервер. Вот мой конфиг nginx:

server {
  listen 80 default_server;
  server_name elasticrepo.serveradmin.ru;
  root /mnt/aptly/public/;
  access_log /var/log/nginx/aptly-access.log main;
  error_log /var/log/nginx/aptly-error.log;

  location / {
   autoindex on;
  }
}

Осталось положить ключ в публичную директорию:
# gpg --export --armor > /mnt/repo/public/elastic.asc

На этом всё. Запускаем веб сервер и подключаем репозитории к системам:
# echo "deb http://elasticrepo.serveradmin.ru bullseye main" \
| tee /etc/apt/sources.list.d/elasticrepo.list

# echo "deb http://elasticrepo.serveradmin.ru bookworm main" \
| tee /etc/apt/sources.list.d/elasticrepo.list

Устанавливаем ключ:
# wget -qO - http://elasticrepo.serveradmin.ru/elastic.asc | apt-key add -

На Debian 12 увидите предупреждение, что apt-key is deprecated, но это не критично. Теперь можно обновлять репозитории и устанавливать из них пакеты.

Если нужно добавить пакеты, то делаем так:
# aptly repo add elastic-bullseye elasticsearch-9.0.0-amd64.deb
# aptly publish update bullseye

Если надо удалить пакет:
# aptly repo remove elastic-bullseye elasticsearch_8.5.2_amd64
# aptly publish update bullseye
# aptly db cleanup

Ещё полезные команды aptly:
# aptly repo list
# aptly package search logstash
# aptly repo show -with-packages elastic-bullseye

#debian #elk #aptly
👍71👎1
Потихоньку обновляю статью про ELK Stack. Так как к репозиториям Elastic нет прямого доступа с IP адресов России, специально поднял именно для этой статьи простенький репозиторий на небольшом VPS в USA. Понятно, что можно этого не делать, так как есть различные зеркала. Но мне, чтобы не проверять каждый раз ссылки и не сверять версии, удобнее всё замкнуть на себя, чтобы статья была самодостаточной, актуальной и всегда воспроизводилась по написанной последовательности команд. У меня нет возможности обновлять её после каждого нового релиза.

Для этого я поднял свой репозиторий для Debian на Aptly. Это максимально простой и неприхотливый по ресурсам инструмент. Я уже рассказывал про его настройку ранее. С тех пор он так и трудится уже несколько лет (с 2022-го года) и не требует к себе никакого внимания. Достаточно только новые пакеты время от времени туда загружать и обновлять веб сервер.

В этот раз нужно было добавить репозиторий для Debian 13 Trixy. Делается это в несколько команд, если ранее всё уже было настроено для предыдущих версий:

# aptly repo create -comment="Elastic repo" -component="main" -distribution="trixie" -architectures="amd64" elastic-trixie
# aptly repo add elastic-trixie filebeat-*-amd64.deb elasticsearch-*-amd64.deb kibana-*-amd64.deb logstash-*-amd64.deb filebeat-*-amd64.deb
# aptly publish repo elastic-trixie

Репозиторий со свежими пакетами, которые предварительно скачал, готов. Подключить к своей системе можно так:

# wget -qO - http://elasticrepo.serveradmin.ru/elastic.asc | gpg --dearmor -o /usr/share/keyrings/elastic.gpg
# echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] http://elasticrepo.serveradmin.ru trixie main" | tee /etc/apt/sources.list.d/elasticrepo.list
# apt update

Показываю просто для примера. Использовать этот репозиторий для установки продуктов elastic не надо, так как я регулярно его не обновляю, только вместе со статьёй. Есть копия всего репозитория у Яндекса: https://mirror.yandex.ru/mirrors/elastic/. Там все версии всех пакетов, то есть полная копия официального зеркала.

Aptly удобен, если вы хотите полностью контролировать обновления каких-то пакетов у себя в инфраструктуре. Создаёте свой репозиторий и обновляетесь с него. Так вы точно будете уверены в том, что установленная версия будет проверенная и утверждённая вами.

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

#!/bin/bash

VERS="9.0.8"
PACKAGES="elasticsearch kibana logstash filebeat"
DISTROS="bullseye bookworm trixie"

# Download
for pkg in $PACKAGES; do
  if [ "$pkg" = "filebeat" ]; then
    path="beats/filebeat"
  else
    path="$pkg"
  fi
  wget https://artifacts.elastic.co/downloads/${path}/${pkg}-${VERS}-amd64.deb
done

# Add package and publish
for distro in $DISTROS; do
  for pkg in $PACKAGES; do
    aptly repo add elastic-${distro} ${pkg}-${VERS}-amd64.deb
  done
  aptly publish update $distro
done


Достаточно указать желаемую версию в VERS и запустить скрипт.

Инструментов для создания собственных репозиториев много. Я пробовал некоторые из них. Aptly понравился больше всего за его лёгкость и простую логику работы. Он по сути формирует всё, что нужно, и отдаёт веб серверу. Никакой сервис с его стороны не нужен и постоянно не работает.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

———
ServerAdmin: 📱 Telegram | 🌐 Сайт | 📲 MAX

#aptly
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍82👎3