РуководÑтво Ð´Ð»Ñ Ñопровождающих Debian Osamu Aoki <osamu@debian.org> Лев Ламберов Russian Translation (2018) <dogsleg@debian.org> ÐвторÑкие права © 2014-2024 Osamu Aoki Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without    restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.    Данное руководÑтво было Ñоздано на оÑнове информации, ÑодержащейÑÑ Ð² Ñледующих документах: * «Создание пакета Debian (руководÑтво по debmake)», copyright © 1997 Джалдхар Ð’Ð¸Ð°Ñ * «ПрактичеÑкое руководÑтво нового Ñопровождающего по Ñозданию    пакетов Debian», copyright © 1997 Уилл Лоу * «РуководÑтво начинающего разработчика Debian», copyright © 1998—2002 ДжоÑип Родин, 2005—2017 ОÑаму Ðоки, 2010 КрÑйг Смолл, а также 2010 РафаÑль Херцог    ПоÑледнÑÑ Ð²ÐµÑ€ÑÐ¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ руководÑтва доÑтупна:    * in the debmake-doc package and * at the Debian Documentation web site. ÐÐ½Ð½Ð¾Ñ‚Ð°Ñ†Ð¸Ñ Ð”Ð°Ð½Ð½Ð¾Ðµ учебное руководÑтво опиÑывает Ñборку пакета Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake и предназначено Ð´Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ñ‹Ñ… пользователей Debian и будущих разработчиков. РуководÑтво Ñконцентрировано на Ñовременном Ñтиле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² и Ñодержит множеÑтво проÑÑ‚Ñ‹Ñ… примеров: * Создание пакета, Ñодержащего Ñценарий командной оболочки POSIX * Создание пакета, Ñодержащего Ñценарий на Ñзыке Python3 * C и Makefile/Autotools/CMake * ÐеÑколько двоичных пакетов Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ñемой библиотекой и Ñ‚.д. Данное «РуководÑтво Ð´Ð»Ñ Ñопровождающих Debian» может раÑÑматриватьÑÑ ÐºÐ°Ðº замена «РуководÑтва начинающего разработчика Debian». --------------------------------------------------------------------- Содержание 1. ПредиÑловие 2. Обзор 3. Ðеобходимые предварительные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ 3.1. Люди вокруг Debian 3.2. Как принÑÑ‚ÑŒ учаÑтие 3.3. Ð¡Ð¾Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ° Debian 3.4. ТехничеÑÐºÐ°Ñ Ð¿Ð°Ð¼Ñтка 3.5. Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Debian 3.6. Справочные реÑурÑÑ‹ 3.7. Ð¡Ð¸Ñ‚ÑƒÐ°Ñ†Ð¸Ñ Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð¾Ð¼ 3.8. Подходы к учаÑтию 3.9. Ðачинающий учаÑтник и Ñопровождающий 4. ÐаÑтройка инÑтрументов 4.1. Email setup 4.2. mc setup 4.3. git setup 4.4. quilt setup 4.5. devscripts setup 4.6. sbuild setup 4.7. Persistent chroot setup 4.8. gbp setup 4.9. HTTP-прокÑи 4.10. ЧаÑтный репозиторий Debian 4.11. Virtual machines 4.12. Local network with virtual machines 5. Simple packaging 5.1. Packaging tarball 5.2. ÐžÐ±Ñ‰Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½Ð° 5.3. Что такое debmake? 5.4. Что такое debuild? 5.5. Шаг 1: получение иÑходного кода оÑновной ветки разработки 5.6. Step 2: Generate template files with debmake 5.7. Шаг 3: изменение шаблонных файлов 5.8. Step 4: Building package with debuild 5.9. Step 3 (alternatives): Modification to the upstream source 5.10. Patch by «diff -u» approach 5.11. Patch by dquilt approach 5.12. Patch by «dpkg-source --auto-commit» approach 6. Basics for packaging 6.1. Работа по Ñозданию пакета 6.2. debhelper package 6.3. Ð˜Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° и верÑÐ¸Ñ 6.4. Родной пакет Debian 6.5. debian/rules file 6.6. debian/control file 6.7. debian/changelog file 6.8. debian/copyright file 6.9. debian/patches/* files 6.10. debian/source/include-binaries file 6.11. debian/watch file 6.12. debian/upstream/signing-key.asc file 6.13. debian/salsa-ci.yml file 6.14. Other debian/* files 7. Sanitization of the source 7.1. Fix with Files-Excluded 7.2. Fix with «debian/rules clean» 7.3. Fix with extend-diff-ignore 7.4. Fix with tar-ignore 7.5. Fix with «git clean -dfx» 8. More on packaging 8.1. Package customization 8.2. Customized debian/rules 8.3. Variables for debian/rules 8.4. Ðовый выпуÑк оÑновной ветки 8.5. Manage patch queue with dquilt 8.6. Build commands 8.7. Note on sbuild 8.8. Special build cases 8.9. Загрузите orig.tar.gz 8.10. Пропущенные загрузки 8.11. Bug reports 9. Продвинутые темы работы над пакетом 9.1. Historical perspective 9.2. Current trends 9.3. Note on build system 9.4. ÐÐµÐ¿Ñ€ÐµÑ€Ñ‹Ð²Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ 9.5. Предзагрузка 9.6. УÑиление безопаÑноÑти компилÑтора 9.7. ПовторÑÐµÐ¼Ð°Ñ Ñборка 9.8. Переменные подÑтановки 9.9. Пакет библиотеки 9.10. Multiarch 9.11. Split of a Debian binary package 9.12. Сценарии и примеры Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° 9.13. Multiarch library path 9.14. Multiarch header file path 9.15. Multiarch *.pc file path 9.16. Библиотека Ñимволов 9.17. Library package name 9.18. Смена библиотек 9.19. БезопаÑÐ½Ð°Ñ binNMU-загрузка 9.20. ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ 9.21. -dbgsym package 9.22. debconf 10. Packaging with git 10.1. Salsa repository 10.2. Salsa account setup 10.3. Salsa CI service 10.4. Branch names 10.5. Patch unapplied Git repository 10.6. Patch applied Git repository 10.7. Note on gbp 10.8. Note on dgit 10.9. Patch by «gbp-pq» approach 10.10. Manage patch queue with gbp-pq 10.11. gbp import-dscs --debsnap 10.12. Note on dgit-maint-debrebase workflow 10.13. Quasi-native Debian packaging 11. Полезные Ñоветы 11.1. Сборка Ñ Ð¸Ñпользованием кодировки UTF-8 11.2. Преобразование в кодировку UTF-8 11.3. Hints for Debugging 12. Tool usages 12.1. debdiff 12.2. dget 12.3. mk-origtargz 12.4. origtargz 12.5. git deborig 12.6. dpkg-source -b 12.7. dpkg-source -x 12.8. debc 12.9. piuparts 12.10. bts 13. Дополнительные примеры 13.1. Выборочное применение шаблонов 13.2. Без Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки) 13.3. Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки) 13.4. pyproject.toml (Python3, CLI) 13.5. Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ) 13.6. pyproject.toml (Python3, GUI) 13.7. Makefile (single-binary package) 13.8. Makefile.in + configure (single-binary package) 13.9. Autotools (single-binary package) 13.10. CMake (single-binary package) 13.11. Autotools (multi-binary package) 13.12. CMake (multi-binary package) 13.13. Ð˜Ð½Ñ‚ÐµÑ€Ð½Ð°Ñ†Ð¸Ð¾Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ 13.14. Детали 14. Страница руководÑтва debmake(1) 14.1. ÐÐЗВÐÐИЕ 14.2. СИÐТÐКСИС 14.3. ОПИСÐÐИЕ 14.3.1. необÑзательные аргументы: 14.4. ПРИМЕРЫ 14.5. ВСПОМОГÐТЕЛЬÐЫЕ ПÐКЕТЫ 14.6. ПРЕДОСТЕРЕЖЕÐИЯ 14.7. ОТЛÐДКР14.8. ÐВТОР14.9. ЛИЦЕÐЗИЯ 14.10. СМОТРИТЕ ТÐКЖЕ 15. debmake options 15.1. Shortcut options (-a, -i) 15.2. debmake -b 15.3. debmake -cc 15.4. Snapshot upstream tarball (-d, -t) 15.5. debmake -j 15.6. debmake -k 15.7. debmake -P 15.8. debmake -T 15.9. debmake -x Глава 1. ПредиÑловие    ЕÑли вы уже в какой-то Ñтепени ÑвлÑетеÑÑŒ опытным пользователем Debian ^[1], то можете ÑтолкнутÑÑ Ñо Ñледующими ÑитуациÑми: * Желание уÑтановить некоторый пакет ПО, который пока отÑутÑтвует в архиве Debian.    * Желание обновить пакет Debian до более Ñвежего выпуÑка из оÑновной ветки разработки. * Желание иÑправить ошибки в пакете Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ заплат. ЕÑли вы хотите Ñоздать пакет Debian Ð´Ð»Ñ ÑƒÐ´Ð¾Ð²Ð»ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð½Ñ‹Ñ…    желаний, а также чтобы поделитьÑÑ Ð²Ð°ÑˆÐµÐ¹ работой Ñ ÑообщеÑтвом, то вы входите в целевую аудиторию данного руководÑтва как будущий Ñопровождающий Debian. ^[2] Добро пожаловать в ÑообщеÑтво Debian. Ð’ Debian имеетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво Ñоциальных и техничеÑких правил и договорённоÑтей, которым необходимо Ñледовать, поÑкольку Debian предÑтавлÑет Ñобой большую организацию добровольцев Ñо Ñвоей    иÑторией. Также в Debian был разработан огромный маÑÑив инÑтрументов Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² и инÑтрументов Ð´Ð»Ñ ÑÐ¾Ð¿Ñ€Ð¾Ð²Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð°, которые позволÑÑŽÑ‚ Ñоздавать ÑоглаÑованный набор двоичных пакетов, отвечающих множеÑтву техничеÑких целей: * packages build across many architectures («Раздел 8.3, «Variables for debian/rules»») * reproducible build («Раздел 9.7, «ПовторÑÐµÐ¼Ð°Ñ Ñборка»») * clean build under clearly specified package dependencies and patches («Раздел 6.6, «debian/control file»», «Раздел 6.9, « debian/patches/* files»», «Раздел 4.6, «sbuild setup»») * optimal splits into multiple binary packages («Раздел 9.11, «Split of a Debian binary package»»)    * smooth library transitions («Раздел 9.18, «Смена библиотек»») * interactive installation customization («Раздел 9.22, « debconf»») * multiarch support («Раздел 9.10, «Multiarch»») * security enhancement using specific compiler flags (« Раздел 9.6, «УÑиление безопаÑноÑти компилÑтора»») * continuous integration («Раздел 9.4, «ÐÐµÐ¿Ñ€ÐµÑ€Ñ‹Ð²Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ» ») * boot strapping («Раздел 9.5, «Предзагрузка»») * …​ Ð’ÑÑ‘ Ñто ошеломлÑет многих новых будущих Ñопровождающих Debian и    затруднÑет их учаÑтие в Debian. Ð’ наÑтоÑщем руководÑтве делаетÑÑ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° предоÑтавить отправные точки Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы начать работу. Ð’ руководÑтве опиÑано Ñледующее: * Что Ñледует знать до того, как быть вовлечённым в Debian в качеÑтве будущего Ñопровождающего. * Как Ñоздать проÑтой пакет Debian.    * Какие ÑущеÑтвуют виды правил Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian. * Полезные Ñоветы по Ñозданию пакета Debian. * Примеры ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² Debian Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… типовых Ñценариев. The author felt limitations of updating the original «New Maintainers' Guide» with the dh-make package and decided to create an alternative tool and its matching document to address modern requirements such as multi-arch. The result was the    debmake package version: 4.0 in 2013. The current debmake is version: 4.5.0. It comes with this updated «Guide for Debian Maintainers» in the debmake-doc (version: 1.20-1) package. (In 2016, dh-make was ported from perl to python with updated features.) Many chores and tips have been integrated into the debmake    command allowing this guide to be terse. This guide also offers many packaging examples for you to get started. Внимание    Ðа Ñоздание и Ñопровождение пакета Debian хорошего качеÑтва уходÑÑ‚ многие чаÑÑ‹. Ð”Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñтой задачи Ñопровождающий Debian должен быть одновременно и техничеÑки компетентным, и уÑердным. Ðекоторые важные темы объÑÑнены подробно. Ðекоторые из них могут показатьÑÑ Ð²Ð°Ð¼ незначительными, но, пожалуйÑта, проÑвите    терпение. Ðекоторые Ñпециальные Ñлучаи пропуÑкаютÑÑ. Ð”Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… тем приводÑÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ ÑÑылки на внешние иÑточники. Ð’ÑÑ‘ Ñто Ñделано намеренно, чтобы данное руководÑтво оÑтавалоÑÑŒ проÑтым и удобным в Ñопровождении. --------------------------------------------------------------------- ^[1] Вам необходимо знать немного о программировании в Unix, но от Ð²Ð°Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾ не требуетÑÑ Ð±Ñ‹Ñ‚ÑŒ ÑкÑпертом. Ð’Ñ‹ можете узнать    об оÑновах ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑиÑтемой Debian из «Справочника Debian». Там же можно найти ÑÑылки на реÑурÑÑ‹ Ð´Ð»Ñ Ð¸Ð·ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² Unix. ^[2] ЕÑли вы не желаете делитьÑÑ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð¼ Debian Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸, то вы,    разумеетÑÑ, можете Ñкомпилировать ПО и уÑтановить пакет Ñ Ð¸Ñправленным иÑходным кодом из оÑновной ветки разработки в каталог /usr/local/. Глава 2. Обзор Создание пакета Debian из архива package-1.0.tar.gz, Ñодержащего проÑтой иÑходный код на Ñзыке C, ÑоответÑтвующий «Стандартам    напиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° GNU» и «Стандарту иерархии файловой ÑиÑтемы», может быть выполнено Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake, как показано ниже. $ tar -xvzf package-1.0.tar.gz $ cd package-1.0    $ debmake ... Make manual adjustments of generated configuration files $ debuild ЕÑли будет пропущена Ñ€ÑƒÑ‡Ð½Ð°Ñ Ð¿Ñ€Ð°Ð²ÐºÐ° Ñозданных наÑтроечных файлов,    то в Ñозданном двоичном пакете будет отÑутÑтвовать оÑмыÑленное опиÑание, но он будет вполне работоÑпоÑобным при иÑпользовании команды dpkg Ð´Ð»Ñ ÐµÐ³Ð¾ локального развёртываниÑ. Внимание The debmake command only provides decent template files. These    template files must be manually adjusted to their perfection to comply with the strict quality requirements of the Debian archive, if the generated package is intended for general consumption.    ЕÑли вы только начинаете Ñоздавать пакеты Debian, то не беÑпокойтеÑÑŒ о деталÑÑ… и переходите к раÑÑмотрению общей картины. If you have been exposed to Debian packaging, this looks vgry    much like the dh_make command. This is because the debmake command is intended to replace functions offered historically by the dh_make command. ^[3]    Команда debmake имеет Ñледующие возможноÑти: * Ñовременный Ñтиль ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² + debian/copyright: «DEP-5» compliant + debian/control: substvar support, multiarch support, multi binary packages, …​ + debian/rules: dh syntax, compiler hardening options, …​ * гибкоÑÑ‚ÑŒ + many options (see «Раздел 15.2, «debmake -b»», «Глава 14, Страница руководÑтва debmake(1)», and «Глава 15, debmake options»)    * разумные дейÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾ умолчанию + выполнение без оÑтановок Ñ Ñ‡Ð¸Ñтыми результатами + Ñоздание мультиархитектурного пакета, еÑли Ñвно не указана Ð¾Ð¿Ñ†Ð¸Ñ -m. + generate the non-native Debian package with the Debian source format «3.0 (quilt)», unless the -n option is explicitly specified. * дополнительные обÑлуживающие программы + verification of the debian/copyright file against the current source (see «Раздел 15.6, «debmake -k»») The debmake command delegates most of the heavy lifting to its    back-end packages: debhelper, dpkg-dev, devscripts, sbuild, schroot, etc. ПодÑказка    ОбÑзательно защитите путём ÑоответÑтвующего Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² кавычки аргументы опций -b, -f, -l и -w от вмешательÑтва командной оболочки. ПодÑказка    Ðеродной пакет Debian — обычный пакет Debian. ПодÑказка    Подробный журнал вÑех примеров Ñборки пакетов из данной документации можно получить, ÑÐ»ÐµÐ´ÑƒÑ Ð¸Ð½ÑтрукциÑм из «Раздел 13.14, «Детали»». Примечание The generation of the debian/copyright file, and the outputs from    the -c (see «Раздел 15.3, «debmake -cc»») and -k (see « Раздел 15.6, «debmake -k»») options involve heuristic operations on the copyright and license information. They may produce some erroneous results. --------------------------------------------------------------------- ^[3] Команда deb-make была популÑрна ещё до команды dh_make.    ВерÑии текущего пакета debmake начинаютÑÑ Ñ 4.0, чтобы иÑключить ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð¸ конфликты верÑий Ñ ÑƒÑтаревшим пакетом debmake, предоÑтавлÑвшим команду deb-make. Глава 3. Ðеобходимые предварительные Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Â Â Â Ðиже приведены необходимые предварительные требованиÑ, которые вам нужно понÑÑ‚ÑŒ до того, как вы примете учаÑтие в Debian. 3.1. Люди вокруг Debian    СущеÑтвует неÑколько типов людей, взаимодейÑтвующих Ñ Debian в рамках разный ролей: * Ðвтор оÑновной ветки разработки: тот, кто Ñоздал иÑходную программу. * Сопровождающий оÑновной ветки разработки: тот, кто в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñопровождает программу. * Сопровождающий: тот, кто Ñоздаёт пакет Debian Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹. * Поручитель: тот, кто помогает Ñопровождающим загружать пакеты    в официальный архив пакетов Debian (поÑле проверки Ñодержимого пакетов). * Ментор: тот, кто помогает начинающим Ñопровождающим Ñоздавать пакеты и проч. * разработчик Debian (DD): член проекта Debian Ñ Ð¿Ð¾Ð»Ð½Ñ‹Ð¼Ð¸ правами на загрузку в официальный архив пакетов Debian. * Ñопровождающий Debian (DM): тот, кто имеет ограниченные права на загрузку в официальный архив пакетов Debian. Заметьте, что Ñразу же Ñтать официальным разработчиком Debian (DD) нельзÑ, так как Ð´Ð»Ñ Ñтого требуетÑÑ Ð½ÐµÑ‡Ñ‚Ð¾ большее, чем    только техничеÑкие навыки. Тем не менее, не отчаивайтеÑÑŒ из-за Ñтого. ЕÑли ваша работа полезна Ð´Ð»Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ…, вы вÑÑ‘ равно можете загрузить ваш пакет либо как Ñопровождающий через поручителÑ, либо как Ñопровождающий Debian. Please note that you do not need to create any new packages to become an official Debian Developer. Contributing to the existing    packages can provide a path to becoming an official Debian Developer too. There are many packages waiting for good maintainers (see «"`Раздел 3.8, «Подходы к учаÑтию»»`"). 3.2. Как принÑÑ‚ÑŒ учаÑтие    Чтобы узнать, как принÑÑ‚ÑŒ учаÑтие в Debian, обратите внимание не Ñледующее: * «Как вы можете помочь Debian?» (официальный иÑточник) * «The Debian GNU/Linux FAQ, Chapter 13 - Contributing to the    Debian Project» (semi-official) * «Debian Wiki, HelpDebian» (дополнительный иÑточник) * «Сайт новых учаÑтников Debian» (официальный иÑточник) * «ЧаВО Ð´Ð»Ñ Ð¼ÐµÐ½Ñ‚Ð¾Ñ€Ð¾Ð² Debian» (дополнительный иÑточник) 3.3. Ð¡Ð¾Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÐºÐ° Debian Â Â Â Ð”Ð»Ñ Ð¿Ð¾Ð´Ð³Ð¾Ñ‚Ð¾Ð²ÐºÐ¸ к взаимодейÑтвию Ñ Debian Ñледует понÑÑ‚ÑŒ Ñоциальную динамику Debian, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ ÑоÑтоит в Ñледующем: * Ð’Ñе мы ÑвлÑемÑÑ Ð´Ð¾Ð±Ñ€Ð¾Ð²Ð¾Ð»ÑŒÑ†Ð°Ð¼Ð¸. + Ð’Ñ‹ не можете диктовать оÑтальным, что им делать. + У Ð²Ð°Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть Ð¼Ð¾Ñ‚Ð¸Ð²Ð°Ñ†Ð¸Ñ Ð´ÐµÐ»Ð°Ñ‚ÑŒ что-то ÑамоÑтоÑтельно. * Движущей Ñилой ÑвлÑетÑÑ Ð´Ñ€ÑƒÐ¶ÐµÑкое ÑотрудничеÑтво. + Ваше учаÑтие не должно чрезмерно доÑаждать оÑтальным. + Ваш вклад ценен только в том Ñлучае, еÑли оÑтальные вам за него признательны. * Debian — Ñто не школа, где вы автоматичеÑки получаете    внимание учителей. + Вам Ñледует быть готовым к ÑамоÑтоÑтельному обучению многим вещам. + Внимание других добровольцев ÑвлÑетÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ дефицитным реÑурÑом. * Debian поÑтоÑнно улучшаетÑÑ. + От Ð²Ð°Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ‚ÑÑ, что вы будете Ñоздавать пакеты выÑокого качеÑтва. + Ð’Ñ‹ Ñами должны адаптироватьÑÑ Ðº изменениÑм. ПоÑкольку в оÑтавшейÑÑ Ñ‡Ð°Ñти наÑтоÑщего руководÑтва мы    концентрируемÑÑ Ð¸Ñключительно на техничеÑких аÑпектах ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð², поÑтольку чтобы понÑÑ‚ÑŒ Ñоциальную динамику Debian, рекомендуем обратитьÑÑ Ðº Ñледующей документации:    * «Debian: 17 years of Free Software, "do-ocracy", and democracy» (Introductory slides by the ex-DPL) 3.4. ТехничеÑÐºÐ°Ñ Ð¿Ð°Ð¼Ñтка Ðиже приведена техничеÑÐºÐ°Ñ Ð¿Ð°Ð¼Ñтка, целью которой ÑвлÑетÑÑ Â Â Â Ð¾Ð±Ð»ÐµÐ³Ñ‡ÐµÐ½Ð¸Ðµ работы других Ñопровождающих над вашим пакетом и увеличение полезноÑти Ð´Ð»Ñ Debian в целом. * УпроÑтите отладку вашего пакета. + Делайте ваш пакет проÑтым. + Ðе уÑложнÑйте ваш пакет.    * Хорошо документируйте ваш пакет. + ИÑпользуйте читаемый Ñтиль Ð´Ð»Ñ Ð¸Ñходного кода. + ОÑтавлÑйте в коде комментарии. + Форматируйте Ñвой код везде одинаковым образом. + Сопровождайте git-репозиторий ^[4] пакета. Примечание    Отладка ПО чаще требует большего количеÑтва времени, чем напиÑание изначально работающего ПО.    It is unwise to run your base system under the unstable suite even for the development system. * Creation of binary deb packages and their verification should use minimal unstable chroot described in «Раздел 4.6, «sbuild    setup»». * Basic interactive package development activities should use unstable chroot described in «Раздел 4.7, «Persistent chroot setup»». Примечание    Advanced package development activities such as testing of full Desktop systems, network daemons, and system installer packages, should use unstable suite running under the «virtualization». 3.5. Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Debian    Please make yourself ready to read the pertinent part of the latest Debian documentation to generate perfect Debian packages: * «Debian Policy Manual» + The official «must follow» rules (https://www.debian.org/ doc/devel-manuals#policy) * «Debian Developer’s Reference»    + The official «best practice» document (https:// www.debian.org/doc/devel-manuals#devref) * «Guide for Debian Maintainers» — this guide + A «tutorial reference» document (https://www.debian.org/ doc/devel-manuals#debmake-doc) All these documents are published to https://www.debian.org using the unstable suite versions of corresponding Debian packages. If    you wish to have local accesses to all these documents from your base system, please consider to use techniques such as « apt-pinning» and «chroot». ЕÑли данное руководÑтво противоречит официальной документации    Debian, то верной ÑвлÑетÑÑ Ð¿Ð¾ÑледнÑÑ. Ð’ таком Ñлучае отправьте Ñообщение об ошибке в пакете debmake-doc Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды reportbug.    Также ÑущеÑтвует ÑÐ»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ Ð²Ð²Ð¾Ð´Ð½Ð°Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ, которую вы можете прочитать вмеÑте Ñ Ð½Ð°ÑтоÑщим руководÑтвом: * «Debian Packaging Tutorial» + https://www.debian.org/doc/devel-manuals# packaging-tutorial + https://packages.qa.debian.org/p/packaging-tutorial.html * «Ubuntu Packaging Guide» (Ubuntu is Debian based.)    + http://packaging.ubuntu.com/html/ * «Debian New Maintainers' Guide» (predecessor of this tutorial, deprecated) + https://www.debian.org/doc/devel-manuals#maint-guide + https://packages.qa.debian.org/m/maint-guide.html ПодÑказка    When reading these, you may consider using the debmake command in place of the dh_make command. 3.6. Справочные реÑурÑÑ‹ Прежде чем публично задать вопроÑ, приложите уÑÐ¸Ð»Ð¸Ñ Ð´Ð»Ñ ÐµÐ³Ð¾    ÑамоÑтоÑтельного разрешениÑ, например, прочтите хорошую документацию: * Информацию о пакете, доÑтупную Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команд aptitude, apt-cache и dpkg. * Файлы в каталоге /usr/share/doc/пакет Ð´Ð»Ñ Ð²Ñех релевантных пакетов.    * Содержимое man команда Ð´Ð»Ñ Ð²Ñех релевантных команд. * Содержимое info команда Ð´Ð»Ñ Ð²Ñех релевантных команд. * Содержимое «архива ÑпиÑка раÑÑылки debian-mentors@lists.debian.org». * Содержимое «архива ÑпиÑка раÑÑылки debian-devel@lists.debian.org». Your desired information can be found effectively by using a    well-formed search string such as «keyword site:lists.debian.org» to limit the search domain of the web search engine. Создание небольшого теÑтового пакета — хороший ÑпоÑоб изучить    детали ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð². ИÑÑледование ÑущеÑтвующих хорошо Ñопровождаемых пакетов — лучший ÑпоÑоб изучить то, как другие люди Ñоздают пакеты.    ЕÑли у Ð²Ð°Ñ Ð²ÑÑ‘ ещё оÑталиÑÑŒ вопроÑÑ‹ по поводу ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð², вы можете задать их в Ñледующих ÑпиÑках раÑÑылки: * debian-mentors@lists.debian.org mailing list. (This mailing list is for the novice.) * debian-devel@lists.debian.org mailing list. (This mailing list is for the expert.) * IRC such as #debian-mentors. * Teams focusing on a specific set of packages. (Full list at https://wiki.debian.org/Teams)    * СпиÑки раÑÑылки, в которых принÑто общатьÑÑ Ð½Ð° отличных от английÑкого Ñзыках. + «debian-devel-{french,italian,portuguese,spanish} @lists.debian.org» + «debian-chinese-gb@lists.debian.org» (This mailing list is for general (Simplified) Chinese discussion.) + «debian-devel@debian.or.jp» Более опытные разработчики Debian Ñ Ñ€Ð°Ð´Ð¾Ñтью вам помогут, еÑли вы    правильно зададите Ð²Ð¾Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ñле того, как уже ÑамоÑтоÑтельно попробовали разобратьÑÑ. Внимание    Debian development is a moving target. Some information found on the web may be outdated, incorrect, and non-applicable. Please use them carefully. 3.7. Ð¡Ð¸Ñ‚ÑƒÐ°Ñ†Ð¸Ñ Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð¾Ð¼    ПожалуйÑта, поймите Ñитуацию Ñ Ð°Ñ€Ñ…Ð¸Ð²Ð¾Ð¼ Debian. * Ð’ Debian уже имеютÑÑ Ð¿Ð°ÐºÐµÑ‚Ñ‹ Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва видов программ. * ЧиÑло пакетов в архиве Debian уже в неÑколько раз превышает    чиÑло активных Ñопровождающих. * К Ñожалению, некоторые пакеты нуждаютÑÑ Ð² должном внимании Ñопровождающих. ПоÑтому, учаÑтие в работе над уже добавленными в архив пакетами    более чем ценно и желательно (и гораздо больше вероÑтноÑÑ‚ÑŒ получить поручительÑтво Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸) Ñо Ñтороны других Ñопровождающих. ПодÑказка    Команда wnpp-alert из пакета devscripts может проверÑÑ‚ÑŒ, еÑли ли Ñреди уÑтановленных пакетов пакеты открытые Ð´Ð»Ñ ÑƒÑÑ‹Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ же оÑиротевшие пакеты. ПодÑказка    The how-can-i-help package can show opportunities for contributing to Debian on packages installed locally. 3.8. Подходы к учаÑтию    Ðиже приводитÑÑ Ð¿Ñевдокод на питоноподобном Ñзыке, опиÑывающий в программном видевозможноÑти вашего учаÑÑ‚Ð¸Ñ Ð² Debian: if exist_in_debian(program): if is_team_maintained(program): join_team(program) if is_orphaned(program): # maintainer: Debian QA Group adopt_it(program) elif is_RFA(program): # Request for Adoption adopt_it(program) else: if need_help(program): contact_maintainer(program) triaging_bugs(program) preparing_QA_or_NMU_uploads(program) else: leave_it(program) else: # new packages if not is_good_program(program): give_up_packaging(program)    elif not is_distributable(program): give_up_packaging(program) else: # worth packaging if is_ITPed_by_others(program): if need_help(program): contact_ITPer_for_collaboration(program) else: leave_it_to_ITPer(program) else: # really new if is_applicable_team(program): join_team(program) if is_DFSG(program) and is_DFSG(dependency(program)): file_ITP(program, area="main") # This is Debian elif is_DFSG(program): file_ITP(program, area="contrib") # This is not Debian else: # non-DFSG file_ITP(program, area="non-free") # This is not Debian package_it_and_close_ITP(program)    Где: * Ð”Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ exist_in_debian() и is_team_maintained() нужно проверить Ñледующее: + команду aptitude + веб-Ñтраницу «пакеты Debian» + Debian wiki «Teams» page * Ð”Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ is_orphaned(), is_RFA() и is_ITPed_by_others() нужно проверить Ñледующее: + вывод команды wnpp-alert + «пакеты требующие доработки и будущие» + «журналы отчётов об ошибках Debian: ошибки в пÑевдопакете wnpp в неÑтабильном выпуÑке» + «пакеты Debian, которым требуетÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ и забота» + «ошибки в пакете wnpp по меткам debtag»    * Ð”Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ is_good_program() нужно проверить Ñледующее: + программа должна быть полезна + программа не уÑложнÑет поддержку безопаÑноÑти и Ñопровождение ÑиÑтемы Debian + программа хорошо документирована, а её код понÑтен (то еÑÑ‚ÑŒ, не обфуÑцирован) + авторы программы ÑоглаÑны Ñ Ñозданием пакета и дружеÑтвенно отноÑÑÑ‚ÑÑ Ðº Debian ^[5] * Ð”Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¹ is_it_DFSG() и is_its_dependency_DFSG() нужно проверить Ñледующее: + «Критерии Debian по определению Свободного ПО» (DFSG). * Ð”Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ð¸Ð¸ is_it_distributable() нужно проверить Ñледующее: + ПО должно иметь лицензию и Ð»Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° разрешать раÑпроÑтранение ПО.    You either need to file an ITP or adopt a package to start working on it. See the «Debian Developer’s Reference»: * «5.1. Ðовые пакеты».    * «5.9. Перемещение, удаление, переименование, придание ÑтатуÑа оÑиротевшего, уÑыновление и повторное введение пакетов». 3.9. Ðачинающий учаÑтник и Ñопровождающий Ðачинающий учаÑтник и Ñопровождающий могут недоумевать по поводу    того, что же Ñледует изучить, чтобы начать учаÑтвовать в Debian. Ðиже приводÑÑ‚ÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² завиÑимоÑти от того, чем вы хотите заниматьÑÑ. * Создание пакетов + ОÑновы командной оболочки POSIX и инÑтрумента make. + Ðекоторое зачаточное знание Perl и Python.    * Перевод + ОÑновы работы ÑиÑтемы перевода PO. * Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ + Basics of text markups (XML, ReST, Wiki, …​). Ðачинающий учаÑтник и Ñопровождающий могут недоумевать по поводу    того, где же начать учаÑтвовать в Debian. Ðиже приводÑÑ‚ÑÑ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ðµ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² завиÑимоÑти от ваших навыков. * Ðавыки работы Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочкой POSIX, Perl и Python: + ОтправлÑйте заплаты Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ñ‹ уÑтановки Debian. + Send patches to the Debian packaging helper scripts such as devscripts, sbuild, schroot, etc. mentioned in this document. * Ðавыки C и C++: + ОтправлÑйте заплаты Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð², имеющих приоритеты    required и important. * Ðавыки работы Ñ Ð¾Ñ‚Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ от английÑкого Ñзыками: + ОтправлÑйте заплаты Ð´Ð»Ñ PO-файлов программы уÑтановки Debian. + ОтправлÑйте заплаты Ð´Ð»Ñ PO-файлов пакетов, имеющих приоритеты required и important. * Ðавыки напиÑÐ°Ð½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ð¸: + ОбновлÑйте Ñодержание «Debian Wiki». + ОтправлÑйте заплаты к ÑущеÑтвующей «документации Debian».    Ðта деÑтельноÑÑ‚ÑŒ даÑÑ‚ вам возможноÑÑ‚ÑŒ познакомитьÑÑ Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ учаÑтниками Debian и улучшить вашу репутацию.    Ðачинающему Ñопровождающему Ñледует избегать работу над пакетами, Ñодержащими программы Ñ Ð²Ñ‹Ñокими риÑками в плане безопаÑноÑти: * программы, имеющие флаги доÑтупа setuid или setgid    * Ñлужбы * программы, уÑтанавливаемые в каталоги /sbin/ или /usr/sbin/    Когда вы получите больше опыта в работе над пакетами, вы Ñможете Ñоздавать пакеты и Ñ Ñ‚Ð°ÐºÐ¸Ð¼Ð¸ программами. --------------------------------------------------------------------- ^[4] ПодавлÑющее большинÑтво Ñопровождающих Debian иÑпользуют git    , а не другие ÑиÑтемы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми, такие как hg, bzr и Ñ‚.д. ^[5] Ðто не ÑвлÑетÑÑ Ð°Ð±Ñолютным требованием. Тем не менее,    враждебные разработчики оÑновной ветки могут Ñтать тем, что будет опуÑтошать реÑурÑÑ‹ вÑех наÑ. С дружеÑтвенными разработчиками можно конÑультироватьÑÑ Ð² решении любых проблем Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð¾Ð¹. Глава 4. ÐаÑтройка инÑтрументов    В Ñборочном окружении должен быть уÑтановлен пакет build-essential.    The devscripts package should be installed in the development environment of the maintainer. It is a good idea to install and set up all of the popular set of    packages mentioned in this chapter. These enable us to share the common baseline working environment, although these are not necessarily absolute requirements. Please also consider to install the tools mentioned in the «    Overview of Debian Maintainer Tools» in the «Debian Developer’s Reference», as needed. Внимание ÐаÑтройки инÑтрументов, предÑтавленные ниже, ÑвлÑÑŽÑ‚ÑÑ Ð»Ð¸ÑˆÑŒ    примером и могут быть неактуальны при иÑпользовании Ñамых Ñвежих пакетов. Разработка Debian ÑвлÑетÑÑ Ð´Ð²Ð¸Ð¶ÑƒÑ‰ÐµÐ¹ÑÑ Ñ†ÐµÐ»ÑŒÑŽ. ОбÑзательно прочтите ÑоответÑтвующую документацию и при необходимоÑти обновите наÑтройки. 4.1. Email setup Различные инÑтрументы ÑÐ¾Ð¿Ñ€Ð¾Ð²Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Debian назначают ваш Ð°Ð´Ñ€ÐµÑ Â Â Â Ñлектронной почты и ваше Ð¸Ð¼Ñ Ð¸Ð· переменных Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ $DEBEMAIL и $DEBFULLNAME.    Let’s set these environment variables by adding the following lines to ~/.bashrc ^[6]. Добавьте в файл ~/.bashrc.    DEBEMAIL="osamu@debian.org" DEBFULLNAME="Osamu Aoki" export DEBEMAIL DEBFULLNAME Примечание    The above is for the author of this manual. The configuration and operation examples presented in this manual use these email address and name settings. You must use your email address and name for your system. 4.2. mc setup Команда mc предлагает вам проÑтой ÑпоÑоб работы Ñ Ñ„Ð°Ð¹Ð»Ð°Ð¼Ð¸. Она может открывать двоичные deb-файлы Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ их Ñодержимого по    проÑтому нажатию клавиши «Ввод» при выборе ÑоответÑтвующего двоичного deb-файла. Ð’ качеÑтве движка Ñта программа иÑпользует команду dpkg-deb. ÐаÑтроим её на поддержку проÑтой функции chdir Ñледующим образом. Добавьте в файл ~/.bashrc.    # mc related if [ -f /usr/lib/mc/mc.sh ]; then . /usr/lib/mc/mc.sh fi 4.3. git setup    Ðа ÑегоднÑшний день команда git ÑвлÑетÑÑ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ñ‹Ð¼ инÑтрументом Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð´ÐµÑ€ÐµÐ²Ð¾Ð¼ иÑходного кода Ñ Ð¸Ñторией. Глобальные пользовательÑкие наÑтройки Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ git, такие как    ваши Ð¸Ð¼Ñ Ð¸ Ð°Ð´Ñ€ÐµÑ Ñлектронной почты, можно уÑтановить в файле ~ /.gitconfig Ñледующим образом.    $ git config --global user.name "Osamu Aoki" $ git config --global user.email osamu@debian.org    ЕÑли вы привыкли иÑпользовать команды CVS или Subversion, то можете уÑтановить неÑколько указанных ниже пÑевдонимов команд.    $ git config --global alias.ci "commit -a" $ git config --global alias.co checkout    Проверить ваши глобальные наÑтройки можно Ñледующим образом.    $ git config --global --list ПодÑказка Â Â Â Ð”Ð»Ñ Ñффективной работы Ñ Ð¸Ñторией git-Ñ€ÐµÐ¿Ð¾Ð·Ð¸Ñ‚Ð¾Ñ€Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ иÑпользовать какой-нибудь инÑтрумент Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом пользователÑ, например, gitk или gitg. 4.4. quilt setup Команда quilt предлагает проÑтой метод запиÑи изменений. Ð”Ð»Ñ Â Â Â Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ Debian Ñледует выполнить наÑтройку так, чтобы Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿Ð¸ÑывалиÑÑŒ в каталог debian/patches/ вмеÑто каталога patches/ по умолчанию. Чтобы не менÑÑ‚ÑŒ поведение Ñамой команды quilt, Ñоздадим пÑевдоним    dquilt Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ Debian, добавив Ñледующие Ñтроки в файл ~/.bashrc. Ð’Ñ‚Ð¾Ñ€Ð°Ñ Ñтрока предоÑтавлÑет команде dquilt ту же функциональноÑÑ‚ÑŒ автодополнениÑ, что и у команды quilt. Добавьте в файл ~/.bashrc.    alias dquilt="quilt --quiltrc=${HOME}/.quiltrc-dpkg" . /usr/share/bash-completion/completions/quilt complete -F _quilt_completion $_quilt_complete_opt dquilt    Теперь Ñоздадим файл ~/.quiltrc-dpkg Ñо Ñледующим Ñодержимым. d=. while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then # if in Debian packaging tree with unset $QUILT_PATCHES QUILT_PATCHES="debian/patches"    QUILT_PATCH_OPTS="--reject-format=unified" QUILT_DIFF_ARGS="-p ab --no-timestamps --no-index --color=auto" QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index" QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:" QUILT_COLORS="${QUILT_COLORS}diff_ctx=35:diff_cctx=33" if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi fi See quilt(1) and «How To Survive With Many Patches or    Introduction to Quilt (quilt.html)» on how to use the quilt command. Â Â Â Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð¾Ð² иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ñм. «Раздел 5.9, «Step 3 (alternatives): Modification to the upstream source»». 4.5. devscripts setup Ð”Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑ‹Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian вашим закрытым GPG-ключом    иÑпользуетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° debsign, входÑÑ‰Ð°Ñ Ð² ÑоÑтав пакета devscripts . Команда debuild, входÑÑ‰Ð°Ñ Ð² ÑоÑтав пакета devscripts, Ñобирает    двоичный пакет и проверÑет его Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды lintian. Полезно иметь более подробный вывод команды lintian.    Вы можете наÑтроить Ñти команды в файле ~/.devscripts Ñледующим образом. DEBUILD_DPKG_BUILDPACKAGE_OPTS="-i -I -us -uc"    DEBUILD_LINTIAN_OPTS="-i -I --show-overrides" DEBSIGN_KEYID="Your_GPG_keyID" The -i and -I options in DEBUILD_DPKG_BUILDPACKAGE_OPTS for the    dpkg-source command help rebuilding of Debian packages without extraneous contents (see «Глава 7, Sanitization of the source»).    В наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñ…Ð¾Ñ€Ð¾ÑˆÐ¾ иметь RSA-ключ длины 4096 бит, Ñм. « Создание нового GPG-ключа». 4.6. sbuild setup The sbuild package provides a clean room («chroot») build    environment. It offers this efficiently with the help of schroot using the bind-mount feature of the modern Linux kernel. Since it is the same build environment as the Debian’s buildd    infrastructure, it is always up to date and comes full of useful features.    It can be customized to offer following features: * The schroot package to boost the chroot creation speed. * Пакет lintian предназначен Ð´Ð»Ñ Ð¾Ð±Ð½Ð°Ñ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Ð¾ÑˆÐ¸Ð±Ð¾Ðº в пакете. * The piuparts package to find bugs in the package. * The autopkgtest package to find bugs in the package.    * Пакет ccache предназначен Ð´Ð»Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти работы gcc (необÑзательно). * Пакет libeatmydata1 предназначен Ð´Ð»Ñ ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ ÑкороÑти работы dpkg (необÑзательно). * Параллельный запуÑк make позволÑет увеличить ÑкороÑÑ‚ÑŒ Ñборки (необÑзательно).    Let’s set up sbuild environment ^[7]: $ sudo apt install sbuild piuparts autopkgtest lintian    $ sudo apt install sbuild-debian-developer-setup $ sudo sbuild-debian-developer-setup -s unstable    Let’s update your group membership to include sbuild and verify it: $ newgrp -    $ id uid=1000(<yourname>) gid=1000(<yourname>) groups=...,132(sbuild)    Here, «reboot of system» or «kill -TERM -1» can be used instead to update your group membership ^[8] .    Let’s create the configuration file ~/.sbuildrc in line with recent Debian practice of «source-only-upload» as: cat >~/.sbuildrc << 'EOF' ############################################################################## # PACKAGE BUILD RELATED (source-only-upload as default) ############################################################################## # -d $distribution = 'unstable'; # -A $build_arch_all = 1; # -s $build_source = 1; # --source-only-changes $source_only_changes = 1; # -v $verbose = 1;    ############################################################################## # POST-BUILD RELATED (turn off functionality by setting variables to 0) ############################################################################## $run_lintian = 1; $lintian_opts = ['-i', '-I']; $run_piuparts = 1; $piuparts_opts = ['--schroot', 'unstable-amd64-sbuild']; $run_autopkgtest = 1; $autopkgtest_root_args = ''; $autopkgtest_opts = [ '--', 'schroot', '%r-%a-sbuild' ]; ############################################################################## # PERL MAGIC ############################################################################## 1; EOF Примечание There are some exceptional cases such as NEW uploads, uploads    with NEW binary packages, and security uploads where you can’t do source-only-upload but are required to upload with binary packages. The above configuration needs to be adjusted for those exceptional cases.    Following document assumes that sbuild is configured this way.    Edit this to your needs. Post-build tests can be turned on and off by assigning 1 or 0 to the corresponding variables, Предупреждение    ÐеобÑзательные наÑтройки могут вызывать отрицательные поÑледÑтвиÑ. Отключите их в Ñлучае ÑомнениÑ. Примечание    Параллельный запуÑк make может быть неудачным Ð´Ð»Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… уже имеющихÑÑ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² и может Ñделать журнал Ñборки Ñложным Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. ПодÑказка    Many sbuild related hints are available at «Раздел 8.7, «Note on sbuild»» and «https://wiki.debian.org/sbuild» . 4.7. Persistent chroot setup Примечание    Use of independent copied chroot filesystem prevents contaminating the source chroot used by sbuild. For building new experimental packages or for debugging buggy    packages, let’s setup dedicated persistent chroot « source:unstable-amd64-desktop» by: $ sudo cp -a /srv/chroot/unstable-amd64-sbuild-$suffix /srv/chroot/unstable-amd64-desktop $ sudo tee /etc/schroot/chroot.d/unstable-amd64-desktop << EOF [unstable-desktop] description=Debian sid/amd64 persistent chroot groups=root,sbuild    root-groups=root,sbuild profile=desktop type=directory directory=/srv/chroot/unstable-amd64-desktop union-type=overlay EOF Here, desktop profile is used instead of sbuild profile. Please    make sure to adjust /etc/schroot/desktop/fstab to make package source accessible from inside of the chroot.    You can log into this chroot «source:unstable-amd64-desktop» by:    $ sudo schroot -c source:unstable-amd64-desktop 4.8. gbp setup    The git-buildpackage package offers the gbp(1) command. Its user configuration file is ~/.gbp.conf. # Configuration file for "gbp <command>" [DEFAULT] # the default build command:    builder = sbuild # use pristine-tar: pristine-tar = True # Use color when on a terminal, alternatives: on/true, off/false or auto color = auto 4.9. HTTP-прокÑи Чтобы Ñохранить пропуÑкную ÑпоÑобноÑÑ‚ÑŒ при обращении к    репозиторию пакетов Debian вам Ñледует наÑтроить локальный кÑширующий HTTP-прокÑи. ИмеетÑÑ Ð½ÐµÑколько вариантов: * Специализированный кÑширующий HTTP-прокÑи, иÑпользующий пакет    apt-cacher-ng. * Generic HTTP caching proxy (squid package) configured by squid-deb-proxy package In order to use this HTTP proxy without manual configuration    adjustment, it’s a good idea to install either auto-apt-proxy or squid-deb-proxy-client package to everywhere. 4.10. ЧаÑтный репозиторий Debian    Вы можете наÑтроить ÑобÑтвенный репозиторий пакетов Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ пакета reprepro. 4.11. Virtual machines    For testing GUI application, it is a good idea to have virtual machines. Install virt-manager and qemu-kvm packages.    Use of chroot and virtual machines allows us not to update the whole host PC to the latest unstable suite. 4.12. Local network with virtual machines In order to access virtual machines easily over the local    network, setting up multicast DNS service discovery infrastructure by installing avahi-utils is a good idea.    For all running virtual machines and the host PC, we can use each host name appended with .local for SSH to access each other. --------------------------------------------------------------------- ^[6] ПредполагаетÑÑ, что в качеÑтве интерактивной командной    оболочки Ñ Ñ€ÐµÐ³Ð¸Ñтрацией вы иÑпользуете Bash. ЕÑли вы иÑпользуете какую-то другую командную оболочку, например, Zsh, то вмеÑто ~ /.bashrc необходимо изменить ÑоответÑтвующие файлы наÑтройки.    ^[7] Be careful since some older HOWTOs may use different chroot setups.    ^[8] Simply «logout and login under some modern GUI Desktop environment» may not update your group membership. Глава 5. Simple packaging There is an old Latin saying: «Longum iter est per praecepta,    breve et efficax per exempla» («It’s a long way by the rules, but short and efficient with examples»). 5.1. Packaging tarball Ðиже приведён пример ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñтого пакета Debian из проÑтого    иÑходного кода на Ñзыке C, иÑпользующего в качеÑтве ÑиÑтемы Ñборки Makefile.    ДопуÑтим, Ð¸Ð¼Ñ tar-архива из оÑновной ветки разработки будет debhello-0.0.tar.gz.    ПредполагаетÑÑ, что Ñтот тип иÑходного кода будет уÑтановлен как неÑиÑтемный файл: Basics for the install from the upstream tarball.    $ tar -xzmf debhello-0.0.tar.gz $ cd debhello-0.0 $ make $ make install Debian packaging requires changing this «make install» process to    install files to the target system image location instead of the normal location under /usr/local. Примечание    Примеры ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian из других более Ñложных ÑиÑтем Ñборки опиÑаны в «Глава 13, Дополнительные примеры». 5.2. ÐžÐ±Ñ‰Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½Ð° ÐžÐ±Ñ‰Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½Ð° Ñборки проÑтого неродного пакета Debian из    tar-архива оÑновной ветки разработки debhello-0.0.tar.gz может быть предÑтавлена Ñледующим образом: * Сопровождающий получает tar-архив debhello-0.0.tar.gz из оÑновной ветки разработки и раÑпаковывает его Ñодержимое в каталог debhello-0.0. * Команда debmake добавлÑет шаблонные файлы иÑключительно в каталог debian.    + СоздаётÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ ÑÑылка debhello_0.0.orig.tar.gz, ÑƒÐºÐ°Ð·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ Ð½Ð° файл debhello-0.0.tar.gz. + Сопровождающий наÑтраивает шаблонные файлы. * Команда debuild Ñобирает двоичный пакет из подготовленного дерева иÑходного кода. + СоздаётÑÑ Ñ„Ð°Ð¹Ð» debhello-0.0-1.debian.tar.xz, Ñодержащий каталог debian. ÐžÐ±Ñ‰Ð°Ñ ÐºÐ°Ñ€Ñ‚Ð¸Ð½Ð° Ñборки пакета. $ tar -xzmf debhello-0.0.tar.gz    $ cd debhello-0.0 $ debmake ... manual customization $ debuild ... ПодÑказка    The debuild command in this and following examples may be substituted by equivalent commands such as the sbuild command. ПодÑказка    ЕÑли доÑтупен tar-архив оÑновной ветки разработки в формате .tar.xz, то иÑпользуйте его вмеÑто архивов в формате .tar.gz или .tar.bz2. Утилита xz предлагает более выÑокую Ñтепень ÑжатиÑ, чем gzip и bzip2. 5.3. Что такое debmake? Примечание    Actual packaging activities are often performed manually without using debmake while referencing only existing similar packages and «Debian Policy Manual».    The debmake command is the helper script for the Debian packaging. («Глава 14, Страница руководÑтва debmake(1)») * It creates good template files for the Debian packages. * Она вÑегда уÑтанавливает большинÑтво очевидных опций в разумные значениÑ. * Создаёт tar-архив оÑновной ветки разработки и необходимую    Ñимвольную ÑÑылку в Ñлучае их отÑутÑтвиÑ. * Ðе перепиÑывает ÑущеÑтвующие файлы наÑтройки в каталоге debian/. * Поддерживает мультиархитектурные пакеты. * It provides short extracted license texts as debian/copyright in decent accuracy to help license review.    Ðти возможноÑти делают работу Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Ð¼Ð¸ Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ debmake проÑтой и Ñовременной. In retrospective, I created debmake to simplify this    documentation. I consider debmake to be more-or-less a demonstration session generator for tutorial purpose. The debmake command isn’t the only helper script to make a Debian    package. If you are interested alternative packaging helper tools, please see: * Debian wiki: «AutomaticPackagingTools» — Extensive comparison    of packaging helper scripts * Debian wiki: «CopyrightReviewTools» — Extensive comparison of copyright review helper scripts 5.4. Что такое debuild?    Ðиже приведён обзор команд, похожих на команду debuild. * Файл debian/rules определÑет то, как будет Ñобран двоичный пакет Debian. * dpkg-buildpackage — Ð¾Ñ„Ð¸Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° Ð´Ð»Ñ Ñборки двоичного пакета Debian. Ð”Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð¹ двоичной Ñборки она, грубо говорÑ, выполнÑет Ñледующую поÑледовательноÑÑ‚ÑŒ команд: + «dpkg-source --before-build» (apply Debian patches, unless they are already applied) + «fakeroot debian/rules clean» + «dpkg-source --build» (build the Debian source package) + «fakeroot debian/rules build» + «fakeroot debian/rules binary» + «dpkg-genbuildinfo» (generate a *.buildinfo file) + «dpkg-genchanges» (generate a *.changes file)    + «fakeroot debian/rules clean» + «dpkg-source --after-build» (unapply Debian patches, if they are applied during --before-build) + «debsign» (sign the *.dsc and *.changes files) o ЕÑли вы Ñледовали инÑтрукциÑм (Ñм. «Раздел 4.5, « devscripts setup»») и передали программе Ñборки опции -us и -uc, то данный шаг будет пропущен, а Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи требуетÑÑ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ запуÑтить команду debsign. * Команда debuild предÑтавлÑет Ñобой обёртку Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ dpkg-buildpackage, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñобирает двоичный пакет Debian в окружении Ñ Ð¿Ð¾Ð´Ñ…Ð¾Ð´Ñщими значениÑми переменных окружениÑ. * The sbuild command is a wrapper script to build the Debian binary package under the proper chroot environment with the proper environment variables. Примечание    Подробную информацию Ñм. в dpkg-buildpackage(1). 5.5. Шаг 1: получение иÑходного кода оÑновной ветки разработки    Получим иÑходный код оÑновной ветки разработки. Скачаем файл debhello-0.0.tar.gz. $ wget http://www.example.org/download/debhello-0.0.tar.gz ... $ tar -xzmf debhello-0.0.tar.gz $ tree .    ├── debhello-0.0 │  ├── Makefile │  ├── README.md │  └── src │  └── hello.c └── debhello-0.0.tar.gz 3 directories, 4 files    В нём ÑодержитÑÑ Ð¸Ñходный код на Ñзыке C, hello.c, довольно проÑтой. hello.c. $ cat debhello-0.0/src/hello.c #include <stdio.h>    int main() { printf("Hello, world!\n"); return 0; }    Итак, Makefile ÑоответÑтвует «Стандартам напиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° GNU» и « Стандарту иерархии файловой ÑиÑтемы». Рименно: * Ñборку двоичных файлов Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ значений $(CPPFLAGS), $ (CFLAGS), $(LDFLAGS) и Ñ‚. д.    * уÑтановку файлов Ñ ÑƒÑ‡Ñ‘Ñ‚Ð¾Ð¼ $(DESTDIR) в качеÑтве целевого ÑиÑтемного образа * уÑтановку файлов Ñ $(prefix), который можно изменить на /usr Makefile. $ cat debhello-0.0/Makefile prefix = /usr/local all: src/hello src/hello: src/hello.c @echo "CFLAGS=$(CFLAGS)" | \ fold -s -w 70 | \ sed -e 's/^/# /' $(CC) $(CPPFLAGS) $(CFLAGS) $(LDCFLAGS) -o $@ $^    install: src/hello install -D src/hello \ $(DESTDIR)$(prefix)/bin/hello clean: -rm -f src/hello distclean: clean uninstall: -rm -f $(DESTDIR)$(prefix)/bin/hello .PHONY: all install clean distclean uninstall Примечание    В приведённом ниже примере применение команды echo к $(CFLAGS) иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ наÑтройки Ñборочных флагов. 5.6. Step 2: Generate template files with debmake    Вывод команды debmake довольно подробен, в нём объÑÑнены выполнÑемые дейÑтвиÑ, например, как Ñто указано ниже. The output from the debmake command. $ cd /path/to/debhello-0.0 $ debmake -x1 I: set parameters I: sanity check of parameters I: pkg="debhello", ver="0.0", rev="1" I: *** start packaging in "debhello-0.0". *** I: provide debhello_0.0.orig.tar.gz for non-native Debian package I: pwd = "/path/to" I: $ ln -sf debhello-0.0.tar.gz debhello_0.0.orig.tar.gz I: pwd = "/path/to/debhello-0.0" I: parse binary package settings: I: binary package=debhello Type=bin / Arch=any M-A=foreign I: analyze the source tree I: build_type = make I: scan source for copyright+license text and file extensions I: 50 %, ext = md I: 50 %, ext = c I: check_all_licenses I: ... I: check_all_licenses completed for 3 files. I: bunch_all_licenses I: format_all_licenses I: make debian/* template files I: debmake -x "1" ... I: creating => debian/control I: creating => debian/copyright I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra0_changel... I: creating => debian/changelog I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra0_rules.t...    I: creating => debian/rules I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra0source_f... I: creating => debian/source/format I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1_README.... I: creating => debian/README.Debian I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1_README.... I: creating => debian/README.source I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1_clean.t... I: creating => debian/clean I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1_gbp.con... I: creating => debian/gbp.conf I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1_salsa-c... I: creating => debian/salsa-ci.yml I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1_watch.t... I: creating => debian/watch I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1tests_co... I: creating => debian/tests/control I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1upstream... I: creating => debian/upstream/metadata I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1patches_... I: creating => debian/patches/series I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1source.n... I: creating => debian/source/local-options.ex I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1source.n... I: creating => debian/source/local-patch-header.ex I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1single_d... I: creating => debian/dirs I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1single_i... I: creating => debian/install I: substituting => /usr/lib/python3/dist-packages/debmake/data/extra1single_l... I: creating => debian/links I: $ wrap-and-sort I: $ wrap-and-sort complete. Now, debian/* may have a blank line at the top.... Команда debmake Ñоздаёт вÑе шаблонные файлы на оÑнове опций    командной Ñтроки. ПоÑкольку никакие опции не были переданы, команда debmake выбирает Ð´Ð»Ñ Ð²Ð°Ñ Ñ€Ð°Ð·ÑƒÐ¼Ð½Ñ‹Ðµ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию: * Ð˜Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Ñ Ð¸Ñходным кодом: debhello * ВерÑÐ¸Ñ Ð¾Ñновной ветки разработки: 0.0 * Ð˜Ð¼Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ пакета: debhello    * Ðомер редакции Debian: 1 * Тип пакета: bin (пакет Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ иÑполнÑемыми файлами формата ELF) * The -x option: -x1 (without maintainer script supports for simplicity) Примечание    Here, the debmake command is invoked with the -x1 option to keep this tutorial simple. Use of default -x3 option is highly recommended.    Проверим Ñозданные шаблонные файлы. Дерево иÑходного кода поÑле проÑтого Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ debmake. $ cd /path/to $ tree . ├── debhello-0.0 │  ├── Makefile │  ├── README.md │  ├── debian │  │  ├── README.Debian │  │  ├── README.source │  │  ├── changelog │  │  ├── clean │  │  ├── control │  │  ├── copyright │  │  ├── dirs │  │  ├── gbp.conf │  │  ├── install    │  │  ├── links │  │  ├── patches │  │  │  └── series │  │  ├── rules │  │  ├── salsa-ci.yml │  │  ├── source │  │  │  ├── format │  │  │  ├── local-options.ex │  │  │  └── local-patch-header.ex │  │  ├── tests │  │  │  └── control │  │  ├── upstream │  │  │  └── metadata │  │  └── watch │  └── src │  └── hello.c ├── debhello-0.0.tar.gz └── debhello_0.0.orig.tar.gz -> debhello-0.0.tar.gz 8 directories, 24 files Файл debian/rules ÑвлÑетÑÑ Ñборочным Ñценарием, предоÑтавлÑемым    Ñопровождающим пакета. Ðиже приводитÑÑ ÐµÐ³Ð¾ шаблонный файл, Ñозданный командой debmake. debian/rules (шаблонный файл): $ cd /path/to/debhello-0.0 $ cat debian/rules #!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1 #export DEB_BUILD_MAINT_OPTIONS = hardening=+all #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic    #export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 %: dh $@ #override_dh_auto_install: # dh_auto_install -- prefix=/usr #override_dh_install: # dh_install --list-missing -X.pyc -X.pyo По Ñути, Ñто Ñтандартный файл debian/rules Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ dh. (Ð”Ð»Ñ Â Â Â ÑƒÐ´Ð¾Ð±Ñтва наÑтройки в нём ÑодержитÑÑ Ð½ÐµÑколько закомментированных Ñтрок.)    Файл debian/control предоÑтавлÑет оÑновные метаданные пакета Debian. Ðиже приведён шаблонный файл, Ñозданный командой debmake. debian/control (шаблонный файл): $ cat debian/control Source: debhello Section: unknown Priority: optional Maintainer: "Osamu Aoki" <osamu@debian.org> Build-Depends: debhelper-compat (= 13) Standards-Version: 4.6.2 Homepage: <insert the upstream URL, if relevant>    Rules-Requires-Root: no #Vcs-Git: https://salsa.debian.org/debian/debhello.git #Vcs-Browser: https://salsa.debian.org/debian/debhello Package: debhello Architecture: any Multi-Arch: foreign Depends: ${misc:Depends}, ${shlibs:Depends} Description: auto-generated package by debmake This Debian binary package was auto-generated by the debmake(1) command provided by the debmake package. Предупреждение    If you leave «Section: unknown» in the template debian/control file unchanged, the lintian error may cause the build to fail. Since this is the ELF binary executable package, the debmake command sets «Architecture: any» and «Multi-Arch: foreign». Also,    it sets required substvar parameters as «Depends: $ {shlibs:Depends}, ${misc:Depends}». These are explained in « Глава 6, Basics for packaging». Примечание    Please note this debian/control file uses the RFC-822 style as documented in «5.2 Source package control files — debian/control» of the «Debian Policy Manual». The use of the empty line and the leading space are significant. Файл debian/copyright предоÑтавлÑет данные об авторÑком праве на    пакет Debian. Ðиже приведён шаблонный файл, Ñозданный командой debmake. debian/copyright (шаблонный файл): $ cat debian/copyright Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: debhello Upstream-Contact: <preferred name and address to reach the upstream project> Source: <url://example.com> # # Please double check copyright with the licensecheck(1) command.    Files: Makefile README.md src/hello.c Copyright: __NO_COPYRIGHT_NOR_LICENSE__ License: __NO_COPYRIGHT_NOR_LICENSE__ #----------------------------------------------------------------------------... # Files marked as NO_LICENSE_TEXT_FOUND may be covered by the following # license/copyright files. 5.7. Шаг 3: изменение шаблонных файлов    От Ñопровождающего требуетÑÑ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ внеÑти некоторые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ñ‹Ñ… файлов. In order to install files as a part of the system files, the $ (prefix) value of /usr/local in the Makefile should be overridden    to be /usr. This can be accommodated by the following the debian/ rules file with the override_dh_auto_install target setting « prefix=/usr». debian/rules (верÑÐ¸Ñ Ñопровождающего): $ cd /path/to/debhello-0.0 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules #!/usr/bin/make -f export DH_VERBOSE = 1    export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ override_dh_auto_install: dh_auto_install -- prefix=/usr ÐкÑпортирование переменой Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ DH_VERBOSE в файле debian/    rules, как Ñто Ñделано выше, приводит к тому, что инÑтрумент debhelper Ñоздаёт более подробный отчёт о Ñборке. Exporting DEB_BUILD_MAINT_OPTION as above sets the hardening    options as described in the «FEATURE AREAS/ENVIRONMENT» in dpkg-buildflags(1). ^[9]    Exporting DEB_CFLAGS_MAINT_APPEND as above forces the C compiler to emit all the warnings.    Exporting DEB_LDFLAGS_MAINT_APPEND as above forces the linker to link only when the library is actually needed. ^[10] The dh_auto_install command for the Makefile based build system essentially runs «$(MAKE) install DESTDIR=debian/debhello». The    creation of this override_dh_auto_install target changes its behavior to «$(MAKE) install DESTDIR=debian/debhello prefix=/usr» .    Here are the maintainer versions of the debian/control and debian /copyright files. debian/control (верÑÐ¸Ñ Ñопровождающего): $ vim debian/control ... hack, hack, hack, ... $ cat debian/control Source: debhello Section: devel Priority: optional Maintainer: Osamu Aoki <osamu@debian.org> Build-Depends: debhelper-compat (= 13)    Standards-Version: 4.6.2 Homepage: https://salsa.debian.org/debian/debmake-doc Rules-Requires-Root: no Package: debhello Architecture: any Multi-Arch: foreign Depends: ${misc:Depends}, ${shlibs:Depends} Description: Simple packaging example for debmake This Debian binary package is an example package. (This is an example only) debian/copyright (верÑÐ¸Ñ Ñопровождающего): $ vim debian/copyright ... hack, hack, hack, ... $ cat debian/copyright Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: debhello Upstream-Contact: Osamu Aoki <osamu@debian.org> Source: https://salsa.debian.org/debian/debmake-doc Files: * Copyright: 2015-2021 Osamu Aoki <osamu@debian.org> License: Expat Permission is hereby granted, free of charge, to any person obtaining a    copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.    Let’s remove unused template files and edit remaining template files: * debian/README.source * debian/source/local-option.ex * debian/source/local-patch-header.ex    * debian/patches/series (No upstream patch) * clean * dirs * install * links Шаблонные файлы в debian/. (v=0.0): $ rm -f debian/clean debian/dirs debian/install debian/links $ rm -f debian/README.source debian/source/*.ex $ rm -rf debian/patches $ tree -F debian debian/ ├── README.Debian ├── changelog ├── control ├── copyright    ├── gbp.conf ├── rules* ├── salsa-ci.yml ├── source/ │  └── format ├── tests/ │  └── control ├── upstream/ │  └── metadata └── watch 4 directories, 11 files ПодÑказка    Configuration files used by the dh_* commands from the debhelper package usually treat # as the start of a comment line. 5.8. Step 4: Building package with debuild Ð’ данном дереве иÑходного кода вы можете Ñоздать неродной пакет Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debuild или Ñквивалентных ей команд (Ñм.    «Раздел 5.4, «Что такое debuild?»»). Вывод команды очень подробен, выполнÑемые дейÑÑ‚Ð²Ð¸Ñ Ð¾Ð±ÑŠÑÑнÑÑŽÑ‚ÑÑ Ð² нём Ñледующим образом. Building package with debuild. $ cd /path/to/debhello-0.0 $ debuild dpkg-buildpackage -us -uc -ui -i dpkg-buildpackage: info: source package debhello dpkg-buildpackage: info: source version 0.0-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Osamu Aoki <osamu@debian.org> dpkg-source -i --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean    dh_auto_clean make -j12 distclean ... debian/rules binary dh binary dh_update_autotools_config dh_autoreconf dh_auto_configure dh_auto_build make -j12 "INSTALL=install --strip-program=true" make[1]: Entering directory '/path/to/debhello-0.0' # CFLAGS=-g -O2 ... Finished running lintian.    You can verify that CFLAGS is updated properly with -Wall and -pedantic by the DEB_CFLAGS_MAINT_APPEND variable. The manpage should be added to the package as reported by the    lintian package, as shown in later examples (see «Глава 13, Дополнительные примеры»). Let’s move on for now.    Проверим результат Ñборки. Файлы debhello верÑии 0.0, Ñозданные Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debuild: $ cd /path/to $ tree -FL 1 ./ ├── debhello-0.0/ ├── debhello-0.0.tar.gz ├── debhello-dbgsym_0.0-1_amd64.deb    ├── debhello_0.0-1.debian.tar.xz ├── debhello_0.0-1.dsc ├── debhello_0.0-1_amd64.build ├── debhello_0.0-1_amd64.buildinfo ├── debhello_0.0-1_amd64.changes ├── debhello_0.0-1_amd64.deb └── debhello_0.0.orig.tar.gz -> debhello-0.0.tar.gz 2 directories, 9 files    Вы видите вÑе Ñозданные файлы. * debhello_0.0.orig.tar.gz предÑтавлÑет Ñобой Ñимвольную ÑÑылку на tar-архив оÑновной ветки разработки. * debhello_0.0-1.debian.tar.xz Ñодержит файлы, Ñозданные Ñопровождающим. * debhello_0.0-1.dsc предÑтавлÑет Ñобой файл Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian Ñ Ð¸Ñходным кодом.    * debhello_0.0-1_amd64.deb — двоичный пакет Debian. * The debhello-dbgsym_0.0-1_amd64.deb is the Debian debug symbol binary package. See «Раздел 9.21, «-dbgsym package»». * The debhello_0.0-1_amd64.build file is the build log file. * The debhello_0.0-1_amd64.buildinfo file is the meta data file generated by dpkg-genbuildinfo(1). * debhello_0.0-1_amd64.changes — файл Ñ Ð¼ÐµÑ‚Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ пакета Debian. debhello_0.0-1.debian.tar.xz Ñодержит Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Debian, внеÑённые    в иÑходный код оÑновной ветки разработки. Содержимое Ñтого файла приведено ниже. Содержимое архива debhello_0.0-1.debian.tar.xz: $ tar -tzf debhello-0.0.tar.gz debhello-0.0/ debhello-0.0/src/ debhello-0.0/src/hello.c debhello-0.0/Makefile debhello-0.0/README.md $ tar --xz -tf debhello_0.0-1.debian.tar.xz debian/ debian/README.Debian    debian/changelog debian/control debian/copyright debian/gbp.conf debian/rules debian/salsa-ci.yml debian/source/ debian/source/format debian/tests/ debian/tests/control debian/upstream/ debian/upstream/metadata debian/watch    The debhello_0.0-1_amd64.deb contains the binary files to be installed to the target system.    The debhello-debsym_0.0-1_amd64.deb contains the debug symbol files to be installed to the target system. The binary package contents of all binary packages: $ dpkg -c debhello-dbgsym_0.0-1_amd64.deb drwxr-xr-x root/root ... ./ drwxr-xr-x root/root ... ./usr/ drwxr-xr-x root/root ... ./usr/lib/ drwxr-xr-x root/root ... ./usr/lib/debug/ drwxr-xr-x root/root ... ./usr/lib/debug/.build-id/ drwxr-xr-x root/root ... ./usr/lib/debug/.build-id/be/ -rw-r--r-- root/root ... ./usr/lib/debug/.build-id/be/f1e0185834f3c3e2614cf8... drwxr-xr-x root/root ... ./usr/share/    drwxr-xr-x root/root ... ./usr/share/doc/ lrwxrwxrwx root/root ... ./usr/share/doc/debhello-dbgsym -> debhello $ dpkg -c debhello_0.0-1_amd64.deb drwxr-xr-x root/root ... ./ drwxr-xr-x root/root ... ./usr/ drwxr-xr-x root/root ... ./usr/bin/ -rwxr-xr-x root/root ... ./usr/bin/hello drwxr-xr-x root/root ... ./usr/share/ drwxr-xr-x root/root ... ./usr/share/doc/ drwxr-xr-x root/root ... ./usr/share/doc/debhello/ -rw-r--r-- root/root ... ./usr/share/doc/debhello/README.Debian -rw-r--r-- root/root ... ./usr/share/doc/debhello/changelog.Debian.gz -rw-r--r-- root/root ... ./usr/share/doc/debhello/copyright    The generated dependency list of all binary packages. The generated dependency list of all binary packages (v=0.0): $ dpkg -f debhello-dbgsym_0.0-1_amd64.deb pre-depends \    depends recommends conflicts breaks Depends: debhello (= 0.0-1) $ dpkg -f debhello_0.0-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libc6 (>= 2.34) Внимание    Many more details need to be addressed before uploading the package to the Debian archive. Примечание ЕÑли вы пропуÑтили ручную наÑтройку автоматичеÑки Ñозданных командой debmake файлов наÑтройки, то у Ñозданного двоичного    пакета может отÑутÑтвовать понÑтное другим опиÑание пакета, а также пакет может неÑоответÑтвовать некоторым требованиÑм политики. Такой Ñырой пакет вполне хорошо работает, еÑли передать его команде dpkg, и может оказатьÑÑ Ð²Ð¿Ð¾Ð»Ð½Ðµ доÑтаточным Ð´Ð»Ñ ÐµÐ³Ð¾ локального развёртываниÑ. 5.9. Step 3 (alternatives): Modification to the upstream source The above example did not touch the upstream source to make the    proper Debian package. An alternative approach as the maintainer is to modify files in the upstream source. For example, Makefile may be modified to set the $(prefix) value to /usr. Примечание    The above «Раздел 5.7, «Шаг 3: изменение шаблонных файлов»» using the debian/rules file is the better approach for packaging for this example. But let’s continue on with this alternative approaches as a leaning experience. In the following, let’s consider 3 simple variants of this alternative approach to generate debian/patches/* files    representing modifications to the upstream source in the Debian source format «3.0 (quilt)». These substitute «Раздел 5.7, «Шаг 3: изменение шаблонных файлов»» in the above step-by-step example: * «Раздел 5.10, «Patch by «diff -u» approach»»    * «Раздел 5.11, «Patch by dquilt approach»» * «Раздел 5.12, «Patch by «dpkg-source --auto-commit» approach» »    Please note the debian/rules file used for these examples doesn’t have the override_dh_auto_install target as follows: debian/rules (Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ Ñопровождающего): $ cd /path/to/debhello-0.0 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules    #!/usr/bin/make -f export DH_VERBOSE = 1 export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ 5.10. Patch by «diff -u» approach    Here, the patch file 000-prefix-usr.patch is created using the diff command. Patch by «diff -u». $ cp -a debhello-0.0 debhello-0.0.orig $ vim debhello-0.0/Makefile ... hack, hack, hack, ... $ diff -Nru debhello-0.0.orig debhello-0.0 >000-prefix-usr.patch $ cat 000-prefix-usr.patch diff -Nru debhello-0.0.orig/Makefile debhello-0.0/Makefile    --- debhello-0.0.orig/Makefile 2024-07-24 10:12:40.382927188 +0900 +++ debhello-0.0/Makefile 2024-07-24 10:12:40.478928659 +0900 @@ -1,4 +1,4 @@ -prefix = /usr/local +prefix = /usr all: src/hello $ rm -rf debhello-0.0 $ mv -f debhello-0.0.orig debhello-0.0 Please note that the upstream source tree is restored to the    original state after generating a patch file 000-prefix-usr.patch .    This 000-prefix-usr.patch is edited to be DEP-3 conforming and moved to the right location as below. 000-prefix-usr.patch (DEP-3): $ echo '000-prefix-usr.patch' >debian/patches/series $ vim ../000-prefix-usr.patch ... hack, hack, hack, ... $ mv -f ../000-prefix-usr.patch debian/patches/000-prefix-usr.patch $ cat debian/patches/000-prefix-usr.patch From: Osamu Aoki <osamu@debian.org>    Description: set prefix=/usr patch diff -Nru debhello-0.0.orig/Makefile debhello-0.0/Makefile --- debhello-0.0.orig/Makefile +++ debhello-0.0/Makefile @@ -1,4 +1,4 @@ -prefix = /usr/local +prefix = /usr all: src/hello Примечание When generating the Debian source package by dpkg-source via    dpkg-buildpackage in the following step of «Раздел 5.8, «Step 4: Building package with debuild»», the dpkg-source command assumes that no patch was applied to the upstream source, since the .pc/ applied-patches is missing. 5.11. Patch by dquilt approach    Here, the patch file 000-prefix-usr.patch is created using the dquilt command. dquilt is a simple wrapper of the quilt program. The syntax and    function of the dquilt command is the same as the quilt(1) command, except for the fact that the generated patch is stored in the debian/patches/ directory. Patch by dquilt. $ dquilt new 000-prefix-usr.patch Patch debian/patches/000-prefix-usr.patch is now on top $ dquilt add Makefile File Makefile added to patch debian/patches/000-prefix-usr.patch ... hack, hack, hack, ... $ head -1 Makefile prefix = /usr $ dquilt refresh Refreshed patch debian/patches/000-prefix-usr.patch $ dquilt header -e --dep3 ... edit the DEP-3 patch header with editor $ tree -a . ├── debian │  ├── changelog │  ├── clean │  ├── control │  ├── copyright │  ├── dirs │  ├── gbp.conf │  ├── install │  ├── links │  ├── patches │  │  ├── 000-prefix-usr.patch │  │  └── series │  ├── README.Debian │  ├── README.source │  ├── rules │  ├── salsa-ci.yml │  ├── source │  │  ├── format    │  │  ├── local-options.ex │  │  └── local-patch-header.ex │  ├── tests │  │  └── control │  ├── upstream │  │  └── metadata │  └── watch ├── Makefile ├── .pc │  ├── 000-prefix-usr.patch │  │  ├── Makefile │  │  └── .timestamp │  ├── applied-patches │  ├── .quilt_patches │  ├── .quilt_series │  └── .version ├── README.md └── src └── hello.c 9 directories, 29 files $ cat debian/patches/series 000-prefix-usr.patch $ cat debian/patches/000-prefix-usr.patch Description: set prefix=/usr patch Author: Osamu Aoki <osamu@debian.org> Index: debhello-0.0/Makefile =================================================================== --- debhello-0.0.orig/Makefile +++ debhello-0.0/Makefile @@ -1,4 +1,4 @@ -prefix = /usr/local +prefix = /usr all: src/hello    Here, Makefile in the upstream source tree doesn’t need to be restored to the original state for the packaging. Примечание When generating the Debian source package by dpkg-source via    dpkg-buildpackage in the following step of «Раздел 5.8, «Step 4: Building package with debuild»», the dpkg-source command assumes that patches were applied to the upstream source, since the .pc/ applied-patches exists.    The upstream source tree can be restored to the original state for the packaging. The upstream source tree (restored): $ dquilt pop -a Removing patch debian/patches/000-prefix-usr.patch Restoring Makefile No patches applied    $ head -1 Makefile prefix = /usr/local $ tree -a .pc .pc ├── .quilt_patches ├── .quilt_series └── .version 1 directory, 3 files    Here, Makefile is restored and the .pc/applied-patches is missing. 5.12. Patch by «dpkg-source --auto-commit» approach Here, the patch file isn’t created in this step but the source    files are setup to create debian/patches/* files in the following step of «Раздел 5.8, «Step 4: Building package with debuild»».    Отредактируем иÑходный код оÑновной ветки разработки. Modified Makefile.    $ vim Makefile ... hack, hack, hack, ... $ head -n1 Makefile prefix = /usr    Let’s edit debian/source/local-options: debian/source/local-options for auto-commit. $ mv debian/source/local-options.ex debian/source/local-options $ vim debian/source/local-options ... hack, hack, hack, ... $ cat debian/source/local-options # == Patch applied strategy (merge) ==    # # The source outside of debian/ directory is modified by maintainer and # different from the upstream one: # * Workflow using dpkg-source commit (commit all to VCS after dpkg-source ... # https://www.debian.org/doc/manuals/debmake-doc/ch04.en.html#dpkg-sour... # * Workflow described in dgit-maint-merge(7) # single-debian-patch auto-commit    Let’s edit debian/source/local-patch-header: debian/source/local-patch-header for auto-commit. $ mv debian/source/local-patch-header.ex debian/source/local-patch-header    $ vim debian/source/local-patch-header ... hack, hack, hack, ... $ cat debian/source/local-patch-header Description: debian-changes Author: Osamu Aoki <osamu@debian.org>    Let’s remove debian/patches/* files and other unused template files. Remove unused template files. $ rm -f debian/clean debian/dirs debian/install debian/links $ rm -f debian/README.source debian/source/*.ex $ rm -rf debian/patches $ tree debian debian ├── README.Debian ├── changelog ├── control ├── copyright ├── gbp.conf    ├── rules ├── salsa-ci.yml ├── source │  ├── format │  ├── local-options │  └── local-patch-header ├── tests │  └── control ├── upstream │  └── metadata └── watch 4 directories, 13 files    There are no debian/patches/* files at the end of this step. Примечание When generating the Debian source package by dpkg-source via    dpkg-buildpackage in the following step of «Раздел 5.8, «Step 4: Building package with debuild»», the dpkg-source command uses options specified in debian/source/local-options to auto-commit modification applied to the upstream source as patches/ debian-changes. Let’s inspect the Debian source package generated after the    following «Раздел 5.8, «Step 4: Building package with debuild»» step and extracting files from debhello-0.0.debian.tar.xz. Inspect debhello-0.0.debian.tar.xz after debuild. $ tar --xz -xvf debhello_0.0-1.debian.tar.xz debian/ debian/README.Debian debian/changelog debian/control debian/copyright debian/gbp.conf debian/patches/    debian/patches/debian-changes debian/patches/series debian/rules debian/salsa-ci.yml debian/source/ debian/source/format debian/tests/ debian/tests/control debian/upstream/ debian/upstream/metadata debian/watch    Let’s check generated debian/patches/* files. Inspect debian/patches/* after debuild. $ cat debian/patches/series debian-changes $ cat debian/patches/debian-changes Description: debian-changes Author: Osamu Aoki <osamu@debian.org>    --- debhello-0.0.orig/Makefile +++ debhello-0.0/Makefile @@ -1,4 +1,4 @@ -prefix = /usr/local +prefix = /usr all: src/hello The Debian source package debhello-0.0.debian.tar.xz is confirmed    to be generated properly with debian/patches/* files for the Debian modification. --------------------------------------------------------------------- ^[9] This is a cliché to force a read-only relocation link for the hardening and to prevent the lintian warning «W: debhello:    hardening-no-relro usr/bin/hello». This is not really needed for this example but should be harmless. The lintian tool seems to produce a false positive warning for this case which has no linked library. ^[10] This is a cliché to prevent overlinking for the complex    library dependency case such as Gnome programs. This is not really needed for this simple example but should be harmless. Глава 6. Basics for packaging Here, a broad overview is presented without using VCS operations    for the basic rules of Debian packaging focusing on the non-native Debian package in the «3.0 (quilt)» format. Примечание Â Â Â Ð”Ð»Ñ ÑÑноÑти в дайльнейшем были умышленно опущены некоторые детали. ОзнакомьтеÑÑŒ Ñо Ñтраницами руководÑтва dpkg-source(1), dpkg-buildpackage(1), dpkg(1), dpkg-deb(1), deb(5) и др. Пакет Debian Ñ Ð¸Ñходным кодом ÑвлÑетÑÑ Ð½Ð°Ð±Ð¾Ñ€Ð¾Ð¼ входных файлов,    иÑпользуемых Ð´Ð»Ñ Ñборки двоичного пакета Debian, и не предÑтавлÑет Ñобой только один файл.    The Debian binary package is a special archive file which holds a set of installable binary data with its associated information. Один пакет Debian Ñ Ð¸Ñходным кодом может иÑпользоватьÑÑ Ð´Ð»Ñ Â Â Â ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½ÐµÑкольких двоичных пакетов Debian, определÑемых в файле debian/control.    The non-native Debian package in the Debian source format «3.0 (quilt)» is the most normal Debian source package format. Примечание    СущеÑвтует множеÑтво обёрточных Ñценариев. ИÑпользуйте их Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð¾Ñ‰ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ¹ работы, но обÑзательно разберитеÑÑŒ Ñ Ð¾Ñновами их внутреннего уÑтройÑтва. 6.1. Работа по Ñозданию пакета The Debian packaging workflow to create a Debian binary package involves generating several specifically named files (see «    Раздел 6.3, Â«Ð˜Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° и верÑиÑ»») as defined in the «Debian Policy Manual». This workflow can be summarized in 10 steps with some over simplification as follows. 1. ЗагружаетÑÑ tar-архив оÑновной ветки разработки в виде файла пакет-верÑиÑ.tar.gz. 2. Ðтот архив раÑпаковываетÑÑ, ÑоздаётÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво файлов в каталоге пакет-верÑиÑ/. 3. Ðрхив оÑновной ветки разработки копируетÑÑ (или ÑоздаётÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»ÑŒÐ½Ð°Ñ ÑÑылка на него) в файл Ñо Ñпециальным именем имÑпакета_верÑиÑ.orig.tar.gz. + Ñимвол, разделÑющий пакет и верÑию, заменÑетÑÑ Ñ - (дефиÑа) на _ (подчёркивание) + к раÑширению добавлÑетÑÑ .orig. 4. К иÑходному коду оÑновной ветки разработки в каталог пакет-верÑиÑ/debian/ добавлÑÑŽÑ‚ÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ Ñпецификации пакета Debian. + ОбÑзательные файлы Ñпецификации в каталоге debian/*: debian/rules ИÑполнÑемый Ñценарий Ð´Ð»Ñ Ñборки пакета Debian (Ñм. « Раздел 6.5, «debian/rules file»») debian/control The package configuration file containing the source package name, the source build dependencies, the binary package name, the binary dependencies, etc. (see «Раздел 6.6, «debian/control file»») debian/changelog Файл Ñ Ð¸Ñторией пакета Debian, определÑющий в первой Ñтроке верÑию пакета из оÑновной ветки разработки и номер редакции Debian (Ñм. «Раздел 6.7, «debian/ changelog file»») debian/copyright Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± авторÑких правах и лицензии (Ñм. « Раздел 6.8, «debian/copyright file»») + ÐеобÑзательные файлы Ñпецификации в каталоге debian/* (see «Раздел 6.14, «Other debian/* files»»): + The debmake command invoked in the package-version/ directory may be used to provide the initial template of these configuration files. o ОбÑзательные файлы Ñпецификации ÑоздаютÑÑ Ð´Ð°Ð¶Ðµ при иÑпользовании опции -x0. o Команда debmake не перезапиÑывает какие-либо ÑущеÑтвующией файлы наÑтройки. + These files must be manually edited to their perfection according to the «Debian Policy Manual» and «Debian Developer’s Reference». 5. The dpkg-buildpackage command (usually from its wrapper debuild or sbuild) is invoked in the package-version/ directory to make the Debian source and binary packages by invoking the debian/rules script.    + The current directory is set as: «CURDIR=/path/to/ package-version/» + Create the Debian source package in the Debian source format «3.0 (quilt)» using dpkg-source(1) o package_version.orig.tar.gz (copy or symlink of package-version.tar.gz) o package_version-revision.debian.tar.xz (tarball of debian/ found in package-version/) o package_version-revision.dsc + Build the source using «debian/rules build» into $ (DESTDIR) o «DESTDIR=debian/binarypackage/» for single binary package ^[11] o «DESTDIR=debian/tmp/» for multi binary package + Создание двоичного пакета Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ dpkg-deb(1), dpkg-genbuildinfo(1) и dpkg-genchanges(1). o двоичныйпакет_верÑиÑ-редакциÑ_архитектура.deb o …​ (There may be multiple Debian binary package files.) o пакет_верÑиÑ-редакциÑ_архитектура.changes o package_version-revision_arch.buildinfo 6. Проверка качеÑтва пакета Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды lintian. (рекомендуетÑÑ) + Follow the rejection guidelines from ftp-master. o «REJECT-FAQ» o «ЛиÑÑ‚ проверок Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² из NEW» o «ÐвтоматичеÑкие Ð¾Ñ‚ÐºÐ»Ð¾Ð½ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² Lintian» («ÑпиÑок тегов lintian») 7. Test the goodness of the generated Debian binary package manually by installing it and running its programs. 8. After confirming the goodness, prepare files for the normal source-only upload to the Debian archive. 9. Sign the Debian package file with the debsign command using your private GPG key. + Use «debsign package_version-revision_source.changes» (normal source-only upload situation) + Use «debsign package_version-revision_arch.changes» (exceptional binary upload situation such as NEW uploads, and security uploads) files for the binary Debian package upload. 10. Upload the set of the Debian package files with the dput command to the Debian archive. + Use «dput package_version-revision_source.changes» (source-only upload) + Use «dput package_version-revision_arch.changes» (binary upload) Test building and confirming of the binary package goodness as    above is the moral obligation as a diligent Debian developer but there is no physical barrier for people to skip such operations at this moment for the source-only upload.    Теперь замените каждую чаÑÑ‚ÑŒ имени файла. * чаÑÑ‚ÑŒ пакет на Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian Ñ Ð¸Ñходным кодом * чаÑÑ‚ÑŒ двоичныйпакет на Ð¸Ð¼Ñ Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ пакета Debian    * чаÑÑ‚ÑŒ верÑÐ¸Ñ Ð½Ð° верÑию оÑновной ветки разработки * чаÑÑ‚ÑŒ Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ Ð½Ð° номер редации Debian * the arch part with the package architecture (e.g., amd64)    See also «Source-only uploads». ПодÑказка    ИÑпользетÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑтво различных Ñтратегий по управлению заплатами и иÑпользованию ÑиÑтем ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми. Вам не Ñледует иÑпользовать вÑе из них. ПодÑказка    There is very extensive documentation in «Chapter 6. Best Packaging Practices» in the «Debian Developer’s Reference». Please read it. 6.2. debhelper package Although a Debian package can be made by writing a debian/rules script without using the debhelper package, it is impractical to do so. There are too many modern «Debian Policy» required features to be addressed, such as application of the proper file    permissions, use of the proper architecture dependent library installation path, insertion of the installation hook scripts, generation of the debug symbol package, generation of package dependency information, generation of the package information files, application of the proper timestamp for reproducible build, etc. Debhelper package provides a set of useful scripts in order to simplify Debian’s packaging workflow and reduce the burden of    package maintainers. When properly used, they will help packagers handle and implement «Debian Policy» required features automatically.    Процедура ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian в Ñовременном Ñтиле может быть организована в виде набора проÑÑ‚Ñ‹Ñ… модульных дейÑтвий: * using the dh command to invoke many utility scripts    automatically from the debhelper package, and * наÑтройка их Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ декларативных файлов наÑтройки в каталоге debian/. You should almost always use debhelper as your package’s build    dependency. This document also assumes that you are using a fairly contemporary version of debhelper to handle packaging works in the following contents. Примечание For debhelper «compat >= 9», the dh command exports compiler    flags (CFLAGS, CXXFLAGS, FFLAGS, CPPFLAGS and LDFLAGS) with values as returned by dpkg-buildflags if they are not set previously. (The dh command calls set_buildflags defined in the Debian::Debhelper::Dh_Lib module.) Примечание    debhelper(1) changes its behavior with time. Please make sure to read debhelper-compat-upgrade-checklist(7) to understand the situation. 6.3. Ð˜Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° и верÑÐ¸Ñ Ð•Ñли иÑходный код оÑновной ветки разработки поÑтавлÑетÑÑ Ð² виде    архива hello-0.9.12.tar.gz, можно иÑпользовать hello в качеÑтве имени пакета Ñ Ð¸Ñходным кодом оÑновной ветки разработки, а 0.9.12 — в качеÑтве верÑии оÑновной ветки. There are some limitations for what characters may be used as a    part of the Debian package. The most notable limitation is the prohibition of uppercase letters in the package name. Here is a summary as a set of regular expressions: * Upstream package name (-p): [-+.a-z0-9]{2,}    * Binary package name (-b): [-+.a-z0-9]{2,} * Upstream version (-u): [0-9][-+.:~a-z0-9A-Z]* * Debian revision (-r): [0-9][+.~a-z0-9A-Z]*    See the exact definition in «Chapter 5 - Control files and their fields» in the «Debian Policy Manual».    Вам Ñледует ÑоответÑтвующим образом изменить Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° и верÑию оÑновной ветки разработки Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± имени пакета и номере верÑии Ñффективно обрабатывалиÑÑŒ такими популÑрными инÑтрументами как    команда aptitude, рекомендуетÑÑ, чтобы длина имени пакета была равна 30 Ñимволам или была меньше; а Ð¾Ð±Ñ‰Ð°Ñ Ð´Ð»Ð¸Ð½Ð° верÑии и редакции была равна 14 Ñимволам или меньше. ^[12] Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы не возникали конфликты, видимое пользователю Ð¸Ð¼Ñ Â Â Â Ð´Ð²Ð¾Ð¸Ñ‡Ð½Ð¾Ð³Ð¾ пакета не Ñледует выбирать из чиÑла раÑпроÑтранённых Ñлов. If upstream does not use a normal versioning scheme such as 2.30.32 but uses some kind of date such as 11Apr29, a random codename string, or a VCS hash value as part of the version, make sure to remove them from the upstream version. Such information can be recorded in the debian/changelog file. If you need to    invent a version string, use the YYYYMMDD format such as 20110429 as upstream version. This ensures that the dpkg command interprets later versions correctly as upgrades. If you need to ensure a smooth transition to a normal version scheme such as 0.1 in the future, use the 0~YYMMDD format such as 0~110429 as upstream version, instead.    Строки верÑий можно Ñравнивать друг Ñ Ð´Ñ€ÑƒÐ³Ð¾Ð¼ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды dpkg Ñледующим образом.    $ dpkg --compare-versions ver1 op ver2    Правило ÑÑ€Ð°Ð²Ð½ÐµÐ½Ð¸Ñ Ð²ÐµÑ€Ñий может быть предÑтавлены Ñледующим образом: * Строки ÑравниваютÑÑ Ð² порÑдке Ñ Ð½Ð°Ñ‡Ð°Ð»Ð° до конца.    * Буквы больше чиÑел. * ЧиÑла ÑравниваютÑÑ ÐºÐ°Ðº целые чиÑла. * Буквы ÑравниваютÑÑ Ð² порÑдке таблицы кодов ASCII.    Также имеютÑÑ Ñпециальные правила Ð´Ð»Ñ Ñимволов точки (.), плюÑа ( +) и тильды (~). Они показаны ниже.    0.0 < 0.5 < 0.10 < 0.99 < 1 < 1.0~rc1 < 1.0 < 1.0+b1 < 1.0+nmu1 < 1.1 < 2.0 Один Ñложный Ñлучай возникает тогда, когда разработчики оÑновной ветки выпуÑкают hello-0.9.12-ReleaseCandidate-99.tar.gz как    предварительный выпуÑк Ð´Ð»Ñ hello-0.9.12.tar.gz. Вам Ñледует гарантировать, что обновление пакета Debian будет проиÑходить правильно, переименовав Ð´Ð»Ñ Ñтого архив Ñ Ð¸Ñходным кодом оÑновной ветки в hello-0.9.12~rc99.tar.gz. 6.4. Родной пакет Debian The non-native Debian package in the Debian source format «3.0 (quilt)» is the most normal Debian source package format. The    debian/source/format file should have «3.0 (quilt)» in it as described in dpkg-source(1). The above workflow and the following packaging examples always use this format. A native Debian package is the rare Debian binary package format.    It may be used only when the package is useful and valuable only for Debian. Thus, its use is generally discouraged. Внимание A native Debian package is often accidentally built when its    upstream tarball is not accessible from the dpkg-buildpackage command with its correct name package_version.orig.tar.gz . This is a typical newbie mistake caused by making a symlink name with «-» instead of the correct one with «_».    A native Debian package has no separation between the upstream code and the Debian changes and consists only of the following: * package_version.tar.gz (copy or symlink of package-version    .tar.gz with debian/* files.) * package_version.dsc    If you need to create a native Debian package, create it in the Debian source format «3.0 (native)» using dpkg-source(1). ПодÑказка There is no need to create the tarball in advance if the native Debian package format is used. The debian/source/format file    should have «3.0 (native)» in it as described in dpkg-source(1) and The debian/source/format file should have the version without the Debian revision (1.0 instead of 1.0-1). Then, the tarball containing is generated when «dpkg-source -b» is invoked in the source tree. 6.5. debian/rules file The debian/rules file is the executable script which re-targets the upstream build system to install files in the $(DESTDIR) and    creates the archive file of the generated files as the deb file. The deb file is used for the binary distribution and installed to the system using the dpkg command.    The Debian policy compliant debian/rules file supporting all the required targets can be written as simple as ^[13]: ПроÑтой файл debian/rules: #!/usr/bin/make -f    #export DH_VERBOSE = 1 %: dh $@    The dh command functions as the sequencer to call all required « dh target» commands at the right moment. ^[14] * dh clean : вычищет файлы в дереве иÑходного кода. * dh build : Ñборка дерева иÑходного кода * dh build-arch : Ñборка завиÑÑщих от архитектуры пакетов из дерева иÑходного кода * dh build-indep : Ñборка незавиÑÑщих от архитектуры пакетов из дерева иÑходного кода * dh install : уÑтановка двоичных файлов в $(DESTDIR)    * dh install-arch : уÑтановка двоичных файлов в $(DESTDIR) Ð´Ð»Ñ Ð·Ð°Ð²Ð¸ÑÑщих от архитектуры пакетов * dh install-indep : уÑтановка двоичных файлов в $(DESTDIR) Ð´Ð»Ñ Ð½ÐµÐ·Ð°Ð²Ð¸ÑÑщих от архитектуры пакетов * dh binary : Ñоздание файла deb * dh binary-arch : Ñоздание файла deb Ð´Ð»Ñ Ð·Ð°Ð²Ð¸ÑÑщих от архитектуры пакетов * dh binary-indep : Ñоздание файла deb Ð´Ð»Ñ Ð½ÐµÐ·Ð°Ð²Ð¸ÑÑщих от архитектуры пакетов    Here, $(DESTDIR) path depends on the build type. * «DESTDIR=debian/binarypackage/» for single binary package ^    [15] * «DESTDIR=debian/tmp/» for multi binary package    See «Раздел 8.2, «Customized debian/rules»» and «Раздел 8.3, «Variables for debian/rules»» for customization. ПодÑказка    Setting «export DH_VERBOSE = 1» outputs every command that modifies files on the build system. Also it enables verbose build logs for some build systems. 6.6. debian/control file The debian/control file consists of blocks of meta data separated    by a blank line. Each block of meta data defines the following in this order:    * метаданных пакета Debian Ñ Ð¸Ñходным кодом * метаданные двоичных пакетов Debian    See «Chapter 5 - Control files and their fields» of the «Debian Policy Manual» for the definition of each meta data. Примечание    The debmake command sets the debian/control file with « Build-Depends: debhelper-compat (= 13)» to set the debhelper compatibility level. ПодÑказка    If an existing package has lower than debhelper compatibility level 13, probably it’s time to update its packaging. 6.7. debian/changelog file    The debian/changelog file records the Debian package history. * This should be edited using the debchange command (alias dch ). * This defines the upstream package version and the Debian revision in its first line. * The changes need to be documented in the specific, formal, and concise style. + If Debian maintainer modification fixes reported bugs, add «Closes: #<bug_number>» to close those bugs. * Even if you are uploading your package by yourself, you must    document all non-trivial user-visible changes such as: + the security related bug fixes. + the user interface changes. * If you are asking your sponsor to upload it, you should document changes more comprehensively, including all packaging related ones, to help reviewing your package. + The sponsor shouldn’t be forced to second guess your thought behind your package. + The sponsor’s time is more valuable than yours. After finishing your packaging and verifying its quality, please execute the «dch -r» command and save the finalized debian/    changelog file with the suite normally set to unstable. ^[16] If you are packaging for backports, security updates, LTS, etc., please use the appropriate distribution names instead. Команда debmake Ñоздаёт изначальный шаблонный файл Ñ Ð²ÐµÑ€Ñией    оÑновной ветки и редакцией Debian. С целью Ð¿Ñ€ÐµÐ´Ð¾Ñ‚Ð²Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ñлучайной загрузки в архив Debian выбираетÑÑ Ð²Ñ‹Ð¿ÑƒÑк UNRELEASED. ПодÑказка    The date string used in the debian/changelog file can be manually generated by the «LC_ALL=C date -R» command. ПодÑказка    Когда вы ÑкÑпериментируете, то иÑпользуйте запиÑÑŒ debian/ changelog Ñо Ñтрокой верÑии вида 1.0.1-1~rc1. Затем Ñведите такие запиÑи журнала изменений в одну запиÑÑŒ Ð´Ð»Ñ Ð¾Ñ„Ð¸Ñ†Ð¸Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ пакета. The debian/changelog file is installed in the /usr/share/doc/    binarypackage directory as changelog.Debian.gz by the dh_installchangelogs command.    Журнал изменений оÑновной ветки уÑтанавливаетÑÑ Ð² каталог /usr/ share/doc/двоичныйпакет под именем changelog.gz. The upstream changelog is automatically found by the dh_installchangelogs using the case insensitive match of its file    name to changelog, changes, changelog.txt, changes.txt, history, history.txt, or changelog.md and searched in the ./ doc/ or docs/ directories. 6.8. debian/copyright file Debian takes the copyright and license matters very seriously.    The «Debian Policy Manual» enforces having a summary of them in the debian/copyright file in the package. * «12.5. Copyright information»    * «2.3. Copyright considerations» * «License information»    The debmake command creates the initial debian/copyright template file. * Please double check copyright with the licensecheck(1)    command. * Please format it as a «machine-readable debian/copyright file (DEP-5)». ЕÑли команде debmake не была передана Ð¾Ð¿Ñ†Ð¸Ñ -P, то команда    пропуÑкает Ñоздаваемые автоматичеÑки файлы под разрешительными лицензиÑми. Внимание    Файл debian/copyright должен быть отÑортирован таким образом, что наиболее общие шаблоны файлов были размещены в начале ÑпиÑка. См. «Раздел 15.6, «debmake -k»». Примечание    ЕÑли при проверке лицензионной информации вы обнаружите какие-либо проблемы, то отправьте Ñообщение об ошибке в пакете debmake Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð½Ð¾Ð¹ чаÑтью текÑта, Ñодержащего информацию об авторÑком праве и лицензии. 6.9. debian/patches/* files As demonstrated in «Раздел 5.9, «Step 3 (alternatives):    Modification to the upstream source»», the debian/patches/ directory holds * patch-file-name.patch files providing -p1 patches and    * the series file which which defines how these patches are applied.    See how these files are used in: * «Раздел 12.6, «dpkg-source -b»» to build the Debian source    package * «Раздел 12.7, «dpkg-source -x»» to extract source files from the Debian source package Примечание    Header texts of these patches should conform to «DEP-3». Примечание    If you want to use VCS tools such as git, gbp and dgit to create and manage these patches after learning basics here, please refer to later in «Глава 10, Packaging with git». 6.10. debian/source/include-binaries file The «dpkg-source --commit» command functions like dquilt but has one advantage over the dquilt command. While the dquilt command    can’t handle modified binary files, the «dpkg-source --commit» command detects modified binary files and lists them in the debian/source/include-binaries file to include them in the Debian tarball as a part of the Debian source package. 6.11. debian/watch file    The uscan(1) command downloads the latest upstream version using the debian/watch file. E.g.: Basic debian/watch file:    version=4 https://ftp.gnu.org/gnu/hello/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ The uscan command may verify the authenticity of the upstream    tarball with optional configuration (see «Раздел 6.12, «debian/ upstream/signing-key.asc file»»). See uscan(1), «Раздел 8.4, «Ðовый выпуÑк оÑновной ветки»», «    Раздел 7.1, «Fix with Files-Excluded»», and «Раздел 10.10, «Manage patch queue with gbp-pq»» for more. 6.12. debian/upstream/signing-key.asc file    Some packages are signed by a GPG key and their authenticity can be verified using their public GPG key.    For example, «GNU hello» can be downloaded via HTTP from https:// ftp.gnu.org/gnu/hello/ . There are sets of files:    * hello-верÑиÑ.tar.gz (иÑходный код оÑновной ветки) * hello-верÑиÑ.tar.gz.sig (Ð¾Ñ‚Ð´ÐµÐ»Ñ‘Ð½Ð½Ð°Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑŒ)    Выберем Ñамую поÑледнюю верÑию. Download the upstream tarball and its signature. $ wget https://ftp.gnu.org/gnu/hello/hello-2.9.tar.gz ...    $ wget https://ftp.gnu.org/gnu/hello/hello-2.9.tar.gz.sig ... $ gpg --verify hello-2.9.tar.gz.sig gpg: Signature made Thu 10 Oct 2013 08:49:23 AM JST using DSA key ID 80EE4A00 gpg: Can't check signature: public key not found If you know the public GPG key of the upstream maintainer from    the mailing list, use it as the debian/upstream/signing-key.asc file. Otherwise, use the hkp keyserver and check it via your web of trust. Download public GPG key for the upstream. $ gpg --keyserver hkp://keys.gnupg.net --recv-key 80EE4A00 gpg: requesting key 80EE4A00 from hkp server keys.gnupg.net gpg: key 80EE4A00: public key "Reuben Thomas <rrt@sc3d.org>" imported gpg: no ultimately trusted keys found    gpg: Total number processed: 1 gpg: imported: 1 $ gpg --verify hello-2.9.tar.gz.sig gpg: Signature made Thu 10 Oct 2013 08:49:23 AM JST using DSA key ID 80EE4A00 gpg: Good signature from "Reuben Thomas <rrt@sc3d.org>" ... Primary key fingerprint: 9297 8852 A62F A5E2 85B2 A174 6808 9F73 80EE 4A00 ПодÑказка    If your network environment blocks access to the HKP port 11371, use «hkp://keyserver.ubuntu.com:80» instead. After confirming the key ID 80EE4A00 is a trustworthy one,    download its public key into the debian/upstream/signing-key.asc file. Set public GPG key to debian/upstream/signing-key.asc.    $ gpg --armor --export 80EE4A00 >debian/upstream/signing-key.asc With the above debian/upstream/signing-key.asc file and the    following debian/watch file, the uscan command can verify the authenticity of the upstream tarball after its download. E.g.: Improved debian/watch file with GPG support:    version=4 opts="pgpsigurlmangle=s/$/.sig/" \ https://ftp.gnu.org/gnu/hello/ @PACKAGE@@ANY_VERSION@@ARCHIVE_EXT@ 6.13. debian/salsa-ci.yml file    Install Salsa CI configuration file. See «Раздел 10.3, «Salsa CI service»». 6.14. Other debian/* files Ð’ каталог debian/ можно добавить дополнительные файлы наÑтройки.    БольшинÑтво из них иÑпользуютÑÑ Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°Ð¼Ð¸ dh_*, предоÑтавлÑемыми пакетом debhelper, но также имеютÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ðµ файлы Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ dpkg-source, lintian и gbp. ПодÑказка    Even an upstream source without its build system can be packaged just by using these files. See «Раздел 13.2, «Без Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»» as an example. The alphabetical list of notable optional debian/binarypackage.*    configuration files listed below provides very powerful means to set the installation path of files. Please note: * The "^-x[01234]" superscript notation that appears in the following list indicates the minimum value for the debmake -x option that generates the associated template file. See « Раздел 15.9, «debmake -x»» or debmake(1) for details. * For a single binary package, the «binarypackage.» part of the filename in the list may be removed. * For a multi binary package, a configuration file missing the «binarypackage» part of the filename is applied to the first binary package listed in the debian/control. * When there are many binary packages, their configurations can be specified independently by prefixing their name to their configuration filenames such as «package-1.install», « package-2.install», etc. * Ðекоторые шаблонные файлы наÑтроек могут не быть Ñозданы командой debmake. Ð’ таких ÑлучаÑÑ… вам Ñледует Ñоздать их Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ редактора. * Some configuration template files generated by the debmake command with an extra .ex suffix need to be activated by removing that suffix. * ÐеиÑпользуемые шаблонные файлы наÑтроек, Ñозданные командой debmake, Ñледует удалить. * Копируйте шаблонные файлы наÑтроек по необходимоÑти в файлы Ñ ÑоответÑтвующими именами двоичных пакетов. двоичныйпакет.bug-control ^-x3 уÑтанавливаетÑÑ ÐºÐ°Ðº usr/share/bug/двоичныйпакет/control в двоичныйпакет. См. «Раздел 8.11, «Bug reports»». двоичныйпакет.bug-presubj ^-x3 уÑтанавливаетÑÑ ÐºÐ°Ðº usr/share/bug/двоичныйпакет/presubj в binarypackage. См. «Раздел 8.11, «Bug reports»». двоичныйпакет.bug-script ^-x3 уÑтанавливаетÑÑ ÐºÐ°Ðº usr/share/bug/двоичныйпакет или usr/ share/bug/двоичныйпакет/script в двоичныйпакет. См. « Раздел 8.11, «Bug reports»». binarypackage.bash-completion ^-x3 List bash completion scripts to be installed. The bash-completion package is required for both build and user environments. См. dh_bash-completion(1). clean ^-x2 List files that should be removed but are not cleaned by the dh_auto_clean command. См. dh_auto_clean(1) и dh_clean(1). compat ^-x4 Set the debhelper compatibility level. (deprecated) Use «Build-Depends: debhelper-compat (= 13)» in debian/ control to specify the compatibility level and remove debian/compat. See «COMPATIBILITY LEVELS» in debhelper(7). binarypackage.conffiles ^-x3 This optional file is installed into the DEBIAN directory within the binary package while supplimenting it with all the conffiles auto-detected by debhelper. This file is primarily useful for using "special" entries such as the remove-on-upgrade feature from dpkg(1). If the program you’re packaging requires every user to modify the configuration files in the /etc directory, there are two popular ways to arrange for them not to be conffiles, keeping the dpkg command happy and quiet. # Создайте Ñимвольную ÑÑылку в каталоге /etc, указывающую на файл в каталоге /var, Ñоздаваемый ÑценариÑми Ñопровождающего. # Создайте файл Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñценариев Ñопровождающего в каталоге /etc. См. dh_installdeb(1). binarypackage.config ^-x3 Ðто config-Ñценарий debconf, иÑпользуемый Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы задавать пользователю любые необходимые Ð´Ð»Ñ Ð½Ð°Ñтройки пакета вопроÑÑ‹. См. «Раздел 9.22, «debconf»». двоичныйпакет.cron.hourly ^-x3 УÑтанавливаетÑÑ Ð² файл etc/cron/hourly/двоичныйпакет в двоичныйпакет. См. dh_installcron(1) и cron(8). двоичныйпакет.cron.daily ^-x3 УÑтанавливаетÑÑ Ð² файл etc/cron/daily/двоичныйпакет в двоичныйпакет. См. dh_installcron(1) и cron(8). двоичныйпакет.cron.weekly ^-x3 УÑтанавливаетÑÑ Ð² файл etc/cron/weekly/двоичныйпакет в двоичныйпакет. См. dh_installcron(1) и cron(8). двоичныйпакет.cron.monthly ^-x3 Installed into the *etc/cron/monthly/*binarypackage file in binarypackage. См. dh_installcron(1) и cron(8). двоичныйпакет.cron.d ^-x3 УÑтанавливаетÑÑ Ð² файл etc/cron.d/двоичныйпакет в двоичныйпакет. См. dh_installcron(1), cron(8) и crontab(5). двоичныйпакет.default ^-x3 ЕÑли такой файл ÑущеÑтвует, то он уÑтанавливаетÑÑ Ð² etc/ default/двоичныйпакет в двоичныйпакет. См. dh_installinit(1). binarypackage.dirs ^-x1 Содержит ÑпиÑок каталогов, которые должны быть Ñозданы в двоичныйпакет. См. dh_installdirs(1). Ðто Ñто не требуетÑÑ, поÑкольку вÑе команды dh_install* автоматичеÑки Ñоздают необходимые каталоги. ИÑпользуйте Ñтот файл только в том Ñлучае, еÑли у Ð²Ð°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÑŽÑ‚ какие-либо затруднениÑ. binarypackage.doc-base ^-x1 УÑтанавливаетÑÑ ÐºÐ°Ðº управлÑющий файл doc-base в двоичныйпакет. See dh_installdocs(1) and «Debian doc-base Manual ( doc-base.html)» provided by the doc-base package. binarypackage.docs ^-x1 Создержит ÑпиÑок файлов документации Ð´Ð»Ñ Ð¸Ñ… уÑтановки в двоичныйпакет. См. dh_installdocs(1). двоичныйпакет.emacsen-compat ^-x3 УÑтанавливаетÑÑ Ð² usr/lib/emacsen-common/packages/compat/ двоичныйпакет в binarypackage. См. dh_installemacsen(1). двоичныйпакет.emacsen-install ^-x3 УÑтанавливаетÑÑ Ð² usr/lib/emacsen-common/packages/install /двоичныйпакет в двоичныйпакет. См. dh_installemacsen(1). двоичныйпакет.emacsen-remove ^-x3 УÑтанавливаетÑÑ Ð² usr/lib/emacsen-common/packages/remove/ двоичныйпакет в двоичныйпакет. См. dh_installemacsen(1). двоичныйпакет.emacsen-startup ^-x3 УÑтанавливаетÑÑ Ð² usr/lib/emacsen-common/packages/startup /двоичныйпакет в двоичныйпакет. См. dh_installemacsen(1). binarypackage.examples ^-x1 Содержит ÑпиÑок файлов или каталогов Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°Ð¼Ð¸ Ð´Ð»Ñ Ð¸Ñ… уÑтановки в usr/share/doc/двоичныйпакет/examples/ в двоичныйпакет. См. dh_installexamples(1). gbp.conf ^-x1 ЕÑли Ñтот файл ÑущеÑтвует, то он иÑпользуетÑÑ ÐºÐ°Ðº файл наÑтройки Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ gbp. См. gbp.conf(5), gbp(1) и git-buildpackage(1). binarypackage.info ^-x1 Содержит ÑпиÑок info-файлов Ð´Ð»Ñ Ð¸Ñ… уÑтановки в двоичныйпакет. См. dh_installinfo(1). binarypackage.init ^-x4 Installed into etc/init.d/binarypackage in binarypackage. (deprecated) См. dh_installinit(1). binarypackage.install ^-x1 Содержит ÑпиÑок файлов, которые должны быть уÑтановлены, но не уÑтанавливаютÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ dh_auto_install. См. dh_install(1) и dh_auto_install(1). binarypackage.links ^-x1 List pairs of source and destination files to be    symlinked. Each pair should be put on its own line, with the source and destination separated by whitespace. См. dh_link(1). двоичныйпакет.lintian-overrides ^-x3 УÑтанавливаетÑÑ Ð² usr/share/lintian/overrides/ двоичныйпакет в каталоге Ñборки пакета. Ðтот файл иÑпользуетÑÑ Ð´Ð»Ñ Ð±Ð»Ð¾ÐºÐ¸Ñ€Ð¾Ð²ÐºÐ¸ ошибочных диагноÑтичеÑких процедур lintian. См. dh_lintian(1), lintian(1) и «РуководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Lintian». binarypackage.maintscript ^-x2 If this optional file exists, debhelper uses this as the template to generate DEBIAN/binarypackage.{pre,post} {inst,rm} files within the binary package while adding « -- "$@"» to the dpkg-maintscript-helper(1) command. See dh_installdeb(1) and «Chapter 6 - Package maintainer scripts and installation procedure» in the «Debian Policy Manual». manpage.* ^-x3 Команда debmake Ñоздаёт шаблонные файы Ñтраниц руководÑтва. Переименуйте Ñти файлы ÑоответÑтвующим образом и обновите их Ñодержимое. Debian Policy requires that each program, utility, and function should have an associated manual page included in the same package. Manual pages are written in nroff (1). If you are new to making a manpage, use manpage.asciidoc or manpage.1 as the starting point. binarypackage.manpages ^-x1 Содержит ÑпиÑок Ñтраниц руководÑтва Ð´Ð»Ñ Ð¸Ñ… уÑтановки. См. dh_installman(1). двоичныйпакет.menu (уÑтарел, более не уÑтанавливаетÑÑ) tech-ctte #741573 decided «Debian should use .desktop files as appropriate». Файл меню Debian уÑтанавливаетÑÑ Ð² usr/share/menu/ двоичныйпакет в двоичныйпакет. Информацию о формате Ñм. в menufile(5). См. dh_installmenu(1). NEWS ^-x3 УÑтанавливаетÑÑ Ð² usr/share/doc/двоичныйпакет/NEWS.Debian . См. dh_installchangelogs(1). patches/* Ðабор файлов заплат -p1, которые применÑÑŽÑ‚ÑÑ Ðº иÑходному коде оÑновной ветки до запуÑка процеÑÑа Ñборки иÑходного кода. Команда debmake не Ñоздаёт файлы заплат. См. dpkg-source(1), «Раздел 4.4, «quilt setup»» и « Раздел 5.9, «Step 3 (alternatives): Modification to the upstream source»». patches/series ^-x1 ПоÑледовательноÑÑ‚ÑŒ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² заплат patches/*. двоичныйпакет.preinst ^-x2, двоичныйпакет.postinst ^-x2, двоичныйпакет.prerm ^-x2, двоичныйпакет.postrm ^-x2 If these optional files exist, the corresponding files are installed into the DEBIAN directory within the binary package after enriched by debhelper. Otherwise, these files in the DEBIAN directory within the binary package is generated by debhelper. Whenever possible, simpler binarypackage.maintscript should be used instead. See dh_installdeb(1) and «Chapter 6 - Package maintainer scripts and installation procedure» in the «Debian Policy Manual». See also debconf-devel(7) and «3.9.1 Prompting in maintainer scripts» in the «Debian Policy Manual». README.Debian ^-x1 УÑтанавливаетÑÑ Ð² первый двоичный пакет, указанный в файле debian/control как usr/share/doc/двоичныйпакет/ README.Debian. Ðтот файл Ñодержит Ñпециальную информацию о пакете Debian. См. dh_installdocs(1). README.source ^-x1 Installed into the first binary package listed in the debian/control file as usr/share/doc/binarypackage/ README.source. If running «dpkg-source -x» on a source package doesn’t produce the source of the package, ready for editing, and allow one to make changes and run dpkg-buildpackage to produce a modified package without taking any additional steps, creating this file is recommended. See «Debian policy manual section 4.14». двоичныйпакет.service ^-x3 ЕÑли Ñтот файл ÑущеÑтвует, то он уÑтанавливаетÑÑ Ð² lib/ systemd/system/двоичныйпакет.service в binarypackage. См. dh_systemd_enable(1), dh_systemd_start(1) и dh_installinit(1). source/format ^-x1 Формат пакета Debian. # Use «3.0 (quilt)» to make this non-native package (recommended) # Use «3.0 (native)» to make this native package See «SOURCE PACKAGE FORMATS» in dpkg-source(1). source/lintian-overrides ^-x3 These file is not installed, but are scanned by the lintian command to provide overrides for the source package. См. dh_lintian(1) и lintian(1). source/local-options ^-x1 The dpkg-source command uses this content as its options. Notable options are: # unapply-patches # abort-on-upstream-changes # auto-commit # single-debian-patch Ðтот файл не добавлÑетÑÑ Ð² Ñоздаваемый пакет Ñ Ð¸Ñходным кодом и предназначен Ñкорее Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑиÑтему ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми, иÑпользуемую Ñопровождающим. See «FILE FORMATS» in dpkg-source(1). source/local-patch-header ^-x1 Ð¡Ð²Ð¾Ð±Ð¾Ð´Ð½Ð°Ñ Ñ‚ÐµÐºÑÑ‚Ð¾Ð²Ð°Ñ Ñ„Ð¾Ñ€Ð¼Ð°, Ñ€Ð°Ð·Ð¼ÐµÑ‰Ð°ÐµÐ¼Ð°Ñ Ð² верхней чаÑти автоматичеÑки Ñозданной заплаты. Ðтот файл не добавлÑетÑÑ Ð² Ñоздаваемый пакет Ñ Ð¸Ñходным кодом и предназначен Ñкорее Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑиÑтему ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми, иÑпользуемую Ñопровождающим. See «FILE FORMATS» in dpkg-source(1). source/options ^-x3 Use source/local-options instead to avoid issues with NMUs. See «FILE FORMATS» in dpkg-source(1). source/patch-header ^-x4 Use source/local-patch-header instead to avoid issues with NMUs. See «FILE FORMATS» in dpkg-source(1). binarypackage.symbols ^-x1 Файлы Ñимволов. ЕÑли Ñти файлы ÑущеÑтвуют, то они будут переданы Ð´Ð»Ñ Ð¾Ð±Ñ€Ð°Ð±Ð¾Ñ‚ÐºÐ¸ и уÑтановки команде dpkg-gensymbols. См. dh_makeshlibs(1) и «Раздел 9.16, «Библиотека Ñимволов»».. binarypackage.templates ^-x3 Ðто файл шаблонов Ð´Ð»Ñ debconf. Он иÑпользуетÑÑ Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° вопроÑов, необходимых Ð´Ð»Ñ Ð½Ð°Ñтройки пакета. См. « Раздел 9.22, «debconf»». tests/control ^-x1 This is the RFC822-style test meta data file defined in DEP-8. See autopkgtest(1) and «Раздел 9.4, «ÐÐµÐ¿Ñ€ÐµÑ€Ñ‹Ð²Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ»». TODO ^-x3 УÑтанавливаетÑÑ Ð² первый двоичный пакет, указанный в файле debian/control как usr/share/doc/двоичныйпакет/ TODO.Debian. См. dh_installdocs(1). двоичныйпакет.tmpfile ^-x3 ЕÑли Ñтот файл ÑущеÑтвует, то он уÑтанавливаетÑÑ Ð² usr/ lib/tmpfiles.d/двоичныйпакет.conf в двоичныйпакет. См. dh_systemd_enable(1), dh_systemd_start(1) и dh_installinit(1). binarypackage.upstart ^-x4 If this exists, it is installed into etc/init/ package.conf in the package build directory. (deprecated) См. dh_installinit(1). upstream/metadata ^-x1 Per-package machine-readable metadata about upstream (DEP-12). See «Upstream MEtadata GAthered with YAml (UMEGAYA)». --------------------------------------------------------------------- ^[11] This is the default up to debhelper v13. At debhelper v14,    it warns the default change. After debhelper v15, it will change the default to DESTDIR=debian/tmp/ . ^[12] Ð”Ð»Ñ Ð±Ð¾Ð»ÐµÐµ чем 90% пакетов длина имени пакета равна 24    Ñимволам или меньше Ñтого чиÑла; длина верÑии оÑновной ветки равна 10 Ñимволам или меньше, а длина номера редакции Debian равна 3 Ñимволам или меньше.    ^[13] Команда debmake Ñоздаёт неÑколько более Ñложный файл debian /rules. Тем не менее, Ñто Ð±Ð°Ð·Ð¾Ð²Ð°Ñ Ñ‡Ð°ÑÑ‚ÑŒ. ^[14] This simplicity is available since version 7 of the    debhelper package. This guide assumes the use of debhelper version 13 or newer. ^[15] This is the default up to debhelper v13. At debhelper v14,    it warns the default change. After debhelper v15, it will change the default to DESTDIR=debian/tmp/ .    ^[16] If you are using the vim editor, make sure to save this with the «:wq» command. Глава 7. Sanitization of the source    There are a few cases which require to sanitize the source to prevent contaminating the generated Debian source package. * Non DFSG contents in the upstream source. + Debian takes software freedom seriously and follows the DFSG. * Extraneous auto-generated contents in the upstream source. + Debian package should rebuild them under the latest system.    * Extraneous VCS contents in the upstream source. + The -i and -I options set in «Раздел 4.5, «devscripts setup»» for the dpkg-source(1) command should avoid these. o The -i option is aimed at the non-native Debian package. o The -I is aimed at the native Debian package.    There are several methods to avoid inclusion of undesirable contents. 7.1. Fix with Files-Excluded    This is suitable for avoiding non DFSG contents in the upstream source tarball. * Укажите ÑпиÑок файлов Ð´Ð»Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð² Ñтроке Files-Excluded файла debian/copyright. * Укажите URL Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ tar-архива оÑновной ветки в файле debian/watch. * ЗапуÑтите команду uscan Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸ нового tar-архива оÑновной ветки.    + Alternatively, use the «gbp import-orig --uscan --pristine-tar» command. * mk-origtargz invoked from uscan removes excluded files from the upstream tarball and repack it as a clean tarball. * ПолучившийÑÑ tar-архив будет иметь верÑию Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ Ñуффиком +dfsg.    See «COPYRIGHT FILE EXAMPLES» in mk-origtargz(1). 7.2. Fix with «debian/rules clean»    This is suitable for avoiding auto-generated files and removes them in the «debian/rules clean» target Примечание    The «debian/rules clean» target is called before the «dpkg-source --build» command by the dpkg-buildpackage command and the « dpkg-source --build» command ignores removed files. 7.3. Fix with extend-diff-ignore    This is for the non-native Debian package. The problem of extraneous diffs can be fixed by ignoring changes    made to parts of the source tree by adding the « extend-diff-ignore=…​» line in the debian/source/options file. debian/source/options to exclude the config.sub, config.guess and Makefile files:    # Don't store changes on autogenerated files extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile)$" Примечание    Ðтот подход работает вÑегда, даже еÑли вы не можете удалить файл. ПоÑтому он позволÑет вам не делать резервную копию неизменённого файла только Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы воÑÑтановить его Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñледующей Ñборки. ПодÑказка ЕÑли иÑпользуетÑÑ Ñ„Ð°Ð¹Ð» debian/source/local-options, то можно    Ñкрыть Ñти наÑтройки из Ñоздаваемого пакета Ñ Ð¸Ñходным кодом. Ðто может быть полезно в том Ñлучае, когда локальные неÑтандартные файлы ÑиÑтемы ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÐµÑ€ÑиÑми вмешиваютÑÑ Ð² процеÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ пакета. 7.4. Fix with tar-ignore    This is for the native Debian package. You can exclude some files in the source tree from the generated    tarball by tweaking the file glob by adding the «tar-ignore=…​» lines in the debian/source/options or debian/source/local-options files. Примечание If, for example, the source package of a native package needs files with the file extension .o as a part of the test data, the    setting in «Раздел 4.5, «devscripts setup»» is too aggressive. You can work around this problem by dropping the -I option for DEBUILD_DPKG_BUILDPACKAGE_OPTS in «Раздел 4.5, «devscripts setup» » while adding the «tar-ignore=…​» lines in the debian/source/ local-options file for each package. 7.5. Fix with «git clean -dfx» The problem of extraneous contents in the second build can be    avoided by restoring the source tree by committing the source tree to the Git repository before the first build.    Вы можете воÑÑтановить дерево иÑходного кода до Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²Ñ‚Ð¾Ñ€Ð¾Ð¹ Ñборки. Ðапример:    $ git reset --hard $ git clean -dfx This works because the dpkg-source command ignores the contents    of the typical VCS files in the source tree with the DEBUILD_DPKG_BUILDPACKAGE_OPTS setting in `"Раздел 4.5, « devscripts setup»`". ПодÑказка    If the source tree is not managed by a VCS, you should run «git init; git add -A .; git commit» before the first build. Глава 8. More on packaging    Let’s describe more basics on Debian packaging. 8.1. Package customization All customization data for the Debian source package resides in    the debian/ directory as presented in «Раздел 5.7, «Шаг 3: изменение шаблонных файлов»»: * The Debian package build system can be customized through the debian/rules file (see «Раздел 8.2, «Customized debian/rules» »).    * The Debian package installation path etc. can be customized through the addition of configuration files such as package .install and package.docs in the debian/ directory for the dh_* commands from the debhelper package (see «Раздел 6.14, «Other debian/* files»»). When these are not sufficient to make a good Debian package, -p1 patches of debian/patches/* files are deployed to modify the    upstream source. These are applied in the sequence defined in the debian/patches/series file before building the package as presented in «Раздел 5.9, «Step 3 (alternatives): Modification to the upstream source»». You should address the root cause of the Debian packaging problem    by the least invasive way. The generated package shall be more robust for future upgrades in this way. Примечание    Send the patch addressing the root cause to the upstream maintainer if it is useful to the upstream. 8.2. Customized debian/rules Flexible customization of the Раздел 6.5, «debian/rules file» is    realized by adding appropriate override_dh_* targets and their rules. Ð’ÑÑкий раз как требуетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ какую-то Ñпециальную операцию Â Â Â Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»Ñ‘Ð½Ð½Ð¾Ð¹ команды dh_foo, вызываемой командой dh, вÑÑкое автоматичеÑкое выполнение её может быть отменено путём Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Makefile-цели override_dh_foo в файл debian/rules. The build process may be customized via the upstream provided    interface such as arguments to the standard source build system commands, such as: * configure,    * Makefile, * «python -m build», or * Build.PL. If this is the case, you should add the override_dh_auto_build    target with «dh_auto_build -- arguments». This ensures passing arguments to the build system after the default parameters that dh_auto_build usually passes. ПодÑказка    Please try not to execute the bare build system commands directly if they are supported by the dh_auto_build command.    См.: * «Раздел 5.7, «Шаг 3: изменение шаблонных файлов»» for the basic example. * «Раздел 9.3, «Note on build system»» to be reminded of the    challenge involving the underlying build system. * «Раздел 9.10, «Multiarch»» for multiarch customization. * «Раздел 9.6, «УÑиление безопаÑноÑти компилÑтора»» for hardening customization. 8.3. Variables for debian/rules Ðекоторые Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ñ…, которые могут оказатьÑÑ Â Â Â Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ‹Ð¼Ð¸ Ð´Ð»Ñ debian/rules, можно найти в файлах в каталоге /usr/ share/dpkg/. Ð’ чаÑтноÑти: pkg-info.mk Set DEB_SOURCE, DEB_VERSION, DEB_VERSION_EPOCH_UPSTREAM, DEB_VERSION_UPSTREAM_REVISION, DEB_VERSION_UPSTREAM, and DEB_DISTRIBUTION variables obtained from dpkg-parsechangelog (1). (useful for backport support etc..) vendor.mk Set DEB_VENDOR and DEB_PARENT_VENDOR variables; and    dpkg_vendor_derives_from macro obtained from dpkg-vendor(1). (useful for vendor support (Debian, Ubuntu, …​).) architecture.mk Set DEB_HOST_* and DEB_BUILD_* variables obtained from dpkg-architecture(1). buildflags.mk Set CFLAGS, CPPFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, FFLAGS, FCFLAGS, and LDFLAGS build flags obtained from dpkg-buildflags(1).    Ðапример, можно добавить дополнительную опцию в CONFIGURE_FLAGS Ð´Ð»Ñ Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€ linux-any, добавлÑÑ Ñледующее в файл debian/rules: DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) ...    ifeq ($(DEB_HOST_ARCH_OS),linux) CONFIGURE_FLAGS += --enable-wayland endif    См. «Раздел 9.10, «Multiarch»», dpkg-architecture(1) и dpkg-buildflags(1). 8.4. Ðовый выпуÑк оÑновной ветки When a new upstream release tarball foo-newvwesion.tar.gz is    released, the Debian source package can be updated by invoking commands in the old source tree as: $ uscan    ... foo-newversion.tar.gz downloaded $ uupdate -v newversion ../foo-newversion.tar.gz * The debian/watch file in the old source tree must be a valid one. * This make symlink ../foo_newvwesion.orig.tar.gz pointing to    ../foo-newvwesion.tar.gz. * Files are extracted from ../foo-newvwesion.tar.gz to ../foo- newversion/ * Files are copied from ../foo-oldversion/debian/ to ../foo- newvesion/debian/ . After the above, you should refresh debian/patches/* files (see «    Раздел 8.5, «Manage patch queue with dquilt»») and update debian/ changelog with the dch(1) command. When «debian uupdate» is specified at the end of line in the    debian/watch file, uscan automatically executes uupdate(1) after downloading the tarball. 8.5. Manage patch queue with dquilt    You can add, drop, and refresh debian/patches/* files with dquilt to manage patch queue. * Add a new patch debian/patches/bugname.patch recording the upstream source modification on the file buggy_file as: $ dquilt push -a $ dquilt new bugname.patch $ dquilt add buggy_file $ vim buggy_file ... $ dquilt refresh $ dquilt header -e $ dquilt pop -a * Drop (== disable) an existing patch    + Comment out pertinent line in debian/patches/series + Erase the patch itself (optional) * Refresh debian/patches/* files to make «dpkg-source -b» work as expected after updating a Debian package to the new upstream release. $ uscan; uupdate # updating to the new upstream release $ while dquilt push; do dquilt refresh ; done $ dquilt pop -a + If conflicts are encountered with «dquilt push» in the above, resolve them and run «dquilt refresh» manually for each of them. 8.6. Build commands    Here is a recap of popular low level package build commands. There are many ways to do the same thing. * dpkg-buildpackage = Ñдро инÑтрумента Ð´Ð»Ñ Ñборки пакета * debuild = dpkg-buildpackage + lintian (Ñборка Ñ Ð¾Ñ‡Ð¸Ñ‰ÐµÐ½Ð½Ñ‹Ð¼Ð¸    переменными окружениÑ) * schroot = core of the Debian chroot environment tool * sbuild = dpkg-buildpackage on custom schroot (build in the chroot) 8.7. Note on sbuild The sbuild(1) command is a wrapper script of dpkg-buildpackage    which builds Debian binary packages in a chroot environment managed by the schroot(1) command. For example, building for Debian unstable suite can be done as:    $ sudo sbuild -d unstable In schroot(1) terminology, this builds a Debian package in a    clean ephemeral chroot «chroot:unstable-amd64-sbuild» started as a copy of the clean minimal persistent chroot « source:unstable-amd64-sbuild». This build environment was set up as described in «Раздел 4.6, «    sbuild setup»» with «sbuild-debian-developer-setup -s unstable» which essentially did the following: $ sudo mkdir -p /srv/chroot/dist-amd64-sbuild    $ sudo sbuild-createchroot unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian $ sudo usermod -a -G sbuild <your_user_name> $ sudo newgrp - The schroot(1) configuration for unstable-amd64-sbuild was    generated at /etc/schroot/chroot.d/unstable-amd64-sbuild.$suffix : [unstable-amd64-sbuild] description=Debian sid/amd64 autobuilder groups=root,sbuild    root-groups=root,sbuild profile=sbuild type=directory directory=/srv/chroot/unstable-amd64-sbuild union-type=overlay    Где: * The profile defined in the /etc/schroot/sbuild/ directory is used to setup the chroot environment.    * /srv/chroot/unstable-amd64-sbuild directory holds the chroot filesystem. * /etc/sbuild/unstable-amd64-sbuild is symlinked to /srv/chroot /unstable-amd64-sbuild .    You can update this source chroot «source:unstable-amd64-sbuild» by:    $ sudo sbuild-update -udcar unstable    You can log into this source chroot «source:unstable-amd64-sbuild » by:    $ sudo sbuild-shell unstable ПодÑказка    If your source chroot filesystem is missing packages such as libeatmydata1, ccache, and lintian for your needs, you may want to install these by logging into it. 8.8. Special build cases The orig.tar.gz file may need to be uploaded for a Debian    revision other than 0 or 1 under some exceptional cases (e.g., for a security upload). When an essential package becomes a non-essential one (e.g.,    adduser), you need to remove it manually from the existing chroot environment for its use by piuparts. 8.9. Загрузите orig.tar.gz При первой загрузке пакета в архив вам Ñледует включить в    загрузку также и архив Ñ Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼ иÑходным кодом, orig.tar.gz . ЕÑли номер редакции Debian вашего пакета не ÑвлÑетÑÑ 1 или 0, то    Ñто проиÑходит по умолчанию. Ð’ противном Ñлучае, вам Ñледует передать опцию -sa команде dpkg-buildpackage. * dpkg-buildpackage -sa    * debuild -sa * sbuild * For «gbp buildpackage», edit the ~/.gbp.conf file. ПодÑказка    С другой Ñтороны иÑпользование опции -sd приведёт к тому, что архив Ñ Ð¾Ñ€Ð¸Ð³Ð¸Ð½Ð°Ð»ÑŒÐ½Ñ‹Ð¼ иÑходным кодом, orig.tar.gz, будет включён в загрузку. ПодÑказка    Security uploads require including the orig.tar.gz file. 8.10. Пропущенные загрузки ЕÑли вы Ñоздаёте неÑколько запиÑей в файле debian/changelog и пропуÑкаете загрузки, то вам Ñледует Ñоздать ÑоответÑтвующий файл    *_.changes, включающий вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ð¿Ð¾Ñледней загрузки. Ðто можно Ñделать, передав dpkg-buildpackage опцию -v Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ поÑледней загруженной верÑии, например, 1.2. * dpkg-buildpackage -v1.2 * debuild -v1.2    * sbuild --debbuildopts -v1.2 * При иÑпользовании gbp buildpackage отредактируйте файл ~ /.gbp.conf. 8.11. Bug reports    The reportbug(1) command used for the bug report of binarypackage can be customized by the files in usr/share/bug/binarypackage/.    Команда dh_bugfiles уÑтанавливает Ñти файлы из шаблонных файлов в каталоге debian/. * debian/двоичныйпакет.bug-control → usr/share/bug/ двоичныйпакет/control + Ðтот файл Ñодержит некоторые указаниÑ, такие как Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð° об ошибке другому пакету. * debian/двоичныйпакет.bug-presubj → usr/share/bug/ двоичныйпакет/presubj    + Ðтот файл отображаетÑÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды reportbug. * debian/двоичныйпакет.bug-script → usr/share/bug/двоичныйпакет или usr/share/bug/двоичныйпакет/script + Команда reportbug запуÑкает Ñтот Ñценарий Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ð½Ð¾Ð³Ð¾ файла Ð´Ð»Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð° об ошибке.    See dh_bugfiles(1) and «reportbug’s Features for Developers ( README.developers)» ПодÑказка    If you always remind the bug reporter of something or ask them about their situation, use these files to automate it. Глава 9. Продвинутые темы работы над пакетом    Let’s describe advanced topics on Debian packaging. 9.1. Historical perspective    Let me oversimplify historical perspective of Debian packaging practices focused on the non-native packaging. Debian was started in 1990s when upstream packages were available    from public FTP sites such as Sunsite. In those early days, Debian packaging used Debian source format currently known as the Debian source format «1.0»: * The Debian source package ships a set of files for the Debian source package. + package_version.orig.tar.gz : symlink to or copy of the    upstream released file. + package_version-revision.diff.gz : «One big patch» for Debian modifications. + package_version-revision.dsc : package description. * Several workaround approaches such as dpatch, dbs, or cdbs were deplyoed to manage multiple topic patches.    The modern Debian source format «3.0 (quilt)» was invented around 2008 (see «ProjectsDebSrc3.0»): * The Debian source package ships a set of files for the Debian source package. + package_version.orig.tar.?z : symlink to or copy of the upstream released file. + package_version-revision.debian.tar.?z : tarball of debian/ for Debian modifications.    o The debian/source/format file contains «3.0 (quilt)». o Optional multiple topic patches are stored in the debian/patches/ directory. + package_version-revision.dsc : package description. * The standarized approach to manage multiple topic patches using quilt(1) is deployed for the Debian source format «3.0 (quilt)».    Most Debian packages adopted the Debian source formats «3.0 (quilt)» and «3.0 (native)». Now, the git(1) is popular with upstream and Debian developers.    The git and its associated tools are important part of the modern Debian packaging workflow. This modern workflow involving git will be mentioned later in «Глава 10, Packaging with git». 9.2. Current trends    Current Debian packaging practices and their trends are moving target. See: * «Debian Trends» — Hints for «De facto standard» of Debian practices + Build systems: dh + Debian source format: «3.0 (quilt)» + VCS: git    + VCS Hosting: salsa + Rules-Requires-Root: adopted, fakeroot + Copyright format: DEP-5 * «debhelper-compat-upgrade-checklist(7) manpage» — Upgrade checklist for debhelper * «DEP - Debian Enhancement Proposals» — Formal proposals to enhance Debian    You can also search entire Debian source code data by yourself, too. * «Debian Sources» — code search tool    + «Debian Code Search» — wiki page describing its usage * «Debian Code Search» — another code search tool 9.3. Note on build system Auto-generated files of the build system may be found in the    released upstream tarball. These should be regenerated when Debian package is build. E.g.:    * «dh $@ --with autoreconf» should be used in the debian/rules if Autotools (autoconf + automake) are used. Some modern build system may be able to download required source codes and binary files from arbitrary remote hosts to satisfy    build requirements. Don’t use this download feature. The official Debian package is required to be build only with packages listed in Build-Depends: of the debian/control file. 9.4. ÐÐµÐ¿Ñ€ÐµÑ€Ñ‹Ð²Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ The dh_auto_test(1) command is a debhelper command that tries to    automatically run the test suite provided by the upstream developer during the Debian package building process. The autopkgtest(1) command can be used after the Debian package    building process. It tests generated Debian binary packages in the virtual environment using the debian/tests/control RFC822-style metadata file as continuous integration (CI). See: * Documents in the /usr/share/doc/autopkgtest/ directory    * «4. autopkgtest: Automatic testing for packages» of the « Ubuntu Packaging Guide»    Кроме того, в Debian ÑущеÑтвует ещё неÑколько других инÑтрументов непрерывной интеграции. * The Salsa offers «Раздел 10.3, «Salsa CI service»». * The debci package: CI platform on top of the autopkgtest    package * Пакет jenkins: платформа непрерывной интеграции общего Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ 9.5. Предзагрузка Debian cares about supporting new ports or flavours. The new ports or flavours require bootstrapping operation for the    cross-build of the initial minimal native-building system. In order to avoid build-dependency loops during bootstrapping, the build-dependency needs to be reduced using the DEB_BUILD_PROFILES environment variable.    See Debian wiki: «BuildProfileSpec». ПодÑказка    If a core package foo build depends on a package bar with deep build dependency chains but bar is only used in the test target in foo, you can safely mark the bar with <!nocheck> in the Build-depends of foo to avoid build loops. 9.6. УÑиление безопаÑноÑти компилÑтора    The compiler hardening support spreading for Debian jessie (8.0) demands that we pay extra attention to the packaging.    Вам Ñледует подробно изнакомитьÑÑ Ñо Ñледующей Ñправочной документацией:    * Debian wiki: «Hardening» * Debian wiki: «Hardening Walkthrough» Команда debmake добавлÑет шаблонные комментарии в файл debian/    rules, требующиеÑÑ Ð´Ð»Ñ DEB_BUILD_MAINT_OPTIONS, DEB_CFLAGS_MAINT_APPEND и DEB_LDFLAGS_MAINT_APPEND (Ñм. «Глава 5, Simple packaging» и dpkg-buildflags(1)). 9.7. ПовторÑÐµÐ¼Ð°Ñ Ñборка    Here are some recommendations to attain a reproducible build result. * Ðе включайте в результат временную метку на оÑнове ÑиÑтемного времени. * Don’t embed the file path of the build environment. * Use «dh $@» in the debian/rules to access the latest debhelper features. * Export the build environment as «LC_ALL=C.UTF-8» (see « Раздел 11.1, «Сборка Ñ Ð¸Ñпользованием кодировки UTF-8»»).    * Set the timestamp used in the upstream source from the value of the debhelper-provided environment variable $SOURCE_DATE_EPOCH. * ПодробноÑти можно найти на вики-Ñтранице «ReproducibleBuilds» . + «РуководÑтво ReproducibleBuilds». + «ReproducibleBuilds TimestampsProposal». УправлÑющий файл    имÑ-иÑходного-кода_верÑиÑ-иÑходного-кода_архитектура.buildinfo, Ñоздаваемый dpkg-genbuildinfo(1), Ñодержит информацию о Ñборочном окружении. См. deb-buildinfo(5) 9.8. Переменные подÑтановки Кроме того, файл debian/control определÑет завиÑимоÑти пакета, в которых может иÑопльзоватьÑÑ Â«Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼ подÑтановки переменных»    (substvar), который оÑвобождает Ñопровождающих пакета от рутинной работы по отÑлеживанию большинÑтва проÑÑ‚Ñ‹Ñ… завиÑимоÑтей пакета. См. deb-substvars(5).    The debmake command supports the following substvars: * ${misc:Depends} Ð´Ð»Ñ Ð²Ñех двоичных пакетов * ${misc:Pre-Depends} Ð´Ð»Ñ Ð²Ñех мультиархитектурных пакетов * ${shlibs:Depends} Ð´Ð»Ñ Ð²Ñех двоичных пакетов Ñ Ð¸ÑполнÑемыми    файлами и пакетов библиотек * ${python:Depends} Ð´Ð»Ñ Ð²Ñех пакетов Ñ ÐºÐ¾Ð´Ð¾Ð¼ на Ñзыке Python * ${python3:Depends} Ð´Ð»Ñ Ð²Ñех пакетов Ñ ÐºÐ¾Ð´Ð¾Ð¼ на Ñзыке Python3 * ${perl:Depends} Ð´Ð»Ñ Ð²Ñех пакетов Ñ ÐºÐ¾Ð´Ð¾Ð¼ на Ñзыке Perl * ${ruby:Depends} Ð´Ð»Ñ Ð²Ñех пакетов Ñ ÐºÐ¾Ð´Ð¾Ð¼ на Ñзыке Ruby For the shared library, required libraries found simply by «    objdump -p /path/to/program | grep NEEDED» are covered by the shlib substvar. For Python and other interpreters, required modules found simply    looking for lines with «import», «use», «require», etc., are covered by the corresponding substvars. Â Â Â Ð”Ð»Ñ Ð¾Ñтальных программ, не иÑпользующих ÑобÑтвенные переменные подÑтановки, завиÑимоÑти обрабатываютÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ misc. Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼ командной оболочки POSIX нет проÑтого ÑпоÑоба Â Â Â Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑтей, поÑтому их завиÑимоÑти не обрабатываютÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ переменной. Ð”Ð»Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐº и модулей, требующихÑÑ Ñ‡ÐµÑ€ÐµÐ· механизм динамичеÑкой    загрузки, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ð¼ÐµÑ…Ð°Ð½Ð¸Ð·Ð¼ «GObject-интроÑпекциÑ», нет проÑтого ÑпоÑоба Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑтей, поÑтому их завиÑимоÑти не обрабатываютÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð¹ переменной. 9.9. Пакет библиотеки Packaging library software requires you to perform much more work    than usual. Here are some reminders for packaging library software: * The library binary package must be named as in «Раздел 9.17, «Library package name»». * Debian ships shared libraries such as /usr/lib/<triplet>/lib foo-0.1.so.1.0.0 (see «Раздел 9.10, «Multiarch»»).    * Debian encourages using versioned symbols in the shared library (see «Раздел 9.16, «Библиотека Ñимволов»»). * Debian не поÑтавлÑет libtool-архивы библиотек *.la. * Debian discourages using and shipping *.a static library files.    Before packaging shared library software, see: * «Chapter 8 - Shared libraries» of the «Debian Policy Manual»    * «10.2 Libraries» of the «Debian Policy Manual» * «6.7.2. Libraries» of the «Debian Developer’s Reference» Â Â Â Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸ÑторичеÑких Ñведений обратитеÑÑŒ к Ñледующей документации: * «СпаÑение из ада завиÑимоÑтей» ^[17] + This encourages having versioned symbols in the shared    library. * «Debian Library Packaging guide» ^[18] + Please read the discussion thread following its announcement, too. 9.10. Multiarch Multiarch support for cross-architecture installation of binary packages (particularly i386 and amd64, but also other    combinations) in the dpkg and apt packages introduced in Debian wheezy (7.0, May 2013), demands that we pay extra attention to packaging.    Вам Ñледует подробно изнакомитьÑÑ Ñо Ñледующей Ñправочной документацией: * Ubuntu вики (оÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð²ÐµÑ‚ÐºÐ° разработки) + «MultiarchSpec»    * Debian вики (ÑÐ¸Ñ‚ÑƒÐ°Ñ†Ð¸Ñ Ð² Debian) + «Поддержка мультиархитектурноÑти в Debian» + «Multiarch/Implementation» МультиархитектурноÑÑ‚ÑŒ включаетÑÑ Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ <тройки> вида    i386-linux-gnu или x86_64-linux-gnu в пути уÑтановки разделÑемых библиотек вида /usr/lib/<тройка>/ и Ñ‚. д. * Значение <тройки>, внутренне необходимое Ð´Ð»Ñ Ñценариев debhelper, уÑтанавливаетÑÑ Ñамими ÑценариÑми неÑвно. Сопровождающему не нужно об Ñтом беÑпокоитьÑÑ. * The <triplet> value used in override_dh_* target scripts must be explicitly set in the debian/rules file by the maintainer. The <triplet> value is stored in the $(DEB_HOST_MULTIARCH) variable    in the following debian/rules snippet example: DEB_HOST_MULTIARCH = $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) ... override_dh_install: mkdir -p package1/lib/$(DEB_HOST_MULTIARCH) cp -dR tmp/lib/. package1/lib/$(DEB_HOST_MULTIARCH)    См.: * «Раздел 8.3, «Variables for debian/rules»»    * «Раздел 15.2, «debmake -b»» * «Раздел 9.12, «Сценарии и примеры Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð°Â»Â» * «dpkg-architecture(1) manpage» 9.11. Split of a Debian binary package    For well behaving build systems, the split of a Debian binary package into small ones can be realized as follows. * Создайте запиÑи Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñми метаданных двоичных пакетах в    файле debian/control Ð´Ð»Ñ Ð²Ñех двоичных пакетов. * Укажите вÑе пути к файлам (отноÑительно каталга debian/tmp) в ÑоответÑтвующих файлах debian/двоичныйпакет.install.    С примерами можно ознакомитьÑÑ Ð² наÑтоÑщем руководÑтве: * «Раздел 13.11, «Autotools (multi-binary package)»» (на оÑнове    Autotools) * «Раздел 13.12, «CMake (multi-binary package)»» (на оÑнове CMake) An intuitive and flexible method to create the initial template    debian/control file defining the split of the Debian binary packages is accommodated with the -b option. See «Раздел 15.2, « debmake -b»». 9.12. Сценарии и примеры Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Ðиже приводитÑÑ Ð½ÐµÑколько типичных Ñценариев Ñ€Ð°Ð·Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Â Â Â Ð¼ÑƒÐ»ÑŒÑ‚Ð¸Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ð¾Ð³Ð¾ пакета Ð´Ð»Ñ Ñледующих примеров иÑходного кода оÑновной ветки разработки, в которых иÑпользуетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° debmake : * иÑходный код библиотеки libfoo-1.0.tar.gz * иÑходный код утилиты bar-1.0.tar.gz, напиÑанный на    компилируемом Ñзыке * иÑходный код утилиты baz-1.0.tar.gz, напиÑанный на интерпретируемом Ñзыке +---------------------------------------------------------------+ |двоичныйпакет| тип |Architecture:|Multi-Arch:| Содержимое | | | | | | пакета | |-------------+------+-------------+-----------+----------------| |libfoo1 |lib^* |any |same |разделÑÐµÐ¼Ð°Ñ | | | | | |бибиотека, | | | | | |возможна | | | | | |ÑовмеÑÑ‚Ð½Ð°Ñ | | | | | |уÑтановка | |-------------+------+-------------+-----------+----------------| |libfoo-dev |dev^* |any |same |заголовочные | | | | | |файлы | | | | | |разделÑемой | | | | | |библиотеки и | | | | | |проч., возможна | | | | | |ÑовмеÑÑ‚Ð½Ð°Ñ | | | | | |уÑтановка | |-------------+------+-------------+-----------+----------------| |libfoo-tools |bin^* |any |foreign |программы Ñ | | | | | |поддержкой | | | | | |времени | | | | | |иÑполнениÑ, |    | | | | |ÑовмеÑÑ‚Ð½Ð°Ñ | | | | | |уÑтановка | | | | | |невозможна | |-------------+------+-------------+-----------+----------------| |libfoo-doc |doc^* |all |foreign |файлы | | | | | |документации | | | | | |разделÑемой | | | | | |библиотеки | |-------------+------+-------------+-----------+----------------| |bar |bin^* |any |foreign |Ñкомпилированный| | | | | |файлы программы,| | | | | |ÑовмеÑÑ‚Ð½Ð°Ñ | | | | | |уÑтанвка | | | | | |невозможна | |-------------+------+-------------+-----------+----------------| |bar-doc |doc^* |all |foreign |файлы | | | | | |документации | | | | | |программы | |-------------+------+-------------+-----------+----------------| |baz |script|all |foreign |файлы | | | | | |интерпретируемой| | | | | |программы | +---------------------------------------------------------------+ 9.13. Multiarch library path Debian policy requires to comply with the «Filesystem Hierarchy    Standard (FHS), version 3.0», with the exceptions noted in «File System Structure». The most notable exception is the use of /usr/lib/<triplet>/    instead of /usr/lib<qual>/ (e.g., /lib32/ and /lib64/) to support a multiarch library. Таблица 9.1. Опции Ð¿ÑƒÑ‚Ñ Ð¼ÑƒÐ»ÑŒÑ‚Ð¸Ð°Ñ€Ñ…Ð¸Ñ‚ÐµÐºÑ‚ÑƒÑ€Ð½Ñ‹Ñ… библиотек +---------------------------------------------------------------+ |КлаÑÑичеÑкий |Мультиархитектурный путь|Мультиархитектуный путь | | путь | Ð´Ð»Ñ i386 | Ð´Ð»Ñ amd64 |    |-------------+------------------------+------------------------| |/lib/ |/lib/i386-linux-gnu/ |/lib/x86_64-linux-gnu/ | |-------------+------------------------+------------------------| |/usr/lib/ |/usr/lib/i386-linux-gnu/|/usr/lib/ | | | |x86_64-linux-gnu/ | +---------------------------------------------------------------+ Ð”Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð¾Ð² на оÑнове Autotools, в которых иÑпользуетÑÑ Ð¿Ð°ÐºÐµÑ‚    debhelper Ñ (compat>=9), уÑтановка Ñтого пути выполнÑетÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды dh_auto_configure. При работе Ñ Ð´Ñ€ÑƒÐ³Ð¸Ð¼Ð¸ пакетами, иÑпользующими неподдерживаемые    ÑиÑтемы Ñборки, вам Ñледует вручную изменить путь уÑтановки указанным ниже ÑпоÑобом. * If «./configure» is used in the override_dh_auto_configure target in debian/rules, make sure to replace it with «    dh_auto_configure --» while re-targeting the install path from /usr/lib/ to /usr/lib/$(DEB_HOST_MULTIARCH)/. * Замените вÑе пути Ñ /usr/lib/ на /usr/lib/*/ в файлах debian/ foo.install. All files installed simultaneously as the multiarch package to    the same file path should have exactly the same file content. You must be careful with differences generated by the data byte order and by the compression algorithm. Файлы разделÑемых библиотек, раÑположенные в каталогах по    умолчанию, /usr/lib/ и /usr/lib/<тройка>/, загружаютÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки.    For shared library files in another path, the GCC option -l must be set by the pkg-config command to make them load properly. 9.14. Multiarch header file path    В мультиархитектурной ÑиÑтеме Debian GCC по умолчанию включает и /usr/include/, и /usr/include/<тройка>/. If the header file is not in those paths, the GCC option -I must    be set by the pkg-config command to make "#include <foo.h>" work properly. Таблица 9.2. Опции пути мультиархитектурного заголовочного файла +---------------------------------------------------------------+ | КлаÑÑичеÑкий | Мультиархитектурный |Мультиархитектуный путь | | путь | путь Ð´Ð»Ñ i386 | Ð´Ð»Ñ amd64 | |--------------+-----------------------+------------------------| |/usr/include/ |/usr/include/ |/usr/include/ | | |i386-linux-gnu/ |x86_64-linux-gnu/ |    |--------------+-----------------------+------------------------| |/usr/include/ |/usr/include/ |/usr/include/ | |имÑпакета/ |i386-linux-gnu/ |x86_64-linux-gnu/ | | |имÑпакета/ |имÑпакета/ | |--------------+-----------------------+------------------------| | |/usr/lib/i386-linux-gnu|/usr/lib/ | | |/имÑпакета/ |x86_64-linux-gnu/ | | | |имÑпакета/ | +---------------------------------------------------------------+ The use of the /usr/lib/<triplet>/packagename/ path for the    library files allows the upstream maintainer to use the same install script for the multiatch system with /usr/lib/<triplet> and the biarch system with /usr/lib<qual>/. ^[19] The use of the file path containing packagename enables having    more than 2 development libraries simultaneously installed on a system. 9.15. Multiarch *.pc file path Программа pkg-config иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ об    уÑтановленных в ÑиÑтеме библиотеках. Она ÑохранÑет Ñвои параметры наÑтройки в файле *.pc и иÑпользуетÑÑ Ð´Ð»Ñ ÑƒÑтановки опций -I и -l Ð´Ð»Ñ GCC. Таблица 9.3. Опции пути к файлу *.pc +---------------------------------------------------------------+ |КлаÑÑичеÑкий | Мультиархитектурный | Мультиархитектуный путь |    | путь | путь Ð´Ð»Ñ i386 | Ð´Ð»Ñ amd64 | |-------------+-----------------------+-------------------------| |/usr/lib/ |/usr/lib/i386-linux-gnu|/usr/lib/x86_64-linux-gnu| |pkgconfig/ |/pkgconfig/ |/pkgconfig/ | +---------------------------------------------------------------+ 9.16. Библиотека Ñимволов The symbols support in dpkg introduced in Debian lenny (5.0, May 2009) helps us to manage the backward ABI compatibility of the    library package with the same package name. The DEBIAN/symbols file in the binary package provides the minimal version associated with each symbol.    An oversimplified method for the library packaging is as follows. * Extract the old DEBIAN/symbols file of the immediate previous binary package with the «dpkg-deb -e» command. + Либо можно иÑпользовать команду mc Ð´Ð»Ñ Ñ€Ð°Ñпаковки файла DEBIAN/symbols. * Скопируйте его в файл debian/двоичныйпакет.symbols. + ЕÑли Ñто первый пакет, то иÑпользуйте пуÑтой файл. * Соберите двоичный пакет. + If the dpkg-gensymbols command warns about some new    symbols: o Extract the updated DEBIAN/symbols file with the « dpkg-deb -e» command. o Удалите номер редакции верÑии Debian, например, -1, из файла. o Скопируйте его в файл debian/двоичныйпакет.symbols. o Повторно Ñоберите двоичный пакет. + If the dpkg-gensymbols command does not warn about new symbols: o Работа Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ завершена.    Подробные ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ получить, обратившиÑÑŒ к Ñледующей Ñправочной информации: * «8.6.3 The symbols system» of the «Debian Policy Manual» * «dh_makeshlibs(1) manapage»    * «dpkg-gensymbols(1) manapage» * «dpkg-shlibdeps(1) manapage» * «deb-symbols(5) manapage»    Также Ñледует ознакомитьÑÑ Ñо Ñледующей документацией: * Debian wiki: «UsingSymbolsFiles» * Debian wiki: «Projects/ImprovedDpkgShlibdeps»    * Debian kde team: «Working with symbols files» * «Раздел 13.11, «Autotools (multi-binary package)»» * «Раздел 13.12, «CMake (multi-binary package)»» ПодÑказка For C++ libraries and other cases where the tracking of symbols    is problematic, follow «8.6.4 The shlibs system» of the «Debian Policy Manual», instead. Please make sure to erase the empty debian/binarypackage.symbols file generated by the debmake command. For this case, the DEBIAN/shlibs file is used. 9.17. Library package name Let’s consider that the upstream source tarball of the libfoo    library is updated from libfoo-7.0.tar.gz to libfoo-8.0.tar.gz with a new SONAME major version which affects other packages. Двоичный пакет библиотеки Ñледует переименовать Ñ libfoo7 в lib    foo8, чтобы поÑле загрузки пакета, Ñозданного из на оÑно, в unstable вÑе завиÑимые пакеты оÑталиÑÑŒ в рабочем ÑоÑтоÑнии. Предупреждение If the binary library package isn’t renamed, many dependent    packages in the unstable suite become broken just after the library upload even if a binNMU upload is requested. The binNMU may not happen immediately after the upload due to several reasons.    Пакет -dev должен ÑоответÑтвовать Ñледующим правилам именованиÑ: * ИÑпользуйте Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° -dev без номера верÑии: libfoo-dev + This is the typical one for leaf library packages. + Ð’ архиве может находитÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ одна верÑÐ¸Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Ñ Ð¸Ñходным кодом библиотеки. o The associated library package needs to be renamed from libfoo7 to libfoo8 to prevent dependency breakage in the unstable suite during the library transition. + This approach should be used if the simple binNMU resolves the library dependency quickly for all affected packages. (ABI change by dropping the deprecated API while keeping the active API unchanged.) + This approach may still be a good idea if manual code updates, etc. can be coordinated and manageable within limited packages. (API change) * ИÑпользуйте имена пакетов -dev Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸ÐµÐ¼ верÑии: libfoo7 -dev и libfoo8-dev    + This is typical for many major library packages. + Ð’ архиве могут находитÑÑ Ð´Ð²Ðµ верÑии пакетов Ñ Ð¸Ñходным кодом библиотеки. o Ð’Ñе завиÑимые пакет должны завиÑить от libfoo-dev. o ПуÑÑ‚ÑŒ и libfoo7-dev, и libfoo8-dev предоÑтавлÑÑŽÑ‚ lib foo-dev. o Пакет Ñ Ð¸Ñходным кодом Ñледует переименовать в lib foo7-7.0.tar.gz и libfoo8-8.0.tar.gz, ÑоответÑтвенно, из libfoo-?.0.tar.gz. o Ð’ завиÑимоÑти от пакета путь уÑтановки файлов, включающий libfoo7 и libfoo8, ÑоответÑтвенно, Ð´Ð»Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²Ð¾Ñ‡Ð½Ñ‹Ñ… файлов и проч., Ñледует выбирать так, чтобы их можно было уÑтановить одновременно. + По возможноÑти не иÑпользуйте Ñлишком жёÑткий подход. + This approach should be used if the update of multiple dependent packages require manual code updates, etc. (API change) Otherwise, the affected packages become RC buggy with FTBFS. ПодÑказка    If the data encoding scheme changes (e.g., latin1 to utf-8), the same care as the API change needs to be taken.    См. «Раздел 9.9, «Пакет библиотеки»». 9.18. Смена библиотек When you package a new library package version which affects other packages, you must file a transition bug report against the    release.debian.org pseudo package using the reportbug command with the ben file and wait for the approval for its upload from the Release Team.    У команды подготовки выпуÑка имеетÑÑ Â«ÑиÑтема отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð¾Ð²Â». См. «Transitions». Внимание    Please make sure to rename binary packages as in «Раздел 9.17, «Library package name»». 9.19. БезопаÑÐ½Ð°Ñ binNMU-загрузка A «binNMU» is a binary-only non-maintainer upload performed for library transitions etc. In a binNMU upload, only the «    Architecture: any» packages are rebuilt with a suffixed version number (e.g. version 2.3.4-3 will become 2.3.4-3+b1). The « Architecture: all» packages are not built. The dependency defined in the debian/control file among binary    packages from the same source package should be safe for the binNMU. This needs attention if there are both «Architecture: any » and «Architecture: all» packages involved in it. * «Architecture: any» package: depends on «Architecture: any» foo package + Depends: foo (= ${binary:Version}) * «Architecture: any» package: depends on «Architecture: all» bar package    + Depends: bar (= ${source:Version}) * «Architecture: all» package: depends on «Architecture: any» baz package + Depends: baz (>= ${source:Version}), baz (<< $ {source:Version}.0~) 9.20. ÐžÑ‚Ð»Ð°Ð´Ð¾Ñ‡Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ The Debian package is built with the debugging information but    packaged into the binary package after stripping the debugging information as required by «Chapter 10 - Files» of the «Debian Policy Manual».    См. * «6.7.9. Best practices for debug packages» of the «Debian Developer’s Reference». * «18.2 Debugging Information in Separate Files» of the « Debugging with gdb» * «dh_strip(1) manapage»    * «strip(1) manapage» * «readelf(1) manapage» * «objcopy(1) manapage» * Debian wiki: «DebugPackage» * Debian wiki: «AutomaticDebugPackages» * Сообщение в ÑпиÑке раÑÑылки debian-devel: Â«Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ÑтатуÑе автоматичеÑких отладочных пакетов» (2015-08-15) 9.21. -dbgsym package The debugging information is automatically packaged separately as    the debug package using the dh_strip command with its default behavior. The name of such a debug package normally has the -dbgsym suffix. * The debian/rules file shouldn’t explicitly contain dh_strip.    * Set the Build-Depends to debhelper-compat (>=13) while removing Build-Depends to debhelper in debian/control. 9.22. debconf    Пакет debconf позволÑет нам наÑтраивать пакеты в ходе их уÑтановки двуÑми оÑновными ÑпоÑобами: * неинтерактивно из предпоÑевных наÑтроек программы уÑтановки Debian. * interactively from the menu interface (dialog, gnome, kde,    …​) + уÑтановка пакета: вызываетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ dpkg + уÑтановленный пакет: вызываетÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ dpkg-reconfigure    ВÑÑ‘ взаимодейÑтвие Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¼ в ходе уÑтановки пакета должны обрабатыватÑÑ ÑиÑтемой debconf Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñледующих файлов. * debian/binarypackage.config + Ðтот config-Ñценарий debconf иÑпользуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы    задавать любые вопроÑÑ‹, необходимые Ð´Ð»Ñ Ð½Ð°Ñтройки пакета. * debian/двоичныйпакет.template + Ðтот templates-файл debconf иÑпользуетÑÑ Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы задавать любые вопроÑÑ‹, наобходимые Ð´Ð»Ñ Ð½Ð°Ñтройки пакета.    These debconf files are called by package configuration scripts in the binary Debian package * DEBIAN/binarypackage.preinst    * DEBIAN/binarypackage.prerm * DEBIAN/binarypackage.postinst * DEBIAN/binarypackage.postrm    See dh_installdebconf(1), debconf(7), debconf-devel(7) and «3.9.1 Prompting in maintainer scripts» in the «Debian Policy Manual». ---------------------------------------------------------------------    ^[17] Ðтот документ был напиÑан до поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° symbols. ^[18] The strong preference is to use the SONAME versioned -dev package names over the single -dev package name in «Chapter 6.    Development (-DEV) packages», which does not seem to be shared by the former ftp-master (Steve Langasek). This document was written before the introduction of the multiarch system and the symbols file. ^[19] This path is compliant with the FHS. «Filesystem Hierarchy Standard: /usr/lib : Libraries for programming and packages»    states «Applications may use a single subdirectory under /usr/lib . If an application uses a subdirectory, all architecture-dependent data exclusively used by the application must be placed within that subdirectory.» Глава 10. Packaging with git Up to «Глава 9, Продвинутые темы работы над пакетом», we focused on packaging operations without using Git or any other VCS. These    traditional packaging operations were based on the tarball released by the upstream as mentioned in «Раздел 9.1, «Historical perspective»». Currently, the git(1) command is the de-facto platform for the VCS tool and is the essential part of both upstream development    and Debian packaging activities. (See Debian wiki «Debian git packaging maintainer branch formats and workflows» for existing VCS workflows.) Примечание Since the non-native Debian source package uses «diff -u» as its    backend technology for the maintainer modification, it can’t represent modification involving symlink, file permissions, nor binary data (March 2022 discussion on debian-devel@l.d.o). Please avoid making such maintainer modifications even though these can be recorded in the Git repository. Since VCS workflows are complicated topic and there are many    practice styles, I only touch on some key points with minimal information, here. Salsa is the remote Git repository service with associated tools.    It offers the collaboration platform for Debian packaging activities using a custom GitLab application instance. See: * «Раздел 10.1, «Salsa repository»»    * «Раздел 10.2, «Salsa account setup»» * «Раздел 10.3, «Salsa CI service»»    There are 2 styles of branch names for the Git repository used for the packaging. See «Раздел 10.4, «Branch names»».    There are 2 main usage styles for the Git repository for the packaging. See:    * «Раздел 10.5, «Patch unapplied Git repository»» * «Раздел 10.6, «Patch applied Git repository»»    There are 2 notable Debian packaging tools for the Git repository for the packaging. * gbp(1) and its subcommands: + This is a tool designed to work with «Раздел 10.5, «Patch unapplied Git repository»». + See «Раздел 10.7, «Note on gbp»». * dgit(1) and its subcommands:    + This is a tool designed to work with both «Раздел 10.6, «Patch applied Git repository»» and «Раздел 10.5, «Patch unapplied Git repository»». + This contains a tool to upload Debian packages using the dgit server. + See «Раздел 10.8, «Note on dgit»». 10.1. Salsa repository It is highly desirable to host Debian source code package on    Salsa. Over 90% of all Debian source code packages are hosted on Salsa. ^[20] The exact VCS repository hosting an existing Debian source code    package can be identified by a metadata field Vcs-* which can be viewed with the apt-cache showsrc <package-name> command. 10.2. Salsa account setup After signing up for an account on Salsa, make sure that the    following pages have the same e-mail address and GPG keys you have configured to be used with Debian, as well as your SSH key: * https://salsa.debian.org/-/profile/emails    * https://salsa.debian.org/-/user_settings/gpg_keys * https://salsa.debian.org/-/user_settings/ssh_keys 10.3. Salsa CI service    Salsa runs Salsa CI service as an instance of GitLab CI for « Раздел 9.4, «ÐÐµÐ¿Ñ€ÐµÑ€Ñ‹Ð²Ð½Ð°Ñ Ð¸Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ»». For every «git push» instances, tests which mimic tests run on    the official Debian package service can be run by setting Salsa CI configuration file «Раздел 6.13, «debian/salsa-ci.yml file»» as: --- include:    - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/recipes/debian.yml # Customizations here 10.4. Branch names    The Git repository for the Debian packaging should have at least 2 branches: * debian-branch to hold the current development work. + old style: master (or debian, main, latest, …​)    + DEP-14 style: debian/sid * upstream-branch to hold the upstream releases. + old style: upstream + DEP-14 style: upstream/latest    In this tutorial, old style branch names are used in examples for simplicity. Примечание    This upstream-branch may need to be created using the tarball released by the upstream independent of the upstream Git repository since it tends to contain automatically generated files. The upstream Git repository content can co-exit in the local Git    repository used for the Debian packaging by adding its copy. E.g.:    $ git remote add upstream-git <url-upstream-git-repo> $ git fetch upstream-git master:upstream-master    This allows easy cherry-picking from the upstream Git repository for bug fixes. 10.5. Patch unapplied Git repository    The patch unapplied Git repository can be summarized as: * This seems to be the traditional practice as of 2024. * The source tree matches extracted contents by «dpkg-source -x --skip-patches» of the Debian source package. + The upstream source is recorded in the Git repository without changes. + The maintainer modified contents are confined within the debian/* directory. + Maintainer changes to the upstream source are recorded in debian/patches/* files for the Debian source format «3.0 (quilt)». * This repository style is useful for all variants of traditional workflows and gdb based workflow: + «Раздел 5.7, «Шаг 3: изменение шаблонных файлов»» (no patch) + «Раздел 5.10, «Patch by «diff -u» approach»»    o debian/patches/* files can also be generated using « git format-patch», «git diff», or «gitk» from git commits in the through-away maintainer modification branch or from the upstream unreleased commits. + «Раздел 5.11, «Patch by dquilt approach»» including the last «dquilt pop -a» step + «Раздел 10.9, «Patch by «gbp-pq» approach»» * Use helper scripts such as dquilt(1) and gbp-pq(1) to manage data in debian/patches/* files. + Add .pc line to the ~/.gitignore file if dquilt is used. + Add unapply-patches and abort-on-upstream-changes lines in the debian/source/local-options file. * Use «dpkg-source -b» to build the Debian source package. * Use dput(1) to upload the Debian source package. + Use «dgit --gbp push-source» or «dgit --gbp push» instead to upload the Debian package via the dgit server (see « dgit-maint-gbp(7)»). Примечание    The debian/source/local-options and debian/source/ local-patch-header files are meant to be recorded by the git command. These aren’t included in the Debian source package. 10.6. Patch applied Git repository    The patch applied Git repository can be summarized as: * The source tree matches extracted contents by «dpkg-source -x » of the Debian source package. + The source tree is buildable and the same as what NMU    maintainers see. + The source is recorded in the Git repository with maintainer changes including the debian/ directory. + Maintainer changes to the upstream source are also recorded in debian/patches/* files for the Debian source format «3.0 (quilt)».    Use one of workflow styles: * dgit-maint-merge(7) workflow. + Use this if you don’t intend to record topic patches in the Debain source package. + Good enough for packages only with trivial modifications to the upstream. + Only choice for packages with intertwined modification histories to the upstream + Add auto-commit and single-debian-patch lines in the debian/source/local-options file + Use «git checkout upstream; git pull» to pull the new upstream commit and use «git checkout master ; git merge <new-version-tag>» to merge it to the master branch. + Use «dpkg-source -b» to build the Debian source package. + Use «dgit push-source» or «dgit push» for uploading the    Debian package via the dgit server. + See «Раздел 5.12, «Patch by «dpkg-source --auto-commit» approach»» for example. * dgit-maint-debrebase(7) workflow. + Use this if you wish to commit maintainer changes to the patch applied Git repository with the same granularity as patches of «Раздел 10.9, «Patch by «gbp-pq» approach»». + Good for packages with multiple sequenced modifications to the upstream. + Use «dgit build-source» to build the Debian source package. + Use «dgit push-source» or «dgit push» for uploading the Debian package via the dgit server. + Details of this workflow are beyond the scope of this tutorial document. See «Раздел 10.12, «Note on dgit-maint-debrebase workflow»» for more. 10.7. Note on gbp    The gbp command is provided by the git-buildpackage package. * This command is designed to manage contents of «Раздел 10.5, «Patch unapplied Git repository»» efficiently. * Use «gbp import-orig» to import the new upstream tar to the git repository. + The «--pristine-tar» option for the «git import-orig» command enables storing the upstream tarball in the same git repository. + The «--uscan» option as the last argument of the «gbp import-orig» command enables downloading and committing the new upstream tarball into the git repository. * Use «gbp import-dsc» to import the previous Debian source package to the git repository.    * Use «gbp dch» to generate the Debian changelog from the git commit messages. * Use «gbp buildpackage» to build the Debian binary package from the git repository. + The sbuild package can be used as its clean chroot build backend either by configuration or adding «--git-builder= 'sbuild -A -s --source-only-changes -v -d unstable'» * Use «gbp pull» to update the debian, upstream and pristine-tar branches safely from the remote repository. * Use «gbp pq» to manage quilt patches without using dquilt command. * Use «gbp clone REPOSITORY_URL» to clone and set up tracking branches for debian, upstream and pristine-tar. Package history management with the git-buildpackage package is    becoming the standard practice for many Debian maintainers. See more at: * «Сборка пакетов Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ git-buildpackage» * «4 tips to maintain a “3.0 (quilt)†Debian source package in a VCS»    * The systemd packaging practice documentation on «Building from source» * The workflow mentioned in dgit-maint-gbp(7) which enables to use this gbp with dgit 10.8. Note on dgit    The dgit command is provided by the dgit package. * This command is designed to manage contents of «Раздел 10.6, «Patch applied Git repository»» efficiently. + This enables to access the Debian package repository as    if it is a git remote repository. * This command supports uploading Debian packages using the dgit server from both «Раздел 10.5, «Patch unapplied Git repository»» and «Раздел 10.6, «Patch applied Git repository» ». The new dgit package offers commands to automate packaging    activities using the git repository as an alternative to still popular gbp-buildpackage. Please read their guide: * dgit-maint-merge(7) — for the Debian source format «3.0 (quilt)» package with its changes flowing both ways between the upstream Git repository and the Debian Git repository which are tightly coupled using «Раздел 10.6, «Patch applied Git repository»». * dgit-maint-debrebase(7) — for the Debian source format «3.0 (quilt)» package with its changes flowing mostly one way from    the upstream Git repository to the Debian Git repository using «Раздел 10.6, «Patch applied Git repository»». * dgit-maint-gbp(7) — for the Debian source format «3.0 (quilt) » package with its Debian Git repository which is kept usable also for people using gbp-buildpackage(1) using «Раздел 10.5, «Patch unapplied Git repository»». * dgit-maint-native(7) — for the Debian source format «3.0 (native)» package in the Debian Git repository. (No maintainer changes) The dgit(1) command can push the easy-to-trace change history to    the https://browse.dgit.debian.org/ site and can upload Debian package to the Debian repository properly without using dput(1).    The concept around dgit is beyond this tutorial document. Please start reading relevant information:    * «dgit: use the Debian archive as a git remote (2015)» * «tag2upload (2023)» 10.9. Patch by «gbp-pq» approach For «Раздел 10.5, «Patch unapplied Git repository»», you can    generate debian/patches/* files using the gbp-pq(1) command from git commits in the through-away patch-queue branch. Unlike dquilt which offers similar functionality as seen «    Раздел 5.11, «Patch by dquilt approach»» and «Раздел 8.5, «Manage patch queue with dquilt»», gbp-pq doesn’t generate .pc/* files. 10.10. Manage patch queue with gbp-pq    You can add, drop, and refresh debian/patches/* files with gbp-pq to manage patch queue. If the package is managed in «Раздел 10.5, «Patch unapplied Git    repository»» using the git-buildpackage package, you can revise the upstream source to fix bug as the maintainer and release a new Debian revision using gbp pq. * Add a new patch recording the upstream source modification on the file buggy_file as: $ git checkout master $ gbp pq import gbp:info: ... imported on 'patch-queue/master $ vim buggy_file ... $ git add buggy_file $ git commit $ gbp pq export gbp:info: On 'patch-queue/master', switching to 'master' gbp:info: Generating patches from git (master..patch-queue/master) $ git add debian/patches/* $ dch -i $ git commit -a -m "Closes: #<bug_number>" $ git tag debian/<version>-<rev> * Drop (== disable) an existing patch + Comment out pertinent line in debian/patches/series    + Erase the patch itself (optional) * Refresh debian/patches/* files to make «dpkg-source -b» work as expected after updating a Debian package to the new upstream release. $ git checkout master $ gbp pq --force import # ensure patch-queue/master branch gbp:info: ... imported on 'patch-queue/master $ git checkout master $ gbp import-orig --pristine-tar --uscan ... gbp:info: Successfully imported version ?.?.? of ../packagename_?.?.?.orig.tar.gz $ gbp pq rebase ... resolve conflicts and commit to patch-queue/master branch $ gbp pq export gbp:info: On 'patch-queue/master', switching to 'master' gbp:info: Generating patches from git (master..patch-queue/master) $ git add debian/patches $ git commit -m "Update patches" $ dch -v <newversion>-1 $ git commit -a -m "release <newversion>-1" $ git tag debian/<newversion>-1 10.11. gbp import-dscs --debsnap For Debian source packages named «<source-package>» recorded in    the snapshot.debian.org archive, an initial git repository managed in «Раздел 10.5, «Patch unapplied Git repository»» with all of the Debian version history can be generated as follows.    $ gbp import-dscs --debsnap --pristine-tar <source-package> 10.12. Note on dgit-maint-debrebase workflow    Here are some hints around dgit-maint-debrebase(7). ^[21] * Use «dgit setup-new-tree» to prepare the local git working repository. * The first maintainer modification commit should contain files only in the debian/ directory excluding files in the debian/ patches directory. * debian/patches/* files are generated from the maintainer modification commit history using the «dgit quilt-fixup»    command automatically invoked from «dgit build» and «dgit push». * Use «git-debrebase new-version <new-version-tag>» to rebase the maintainer modification commit history with automatically updated debian/changelog. * Use «git-debrebase conclude» to make a new pseudomerge (== « git merge -s ours») to record Debian package with clean ff-history.    See dgit-maint-debrebase(7), dgit(1) and git-debrebase(1) for more. 10.13. Quasi-native Debian packaging    The quasi-native packaging scheme packages a source without the real upstream tarball using the non-native package format. ПодÑказка    Some people promote this quasi-native packaging scheme even for programs written only for Debian since it helps to ease communication with the downstream distros such as Ubuntu for bug fixes etc.    This quasi-native packaging scheme involves 2 preparation steps: * Organize its source tree almost like native Debian package (see «Раздел 6.4, «Родной пакет Debian»») with debian/* files with a few exceptions: + Make debian/source/format to contain «3.0 (quilt)» instead of «3.0 (native)» .    + Make debian/changelog to contain version-revision instead of version . * Generate missing upstream tarball preferably without debian/* files. + For Debian source format «3.0 (quilt)», removal of files under debian/ directory is an optional action.    The rest is the same as the non-native packaging workflow as written in «Раздел 6.1, «Работа по Ñозданию пакета»». Although this can be done in many ways («Раздел 15.4, «Snapshot    upstream tarball (-d, -t)»»), you can use the Git repository and «git deborig» as: $ cd /path/to/<dirname> $ dch -r ... set its <version>-<revision>, e.g., 1.0-1 $ git tag -s debian/1.0-1    $ git rm -rf debian $ git tag -s upstream/1.0 $ git commit -m upstream/1.0 $ git reset --hard HEAD^ $ git deborig $ sbuild ---------------------------------------------------------------------    ^[20] Use of git.debian.org or alioth.debian.org are deprecated now.    ^[21] I may be incorrect, here. Глава 11. Полезные Ñоветы Please also read insightful pages linked from «Notes on Debian»    by Russ Allbery (long time Debian developer) which have best practices for advanced packaging topics. 11.1. Сборка Ñ Ð¸Ñпользованием кодировки UTF-8    Локалью по умолчанию в Ñборочном окружении ÑвлÑетÑÑ C.    Ðекоторые программы, такие как функци read из Python3, изменÑÑŽÑ‚ Ñвоё поведение в завиÑимоÑти от текущей локали.    Adding the following code to the debian/rules file ensures building the program under the C.UTF-8 locale.    LC_ALL := C.UTF-8 export LC_ALL 11.2. Преобразование в кодировку UTF-8    If upstream documents are encoded in old encoding schemes, converting them to UTF-8 is a good idea.    Use the iconv command in the libc-bin package to convert the encoding of plain text files.    $ iconv -f latin1 -t utf8 foo_in.txt > foo_out.txt ИÑпользуйте w3m(1) Ð´Ð»Ñ Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ HTML-файлов в обычные    текÑтовые файлы в кодировке UTF-8. При выполнении Ð¿Ñ€ÐµÐ¾Ð±Ñ€Ð°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑƒÐ±ÐµÐ´Ð¸Ñ‚ÐµÑÑŒ, что у Ð²Ð°Ñ Ð¸ÑпользуетÑÑ Ð»Ð¾ÐºÐ°Ð»ÑŒ UTF-8. $ LC_ALL=C.UTF-8 w3m -o display_charset=UTF-8 \    -cols 70 -dump -no-graph -T text/html \ < foo_in.html > foo_out.txt    ЗапуÑтите Ñти Ñценарии в цели override_dh_* файла debian/rules. 11.3. Hints for Debugging Когда вы ÑталкиваетеÑÑŒ Ñ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð°Ð¼Ð¸ Ñборки или дампом памÑти    Ñозданных двоичных программ, вам необходимо разрешить их ÑамоÑтоÑтельно. Ðто называетÑÑ Ð¾Ñ‚Ð»Ð°Ð´ÐºÐ¾Ð¹. Ðто Ñлишком Ð¾Ð±ÑˆÐ¸Ñ€Ð½Ð°Ñ Ñ‚ÐµÐ¼Ð°, чтобы обÑуждать её в наÑтоÑщем    руководÑтве. ПоÑтому позвольте проÑто привеÑти неÑколько ÑÑылок и полезных Ñоветов по иÑпользованию типичных инÑтрументов отладки. * Wikipedia: «core dump» + «man core» + Update the «/etc/security/limits.conf» file to include the following: * soft core unlimited + «ulimit -c unlimited» in ~/.bashrc + «ulimit -a» to check + Press Ctrl-\ or «kill -ABRT 'PID'» to make a core dump file * gdb — отладчик GNU + «info gdb» + «Debugging with GDB» in /usr/share/doc/gdb-doc/html/gdb/ index.html * strace — траÑÑировка ÑиÑтемных вызовов и Ñигналов + ИÑпользуйте Ñценарий strace-graph из каталога /usr/share/    doc/strace/examples/, чтобы иметь удобную визуализацию в виде дерева + «man strace» * ltrace - траÑÑировка библиотечных вызовов + «man ltrace» * «sh -n script.sh» - Syntax check of a Shell script * «sh -x script.sh» - Trace a Shell script * «python3 -m py_compile script.py» - Syntax check of a Python script * «python3 -mtrace --trace script.py» - Trace a Python script * «perl -I ../libpath -c script.pl» - Syntax check of a Perl script * «perl -d:Trace script.pl» - Trace a Perl script + Install the libterm-readline-gnu-perl package or its equivalent to add input line editing capability with history support. * lsof — вывод ÑпиÑка файлов, открытых процеÑÑами + «man lsof» ПодÑказка    The script command records console outputs. ПодÑказка    The screen and tmux commands used with the ssh command offer secure and robust remote connection terminals. ПодÑказка    A Python- and Shell-like REPL (=READ + EVAL + PRINT + LOOP) environment for Perl is offered by the reply command from the libreply-perl (new) package and the re.pl command from the libdevel-repl-perl (old) package. ПодÑказка    The rlwrap and rlfe commands add input line editing capability with history support to any interactive commands. E.g. «rlwrap dash -i'» . Глава 12. Tool usages    Here are some notable tools around Debian packaging. Примечание ОпиÑание в Ñтом разделе Ñлишком кратко, чтобы оно оказалоÑÑŒ    полезным Ð´Ð»Ñ Ð±Ð¾Ð»ÑŒÑˆÐ¸Ð½Ñтва будущих Ñопровождающих. Ðто — намеренный выбор автора. ÐаÑтоÑтельно рекомендуетÑÑ Ð¿Ð¾Ð¸Ñкать и прочеÑÑ‚ÑŒ вÑÑŽ ÑоответÑтвующую документациÑ, ÑвÑзанную Ñ Ð¸Ñпользуемыми командами. Примечание    Examples here use the gz-compression. The xz-compression may be used instead. 12.1. debdiff    Можно Ñравнивать Ñодержимое файлов в двух пакетах Debian Ñ Ð¸Ñходным кодом Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debdiff.    $ debdiff old-package.dsc new-package.dsc    Также можно Ñравнивать ÑпиÑки файлов в двух наборах двоичных пакетов Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debdiff.    $ debdiff old-package.changes new-package.changes Ðто полезно Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в пакетах Ñ Ð¸Ñходным кодом    и Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ на предмет нечаÑнных изменений, привнеÑённых при обновлении двоичных пакетов, таких как непреднамеренное ошибочное размещение или удаление файлов.    Debian now enforces the source-only upload when developing packages. So there may be 2 different *.changes files: * package_version-revision_source.changes for the normal    source-only upload * package_version-revision_arch.changes for the binary upload 12.2. dget    Можно Ñкачать набор файлв Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian Ñ Ð¸Ñходным кодом Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды dget.    $ dget https://www.example.org/path/to/package_version-rev.dsc 12.3. mk-origtargz You can make the upstream tarball ../foo-newversion.tar.[xg]z    accessible from the Debian source tree as ../foo_newversion .orig.tar.[xg]z. 12.4. origtargz    You can fetch the pre-existing orig tarball of a Debian package from various sources, and unpack it with origtargz command.    This is basically for -2, -3, …​ revisions. 12.5. git deborig If the upstream project is hosted on a Git repository without the official release of tarball, you can generate its orig tarball    from the git repository for use by the Debain source package. Please, execute «git deborig» from the root of the checked-out source tree.    This is basically for -1 revisions. 12.6. dpkg-source -b    The «dpkg-source -b» command packs the upstream source tree into the Debian source package.    It expects a series of patches in the debian/patches/ directory and their application sequence in debian/patches/series. It is compatible with dquilt (see «Раздел 4.4, «quilt setup»»)    operations and understands the the patch application status from the existance of .pc/applied-patches.    The dpkg-buildpackage command invokes «dpkg-source -b». 12.7. dpkg-source -x The «dpkg-source -x» command extracts source tree and applies the patches in the debian/patches/ directory using the sequence    specified in debian/patches/series to the upstream source tree. It also adds .pc/applied-patches. (See «Раздел 10.6, «Patch applied Git repository»».) The «dpkg-source -x --skip-patches» command extracts source tree    only. It doesn’t add .pc/applied-patches. (See «Раздел 10.5, «Patch unapplied Git repository»».)    Both extracted source trees are ready for building Debian binary packages with dpkg-buildpackage, dbuild, sbuild, etc.. 12.8. debc    Созданные пакеты ÑледуетÑÑ ÑƒÑтановить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debc Ð´Ð»Ñ Ð¸Ñ… локальной проверки.    $ debc package_version-rev_arch.changes 12.9. piuparts    Созданные пакеты Ñледует уÑтановить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды piuparts Ð´Ð»Ñ Ð¸Ñ… автоматичеÑкой проверки.    $ sudo piuparts package_version-rev_arch.changes Примечание    This is a very slow process with remote APT package repository access. 12.10. bts After uploading the package, you will receive bug reports. It is    an important duty of a package maintainer to manage these bugs properly as described in «5.8. Handling bugs» of the «Debian Developer’s Reference».    The bts command is a handy tool to manage bugs on the «Debian Bug Tracking System».    $ bts severity 123123 wishlist , tags -1 pending Глава 13. Дополнительные примеры    There is an old Latin saying: «fabricando fit faber» («practice makes perfect»). It is highly recommended to practice and experiment with all the    steps of Debian packaging with simple packages. This chapter provides you with many upstream cases for your practice.    Кроме того, Ñто должно Ñлужит в качеÑтве вводных примеров Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтва тем по программированию. * Программирование в командной оболочке POSIX, на Ñзыках Python3 и C. * Method to create a desktop GUI program launcher with icon graphics.    * Conversion of a command from CLI to GUI. * Conversion of a program to use gettext for internationalization and localization: POSIX shell and C sources. * Overview of many build systems: Makefile, Python, Autotools, and CMake.    Please note that Debian takes a few things seriously: * Свободное ПО * Stability and security of OS * УниверÑÐ°Ð»ÑŒÐ½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема реализуетÑÑ Ñ‡ÐµÑ€ÐµÐ·    + Ñвободный выбор иÑточников и иÑходных кодов оÑновной ветки разработки, + Ñвободный выбор архитектур ЦП, а также + Ñвободный выбор Ñзыка пользовательÑкого интерфейÑа. ЗнакомÑтво Ñ Ñ‚Ð¸Ð¿Ð¸Ñ‡Ð½Ñ‹Ð¼ примером работы над пакетом, предÑтавленным    в «Глава 5, Simple packaging», ÑвлÑетÑÑ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ð¼ уÑловием Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð¹ главы. Some details are intentionally left vague in the following    sections. Please try to read the pertinent documentation and practice yourself to find them out. ПодÑказка    The best source of a packaging example is the current Debian archive itself. Please use the «Debian Code Search» service to find pertinent examples. 13.1. Выборочное применение шаблонов    Ðиже приводитÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÑ€ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñтого пакета Debian из иÑходного кода без какого-либо Ñодержимого в пуÑтом каталоге.    This is a good platform to get all the template files without making a mess in the upstream source tree you are working on.    ДопуÑтим, пуÑтым каталогом будет debhello-0.1. $ mkdir debhello-0.1 $ tree    . └── debhello-0.1 2 directories, 0 files    Let’s generate the maximum amount of template files.    Let’s also use the «-p debhello -t -u 0.1 -r 1» options to make the missing upstream tarball with default -x3 and T options. $ cd /path/to/debhello-0.1    $ debmake -p debhello -t -u 0.1 -r 1 I: set parameters ...    Проверим Ñозданные шаблонные файлы. $ cd /path/to $ tree . ├── debhello-0.1 │  └── debian │  ├── README.Debian │  ├── README.source │  ├── changelog │  ├── clean │  ├── control │  ├── copyright │  ├── debhello.bug-control.ex │  ├── debhello.bug-presubj.ex │  ├── debhello.bug-script.ex │  ├── debhello.conffiles.ex │  ├── debhello.cron.d.ex │  ├── debhello.cron.daily.ex │  ├── debhello.cron.hourly.ex │  ├── debhello.cron.monthly.ex │  ├── debhello.cron.weekly.ex │  ├── debhello.default.ex │  ├── debhello.emacsen-install.ex │  ├── debhello.emacsen-remove.ex │  ├── debhello.emacsen-startup.ex │  ├── debhello.lintian-overrides.ex │  ├── debhello.service.ex │  ├── debhello.tmpfile.ex │  ├── dirs │  ├── gbp.conf │  ├── install    │  ├── links │  ├── maintscript.ex │  ├── manpage.1.ex │  ├── manpage.asciidoc.ex │  ├── manpage.md.ex │  ├── manpage.sgml.ex │  ├── manpage.xml.ex │  ├── patches │  │  └── series │  ├── postinst.ex │  ├── postrm.ex │  ├── preinst.ex │  ├── prerm.ex │  ├── rules │  ├── salsa-ci.yml │  ├── source │  │  ├── format │  │  ├── lintian-overrides.ex │  │  ├── local-options.ex │  │  ├── local-patch-header.ex │  │  ├── options.ex │  │  └── patch-header.ex │  ├── tests │  │  └── control │  ├── upstream │  │  └── metadata │  └── watch ├── debhello-0.1.tar.gz └── debhello_0.1.orig.tar.gz -> debhello-0.1.tar.gz 7 directories, 50 files Теперь вы можете Ñкопировать любой из Ñозданных в каталоге    debhello-0.1/debian/ шаблонных файлов в ваш пакет, при необходимоÑти их переименовав. 13.2. Без Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки) Ðиже приводитÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÑ€ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñтого пакета Debian из    программы Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÑом командной оболочки, напиÑанной Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки POSIX и не имеющей ÑиÑтемы Ñборки.    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-0.2.tar.gz.    Ðтот тип иÑходного кода не имеет ÑредÑтв автоматизации, и файлы должны быть уÑтановлены вручную.    For example: $ tar -xzmf debhello-0.2.tar.gz    $ cd debhello-0.2 $ sudo cp scripts/hello /bin/hello ...    Let’s get this source as tar file from a remote site and make it the Debian package. Загрузим debhello-0.2.tar.gz. $ wget http://www.example.org/download/debhello-0.2.tar.gz ... $ tar -xzmf debhello-0.2.tar.gz $ tree . ├── debhello-0.2 │  ├── README.md    │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── man │  │  └── hello.1 │  └── scripts │  └── hello └── debhello-0.2.tar.gz 5 directories, 6 files    Итак, Ñценарий командной оболочки POSIX hello ÑвлÑетÑÑ Ð¾Ñ‡ÐµÐ½ÑŒ проÑтым. hello (v=0.2). $ cat debhello-0.2/scripts/hello    #!/bin/sh -e echo "Hello from the shell!" echo "" echo -n "Type Enter to exit this program: " read X    Here, hello.desktop supports the «Desktop Entry Specification». hello.desktop (v=0.2). $ cat debhello-0.2/data/hello.desktop [Desktop Entry] Name=Hello Name[fr]=Bonjour    Comment=Greetings Comment[fr]=Salutations Type=Application Keywords=hello Exec=hello Terminal=true Icon=hello.png Categories=Utility;    Here, hello.png is the icon graphics file. Let’s package this with the debmake command. Here, the -b':sh'    option is used to specify that the generated binary package is a shell script. $ cd /path/to/debhello-0.2 $ debmake -b':sh' -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="0.2", rev="1" I: *** start packaging in "debhello-0.2". *** I: provide debhello_0.2.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-0.2.tar.gz debhello_0.2.orig.tar.gz I: pwd = "/path/to/debhello-0.2" I: parse binary package settings: :sh I: binary package=debhello Type=script / Arch=all M-A=foreign I: analyze the source tree I: build_type = Unknown I: scan source for copyright+license text and file extensions I: 25 %, ext = md ...    Проверим Ñозданные шаблонные файлы. Дерево иÑходного кода поÑле проÑтого Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ debmake. (v= 0.2). $ cd /path/to $ tree . ├── debhello-0.2 │  ├── README.md │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── debian │  │  ├── README.Debian │  │  ├── README.source │  │  ├── changelog │  │  ├── clean │  │  ├── control │  │  ├── copyright │  │  ├── dirs │  │  ├── gbp.conf │  │  ├── install    │  │  ├── links │  │  ├── patches │  │  │  └── series │  │  ├── rules │  │  ├── salsa-ci.yml │  │  ├── source │  │  │  ├── format │  │  │  ├── local-options.ex │  │  │  └── local-patch-header.ex │  │  ├── tests │  │  │  └── control │  │  ├── upstream │  │  │  └── metadata │  │  └── watch │  ├── man │  │  └── hello.1 │  └── scripts │  └── hello ├── debhello-0.2.tar.gz └── debhello_0.2.orig.tar.gz -> debhello-0.2.tar.gz 10 directories, 26 files debian/rules (шаблонный файл, v=0.2): $ cd /path/to/debhello-0.2 $ cat debian/rules    #!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1 %: dh $@ По Ñути, Ñто Ñтандартный файл debian/rules, иÑпользующий команду    dh. ПоÑкольку Ñто пакет Ñо Ñценарием, Ñтот шаблонный файл debian/ rules не имеет Ñодержимого, ÑвÑзанного Ñ Ñ„Ð»Ð°Ð³Ð¾Ð¼ Ñборки. debian/control (шаблонный файл, v=0.2): $ cat debian/control Source: debhello Section: unknown Priority: optional Maintainer: "Osamu Aoki" <osamu@debian.org> Build-Depends: debhelper-compat (= 13) Standards-Version: 4.6.2 Homepage: <insert the upstream URL, if relevant>    Rules-Requires-Root: no #Vcs-Git: https://salsa.debian.org/debian/debhello.git #Vcs-Browser: https://salsa.debian.org/debian/debhello Package: debhello Architecture: all Multi-Arch: foreign Depends: ${misc:Depends} Description: auto-generated package by debmake This Debian binary package was auto-generated by the debmake(1) command provided by the debmake package. Since this is the shell script package, the debmake command sets    «Architecture: all» and «Multi-Arch: foreign». Also, it sets required substvar parameters as «Depends: ${misc:Depends}». These are explained in «Глава 6, Basics for packaging». Since this upstream source lacks the upstream Makefile, that functionality needs to be provided by the maintainer. This upstream source contains only a script file and data files and no    C source files; the build process can be skipped but the install process needs to be implemented. For this case, this is achieved cleanly by adding the debian/install and debian/manpages files without complicating the debian/rules file.    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=0.2): $ cd /path/to/debhello-0.2 $ vim debian/rules ... hack, hack, hack, ...    $ cat debian/rules #!/usr/bin/make -f export DH_VERBOSE = 1 %: dh $@ debian/control (верÑÐ¸Ñ Ñопровождающего, v=0.2): $ vim debian/control ... hack, hack, hack, ... $ cat debian/control Source: debhello Section: devel Priority: optional Maintainer: Osamu Aoki <osamu@debian.org> Build-Depends: debhelper-compat (= 13)    Standards-Version: 4.6.2 Homepage: https://salsa.debian.org/debian/debmake-doc Rules-Requires-Root: no Package: debhello Architecture: all Multi-Arch: foreign Depends: ${misc:Depends} Description: Simple packaging example for debmake This Debian binary package is an example package. (This is an example only) Предупреждение    If you leave «Section: unknown» in the template debian/control file unchanged, the lintian error may cause a build failure. debian/install (верÑÐ¸Ñ Ñопровождающего, v=0.2): $ vim debian/install    ... hack, hack, hack, ... $ cat debian/install data/hello.desktop usr/share/applications data/hello.png usr/share/pixmaps scripts/hello usr/bin debian/manpages (верÑÐ¸Ñ Ñопровождающего, v=0.2):    $ vim debian/manpages ... hack, hack, hack, ... $ cat debian/manpages man/hello.1    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. Шаблонные файлы в каталоге debian/. (v=0.2): $ rm -f debian/clean debian/dirs debian/links $ rm -f debian/README.source debian/source/*.ex $ rm -rf debian/patches $ tree -F debian debian/ ├── README.Debian ├── changelog ├── control ├── copyright ├── gbp.conf    ├── install ├── manpages ├── rules* ├── salsa-ci.yml ├── source/ │  └── format ├── tests/ │  └── control ├── upstream/ │  └── metadata └── watch 4 directories, 13 files Ð’ данном дереве иÑходного кода вы можете Ñоздать неродной пакет    Debian Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debuild (или её Ñквивалента). Вывод Ñто команды очень подробен, в нём объÑÑнÑетÑÑ, что проиÑходит, и выглÑдит Ñто Ñледующим образом. $ cd /path/to/debhello-0.2 $ debuild dpkg-buildpackage -us -uc -ui -i dpkg-buildpackage: info: source package debhello dpkg-buildpackage: info: source version 0.2-1 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Osamu Aoki <osamu@debian.org> dpkg-source -i --before-build . dpkg-buildpackage: info: host architecture amd64 debian/rules clean dh clean dh_clean    rm -f debian/debhelper-build-stamp ... debian/rules binary dh binary dh_update_autotools_config dh_autoreconf create-stamp debian/debhelper-build-stamp dh_prep rm -f -- debian/debhello.substvars rm -fr -- debian/.debhelper/generated/debhello/ debian/debhello/ debi... dh_auto_install --destdir=debian/debhello/ ... Finished running lintian.    Проверим результат Ñборки. Командой debuild были Ñозданы Ñледующие файлы debhello верÑии 0.2 : $ cd /path/to $ tree -FL 1 ./ ├── debhello-0.2/ ├── debhello-0.2.tar.gz    ├── debhello_0.2-1.debian.tar.xz ├── debhello_0.2-1.dsc ├── debhello_0.2-1_all.deb ├── debhello_0.2-1_amd64.build ├── debhello_0.2-1_amd64.buildinfo ├── debhello_0.2-1_amd64.changes └── debhello_0.2.orig.tar.gz -> debhello-0.2.tar.gz 2 directories, 8 files    Вы видите вÑе Ñозданные файлы. * The debhello_0.2.orig.tar.gz file is a symlink to the upstream tarball. * The debhello_0.2-1.debian.tar.xz file contains the maintainer generated contents. * The debhello_0.2-1.dsc file is the meta data file for the    Debian source package. * The debhello_0.2-1_all.deb file is the Debian binary package. * The debhello_0.2-1_amd64.build file is the build log file. * The debhello_0.2-1_amd64.buildinfo file is the meta data file generated by dpkg-genbuildinfo(1). * The debhello_0.2-1_amd64.changes file is the meta data file for the Debian binary package.    The debhello_0.2-1.debian.tar.xz file contains the Debian changes to the upstream source as follows. Сжатое Ñодержимое архива debhello_0.2-1.debian.tar.xz: $ tar -tzf debhello-0.2.tar.gz debhello-0.2/ debhello-0.2/data/ debhello-0.2/data/hello.desktop debhello-0.2/data/hello.png debhello-0.2/man/ debhello-0.2/man/hello.1 debhello-0.2/scripts/ debhello-0.2/scripts/hello debhello-0.2/README.md $ tar --xz -tf debhello_0.2-1.debian.tar.xz debian/    debian/README.Debian debian/changelog debian/control debian/copyright debian/gbp.conf debian/install debian/manpages debian/rules debian/salsa-ci.yml debian/source/ debian/source/format debian/tests/ debian/tests/control debian/upstream/ debian/upstream/metadata debian/watch    The debhello_0.2-1_amd64.deb file contains the files to be installed as follows. The binary package contents of debhello_0.2-1_all.deb: $ dpkg -c debhello_0.2-1_all.deb drwxr-xr-x root/root ... ./ drwxr-xr-x root/root ... ./usr/ drwxr-xr-x root/root ... ./usr/bin/ -rwxr-xr-x root/root ... ./usr/bin/hello drwxr-xr-x root/root ... ./usr/share/ drwxr-xr-x root/root ... ./usr/share/applications/    -rw-r--r-- root/root ... ./usr/share/applications/hello.desktop drwxr-xr-x root/root ... ./usr/share/doc/ drwxr-xr-x root/root ... ./usr/share/doc/debhello/ -rw-r--r-- root/root ... ./usr/share/doc/debhello/README.Debian -rw-r--r-- root/root ... ./usr/share/doc/debhello/changelog.Debian.gz -rw-r--r-- root/root ... ./usr/share/doc/debhello/copyright drwxr-xr-x root/root ... ./usr/share/man/ drwxr-xr-x root/root ... ./usr/share/man/man1/ -rw-r--r-- root/root ... ./usr/share/man/man1/hello.1.gz drwxr-xr-x root/root ... ./usr/share/pixmaps/ -rw-r--r-- root/root ... ./usr/share/pixmaps/hello.png    Here is the generated dependency list of debhello_0.2-1_all.deb. The generated dependency list of debhello_0.2-1_all.deb:    $ dpkg -f debhello_0.2-1_all.deb pre-depends \ depends recommends conflicts breaks    (No extra dependency packages required since this is a POSIX shell program.) Примечание If you wish to replace upstream provided PNG file data/hello.png    with maintainer provided one debian/hello.png, editing debian/ install isn’t enough. When you add debian/hello.png, you need to add a line «include-binaries» to debian/source/options since PNG is a binary file. See dpkg-source(1). 13.3. Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки) Ðиже приводитÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÑ€ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñтого пакета Debian из    программы Ñ Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÑом командной оболочки, напиÑанной Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки POSIX и иÑпользующей в качеÑтве ÑиÑтемы Ñборки Makefile.    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-1.0.tar.gz.    ПредполагаетÑÑ, что Ñтот тип иÑходного кода будет уÑтановлен как неÑиÑтемный файл: $ tar -xzmf debhello-1.0.tar.gz    $ cd debhello-1.0 $ make install Debian packaging requires changing this «make install» process to    install files to the target system image location instead of the normal location under /usr/local.    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-1.0.tar.gz. $ wget http://www.example.org/download/debhello-1.0.tar.gz ... $ tar -xzmf debhello-1.0.tar.gz $ tree . ├── debhello-1.0 │  ├── Makefile    │  ├── README.md │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── man │  │  └── hello.1 │  └── scripts │  └── hello └── debhello-1.0.tar.gz 5 directories, 7 files Here, the Makefile uses $(DESTDIR) and $(prefix) properly. All    other files are the same as in «Раздел 13.2, «Без Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»» and most of the packaging activities are the same. Makefile (v=1.0). $ cat debhello-1.0/Makefile prefix = /usr/local all: : # do nothing install: install -D scripts/hello \ $(DESTDIR)$(prefix)/bin/hello install -m 644 -D data/hello.desktop \ $(DESTDIR)$(prefix)/share/applications/hello.desktop install -m 644 -D data/hello.png \    $(DESTDIR)$(prefix)/share/pixmaps/hello.png install -m 644 -D man/hello.1 \ $(DESTDIR)$(prefix)/share/man/man1/hello.1 clean: : # do nothing distclean: clean uninstall: -rm -f $(DESTDIR)$(prefix)/bin/hello -rm -f $(DESTDIR)$(prefix)/share/applications/hello.desktop -rm -f $(DESTDIR)$(prefix)/share/pixmaps/hello.png -rm -f $(DESTDIR)$(prefix)/share/man/man1/hello.1 .PHONY: all install clean distclean uninstall Let’s package this with the debmake command. Here, the -b':sh'    option is used to specify that the generated binary package is a shell script. $ cd /path/to/debhello-1.0 $ debmake -b':sh' -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="1.0", rev="1" I: *** start packaging in "debhello-1.0". *** I: provide debhello_1.0.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-1.0.tar.gz debhello_1.0.orig.tar.gz I: pwd = "/path/to/debhello-1.0" I: parse binary package settings: :sh I: binary package=debhello Type=script / Arch=all M-A=foreign I: analyze the source tree I: build_type = make I: scan source for copyright+license text and file extensions I: 25 %, ext = md ...    Let’s inspect the notable template files generated. debian/rules (шаблонный файл, v=1.0): $ cd /path/to/debhello-1.0 $ cat debian/rules #!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1    %: dh $@ #override_dh_auto_install: # dh_auto_install -- prefix=/usr #override_dh_install: # dh_install --list-missing -X.pyc -X.pyo    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=1.0): $ cd /path/to/debhello-1.0 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules    #!/usr/bin/make -f export DH_VERBOSE = 1 %: dh $@ override_dh_auto_install: dh_auto_install -- prefix=/usr Since this upstream source has the proper upstream Makefile,    there is no need to create debian/install and debian/manpages files. Файл debian/control в точноÑти Ñовпадает Ñ Ñ‚ÐµÐ¼ же файлом из    ÑÐ»ÑƒÑ‡Ð°Ñ Â«Ð Ð°Ð·Ð´ÐµÐ»Â 13.2, «Без Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»».    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. Шаблонные файлы в каталоге debian/. (v=1.0): $ rm -f debian/clean debian/dirs debian/install debian/links $ rm -f debian/README.source debian/source/*.ex $ rm -rf debian/patches $ tree -F debian debian/ ├── README.Debian ├── changelog ├── control ├── copyright    ├── gbp.conf ├── rules* ├── salsa-ci.yml ├── source/ │  └── format ├── tests/ │  └── control ├── upstream/ │  └── metadata └── watch 4 directories, 11 files The rest of the packaging activities are practically the same as    the ones in «Раздел 13.2, «Без Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»». 13.4. pyproject.toml (Python3, CLI)    Here is an example of creating a simple Debian package from a Python3 CLI program using pyproject.toml.    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-1.1.tar.gz. $ wget http://www.example.org/download/debhello-1.1.tar.gz ... $ tar -xzmf debhello-1.1.tar.gz $ tree . ├── debhello-1.1 │  ├── LICENSE │  ├── MANIFEST.in │  ├── README.md    │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── manpages │  │  └── hello.1 │  ├── pyproject.toml │  └── src │  └── debhello │  ├── __init__.py │  └── main.py └── debhello-1.1.tar.gz 6 directories, 10 files    Here, the content of this debhello source tree as follows. pyproject.toml (v=1.1) — PEP 517 configuration. $ cat debhello-1.1/pyproject.toml [build-system] requires = ["setuptools >= 61.0"] # REQUIRED if [build-system] table is used... build-backend = "setuptools.build_meta" # If not defined, then legacy behavi... [project] name = "debhello" version = "1.1.0" description = "Hello Python (CLI)" readme = {file = "README.md", content-type = "text/markdown"} requires-python = ">=3.12" license = {file = "LICENSE.txt"} keywords = ["debhello"] authors = [ {name = "Osamu Aoki", email = "osamu@debian.org" }, ] maintainers = [ {name = "Osamu Aoki", email = "osamu@debian.org" }, ]    classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Topic :: System :: Archiving :: Packaging", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3 :: Only", # Others "Operating System :: POSIX :: Linux", "Natural Language :: English", ] [project.urls] "Homepage" = "https://salsa.debian.org/debian/debmake" "Bug Reports" = "https://salsa.debian.org/debian/debmake/issues" "Source" = "https://salsa.debian.org/debian/debmake" [project.scripts] hello = "debhello.main:main" [tool.setuptools] package-dir = {"" = "src"} packages = ["debhello"] include-package-data = true MANIFEST.in (v=1.1) — for tar-ball.    $ cat debhello-1.1/MANIFEST.in include data/* include manpages/* src/debhello/__init__.py (v=1.1).    $ cat debhello-1.1/src/debhello/__init__.py """ debhello program (CLI) """ src/debhello/main.py (v=1.1) — command entry point. $ cat debhello-1.1/src/debhello/main.py """ debhello program """ import sys    __version__ = '1.1.0' def main(): # needed for console script print(' ========== Hello Python3 ==========') print('argv = {}'.format(sys.argv)) print('version = {}'.format(debhello.__version__)) return if __name__ == "__main__": sys.exit(main()) Let’s package this with the debmake command. Here, the -b':py3'    option is used to specify the generated binary package containing Python3 script and module files. $ cd /path/to/debhello-1.1 $ debmake -b':py3' -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="1.1", rev="1" I: *** start packaging in "debhello-1.1". *** I: provide debhello_1.1.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-1.1.tar.gz debhello_1.1.orig.tar.gz I: pwd = "/path/to/debhello-1.1" I: parse binary package settings: :py3 I: binary package=debhello Type=python3 / Arch=all M-A=foreign I: analyze the source tree W: setuptools build system. I: build_type = Python (pyproject.toml: PEP-518, PEP-621, PEP-660) I: scan source for copyright+license text and file extensions ...    Let’s inspect the notable template files generated. debian/rules (шаблонный файл, v=1.1): $ cd /path/to/debhello-1.1 $ cat debian/rules    #!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1 %: dh $@ --with python3 --buildsystem=pybuild    По Ñути, Ñто Ñтандартный файл debian/rules, иÑпользующий команду dh. The use of the «--with python3» option invokes dh_python3 to    calculate Python dependencies, add maintainer scripts to byte compiled files, etc. See dh_python3(1). The use of the «--buildsystem=pybuild» option invokes various    build systems for requested Python versions in order to build modules and extensions. See pybuild(1). debian/control (шаблонный файл, v=1.1): $ cat debian/control Source: debhello Section: unknown Priority: optional Maintainer: "Osamu Aoki" <osamu@debian.org> Build-Depends: debhelper-compat (= 13), dh-python, pybuild-plugin-pyproject, python3-all, python3-setuptools    Standards-Version: 4.6.2 Homepage: <insert the upstream URL, if relevant> Rules-Requires-Root: no #Vcs-Git: https://salsa.debian.org/debian/debhello.git #Vcs-Browser: https://salsa.debian.org/debian/debhello #X-Python3-Version: >= 3.7 Package: debhello Architecture: all Multi-Arch: foreign Depends: ${misc:Depends}, ${python3:Depends} Description: auto-generated package by debmake This Debian binary package was auto-generated by the debmake(1) command provided by the debmake package. Since this is the Python3 package, the debmake command sets « Architecture: all» and «Multi-Arch: foreign». Also, it sets    required substvar parameters as «Depends: ${python3:Depends}, $ {misc:Depends}». These are explained in «Глава 6, Basics for packaging».    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=1.1): $ cd /path/to/debhello-1.1 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules    #!/usr/bin/make -f export PYBUILD_NAME=debhello export PYBUILD_VERBOSE=1 export DH_VERBOSE=1 %: dh $@ --with python3 --buildsystem=pybuild debian/control (верÑÐ¸Ñ Ñопровождающего, v=1.1): $ vim debian/control ... hack, hack, hack, ... $ cat debian/control Source: debhello Section: devel Priority: optional Maintainer: Osamu Aoki <osamu@debian.org> Build-Depends: debhelper-compat (= 13), pybuild-plugin-pyproject, python3-all Standards-Version: 4.6.2    Rules-Requires-Root: no Vcs-Browser: https://salsa.debian.org/debian/debmake-doc Vcs-Git: https://salsa.debian.org/debian/debmake-doc.git Homepage: https://salsa.debian.org/debian/debmake-doc Package: debhello Architecture: all Depends: ${misc:Depends}, ${python3:Depends} Description: Simple packaging example for debmake This is an example package to demonstrate Debian packaging using the debmake command. . The generated Debian package uses the dh command offered by the debhelper package and the dpkg source format `3.0 (quilt)'.    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. This debhello command comes with the upstream-provided manpage    and desktop file but the upstream pyproject.toml doesn’t install them. So you need to update debian/install and debian/manpages as follows: debian/install (maintainer version, v=1.1): $ vim debian/copyright ... hack, hack, hack, ... $ cat debian/copyright Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: debhello Upstream-Contact: Osamu Aoki <osamu@debian.org> Source: https://salsa.debian.org/debian/debmake-doc Files: * Copyright: 2015-2024 Osamu Aoki <osamu@debian.org> License: Expat Permission is hereby granted, free of charge, to any person obtaining a    copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. debian/manpages (maintainer version, v=1.1): $ vim debian/install    ... hack, hack, hack, ... $ cat debian/install data/hello.desktop usr/share/applications data/hello.png usr/share/pixmaps The rest of the packaging activities are practically the same as    the ones in «Раздел 13.3, «Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»». Шаблонные файл в каталоге debian/. (v=1.1): $ rm -f debian/clean debian/dirs debian/links $ rm -f debian/README.source debian/source/*.ex $ rm -rf debian/patches $ tree -F debian debian/ ├── README.Debian ├── changelog ├── control ├── copyright ├── gbp.conf    ├── install ├── manpages ├── rules* ├── salsa-ci.yml ├── source/ │  └── format ├── tests/ │  └── control ├── upstream/ │  └── metadata └── watch 4 directories, 13 files    Here is the generated dependency list of debhello_1.1-1_all.deb. The generated dependency list of debhello_1.1-1_all.deb:    $ dpkg -f debhello_1.1-1_all.deb pre-depends \ depends recommends conflicts breaks Depends: python3:any 13.5. Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, графичеÑкий Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ) Ðиже приводитÑÑ Ð¿Ñ€Ð¸Ð¼ÐµÑ€ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¾Ñтого пакета Debian из    программы Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑким интерфейÑом пользователÑ, напиÑанной Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки POSIX и иÑпользующей в качеÑтве ÑиÑтемы Ñборки Makefile. This upstream is based on «Раздел 13.3, «Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Â Â Â Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»» with enhanced GUI support.    ДопуÑтим, tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-1.2.tar.gz.    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-1.2.tar.gz. $ wget http://www.example.org/download/debhello-1.2.tar.gz ... $ tar -xzmf debhello-1.2.tar.gz $ tree . ├── debhello-1.2 │  ├── Makefile    │  ├── README.md │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── man │  │  └── hello.1 │  └── scripts │  └── hello └── debhello-1.2.tar.gz 5 directories, 7 files Итак, Ñценарий hello был перепиÑан таким образом, чтобы Ð´Ð»Ñ Â Â Â ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑкого интерфейÑа Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° оÑнове GTK+ иÑпользовалаÑÑŒ команда zenity. hello (v=1.2).    $ cat debhello-1.2/scripts/hello #!/bin/sh -e zenity --info --title "hello" --text "Hello from the shell!" Файл desktop должен быть обновлён и должен Ñодержать Ñтроку    Terminal=false, поÑкольку Ñта программа имеет графичеÑкий интерфейÑ. hello.desktop (v=1.2). $ cat debhello-1.2/data/hello.desktop [Desktop Entry] Name=Hello Name[fr]=Bonjour    Comment=Greetings Comment[fr]=Salutations Type=Application Keywords=hello Exec=hello Terminal=false Icon=hello.png Categories=Utility;    All other files are the same as in «Раздел 13.3, «Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»». Let’s package this with the debmake command. Here, the «-b':sh'»    option is used to specify that the generated binary package is a shell script. $ cd /path/to/debhello-1.2 $ debmake -b':sh' -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="1.2", rev="1" I: *** start packaging in "debhello-1.2". *** I: provide debhello_1.2.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-1.2.tar.gz debhello_1.2.orig.tar.gz I: pwd = "/path/to/debhello-1.2" I: parse binary package settings: :sh I: binary package=debhello Type=script / Arch=all M-A=foreign I: analyze the source tree I: build_type = make I: scan source for copyright+license text and file extensions I: 25 %, ext = md ...    Let’s inspect the notable template files generated. debian/control (шаблонный файл, v=1.2): $ cat debian/control Source: debhello Section: unknown Priority: optional Maintainer: "Osamu Aoki" <osamu@debian.org> Build-Depends: debhelper-compat (= 13) Standards-Version: 4.6.2 Homepage: <insert the upstream URL, if relevant>    Rules-Requires-Root: no #Vcs-Git: https://salsa.debian.org/debian/debhello.git #Vcs-Browser: https://salsa.debian.org/debian/debhello Package: debhello Architecture: all Multi-Arch: foreign Depends: ${misc:Depends} Description: auto-generated package by debmake This Debian binary package was auto-generated by the debmake(1) command provided by the debmake package.    Сделаем Ñтот пакет Debian лучше. debian/control (верÑÐ¸Ñ Ñопровождающего, v=1.2): $ vim debian/control ... hack, hack, hack, ... $ cat debian/control Source: debhello Section: devel Priority: optional Maintainer: Osamu Aoki <osamu@debian.org> Build-Depends: debhelper-compat (= 13)    Standards-Version: 4.6.2 Homepage: https://salsa.debian.org/debian/debmake-doc Rules-Requires-Root: no Package: debhello Architecture: all Multi-Arch: foreign Depends: zenity, ${misc:Depends} Description: Simple packaging example for debmake This Debian binary package is an example package. (This is an example only)    Please note the manually added zenity dependency. Файл debian/rules полноÑтью Ñовпадает Ñ Ñ‚ÐµÐ¼ же файлом из «    Раздел 13.3, «Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»».    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. Шаблонные файлы в каталоге debian/. (v=1.2): $ rm -f debian/clean debian/dirs debian/install debian/links $ rm -f debian/README.source debian/source/*.ex $ rm -rf debian/patches $ tree -F debian debian/ ├── README.Debian ├── changelog ├── control ├── copyright    ├── gbp.conf ├── rules* ├── salsa-ci.yml ├── source/ │  └── format ├── tests/ │  └── control ├── upstream/ │  └── metadata └── watch 4 directories, 11 files The rest of the packaging activities are practically the same as    in «Раздел 13.3, «Makefile (ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð°Ñ Ð¾Ð±Ð¾Ð»Ð¾Ñ‡ÐºÐ°, Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ оболочки)»».    Here is the generated dependency list of debhello_1.2-1_all.deb. The generated dependency list of debhello_1.2-1_all.deb:    $ dpkg -f debhello_1.2-1_all.deb pre-depends \ depends recommends conflicts breaks Depends: zenity 13.6. pyproject.toml (Python3, GUI)    Here is an example of creating a simple Debian package from a Python3 GUI program using pyproject.toml.    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-1.3.tar.gz.    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-1.3.tar.gz. $ wget http://www.example.org/download/debhello-1.3.tar.gz ... $ tar -xzmf debhello-1.3.tar.gz $ tree . ├── debhello-1.3 │  ├── LICENSE │  ├── MANIFEST.in │  ├── README.md    │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── manpages │  │  └── hello.1 │  ├── pyproject.toml │  └── src │  └── debhello │  ├── __init__.py │  └── main.py └── debhello-1.3.tar.gz 6 directories, 10 files    Here, the content of this debhello source tree as follows. pyproject.toml (v=1.3) — PEP 517 configuration. $ cat debhello-1.3/pyproject.toml [build-system] requires = ["setuptools >= 61.0"] # REQUIRED if [build-system] table is used... build-backend = "setuptools.build_meta" # If not defined, then legacy behavi... [project] name = "debhello" version = "1.3.0" description = "Hello Python (GUI)" readme = {file = "README.md", content-type = "text/markdown"} requires-python = ">=3.12" license = {file = "LICENSE.txt"} keywords = ["debhello"] authors = [ {name = "Osamu Aoki", email = "osamu@debian.org" }, ] maintainers = [ {name = "Osamu Aoki", email = "osamu@debian.org" }, ]    classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Topic :: System :: Archiving :: Packaging", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3 :: Only", # Others "Operating System :: POSIX :: Linux", "Natural Language :: English", ] [project.urls] "Homepage" = "https://salsa.debian.org/debian/debmake" "Bug Reports" = "https://salsa.debian.org/debian/debmake/issues" "Source" = "https://salsa.debian.org/debian/debmake" [project.scripts] hello = "debhello.main:main" [tool.setuptools] package-dir = {"" = "src"} packages = ["debhello"] include-package-data = true MANIFEST.in (v=1.3) — for tar-ball.    $ cat debhello-1.3/MANIFEST.in include data/* include manpages/* src/debhello/__init__.py (v=1.3).    $ cat debhello-1.3/src/debhello/__init__.py """ debhello program (GUI) """ src/debhello/main.py (v=1.3) — command entry point. $ cat debhello-1.3/src/debhello/main.py #!/usr/bin/python3 from gi.repository import Gtk __version__ = '1.3.0' class TopWindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self) self.title = "Hello World!" self.counter = 0 self.border_width = 10 self.set_default_size(400, 100) self.set_position(Gtk.WindowPosition.CENTER)    self.button = Gtk.Button(label="Click me!") self.button.connect("clicked", self.on_button_clicked) self.add(self.button) self.connect("delete-event", self.on_window_destroy) def on_window_destroy(self, *args): Gtk.main_quit(*args) def on_button_clicked(self, widget): self.counter += 1 widget.set_label("Hello, World!\nClick count = %i" % self.counter) def main(): window = TopWindow() window.show_all() Gtk.main() if __name__ == '__main__': main() Let’s package this with the debmake command. Here, the -b':py3'    option is used to specify that the generated binary package contains Python3 script and module files. $ cd /path/to/debhello-1.3 $ debmake -b':py3' -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="1.3", rev="1" I: *** start packaging in "debhello-1.3". *** I: provide debhello_1.3.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-1.3.tar.gz debhello_1.3.orig.tar.gz I: pwd = "/path/to/debhello-1.3" I: parse binary package settings: :py3 I: binary package=debhello Type=python3 / Arch=all M-A=foreign I: analyze the source tree W: setuptools build system. I: build_type = Python (pyproject.toml: PEP-518, PEP-621, PEP-660) I: scan source for copyright+license text and file extensions ...    The result is practically the same as in «Раздел 13.4, «pyproject.toml (Python3, CLI)»».    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=1.3): $ cd /path/to/debhello-1.3 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules    #!/usr/bin/make -f export PYBUILD_NAME=debhello export PYBUILD_VERBOSE=1 export DH_VERBOSE=1 %: dh $@ --with python3 --buildsystem=pybuild debian/control (верÑÐ¸Ñ Ñопровождающего, v=1.3): $ vim debian/control ... hack, hack, hack, ... $ cat debian/control Source: debhello Section: devel Priority: optional Maintainer: Osamu Aoki <osamu@debian.org> Build-Depends: debhelper-compat (= 13), pybuild-plugin-pyproject,    python3-all Standards-Version: 4.6.2 Homepage: https://salsa.debian.org/debian/debmake-doc Rules-Requires-Root: no Package: debhello Architecture: all Multi-Arch: foreign Depends: gir1.2-gtk-3.0, python3-gi, ${misc:Depends}, ${python3:Depends} Description: Simple packaging example for debmake This Debian binary package is an example package. (This is an example only)    Please note the manually added python3-gi and gir1.2-gtk-3.0 dependencies.    The rest of the packaging activities are practically the same as in <pyproject>>.    Here is the generated dependency list of debhello_1.3-1_all.deb. The generated dependency list of debhello_1.3-1_all.deb:    $ dpkg -f debhello_1.3-1_all.deb pre-depends \ depends recommends conflicts breaks Depends: gir1.2-gtk-3.0, python3-gi, python3:any 13.7. Makefile (single-binary package)    Here is an example of creating a simple Debian package from a simple C source program using the Makefile as its build system. Ðто — пример улучшенного иÑходного кода оÑновной ветки из « Глава 5, Simple packaging». Он Ñодержит Ñтраницу руководÑтва,    файл desktop, а также иконку рабочего Ñтола. Кроме того, чтобы Ñтот пример имел большую практичеÑкую ценноÑÑ‚ÑŒ, иÑходный кодкомпануетÑÑ Ñ Ð²Ð½ÐµÑˆÐ½ÐµÐ¹ библиотекой libm.    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-1.4.tar.gz.    ПредполагаетÑÑ, что Ñтот тип иÑходного кода будет уÑтановлен как неÑиÑтемный файл: $ tar -xzmf debhello-1.4.tar.gz    $ cd debhello-1.4 $ make $ make install Debian packaging requires changing this «make install» process to    install files into the target system image location instead of the normal location under /usr/local.    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-1.4.tar.gz. $ wget http://www.example.org/download/debhello-1.4.tar.gz ... $ tar -xzmf debhello-1.4.tar.gz $ tree . ├── debhello-1.4 │  ├── LICENSE │  ├── Makefile    │  ├── README.md │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── man │  │  └── hello.1 │  └── src │  ├── config.h │  └── hello.c └── debhello-1.4.tar.gz 5 directories, 9 files    Ðиже приводитÑÑ Ñодержимое Ñтого архива Ñ Ð¸Ñходным кодом. src/hello.c (v=1.4): $ cat debhello-1.4/src/hello.c #include "config.h" #include <math.h> #include <stdio.h>    int main() { printf("Hello, I am " PACKAGE_AUTHOR "!\n"); printf("4.0 * atan(1.0) = %10f8\n", 4.0*atan(1.0)); return 0; } src/config.h (v=1.4): $ cat debhello-1.4/Makefile prefix = /usr/local all: src/hello src/hello: src/hello.c $(CC) $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ $^ -lm install: src/hello install -D src/hello \ $(DESTDIR)$(prefix)/bin/hello install -m 644 -D data/hello.desktop \ $(DESTDIR)$(prefix)/share/applications/hello.desktop    install -m 644 -D data/hello.png \ $(DESTDIR)$(prefix)/share/pixmaps/hello.png install -m 644 -D man/hello.1 \ $(DESTDIR)$(prefix)/share/man/man1/hello.1 clean: -rm -f src/hello distclean: clean uninstall: -rm -f $(DESTDIR)$(prefix)/bin/hello -rm -f $(DESTDIR)$(prefix)/share/applications/hello.desktop -rm -f $(DESTDIR)$(prefix)/share/pixmaps/hello.png -rm -f $(DESTDIR)$(prefix)/share/man/man1/hello.1 .PHONY: all install clean distclean uninstall Makefile (v=1.4):    $ cat debhello-1.4/src/config.h #define PACKAGE_AUTHOR "Osamu Aoki" Заметьте, что Ñтот файл Makefile имеет ÑоответÑтвующую цель    install Ð´Ð»Ñ Ñтраницы руководÑтва, файла desktop и иконки рабочего Ñтола.    Создадим пакет из Ñтого иÑходного кода Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake. $ cd /path/to/debhello-1.4 $ debmake -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="1.4", rev="1" I: *** start packaging in "debhello-1.4". *** I: provide debhello_1.4.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-1.4.tar.gz debhello_1.4.orig.tar.gz I: pwd = "/path/to/debhello-1.4" I: parse binary package settings: I: binary package=debhello Type=bin / Arch=any M-A=foreign I: analyze the source tree I: build_type = make I: scan source for copyright+license text and file extensions I: 33 %, ext = c ...    The result is practically the same as in «Раздел 5.6, «Step 2: Generate template files with debmake»». Let’s make this Debian package, which is practically the same as    in «Раздел 5.7, «Шаг 3: изменение шаблонных файлов»», better as the maintainer. If the DEB_BUILD_MAINT_OPTIONS environment variable is not    exported in debian/rules, lintian warns «W: debhello: hardening-no-relro usr/bin/hello» for the linking of libm. The debian/control file makes it exactly the same as the one in «    Раздел 5.7, «Шаг 3: изменение шаблонных файлов»», since the libm library is always available as a part of libc6 (Priority: required).    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. Шаблонные файлы в каталоге debian/. (v=1.4): $ rm -f debian/clean debian/dirs debian/links $ rm -f debian/README.source debian/source/*.ex $ rm -rf debian/patches $ tree -F debian debian/ ├── README.Debian ├── changelog ├── control ├── copyright    ├── gbp.conf ├── install ├── rules* ├── salsa-ci.yml ├── source/ │  └── format ├── tests/ │  └── control ├── upstream/ │  └── metadata └── watch 4 directories, 12 files ОÑтальные работы по подготовке пакета практичеÑки полноÑтью    Ñовпадают Ñ Ð¾Ð¿Ð¸Ñанными в «Раздел 5.8, «Step 4: Building package with debuild»».    Here is the generated dependency list of all binary packages. The generated dependency list of all binary packages (v=1.4): $ dpkg -f debhello-dbgsym_1.4-1_amd64.deb pre-depends \    depends recommends conflicts breaks Depends: debhello (= 1.4-1) $ dpkg -f debhello_1.4-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libc6 (>= 2.34) 13.8. Makefile.in + configure (single-binary package) Here is an example of creating a simple Debian package from a    simple C source program using Makefile.in and configure as its build system. This is an enhanced upstream source example for «Раздел 13.7, «Makefile (single-binary package)»». This also links to an    external library, libm, and this source is configurable using arguments to the configure script, which generates the Makefile and src/config.h files.    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-1.5.tar.gz.    Ðтот тип иÑходного кода предполагает уÑтановку в виде неÑиÑтемного файла, например, как $ tar -xzmf debhello-1.5.tar.gz $ cd debhello-1.5    $ ./configure --with-math $ make $ make install    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-1.5.tar.gz. $ wget http://www.example.org/download/debhello-1.5.tar.gz ... $ tar -xzmf debhello-1.5.tar.gz $ tree . ├── debhello-1.5 │  ├── LICENSE │  ├── Makefile.in    │  ├── README.md │  ├── configure │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── man │  │  └── hello.1 │  └── src │  └── hello.c └── debhello-1.5.tar.gz 5 directories, 9 files    Ðиже приводитÑÑ Ñодержимое Ñтого архива Ñ Ð¸Ñходным кодом. src/hello.c (v=1.5): $ cat debhello-1.5/src/hello.c #include "config.h" #ifdef WITH_MATH # include <math.h> #endif #include <stdio.h> int    main() { printf("Hello, I am " PACKAGE_AUTHOR "!\n"); #ifdef WITH_MATH printf("4.0 * atan(1.0) = %10f8\n", 4.0*atan(1.0)); #else printf("I can't do MATH!\n"); #endif return 0; } Makefile.in (v=1.5): $ cat debhello-1.5/Makefile.in prefix = @prefix@ all: src/hello src/hello: src/hello.c $(CC) @VERBOSE@ \ $(CPPFLAGS) \ $(CFLAGS) \ $(LDFLAGS) \ -o $@ $^ \ @LINKLIB@ install: src/hello install -D src/hello \ $(DESTDIR)$(prefix)/bin/hello    install -m 644 -D data/hello.desktop \ $(DESTDIR)$(prefix)/share/applications/hello.desktop install -m 644 -D data/hello.png \ $(DESTDIR)$(prefix)/share/pixmaps/hello.png install -m 644 -D man/hello.1 \ $(DESTDIR)$(prefix)/share/man/man1/hello.1 clean: -rm -f src/hello distclean: clean uninstall: -rm -f $(DESTDIR)$(prefix)/bin/hello -rm -f $(DESTDIR)$(prefix)/share/applications/hello.desktop -rm -f $(DESTDIR)$(prefix)/share/pixmaps/hello.png -rm -f $(DESTDIR)$(prefix)/share/man/man1/hello.1 .PHONY: all install clean distclean uninstall configure (v=1.5): $ cat debhello-1.5/configure #!/bin/sh -e # default values PREFIX="/usr/local" VERBOSE="" WITH_MATH="0" LINKLIB="" PACKAGE_AUTHOR="John Doe" # parse arguments while [ "${1}" != "" ]; do VAR="${1%=*}" # Drop suffix =* VAL="${1#*=}" # Drop prefix *= case "${VAR}" in --prefix) PREFIX="${VAL}" ;; --verbose|-v) VERBOSE="-v" ;;    --with-math) WITH_MATH="1" LINKLIB="-lm" ;; --author) PACKAGE_AUTHOR="${VAL}" ;; *) echo "W: Unknown argument: ${1}" esac shift done # setup configured Makefile and src/config.h sed -e "s,@prefix@,${PREFIX}," \ -e "s,@VERBOSE@,${VERBOSE}," \ -e "s,@LINKLIB@,${LINKLIB}," \ <Makefile.in >Makefile if [ "${WITH_MATH}" = 1 ]; then echo "#define WITH_MATH" >src/config.h else echo "/* not defined: WITH_MATH */" >src/config.h fi echo "#define PACKAGE_AUTHOR \"${PACKAGE_AUTHOR}\"" >>src/config.h    Please note that the configure command replaces strings with @…​@ in Makefile.in to produce Makefile and creates src/config.h.    Создадим пакет из Ñтого иÑходного кода Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake. $ cd /path/to/debhello-1.5 $ debmake -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="1.5", rev="1" I: *** start packaging in "debhello-1.5". *** I: provide debhello_1.5.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-1.5.tar.gz debhello_1.5.orig.tar.gz I: pwd = "/path/to/debhello-1.5" I: parse binary package settings: I: binary package=debhello Type=bin / Arch=any M-A=foreign I: analyze the source tree I: build_type = configure I: scan source for copyright+license text and file extensions I: 17 %, ext = in ... Полученный результат похож на то, что опиÑано в «Раздел 5.6,    «Step 2: Generate template files with debmake»», но полноÑтью они не Ñовпадают.    Let’s inspect the notable template files generated. debian/rules (шаблонный файл, v=1.5): $ cd /path/to/debhello-1.5 $ cat debian/rules #!/usr/bin/make -f # You must remove unused comment lines for the released package.    #export DH_VERBOSE = 1 #export DEB_BUILD_MAINT_OPTIONS = hardening=+all #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic #export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 %: dh $@    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=1.5): $ cd /path/to/debhello-1.5 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules #!/usr/bin/make -f export DH_VERBOSE = 1 export DEB_BUILD_MAINT_OPTIONS = hardening=+all    export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ override_dh_auto_configure: dh_auto_configure -- \ --with-math \ --author="Osamu Aoki"    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. ОÑтальные работы по подготовке пакета практичеÑки полноÑтью    Ñовпадают Ñ Ð¾Ð¿Ð¸Ñанными в «Раздел 5.8, «Step 4: Building package with debuild»». 13.9. Autotools (single-binary package) Here is an example of creating a simple Debian package from a    simple C source program using Autotools = Autoconf and Automake ( Makefile.am and configure.ac) as its build system. This source usually comes with the upstream auto-generated Makefile.in and configure files, too. This source can be packaged    using these files as in «Раздел 13.8, «Makefile.in + configure (single-binary package)»» with the help of the autotools-dev package. The better alternative is to regenerate these files using the latest Autoconf and Automake packages if the upstream provided    Makefile.am and configure.ac are compatible with the latest version. This is advantageous for porting to new CPU architectures, etc. This can be automated by using the «--with autoreconf» option for the dh command.    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-1.6.tar.gz.    Ðтот тип иÑходного кода предполагает уÑтановку в виде неÑиÑтемного файла, например, как $ tar -xzmf debhello-1.6.tar.gz $ cd debhello-1.6    $ autoreconf -ivf # optional $ ./configure --with-math $ make $ make install    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-1.6.tar.gz. $ wget http://www.example.org/download/debhello-1.6.tar.gz ... $ tar -xzmf debhello-1.6.tar.gz $ tree . ├── debhello-1.6 │  ├── LICENSE │  ├── Makefile.am │  ├── README.md    │  ├── configure.ac │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── man │  │  ├── Makefile.am │  │  └── hello.1 │  └── src │  ├── Makefile.am │  └── hello.c └── debhello-1.6.tar.gz 5 directories, 11 files    Ðиже приводитÑÑ Ñодержимое Ñтого архива Ñ Ð¸Ñходным кодом. src/hello.c (v=1.6): $ cat debhello-1.6/src/hello.c #include "config.h" #ifdef WITH_MATH # include <math.h> #endif #include <stdio.h> int    main() { printf("Hello, I am " PACKAGE_AUTHOR "!\n"); #ifdef WITH_MATH printf("4.0 * atan(1.0) = %10f8\n", 4.0*atan(1.0)); #else printf("I can't do MATH!\n"); #endif return 0; } Makefile.am (v=1.6): $ cat debhello-1.6/Makefile.am SUBDIRS = src man    $ cat debhello-1.6/man/Makefile.am dist_man_MANS = hello.1 $ cat debhello-1.6/src/Makefile.am bin_PROGRAMS = hello hello_SOURCES = hello.c configure.ac (v=1.6): $ cat debhello-1.6/configure.ac # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([debhello],[2.1],[foo@example.org]) AC_CONFIG_SRCDIR([src/hello.c]) AC_CONFIG_HEADERS([config.h]) echo "Standard customization chores" AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([foreign]) # Add #define PACKAGE_AUTHOR ... in config.h with a comment AC_DEFINE(PACKAGE_AUTHOR, ["Osamu Aoki"], [Define PACKAGE_AUTHOR]) echo "Add --with-math option functionality to ./configure" AC_ARG_WITH([math], [AS_HELP_STRING([--with-math], [compile with math library @<:@default=yes@:>@])], [], [with_math="yes"] )    echo "==== withval := \"$withval\"" echo "==== with_math := \"$with_math\"" # m4sh if-else construct AS_IF([test "x$with_math" != "xno"],[ echo "==== Check include: math.h" AC_CHECK_HEADER(math.h,[],[ AC_MSG_ERROR([Couldn't find math.h.] ) ]) echo "==== Check library: libm" AC_SEARCH_LIBS(atan, [m]) #AC_CHECK_LIB(m, atan) echo "==== Build with LIBS := \"$LIBS\"" AC_DEFINE(WITH_MATH, [1], [Build with the math library]) ],[ echo "==== Skip building with math.h." AH_TEMPLATE(WITH_MATH, [Build without the math library]) ]) # Checks for programs. AC_PROG_CC AC_CONFIG_FILES([Makefile man/Makefile src/Makefile]) AC_OUTPUT ПодÑказка    Without «foreign» strictness level specified in AM_INIT_AUTOMAKE () as above, automake defaults to «gnu» strictness level requiring several files in the top-level directory. See «3.2 Strictness» in the automake document.    Создадим пакет из Ñтого иÑходного кода Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake. $ cd /path/to/debhello-1.6 $ debmake -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="1.6", rev="1" I: *** start packaging in "debhello-1.6". *** I: provide debhello_1.6.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-1.6.tar.gz debhello_1.6.orig.tar.gz I: pwd = "/path/to/debhello-1.6" I: parse binary package settings: I: binary package=debhello Type=bin / Arch=any M-A=foreign I: analyze the source tree I: build_type = Autotools with autoreconf I: scan source for copyright+license text and file extensions I: 33 %, ext = am ... ПолучившийÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚ похож на то, что было опиÑано в «    Раздел 13.8, «Makefile.in + configure (single-binary package)»», но не Ñовпадает Ñ Ð½Ð¸Ð¼ в точноÑти.    Let’s inspect the notable template files generated. debian/rules (шаблонный файл, v=1.6): $ cd /path/to/debhello-1.6 $ cat debian/rules #!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1    #export DEB_BUILD_MAINT_OPTIONS = hardening=+all #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic #export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 %: dh $@ --with autoreconf #override_dh_install: # dh_install --list-missing -X.la -X.pyc -X.pyo    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=1.6): $ cd /path/to/debhello-1.6 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules #!/usr/bin/make -f export DH_VERBOSE = 1    export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ --with autoreconf override_dh_auto_configure: dh_auto_configure -- \ --with-math    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. ОÑтальные работы по подготовке пакета практичеÑки полноÑтью    Ñовпадают Ñ Ð¾Ð¿Ð¸Ñанными в «Раздел 5.8, «Step 4: Building package with debuild»». 13.10. CMake (single-binary package) Here is an example of creating a simple Debian package from a    simple C source program using CMake (CMakeLists.txt and some files such as config.h.in) as its build system. The cmake command generates the Makefile file based on the    CMakeLists.txt file and its -D option. It also configures the file as specified in its configure_file(…​) by replacing strings with @…​@ and changing the #cmakedefine …​ line.    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-1.7.tar.gz.    Ðтот тип иÑходного кода предполагает уÑтановку в виде неÑиÑтемного файла, например, как $ tar -xzmf debhello-1.7.tar.gz $ cd debhello-1.7 $ mkdir obj-x86_64-linux-gnu # for out-of-tree build    $ cd obj-x86_64-linux-gnu $ cmake .. $ make $ make install    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-1.7.tar.gz. $ wget http://www.example.org/download/debhello-1.7.tar.gz ... $ tar -xzmf debhello-1.7.tar.gz $ tree . ├── debhello-1.7 │  ├── CMakeLists.txt │  ├── LICENSE │  ├── README.md    │  ├── data │  │  ├── hello.desktop │  │  └── hello.png │  ├── man │  │  ├── CMakeLists.txt │  │  └── hello.1 │  └── src │  ├── CMakeLists.txt │  ├── config.h.in │  └── hello.c └── debhello-1.7.tar.gz 5 directories, 11 files    Ðиже приводитÑÑ Ñодержимое Ñтого архива Ñ Ð¸Ñходным кодом. src/hello.c (v=1.7): $ cat debhello-1.7/src/hello.c #include "config.h" #ifdef WITH_MATH # include <math.h> #endif #include <stdio.h> int    main() { printf("Hello, I am " PACKAGE_AUTHOR "!\n"); #ifdef WITH_MATH printf("4.0 * atan(1.0) = %10f8\n", 4.0*atan(1.0)); #else printf("I can't do MATH!\n"); #endif return 0; } src/config.h.in (v=1.7): $ cat debhello-1.7/src/config.h.in    /* name of the package author */ #define PACKAGE_AUTHOR "@PACKAGE_AUTHOR@" /* math library support */ #cmakedefine WITH_MATH CMakeLists.txt (v=1.7): $ cat debhello-1.7/CMakeLists.txt cmake_minimum_required(VERSION 2.8) project(debhello) set(PACKAGE_AUTHOR "Osamu Aoki") add_subdirectory(src) add_subdirectory(man) $ cat debhello-1.7/man/CMakeLists.txt install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/hello.1 DESTINATION share/man/man1 ) $ cat debhello-1.7/src/CMakeLists.txt    # Always define HAVE_CONFIG_H add_definitions(-DHAVE_CONFIG_H) # Interactively define WITH_MATH option(WITH_MATH "Build with math support" OFF) #variable_watch(WITH_MATH) # Generate config.h from config.h.in configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" ) include_directories("${CMAKE_CURRENT_BINARY_DIR}") add_executable(hello hello.c) install(TARGETS hello RUNTIME DESTINATION bin )    Создадим пакет из Ñтого иÑходного кода Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake. $ cd /path/to/debhello-1.7 $ debmake -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="1.7", rev="1" I: *** start packaging in "debhello-1.7". *** I: provide debhello_1.7.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-1.7.tar.gz debhello_1.7.orig.tar.gz I: pwd = "/path/to/debhello-1.7" I: parse binary package settings: I: binary package=debhello Type=bin / Arch=any M-A=foreign I: analyze the source tree I: build_type = Cmake I: scan source for copyright+license text and file extensions I: 33 %, ext = text ... ПолучившийÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚ похож на то, что было опиÑано в «    Раздел 13.8, «Makefile.in + configure (single-binary package)»», но не Ñовпадает Ñ Ð½Ð¸Ð¼ в точноÑти.    Let’s inspect the notable template files generated. debian/rules (шаблонный файл, v=1.7): $ cd /path/to/debhello-1.7 $ cat debian/rules #!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1 #export DEB_BUILD_MAINT_OPTIONS = hardening=+all    #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic #export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 %: dh $@ #override_dh_auto_configure: # dh_auto_configure -- \ # -DCMAKE_LIBRARY_ARCHITECTURE="$(DEB_TARGET_MULTIARCH)" debian/control (шаблонный файл, v=1.7): $ cat debian/control Source: debhello Section: unknown Priority: optional Maintainer: "Osamu Aoki" <osamu@debian.org> Build-Depends: cmake, debhelper-compat (= 13) Standards-Version: 4.6.2 Homepage: <insert the upstream URL, if relevant>    Rules-Requires-Root: no #Vcs-Git: https://salsa.debian.org/debian/debhello.git #Vcs-Browser: https://salsa.debian.org/debian/debhello Package: debhello Architecture: any Multi-Arch: foreign Depends: ${misc:Depends}, ${shlibs:Depends} Description: auto-generated package by debmake This Debian binary package was auto-generated by the debmake(1) command provided by the debmake package.    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=1.7): $ cd /path/to/debhello-1.7 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules #!/usr/bin/make -f export DH_VERBOSE = 1    export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ override_dh_auto_configure: dh_auto_configure -- -DWITH-MATH=1 debian/control (верÑÐ¸Ñ Ñопровждающего, v=1.7): $ vim debian/control ... hack, hack, hack, ... $ cat debian/control Source: debhello Section: devel Priority: optional Maintainer: Osamu Aoki <osamu@debian.org> Build-Depends: cmake, debhelper-compat (= 13)    Standards-Version: 4.6.2 Homepage: https://salsa.debian.org/debian/debmake-doc Rules-Requires-Root: no Package: debhello Architecture: any Multi-Arch: foreign Depends: ${misc:Depends}, ${shlibs:Depends} Description: Simple packaging example for debmake This Debian binary package is an example package. (This is an example only)    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. ОÑтальные работы по подготовке пакета практичеÑки полноÑтью    Ñовпадают Ñ Ð¾Ð¿Ð¸Ñанными в «Раздел 13.8, «Makefile.in + configure (single-binary package)»». 13.11. Autotools (multi-binary package) Here is an example of creating a set of Debian binary packages including the executable package, the shared library package, the    development file package, and the debug symbol package from a simple C source program using Autotools = Autoconf and Automake (which use Makefile.am and configure.ac as their input files) as its build system.    Let’s package this in the same way as in «Раздел 13.9, «Autotools (single-binary package)»».    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-2.0.tar.gz.    Ðтот тип иÑходного кода предполагает уÑтановку в виде неÑиÑтемного файла, например, как $ tar -xzmf debhello-2.0.tar.gz $ cd debhello-2.0    $ autoreconf -ivf # optional $ ./configure --with-math $ make $ make install    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-2.0.tar.gz. $ wget http://www.example.org/download/debhello-2.0.tar.gz ... $ tar -xzmf debhello-2.0.tar.gz $ tree . ├── debhello-2.0 │  ├── LICENSE │  ├── Makefile.am │  ├── README.md │  ├── configure.ac │  ├── data    │  │  ├── hello.desktop │  │  └── hello.png │  ├── lib │  │  ├── Makefile.am │  │  ├── sharedlib.c │  │  └── sharedlib.h │  ├── man │  │  ├── Makefile.am │  │  └── hello.1 │  └── src │  ├── Makefile.am │  └── hello.c └── debhello-2.0.tar.gz 6 directories, 14 files    Ðиже приводитÑÑ Ñодержимое Ñтого архива Ñ Ð¸Ñходным кодом. src/hello.c (v=2.0): $ cat debhello-2.0/src/hello.c #include "config.h" #include <stdio.h> #include <sharedlib.h>    int main() { printf("Hello, I am " PACKAGE_AUTHOR "!\n"); sharedlib(); return 0; } lib/sharedlib.h и lib/sharedlib.c (v=1.6): $ cat debhello-2.0/lib/sharedlib.h int sharedlib(); $ cat debhello-2.0/lib/sharedlib.c    #include <stdio.h> int sharedlib() { printf("This is a shared library!\n"); return 0; } Makefile.am (v=2.0): $ cat debhello-2.0/Makefile.am # recursively process `Makefile.am` in SUBDIRS SUBDIRS = lib src man $ cat debhello-2.0/man/Makefile.am # manpages (distributed in the source package) dist_man_MANS = hello.1 $ cat debhello-2.0/lib/Makefile.am # libtool librares to be produced lib_LTLIBRARIES = libsharedlib.la # source files used for lib_LTLIBRARIES libsharedlib_la_SOURCES = sharedlib.c # C pre-processor flags used for lib_LTLIBRARIES #libsharedlib_la_CPPFLAGS =    # Headers files to be installed in <prefix>/include include_HEADERS = sharedlib.h # Versioning Libtool Libraries with version triplets libsharedlib_la_LDFLAGS = -version-info 1:0:0 $ cat debhello-2.0/src/Makefile.am # program executables to be produced bin_PROGRAMS = hello # source files used for bin_PROGRAMS hello_SOURCES = hello.c # C pre-processor flags used for bin_PROGRAMS AM_CPPFLAGS = -I$(srcdir) -I$(top_srcdir)/lib # Extra options for the linker for hello # hello_LDFLAGS = # Libraries the `hello` binary to be linked hello_LDADD = $(top_srcdir)/lib/libsharedlib.la configure.ac (v=2.0): $ cat debhello-2.0/configure.ac # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([debhello],[2.2],[foo@example.org]) AC_CONFIG_SRCDIR([src/hello.c]) AC_CONFIG_HEADERS([config.h]) echo "Standard customization chores" AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([foreign]) # Set default to --enable-shared --disable-static LT_INIT([shared disable-static])    # find the libltdl sources in the libltdl sub-directory LT_CONFIG_LTDL_DIR([libltdl]) # choose one LTDL_INIT([recursive]) #LTDL_INIT([subproject]) #LTDL_INIT([nonrecursive]) # Add #define PACKAGE_AUTHOR ... in config.h with a comment AC_DEFINE(PACKAGE_AUTHOR, ["Osamu Aoki"], [Define PACKAGE_AUTHOR]) # Checks for programs. AC_PROG_CC # only for the recursive case AC_CONFIG_FILES([Makefile lib/Makefile man/Makefile src/Makefile]) AC_OUTPUT    Создадим пакет Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake в виде неÑкольких пакетов: * debhello: type = bin    * libsharedlib1: type = lib * libsharedlib-dev: type = dev    Here, the -b\',libsharedlib1,libsharedlib-dev' option is used to specify the generated binary packages. $ cd /path/to/debhello-2.0 $ debmake -b',libsharedlib1,libsharedlib-dev' -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="2.0", rev="1" I: *** start packaging in "debhello-2.0". *** I: provide debhello_2.0.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-2.0.tar.gz debhello_2.0.orig.tar.gz I: pwd = "/path/to/debhello-2.0" I: parse binary package settings: ,libsharedlib1,libsharedlib-dev I: binary package=debhello Type=bin / Arch=any M-A=foreign I: binary package=libsharedlib1 Type=lib / Arch=any M-A=same I: binary package=libsharedlib-dev Type=dev / Arch=any M-A=same I: analyze the source tree I: build_type = Autotools with autoreconf ... ПолучившийÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚ похож на то, что было опиÑано в «    Раздел 13.8, «Makefile.in + configure (single-binary package)»», но имеет большее количеÑтво шаблонных файлов.    Let’s inspect the notable template files generated. debian/rules (шаблонный файл, v=2.0): $ cd /path/to/debhello-2.0 $ cat debian/rules #!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1    #export DEB_BUILD_MAINT_OPTIONS = hardening=+all #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic #export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 %: dh $@ --with autoreconf #override_dh_install: # dh_install --list-missing -X.la -X.pyc -X.pyo    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=2.0): $ cd /path/to/debhello-2.0 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules #!/usr/bin/make -f export DH_VERBOSE = 1    export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed %: dh $@ --with autoreconf override_dh_missing: dh_missing -X.la debian/control (верÑÐ¸Ñ Ñопровождающего, v=2.0): $ vim debian/control ... hack, hack, hack, ... $ cat debian/control Source: debhello Section: devel Priority: optional Maintainer: Osamu Aoki <osamu@debian.org> Build-Depends: debhelper-compat (= 13), dh-autoreconf Standards-Version: 4.6.2 Homepage: https://salsa.debian.org/debian/debmake-doc Rules-Requires-Root: no Package: debhello Architecture: any Multi-Arch: foreign Depends: libsharedlib1 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends}    Description: Simple packaging example for debmake This package contains the compiled binary executable. . This Debian binary package is an example package. (This is an example only) Package: libsharedlib1 Section: libs Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} Depends: ${misc:Depends}, ${shlibs:Depends} Description: Simple packaging example for debmake This package contains the shared library. Package: libsharedlib-dev Section: libdevel Architecture: any Multi-Arch: same Depends: libsharedlib1 (= ${binary:Version}), ${misc:Depends} Description: Simple packaging example for debmake This package contains the development files. debian/*.install (верÑÐ¸Ñ Ñопровождающего, v=2.0): $ vim debian/copyright ... hack, hack, hack, ... $ cat debian/copyright Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: debhello Upstream-Contact: Osamu Aoki <osamu@debian.org> Source: https://salsa.debian.org/debian/debmake-doc Files: * Copyright: 2015-2021 Osamu Aoki <osamu@debian.org> License: Expat Permission is hereby granted, free of charge, to any person obtaining a    copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Since this upstream source creates the proper auto-generated    Makefile, there is no need to create debian/install and debian/ manpages files.    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. Шабонные файлы в каталоге debian/. (v=2.0): $ rm -f debian/clean debian/dirs debian/install debian/links $ rm -f debian/README.source debian/source/*.ex $ rm -rf debian/patches $ tree -F debian debian/ ├── README.Debian ├── changelog ├── control ├── copyright ├── debhello.dirs ├── debhello.doc-base ├── debhello.docs ├── debhello.examples ├── debhello.info    ├── debhello.install ├── debhello.links ├── debhello.manpages ├── gbp.conf ├── libsharedlib-dev.install ├── libsharedlib1.install ├── libsharedlib1.symbols ├── rules* ├── salsa-ci.yml ├── source/ │  └── format ├── tests/ │  └── control ├── upstream/ │  └── metadata └── watch 4 directories, 22 files ОÑтальные работы по подготовке пакета практичеÑки полноÑтью    Ñовпадают Ñ Ð¾Ð¿Ð¸Ñанными в «Раздел 13.8, «Makefile.in + configure (single-binary package)»».    Here are the generated dependency list of all binary packages. The generated dependency list of all binary packages (v=2.0): $ dpkg -f debhello-dbgsym_2.0-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: debhello (= 2.0-1) $ dpkg -f debhello_2.0-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libsharedlib1 (= 2.0-1), libc6 (>= 2.34)    $ dpkg -f libsharedlib-dev_2.0-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libsharedlib1 (= 2.0-1) $ dpkg -f libsharedlib1-dbgsym_2.0-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libsharedlib1 (= 2.0-1) $ dpkg -f libsharedlib1_2.0-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libc6 (>= 2.2.5) 13.12. CMake (multi-binary package) Here is an example of creating a set of Debian binary packages including the executable package, the shared library package, the    development file package, and the debug symbol package from a simple C source program using CMake (CMakeLists.txt and some files such as config.h.in) as its build system.    ДопуÑтим tar-архив оÑновной ветки имеет Ð¸Ð¼Ñ debhello-2.1.tar.gz.    Ðтот тип иÑходного кода предполагает уÑтановку в виде неÑиÑтемного файла, например, как $ tar -xzmf debhello-2.1.tar.gz $ cd debhello-2.1 $ mkdir obj-x86_64-linux-gnu    $ cd obj-x86_64-linux-gnu $ cmake .. $ make $ make install    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-2.1.tar.gz. $ wget http://www.example.org/download/debhello-2.1.tar.gz ... $ tar -xzmf debhello-2.1.tar.gz $ tree . ├── debhello-2.1 │  ├── CMakeLists.txt │  ├── LICENSE │  ├── README.md │  ├── data │  │  ├── hello.desktop    │  │  └── hello.png │  ├── lib │  │  ├── CMakeLists.txt │  │  ├── sharedlib.c │  │  └── sharedlib.h │  ├── man │  │  ├── CMakeLists.txt │  │  └── hello.1 │  └── src │  ├── CMakeLists.txt │  ├── config.h.in │  └── hello.c └── debhello-2.1.tar.gz 6 directories, 14 files    Ðиже приводитÑÑ Ñодержимое Ñтого архива Ñ Ð¸Ñходным кодом. src/hello.c (v=2.1): $ cat debhello-2.1/src/hello.c #include "config.h" #include <stdio.h> #include <sharedlib.h>    int main() { printf("Hello, I am " PACKAGE_AUTHOR "!\n"); sharedlib(); return 0; } src/config.h.in (v=2.1):    $ cat debhello-2.1/src/config.h.in /* name of the package author */ #define PACKAGE_AUTHOR "@PACKAGE_AUTHOR@" lib/sharedlib.c и lib/sharedlib.h (v=2.1): $ cat debhello-2.1/lib/sharedlib.h int sharedlib(); $ cat debhello-2.1/lib/sharedlib.c    #include <stdio.h> int sharedlib() { printf("This is a shared library!\n"); return 0; } CMakeLists.txt (v=2.1): $ cat debhello-2.1/CMakeLists.txt cmake_minimum_required(VERSION 2.8) project(debhello) set(PACKAGE_AUTHOR "Osamu Aoki") add_subdirectory(lib) add_subdirectory(src) add_subdirectory(man) $ cat debhello-2.1/man/CMakeLists.txt install( FILES ${CMAKE_CURRENT_SOURCE_DIR}/hello.1 DESTINATION share/man/man1 )    $ cat debhello-2.1/src/CMakeLists.txt # Always define HAVE_CONFIG_H add_definitions(-DHAVE_CONFIG_H) # Generate config.h from config.h.in configure_file( "${CMAKE_CURRENT_SOURCE_DIR}/config.h.in" "${CMAKE_CURRENT_BINARY_DIR}/config.h" ) include_directories("${CMAKE_CURRENT_BINARY_DIR}") include_directories("${CMAKE_SOURCE_DIR}/lib") add_executable(hello hello.c) target_link_libraries(hello sharedlib) install(TARGETS hello RUNTIME DESTINATION bin )    Создадим пакет из Ñтого иÑходного кода Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake. $ cd /path/to/debhello-2.1 $ debmake -b',libsharedlib1,libsharedlib-dev' -x1 I: set parameters ... I: sanity check of parameters I: pkg="debhello", ver="2.1", rev="1" I: *** start packaging in "debhello-2.1". *** I: provide debhello_2.1.orig.tar.gz for non-native Debian package    I: pwd = "/path/to" I: $ ln -sf debhello-2.1.tar.gz debhello_2.1.orig.tar.gz I: pwd = "/path/to/debhello-2.1" I: parse binary package settings: ,libsharedlib1,libsharedlib-dev I: binary package=debhello Type=bin / Arch=any M-A=foreign I: binary package=libsharedlib1 Type=lib / Arch=any M-A=same I: binary package=libsharedlib-dev Type=dev / Arch=any M-A=same I: analyze the source tree I: build_type = Cmake ... ПолучившийÑÑ Ñ€ÐµÐ·ÑƒÐ»ÑŒÑ‚Ð°Ñ‚ похож на то, что было опиÑано в «    Раздел 13.8, «Makefile.in + configure (single-binary package)»», но не Ñовпадает Ñ Ð½Ð¸Ð¼ в точноÑти.    Let’s inspect the notable template files generated. debian/rules (шаблонный файл, v=2.1): $ cd /path/to/debhello-2.1 $ cat debian/rules #!/usr/bin/make -f # You must remove unused comment lines for the released package. #export DH_VERBOSE = 1 #export DEB_BUILD_MAINT_OPTIONS = hardening=+all    #export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic #export DEB_LDFLAGS_MAINT_APPEND = -Wl,-O1 %: dh $@ #override_dh_auto_configure: # dh_auto_configure -- \ # -DCMAKE_LIBRARY_ARCHITECTURE="$(DEB_TARGET_MULTIARCH)"    Сделаем Ñтот пакет Debian лучше. debian/rules (верÑÐ¸Ñ Ñопровождающего, v=2.1): $ cd /path/to/debhello-2.1 $ vim debian/rules ... hack, hack, hack, ... $ cat debian/rules #!/usr/bin/make -f export DH_VERBOSE = 1 export DEB_BUILD_MAINT_OPTIONS = hardening=+all    export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) %: dh $@ override_dh_auto_configure: dh_auto_configure -- \ -DCMAKE_LIBRARY_ARCHITECTURE="$(DEB_HOST_MULTIARCH)" debian/control (верÑÐ¸Ñ Ñопровождающего, v=2.1): $ vim debian/control ... hack, hack, hack, ... $ cat debian/control Source: debhello Section: devel Priority: optional Maintainer: Osamu Aoki <osamu@debian.org> Build-Depends: cmake, debhelper-compat (= 13) Standards-Version: 4.6.2 Homepage: https://salsa.debian.org/debian/debmake-doc Rules-Requires-Root: no Package: debhello Architecture: any Multi-Arch: foreign Depends: libsharedlib1 (= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends}    Description: Simple packaging example for debmake This package contains the compiled binary executable. . This Debian binary package is an example package. (This is an example only) Package: libsharedlib1 Section: libs Architecture: any Multi-Arch: same Pre-Depends: ${misc:Pre-Depends} Depends: ${misc:Depends}, ${shlibs:Depends} Description: Simple packaging example for debmake This package contains the shared library. Package: libsharedlib-dev Section: libdevel Architecture: any Multi-Arch: same Depends: libsharedlib1 (= ${binary:Version}), ${misc:Depends} Description: Simple packaging example for debmake This package contains the development files. debian/*.install (верÑÐ¸Ñ Ñопровождающего, v=2.1): $ vim debian/copyright ... hack, hack, hack, ... $ cat debian/copyright Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: debhello Upstream-Contact: Osamu Aoki <osamu@debian.org> Source: https://salsa.debian.org/debian/debmake-doc Files: * Copyright: 2015-2021 Osamu Aoki <osamu@debian.org> License: Expat Permission is hereby granted, free of charge, to any person obtaining a    copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: . The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. . THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.    Файл CMakeList.txt из оÑновной ветки необходимо изменить тк, чтобы в нём была обеÑпечена поддержка мультиархитектурных путей. debian/patches/* (верÑÐ¸Ñ Ñопровождающего, v=2.1):    ... hack, hack, hack, ... $ cat debian/libsharedlib1.symbols libsharedlib.so.1 libsharedlib1 #MINVER# sharedlib@Base 2.1 Since this upstream source creates the proper auto-generated    Makefile, there is no need to create debian/install and debian/ manpages files.    В каталоге debian/ имеютÑÑ Ð¸ другие шаблонные файлы. Их также Ñледует обновить. Шаблонные файлы в каталоге debian/. (v=2.1): $ rm -f debian/clean debian/dirs debian/install debian/links $ rm -f debian/README.source debian/source/*.ex $ tree -F debian debian/ ├── README.Debian ├── changelog ├── control ├── copyright ├── debhello.dirs ├── debhello.doc-base ├── debhello.docs ├── debhello.examples ├── debhello.info ├── debhello.install ├── debhello.links    ├── debhello.manpages ├── gbp.conf ├── libsharedlib-dev.install ├── libsharedlib1.install ├── libsharedlib1.symbols ├── patches/ │  ├── 000-cmake-multiarch.patch │  └── series ├── rules* ├── salsa-ci.yml ├── source/ │  └── format ├── tests/ │  └── control ├── upstream/ │  └── metadata └── watch 5 directories, 24 files ОÑтальные работы по подготовке пакета практичеÑки полноÑтью    Ñовпадают Ñ Ð¾Ð¿Ð¸Ñанными в «Раздел 13.8, «Makefile.in + configure (single-binary package)»».    Here are the generated dependency list of all binary packages. The generated dependency list of all binary packages (v=2.1): $ dpkg -f debhello-dbgsym_2.1-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: debhello (= 2.1-1) $ dpkg -f debhello_2.1-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libsharedlib1 (= 2.1-1), libc6 (>= 2.34)    $ dpkg -f libsharedlib-dev_2.1-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libsharedlib1 (= 2.1-1) $ dpkg -f libsharedlib1-dbgsym_2.1-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libsharedlib1 (= 2.1-1) $ dpkg -f libsharedlib1_2.1-1_amd64.deb pre-depends \ depends recommends conflicts breaks Depends: libc6 (>= 2.2.5) 13.13. Ð˜Ð½Ñ‚ÐµÑ€Ð½Ð°Ñ†Ð¸Ð¾Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Here is an example of updating the simple upstream C source    debhello-2.0.tar.gz presented in «Раздел 13.11, «Autotools (multi-binary package)»» for internationalization (i18n) and creating the updated upstream C source debhello-2.0.tar.gz. In the real situation, the package should already be    internationalized. So this example is educational for you to understand how this internationalization is implemented. ПодÑказка    The routine maintainer activity for the i18n is simply to add translation po files reported to you via the Bug Tracking System (BTS) to the po/ directory and to update the language list in the po/LINGUAS file.    Получитм иÑходный код и Ñоздадим пакет Debian. Загрузим debhello-2.0.tar.gz (i18n). $ wget http://www.example.org/download/debhello-2.0.tar.gz ... $ tar -xzmf debhello-2.0.tar.gz $ tree . ├── debhello-2.0 │  ├── LICENSE │  ├── Makefile.am │  ├── README.md │  ├── configure.ac │  ├── data    │  │  ├── hello.desktop │  │  └── hello.png │  ├── lib │  │  ├── Makefile.am │  │  ├── sharedlib.c │  │  └── sharedlib.h │  ├── man │  │  ├── Makefile.am │  │  └── hello.1 │  └── src │  ├── Makefile.am │  └── hello.c └── debhello-2.0.tar.gz 6 directories, 14 files    Internationalize this source tree with the gettextize command and remove files auto-generated by Autotools. запуÑтим gettextize (i18n): $ cd /path/to/debhello-2.0 $ gettextize Creating po/ subdirectory Creating build-aux/ subdirectory Copying file ABOUT-NLS Copying file build-aux/config.rpath Not copying intl/ directory. Copying file po/Makefile.in.in Copying file po/Makevars.template Copying file po/Rules-quot Copying file po/boldquot.sed Copying file po/en@boldquot.header Copying file po/en@quot.header Copying file po/insert-header.sin Copying file po/quot.sed Copying file po/remove-potcdate.sin Creating initial po/POTFILES.in Creating po/ChangeLog Creating directory m4 Copying file m4/gettext.m4 Copying file m4/iconv.m4 Copying file m4/lib-ld.m4 Copying file m4/lib-link.m4 Copying file m4/lib-prefix.m4 Copying file m4/nls.m4 Copying file m4/po.m4 Copying file m4/progtest.m4    Creating m4/ChangeLog Updating Makefile.am (backup is in Makefile.am~) Updating configure.ac (backup is in configure.ac~) Creating ChangeLog Please use AM_GNU_GETTEXT([external]) in order to cause autoconfiguration to look for an external libintl. Please create po/Makevars from the template in po/Makevars.template. You can then remove po/Makevars.template. Please fill po/POTFILES.in as described in the documentation. Please run 'aclocal' to regenerate the aclocal.m4 file. You need aclocal from GNU automake 1.9 (or newer) to do this. Then run 'autoconf' to regenerate the configure file. You will also need config.guess and config.sub, which you can get from the CV... of the 'config' project at http://savannah.gnu.org/. The commands to fetch th... are $ wget 'http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/conf... $ wget 'http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/conf... You might also want to copy the convenience header file gettext.h from the /usr/share/gettext directory into your package. It is a wrapper around <libintl.h> that implements the configure --disable-nl... option. Press Return to acknowledge the previous 6 paragraphs. $ rm -rf m4 build-aux *~    Проверим Ñозданные файлы в каталоге po/. файлы в каталоге po (i18n): $ ls -l po total 60 -rw-rw-r-- 1 osamu osamu 494 Jul 24 10:14 ChangeLog -rw-rw-r-- 1 osamu osamu 17577 Jul 24 10:14 Makefile.in.in -rw-rw-r-- 1 osamu osamu 3376 Jul 24 10:14 Makevars.template    -rw-rw-r-- 1 osamu osamu 59 Jul 24 10:14 POTFILES.in -rw-rw-r-- 1 osamu osamu 2203 Jul 24 10:14 Rules-quot -rw-rw-r-- 1 osamu osamu 217 Jul 24 10:14 boldquot.sed -rw-rw-r-- 1 osamu osamu 1337 Jul 24 10:14 en@boldquot.header -rw-rw-r-- 1 osamu osamu 1203 Jul 24 10:14 en@quot.header -rw-rw-r-- 1 osamu osamu 672 Jul 24 10:14 insert-header.sin -rw-rw-r-- 1 osamu osamu 153 Jul 24 10:14 quot.sed -rw-rw-r-- 1 osamu osamu 432 Jul 24 10:14 remove-potcdate.sin    Let’s update the configure.ac by adding «AM_GNU_GETTEXT ([external])», etc.. configure.ac (i18n): $ vim configure.ac ... hack, hack, hack, ... $ cat configure.ac # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([debhello],[2.2],[foo@example.org]) AC_CONFIG_SRCDIR([src/hello.c]) AC_CONFIG_HEADERS([config.h]) echo "Standard customization chores" AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([foreign]) # Set default to --enable-shared --disable-static LT_INIT([shared disable-static]) # find the libltdl sources in the libltdl sub-directory LT_CONFIG_LTDL_DIR([libltdl])    # choose one LTDL_INIT([recursive]) #LTDL_INIT([subproject]) #LTDL_INIT([nonrecursive]) # Add #define PACKAGE_AUTHOR ... in config.h with a comment AC_DEFINE(PACKAGE_AUTHOR, ["Osamu Aoki"], [Define PACKAGE_AUTHOR]) # Checks for programs. AC_PROG_CC # desktop file support required AM_GNU_GETTEXT_VERSION([0.19.3]) AM_GNU_GETTEXT([external]) # only for the recursive case AC_CONFIG_FILES([Makefile po/Makefile.in lib/Makefile man/Makefile src/Makefile]) AC_OUTPUT    Let’s create the po/Makevars file from the po/Makevars.template file. po/Makevars (i18n): ... hack, hack, hack, ... $ diff -u po/Makevars.template po/Makevars --- po/Makevars.template 2024-07-24 10:14:46.440850967 +0900 +++ po/Makevars 2024-07-24 10:14:46.520852183 +0900 @@ -18,14 +18,14 @@ # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. -COPYRIGHT_HOLDER = Free Software Foundation, Inc.    +COPYRIGHT_HOLDER = Osamu Aoki <osamu@debian.org> # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. -PACKAGE_GNU = +PACKAGE_GNU = no # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: $ rm po/Makevars.template    Let’s update C sources for the i18n version by wrapping strings with _(…​). src/hello.c (i18n): ... hack, hack, hack, ... $ cat src/hello.c #include "config.h" #include <stdio.h> #include <sharedlib.h>    #include <libintl.h> #define _(string) gettext (string) int main() { printf(_("Hello, I am " PACKAGE_AUTHOR "!\n")); sharedlib(); return 0; } lib/sharedlib.c (i18n): ... hack, hack, hack, ... $ cat lib/sharedlib.c #include <stdio.h> #include <libintl.h>    #define _(string) gettext (string) int sharedlib() { printf(_("This is a shared library!\n")); return 0; }    The new gettext (v=0.19) can handle the i18n version of the desktop file directly. data/hello.desktop.in (i18n): $ fgrep -v '[ja]=' data/hello.desktop > data/hello.desktop.in $ rm data/hello.desktop $ cat data/hello.desktop.in [Desktop Entry]    Name=Hello Comment=Greetings Type=Application Keywords=hello Exec=hello Terminal=true Icon=hello.png Categories=Utility;    Приведём ÑпиÑок входных файлов Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð¿ÐµÑ€ÐµÐ²Ð¾Ð´Ð½Ñ‹Ñ… Ñтрок в po/POTFILES.in. po/POTFILES.in (i18n): ... hack, hack, hack, ...    $ cat po/POTFILES.in src/hello.c lib/sharedlib.c data/hello.desktop.in    Here is the updated root Makefile.am with po added to the SUBDIRS environment variable. Makefile.am (i18n): $ cat Makefile.am # recursively process `Makefile.am` in SUBDIRS    SUBDIRS = po lib src man ACLOCAL_AMFLAGS = -I m4 EXTRA_DIST = build-aux/config.rpath m4/ChangeLog    Let’s make a translation template file, debhello.pot. po/debhello.pot (i18n): $ xgettext -f po/POTFILES.in -d debhello -o po/debhello.pot -k_ $ cat po/debhello.pot # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-07-24 10:14+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n"    "Content-Transfer-Encoding: 8bit\n" #: src/hello.c:9 #, c-format msgid "Hello, I am " msgstr "" #: lib/sharedlib.c:7 #, c-format msgid "This is a shared library!\n" msgstr "" #: data/hello.desktop.in:3 msgid "Hello" msgstr "" #: data/hello.desktop.in:4 msgid "Greetings" msgstr "" #: data/hello.desktop.in:6 msgid "hello" msgstr ""    Let’s add a translation for French. po/LINGUAS и po/fr.po (i18n): $ echo 'fr' > po/LINGUAS $ cp po/debhello.pot po/fr.po $ vim po/fr.po ... hack, hack, hack, ... $ cat po/fr.po # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # msgid "" msgstr "" "Project-Id-Version: debhello 2.2\n" "Report-Msgid-Bugs-To: foo@example.org\n" "POT-Creation-Date: 2015-03-01 20:22+0900\n" "PO-Revision-Date: 2015-02-21 23:18+0900\n" "Last-Translator: Osamu Aoki <osamu@debian.org>\n" "Language-Team: French <LL@li.org>\n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n"    #: src/hello.c:34 #, c-format msgid "Hello, my name is %s!\n" msgstr "Bonjour, je m'appelle %s!\n" #: lib/sharedlib.c:29 #, c-format msgid "This is a shared library!\n" msgstr "Ceci est une bibliothèque partagée!\n" #: data/hello.desktop.in:3 msgid "Hello" msgstr "" #: data/hello.desktop.in:4 msgid "Greetings" msgstr "Salutations" #: data/hello.desktop.in:6 msgid "hello" msgstr "" #: data/hello.desktop.in:9 msgid "hello.png" msgstr "" Работа над подготовкой пакета практичеÑки полноÑтью Ñовпадает Ñ Â Â Â Ñ‚ÐµÐ¼, что опиÑываетÑÑ Ð² «Раздел 13.11, «Autotools (multi-binary package)»».    You can find more i18n examples by following «Раздел 13.14, «Детали»». 13.14. Детали    Детали предÑтавенных в документации примеров, а также их вариантов, можно получить Ñледующим образом. Как получить детали.    $ apt-get source debmake-doc $ cd debmake-doc* $ cd examples $ view examples/README.md    Follow the exact instruction in examples/README.md.    $ cd examples $ make    Now, each directory named as examples/debhello-?.?_build-? contains the Debian packaging example. * Ñмулированный журнал активноÑти командной Ñтроки конÑоли: файл .log * Ñмулированный журнал активноÑти командной Ñтроки конÑоли (короткий): файл .slog    * Ñрез образа дерева иÑходного кода поÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ debmake: каталог debmake * snapshot source tree image after proper packaging: the packge directory * Ñрез образа дерева иÑходного кода поÑле Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ‹ debuild: каталог test    Notable examples are: * the POSIX shell script with Makefile with i18n (v=3.0),    * the C source with Makefile.in + configure with i18n (v=3.2), * the C source with Autotools with i18n with i18n (v=3.3), and * the C source with CMake with i18n (v=3.4). Глава 14. Страница руководÑтва debmake(1) 14.1. ÐÐЗВÐÐИЕ    debmake - program to make a Debian source package 14.2. СИÐТÐКСИС debmake [-h] [-c | -k] [-n | -a package-version.orig.tar.gz | -d | -t ] [-p package] [-u version] [-r revision] [-z extension] [-b    "binarypackage[:type], …​]" [-e foo@example.org] [-f "firstname lastname"] [-i "buildtool" | -j] [-l license_file] [-m] [-o file] [-q] [-s] [-v] [-w "addon, …​"] [-x [01234]] [-y] [-L] [-P] [-T] 14.3. ОПИСÐÐИЕ    debmake помогает Ñобрать пакет Debian из иÑходного кода оÑновной ветки разработки. Обычно Ñто делаетÑÑ Ñледующим образом: * ЗагружаетÑÑ tar-архив оÑновной ветки разработки в виде файла пакет-верÑиÑ.tar.gz. * ИÑходный код раÑпаковываетÑÑ, ÑоздаютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ в каталоге пакет-верÑиÑ/. * ВызываетÑÑ debmake в каталоге пакет-верÑиÑ/, возможно, без    аргументов. * Файлы в каталоге package-version/debian/ наÑтраиваютÑÑ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ. * dpkg-buildpackage (usually from its wrapper debuild or sbuild ) is invoked in the package-version/ directory to make Debian packages. ОбÑзательно защитите путём ÑоответÑтвующего Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² кавычки    аргументы опций -b, -f, -l и -w от вмешательÑтва командной оболочки. 14.3.1. необÑзательные аргументы: -h, --help показать Ñправочное Ñообщение и выйти. -c, --copyright Ñканировать иÑходный код на предмет текÑта об авторÑком праве и лицензировании и выйти. o -c: проÑтой Ñтиль вывода o -cc: обычный Ñтиль вывода (Ñхож Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ debian/copyright ) o -ccc: отладочный Ñтиль вывода -k, --kludge Ñравнить файл debian/copyright Ñ Ð¸Ñходным кодом и выйти. Файл debian/copyright должен быть организован таким образом, что наиболее общие файловые шаблоны размещаютÑÑ Ñ€Ð°Ð½ÑŒÑˆÐµ конкретных иÑключений. o -k: проÑтой Ñтиль вывода o -kk: подробный Ñтиль вывода -n, --native make a native Debian source package without .orig.tar.gz. This makes a Debian source format «3.0 (native)» package. If you are thinking of packaging a Debian-specific source tree with debian/ in it into a native Debian package, please think otherwise. You can use the «debmake -d -i debuild» or « debmake -t -i debuild» commands to make a Debian non-native package using the Debian source format «3.0 (quilt)» The only difference is that the debian/changelog file must use the non-native version scheme: version-revision. The non-native package is more friendly to downstream distributions. -a пакет-верÑиÑ.tar.gz, --archive пакет-верÑиÑ.tar.gz иÑпользовать непоÑредÑтвенно tar-архив Ñ Ð¸Ñходным кодом оÑновной ветки. (отменÑÑŽÑ‚ÑÑ Ð¾Ð¿Ñ†Ð¸Ð¸ -p, -u, -z) The upstream tarball may be specified as package_version .orig.tar.gz and tar.gz. For other cases, it may be tar.bz2, or tar.xz. ЕÑли в имени указанного tar-архива оÑновной ветки ÑодержатÑÑ Ð±ÑƒÐºÐ²Ñ‹ в верхнем региÑтре, то в имени пакета Debian они будут преобразованы в буквы нижнего региÑтра. If the specified argument is the URL (http://, https://, or ftp://) to the upstream tarball, the upstream tarball is downloaded from the URL using wget or curl. -d, --dist run the «make dist» command equivalents first to generate the upstream tarball and use it. The «debmake -d» command is designed to run in the package/ directory hosting the upstream VCS with the build system supporting the «make dist» command equivalents. (automake/ autoconf, …​) -t, --tar run the «tar» command to generate the upstream tarball and use it. The «debmake -t» command is designed to run in the package/ directory hosting the upstream VCS. Unless you provide the upstream version with the -u option or with the debian/ changelog file, a snapshot upstream version is generated in the 0\~%y%m%d%H%M format, e.g., 0~1403012359, from the UTC date and time. The generated tarball excludes the debian/ directory found in the upstream VCS. (It also excludes typical VCS directories: .git/, .hg/, .svn/, .CVS/.) -p пакет, --package пакет уÑтановить Ð¸Ð¼Ñ Ð¿Ð°ÐºÐµÑ‚Ð° Debian. -u верÑиÑ, --upstreamversion верÑÐ¸Ñ ÑƒÑтановить верÑию пакета оÑновной ветки. -r редакциÑ, --revision Ñ€ÐµÐ´Ð°ÐºÑ†Ð¸Ñ ÑƒÑтановить номер редации пакета Debian. -z раÑширение, --targz раÑширение set the tarball type, extension=(tar.gz|tar.bz2|tar.xz). (alias: z, b, x) -b "binarypackage[:type],…​", --binaryspec "binarypackage [:type],…​" set the binary package specs by a comma separated list of binarypackage:type pairs. Here, binarypackage is the binary package name, and the optional type is chosen from the following type values: o bin: C/C++ compiled ELF binary code package (any, foreign) (default, alias: "", i.e., null-string) o data: Data (fonts, graphics, …​) package (all, foreign) (alias: da) o dev: пакет Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ разработки (any, same) (пÑевдоним: de) o doc: пакет документации (all, foreign) (пÑевдоним: do) o lib: пакет Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ (any, same) (пÑевдоним: l) o perl: пакет Ñо Ñценарием на Ñзыке Perl (all, foreign) (пÑевдоним: pl)    o python3: Python (version 3) script package (all, foreign) (alias: py3, python, py) o ruby: пакет Ñо Ñценарием на Ñзыке Ruby (all, foreign) (пÑевдоним: rb) o nodejs: Node.js based JavaScript package (all, foreign) (alias: js) o script: Shell and other interpretted language script package (all, foreign) (alias: sh) The pair values in the parentheses, such as (any, foreign), are the Architecture and Multi-Arch stanza values set in the debian/control file. In many cases, the debmake command makes good guesses for type from binarypackage. If type is not obvious, type is set to bin. Here are examples for typical binary package split scenarios where the upstream Debian source package name is foo: o Generating an executable binary package foo: # «-b’foo:bin'», or its short form `-b'-'`", or no -b option o Generating an executable (python3) binary package python3-foo: # «-b’python3-foo:py'», or its short form « -b’python3-foo'» o Generating a data package foo: # «-b’foo:data'», or its short form «-b'-:data'» o Generating a executable binary package foo and a documentation one foo-doc: # «-b’foo:bin,foo-doc:doc'», or its short form « -b'-:-doc'» o Generating a executable binary package foo, a library package libfoo1, and a library development package libfoo-dev: # «-b’foo:bin,libfoo1:lib,libfoo-dev:dev'» or its short form «-b'-,libfoo1,libfoo-dev'» ЕÑли Ñодержимое дерева иÑходного кода не Ñовпадает Ñ Ð½Ð°Ñтройками Ð¿Ð¾Ð»Ñ Ñ‚Ð¸Ð¿, то команда debmake выводит предупреждение. -e foo@example.org, --email foo@example.org уÑтановить Ð°Ð´Ñ€ÐµÑ Ñлектронной почты. По умолчанию берётÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ $DEBEMAIL. -f "Ð¸Ð¼Ñ Ñ„Ð°Ð¼Ð¸Ð»Ð¸Ñ", --fullname "Ð¸Ð¼Ñ Ñ„Ð°Ð¼Ð¸Ð»Ð¸Ñ" уÑтановить Ð¸Ð¼Ñ Ð¸ фамилию. По умолчанию берётÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ переменной Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ $DEBFULLNAME. -i "инÑтрументÑборки", --invoke "инÑтрументÑборки" invoke "buildtool" at the end of execution. buildtool may be «dpkg-buildpackage», «debuild», «sbuild», etc. По умолчанию Ð½Ð¸ÐºÐ°ÐºÐ°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° не выполнÑетÑÑ. Передача Ñтой опции автоматичеÑки приводит к передаче опции --local. -j, --judge запуÑтить dpkg-depcheck Ð´Ð»Ñ Ð²Ñ‹ÑÐ²Ð»ÐµÐ½Ð¸Ñ Ñборочных завиÑимоÑтей и Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑ‚ÐµÐ¹ файлов. Файлы журнала раÑполагаютÑÑ Ð² родительÑком каталоге. o package.build-dep.log: файл журнала dpkg-depcheck. o package.install.log: файл журнала, в который запиÑываютÑÑ Ñ„Ð°Ð¹Ð»Ñ‹ из каталога debian/tmp. -l "license_file,…​", --license "license_file,…​" add formatted license text to the end of the debian/copyright file holding license scan results. The default is to add COPYING and LICENSE, and license_file needs to list only the additional file names all separated by «,». -m, --monoarch подготовить пакеты без поддержки мультиархитектурноÑти. -o файл, --option файл read optional parameters from file. (This is not for everyday use.) The content of file is sourced as the Python code at the end of para.py. For example, the package description can be specified by the following file. para['desc'] = 'program short description' para['desc_long'] = '''\ program long description which you wish to include. . Empty line is space + . You keep going on ... ''' -q, --quitearly выйти до ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð¾Ð² в каталоге debian/. -s, --spec use upstream spec (pyproject.py for Python, etc.) for the package description. -v, --version показать информацию о верÑии. -w "addon,…​", --with "addon,…​" добавить дополнительные аргументы опции --with команды dh(1) в качеÑтве дополнений в файл debian/rules. The addon values are listed all separated by «,», e.g., «-w "python3,autoreconf"». For Autotools based packages, autoreconf as addon to run « autoreconf -i -v -f» for every package building is default behavior of the dh(1) command. For Autotools based packages, if they install Python (version 3) programs, setting python3 as addon to the debmake command argument is needed since this is non-obvious. But for pyproject.toml based Python packages, setting python3 as    addon to the debmake command argument is not needed since this is obvious and the debmake command automatically set it to the dh(1) command. -x n, --extra n generate configuration files as templates. (Please note debian/changelog, debian/control, debian/copyright, and debian/rules are bare minimum configuration files to build a Debian binary package.) The number n determines which configuration templates are generated. o -x0: all required configuration template files. (selected option if any of these files already exist) o -x1: all -x0 files + desirable configuration template files with binary package type supports. o -x2: all -x1 files + normal configuration template files with maintainer script supports. o -x3: all -x2 files + optional configuration template files. (default optuin) o -x4: all -x3 files + deprecated configuration template files. Some configuration template files are generated with the extra .ex suffix to ease their removal. To activate these, rename their file names to the ones without the .ex suffix and edit their    contents. Existing configuration files are never overwritten. If you wish to update some of the existing configuration files, please rename them before running the debmake command and manually merge the generated configuration files with the old renamed ones. -y, --yes «force yes» for all prompts. (without option: «ask [Y/n]»; doubled option: «force no») -L, --local Ñоздать файлы наÑтройки Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ пакета, чтобы    перехитрить проверки lintian(1). -P, --pedantic педантично проверÑÑ‚ÑŒ автоматичеÑки Ñоздаваемые файлы. -T, --tutorial output tutorial comment lines in template files. default when -x3 or -x4 is set. 14.4. ПРИМЕРЫ For a well behaving source, you can build a good-for-local-use installable single Debian binary package easily with one command. Test install of such a package generated in this way offers a good alternative to the traditional «make install» command    installing into the /usr/local directory since the Debian package can be removed cleanly by the «dpkg -P '…​'» command. Here are some examples of how to build such test packages. (These should work in most cases. If the -d option does not work, try the -t option instead.)    For a typical C program source tree packaged with autoconf/ automake:    * debmake -d -i debuild    For a typical Python (version 3) module source tree:    * debmake -s -d -b":python3" -i debuild    For a typical Python (version 3) module in the package-version .tar.gz archive:    * debmake -s -a package-version.tar.gz -b":python3" -i debuild Â Â Â Ð”Ð»Ñ Ð¾Ð±Ñ‹Ñ‡Ð½Ð¾Ð³Ð¾ Ð¼Ð¾Ð´ÑƒÐ»Ñ Ñзыка Perl в виде архива пакет-верÑиÑ.tar.gz:    * debmake -a package-version.tar.gz -b":perl" -i debuild 14.5. ВСПОМОГÐТЕЛЬÐЫЕ ПÐКЕТЫ Â Â Â Ð”Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ над пакетами может потребоватьÑÑ ÑƒÑтановка некоторых дополнительных Ñпециализированных вÑпомогательных пакетов. * Python (version 3) programs may require the pybuild-plugin-pyproject package. * The Autotools (autoconf + automake) build system may require autotools-dev or dh-autoreconf package. * Ruby programs may require the gem2deb package.    * Node.js based JavaScript programs may require the pkg-js-tools package. * Java programs may require the javahelper package. * Ð”Ð»Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼ Ð´Ð»Ñ Ð¾ÐºÑ€ÑƒÐ¶ÐµÐ½Ð¸Ñ Gnome может потребоватьÑÑ Ð¿Ð°ÐºÐµÑ‚ gobject-introspection. * и Ñ‚. д. 14.6. ПРЕДОСТЕРЕЖЕÐИЯ Although debmake is meant to provide template files for the package maintainer to work on, actual packaging activities are    often performed without using debmake while referencing only existing similar packages and «Debian Policy Manual». All template files generated by debmake are required to be modified manually.    There are 2 positive points for debmake: * debmake helps to write terse packaging tutorial «Guide for    Debian Maintainers» (debmake-doc package). * debmake provides short extracted license texts as debian/ copyright in decent accuracy to help license review.    Please double check copyright with the licensecheck(1) command. There are some limitations for what characters may be used as a    part of the Debian package. The most notable limitation is the prohibition of uppercase letters in the package name. Here is a summary as a set of regular expressions: * Upstream package name (-p): [-+.a-z0-9]{2,}    * Binary package name (-b): [-+.a-z0-9]{2,} * Upstream version (-u): [0-9][-+.:~a-z0-9A-Z]* * Debian revision (-r): [0-9][+.~a-z0-9A-Z]*    See the exact definition in «Chapter 5 - Control files and their fields» in the «Debian Policy Manual». debmake assumes relatively simple packaging cases. So all    programs related to the interpreter are assumed to be « Architecture: all». This is not always true. 14.7. ОТЛÐÐ”ÐšÐ Â Â Â Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ð± ошибках отправлÑйте Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды reportbug Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° debmake.    Ðабор Ñимволов в переменной окружении $DEBUG определÑет уровень вывода журнала. * i: main.py logging * p: para.py logging * s: checkdep5.py check_format_style() logging * y: checkdep5.py split_years_name() logging * b: checkdep5.py parse_lines() 1 logging — content_state scan loop: begin-loop * m: checkdep5.py parse_lines() 2 logging — content_state scan loop: after regex match * e: checkdep5.py parse_lines() 3 logging — content_state scan loop: end-loop * a: checkdep5.py parse_lines() 4 logging — print author/    translator section text * f: checkdep5.py check_all_license() 1 logging — input filename for the copyright scan * l: checkdep5.py check_all_license() 2 logging — print license section text * c: checkdep5.py check_all_license() 3 logging — print copyright section text * k: checkdep5.py check_all_license() 4 logging — sort key for debian/copyright stanza * r: sed.py logging * w: cat.py logging * n: kludge.py logging («debmake -k»)    Use this feature as:    $ DEBUG=ipsybmeaflckrwn debmake ...    See README.developer in the source for more. 14.8. ÐВТОР   Copyright © 2014-2024 Osamu Aoki <osamu@debian.org> 14.9. ЛИЦЕÐЗИЯ Â Â Â Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Expat 14.10. СМОТРИТЕ ТÐКЖЕ The debmake-doc package provides the «Guide for Debian    Maintainers» in plain text, HTML and PDF formats under the /usr/ share/doc/debmake-doc/ directory. See also dpkg-source(1), deb-control(5), debhelper(7), dh(1),    dpkg-buildpackage(1), debuild(1), quilt(1), dpkg-depcheck(1), sbuild(1), gbp-buildpackage(1), and gbp-pq(1) manpages. Глава 15. debmake options    Here are some additional explantion for debmake options. 15.1. Shortcut options (-a, -i)    Команда debmake предлагает 2 опции Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð±Ñ‹Ñтрых дейÑтвий.    * -a : открыть tar-архив оÑновной ветки * -i : выполнить Ñценарий Ð´Ð»Ñ Ñборки двоичного пакета    ДейÑÑ‚Ð²Ð¸Ñ Ð¸Ð· примера, приведённого выше в «Глава 5, Simple packaging», можно выполнить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñледующей проÑтой команды.    $ debmake -a package-1.0.tar.gz -i debuild ПодÑказка    A URL such as «https://www.example.org/DL/package-1.0.tar.gz» may be used for the -a option. ПодÑказка    A URL such as «https://arm.koji.fedoraproject.org/packages/ibus/ 1.5.7/3.fc21/src/ibus-1.5.7-3.fc21.src.rpm» may be used for the -a option, too. 15.2. debmake -b The debmake command with the -b option provides an intuitive and    flexible method to create the initial template debian/control file defining the split of the Debian binary packages with following stanzas: * Package: * Architecture: (e.g. amd64)    * Multi-Arch: (see «Раздел 9.10, «Multiarch»») * Depends: * Pre-Depends:    The debmake command also sets an appropriate set of substvars used in each pertinent dependency stanza.    Ðиже приводитÑÑ Ñ†Ð¸Ñ‚Ð°Ñ‚Ð° ÑоответÑтвующей чаÑти Ñтраницы руководÑтва debmake. -b "binarypackage[:type],…​", --binaryspec "binarypackage [:type],…​" set the binary package specs by a comma separated list of binarypackage:type pairs. Here, binarypackage is the binary package name, and the optional type is chosen from the following type values: o bin: C/C++ compiled ELF binary code package (any, foreign) (default, alias: "", i.e., null-string) o data: Data (fonts, graphics, …​) package (all, foreign) (alias: da) o dev: пакет Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ разработки (any, same) (пÑевдоним: de) o doc: пакет документации (all, foreign) (пÑевдоним: do) o lib: пакет Ñ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñ‚ÐµÐºÐ¾Ð¹ (any, same) (пÑевдоним: l) o perl: пакет Ñо Ñценарием на Ñзыке Perl (all, foreign) (пÑевдоним: pl) o python3: Python (version 3) script package (all, foreign) (alias: py3, python, py) o ruby: пакет Ñо Ñценарием на Ñзыке Ruby (all, foreign) (пÑевдоним: rb) o nodejs: Node.js based JavaScript package (all, foreign) (alias: js) o script: Shell and other interpretted language script package (all, foreign) (alias: sh) The pair values in the parentheses, such as (any, foreign), are the Architecture and Multi-Arch stanza values set in the debian/control file. In many cases, the debmake command makes good guesses for type from binarypackage. If type is not    obvious, type is set to bin. Here are examples for typical binary package split scenarios where the upstream Debian source package name is foo: o Generating an executable binary package foo: # «-b’foo:bin'», or its short form `-b'-'`", or no -b option o Generating an executable (python3) binary package python3-foo: # «-b’python3-foo:py'», or its short form « -b’python3-foo'» o Generating a data package foo: # «-b’foo:data'», or its short form «-b'-:data'» o Generating a executable binary package foo and a documentation one foo-doc: # «-b’foo:bin,foo-doc:doc'», or its short form « -b'-:-doc'» o Generating a executable binary package foo, a library package libfoo1, and a library development package libfoo-dev: # «-b’foo:bin,libfoo1:lib,libfoo-dev:dev'» or its short form «-b'-,libfoo1,libfoo-dev'» ЕÑли Ñодержимое дерева иÑходного кода не Ñовпадает Ñ Ð½Ð°Ñтройками Ð¿Ð¾Ð»Ñ Ñ‚Ð¸Ð¿, то команда debmake выводит предупреждение. 15.3. debmake -cc The debmake command with the -cc option can make a summary of the    copyright and license for the entire source tree to standard output. $ tar -xvzf package-1.0.tar.gz    $ cd package-1.0 $ debmake -cc | less Â Â Â ÐžÐ¿Ñ†Ð¸Ñ -c позволÑет получить более краткий отчёт. 15.4. Snapshot upstream tarball (-d, -t) This test building scheme is good for the git repository    organized as described in gbp-buildpackage(7) which uses the master, upstream, and pristine-tar branches. The upstream snapshot from the upstream source tree in the    upstream VCS can be made with the -d option if the upstream supports the «make dist» equivalence.    $ cd /path/to/upstream-vcs $ debmake -d -i debuild С другой Ñтороны, то же Ñамое можно Ñделать Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ опции -t в    том Ñлучае, еÑли Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды tar можно Ñоздать tar-архив оÑновной ветки.    $ cd /path/to/upstream-vcs $ debmake -p package -t -i debuild Unless you provide the upstream version with the -u option or    with the debian/changelog file, a snapshot upstream version is generated in the 0~%y%m%d%H%M format, e.g., 0~1403012359, from the UTC date and time.    If the upstream VCS is hosted in the package/ directory instead of the upstream-vcs/ directory, the «-p package» can be skipped. If the upstream source tree in the VCS contains the debian/* files, the debmake command with either the -d option or the -t    option combined with the -i option automates the making of a non-native Debian package from the VCS snapshot while using these debian/* files. $ cp -r /path/to/package-0~1403012359/debian/. /path/to/upstream-vcs/debian $ dch    ... update debian/changelog $ git add -A .; git commit -m "vcs with debian/*" $ debmake -t -p package -i debuild This non-native Debian binary package building scheme without the    real upstream tarball is considered as the quasi-native Debian package. See «Раздел 10.13, «Quasi-native Debian packaging»». 15.5. debmake -j    This is an experimental feature. The generation of a functioning multi-binary package always    requires more manual work than that of a functioning single binary package. The test build of the source package is the essential part of it. Ðапример, Ñоздадим пакет из того же архива package-1.0.tar.gz    (Ñм. «Глава 5, Simple packaging») Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ набора из неÑкольких двоичных пакетов. * ЗапуÑтите команду debmake Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ -j Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ‚ÐµÑтовой Ñборки и ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ñ‚Ñ‡Ñ‘Ñ‚Ð°. $ debmake -j -a package-1.0.tar.gz * Check the last lines of the package.build-dep.log file to judge build dependencies for Build-Depends. (You do not need to list packages used by debhelper, perl, or fakeroot explicitly in Build-Depends. This technique is useful for the generation of a single binary package, too.) * Проверьте Ñодержимое файла пакет.install.log Ð´Ð»Ñ Ð¾Ð¿Ñ€ÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑƒÑ‚ÐµÐ¹ уÑтановки файлов, чтобы решить, как разделить Ñти файлы на неÑколько пакетов. * Ðачните работу над пакетом Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ команды debmake.    $ rm -rf package-1.0 $ tar -xvzf package-1.0.tar.gz $ cd package-1.0 $ debmake -b"package1:type1, ..." * Обновите файлы debian/control и debian/двоичныйпакет.install, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½ÑƒÑŽ выше информацию. * При необходимоÑти обновите другие файлы debian/*. * Build the Debian package with the debuild command or its equivalent. $ debuild * All binary package entries specified in the debian/ binarypackage.install file are generated as binarypackage_version-revision_arch.deb. Примечание The -j option for the debmake command invokes dpkg-depcheck(1) to run debian/rules under strace(1) to obtain library dependencies.    Unfortunately, this is very slow. If you know the library package dependencies from other sources such as the SPEC file in the source, you may just run the "debmake …​" command without the -j option and run the «debian/rules install» command to check the install paths of the generated files. 15.6. debmake -k    This is an experimental feature. При обновлении пакета до нового выпуÑка оÑновной ветки команда debmake может проверить Ñодержимое ÑущеÑтвующего файла debian/    copyright и Ñравнить его Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸ÐµÐ¹ об авторÑких правах и лицензировании Ð´Ð»Ñ Ð²Ñего обновлённого дерева иÑходного кода целиком. $ cd package-vcs    $ gbp import-orig --uscan --pristine-tar ... update source with the new upstream release $ debmake -k | less The «debmake -k» command parses the debian/copyright file from the top to the bottom and compares the license of all the    non-binary files in the current package with the license described in the last matching file pattern entry of the debian/ copyright file. При редактировании автоматичеÑки Ñозданного файла debian/    copyright убедитеÑÑŒ, что наиболее общие шаблоны файлов помещены в верхней чаÑти ÑпиÑка. ПодÑказка    For all new upstream releases, run the «debmake -k» command to ensure that the debian/copyright file is current. 15.7. debmake -P Команда debmake, Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ð°Ñ Ñ Ð¾Ð¿Ñ†Ð¸ÐµÐ¹ -P, педантично проверÑет    Ñоздаваемые автоматичеÑки файлы на предмет Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñ‚ÐµÐºÑта об автоÑких правах и лицензировании, даже еÑли они подпадают под дейÑтвие разрешительной лицензии. This option affects not only the content of the debian/copyright    file generated by normal execution, but also the output by the execution with the -k, -c, -cc, and -ccc options. 15.8. debmake -T The debmake command invoked with the -T option additionally    prints verbose tutorial comment lines. The lines marked with ### in the template files are part of the verbose tutorial comment lines. 15.9. debmake -x    КоличеÑтво шаблонных файлов, Ñоздаваемых командой debmake завиÑит от опции -x[01234].    * See «Раздел 13.1, «Выборочное применение шаблонов»» for cherry-picking of the template files. Примечание    Команда debmake не менÑет ни один из ÑущеÑтвующих файлов наÑтройки.