Иногда появляется необходимость быстро сделать deb пакет для вашей Debian системы. Тут есть четыре выхода:
Итак, компилируем нужный нам пакет способом, указанным его автором. Обычно это делается через configure скрипт и утилиту make:
Если в системе установлены все необходимые зависимости для компиляции данного пакета, он отконфигурируется и откомпилируется нормально. Теперь нужно установить нашу программу в локальный подкаталог. Обычно это делается через make install с заданием переменной DESTDIR:
Переменная DESTDIR указывает утилите make, куда надо копировать файлы. Без неё make будет пытаться копировать файлы в корень системы. Некоторые системы сборки не поддерживают переменную DESTDIR, но поддерживают что-то аналогичное, например INSTALL_DIR:
Программы, собранные через qmake, устанавливаются через переменную INSTALL_ROOT:
Некоторые системы сборки вообще не поддерживают такие переменные окружения, в этом случае файлы придётся копировать самому. Помните, что в подкаталоге B должны располагаться зеркальная иерархия корня системы, то есть так, как эти файлы должны лежать в системе со всеми подкаталогами. Например:
Теперь надо создать специальный каталог для утилиты dpkg-deb и задать ему права доступа (если они не равны 0755 по-умолчанию):
В этом каталоге будут располагаться специальные файлы, которые необходимы для сборки deb пакета. Как минимум должен присутствовать файл control, в котором описывается имя пакета, его размер и т.д:
Здесь мы указываем имя пакета, версию, размер, зависимости, имя сопровождающего, описание пакета и др. Описание пакета обычно идёт в самом конце, и должно заканчиваться одной пустой строкой.
В этом же каталоге DEBIAN могут лежать скрипты, которые используются пакетным менеджером во время установки пакета - preinst, postinst, prerm, postrm. Они нужны, если вы хотите выполнять какие-то действия до установки пакета, после установки, до удаления и после удаления, о чём говорят названия скриптов. Все они являются необязательными.
Наконец, собираем пакет:
Имя файла пакета обычно включает имя пакета (logon), версию (1.0-1), архитектуру (i386). Теперь можете установить свой пакет через dpkg:
Ссылки:
- попросить это сделать специалиста;
- собрать через checkinstall;
- самому написать инфраструктуру для сборки пакета;
- использовать dpkg-deb;
Итак, компилируем нужный нам пакет способом, указанным его автором. Обычно это делается через configure скрипт и утилиту make:
./configure make
Если в системе установлены все необходимые зависимости для компиляции данного пакета, он отконфигурируется и откомпилируется нормально. Теперь нужно установить нашу программу в локальный подкаталог. Обычно это делается через make install с заданием переменной DESTDIR:
mkdir B make install DESTDIR="$PWD/B"
Переменная DESTDIR указывает утилите make, куда надо копировать файлы. Без неё make будет пытаться копировать файлы в корень системы. Некоторые системы сборки не поддерживают переменную DESTDIR, но поддерживают что-то аналогичное, например INSTALL_DIR:
mkdir B make install INSTALL_DIR="$PWD/B"
Программы, собранные через qmake, устанавливаются через переменную INSTALL_ROOT:
mkdir B make install INSTALL_ROOT="$PWD/B"
Некоторые системы сборки вообще не поддерживают такие переменные окружения, в этом случае файлы придётся копировать самому. Помните, что в подкаталоге B должны располагаться зеркальная иерархия корня системы, то есть так, как эти файлы должны лежать в системе со всеми подкаталогами. Например:
$ find B B B/usr B/usr/local B/usr/local/bin B/usr/local/bin/logon B/usr/local/share B/usr/local/share/logon B/usr/local/share/logon/pixmap.png
Теперь надо создать специальный каталог для утилиты dpkg-deb и задать ему права доступа (если они не равны 0755 по-умолчанию):
mkdir B/DEBIAN chmod 0755 B/DEBIAN
В этом каталоге будут располагаться специальные файлы, которые необходимы для сборки deb пакета. Как минимум должен присутствовать файл control, в котором описывается имя пакета, его размер и т.д:
$ cat B/DEBIAN/control Package: logon Version: 1.0-1 Architecture: i386 Maintainer: MeInstalled-Size: 10132 Depends: libx11-6, libqt4-core, libqt4-gui, libqt4-dbus Section: x11 Priority: optional Description: My small logon application
Здесь мы указываем имя пакета, версию, размер, зависимости, имя сопровождающего, описание пакета и др. Описание пакета обычно идёт в самом конце, и должно заканчиваться одной пустой строкой.
В этом же каталоге DEBIAN могут лежать скрипты, которые используются пакетным менеджером во время установки пакета - preinst, postinst, prerm, postrm. Они нужны, если вы хотите выполнять какие-то действия до установки пакета, после установки, до удаления и после удаления, о чём говорят названия скриптов. Все они являются необязательными.
Наконец, собираем пакет:
dpkg-deb -b B logon_1.0-1_i386.deb
Имя файла пакета обычно включает имя пакета (logon), версию (1.0-1), архитектуру (i386). Теперь можете установить свой пакет через dpkg:
sudo dpkg -i logon_1.0-1_i386.deb
Ссылки:
5 комментариев:
Спасибо. Доходчиво и без воды
Спасибо. Работает.
В убунте нет переменной окружения INSTALL_DIR
Можно обойти это, задав префикс при конфигурировании
./configure --prefix="$PWD/B"
make
make install
>>В убунте нет переменной окружения INSTALL_DIR
INSTALL_DIR - это не переменная окружения, это переменная внутри Makefile. Разные тулкиты генерируют разные переменные такого назначения в своих Makefile-ах. Qmake использует INSTALL_ROOT, autoconf - DESTDIR и т.д.
Вы должны знать, какую именно переменную использует ваш Makefile чтобы правильно установить программу через make install.
Использование --prefix крайне не рекомендуется, потому что многие программы используют заданный вами префикс для поиска своих ресурсов, например, картинок. И на чужой системе, куда вы поставили deb пакет, будут по-прежнему искать свои ресурсы по пути, заданному вами в --prefix.
Дмитрий, спасибо за ценное пояснение!
Отправить комментарий