Difference between revisions of "Debian package structure/ru"

From Lazarus wiki
Jump to navigationJump to search
(Deleted English categories.)
 
(15 intermediate revisions by one other user not shown)
Line 60: Line 60:
 
  rm -rf "${STAGING_DIR}"
 
  rm -rf "${STAGING_DIR}"
  
=== Checking the archive ===
+
=== Проверка архива ===
  
Once you've created the package, you can check it follows the guidelines with the command '''lintian''':
+
После того, как вы создали пакет, вы можете проверить, что он соответствует рекомендациям с помощью команды '''lintian''':
 
  lintian "${PACKAGE_NAME}.deb" --info
 
  lintian "${PACKAGE_NAME}.deb" --info
  
Here is the list of potential problems: https://lintian.debian.org/tags.html
+
Здесь приведен список возможных проблем: https://lintian.debian.org/tags.html
  
With Lazarus, you will get by default the <tt>hardening-no-pie</tt> (and <tt>hardening-no-bindnow</tt> warnings in mentors). To avoid such warnings, add the following compiler options in the project options:
+
В Lazarus Вы по умолчанию получите предупреждения <tt>hardening-no-pie</tt> (и <tt>hardening-no-windnow</tt>). Чтобы избежать такие предупреждений добавьте следующие параметры компилятора в параметры проекта:
 
  -Cg
 
  -Cg
 
  -k-pie
 
  -k-pie
 
  -k-znow
 
  -k-znow
  
== Directory structure ==
+
== Структура папок ==
  
Here is the structure of the staging directory that you need to prepare.
+
Ниже приведена структура промежуточного каталога, который вам необходимо подготовить.
  
  staging
+
  staging (промежуточный каталог)
 
   ├─ DEBIAN
 
   ├─ DEBIAN
 
   └─ usr
 
   └─ usr
 
       ├─ bin
 
       ├─ bin
 
       └─ share
 
       └─ share
           ├─ project1      #resources of your package
+
           ├─ project1      #ресурсы для Вашего пакета
           ├─ applications  #shortcut
+
           ├─ applications  #ярлыки
           ├─ pixmaps        #default icon
+
           ├─ pixmaps        #значок по умолчанию
 
           ├─ icons
 
           ├─ icons
           │  └─ hicolor    #icons of various sizes
+
           │  └─ hicolor    #значки различных размеров
 
           ├─ doc
 
           ├─ doc
           │  └─ project1  #information about your package
+
           │  └─ project1  #информация о Вашем пакете
           └─ man            #user manual
+
           └─ man            #руководство пользователя
               └─ man1      #index
+
               └─ man1      #оглавление
  
=== DEBIAN directory ===
+
=== Папка DEBIAN ===
  
The name of this directory is uppercase. It needs to contain one file called '''control'''. Here is an example for a package called '''project1''' at version 2.0.
+
Имя этого каталога указано в верхнем регистре. Он должен содержать один файл под названием '''control'''. Ниже пример пакета под названием '''project1''' в версии 2.0.
  
 
  Section: graphics
 
  Section: graphics
Line 103: Line 103:
 
  Version: 2.0
 
  Version: 2.0
 
  Depends: libatk1.0-0 (>= 1.12.4), libc6 (>= 2.2.5), libcairo2 (>= 1.2.4), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.24.0), libpango-1.0-0 (>= 1.18.0), libx11-6
 
  Depends: libatk1.0-0 (>= 1.12.4), libc6 (>= 2.2.5), libcairo2 (>= 1.2.4), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.24.0), libpango-1.0-0 (>= 1.18.0), libx11-6
  Description: This is a test project.
+
  Description: Это тестовый проект.
   Long description blah blah blah.
+
   Длинное описание бла-бла-бла.
  
Sample values for '''Section''': comm, database, devel, editors, electronics, fonts, games, graphics, math, web, net, news, science, sound, utils, video.
+
Примеры значений для поля '''Section''': comm, database, devel, editors, electronics, fonts, games, graphics, math, web, net, news, science, sound, utils, video.
  
The '''Architecture''' field is the one used to compile the program. To know the current architecture, use the following command:
+
Поле '''Architecture''' используется для компиляции программы. Чтобы узнать текущую архитектуру, используйте следующую команду:
 
  dpkg --print-architecture
 
  dpkg --print-architecture
  
The '''Depends''' field contains the list of Linux libraries used. You can get this list with the following commands run in the directory of your binary file:
+
Поле '''Depends''' содержит список используемых Linux библиотек. Вы можете получить этот список с помощью следующих команд, выполняемых в папке вашего бинарного файла:
  mkdir debian                #need a debian directory
+
  mkdir debian                #требуется папка debian
  touch debian/control        #with one control file in it
+
  touch debian/control        #с одним файлом control в нем
  dpkg-shlibdeps -O project1  #supposing your binary is called project1
+
  dpkg-shlibdeps -O project1  #предполагается, что ваш бинарный файл называется project1
  
You can then remove the almost empty ''debian'' folder if you don't use it.
+
Затем вы можете удалить почти пустую папку ''debian'', если вы ее не используете.
  
This will output the dependencies (after the equal sign):
+
Все это выведет зависимости (после знака равенства):
 
  shlibs:Depends=libatk1.0-0 (>= 1.12.4), libc6 (>= 2.2.5), libcairo2 (>= 1.2.4), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.24.0), libpango-1.0-0 (>= 1.18.0), libx11-6
 
  shlibs:Depends=libatk1.0-0 (>= 1.12.4), libc6 (>= 2.2.5), libcairo2 (>= 1.2.4), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.24.0), libpango-1.0-0 (>= 1.18.0), libx11-6
  
To be complete, it should be noted that all these packages are not absolutely necessary, because several packages on this list may already be part of the dependencies - and therefore be part of the installation - of another package listed in this same list (see [https://wiki.freepascal.org/Deploying_Your_Application#Tip%3A]to cross-check, and eliminate superfluous dependencies).
+
Для полноты следует отметить, что все эти пакеты не являются абсолютно необходимыми, поскольку несколько пакетов в этом списке уже могут быть частью зависимостей - и, следовательно, частью установки - другого пакета, указанного в этом же списке (см. [https://wiki.freepascal.org/Deploying_Your_Application#Tip%3A] для перекрестной проверки и устранения лишних зависимостей).
  
=== usr/bin directory ===
+
=== Папка usr/bin===
  
This directory contains the binary file and only this file (''for information, avoid underscore in the name of your project - for example, dpkg-deb refuses it - because the package name should follow this regex: ${PackageName}_${Version}_${Arch}.deb, e.g. dpkg-dev_1.19.0.5ubuntu2_all.deb''). All resources files need to go in ''usr/share/project1''. To access resources, your program can use a relative path like ''../share/project1''.
+
Эта папка содержит бинарный файл и только его (''для информации: избегайте символа подчеркивания в имени Вашего проекта - для примера, dpkg-deb избегает этого - потому что имя пакета должно удовлетворять регулярному выражению: ${PackageName}_${Version}_${Arch}.deb, e.g. dpkg-dev_1.19.0.5ubuntu2_all.deb''). Все ресурсные файлы должны быть помещены в ''usr/share/project1''. Для доступа к ресурсам Ваша программа может использовать относительный путь наподобии ''../share/project1''.
  
The directory ''usr/local/bin'' is invalid in a package[https://lintian.debian.org/tags/file-in-usr-local.html] because ''local'' is used for projects compiled locally and installed using their Makefile.
+
Папка ''usr/local/bin'' недопустима в пакете [https://lintian.debian.org/tags/file-in-usr-local.html] потому что ''local'' используется проектами, компилируемыми локально и установленные с помощью их Makefile.
  
=== Resources directory ===
+
=== Папка ресурсов ===
  
It will be called ''usr/share/project1'' if the package name is "project1".<br>
+
Она будет называться ''usr/share/project1'', если имя пакета "project1".<br>
You can put here all the data files needed by your program. Note that they will be read-only.  
+
Вы можете разместить там все файлы данных, нужные Вашей программе. Обращаем внимание, что они будут "только для чтения".
  
=== Configuration directory ===
+
=== Папка конфигурации ===
  
There are other places to store [[Multiplatform_Programming_Guide#Configuration_files|configuration files]]. Configuration files should be originally created by the application itself (with default values), if they do not exist when the application starts.
+
Существуют разные места для размещения [[Multiplatform_Programming_Guide/ru#.D0.9A.D0.BE.D0.BD.D1.84.D0.B8.D0.B3.D1.83.D1.80.D0.B0.D1.86.D0.B8.D0.BE.D0.BD.D0.BD.D1.8B.D0.B5_.D1.84.D0.B0.D0.B9.D0.BB.D1.8B|конфигурационных файлов]]. Конфигурационные файлы (или файлы настроек) должны быть изначально созданы самим приложением (значениями по умолчанию), если их не существует в момент старта приложения.
  
=== usr/share/applications directory ===
+
=== Папка usr/share/applications ===
  
To add your application to the Linux menu, you need to add a file called '''project1.desktop''' containing:
+
Чтобы добавить Ваше приложение в меню Linux, Вы должны добавить файл '''project1.desktop''', содержащий:
 
  [Desktop Entry]
 
  [Desktop Entry]
 
  Name=Project1
 
  Name=Project1
Line 152: Line 152:
 
  Keywords=feature1; feature2; feature3
 
  Keywords=feature1; feature2; feature3
  
This file is similar to a shortcut to your program.
+
Этот файл напоминает "ярлык" для Вашей программы.
  
The '''Categories''' field is similar to the one in the '''control''' file. It can be for example: Communication, Database, Development, Editors, Electronics, Fonts, Games, Graphics, Math, Internet, Networking, News, Science, Sound, Utility, Video.
+
Поле '''Categories''' как такое же в файле '''control'''. Это может быть для примера: Communication, Database, Development, Editors, Electronics, Fonts, Games, Graphics, Math, Internet, Networking, News, Science, Sound, Utility, Video.
  
The keywords help search through applications.
+
Поле keywords помогает в поиске в приложениях.
  
Note that you need to provide the icon as a PNG file, either in the directory ''usr/share/pixmaps'' or in ''usr/share/icons/hicolor''.
+
Обратите внимание, что вам необходимо предоставить значок в виде файла PNG либо в каталоге ''usr/share/pixmaps'' либо в ''usr/share/icons/hicolor''.
  
==== usr/share/pixmaps directory ====
+
==== Папка usr/share/pixmaps ====
  
Will contain the single-size icon of your menu shortcut in PNG format called '''project1.png'''. A medium size like 48x48 will be fine.
+
Будет содержать значок одного размера для ярлыка вашего меню в формате PNG под названием '''project1.png'''. Среднего размера, такого как 48x48, будет вполне достаточно.
  
==== usr/share/icons/hicolor directory ====
+
==== Папка usr/share/icons/hicolor ====
  
Will contain the multi-size icon. Here is the directory structure:
+
Будет содержать значок нескольких размеров. Вот структура каталогов:
  
 
  icons
 
  icons
Line 176: Line 176:
 
       ...
 
       ...
  
There is a subdirectory for each possible size. You can display all the sizes currently defined on your system by writing:
+
Существует подкаталог для каждого возможного размера. Вы можете отобразить все размеры, определенные в настоящее время в вашей системе, написав:
 
  ls /usr/share/icons/hicolor
 
  ls /usr/share/icons/hicolor
  
In each apps folder, put an image with always the same name. If you project is called project1 then it will be called '''project1.png''' for most folders. In the scalable and symbolic folders you can put an SVG file.
+
В каждую папку приложений поместите изображение со всегда одним и тем же именем. Если ваш проект называется project1, то для большинства папок он будет называться "project1.png". В масштабируемые и символические папки вы можете поместить SVG-файл.
  
=== Documentation directory ===
+
=== Папка документации ===
 +
Она будет называться ''usr/share/doc/project1'', если имя пакета будет "project1".
  
It will be called ''usr/share/doc/project1'' if your the package name is "project1".
+
Папка содержит файлы '''changelog.Debian.gz''' и '''copyright'''  и (необязательно) файл '''README'''.
  
The folder contains the '''changelog.gz''' and '''copyright''' files and optionally the '''README''' file.
+
==== Файл журнала изменений ====
  
==== changelog file ====
+
Минимальный файл журнала изменений (changelog):
 
 
The minimum changelog would be:
 
  
 
  project1 (1.0) unstable; urgency=low
 
  project1 (1.0) unstable; urgency=low
 
   
 
   
   * Initial release
+
   * Первый релиз
 
   
 
   
 
   -- myname <myname@webserver.com>  Tue, 19 May 2020 11:06:00 +0100
 
   -- myname <myname@webserver.com>  Tue, 19 May 2020 11:06:00 +0100
  
You can add many lines starting with * to indicate the list of changes in the version. The spaces at the beginning of the line are necessary. Only the line indicating the version starts directly at the beginning of the line.
+
Вы можете добавить множество строк, начинающихся с *, чтобы указать список изменений в версии. Пробелы в начале строки необходимы. Только строка, указывающая версию, начинается непосредственно в начале строки.
  
The latest version must be at the top of the file.
+
Последняя версия должна быть в верхней части файла.
  
The changelog must be compressed with maximum compression. To do that, supposing you already have the uncompressed '''changelog''' file, compress it with the following command:
+
Список изменений должен быть сжат с максимальной степенью. Для этого, предполагая что у вас уже есть несжатый файл '''changelog''', сожмите его с помощью следующей команды:
  gzip -9 -n usr/share/doc/project1/changelog
+
  gzip -9 -n usr/share/doc/project1/changelog.Debian
  
The -9 -n options are necessary for the package to follow the guidelines.
+
Флаги -9 -n необходимы, чтобы пакета соответствовал инструкциям.
  
==== copyright file ====
+
==== Файл copyright ====
  
If you provide the Deb package yourself, it is not mandatory to use the machine-readable format, however it will prepare you for publishing the package in Debian distributions. See: [[Debian package source#copyright|copyright in Debian package structure]].
+
Если вы предоставляете пакет Deb самостоятельно, необязательно использовать машиночитаемый формат, однако это подготовит вас к публикации пакета в дистрибутивах Debian. См.: [[Debian package source#copyright|copyright in Debian package structure]].
  
=== usr/share/man directory ===
+
=== Папка usr/share/man ===
  
Contains the user manual that you can view with the '''man''' command. It must contain at least '''project1.1.gz''' in the ''man1'' subdirectory, which will be the index page of your manual.
+
Содержит руководство пользователя, которое вы можете просмотреть с помощью команды '''man'''. Он должен содержать по крайней мере '''project1.1.gz''' в подкаталоге ''man1'', который будет индексной страницей вашего руководства.
  
The syntax is a bit peculiar. There are some tools to help but you still need to know the syntax.
+
Синтаксис немного своеобразен. Есть некоторые инструменты, которые могут помочь, но вам все равно нужно знать синтаксис.
* description of the syntax: https://liw.fi/manpages/
+
* описание синтаксиса: https://liw.fi/manpages/
* editor with wizard and WYSIWYG preview mode: '''gmanedit'''
+
* редактор с мастером и режимом предварительного просмотра WYSIWYG: '''gmanedit'''
* live preview editor (toggle to AN mode): https://roperzh.github.io/grapse/
+
* онлайн редактор с предварительным просмотром (переключитесь в режим AN): https://roperzh.github.io/grapse/
  
Here is a sample file:
+
Вот пример файла:
 
  .TH Project1 1 "19 May 2020" "" Project1
 
  .TH Project1 1 "19 May 2020" "" Project1
 
  .SH NAME
 
  .SH NAME
Line 231: Line 230:
 
  More description.
 
  More description.
  
The manual, like the changelog, must be compressed using the following command:
+
Это руководство как и файл журнала изменений, должен быть сжат командой:
 
  gzip -9 -n usr/share/man/man1/project1.1
 
  gzip -9 -n usr/share/man/man1/project1.1
  
The -9 -n options are necessary for the package to follow the guidelines.
+
Флаги -9 -n необходимы, чтобы пакет соответствовал инструкциям.
 
 
[[Category:FPC]]
 
[[Category:Lazarus]]
 
[[Category:Linux]]
 
[[Category:Install]]
 
[[Category:Deployment]]
 

Latest revision as of 19:39, 2 January 2022

English (en) русский (ru)

Установки в Debian выполняются файлами с расширением .deb. В этой статье рассматривается, как создать их вручную.

Если вы хотите разместить свою программу в дистрибутивы Debian, см. раздел как создать исходный код для Debian upstream.

Основной раздел

Два типа пакетов

Существует два типа пакетов: пакеты исходных кодов и бинарный пакет. В этой статье будет вестись речь о бинарных пакетах. Бинарные пакеты представляют удобный способ консолидации предварительно скомпилированных бинарных файлов, готовых для предоставлению непосредственно конечному пользователю. Однако дистрибутивы наподобии Debian или Ubuntu не смогут принять бинарные пакеты в свои репозитарии, они требуют Debian-пакеты исходных кодов (source package), которые могут использоваться для сборки бинарных версий в случае необходимости. Пакеты исходных кодов Debian (source package) несколько сложнее собрать и подчиняется ряду технических и юридических правил, прежде чем могут быть приняты в большинстве дистрибутивов Linux.

Подготовка пакетов

В бинарном пакете Debian файлы установки сжимаются с использованием команды dpkg-deb. Вы можете увидеть содержимое сформированных .deb файлов также как и любых других упакованных архивов, нажав правую кнопку мыши на них и открывая их в менеджере архивов (т.е. в обычном архиваторе).

Чтобы сделать .deb файл, Вам следует подготовить структуру папок с соответствующими файлами. Это будет называться промежуточной папкой и выражено в этой статье переменной ${STAGING_DIR}. Вы можете заменить его подходящей папкой или определить эту переменную в скрипте.

Вы можете для примера создать эту промежуточную папку как поддиректорию текущей папки. Простейший скрипт будет таким:

STAGING_DIR=./staging
mkdir ${STAGING_DIR}

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

cd `dirname $0`
STAGING_RELATIVEDIR="./staging"
STAGING_DIR=$(readlink --canonicalize "${STAGING_RELATIVEDIR}")

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

rm -rf "${STAGING_DIR}"
mkdir "${STAGING_DIR}"

Содержимое этой папки раскрывается далее в этой статье

Промежуточная папка. Завершение

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

Папки и файлы в этом архиве предполагаются только для чтения (ReadOnly). Чтобы убедиться в этом Вы можете перед вызовом dpkg-deb сделать нижеследующее:

find "${STAGING_DIR}" -type d -exec chmod 0755 {} \;  #установить атрибуты папок
find "${STAGING_DIR}" -type f -exec chmod 0644 {} \;  #установить атрибуты файлов
find "${STAGING_DIR}/usr/bin" -type f -exec chmod 0755 {} \;  #установить атрибуты для исполняемых файлов

Когда у Вас будут собраны все нужные файлы в промежуточной папке, Вы можете определить установочный размер и добавить его в файл control:

SIZE_IN_KB="$(du -s ${STAGING_DIR} | awk '{print $1;}')"
echo "Installed-Size: ${SIZE_IN_KB}" >> "${STAGING_DIR}/DEBIAN/control"

Создание Deb архива

Как только структура папок будет готова Вы можете создать архив с помощью:

dpkg-deb --root-owner-group --build "${STAGING_DIR}" "${PACKAGE_NAME}.deb"

Или для более старых версий dpkg-deb:

fakeroot dpkg-deb --build "${STAGING_DIR}" "${PACKAGE_NAME}.deb"

${STAGING_DIR} это путь к структуре папок для сжатия. ${PACKAGE_NAME} это имя файла, которое будет использоваться для архива.

Как правило Вы создаете архив под обычным пользователем, а не с root аккаунта. Но установочные файлы должны принадлежать определенному пользователю. Используя флаг --root-owner-group или префикс fakeroot Вы сохраните в архиве информацию о принадлежности файлов root пользователю.

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

rm -rf "${STAGING_DIR}"

Проверка архива

После того, как вы создали пакет, вы можете проверить, что он соответствует рекомендациям с помощью команды lintian:

lintian "${PACKAGE_NAME}.deb" --info

Здесь приведен список возможных проблем: https://lintian.debian.org/tags.html

В Lazarus Вы по умолчанию получите предупреждения hardening-no-piehardening-no-windnow). Чтобы избежать такие предупреждений добавьте следующие параметры компилятора в параметры проекта:

-Cg
-k-pie
-k-znow

Структура папок

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

staging (промежуточный каталог)
  ├─ DEBIAN
  └─ usr
      ├─ bin
      └─ share
          ├─ project1       #ресурсы для Вашего пакета
          ├─ applications   #ярлыки
          ├─ pixmaps        #значок по умолчанию
          ├─ icons
          │   └─ hicolor    #значки различных размеров
          ├─ doc
          │   └─ project1   #информация о Вашем пакете
          └─ man            #руководство пользователя
              └─ man1       #оглавление

Папка DEBIAN

Имя этого каталога указано в верхнем регистре. Он должен содержать один файл под названием control. Ниже пример пакета под названием project1 в версии 2.0.

Section: graphics
Priority: optional
Maintainer: myname <myname@webserver.com>
Homepage: https://www.project1.com
Package: project1
Architecture: amd64
Version: 2.0
Depends: libatk1.0-0 (>= 1.12.4), libc6 (>= 2.2.5), libcairo2 (>= 1.2.4), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.24.0), libpango-1.0-0 (>= 1.18.0), libx11-6
Description: Это тестовый проект.
 Длинное описание бла-бла-бла.

Примеры значений для поля Section: comm, database, devel, editors, electronics, fonts, games, graphics, math, web, net, news, science, sound, utils, video.

Поле Architecture используется для компиляции программы. Чтобы узнать текущую архитектуру, используйте следующую команду:

dpkg --print-architecture

Поле Depends содержит список используемых Linux библиотек. Вы можете получить этот список с помощью следующих команд, выполняемых в папке вашего бинарного файла:

mkdir debian                 #требуется папка debian
touch debian/control         #с одним файлом control в нем
dpkg-shlibdeps -O project1   #предполагается, что ваш бинарный файл называется project1

Затем вы можете удалить почти пустую папку debian, если вы ее не используете.

Все это выведет зависимости (после знака равенства):

shlibs:Depends=libatk1.0-0 (>= 1.12.4), libc6 (>= 2.2.5), libcairo2 (>= 1.2.4), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.24.0), libpango-1.0-0 (>= 1.18.0), libx11-6

Для полноты следует отметить, что все эти пакеты не являются абсолютно необходимыми, поскольку несколько пакетов в этом списке уже могут быть частью зависимостей - и, следовательно, частью установки - другого пакета, указанного в этом же списке (см. [1] для перекрестной проверки и устранения лишних зависимостей).

Папка usr/bin

Эта папка содержит бинарный файл и только его (для информации: избегайте символа подчеркивания в имени Вашего проекта - для примера, dpkg-deb избегает этого - потому что имя пакета должно удовлетворять регулярному выражению: ${PackageName}_${Version}_${Arch}.deb, e.g. dpkg-dev_1.19.0.5ubuntu2_all.deb). Все ресурсные файлы должны быть помещены в usr/share/project1. Для доступа к ресурсам Ваша программа может использовать относительный путь наподобии ../share/project1.

Папка usr/local/bin недопустима в пакете [2] потому что local используется проектами, компилируемыми локально и установленные с помощью их Makefile.

Папка ресурсов

Она будет называться usr/share/project1, если имя пакета "project1".
Вы можете разместить там все файлы данных, нужные Вашей программе. Обращаем внимание, что они будут "только для чтения".

Папка конфигурации

Существуют разные места для размещения конфигурационных файлов. Конфигурационные файлы (или файлы настроек) должны быть изначально созданы самим приложением (значениями по умолчанию), если их не существует в момент старта приложения.

Папка usr/share/applications

Чтобы добавить Ваше приложение в меню Linux, Вы должны добавить файл project1.desktop, содержащий:

[Desktop Entry]
Name=Project1
Comment=Cool project
Icon=project1
Exec=project1
Terminal=false
Type=Application
Categories=Graphics
GenericName=Project1
Keywords=feature1; feature2; feature3

Этот файл напоминает "ярлык" для Вашей программы.

Поле Categories как такое же в файле control. Это может быть для примера: Communication, Database, Development, Editors, Electronics, Fonts, Games, Graphics, Math, Internet, Networking, News, Science, Sound, Utility, Video.

Поле keywords помогает в поиске в приложениях.

Обратите внимание, что вам необходимо предоставить значок в виде файла PNG либо в каталоге usr/share/pixmaps либо в usr/share/icons/hicolor.

Папка usr/share/pixmaps

Будет содержать значок одного размера для ярлыка вашего меню в формате PNG под названием project1.png. Среднего размера, такого как 48x48, будет вполне достаточно.

Папка usr/share/icons/hicolor

Будет содержать значок нескольких размеров. Вот структура каталогов:

icons
 └─ hicolor
     ├─ 8x8
     │   └─ apps
     ├─ 16x16
     │   └─ apps
     ...

Существует подкаталог для каждого возможного размера. Вы можете отобразить все размеры, определенные в настоящее время в вашей системе, написав:

ls /usr/share/icons/hicolor

В каждую папку приложений поместите изображение со всегда одним и тем же именем. Если ваш проект называется project1, то для большинства папок он будет называться "project1.png". В масштабируемые и символические папки вы можете поместить SVG-файл.

Папка документации

Она будет называться usr/share/doc/project1, если имя пакета будет "project1".

Папка содержит файлы changelog.Debian.gz и copyright и (необязательно) файл README.

Файл журнала изменений

Минимальный файл журнала изменений (changelog):

project1 (1.0) unstable; urgency=low

  * Первый релиз

 -- myname <myname@webserver.com>  Tue, 19 May 2020 11:06:00 +0100

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

Последняя версия должна быть в верхней части файла.

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

gzip -9 -n usr/share/doc/project1/changelog.Debian

Флаги -9 -n необходимы, чтобы пакета соответствовал инструкциям.

Файл copyright

Если вы предоставляете пакет Deb самостоятельно, необязательно использовать машиночитаемый формат, однако это подготовит вас к публикации пакета в дистрибутивах Debian. См.: copyright in Debian package structure.

Папка usr/share/man

Содержит руководство пользователя, которое вы можете просмотреть с помощью команды man. Он должен содержать по крайней мере project1.1.gz в подкаталоге man1, который будет индексной страницей вашего руководства.

Синтаксис немного своеобразен. Есть некоторые инструменты, которые могут помочь, но вам все равно нужно знать синтаксис.

  • описание синтаксиса: https://liw.fi/manpages/
  • редактор с мастером и режимом предварительного просмотра WYSIWYG: gmanedit
  • онлайн редактор с предварительным просмотром (переключитесь в режим AN): https://roperzh.github.io/grapse/

Вот пример файла:

.TH Project1 1 "19 May 2020" "" Project1
.SH NAME
Project1 - My cool project
.SH SYNOPSIS
.B project1
[PARAMETER]
.SH DESCRIPTION
What my program does.
.PP
More description.

Это руководство как и файл журнала изменений, должен быть сжат командой:

gzip -9 -n usr/share/man/man1/project1.1

Флаги -9 -n необходимы, чтобы пакет соответствовал инструкциям.