Как создать метапакет, который автоматически устанавливает другие пакеты?

54

Я хотел бы иметь возможность создавать пакет, который не содержит сам код или программы, но вместо этого устанавливает другие пакеты, которые существуют в репозиториях, на компьютер, что-то вроде ubuntu-restricted-extrasпакета?

Томас Уорд
источник

Ответы:

47

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

Сначала создайте каталог:

mkdir my-metapackage
cd my-metapackage/

Теперь запустите программу:

equivs-control ns-control

Это создаст файл с именем ns-control, откройте этот файл с вашим текстовым редактором. В создаваемом вами файле управления должны быть изменены его строки Dependsили Recommendsстроки, чтобы они зависели от установленных вами пакетов:

Section: misc
Priority: optional
Standards-Version: 3.9.1

Package: my-metapackage
Version: 1.0   
Depends: openssh-server, gedit
Description: This package installes an ssh server and a text editor
 The Long description of this package ends with a newline!

(Просто пример, вы должны включить больше информации)

И, наконец, соберите пакет, запустив

equivs-build ns-control

Ваша посылка находится по адресу my-metapackage/my-metapackage_1.0_all.deb.

Если вы хотите , чтобы также создать пакет источника, то --fullпараметр может быть передан equivs-build, например equivs-build --full ns-control. Это будет использовать debuild, а также создавать файлы .dsc & .tar.gz.

Чтобы создать исходный файл .changes, который вы можете загрузить в PPA, извлеките и соберите исходный пакет с помощью

dpkg-source -x my-metapackage_1.0.dsc
cd my-metapackage-1.0
debuild -S

Если Maintainer, который вы установили в ns-control, совпадает с вашим ключом GPG, он должен создать и подписать файл my-metapackage_1.0_source.changes, чтобы вы передали его на ваш PPA

ajmitch
источник
Большое спасибо. Я, скорее всего, протестирую это позже, но пока инструкции сработали. :)
Томас Уорд
2
Работает отлично!
Стефано Палаццо
Спасибо за ответ, ajmitch, но только из-за причин, я собираюсь указать, что если у вас есть ~/.devscriptsфайл и определенно определите другой ключ GPG для использования в файле devscripts, он ЗАПРЕЩАЕТ процесс dpkg / debuild и получит его используйте конкретный ключ GPG, указанный в .devscripts. Так же, как примечательный пункт для последнего предложения в вашем ответе
Томас Уорд
Я заметил, что размещение пакетов Depends:делает установку хорошей, если и только если пакеты есть; он не устанавливает их, если они не на моей машине. Чтобы установить их, я использовал Providesвместо этого, и это работает как шарм. Смотрите мой код (только что изменил): github.com/palladius/debian-packages/blob/master/…
Риккардо