Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

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.

share|improve this question
    
Did you add a DEBIAN/control file to the package, which contains the field Depends: ? –  Bilal Akhtar Feb 23 '11 at 12:30
    
Btw. Now I'm using FPM for my packaging needs: github.com/jordansissel/fpm –  Thomas Deutsch Oct 27 '11 at 13:10
add comment

1 Answer

up vote 31 down vote accepted

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:

# Create your scripts source dir
mkdir somescripts-0.1

# Copy your script to the source dir
cp ~/myscript.sh somescripts-0.1 
cd somescripts-0.1

# 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 myscript.sh usr/bin > debian/install 

# We don't want a quilt based package
echo "1.0" > debian/source/format 

# 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 -us -uc 

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

share|improve this answer
    
Looks good. I got an _amd64 deb. Since those scripts are not arch specific, what can i do to get an deb for all architectures? –  Thomas Deutsch Feb 23 '11 at 14:24
2  
Edit debian/control, "Architecture: any" must be changed to "Architecture: all". Don't forget to set the question as answered ;) –  João Pinto Feb 23 '11 at 14:30
2  
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/) . –  João Pinto Feb 24 '11 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 –  João Pinto Feb 24 '11 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. –  andrewsomething Aug 26 '11 at 12:33
show 3 more comments

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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