75

I searched for a simple way to create .deb Packages for things which have no source code to compile (configs, shellscripts, proprietary software). This was quite a problem because most of the package tutorials are assuming you have a source tarball you want to compile. Then I've found this short tutorial (german).

Afterwards, I created a small script to create a simple repository. Like this:

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

I added the key to the apt keyring and included the source like this:

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

It looks like the repo itself is working well (I ran into some problems, to fix them I needed to add the Packages twice and make the temp-file workaround for the Release file). I also put some downloaded .deb into the repo, it looks like they are also working without problems. But my self created packages didn't... Wenn i do sudo apt-get update, they are causing errors like this:

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.

Has anyone an idea what I did wrong?

UPDATE 2012-03-06: Just a a hint for another person who is searching for a easy way to create DEBs: Take a look at FPM.

5
  • Did you add a DEBIAN/control file to the package, which contains the field Depends: ? Feb 23, 2011 at 12:30
  • 5
    Btw. Now I'm using FPM for my packaging needs: github.com/jordansissel/fpm Oct 27, 2011 at 13:10
  • FWIW, I got the same error message on a package that I built because I had specified one of the dependencies incorrectly. I had written "foo >= 2.1" when it should be "foo (>= 2.1)". I spent over an hour looking at the last half of the error before I realized the first half of the error was telling me exactly what was wrong... (PS: FPM rocks. You look at Aptly, too.) Aug 1, 2014 at 3:42
  • 2
    I would strongly agree that there are no tutorials or guides for packaging something which does not come from a tar ball with make files etc. It is very difficult to work out how to do this. We need such a guide for people like java developers who want to distribute a war with a few scripts and perhaps liquibase, but are not debian sys admins or debian maintainers. FPM does not help in this case, as it too requires that you already know how create something it can package. Jan 15, 2016 at 9:42
  • 1
    Thanks so much for sharing the information about fpm. It works like charm! May 8, 2018 at 9:14

1 Answer 1

76

The tutorial you have linked uses a low level approach for building a package. Such an approach is not usually recommended and may lead to all sorts of issues when not done carefully.

Creating a .deb for a script is very simple once you understand packaging basics. In a nutshell:

# 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

Adding more scripts requires them to be copied to the directory and added to the debian/install file -- then just re-run debuild. You should also check and update the debian/* files as required .

You should read the man pages for: dh_make, dh_install, and debuild

15
  • 4
    Edit debian/control, "Architecture: any" must be changed to "Architecture: all". Don't forget to set the question as answered ;) Feb 23, 2011 at 14:30
  • 3
    Apart renaming the directory and updating debian/changelog you must create the .orig archive corresponding to the new version, this is an archive form the source directory contents (without including debian/) . Feb 24, 2011 at 9:51
  • 1
    With the directory include, what I usually do is something like: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig/debian && tar czvf filename.orig.tar.gz sourcedir.orig Feb 24, 2011 at 10:07
  • 1
    Adding the --indep flag to dh_make will make the package "Architecture: all" Also the -b flag doesn't exist in 11.04 and above. Aug 26, 2011 at 12:33
  • 4
    dh_make: error: argument -i/--indep: not allowed with argument -s/--single May 29, 2017 at 19:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.