Во многом эта статья повторяет статью Сборка_пакета_с_нуля, и возможно со временем их надо объединить.
Классическая сборка пакета rpm состоит из следующих этапов:
Нахождение исходного текста пакета
Обычно мы находим исходный текст программы. Часто исходный текст программы можно получить на официальном сайте программы.
Это может быть готовый архив в виде tar, упакованный каким-нибудь компрессором, типа gzip, bzip и т.п. Также, это может быть репозиторий git, cvs, меркурий и т.п.
В любом случае мы получаем каталог с текстом программы и инструкцией, как можно программу собрать.
Отдельным источником можно назвать пакет src.rpm или deb-src из другого дистрибутива. В этом случае можно «подсмотреть» как собирают этот пакет другие.
На этом этапе надо понять как в принципе собирается данный пакет.
Написание инструкции сборки пакета
На втором этапе, зная алгоритм сборки пакета, мы записываем алгоритм в виде spec-файла.
Сборку пакета из исходников можно разделить на следующие основные этапы:
Создаем и публикуем NPM пакет
- распаковка исходного текста пакета и наложение патчей на него (например, исправляющие makefile пакета, чтобы он собирался не куда-нибудь в /opt , а каталог предназначенный для сборки пакета) (секция %prep);
- компиляция и линковка программ пакета (секция %build);
- размещение программ в каталог, который будет упаковываться в rpm (секция %install);
- написание скриптов нестандартных действий, которые выполняются при установке и удалении пакета (секции %post и %postust);
- сама упаковка пакета и проверка его «правильности» (верификация пакета).
Для тренировки сборки пакета, советую попробовать взять готовый пакет [1], готовый src.rpm можно взять из репозитория, например из Сизифа (ссылка скоро может устареть, в случае смены версии пакета) [2].
Непосредственная сборка пакета
Кстати, для генерации основы spec-файла, установите пакет genspec , запустите скрипт gensprec и ответьте на вопросы. А скрипт из пакета github2spec умеет создавать полный gear репозиторий для сборки пакета.
После того как вы написали спек и подготовили исходники, можно переходить непосредственно к сборке пакета.
Это лучше делать внутри хэшера, так как установка кучи необходимых для сборки программ, во-первых грозит безопасности вашей операционной системы, а во-вторых, засоряет её ненужными вам в дальнейшем пакетами.
Каждому этапу сборки можно привести опцию rpm, которая это выполняет:
- Распаковка исходника (секция %prep):
rpmbuild -bp имя_спек_файла.spec
- Компиляция и линковка программ (сборка) пакета (секция %build):
rpm -bc имя_спек_файла.spec
rpm -bc —short-circuit имя_спек_файла.spec
разница состоит в том, что если запустить с ключом -bc, то rpm заново повторит распаковку пакета, а потом уже начнёт компиляцию. Если вы собираете пакет первый раз по шагам, то вы могли внести в исходный текст пакета исправления, которые можно потом оформить в патчи, то распаковка исходников заново уничтожит ваши исправления.
как создать сборник программ с тихой установкой Тихая установка программ в Windows
- Установка пакета в заданный каталог (%install):
rpm -bi —short-circuit имя_спек_файла.spec
- Создание непосредственно самого пакета rpm (и src.rpm):
rpm -ba —short-circuit имя_спек_файла.spec
- Упаковка src.rpm пакета:
rpm -bs — имя_спек_файла.spec
Для ключа bs не требуется параметр —short-circuit, так как он непосредственно упаковывает ваши исходники и патчи в src.rpm, не выполняя действий по распаковке, компиляции и установке пакета.
Пример классической сборки пакета
Для всех примеров мы будем использовать пакет hello . Он есть и в репозитории и в git.altlinux.org https://git.altlinux.org/gears/h/hello.git.
Готовый src.rpm можно взять их сорцов Сизифа http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/files/SRPMS/hello-2.10-alt1.1.src.rpm — ссылка может устареть с выходом новой версии пакета, поэтому текущую версию пакета, всегда можно найти здесь: https://packages.altlinux.org/ru/sisyphus/srpms/hello/rpms/
Допустим, мы скачали hello-2.10-alt1.1.src.rpm , устанавливаем его от имени пользователя:
$ rpm -ihv путь_до_каталога_с_файлом/hello-2.10-alt1.1.src.rpm
В результате в каталоге пользователя ~/RPM/SPEC/ [2] появляется файл hello.spec, а в ~/RPM/SOURCE файл hello-2.10.tar.gz.
Шапка пакета — его описание, лицензия, откуда можно скачать исходник, или домашняя страница проекта, параметр BuildRequires указывает какой «нестандартный» пакет требуется для сборки:
Name: hello Version: 2.10 Release: alt1.1 Summary: GNU hello, THE greeting printing program Group: Development/C License: GPLv3+ Url: ftp://ftp.gnu.org/gnu/hello/ Source: %name-%version.tar.gz # explicitly added texinfo for info files BuildRequires: texinfo %description The GNU `hello’ program produces a familiar, friendly greeting. It allows nonprogrammers to use a classic computer science tool which would otherwise be unavailable to them. Because it is protected by the GNU General Public License, users are free to share and change it.
Описание распаковки исходников и наложение патчей (этап rpmbuild -bp):
%prep %setup -a0
Распаковывается первый исходник (Source — hello-2.10.targz) в каталог ~/RPM/BUILD/hello-2.10 .
Этап построения пакета (этап rpm -bc —short-circuit), выполняются команды autoreconf , configure , make с параметрами по умолчанию для сборки пакетов rpm:
%build %autoreconf %configure %make_build
Этап перемещения пакетов в каталог упаковки (rpm -bi —short-circuit), выполняются команды make install и поиск файлов перевода на различные языки:
%install %makeinstall %find_lang %name
Перечень файлов, которые должны войти в пакет (этап rpm -ba —short-circuit):
%files -f %name.lang %doc AUTHORS ChangeLog ChangeLog.O NEWS README THANKS TODO %doc %name-%version %_bindir/* %_infodir/* %_mandir/man?/*
Перечень людей пересобиравших пакет и изменения в пакете:
%changelog * Thu Dec 03 2015 Igor Vlasenko 2.10-alt1.1 — NMU: added BR: texinfo . * Thu Oct 23 2003 Andrey Rahmatullin 2.1.1-alt1 — initial build
Расшифровку макросов входящих в spec файл, можно получить выдав команду [3] :
$rpm -bE hello.spec
Теперь попробуем собрать пакет hello в вашем текущем бранче, даём команду:
$ rpm -ba hello.spec
Скорей всего в вам выскочит сообщение, что для сборки пакета, нужно установить пакет texinfo :
# apt-get install texinfo
Это просто для одного недостающего пакета, сложнее для установки «кучи» необходимых для сборки пакетов.
Для этого можно применить интересный приём:
- Собираем пакет src.rpm (если его у вас нет, или вы добавили в spec свои патчи):
результат сборки вы увидите в ~/RPM/SRPMS/ .
Далее настраиваем свой конфиг apt, что-бы он умел ставить пакеты, необходимые для сборки пакета указываем, где лежат пакеты src.rpm.
# local (ALT Linux) rpm [p10] file:/mnt/Arhiv_ext/Branch-p10/ x86_64 classic gostcrypto rpm [p10] file:/mnt/Arhiv_ext/Branch-p10/ noarch classic rpm [p10] file:/mnt/Arhiv_ext/Branch-p10/ x86_64-i586 classic rpm-src [p10] file:/mnt/Arhiv_ext/Branch-p10/ x86_64 classic rpm-src [p10] file:/mnt/Arhiv_ext/Branch-p10/ noarch classic
Установка пакетов, необходимых для сборки
Тогда можно установить пакеты, необходимые для сборки пакета hello , одной из команд:
$ rpmgp -i hello.src.rpm
(требуется установить etersoft-build-utils )
# apt-get build-dep hello.src.rpm
(сейчас не работает) [5]
Сборка внутри хэшера
Описанный выше способ сборки пакета, как уже описано выше, имеет один существенный недостаток — в живую систему приходится устанавливать пакеты, не нужные в обычной жизни, например для сборки пакета hello , требуется пакет texinfo .
Для сборки внутри хэшера, надо установить и настроить пакет hasher, кратко смотри Hasher быстрый старт, Hasher Faq.
Классическое использование хэшера
Классическое использование хэшера, это запуск его командой:
$ hsh путь/имя.src.rpm
Возьмём для примера наш hello. src.rpm
Для начала настроим работу хэшера:
# apt-get install hasher
- добавим аккаунты псевдопользователей для работы с хэшером:
# hasher-useradd имя_вашего_пользователя
- создадим окружение для работы хэшера:
В домашнем каталоге пользователя создаём каталог, имя которого начинается с точки [7] :
$ cd$ mkdir .hasher $ cd .hasher $ > config $ mcedit config
В файле ~.hasher/config прописываются значения опций пользователя по умолчанию. Эти опции можно изменить, указав их непосредственно в самой команде вызова хэшера, например:
def_repo=/home/$USER/hasher-repo install -d /tmp/private/$HOME/hasher ln -fs /tmp/private/$HOME/hasher /home/$HOME/hasher known_mountpoints=/dev/pts lock_nowait=1 apt-config=$HOME/apt/apt.conf.s64 if [ ! `uname -m` = x86_64 ]; then def_target=i586; fi
Создаём файл ~/apt/apt.conf.s64 такого содержания:
Dir::Etc::main «/dev/null»; Dir::Etc::parts «/var/empty»; Dir::Etc::SourceParts «/var/empty»; Dir::Etc::sourcelist «/home/$USER/apt/sources.list.s64»; RPM::Ignore < «vim-plugin-vimruby»; >;
И файл apt/sources.list.s64 , например, такого содержания:
rpm [p10] file:/mnt/Arhiv/Branch-p10/ x86_64 classic gostcrypto rpm [p10] file:/mnt/Arhiv/Branch-p10/ x86_64-i586 classic rpm [p10] file:/mnt/Arhiv/Branch-p10/ noarch classic
Здесь /mnt/Arhiv/Branch-p10/ — путь для локального репозитория p10.
Создаем символьную ссылку на расположение хэшера, например, так:
$ ln -fs /tmp/private/$USER/hasher /home/$USER/hasher
И теперь запускаем саму сборку в хэшере, заходим в каталог с файлом и даём команду:
$ hsh hello-2.10-alt1.1.src.rpm
В результате этой команды внутри хэшера соберётся пакет hello-2.10-alt1.1.x86_64.rpm , который мы увидим (при приведённом выше конфиге) в ~/hasher_repo .
В качестве примера приведу команду сбора 32 разрядного приложения в хэшере на 64-битной машине:
$ setarch i586 hsh -v —apt-config=$HOME/apt/apt.conf.s32 $HOME/hasher
где apt/apt.conf.s32 — описание 32 битного репозитория.
Использование хэшера как изолированной среды сборки
То есть для сборки пакета hello , со своими патчами, мы можем собрать свою версию src.rpm командой:
$ rpm -bs hello.spec
И дальше собираем свой вариант hello:
$ hsh hello-2.10-alt1.1.src.rpm
Но гораздо интереснее, использовать хэшер на этапе изучения пакета. Устанавливаем «чистый» хэшер:
$ hsh —initroot —pkg-build-list=+mc,rpm-utils
Кладём в hasher/in нужные исходники, заходим внутрь хэшера:
$ hsh-shell —mount=/dev/pts shell=mc
Теперь копируем эти файлы в /usr/src/RPM/BUILD хэшера, и начинаем экспериментировать со сборкой пакета.
Расположив спек в /src/RPM/SPECS , а исходники в /src/RPM/SOURCE , можно внутри хэшера собирать пакеты «классическим» способом.
Для установки пакета внутрь пакета, нужно выйти из хэшера:
$ exit
$ hsh-install имя_пакета
Сборка с использованием инструментов работы с git репозиториями
Git репозиторий, это удобное место для хранения исходного кода пакетов. Для работы с ними и для сборки из них rpm существует пакет gear.
Для примера рассмотрим сборку пакета hello из git репозитория https://git.altlinux.org/gears/h/hello.git.
Для начала склонируем git репозиторий в то место, где вы будете хранить свои рабочие исходники, например:
$ mkdir My_Repo (необязательно) $ cd My_Repo $ git clone https://git.altlinux.org/gears/h/hello.git
Заходим в каталог hello и изучаем его.
$ cd hello $ ls -al итого 24 drwxr-xr-x 5 writer writer 4096 мая 15 19:58 . drwxr-xr-x 32 writer writer 4096 мая 15 19:58 .. drwxr-xr-x 2 writer writer 4096 мая 15 19:58 .gear drwxr-xr-x 8 writer writer 4096 мая 15 19:58 .git drwxr-xr-x 11 writer writer 4096 мая 15 19:58 hello -rw-r—r— 1 writer writer 1680 мая 15 19:58 hello.spec
$ cd .gear $ cat rules tar.gz: hello
Правило tar.gz: hello, указывает, что каталог hello упаковывается в hello.tar.gz.
Установим пакет gear :
# apt-get install gear
И дадим команду из каталога hello:
$ gear-hsh
И у нас в хэшере собирается пакет (для 64 битной архитектуры) hello-2.10-alt1.1.x86_64.rpm .
Примечания
- ↑ Для совсем начинающих две ссылкм
- RPM-HOWTO
- RPM-HOWTO перевод на русский
- ↑ в .rpmmacros прописаны стандартные для ALT пути: %_topdir %homedir/RPM %_tmppath %homedir/tmp
- ↑ нужно установить пакет rpm-utils
- ↑ Дальше для простоты, я не буду указывать путь до файла, подразумевая, что вы предварительно перешли в каталог с файлом
- ↑ смотри bugzilla.altlinux.org
- ↑ # — это не комментарий, а знак что для выполнения команды apt-get нужно получить права root
- ↑ $ — это знак, что команду cd надо выполнять вашим обычным пользователем
Ссылки
- RPM-HOWTO
- RPM-HOWTO перевод на русский
- Сборка_пакета_с_нуля
- О_стратегии_сборки_RPM_пакетов
- Руководство по написанию спек файла для rpm
- Краткая инструкция по сборке пакетов с помощью etersoft-build-utils
- Краткое_руководство_по_сборке_с_gear
- Макросы RPM
- git
- gear
- hasher
Источник: www.altlinux.org
Создание пакета или пакета MSIX с помощью MakeAppx.exe
MakeAppx.exe создает пакеты приложений (MSIX или APPX) и пакеты пакетов приложений (MSIXBUNDLE или APPXBUNDLE). MakeAppx.exe также извлекает файлы из пакета приложения или пакета приложений и шифрует или расшифровывает пакеты приложения и пакеты приложений. Это средство входит в состав пакета SDK Windows 10 и его можно использовать через командную строку или файл скрипта.
Сведения об использовании MakeApp.exe для упаковки классического приложения см. в разделе «Упаковка классического приложения» вручную.
Если для разработки приложения использовали Visual Studio, рекомендуется применять мастер Visual Studio для создания пакета приложения. Дополнительные сведения см. в статье «Упаковка приложения UWP с помощью Visual Studio и упаковка классического приложения из исходного кода с помощью Visual Studio».
Обратите внимание, что MakeAppx.exe не создает файл отправки пакета приложения (.appxupload или MSIXUPLOAD), который является рекомендуемым типом допустимого пакета приложения для отправки в Центр партнеров. Файл отправки пакета приложения обычно создается как часть процесса упаковки Visual Studio, хотя его также можно создать вручную.
Использование MakeAppx.exe
В зависимости от пути установки пакета SDK MakeAppx.exe может находиться в следующих расположениях на компьютере с Windows 10:
- C:Program Files (x86)Windows Kits10bin\makeappx.exe
where = x86, x64, arm, arm64 или chpe. Кроме того, он может находиться в:
- C:Program Files (x86)Windows Kits10App Certification Kitmakeappx.exe
Синтаксис и параметры MakeAppx.exe
Общий синтаксис MakeAppx.exe:
MakeAppx [options]
В следующей таблице описаны команды для MakeAppx.exe.
| pack | Создает пакет. |
| unpack | Извлекает все файлы в указанном пакете в указанный выходной каталог. |
| bundle | Создает пакет приложений. |
| unbundle | Распаковка всех пакетов в подкаталог по указанному выходному пути с именем пакета или полного имени пакета. |
| encrypt | Создает зашифрованный пакет приложения или пакет приложений из входного пакета приложения/пакета приложений по указанному выходному пакету приложения/пакету приложений. |
| расшифровка | Создает расшифрованный пакет приложения или пакет приложений из входного пакета приложения/пакета приложений по указанному выходному пакету приложения/пакету приложений. |
Этот список параметров применим ко всем командам:
| /d | Указывает входные или выходные данные либо каталог содержимого. |
| /l | Используется для локализованных пакетов. Пути проверки по умолчанию для локализованных пакетов. Этот параметр отключает только указанную проверку, не требуя отключения всех проверок. |
| /kf | Шифрует или расшифровывает пакет приложения или пакет приложений с помощью ключа из указанного файла ключа. Не может использоваться с /kt. |
| /kt | Шифрует или расшифровывает пакет приложения или пакет приложений с помощью глобального тестового ключа. Не может использоваться с /kf. |
| /no | Предотвращает перезапись выходного файла, если он существует. Если не указать этот параметр или параметр /o, пользователь должен подтвердить перезапись файла. |
| /nv | Пропускает семантическую проверку. Если не указать этот параметр, средство выполняет полную проверку пакета. |
| /o | Перезаписывает выходной файл, если он существует. Если не указать этот параметр или параметр /no, пользователь должен подтвердить перезапись файла. |
| /p | Указывает пакет приложения или пакет приложений. |
| /v | Включает вывод подробных сведений в журнал на консоли. |
| /? | Отображает текст справки. |
Следующий список содержит возможные аргументы:
| Имя созданного пакета. Это имя файла, добавляемое с расширением MSIX или APPX. | |
| Имя созданного зашифрованного пакета. Это имя файла, добавляемое с помощью EMSIX или EAPPX. | |
| Имя пакета. Это имя файла, добавляемое с расширением MSIX или APPX. | |
| Имя зашифрованного пакета. Это имя файла, добавляемое с помощью EMSIX или EAPPX. | |
| Имя созданного пакета приложений. Это имя файла, добавленное с расширением .msixbundle или .appxbundle. | |
| Имя созданного зашифрованного пакета приложений. Это имя файла, добавленное с расширением EMSIXBUNDLE или EAPPXBUNDLE. | |
| Имя пакета приложений. Это имя файла, добавленное с расширением .msixbundle или .appxbundle. | |
| Имя зашифрованного пакета приложений. Это имя файла, добавленное с расширением EMSIXBUNDLE или EAPPXBUNDLE. | |
| Путь для содержимого пакета приложения или пакета приложений. | |
| Имя файла, в котором указаны источник и назначение пакета. | |
| Путь к каталогу для выходных пакетов приложения и пакетов приложений. | |
| Имя файла, содержащего ключ для шифрования или расшифровки. | |
| Алгоритмы, используемые при создании сопоставления блоков. Допустимые алгоритмы: SHA256 (по умолчанию), SHA384, SHA512. |
Создание пакета приложения
Пакет приложения — это полный набор файлов приложения, упакованных в ФАЙЛ пакета MSIX или APPX. Чтобы создать пакет приложения с помощью команды pack, необходимо предоставить каталог содержимого или файл сопоставления для расположения пакета. Вы также можете зашифровать пакет во время создания. Если вам требуется зашифровать пакет, необходимо использовать параметр /ep и указать, используете ли вы файл ключа (/kf) или глобальный тестовый ключ (/kt). Подробнее о создании зашифрованного пакета см. в разделе Шифрование и расшифровка пакета приложения или пакета приложений.
Параметры, относящиеся к команде pack:
| /f | Указывает файл сопоставления. |
| /h | Указывает хэш-алгоритм, используемый при создании сопоставления блоков. Этот параметр можно использовать только с командой pack. Допустимые алгоритмы: SHA256 (по умолчанию), SHA384, SHA512. |
| /m | Указывает путь к входному манифесту приложения, на основе которого будет создан выходной пакет приложения или манифест пакета ресурсов. При использовании этого параметра необходимо также использовать параметр /f и включить раздел [ResourceMetadata] в файл сопоставления, чтобы указать размеры ресурсов, которые будут включены в созданный манифест. |
| /nc | Предотвращает сжатие файлов пакета. По умолчанию файлы сжимаются в зависимости от выявленного типа файлов. |
| /r | Собирает пакет ресурсов. Этот параметр необходимо использовать с параметром /m, а также он предполагает использование параметра /l. |
В следующих примерах использования показаны некоторые возможные варианты синтаксиса для команды pack:
MakeAppx pack [options] /d /p MakeAppx pack [options] /f /p MakeAppx pack [options] /m /f /p MakeAppx pack [options] /r /m /f /p MakeAppx pack [options] /d /ep /kf MakeAppx pack [options] /d /ep /kt
Далее приведены примеры командной строки для команды pack:
MakeAppx pack /v /h SHA256 /d «C:My Files» /p MyPackage.msix MakeAppx pack /v /o /f MyMapping.txt /p MyPackage.msix MakeAppx pack /m «MyAppAppxManifest.xml» /f MyMapping.txt /p AppPackage.msix MakeAppx pack /r /m «MyAppAppxManifest.xml» /f MyMapping.txt /p ResourcePackage.msix MakeAppx pack /v /h SHA256 /d «C:My Files» /ep MyPackage.emsix /kf MyKeyFile.txt MakeAppx pack /v /h SHA256 /d «C:My Files» /ep MyPackage.emsix /kt
Создание пакета приложений
Пакет приложений похож на пакет приложения, но он может сократить размер приложения, скачиваемого пользователями. Пакеты приложения полезны, к примеру, для ресурсов, связанных с конкретным языком, различных ресурсов с определенным масштабом изображений или ресурсов, которые применяются к конкретным версиям Microsoft DirectX. По аналогии с созданием зашифрованного пакета приложения, вы также можете зашифровать пакет приложений при его сборке. Чтобы зашифровать пакет приложений, используйте параметр /ep и укажите, используете ли вы файл ключа (/kf) или глобальный тестовый ключ (/kt). Подробнее о создании зашифрованного пакета приложений см. в разделе Шифрование и расшифровка пакета приложения или пакета приложений.
Параметры, относящиеся к команде bundle:
| /bv | Указывает номер версии пакета. Номер версии должен состоять из четырех частей, разделенных точками, в следующей форме: . |
| /f | Указывает файл сопоставления. |
Обратите внимание, что если версия пакета не указана или указана в виде «0.0.0.0», пакет создается с использованием текущих даты и времени.
В следующих примерах использования показаны некоторые возможные варианты синтаксиса для команды bundle:
MakeAppx bundle [options] /d /p MakeAppx bundle [options] /f /p MakeAppx bundle [options] /d /ep /kf MyKeyFile.txt MakeAppx bundle [options] /f /ep /kt
В следующем блоке содержатся примеры для команды bundle:
MakeAppx bundle /v /d «C:My Files» /p MyBundle.msixbundle MakeAppx bundle /v /o /bv 1.0.1.2096 /f MyMapping.txt /p MyBundle.msixbundle MakeAppx bundle /v /o /bv 1.0.1.2096 /f MyMapping.txt /ep MyBundle.emsixbundle /kf MyKeyFile.txt MakeAppx bundle /v /o /bv 1.0.1.2096 /f MyMapping.txt /ep MyBundle.emsixbundle /kt
Извлечение файлов из пакета приложения или пакета приложений
Помимо упаковки приложений в пакеты приложения или пакеты приложений, MakeAppx.exe также может распаковывать существующие пакеты. Вам потребуется предоставить каталог содержимого в качестве назначения для извлеченных файлов. При попытке извлечь файлы из зашифрованного пакета приложения или пакета приложений вы можете расшифровать и извлечь файлы одновременно с помощью параметра /ep. При этом необходимо указать способ расшифровки: с помощью файла ключа (/kf) или глобального тестового ключа (/kt). Подробнее о расшифровке пакета приложения или пакета приложений см. в разделе Шифрование и расшифровка пакета приложения или пакета приложений.
Параметры, относящиеся к командам unpack и unbundle:
| /nd | Не выполняет расшифровку при распаковке пакета приложения или пакета приложений. |
| /pfn | Распаковка и распаковка всех файлов в подкаталог по указанному выходному пути с именем пакета или пакета с полным именем |
В следующих примерах использования показаны некоторые возможные варианты синтаксиса для команд unpack и unbundle:
MakeAppx unpack [options] /p /d MakeAppx unpack [options] /ep /d /kf MakeAppx unpack [options] /ep /d /kt MakeAppx unbundle [options] /p /d MakeAppx unbundle [options] /ep /d /kf MakeAppx unbundle [options] /ep /d /kt
В следующем блоке содержатся примеры использования команд unpack и unbundle:
MakeAppx unpack /v /p MyPackage.msix /d «C:My Files» MakeAppx unpack /v /ep MyPackage.emsix /d «C:My Files» /kf MyKeyFile.txt MakeAppx unpack /v /ep MyPackage.emsix /d «C:My Files» /kt MakeAppx unbundle /v /p MyBundle.msixbundle /d «C:My Files» MakeAppx unbundle /v /ep MyBundle.emsixbundle /d «C:My Files» /kf MyKeyFile.txt MakeAppx unbundle /v /ep MyBundle.emsixbundle /d «C:My Files» /kt
Шифрование и расшифровка пакета приложения или пакета приложений
Средство MakeAppx.exe также может зашифровать или расшифровать существующий пакет приложения или пакет приложений. Просто укажите имя пакета, имя выходного пакета, а также способ шифрования или расшифровки: с помощью файла ключа (/kf) или глобального тестового ключа (/kt).
Шифрование и расшифровку нельзя выполнить через мастер упаковки Visual Studio.
Параметры, относящиеся к командам encrypt и decrypt:
| /ep | Указывает зашифрованный пакет приложения или пакет приложений. |
В следующих примерах использования показаны некоторые возможные варианты синтаксиса для команд encrypt и decrypt:
MakeAppx encrypt [options] /p /ep /kf MakeAppx encrypt [options] /p /ep /kt MakeAppx decrypt [options] /ep /p /kf MakeAppx decrypt [options] /ep /p /kt
Следующий блок содержит примеры использования команд encrypt и decrypt:
MakeAppx.exe encrypt /p MyPackage.msix /ep MyEncryptedPackage.emsix /kt MakeAppx.exe encrypt /p MyPackage.msix /ep MyEncryptedPackage.emsix /kf MyKeyFile.txt MakeAppx.exe decrypt /p MyPackage.msix /ep MyEncryptedPackage.emsix /kt MakeAppx.exe decrypt p MyPackage.msix /ep MyEncryptedPackage.emsix /kf MyKeyFile.txt
Файлы ключей
Файлы ключей должны начинаться строкой, содержащей строку «[Keys]», за которой следуют строки с описанием ключей, используемых для шифрования каждого пакета.
Каждый ключ представлен парой строк в кавычках, разделенных пробелами или табуляцией. Первая строка представляет собой идентификатор 32-байтового ключа в кодировке base64, а вторая — 32-байтовый ключ шифрования в кодировке base64. Файл ключа должен быть простым текстовым файлом.
Пример файла ключа:
[Keys] «OWVwSzliRGY1VWt1ODk4N1Q4R2Vqc04zMzIzNnlUREU=» «MjNFTlFhZGRGZEY2YnVxMTBocjd6THdOdk9pZkpvelc=»
Файлы сопоставления
Файлы сопоставления должны начинаться строкой, содержащей строку «[Files]», за которой следуют строки с описанием файлов, которые будут добавлены в пакет. Каждый файл описывается парой путей в кавычках, разделенных пробелами или табуляцией.
Каждый файл представляет свой источник (на диске) и назначение (в пакете). Файл сопоставления должен быть простым текстовым файлом.
Пример файла сопоставления (без параметра /m):
[Files] «C:MyAppStartPage.html» «default.html» «C:Program Files (x86)example.txt» «miscexample.txt» «\MyServerpathicon.png» «icon.png» «my app filesreadme.txt» «my app filesreadme.txt» «CustomManifest.xml» «AppxManifest.xml»
При использовании файла сопоставления вы можете выбрать, следует ли использовать параметр /m. Параметр /m позволяет пользователю указывать метаданные ресурса в файле сопоставления, которые будут включены в созданный манифест. Если вы используете параметр /m, файл сопоставления должен содержать раздел, начинающийся со строки «[ResourceMetadata]», а затем строки, указывающие «ResourceDimensions» и «ResourceId». Пакет приложения может содержать несколько resourceDimensions, но может быть только один «ResourceId».
Пример файла сопоставления (с параметром /m):
[ResourceMetadata] «ResourceDimensions» «language-en-us» «ResourceId» «English» [Files] «imagesen-uslogo.png» «en-uslogo.png» «en-us.pri» «resources.pri»
Выполнение семантической проверки средством MakeAppx.exe
MakeAppx.exe выполняет ограниченную семантическую проверку, которая предназначена для выявления наиболее распространенных ошибок разработки и помогает обеспечить допустимость пакета приложения. Если вам требуется пропустить проверку при использовании MakeAppx.exe, см. параметр /nv.
Эта проверка гарантирует следующее:
- все файлы, ссылки на которые присутствуют в манифесте пакета, входят в состав пакета приложения;
- в приложении нет двух идентичных ключей;
- приложение не регистрирует запрещенный протокол из этого списка: SMB, FILE, MS-WWA-WEB, MS-WWA.
Это не полноценная семантическая проверка, так как она позволяет выявлять только распространенные ошибки. Готовность к установке пакетов, созданных с помощью MakeAppx.exe, не гарантируется.
Источник: learn.microsoft.com
Как сделать свой пакет программ

В этой статье мы рассмотрим как создать deb пакет для своей программы без использования каких-либо сторонних инструментов. Мы не будем рассматривать подпись пакетов для репозиториев, потому что для каждого вида репозиториев команды будут отличаться.
Самый популярный способ распространения программ в Linux – это репозитории программного обеспечения. В репозиториях программы находятся в специальном формате. В Debian и основанных на нём дистрибутивах используется формат пакетов deb. В этих пакетах находится архив всех файлов программы, инструкции по их установке в системе для пакетного менеджера, а также другая служебная информация.
Создание deb пакетов
Шаг 1. Подготовка
Давайте создадим для этого примера небольшую программу на Си. Она будет называться hellolosst и будет выводить на экран строку Hello from losst.ru в терминал при запуске. Сначала создайте папку hellolosst и перейдите в неё:
mkdir hellolosst
cd hellolosst
Затем поместите в неё файл с исходным кодом:
#include
int main() printf(“Hello from losst.run”);
>

Для компиляции программы выполните такую команду:
gcc hellolosst.c -o hellolosst
Затем вы можете её выполнить:

Таким образом, теперь у нас есть программа, которую надо упаковать в deb пакет.
2. Создание манифеста
В каждом deb пакете содержаться не только файлы самой программы, но и файл манифеста, в котором описан пакет, его зависимости и параметры. Этот файл имеет название control и должен находится в папке DEBIAN. Для сборки пакета будем использовать папку package, чтобы файлы программы не путались с исходными файлами и те не попали в пакет. Создайте эти папку:
mkdir -p package/DEBIAN
Прежде чем вы сможете создать этот файл надо узнать несколько вещей. Первым делом надо посмотреть размер файлов программы, поскольку в данном случае файл один, достаточно посмотреть его размер:
du -k ./hellolosst

Если файлов несколько, то можно удалить исходники и посмотреть общий размер папки с файлами программы. Дальше надо понять от каких пакетов будет зависеть ваша программа. Для этого воспользуйтесь командой objdump:
objdump -p ./hellolosst | grep NEEDED

В данном случае программе необходима только libc. Чтобы посмотреть в каком пакете она находится выполните:

Пакет называется libc6. Затем создайте файл манифеста со следующим содержимым:
Package: hellolosst
Version: 1.0
Section: unknown
Priority: optional
Depends: libc6
Architecture: amd64
Essential: no
Installed-Size: 20
Maintainer: losst.ru
Description: Print hello from losst line
Это минимальный набор параметров в файле манифеста. Вот их значение:
- Package – имя пакета;
- Version – версия программы в пакете, будет использована при обновлении пакета;
- Section – категория пакета, позволяет определить зачем он нужен;
- Priority – важность пакета, для новых пакетов, которые ни с чем не конфликтуют обычно прописывают optional, кроме того доступны значения required, important или standard;
- Depends – от каких пакетов зависит ваш пакет, он не может быть установлен, пока не установлены эти пакеты;
- Recommends – необязательные пакеты, но тем не менее они обычно устанавливаются по умолчанию в apt;
- Conflicts – пакет не будет установлен, пока в системе присутствуют перечисленные здесь пакеты;
- Architecture – архитектура системы, в которой можно установить этот пакет, доступные значения: i386, amd64, all, последнее означает, что архитектура не имеет значения;
- Installed-Size – общий размер программы после установки;
- Maintainer – указывает кто собрал этот пакет и кто отвечает за его поддержку;
- Description – краткое описание пакета.
3. Расположение файлов
Манифест готов. Теперь в папке пакета надо создать структуру папок, аналог того, что есть в корневой файловой системе. В данном случае надо создать папку usr/bin и поместить туда исполняемый файл:
mkdir -p package/usr/bin
mv ./hellolosst package/usr/bin
4. Скрипты установки
Несмотря на то, что система установки пакетов очень мощная и позволяет делать многое, некоторые вещи всё же сделать нельзя. Для решения этой проблемы была предусмотрена возможность выполнять скрипты перед установкой пакета и после. Аналогично это работает для удаления пакета – перед и после. Эти скрипты называются preinst, postinst, prerm и postrm. Каждый файл просто содержит набор скриптов, которые надо выполнить. Например:
#!/bin/bash
echo “Hello from losst installed”
Разработчики Debian не рекомендуют использовать эти скрипты без крайней надобности, поскольку они дают вам полный контроль над системой пользователя и вы можете случайно что-то повредить. Обычно эти скрипты используются для того чтобы задавать пользователям вопросы и на основе этого генерировать конфигурационные файлы.
5. Сборка и проверка пакета
Осталось собрать настроенный пакет. Для этого используйте такую команду:
dpkg-deb –build ./package

Теперь вы знаете как как собрать deb пакет. После завершения сборки можете установить его с помощью apt:
sudo apt install ~/hellolosst.deb

После этого исполняемый файл программы появится в /usr/bin, а сообщение из postinst будет выведено после установки.
Выводы
В этой небольшой статье мы рассмотрели как выполняется создание deb пакета с помощью инструмента dpkg-deb. Как видите, всё очень просто. Вам достаточно написать манифест и расположить файлы там, где они должны быть. Мы рассмотрели здесь только самые основы. На самом деле создание пакетов намного сложнее.
Существует целый набор утилит debhelpers, которые используются на различных этапах сборки и установки deb пакетов, подробнее обо всём этом вы можете прочитать в официальной документации.
Источник: unlix.ru