Когда мы устанавливаем программное обеспечение в Ubuntu/Debian, часто мы скачиваем .deb-пакет и выполняем установку с его помощью. deb-пакеты — это переносимые файлы, которые работают в различных версиях систем Ubuntu/Debian Linux. Иногда вам может понадобиться преобразовать ваш код или приложение в deb-пакет, чтобы сделать его переносимым. В этой статье мы узнаем, как собрать deb-пакет в Ubuntu/Debian Linux.
Как собрать deb-пакет в Ubuntu/Debian Linux
Ниже описаны шаги по сборке deb-пакета из папки приложения.
1. Назовите свой deb-пакет
Сначала нам нужно назвать наш желаемый deb-пакет. Стандартная нотация для именования deb-пакетов выглядит следующим образом.
[проект]_[мажорная версия].[минорная версия]-[ревизия пакета]
Например, вы можете назвать свой проект следующим образом
helloworld_1.0-1
2. Создайте каталог с именем пакета
Далее создайте новый каталог с тем же именем, что и ваш пакет, включая номера версий.
Создаём свою сборку Windows! | Часть 1 — Удаление ненужных пакетов программ
mkdir helloworld_1.0-1
Затем поместите в эту папку различные файлы и папки вашей программы. Вот некоторые примеры файлов и папок, которые мы добавляем в нашу новую папку. Вы должны поместить свои собственные файлы и папки.
mkdir helloworld_1.0-1/usr mkdir helloworld_1.0-1/usr/local mkdir helloworld_1.0-1/usr/local/bin cp «~/Projects/Hello World/helloworld» helloworld_1.0-1/usr/local/bin
3. Создание метаданных
Далее мы создадим специальные файлы метаданных, которые менеджер пакетов будет использовать для установки вашей программы на клиентскую систему.
mkdir helloworld_1.0-1/DEBIAN gedit helloworld_1.0-1/DEBIAN/control
Файл метаданных, как видно из названия, подробно описывает пакет. Ниже приведен пример записей, которые вы можете добавить в файл метаданных.
Package: helloworld Version: 1.0-1 Section: base Priority: optional Architecture: i386 Depends: libsomethingorrather (>= 1.2.13), anotherDependency (>= 1.2.6) Maintainer: Your Name [email protected]> Description: Hello World When you need some sunshine, just run this small program!
В приведенном выше файле метаданных,
- Package — указывает имя пакета
- Version — манор + минорная версия (manor + minor version)
- Section — указывает область применения, к которой относится deb-пакет. Сопровождающие Deb Archive классифицируют программы по различным разделам, таким как игры, электроника, java и т.д. Нам нужно указать раздел, применимый к нашей программе. Ниже приведена более подробная информация о разделах.
- Priority — указывает приоритет пакета для установки пользователем. Обратите внимание, что это обязательное поле, которое может иметь значения required, standard, important и optional. Здесь «необязательный» — это значение поля приоритета и не означает, что он необязателен.
- Architecture — совместимая архитектура ОС для данной программы
- Depends — зависимости
- Maintainer — Email и имя разработчика/организации, поддерживающей данный пакет.
- Description — краткое описание пакета, чтобы другим было легко понять, что это такое и что он делает. Важно добавить пробел перед каждой строкой в описании.
Это не все доступные поля для файла метаданных. Вот исчерпывающий список полей, которые могут входить в файл метаданных deb-пакета.
Как создать свой сборник программ WPI.
4. Сборка Deb-пакета
Допустим, текущий каталог содержит папку программы helloworld_1.0-1, тогда выполните следующую команду для сборки пакета из вашей папки.
dpkg-deb —build helloworld_1.0-1
Вот и все. Теперь вы можете поделиться этим пакетом с другими, разместить его на своем сайте или загрузить в онлайн-репозитории.
Заключение
В этой статье мы узнали, как собрать deb-пакет из папки программы. Вы можете настроить его в соответствии с вашими требованиями.
Похожие записи:
- Начало работы с Tmux
- Как посмотреть список установленных пакетов в Ubuntu
- Как найти и завершить процесс с помощью терминала Linux
- Как установить Grub Customizer в Ubuntu
- Ubuntu: Установка Java
- Как заставить команду CP Linux перезаписывать файлы без подтверждения
- aa-unconfined: command not found
Источник: g-soft.info
Как собрать flatpak пакет
Flatpak это новые рамки для настольных приложений на Linux.
Распространение приложений на Linux является головной болью: различные распределения в нескольких версиях, каждая со своими собственными версиями библиотек и форматов упаковки.
Flatpak здесь, чтобы изменить все это. Это позволяет то же самое приложение, установить на разных дистрибутивах Linux, в том числе и для различных версий. И он был разработан с нуля с учетом требований безопасности, так что приложения изолированы друг от друга и от хост-системы.
Как собрать Flatpak пакет из исходников.
Для того чтобы собрать flatpak пакет нам нужно сначала установить Flatpak, для этого открываем терминал и пишем команду.
Для Fedora 23 и выше
sudo dnf install flatpak
Для Ubuntu, Linux Mint и всех Debian
sudo add-apt-repository ppa:alexlarsson/flatpak
sudo apt update
sudo apt install flatpak
Далее нам нужно добавить репозитории
wget https://sdk.gnome.org/keys/gnome-sdk.gpg
flatpak remote-add —gpg-import=gnome-sdk.gpg gnome https://sdk.gnome.org/repo/
flatpak remote-add —gpg-import=gnome-sdk.gpg gnome-apps https://sdk.gnome.org/repo-apps/
Теперь нужно установить среду выполнения
flatpak install gnome org.gnome.Platform 3.20
flatpak install gnome org.gnome.Sdk 3.20
Для просмотра ночных сборок приложений, которые уже собрали разработчики, введите в терминале
wget http://209.132.179.2/keys/nightly.gpg
flatpak remote-add —gpg-import=nightly.gpg nightly-graphics http://209.132.179.2/repo/
и чтобы показать на экране список приложений для установки, введите следующее
flatpak remote-ls nightly-graphics —app
Вот какие сейчас приложения есть в ночных репозиториях
Но есть еще стандартные
wget https://sdk.gnome.org/keys/gnome-sdk.gpg
flatpak remote-add —gpg-import=gnome-sdk.gpg gnome-apps https://sdk.gnome.org/repo-apps/
и выведем список
flatpak remote-ls gnome-apps —app
Тут немножко больше
Чтобы установить приложение достаточно набрать в терминале
flatpak install gnome-nightly-apps org.gnome.gedit master
Ну и мы подошли к самому главному
Как собрать пакет
Скачиваем исходники приложения в своем примере я буду использовать htop.
Инициализируем рабочее окружение
flatpak build-init htop2 org.gnome.Htop2 org.gnome.Sdk org.gnome.Platform 3.20
где htop2 это название директории(я сам придумал), а org.gnome.Htop2 — название нашего приложения(тоже сам придумал).
Переходим в папку Загрузки
cd Загрузки
Перемещаем наш архив в домашнюю директорию
mv htop-2.0.1.tar.gz ˜/
tar xvf htop-2.0.1.tar.gz
Старый архив нам больше не понадобится, его мы удаляем
rm htop-2.0.1.tar.gz
и переходим в директорию которую мы распаковали, то есть в htop-2.0.1
cd htop-2.0.1
и запускаем упаковщик
flatpak build ../htop2 ./configure —prefix=/app
flatpak build ../htop2 make
flatpak build ../htop2 make install
Ну вот мы на финишной прямой далее нужно добавить команду запуска
flatpak build-finish htop2 —socket=x11 —share=network —command=htop
добавляем в репозиторий и запускаем
flatpak build-export repo htop2
flatpak —user remote-add —no-gpg-verify —if-not-exists tutorial-repo repo
flatpak —user install tutorial-repo org.gnome.Htop2
flatpak run org.gnome.Htop2
Подробнее можно посмотреть на видео ниже.
Источник: linuxthebest.net
Сборка собственного RPM-пакета, содержащего простую Go-программу
Процесс развёртывания программ обычно состоит из множества этапов. Некоторые из этих этапов могут представлять собой довольно-таки сложные последовательности действий. В наши дни имеется широкое разнообразие инструментов, позволяющих создавать описания процессов развёртывания программ, которые можно воспроизводить на разных системах.
А именно, в мире Linux уже довольно давно существуют менеджеры пакетов. Например — это RPM и YUM. Они упрощают установку, обновление и удаление программ в Linux-системах. Собственно говоря, в этой статье я хочу рассказать о том, как создать собственный простой RPM-пакет, хочу показать, что это совсем несложно.
Надо отметить, что во многих организациях менеджеры пакетов используются лишь для установки программ, предлагаемых разработчиком используемого этими организациями дистрибутива Linux. Для управления развёртываниями собственных программ менеджеры пакетов не применяются. Тому, кто попытается собрать свой первый RPM-пакет, может показаться, что это не так уж и просто.
Но обычно тот, кто учится создавать такие пакеты, тратит время с пользой. Дело в том, что соответствующие знания способны помочь ему в деле оптимизации его рабочих процессов. Здесь мы рассмотрим процесс создания RPM-пакета, содержащего простую программу, написанную на Go.
Создание пакета
Во многих проектах для развёртывания ПО используют менеджеры конфигурации. Вот, например, как может выглядеть типичный плейбук Ansible:
tasks: — name: ‘Copy the artifact’ copy: src: ‘my_app’ dest: ‘/usr/bin/my_app’ — name: ‘Copy configuration files’ template: src: config.json dest: /etc/my_app/config.json
Конечно, в плейбуках, применяющихся в реальных проектах, будет описано большее число этапов. Например, это может быть проверка ранее установленного ПО или управление сервисами. А почему бы не использовать нечто вроде следующей конструкции?
tasks: — name: ‘Install my_app’ yum: name: ‘my_app’
Теперь давайте посмотрим на наше Go-приложение. Это — простой сервер, поддерживающий работу веб-страницы. Вот код файла main.go :
package main import ( «encoding/json» «flag» «fmt» «io/ioutil» «log» «net/http» ) type config struct < Text string `json:»string»` >func main() < var filename = flag.String(«config», «config.json», «») flag.Parse() data, err := ioutil.ReadFile(*filename) if err != nil < log.Fatalln(err) >var config config err = json.Unmarshal(data, log.Fatalln(err) >http.HandleFunc(«/», func(w http.ResponseWriter, r *http.Request) < fmt.Fprintf(w, config.Text) >) log.Fatal(http.ListenAndServe(«:8081», nil)) >
Вот — содержимое config.json :
Если запустить эту программу, то, обратившись к ней, учитывая то, что сервер ожидает подключения на порту 8081, можно увидеть веб-страницу с текстом из config.json . Программа эта, конечно, далека от готовности к продакшну, но для наших экспериментов она вполне подойдёт.
Добавление сервисов
А как насчёт сервисов? Использование сервисов — это отличный способ унификации управления приложением. Поэтому создадим файл my_app.service :
[Unit] Description=My App [Service] Type=simple ExecStart=/usr/bin/my_app -config /etc/my_app/config.json [Install] WantedBy=multi-user.target
Каждый раз, когда мы соберёмся развернуть приложение, нужно будет выполнить следующие действия:
- Скомпилировать проект.
- Скопировать его в /usr/bin/my_app .
- Скопировать файл config.json в /etc/my_app/config.json .
- Скопировать my_app.service в /etc/systemd/system/ .
- Запустить сервис.
Создание .spec-файла
RPM, что характерно и для Ansible, нуждается в файле определений, в котором описываются этапы установки программы, её зависимости, и другие действия, которые может понадобиться выполнить для установки программы на сервер:
$ sudo dnf install git $ sudo dnf module install go-toolset $ sudo dnf groupinstall «RPM Development Tools»
После того, как всё это установлено, мы готовы к тому, чтобы создать файл определений для пакета, известный ещё как .spec-файл:
$ rpmdev-newspec my_app.spec
Составить подобный файл может быть непросто. Нам, в деле создания этого файла, поможет утилита rpmdev-newspec . Вот его содержимое:
Name: my_app Version: 1.0 Release: 1% Summary: A simple web app License: GPLv3 Source0: %-%.tar.gz BuildRequires: golang BuildRequires: systemd-rpm-macros Provides: % = % %description A simple web app %global debug_package % %prep %autosetup %build go build -v -o % %install install -Dpm 0755 % %%/% install -Dpm 0755 config.json %%/%/config.json install -Dpm 644 %.service %%/%.service %check # go test should be here. 🙂 %post %systemd_post %.service %preun %systemd_preun %.service %files %dir %/% %/% %/%.service %config(noreplace) %/%/config.json %changelog * Wed May 19 2021 John Doe — 1.0-1 — First release%changelog
Тут мне хотелось бы обратить ваше внимание на несколько моментов:
- Запись Source0 может представлять собой ссылку на репозиторий с исходным кодом. Например, она может выглядеть так: https://github.com/user/my_app/archive/v%version.tar.gz .
- Если в Source0 используется URL, то для загрузки исходного кода приложения можно воспользоваться командой spectool -g my_app.spec .
- Git позволяет быстро, не создавая удалённый репозиторий, генерировать tar-архивы:
$ git archive —format=tar.gz —prefix=my_app-1.0/ -o my_app-1.0.tar.gz HEAD
$tar tf my_app-1.0.tar.gz my_app-1.0/ my_app-1.0/config.json my_app-1.0/main.go my_app-1.0/my_app.service
Сборка RPM-пакета
Первым делом нам надо создать структуру директорий rpmbuild и поместить наш tar-архив в директорию SOURCES :
$ rpmdev-setuptree $ mv my_app-1.0.tar.gz ~/rpmbuild/SOURCES
После этого соберём RPM-пакет для Red Hat Enterprise Linux 8:
$ rpmbuild -ba my_app.spec
Теперь у нас должна появиться возможность установить RPM-пакет и запустить наш сервис:
$ sudo dnf install ~/rpmbuild/RPMS/x86_64/my_app-1.0-1.el8.x86_64.rpm $ sudo systemctl start my_app $ curl -L http://localhost:8081
Если всё было сделано правильно, то, выполнив вышеописанную последовательность команд, вы должны увидеть содержимое файла config.json (который, кстати, находится в папке /etc/my_app ).
А что если появится новая версия нашего приложения? Как создать новый пакет для её установки? Сделать это очень просто — достаточно увеличить номер версии программы в .spec-файле и снова собрать пакет. А DNF обнаружит, что появилось обновление нашей программы.
А если вы пользуетесь репозиторием пакетов — нужно лишь выполнить команду dnf update my_app .
Итоги
Если вы хотите лучше разобраться с тем, как интегрировать RPM-файлы в свои рабочие процессы, советую взглянуть на это и это руководства.
Кроме того, существует множество восхитительных инструментов, способных помочь в деле сборки RPM-пакетов. Есть и инструменты, умеющие создавать репозитории, которыми может воспользоваться разработчик. Это, например, mock, fedpkg, COPR и Koji. Эти инструменты могут пригодиться в проектах, где реализуются сложные сценарии развёртывания ПО. Например — там, где есть множество зависимостей, где в процессе развёртывания имеются сложные этапы, или там, где нужна поддержка нескольких архитектур.
Применяете ли вы RPM-пакеты, созданные самостоятельно?
- Блог компании RUVDS.com
- Программирование
- Go
Источник: h.amazingsoftworks.com