создать пакет .deb из скриптов или двоичных файлов

73

Я искал простой способ создания пакетов .deb для вещей, у которых нет исходного кода для компиляции (конфиги, скрипты, проприетарное программное обеспечение). Это было довольно проблематично, потому что в большинстве обучающих пакетов предполагается, что у вас есть архив с исходным кодом, который вы хотите скомпилировать. Затем я нашел этот короткий учебник (немецкий).

После этого я создал небольшой скрипт для создания простого репозитория. Нравится:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

Я добавил ключ к связке ключей apt и включил источник, подобный этому:

deb http://my.default.com/my-repository/ ./

Похоже, что сам репозиторий работает хорошо (я столкнулся с некоторыми проблемами, чтобы исправить их, мне нужно было добавить пакеты дважды и сделать временный файл временным решением для файла Release). Я также положил в репозиторий несколько загруженных .deb, похоже, они тоже работают без проблем. Но мои собственные пакеты не были ... Когда я делаю sudo apt-get update, они вызывают такие ошибки:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

Кто-нибудь знает, что я сделал не так?

ОБНОВЛЕНИЕ 2012-03-06: Просто подсказка для другого человека, который ищет простой способ создания DEB: взгляните на FPM .

Томас Дойч
источник
Вы добавили файл DEBIAN / control в пакет, который содержит поле Зависит от:?
Билал Ахтар
5
Btw. Сейчас я использую FPM для своих потребностей в упаковке: github.com/jordansissel/fpm
Thomas Deutsch,
FWIW, я получил то же самое сообщение об ошибке в пакете, который я построил, потому что я указал одну из зависимостей неправильно. Я написал «foo> = 2.1», когда это должно быть «foo (> = 2.1)». Я потратил больше часа на просмотр последней половины ошибки, прежде чем понял, что первая половина ошибки говорила мне, что именно было не так ... (PS: FPM качается. Вы тоже смотрите на Aptly.)
Марк Э. Haase
2
Я бы категорически согласился с тем, что не существует учебных пособий или руководств по упаковке чего-либо, что не происходит из tar-шара с файлами make и т. Д. Очень сложно понять, как это сделать. Нам нужно такое руководство для таких людей, как Java-разработчики, которые хотят распространить войну с несколькими сценариями и, возможно, liquibase, но не являются администраторами Debian sys или сопровождающими Debian. FPM не помогает в этом случае, так как требует, чтобы вы уже знали, как создать что-то, что можно упаковать.
Джон Литтл
1
Большое спасибо за то, что поделились информацией о fpm. Это работает как шарм!
Дамиан Надалес

Ответы:

70

Учебник, который вы связали, использует низкоуровневый подход для создания пакета. Такой подход обычно не рекомендуется и может привести к всевозможным проблемам, если не сделать это тщательно.

Создать .deb для скрипта очень просто, если вы поймете основы упаковки. В двух словах:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

Чтобы добавить больше сценариев, их необходимо скопировать в каталог и добавить в файл debian / install - затем просто перезапустите debuild. Вы также должны проверить и обновить файлы debian / * по мере необходимости.

Вы должны прочитать страницы человека для: dh_make, dh_installиdebuild

Жоау Пинту
источник
3
Отредактируйте debian / control, «Architecture: any» необходимо изменить на «Architecture: all». Не забудьте задать вопрос в качестве ответа;)
Жоау Пинту
3
Помимо переименования каталога и обновления debian / changelog вы должны создать архив .orig, соответствующий новой версии, это архив с содержимым исходного каталога (без включения debian /).
Жоау Пинту
1
С каталог включают в себя, что я обычно делаю что - то вроде: ср SourceDir sourcedir.orig && гт -rf sourcedir.orig / Debian && деготь czvf filename.orig.tar.gz sourcedir.orig
Жоау Пинту
1
Добавление --indepфлага к dh_makeсделает пакет «Архитектура: все» Также -bфлаг не существует в 11.04 и выше.
Andrewsomething
1
После создания пакета .deb вы должны проверить наличие ошибок и улучшений с помощью lintian somescripts_0.1-1_i386.debили lintian package-source.changes- см .: packaging.ubuntu.com/html/…
rubo77