дебиан,
системное
17 коммент.
Распаковка существующих пакетов
Сначала посмотрим, что внутри пакета deb или rpm.Распаковка deb-пакета
Распаковать пакет Debian нужно в два этапа - сначала извлекаем из него файлы, а потом добираемся до собственно бинарников. Вскрываем пакетик:# ar vx mypackage.debФайл пакета mypackage.deb содержит три вложенных файла:
- debian-binary - это текстовый файл, который содержит информацию о версии пакета (например: 2.0)
- control.tar.gz - этот архив содержит всю мета-информацию: имя и версию пакета, зависимости и прочее.
- data.tar.gz - собственно, бинарники программы, необходимые для работы. Именно эти файлы будут разархивированы в каталог /usr для дальнейшего использования.
$ tar -xzvf data.tar.gzВ текущем каталоге появится ./usr текущего каталога. Желанный бинарник лежит в ./usr/bin подкаталоге.
Если же вам нужно просто извлечь файлы из пакета, можно всё сделать одной командой
$ ar p mypackage.deb data.tar.gz | tar zxэто распакует пакет deb в текущий каталог. Другой вариант - использовать dpkg-deb в виде:
$ dpkg-deb -x что.deb куда/
Распаковка rpm-пакета
На всякий случай о том, как распаковать пакеты$ rpm2cpio mypackage.rpm | cpio -vidЕсли же нужно просмотреть содержимое пакета, не распаковывая его, даём команду:
$ rpm2cpio mypackage.rpm | cpio -vtДля того, чтобы (попытаться) конвертировать RPM-пакет в Debian, можно воспользоваться командой:
# alien mypack.i386.rpmНадо сказать, что пакеты RPM и DEB сильно отличаются друг и друга, и такое простое конвертирование не всегда проходит.
Deb-пакет из бинарного файла
Теперь, когда мы знаем, что ничего волшебного внутри deb-пакетов нет, можно попробовать сварганить свой собственный дебиановский пакетик.Часто хочется сделать побыстрее, чтоб "завелось и поехало" - и вместо пакетов пользователи устанавливают программы в виде ./configure, make & make install (вместо make install можно использовать checkinstall). Как уже говорилось не раз, не стоит поддаваться искушению и ставить программы в Linux в обход менеджера пакетов - пакетный менеджер ничего о них знать не будет, и при обновлении системы вы рискуете получить больше проблем на свою голову, чем представляете.Иногда бывает так, что исходников к пакету нет - скажем, поступила к нам проприетарщина, а упаковать её в пакет хочется. Или мы наваяли скрипт, и хочется, чтобы он был на многих машинах. Нет проблем: завернём это в deb-пакет и скормим apt-у.
Для этого нам понадобится утилита
# apt-get install dpkg-devПодопытным кроликом будет служить бинарный файл системы контроля версий fossil, о котором уже говорилось ранее.
Идея в том, чтобы в локальном каталоге (назовём его ~./tempprog) отдублировать структуру каталогов для программы так, как она лежала бы в системе в установленном виде. Большинство бинарников находится в системном каталоге /usr/bin, поэтому создаём такую же структуру в локальном:
$ mkdir -p ./tempprog/usr/bin/Так мы создадим все подкаталоги за один проход. Зайдём внутрь:
$ cd tempprog/и увидим созданные подкаталоги:
$ treeВот они:
.
└── usr
└── bin
2 directories, 0 files
Отлично, теперь в локальном каталоге ./tempprog создаём подкаталог ./DEBIAN:
$ mkdir ./DEBIAN
Внутри подкаталога ./DEBIAN создаём текстовый файл control с таким содержимым:
Package: имя-пакета Version: версия пакета, скажем 1.0 или 2.7.9. Architecture: архитектура(i386, amd64, all...) Maintainer: сопровождающий_пакета Installed-Size: размер программы в килобайтах Depends: зависимости (пакет (>= версия)) Recommends: рекомендации (пакет (>= версия)) Suggests: предложения (пакет) Section: секция (multimedia, games, system, или другое) Priority: приоритет (optional) Homepage: http://www.домашняя_страница Description: описание программы
Таким образом, в нашем локальном каталоге ./tempprog будет лежать вот что:
.
├── DEBIAN
│.. └── control
└── usr
└── bin
└── fossil
3 directories, 2 files
Теперь из каталога ./tempprog даём команду на сборку этого простенького пакета:
$ dpkg-deb -b ./ ./В результате появится пакет (в нашем примере с fossil) вида:
fossil_1.21_i386.debкоторый можно сразу же установить в систему:
$ sudo dpkg -i fossil_1.21_i386.deb [sudo] password for starscream: Selecting previously deselected package fossil. (Reading database ... 247627 files and directories currently installed.) Unpacking fossil (from fossil_1.21_i386.deb) ... Setting up fossil (1.21) ...
И всё, наступает счастье.
Небольшое примечание: если кто хочет установить программу в директорию
/opt/ нужно сделать следующее:
- В локальном каталоге ./tempprog создаём каталог /opt/ и размещаем там
программу так, как она и будет установлена в /opt
- Там же, в ./tempprog создаём подкаталоги /tempprog/usr/bin/
в котором размещаем небольшой скрипт, например zotero
- В нём пишем:
#! /bin/sh PATH=$PATH:/opt/zotero/ /opt/zotero/zotero
Это говорит системе, что теперь можно запускать файлы и из /opt/zotero
Deb-пакет из исходников на скорую руку
Здесь приводится простой вариант упаковки исходников, если все зависимости уже на месте и нам ничего не нужно делать. В общем случае это не так, и сборка пакетов с прописыванием зависимостей представляет собой довольно нетривиальный процесс.Если нам повезло и все зависимости уже в системе, можно скомпилировать исходные тексты программы и по-быстрому завернуть всё в пакет Debian.
Для этого скачанные исходные тексты программы (для примера foobar версии 1.2.3) распаковываем в каталог foobar-1.2.3, и от рута даём команду:
# dh_make --createorigДалее пишем
# debuildОпять, если нам повезло, всё должно собраться без вопросов. Полученный пакет устанавливаем
# dpkg -i foobar_1.2.3-1_i386.debОхочим до тонкостей дебиановской кулинарии и прочим правильно писающим мальчикам просьба пройти сюда и насладиться The Debian Administrator's Handbook. Эта
Создание собственного локального репозитория Debian своими руками
Когда количество собственноручно собранных пакетов перевалит за десяток, захочется удобства и комфорта установки софта. К счастью, создание собственного локального репозитория - дело сравнительно простое.Создаём каталог, в котором будут лежать все собранные непосильным трудом пакеты - пусть это будет ~/zips/virensdebianrepositor в который копируем deb-пакеты.
Для создания репозитория нам понадобится dpkg-scanpackages который является (во всяком случае на момент написания поста) частью пакета dpkg-dev, как это неожиданно выяснилось.
Создаём список пакетов:
$ dpkg-scanpackages . /dev/null | gzip -9c > ./Packages.gzМожет быть, нам будет выведено сообщение типа:
dpkg-scanpackages: warning: Packages in archive but missing from override file: dpkg-scanpackages: warning: fossil linux-headers-3.8.0-avl9-pae linux-image-3.8.0-avl9-pae pdfsam sublimetext virtualbox-4.2 xserver-xorg-input-wacom zotero dpkg-scanpackages: info: Wrote 8 entries to output Packages file.
Теперь в нашем репозитории 8 пакетов. Отлично, добавляем наш репозиторий в файл:
# vim /etc/apt/sources.listстрочкой типа:
deb file:///home/имя_пользователя/zips/virensdebianrepository ./
Теперь нужно обновить список пакетов, чтобы они стали доступны для установки:
# apt-get updateВсё, теперь можно установить, к примеру, свежесобранный текстовый редактор Sublime Text 2 (отличная инструкция там) как всегда: Теперь, для того, чтобы установить SublimeText достаточно сделать:
# apt-get install sublimetext
Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: sublimetext 0 upgraded, 1 newly installed, 0 to remove and 245 not upgraded. Need to get 0 B/11.4 MB of archives. After this operation, 17.4 MB of additional disk space will be used. WARNING: The following packages cannot be authenticated! sublimetext Install these packages without verification [y/N]? Y Selecting previously deselected package sublimetext. (Reading database ... 247813 files and directories currently installed.) Unpacking sublimetext (from ..././sublimetext_2.0.2_i386.deb) ... Setting up sublimetext (2.0.2) ...Всё, пакет будет распакован и установлен, а то, что он из местного репозитория, видно вот тут: (from ..././sublimetext_2.0.2_i386.deb)





















