Сборка OpenVPN с патчем XOR в Docker
Список статей
Этим постом я открою цикл статей по сборке OpenVPN с патчем XOR, установке и настройке сервера OpenVPN.
Соберем deb пакет для Debian 12 и скопируем его на хостовую машину, чтобы использовать для установки на других системах. Первым делом, создаем директорию, в которой будут все наши конфиги:
mkdir openvpn
Теперь переходим в нее и создаем файлы, указанные ниже.
Dockerfile
1FROM debian:12
2
3# Создаем volume
4VOLUME /release
5
6# Устанавливаем необходимые пакеты
7RUN apt-get update && \
8 apt-get install -y git \
9 gcc \
10 libssl-dev \
11 liblzo2-dev \
12 liblz4-dev \
13 libpam0g-dev \
14 make \
15 unzip \
16 sbuild \
17 build-essential \
18 debhelper \
19 fakeroot \
20 devscripts \
21 pkg-config \
22 dpkg-dev \
23 libpkcs11-helper-dev \
24 libselinux1-dev \
25 libcap-ng-dev \
26 libnl-3-dev \
27 libnl-genl-3-dev
28
29# Создаем рабочую директорию
30WORKDIR /openvpn-build
31
32# Скачиваем исходный код OpenVPN
33RUN wget https://github.com/OpenVPN/openvpn/releases/download/v2.6.13/openvpn-2.6.13.tar.gz && \
34 tar -xzf openvpn-2.6.13.tar.gz
35
36# Копируем настройки и скрипт сборки
37WORKDIR /openvpn-build/openvpn-2.6.13
38COPY ./debian debian
39COPY ./entrypoint.sh /entrypoint.sh
40
41# Делаем исполняемым
42RUN chmod +x /entrypoint.sh
43
44ENTRYPOINT ["bash", "-ex", "/entrypoint.sh"]
entrypoint.sh
1#!/bin/bash
2
3set -euo pipefail
4
5OVPN_VERSION="2.6.13"
6
7cd /openvpn-build/openvpn-$OVPN_VERSION
8
9# Скачиваем и применяем XOR patch
10mkdir -p patches && \
11 cd patches && \
12 wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/02-tunnelblick-openvpn_xorpatch-a.diff -O 02-tunnelblick-openvpn_xorpatch-a.diff && \
13 wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/03-tunnelblick-openvpn_xorpatch-b.diff -O 03-tunnelblick-openvpn_xorpatch-b.diff && \
14 wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/04-tunnelblick-openvpn_xorpatch-c.diff -O 04-tunnelblick-openvpn_xorpatch-c.diff && \
15 wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/05-tunnelblick-openvpn_xorpatch-d.diff -O 05-tunnelblick-openvpn_xorpatch-d.diff && \
16 wget -q https://raw.githubusercontent.com/Tunnelblick/Tunnelblick/master/third_party/sources/openvpn/openvpn-$OVPN_VERSION/patches/06-tunnelblick-openvpn_xorpatch-e.diff -O 06-tunnelblick-openvpn_xorpatch-e.diff
17
18# Применяем патчи
19cd /openvpn-build/openvpn-$OVPN_VERSION
20
21for patch in patches/*.diff; do
22 patch -p1 < "$patch"
23done
24
25# Правим аттрибуты
26chmod -R 644 debian/*
27chmod 755 debian/rules
28
29# Запуск сборки
30dpkg-buildpackage -us -uc
31
32# Копируем собранный deb пакет на хост
33cp /openvpn-build/openvpn_*.deb /release
34
35# Очищаем ненужные файлы
36apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
Создаем папки release и debian
mkdir {release,debian}
В папке debian нужно создать файлы с конфигурацией для сборки, приведу свои варианты.
Кратко опишу для чего каждый файл:
Имя файла | Описание |
---|---|
Changelog | Описывает всю историю изменений |
Compat | Указывает уровень совместимости с debhelper |
Control | Содержит всю основную информацию о собираемом пакете |
Rules | Описывает правила по которым будет происходить компиляции пакета |
Copyright | Содержит информацию об авторских правах и лицензии исходников |
Подробнее с форматом можно ознакомиться по ссылке: https://www.debian.org/doc/manuals/maint-guide/dreq.ru.html
debian/changelog
openvpn (2.6.13) unstable; urgency=medium
* Custom build with XOR patch for Tunnelblick
-- Your Name <your@mail> Thu, 01 Jan 1970 00:00:00 +0000
debian/compat
12
debian/control
Source: openvpn
Section: net
Priority: optional
Maintainer: ShDm <[email protected]>
Build-Depends: debhelper (>= 12), libssl-dev, liblz4-dev, libpkcs11-helper-dev, libpam0g-dev, libselinux1-dev, libcap-ng-dev
Standards-Version: 2.6.13
Package: openvpn
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Recommends: easy-rsa
Suggests: openssl, resolvconf, openvpn-dco-dkms, openvpn-systemd-resolved
Homepage: https://openvpn.net/
Description: OpenVPN with XOR
Custom OpenVPN build with XOR patch from Tunnelblick
debian/copyright
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: OpenVPN
Source: https://github.com/OpenVPN/openvpn
Files: *
Copyright: 2001-2023 OpenVPN Inc.
License: GPL-2+
License: GPL-2+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
debian/rules
#!/usr/bin/make -f
%:
dh $@
Теперь запускаем и ждем выполнения, процесс может быть долгим, все зависит от характеристик оборудования, на котором запускается сборка. Сперва соберем наш образ:
docker build -t openvpn-build .
После успешной сборки запускаем контейнер, внутри которого уже соберется deb пакет:
docker run --rm -v $(pwd)/release:/release -t openvpn openvpn-build
Если ошибок в конце нет, значит все прошло успешно и собранный deb пакет должен находиться в папке release
, а контейнер будет удален, так как мы запустили сборку с флагом --rm
.
Информацию о собранном пакете можем проверить командой:
apt info ./release/openvpn_2.6.13_amd64.deb
Вывод будет примерно таким:
Package: openvpn
Version: 2.6.13
Priority: optional
Section: net
Maintainer: Your Name <your@mail>
Installed-Size: 1,177 kB
Depends: libc6 (>= 2.34), libcap-ng0 (>= 0.7.9), liblz4-1 (>= 0.0~r130), liblzo2-2 (>= 2.02), libnl-3-200 (>= 3.2.7), libnl-genl-3-200 (>= 3.2.7), libpam0g (>= 0.99.7.1), libssl3 (>= 3.0.0)
Recommends: easy-rsa
Suggests: openssl, resolvconf, openvpn-dco-dkms, openvpn-systemd-resolved
Homepage: https://openvpn.net/
Download-Size: 522 kB
APT-Sources: /opt/openvpn/release/openvpn_2.6.13_amd64.deb
Description: OpenVPN with XOR
Custom OpenVPN build with XOR patch from Tunnelblick
Теперь собранный пакет можно использовать для установки. Нужно учесть, что для обновления версии потребуется заново производить сборку и важно, чтобы под желаемую версию OpenVPN уже существовали актуальные патчи от Tunnelblick.
Исходники OpenVPN:
https://github.com/OpenVPN/openvpn
Исходники патчей Tunnelblick:
https://github.com/Tunnelblick/Tunnelblick/tree/master/third_party/sources/openvpn