створити .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

Я додав ключ до підходящої брелоки та включив джерело на зразок цього:

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

Схоже, саме РЕПО працює добре (я зіткнувся з деякими проблемами, щоб їх виправити, мені потрібно було двічі додати пакети та вирішити тимчасовий файл для випуску файла Release). Я також помістив кілька завантажених файлів .deb у репо, схоже, вони також працюють без проблем. Але мої самостійно створені пакети не стали ... Wenn I do 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
Я повністю погоджуюся з тим, що не існує навчальних посібників чи посібників для упаковки чогось, що не походить з кульки дьогтю з файлами make тощо. Дуже важко розробити, як це зробити. Такий посібник нам потрібен для таких людей, як розробники Java, які хочуть розповсюдити війну за допомогою декількох сценаріїв і, можливо, ліквідної бази, але не є debian sys admins або 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, "Архітектура: будь-яка", слід змінити на "Архітектура: усі". Не забудьте встановити питання як відповідь;)
Жоао Пінто,

3
Крім перейменування каталогу та оновлення debian / changelog, ви повинні створити .orig архів, відповідний новій версії, це архів із вмісту вихідного каталогу (не включаючи debian /).
Жоао Пінто,

1
З каталогу включайте те, що я зазвичай роблю - це щось на зразок: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.