Dpkg buildpackage ошибка не удалось открыть файл debian changelog no such file or directory

Обновлено: 05.07.2024

Для полной (пере)сборки пакета, необходимо убедиться в установке следующего:

пакетов, перечисленных в поле Build-Depends (смотрите Раздел 4.1, «Файл control ») и

пакетов, перечисленных в поле Build-Depends-indep (смотрите Раздел 4.1, «Файл control »).

Затем выполните следующую команду в каталоге с исходным кодом:

Она сделает всё, что необходимо для создания всех двоичных пакетов и пакета с исходным кодом. Она выполняет:

очистку дерева исходного кода ( debian/rules clean )

сборку пакета с исходным кодом ( dpkg-source -b )

сборку программы ( debian/rules build )

сборку двоичных пакетов ( fakeroot debian/rules binary )

создаёт файл .dsc

Для неродного пакета Debian, например, gentoo , после сборки пакетов вы увидите следующие файлы в родительском каталоге (

This is the original upstream source code tarball, merely renamed to the above so that it adheres to the Debian standard. Note that this was created initially by the command dh_make -f ../gentoo-0.9.12.tar.gz .

Этот файл содержит информацию о содержимом исходного кода. Он файл генерируется из вашего файла control и используется при распаковке пакета с исходным кодом с помощью dpkg-source (1) .

В этом сжатом архиве tar находится содержимое вашего каталога debian . Все дополнения, вносимые вами в исходный код, хранятся в виде заплат quilt в каталоге debian/patches .

Если кто-либо захочет пересоздать ваш пакет с нуля, они легко смогут сделать это, используя перечисленные выше три файла. Процедура извлечения тривиальна: просто скопируйте куда-нибудь три файла и выполните dpkg-source -x gentoo_0.9.12-1.dsc [64] .

Это ваш собранный двоичный пакет. Вы можете использовать dpkg для его установки и удаления, как любой другой пакет.

В этом файле описываются все изменения, сделанные в данной редакции пакета, и он используется программами поддержки FTP-архива Debian для внесения пакетов (как двоичных, так и с исходным кодом) в архив. Он частично генерируется из файлов changelog и .dsc .

/.gnupg/ directory, before uploading them to the Debian FTP archive. The GPG signature provides the proof that these files are really yours, using your public GPG key.

The debsign command can be made to sign with your specified secret GPG key ID (good for sponsoring packages) with the following in the

6.2. Autobuilder

Debian поддерживает много переносов с помощью сети autobuilder, в которой работает служба buildd на компьютерах различных архитектур. Хотя вам и не придётся этим заниматься, но всё же следует узнать, что будет происходить с вашими пакетами. Рассмотрим в общих чертах как ваш пакет пересобирается для различных архитектур [65] .

пакет build-essential и

пакеты, перечисленные в поле Build-Depends (смотрите Раздел 4.1, «Файл control »).

Затем в каталоге с исходным кодом вызывается команда

Она делает всё необходимое для сборки пакетов для данной архитектуры. А именно:

очистку дерева исходного кода ( debian/rules clean )

сборку программы ( debian/rules build )

сборку архитектурно-зависимых двоичных пакетов ( fakeroot debian/rules binary-arch )

подпись файла исходного кода .dsc с помощью gpg

Так ваш пакет собирается для различных архитектур.

Хотя пакеты, перечисленные в поле Build-Depends-indep , должны быть установлены при ручном пакетировании (смотрите Раздел 6.1, «Полная (пере)сборка»), их не нужно устанавливать при использовании системы autobuilder, так как она занимается исключительно архитектурно-зависимыми двоичными пакетами [66] . Это различие между обычным пакетированием и использованием autobuilder определяет, где должны быть перечислены необходимые пакеты: в поле Build-Depends или Build-Depends-indep файла debian/control (смотрите Раздел 4.1, «Файл control »).

6.3. Команда debuild

Для автоматизации действий по сборки с помощью dpkg-buildpackage можно использовать команду debuild . Смотрите debuild (1) .

The debuild command executes the lintian command to make a static check after building the Debian package. The lintian command can be customized with the following in the

Для очистки каталога исходного кода и пересборки пакета выполните:

Для очистки древа исходного кода выполните:

6.4. Пакет pbuilder

В чистой среде сборки ( chroot ) для проверки пакетных зависимостей очень полезен пакет pbuilder [67] . Он поможет убедиться в чистоте сборки под управлением auto-builder из sid для различных архитектур и избежать опасной ошибки FTBFS (ошибка сборки из исходного кода), которая всегда относится к категории RC (критична для данного выпуска) [68] .

Давайте настроим пакет pbuilder следующим образом:

дадим пользователю право записи в каталог /var/cache/pbuilder/result

создадим каталог для размещения сценариев, например, /var/cache/pbuilder/hooks , доступный пользователю для записи.

/.pbuilderrc или в /etc/pbuilderrc следующие строки:

Для начальной инициализации локальной системы chroot пакета pbuilder выполним:

Если у вас имеется готовый пакет исходного кода, то в каталоге, где расположены файлы foo .orig.tar.gz , foo .debian.tar.gz и foo .dsc , для обновления локальной системы chroot пакета pbuilder и сборки соответствующих двоичных пакетов выполните следующие команды:

Только что собранные пакеты без подписи GPG будут помещены в каталог /var/cache/pbuilder/result/ , их владельцем будет обычный пользователь (не суперпользователь).

Если у вас есть обновлённое древо исходного кода, но нет собранных пакетов с исходным кодом, выполните в каталоге, где размещён подкаталог debian , другие команды:

Вы можете войти внутрь окружения chroot и настроить его командой pbuilder --login --save-after-login . Изменения будут сохранены, когда вы покинете оболочку, нажав ^D (Control-D).

Последняя версия команды lintian может быть вызвана в окружении chroot , используя сценарий /var/cache/pbuilder/hooks/ /B90lintian , настроенный следующим образом [69] :

Для правильной сборки пакета для sid вам потребуется самое свежее окружение этой ветви, однако миграция на sid всей системы может быть нежелательна. Пакет pbuilder поможет вам в этой ситуации.

You may need to update your stable packages after their release for stable-proposed-updates , stable/updates , etc. [70] For such occasions, the fact that you may be running a sid system is not a good enough excuse for failing to update them promptly. The pbuilder package can help you to access environments of almost any Debian derivative distribution of the same architecture.

6.5. git-buildpackage command and similar

Если автор программы применяет систему управления кодом [71] , то и вы можете использовать её возможности. Это упрощает слияние и выборку заплат для исходного кода. Для каждой VCS существуют специализированные инструменты, позволяющие производить сборку пакетов Debian:

git-buildpackage : инструменты для пакетирования в репозиториях Git.

svn-buildpackage : вспомогательные программы для сопровождения пакетов Debian в Subversion.

cvs-buildpackage : набор сценариев для пакетирования в CVS.

gbp-import-dsc (1) : import a previous Debian package to a Git repository.

gbp-import-orig (1) : import a new upstream tar to a Git repository.

gbp-dch (1) : generate the Debian changelog from Git commit messages.

git-buildpackage (1) : сборка пакетов Debian из репозитория Git.

git-pbuilder (1) : сборка пакетов Debian из репозитория Git с помощью pbuilder / cowbuilder .

Для ведения пакетирования в этих командах используются 3 ветви:

main — дерево родных пакетов Debian.

upstream — дерево авторского исходного кода.

pristine-tar для авторского tar, создаваемый при использовании параметра --pristine-tar . [73]

Для настройки git-buildpackage используйте файл

/.gbp.conf . Смотрите gbp.conf (5) . [74]

6.6. Быстрая пересборка

При работе над большим пакетом, возможно, вы не захотите каждый раз полностью пересобирать его из исходного кода при изменении настроек в файле debian/rules . Исключительно для тестовых целей вы можете создать deb-файл без пересборки кода следующим образом [75] :

Или просто выполните для выяснения возможна ли сборка пакета:

После выбора оптимальных настроек не забудьте пересобрать пакет стандартными средствами. Полученные таким способом файлы .deb могут быть загружены в архив некорректно, если вы попытаетесь это сделать.

6.7. Иерархия команд

Вот краткая сводка команд, которые объединяются в единую систему для сборки пакетов. Есть много способов сделать одно и тоже.

debian/rules = сценарий сопровождающего для сборки пакета

dpkg-buildpackage = ключевой инструмент сборки пакета

debuild = dpkg-buildpackage + lintian (сборка при проверенных переменных окружение)

pbuilder = ключевой инструмент chroot-окружения Debian

pdebuild = pbuilder + dpkg-buildpackage (сборка в chroot)

cowbuilder = ускорение выполнения pbuilder

git-pbuilder = простой синтаксис командной строки для pdebuild (используется в gbp buildpackge )

gbp = управление исходным кодом Debian в репозитории git

gbp buildpackge = pbuilder + dpkg-buildpackage + gbp

Хотя высокоуровневые команды, такие как gbp buildpackge и pbuilder , предоставляют замечательную среду сборки пакета, необходимо понимать какие нижележащие команды, такие как debian/rules и dpkg-buildpackage , в них используются.

[64] Вы можете избежать наложения заплат quilt в формате исходного кода 3.0 (quilt) в конце извлечения, указав параметр --skip-patches . Или же вы можете выполнить quilt pop -a после обычной распаковки.

[65] На самом деле, работа системы autobuilder гораздо сложнее, однако её детальное описание не для этого документа.

[66] В отличие от пакета pbuilder ,окружение chroot из пакета sbuild , который используется системой autobuilder, не требует минимальной системы и допускает наличие установленных пакетов, не являющихся необходимыми.

[67] Так как пакет pbuilder всё ещё развивается, за подробностями настройки обратитесь к его официальной документации.

[69] Здесь предполагается, что HOOKDIR=/var/cache/pbuilder/hooks . Примеры вызываемых (hook) сценариев можно найти в каталоге /usr/share/doc/pbuilder/examples .

[70] Есть некоторые ограничения для такого обновления пакета из stable .

[73] The --pristine-tar option invokes the pristine-tar command, which can regenerate an exact copy of a pristine upstream tarball using only a small binary delta file and the contents of the tarball that are typically kept in an upstream branch in the VCS.

[74] Несколько веб-ресурсов для опытных пользователей:

Сборка пакетов Debian с помощью git-buildpackage ( /usr/share/doc/git-buildpackage/manual-html/gbp.html )

[75] Environment variables that are normally configured to proper values are not set by this method. Never create real packages to be uploaded using this quick method.

Не подскажете что тут я делаю не так и что нужно сделать для сборки дистрибутива?




Пытаюсь создать дистрибутив Debian-дистрибутив OpenSCADA на Beaglebone Black (BBB) в соответствии с руководством. На разных версиях исходников сталкиваюсь с разными ошибками :(
Информация об ОС:
Distributor ID: Debian
Description: Debian GNU/Linux 7.8 (wheezy)
Release: 7.8
Codename: wheezy

Что сделал:
Скачал файлы openscada-0.9+r2287.tar.xz и openscada-res-0.9+r2287.tar.xz

Learn, learn and learn better than work, work and work.


Если честно - я не специалист в Linux и осваиваю его параллельно с освоением openscada.
Судя по названиям файлов я предположил, что для архитектуры ARM тут ничего нет.
Можно какие-то из этих файлов скачать и сконфигурировать сборку для себя? (без "лишних" модулей)


В данный момент нет возможности подключения BBB к интернету, вследствие чего пришлось отказаться от метода описанного в руководстве:

А просто сборка проходит?
autoreconf
configure
make
.

make и make install отработали.. правда с ошибками типа:
make[1]: Entering directory `/home/debian/build/openscada-0.9+r2287'
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found
make[1]: Leaving directory `/home/debian/build/openscada-0.9+r2287'

/bin/mkdir -p '/usr/share/openscada/AGLKS'
/usr/bin/install -c -m 644 ./data/ModelsDB/AGLKS/*.db '/usr/share/openscada/AGLKS'
/usr/bin/install: cannot stat `./data/ModelsDB/AGLKS/*.db': No such file or directory
make[2]: *** [install-AGLKSdbDATA] Error 1
make[2]: Leaving directory `/home/debian/build/openscada-0.9+r2287'
make[1]: *** [install-am] Error 2
make[1]: Leaving directory `/home/debian/build/openscada-0.9+r2287'
make: *** [install-recursive] Error 1

По второму надеюсь что это просто AGLKS и бойлер будут недоступны..



А просто сборка проходит?
autoreconf
configure
make
.

make и make install отработали.. правда с ошибками типа:
make[1]: Entering directory `/home/debian/build/openscada-0.9+r2287'
/bin/bash: line 2: sqlite3: command not found
/bin/bash: line 2: sqlite3: command not found

Документацию внимательно читайте, если уж берётесь собирать!

Общие требования для сборки OpenSCADA
ОС Linux: Дистрибутив операционной системы Linux (ALTLinux, SuSELinux, Mandriva, ASPLinux, Fedora, Debian, Ubuntu . )
g++: Компилятор языка C++ версии 3.3 или более из коллекции компиляторов GCC, включая библиотеку GLibC (>=2.3) или uCLibC (>= 0.9.32).
autotools (autoconf, automake, libtool): Инструменты формирования сборочной среды OpenSCADA. Нужны только в случае изменения сборочной среды OpenSCADA, например для добавления нового модуля или изменения фиксированных параметров сборки. Automake >= 1.9.
gettext: Группа утилит для подготовки и компиляции переводов интерфейса программ на различные языки в соответствии со стандартом интернационализации I18N.
sqlite3: Утилита управления файлами БД SQLite3.
. Learn, learn and learn better than work, work and work. "roman" wrote:
Документацию внимательно читайте, если уж берётесь собирать!

Роман, спасибо! Установка прошла успешно.
Но всё же это не основная проблема и не основной вопрос. Основные следующие:
1. Правильно ли я понимаю что готового дистрибутива для Debian 7 под архитектуру ARM нельзя просто скачать и установить? И, соответственно, чтобы openscada заработала на описанной мною платформе, в составе только необходимых модулей, требуется её сборка из исходников в целевой среде?
2. Для тиражирования требуемой сборки openscada необходимо создать Debian-дистрибутив?
3. И к началу темы - ошибка при сборке дистрибутива:

Что в этой последовательности действий неверно?



Что в этой последовательности действий неверно?

Для сборки OpenSCADA из исходных текстов требуется опыт сборки свободного ПО, а также базовые знания в ОС Linux и используемого дистрибутива Linux, что позволит корректно удовлетворять зависимости и решать возможные проблемы сборки.

С чего Вы взяли, что после прямого требования к квалификации, Вас тут будут ещё и учить?

Создание пакета Debian с нуля является своего рода волшебным процессом. Вы могли бы начать гуглить с запросом “Создание пакета Debian с нуля” и получить множество результатов, ни один из которых не стал бы тем, который Вам необходим. Несомненно, Вы найдете большой обзор команд, которые используются в Debian и, если Вы роете достаточно глубоко, Вы сможете все же найти пару команд, которые помогут создать базовый пакет Debian, но не смогут объяснить, что происходит. Более подробную информацию о том, что все же «происходит» Вы можете получить, в данном посте мы попробуем это частично затронуть.


Во-первых, необходимо начать с установки некоторых зависимостей. Все это руководство было сделано на основе Ubuntu 14.04, но подходит для большинства операционных систем на основе Debian. Выполните следующую команду, чтобы приступить к работе.


Далее нам нужно будет создать пакет, в котором мы будем размещать все компоненты. В данном случае пакет будет называться “mylittledeb”. Для установки пакета используются следующие команды:


Содержание hello.c должно содержать классический “Hello, World”.


Make-файл должен иметь следующее содержание. Информация для того, кто не знаком с Make-файлами — нужно применять «_», а не пробел или позже при выполнении некоторых команд Вы рискуете получить ошибки. Кроме того, обратите внимание, что очистка целевого элемента установлена ||true после удаления бинарного файла. Указанное рассогласование и другие элементы Debian мы будем использовать в дальнейшем запуская make clean перед созданием.

Наконец, мы можем приступить к фактическому созданию пакета! Чтобы инициализировать пакет Debian, мы будем использовать удобную dh_make программу, которую мы устанавливали раньше. При выполнении следующей команды с вводом тех же настроек, которые указаны ниже, Вы должны получить ошибку, но это плановая ошибка. В данном случае важно понять, что такое dh_make и как решить другие проблемы, с которыми Вы, вероятно, столкнетесь позже при работе с более усовершенствованными пакетами.

Теперь давайте выясним, что за файл orig.tar.xz. Официальная документация говорит, что это — просто tarball исходного кода, который в нашем случае является просто текущим состоянием каталога. Однако, возможно, что-то особенное в этом orig.tar.xz файле есть. Поэтому давайте посмотрим, как он создается. Выполнение следующей команды позволит Вам снести исходный код для dh-make. Вы можете сделать это в tmp, так как потребуется очистить все файлы, если вы делаете это в вашем пакете mylittledeb.


Теперь, когда есть исходный код, давайте посмотрим, что происходит. Открывая сценарий dh_make, можно найти внутри файл Perl. При поиске orig.tar.xz с Vim приходим к следующей строке.


Это просто старый архивный файл tar. Однако у Вас должно быть некоторое понимание того, что все эти волшебные Debian сценарии делаются на случай, если все пойдет не так. Теперь давайте вернемся в нашу папку mylittledeb и запустим следующее:


Теперь вы должны увидеть папку DEBiAN в вашей папке mylittledeb со следующим содержимым:


Файлы .ex и .EX являются примерами файлов. В большинстве из них нет никакой необходимости.

changelog — этот файл управляет Вашей версией пакета, а также кратко приводит объяснение о том, что изменилось, начиная с последнего обновления. Вот то, на что должен быть похож основной файл.


'mylittledeb' будет содержать в названии '0.0.1' это версия пакета и '1' в конце это — версия Debian. Нестабильный дистрибутив, для которого пакет Debian является целевым и переноса на различные дистрибутивы, сделан за пределами этого процесса. В данном случае мы просто будем использовать trusty, так как все это строится на Ubuntu 14.04. После того, как Вы все сделали это выглядит примерно так:


Последняя строка должна содержать имя, связанное с ключом GPG, если вы хотите подписать свои пакеты. Но мы еще дойдем до подписи пакета. На данный момент Вы можете проигнорировать этот пункт.

compat — это волшебный файл, и Вы должны всегда использовать цифру 9. Это — примерно единственная информация, которую Вы можете найти на нем. Почему именно 9? Ну, она используется всеми инструментами в пакете debhelper, это будет гарантировать, что ваш файл Debian совместим.

control — файл управления содержит версию, независимую информацию о Вашем пакете, которую увидят люди при выполнении 'apt-cache show mylittledeb'. Это все довольно хорошо объяснено в вики Debian. Ваш пакет должен выглядеть следующим образом.


Нужно понимать, что сборка зависимостей должна быть построена правильно, так как включает в себя все зависимости для вашего пакета. Они не должны быть добавлены к Depends , который включает только зависимости, которые запускают Вашу программу. Здесь важно отметить, что и — это две волшебные строки, вызываемые командой dh_shlibdeps. Эта команда полезна для определения зависимостей, Ваших двоичных потребностей, которые не сразу очевидны.

copyright — это самый очевидный из файлов, и если Вы заинтересованы выпустить пакет в общий доступ, он просто обязан содержать данный файл.

docs — этот файл может перечислить имена всех файлов, которые вы хотели бы видеть включенными в комплект.

rules — файл правил Debian, содержит всю информацию о создании вашего пакет и является специальной версией Makefile. В файле указываются дополнительные цели, которые используются в создании файлов Debian. По умолчанию, это очень простой файл, который просто запускает основные команды. Тем не менее, если вам нужно что-то переопределить, например, как ваш каталог будет очищаться до сборки, Вам стоит сделать что-то вроде этого.


Все доступные переопределения перечислены в этой вики статье, а также более детальное описания файла правил. По умолчанию все инструменты debhelper используют этот файл таким образом, например, если мы хотим очистить директорию, это должно быть сделано перед созданием нового пакета, то выполняется следующая команда 'dh clean'. Эта команда в свою очередь вызывает dh_testdir, dh_auto_clean и dh_clean, что в свою очередь вызывает некоторые perl скрипты.

source/format — этот файл кажется довольно простым. На данный момент Вы можете оставить его как есть. Просто знайте, что это формат компилирования, специфический способ применения патчей к восходящему тарболу который мы создали ранее.

*.install- этот файл не создается автоматически, так что вам нужно будет сделать файл с именем mylittledeb.install. Любой файл, который был добавлен с установкой, будет использоваться, чтобы установить двоичный файл. Файл или директория, расположенные в системе, используется при установке пакета. Так как у нас есть «hello world» двоичный файл, мы должны будем поместить это в пользовательскую систему. Следующий файл поместит наш «hello world» двоичный файл в пользовательскую директорию /usr/bin.


Остальная часть файлов, заканчивающихся на .ex и.EX, содержит описания того, что делают различные файлы. Их лучше же конечно сохранить, но и от удаления ничего страшного не произойдет.

Теперь простая часть. Выполните следующую команду.


Если раскомментировать export DH_VERBOSE=1 вы можете увидеть все команды, которые выполняются в данный момент. Все эти команды Вы можете переопределить, по этому в случае возникновения проблемы с своим собственным пакетом Вы сможете определить ее причину.

Вот вывод приведенной выше команды:

Обратите внимание, что подписать изменения не удалось, потому что, как было сказано выше, ключ GPG не был создан. Это не страшно, даже не смотря на то, что получили такую ошибку пакет фактически был создан успешно.

Теперь Вы должны увидеть набор новых файлов в том же каталоге, где размещена Ваша папка mylittledeb. Нас интересует файл с названием «mylittledeb_0.0.1-1_amd64.deb», который может быть установлен с помощью команды:


Теперь вы должны иметь возможность запускать «Hello» из любого места на вашем компьютере, и получить текст «Hello, World».

Ниже приведены следующие шаги.

  1. создать ключ gpg используя gpg --gen-key
  2. создайте необходимые каталоги для упаковки (папка для пакета с именем-версией, подпапка debian) и запустите dh_make --createorig в консоли. На этом шаге были сгенерированы необходимые файлы для упаковки в папку debian
  3. отредактируйте необходимые файлы в папке ./debian

список файлов в папке ./debian

Ниже приводится содержание важных файлов.

это где двоичные файлы должны быть установлены.

кошачий журнал изменений

наконец, я запускаю команду debuild , но я получил ошибку ниже.

на самом деле внутри папки debian не создается созданная папка tmp . debhelper отметил состояние выполнения команды debuild до уровня dh_install. Выходные файлы также созданы за исключением вышеуказанного набора файлов.

Пожалуйста, кто-нибудь, помогите идти вперед. -Спасибо.

Как говорится в справочной странице для dh_install , назначение dh_install и файлов, которые он читает, обычно используются для одной из двух целей:

  • Укажите, какие файлы попадают в несколько бинарных пакетов из одного источника; или же
  • Установите файлы, которые не обрабатываются системой сборки пакетов, или переместите файлы в разные каталоги

Если у вас есть система сборки, которая уже может собрать и установить все файлы, необходимые для бинарного пакета, в нужных каталогах, и вы собираете только один двоичный пакет из своего источника, то вам вообще не нужен файл debian/install .

Вы упомянули, что работаете с проектом на основе Makefile . Пока он поддерживает стандартные цели, такие как make all и make install , и учитывает переменную $DESTDIR для установки, нет необходимости в debian/install .

Фактически, в выводе, который вы опубликовали, вы можете увидеть пару строк, начинающихся с find , выполняемых непосредственно перед dh_install . Я предполагаю, что выполняется цель вашего проекта make install , и мне кажется, что она уже устанавливает файлы по правильному пути, а именно debian/cscore/opt/Motorola-scanner/bin . Поэтому я думаю, что ваша сборка может работать без debian/install .

Хорошо, я понимаю проблему.

Случай А

Dh_auto_install поместит пакеты в debian/<project-name> , если есть только один пакет.

Случай B

Однако он поместит их под debian/tmp , если у вас есть несколько пакетов (то есть несколько файлов blah.install и несколько объявлений пакетов в файле control ).

Смотрите информацию здесь:

Каким-то образом dh_install выбирает файлы, только если они находятся под debian/tmp , и полностью завершается ошибкой, если у вас был только один пакет. Так что запуск dh_install , вероятно, не требуется . но если вы используете pdebuilder-dist , он запускается по умолчанию.

После обновления домашней машины с Debian 10 (Buster) на Debian 11 (Bullseye) методом In-Place Upgrade, можно обнаружить, что клиентское ПО SSTP VPN, установленное и работающее ранее в Debian 10 больше не работает в Debian 11. В общем-то в этом нет ничего удивительного, так как в ходе выполнения обновления старые пакеты SSTP клиента могут быть удалены из системы, как несовместимые с основной пакетной базой новой версии ОС. В этой заметке мы рассмотрим один из вариантов того, как можно вернуть утраченный функционал SSTP клиента в Debian Bullseye.

Ссылку на исходные коды проекта SSTP клиента для Linux можно найти, например, на сайте проекта - sstp-client.sourceforge.net. Однако их самостоятельная сборка под определённый дистрибутив Linux классическим методом "configure/make/make install" занятие не очень интересное и "модное". В окружении Debian гораздо интересней собрать готовые deb-пакеты, которые можно будет в дальнейшем неоднократно использовать на других системах, оперируя пакетным менеджером APT.

Для систем Ubuntu (и производных от Ubuntu) можно использовать готовые пакеты, предоставляемые автором проекта Eivind Naess в его Personal Packages Archive (PPA). В случае с Debian, ранее мне удалось использовать эти же пакеты и они без особых проблем устанавливаюсь и работали в Debian 10. Однако после обновления до Debian 11 последние актуальные версии пакетов в этом PPA в моём случае не заработали. И основной причиной этого стало то, что в Debian 11 по умолчанию используется более новая версия пакета "ppp" (2.4.9), чем та, что требуется для актуальных пакетов из PPA (2.4.7).

Вообще, если "пошуршать" в поисковом индексе Google, то можно найти частные репозитории, где уже есть готовые собранные deb-пакеты, например, здесь. Но использование пакетов из таких частных репозиториев всегда несёт дополнительные риски. К тому же, как говорится, мы не ищем лёгких путей, и поэтому попробуем самостоятельно собрать нужные нам deb-пакеты в собственном системном окружении.

Перед сборкой deb-пакетов, нам потребуется "дебианизировать" исходные коды. Учитывая то, что задача эта хоть и вполне подъёмная, но и не совсем тривиальная, мы можем воспользоваться готовыми файлами дебианизации, которые уже были подготовлены ранее для сборки пакетов под Ubuntu.

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

Подготовка сборочной среды

Устанавливаем на время сборки пакеты, необходимые для обеспечения общей сборочной среды:

Так как в нашем случае, на системе используется графическая среда Gnome 3.38, поставляемая в составе c Debian 11, то помимо сборки пакетов самого SSTP клиента, нам может понадобиться сборка пакетов расширения графического интерфейса Network Manager.

Устанавливаем пакеты, необходимые для возможности сборки SSTP клиента:

Устанавливаем пакеты, необходимые для возможности сборки пакетов расширения Network Manager:

Собираем пакеты SSTP клиента

Создаём временный каталог, переходим в него и скачиваем в этот каталог актуальные исходные файлы sstp-client с файлами дебианизации:

В текущем каталоге запускаем команду распаковки исходных текстов ( .orig.tar.gz ) и внедрения файлов дебианизации ( .debian.tar.xz ) с помощью файла *.dsc

Перед сборкой можем добавить запись в debian/changelog о новом релизе пакета, немного подняв версию пакета. Для этого переходим в подготовленный подкаталог с уже дебианизированными исходниками ( ./sstp-client-1.0.15 ) и выполняем команду добавления информации в changelog:

В открывшемся текстовом редакторе пишем какой-нибудь комментарий о версии и, при желании, указываем информацию о сборщике пакета (желтым подчёркнуты изменения в changelog, которые были внесены в нашем случае):

Edit sstp-client changelog for deb package in Debian Linux with debchange tool

Сохраняем изменения в файле и закрываем его.

Теперь можем приступить к сборке deb-пакетов. Выполняем в текущем каталоге команду сборки:

Проверяем результат сборки, перейдя на подкаталог уровнем выше, где должны появится готовые deb-пакеты.

Из собранных deb-пакетов нам потребуется установить лишь 3 пакета:

Первые 2 пакета нужны для работы SSTP клиента, как такового. Третий пакет потребуется нам лишь время, для последующей сборки пакетов для Network Manager.

Собираем пакеты интеграции в Network Manager

Создаём временный каталог, переходим в него и скачиваем исходные файлы network-manager-sstp с файлами дебианизации:

В текущем каталоге запускаем команду распаковки исходных текстов ( .orig.tar.bz2 ) и внедрения файлов дебианизации ( .debian.tar.xz ) с помощью файла *.dsc :

Перед сборкой можем добавить запись в debian/changelog о новом релизе пакета. Для этого переходим в подготовленный подкаталог с уже дебианизированными исходниками ( ./network-manager-sstp-1.2.6 ) и выполняем команду добавления информации в changelog:

В открывшемся текстовом редакторе пишем комментарий о версии и указываем информацию о сборщике пакета:

Edit network-manager-sstp changelog for deb package in Debian Linux with debchange tool

Сохраняем изменения в файле и закрываем его.

Выполняем сборку пакетов в текущем каталоге:

Проверяем результат сборки, перейдя на подкаталог уровнем выше, где должны появится готовые deb-пакеты:

Устанавливаем 2 пакета, которые потребуются для возможности управления настройками SSTP клиента из графического интерфейса Network Manager:

Проверка результата

В результате предыдущих действий мы имеем в системе 5 установленных пакетов:

Уже сейчас функциональность SSTP клиента должна стать нам доступной и работать. Можем настроить VPN-подключение по протоколу SSTP в графической среде Gnome.

VPN settings in Gnome 3 Network Manager on Debian Linux

Очистка после сборки

После сборки и установки, пакет libsstp-api-0-dev нам больше уже не нужен, так как он требовался исключительно для сборки других пакетов. Его можем удалить:

Также можем удалить все пакеты, которые мы ранее устанавливали для обеспечения сборочной среды (второй командой удаляем все неиспользуемые более пакеты-зависимости):

При желании сохраняем в отдельное место все собранные deb-пакеты, а затем удаляем временные каталоги сборки со всем содержимым:

Любители "мануальной терапии", закрывающие глаза на ранее упомянутые риски использования частных источников, и желающие забрать уже готовые (и проверенные в работе) файлы deb-пакетов под Debian 11.0 64-bits могут заглянуть сюда.

Читайте также: