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

Использование Cloudflare R2 в качестве репозитория apt/yum

В этом сообщении блога мы поговорим о том, как мы используем Cloudflare R2 в качестве метко / ням репозиторий, чтобы принести облака (демон Cloudflare Tunnel) к вашим системам Debian/Ubuntu и CentOS/RHEL и как вы можете сделать это для своего собственного дистрибутива за несколько простых шагов!

я работаю на Облачный туннель, продукт, который позволяет клиентам быстро подключать свои частные сети и службы через глобальную сеть Cloudflare без необходимости раскрывать какие-либо общедоступные IP-адреса или порты через свой брандмауэр. Cloudflare Tunnel управляется для пользователей облака, инструмент, работающий в той же сети, что и частные службы. Он проксирует трафик для этих сервисов через Cloudflare, после чего пользователи могут безопасно получать доступ к этим сервисам через сеть Cloudflare.

Наш разъем, облачный, был разработан, чтобы быть легким и достаточно гибким, чтобы его можно было эффективно развернуть на Raspberry Pi, маршрутизаторе, вашем ноутбуке или сервере, работающем в центре обработки данных, с приложениями, начиная от управления IoT и заканчивая частной сетью. Естественно, это означает облака поставляется с множеством операционных систем, архитектур и дистрибутивов пакетов: вы можете загрузить соответствующий пакет из наших выпусков GitHub, варить установить это или метко / ням установить Это (https://pkg.cloudflare.com).

В оставшейся части этого поста я буду использовать cloudflared в качестве примера того, как создать репозиторий apt/yum, поддерживаемый службой хранилища объектов Cloudflare R2. Обратите внимание, что это может быть любой двоичный файл/распространяемый файл. Я просто использую cloudflared в качестве примера, потому что это то, что мы недавно сделали и фактически используем в производстве.

Как работает apt-get

Давайте посмотрим, что произойдет, когда вы запустите что-то подобное на своем терминале.

$ apt-get install cloudflared

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

  $ echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared buster main' | sudo tee /etc/apt/sources.list.d/cloudflared.list


$ apt-get update

В приведенном выше source.list apt сначала ищет файл Release (или InRelease, если это подписанный пакет, такой как cloudflared, но мы проигнорируем его для простоты).

Файл Release содержит список поддерживаемых архитектур и их контрольные суммы md5, sha1 и sha256. Это выглядит примерно так:

$ curl https://pkg.cloudflare.com/cloudflared/dists/buster/Release
Origin: cloudflared
Label: cloudflared
Codename: buster
Date: Thu, 11 Aug 2022 08:40:18 UTC
Architectures: amd64 386 arm64 arm armhf
Components: main
Description: apt repository for cloudflared - buster
MD5Sum:
 c14a4a1cbe9437d6575ae788008a1ef4 549 main/binary-amd64/Packages
 6165bff172dd91fa658ca17a9556f3c8 374 main/binary-amd64/Packages.gz
 9cd622402eabed0b1b83f086976a8e01 128 main/binary-amd64/Release
 5d2929c46648ea8dbeb1c5f695d2ef6b 545 main/binary-386/Packages
 7419d40e4c22feb19937dce49b0b5a3d 371 main/binary-386/Packages.gz
 1770db5634dddaea0a5fedb4b078e7ef 126 main/binary-386/Release
 b0f5ccfe3c3acee38ba058d9d78a8f5f 549 main/binary-arm64/Packages
 48ba719b3b7127de21807f0dfc02cc19 376 main/binary-arm64/Packages.gz
 4f95fe1d9afd0124a32923ddb9187104 128 main/binary-arm64/Release
 8c50559a267962a7da631f000afc6e20 545 main/binary-arm/Packages
 4baed71e49ae3a5d895822837bead606 372 main/binary-arm/Packages.gz
 e472c3517a0091b30ab27926587c92f9 126 main/binary-arm/Release
 bb6d18be81e52e57bc3b729cbc80c1b5 549 main/binary-armhf/Packages
 31fd71fec8acc969a6128ac1489bd8ee 371 main/binary-armhf/Packages.gz
 8fbe2ff17eb40eacd64a82c46114d9e4 128 main/binary-armhf/Release
SHA1:
…
SHA256:
…

В зависимости от архитектуры вашей системы Debian выбирает соответствующее расположение пакетов. Файл Packages содержит метаданные о двоичном файле, который apt хочет установить, включая местоположение и его контрольную сумму. Допустим, это машина amd64. Это означает, что мы пойдем сюда дальше:

$ curl https://pkg.cloudflare.com/cloudflared/dists/buster/main/binary-amd64/Packages
Package: cloudflared
Version: 2022.8.0
License: Apache License Version 2.0
Vendor: Cloudflare
Architecture: amd64
Maintainer: Cloudflare <[email protected]>
Installed-Size: 30736
Homepage: https://github.com/cloudflare/cloudflared
Priority: extra
Section: default
Filename: pool/main/c/cloudflared/cloudflared_2022.8.0_amd64.deb
Size: 15286808
SHA256: c47ca10a3c60ccbc34aa5750ad49f9207f855032eb1034a4de2d26916258ccc3
SHA1: 1655dd22fb069b8438b88b24cb2a80d03e31baea
MD5sum: 3aca53ccf2f9b2f584f066080557c01e
Description: Cloudflare Tunnel daemon

Обратите внимание на поле Имя файла. Отсюда apt получает deb перед запуском на нем команды dpkg. Все это означает, что репозиторий apt (и репозитории yum тоже) представляет собой структурированную файловую систему, состоящую в основном из файлов с открытым текстом и файла deb.

Файл deb представляет собой программный пакет Debian, который содержит две вещи: устанавливаемые данные (в нашем случае облака двоичный) и метаданные об устанавливаемом файле.

Создаем собственный репозиторий apt

Теперь, когда мы знаем, что происходит, когда запускается установка apt-get, давайте вернемся назад, чтобы создать репозиторий.

Создать deb файл из бинарника

Примечание: Это необязательно, но рекомендуется подписывать пакеты. См. раздел о том, как apt проверяет пакеты здесь..

Файлы Debian можно создавать с помощью инструмента dpkg-buildpackage в среде Linux или Debian. Для этого мы используем удобный инструмент командной строки под названием fpm (https://fpm.readthedocs.io/en/v1.13.1/), потому что он работает как для rpm, так и для deb.

$ fpm -s <dir> -t deb -C /path/to/project -name <project_name> –version <version>

Это дает файл .deb.

Создание файлов с открытым текстом, необходимых для поиска загрузок

Опять же, эти файлы можно создать вручную, но для их создания доступно несколько инструментов:

Мы используем репрепро.

Использовать его так же просто, как

$ reprepro buster includedeb <path/to/the/deb>

reprepro аккуратно создает кучу папок в структуре, которую мы рассмотрели выше.

Загрузите их в Cloudflare R2

Мы используем Cloudflare R2 в качестве хоста для этой структурированной файловой системы. R2 позволяет загружать и обслуживать объекты в этом структурированном формате. Это означает, что нам просто нужно загрузить файлы в той же структуре, которую создал reprepro.

Вот пример того, как мы это делаем для cloudflared.

Подавайте их от работника R2

Для детального контроля мы напишем очень легковесный Cloudflare Worker, который будет сервисом, с которым мы общаемся, и послужит интерфейсным API для apt, с которым можно общаться. Для репозитория apt он нужен только для выполнения функции GET.

Вот пример того, как это сделать: https://developers.cloudflare.com/r2/examples/demo-worker/

Собираем все вместе

Вот удобный скрипт, который мы используем для отправки cloudflared на R2, готовый для загрузки apt/yum, и включает в себя подписание и публикацию открытого ключа.

Вот и все! Теперь у вас есть собственный репозиторий apt/yum без сервера, который нужно обслуживать, плата за скачивание не взимается, и он находится в глобальной сети Cloudflare, что защищает его от больших объемов запросов. Вы можете автоматизировать многие из этих шагов, чтобы сделать их частью процесса выпуска.

Сегодня именно так cloudflared распространяется в репозиториях apt и yum: https://pkg.cloudflare.com/