The Grand DEB Packaging Thread!
Packaging .deb files is easier than what you may think, it is mainly a 3 step procedure:
1. Having files of your package in /home/user/ 2. Creating a folder inside the package's folder called DEBIAN, which consists of the Debian build files, we're interested in three of them: 2a) control: A file that tells dpkg how to build the package. (Mandatory) 2b) preinst: A script executed before the app installation. (Can be omitted) 2c) postinst: A script executed after the app installation. (Can be omitted) 3. The actual building of the package Packaging Executable Apps Let's take an example app that you have already coded, foo. Assuming the executable file foo is in ./MyDocs this is what should be done: 1. We are going to create a folder in /home/user called foopackage, which contains all the folder hierarchy. (NOTE: The path should be /home/user not /home/user/MyDocs since files there cannot have their permissions edited.) Code:
mkdir -p /home/user/foopackage Code:
mkdir -p /home/user/foopackage/opt Code:
cp /home/user/MyDocs/foo /home/user/foopackage/opt/foopackage/ Code:
mkdir -p /home/user/foopackage/usr/share Code:
cp /home/user/MyDocs/foo.desktop /home/user/foopackage/usr/share/applications/hildon/ Code:
mkdir -p /home/user/foopackage/usr/share/pixmaps 7. This is all of the basic things prepared. If you use more files, say required by the app, then just create the corresponding hierarchies and copy them to there. In this context, foo is now complete. Final hierarchy to build is the DEBIAN folder, which consists of the files mentioned that state how to build the package. The DEBIAN folder and all files inside should have 755 permisions. Code:
mkdir /home/user/foopackage/DEBIAN Code:
leafpad or nano or vi or any text editor /home/user/foopackage/DEBIAN/control Code:
Package: The-Amazing-Foo Code:
chmod 755 /home/user/foopackage/DEBIAN/* Code:
apt-get update 10. Let's build! Code:
dpkg-deb -b /home/user/foopackage Packaging a File or a Batch of Files Take a theme for example, it is basically a folder with lots of folders and icons in it. It is much easier than an app. We are going to take a folder called themfoo, which is a folder containing many other files and folders in it, a typical theme. 1. First thing is to copy the whole folder to /home/user: Code:
cp -rp /home/user/MyDocs/themefoo /home/user Code:
mkdir -p /home/user/themefoo/DEBIAN Code:
leafpad or nano or vi or any text editor /home/user/themfoo/DEBIAN/control Code:
Package: The-Amazing-Foo-Theme Code:
chmod 755 /home/user/themefoo/DEBIAN/* Code:
dpkg-deb -b /home/user/themefoo Summary When a .deb package is installed, its contents get extracted to the folders in the hierarchy. If a package for example consists of a folder called gaga, and that folder contains a file called lady, then after the deb package is installed you will find a folder called gaga with a file called lady in it on your device. The process is very simple, just drop whatever files and folders you want extracted to their respective hierarchies, and create the DEBIAN directory with the control file then build the package and VOILA! A diagram illustrating foopackage,deb: http://i.imgur.com/6pna2.jpg So you know now that after installing the package the files foo.desktop will be extracted to usr/share/applications/hildon and that the file foo will be extracted to /usr/bin and that foo.png will be extracted to /usr/share/pixmaps |
Re: The Grand DEB Packaging Thread!
Thanks for this nice tutorial. Could you please consider transferring this whole post to Wiki, as Wiki page?
Also, post about using dput to transfer .deb into repositories (omitting autobuilder) could greatly increase packages couunt in repository, at the same time decreasing number of available-only-from-forum-threads-hidden-somewhere programs ;) /Estel |
Re: The Grand DEB Packaging Thread!
Quote:
Sure, I will add lots of more tutorials, this one took me 20 mins to write. Once all of them sum app and link to each other, I will create a page in the WIKI about deb packaging on the N900 or any Linux Distro. BTW, I heard that Xterminal on the N9 uses a trimmed down version of Busybox, is that so? I mean, is GNU tar present? What about dpkg --build? |
Re: The Grand DEB Packaging Thread!
Actually, this wink wasn't meant at You program, as i don't use it (no offense). It was rather about plentora of posts like "I would put it into repos, but I don't have time to learn autobuilder, could someone do it for me?".
As for harmattan, I have no idea - thankfully, no need to even touch it ;) |
Re: The Grand DEB Packaging Thread!
Quote:
I haven't touched it yet either, any body in here with an N9? |
Re: The Grand DEB Packaging Thread!
Yes, MeeGo 1.2 Harmattan has 'dpkg-dev' package (when Harmattan SDK repository is enabled). As well as 'build-essential' (installation of 93 MB). Also 'bsdtar' is available.
So 'dpkg-deb', g++, etc, are available in Nokia N9/N950. |
Re: The Grand DEB Packaging Thread!
Quote:
|
Re: The Grand DEB Packaging Thread!
This how-to does not take into account that the N900 has very limited space on / where /usr resides. Therefore it would be good to move all package contents from /usr to /opt and create symlinks in /usr. This is what Maemo users call "optification" of a package.
Except for that it's a nice tutorial. |
Re: The Grand DEB Packaging Thread!
Quote:
|
Re: The Grand DEB Packaging Thread!
Well I have 12Gigs for installable applications, and the rest as MyDocs.
|
Re: The Grand DEB Packaging Thread!
... which doesn't change the fact, that "Grand .deb packaging thread" on talk.maemo.org should take optification into account. ammyt, could You please fix instructions ASAP?
/Estel |
Re: The Grand DEB Packaging Thread!
Quote:
|
Re: The Grand DEB Packaging Thread!
Done, now drawing a new map of the files.
|
Re: The Grand DEB Packaging Thread!
Is it possible to make the .changes file this way?
|
Re: The Grand DEB Packaging Thread!
thanks for the wonderful tutorial. can you also mention how to push to maemo repo?
|
Re: The Grand DEB Packaging Thread!
Quote:
|
Re: The Grand DEB Packaging Thread!
Good start, but your optification link won't work since it points to the wrong directory.
Code:
ln -s /home/user/foopackage/opt/foopackage/foo /home/user/foopackage/usr/bin/foo So change your ln command accordingly: Code:
ln -s /opt/foopackage/foo /home/user/foopackage/usr/bin/foo |
Re: The Grand DEB Packaging Thread!
Ive got issues with installing my DEBs. They wont install.
"aegies rejecting control file" Ive got 755 permissions on package files, DEBIAN folder and control file Help?! |
Re: The Grand DEB Packaging Thread!
a note on the optification/symlinking
i guess it would be best to symlink in the postinst script, as symlinking to your build enviroment wont work and symlinking in your /usr/bin will only work on the machine you did the linking on. another one on the control file: most apps will have dependencies, how about you include info on dependency handling. for example: Code:
Package: acme |
Re: The Grand DEB Packaging Thread!
Quote:
Quote:
|
Re: The Grand DEB Packaging Thread!
How to create a .changes file this way?
Without it I cannot upload to extras-devel |
Re: The Grand DEB Packaging Thread!
How to create the .changes file this way?
|
Re: The Grand DEB Packaging Thread!
Quote:
When I run this command: Code:
dpkg-deb -b /path/to/package Code:
tar: unrecognized option '--format=gnu' |
Re: The Grand DEB Packaging Thread!
Ive got issues with installing my DEBs. They wont install.
"aegies rejecting control file" Ive got 755 permissions on package files, DEBIAN folder and control file Help?! |
Re: The Grand DEB Packaging Thread!
Quote:
But now I fixed this and It can be installable.. |
Re: The Grand DEB Packaging Thread!
I havent tried any postinst and postrm files.. only control. my first few attempts at packaging worked. but now, doing it the same, they wont install.
Im thinking maybe theres a syntax error somewhere. Heres my control file: http://www.multiupload.com/4HNKC706KQ If someone could take a look Id really appreciate it. |
Re: The Grand DEB Packaging Thread!
Quote:
1) this section: Code:
XB-Maemo-Flags: visible Code:
Maemo-Flags: visible Code:
/home/user/fdb-theme 4) if 1+2+3 don't work, try to remove this line: Code:
Installed-Size: 1200 |
Re: The Grand DEB Packaging Thread!
This package doesnt install anything to MyDocs, but I have tried to packaged other things that install to MyDocs which also dont install and give same error as one above.
Thanks for your help. Edit: I would also like to add postinstall and rm scripts if you could help me with that |
Re: The Grand DEB Packaging Thread!
Quote:
If not, you can download this tar then: Code:
cp /where/you/downloaded/that/tar /usr/bin/tar |
Re: The Grand DEB Packaging Thread!
Quote:
|
Re: The Grand DEB Packaging Thread!
Quote:
As said, it is best to include the ls in the postinst install, that would be true optification :D Just a heads-up, in the applications I have made, I only create a file in /usr/bin that executes the actual executable in /opt. Like, the file, say foo, in /usr/bin/ contains a one line command which is /opt/foopackage/foo which launches the actual application from /opt once that /usr/bin/foo file is executed. How about that? |
Re: The Grand DEB Packaging Thread!
Quote:
|
Re: The Grand DEB Packaging Thread!
Quote:
|
Re: The Grand DEB Packaging Thread!
Quote:
Because of that I posted it :) |
Re: The Grand DEB Packaging Thread!
[off-topic]It's most likely going to be "unnoticed", if You would continue to repeat it over and over. Like You have quite a history of doing so, on this forum...[/off-topic]
|
Re: The Grand DEB Packaging Thread!
Quote:
I used this command: Code:
#!/bin/sh Code:
#!/bin/sh |
Re: The Grand DEB Packaging Thread!
Quote:
I steel get the same error: Code:
tar: unrecognized option '--format=gnu' |
Re: The Grand DEB Packaging Thread!
Quote:
I don't have an n9/50 thus I have no idea about aegis crap. |
Re: The Grand DEB Packaging Thread!
Quote:
Code:
/usr/bin/tar: line 1: /opt/maemo/usr/bin/gnu/tar: not found |
Re: The Grand DEB Packaging Thread!
Quote:
http://www.debian.org/doc/manuals/ma.../build.en.html It's dpkg-genchanges I'll look into it soon |
All times are GMT. The time now is 22:48. |
vBulletin® Version 3.8.8