Reply
Thread Tools
ammyt's Avatar
Posts: 1,896 | Thanked: 3,031 times | Joined on Oct 2010 @ Digizonia
#1
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
2. First things first. In most if not all Linux distros, executable files should be placed in /usr/bin/ but since optification requires those files to be in /opt/ let's create both of these folders in the folder foopackage, then symlink them to /usr/bin.
Code:
mkdir -p /home/user/foopackage/opt
mkdir -p /home/user/foopackage/opt/foopackage
mkdir -p /home/user/foopackage/usr
mkdir -p /home/user/foopackage/usr/bin/
3. Now shift the actual executable app, foo, from MyDocs to foopackage/opt/foopackage and then symlink it to /usr/bin. Don't forget to give it executable permissions!
Code:
cp /home/user/MyDocs/foo /home/user/foopackage/opt/foopackage/
ln -s /opt/foopackage/foo /home/user/foopackage/usr/bin/foo
chmod +x /home/user/foopackage/opt/foopackage/foo
chmod +x /home/user/foopackage/usr/bin/foo
4. Why not create a neat icon in the apps grid which launches the app? Let's do it! Icons here use .desktop files that tell them what to do when tapped which should be located in /usr/share/applications/hildon/x.desktop Let's create this hierarchy in /foopackage, remember that we have already created /usr in /foopackage so we don't have to create that folder again!
Code:
mkdir -p /home/user/foopackage/usr/share
mkdir -p /home/user/foopackage/usr/share/applications
mkdir -p /home/user/foopackage/usr/share/applications/hildon
5. Now, we are going to assume that you had already created the corresponding foo.desktop file and that it is located in ./MyDocs (.desktop files will be further explained in another post.) Shift the file to the hierarchy built in the previous step.
Code:
cp /home/user/MyDocs/foo.desktop /home/user/foopackage/usr/share/applications/hildon/
6. Now for the image of the icon (foo.png )which is assumed to be located in ./MyDocs Note that it must be in .png format to appear. Icons are located in /usr/share/pixmaps so let's create that hierarchy and copy the icon to there.
Code:
mkdir -p /home/user/foopackage/usr/share/pixmaps
cp /home/user/foo.png /home/user/foopackage/usr/share/pixmaps/
(NOTE: The icon name should be set in the .desktop file, will be looked into later.)
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
chmod 755 /home/user/foopackage/DEBIAN
8. Now let's create and edit the mandatory control file:
Code:
leafpad or nano or vi or any text editor /home/user/foopackage/DEBIAN/control
This should launch leafpad for example with the control file. Observe the typical structure of a control file:
Code:
Package: The-Amazing-Foo
Name: The Amazing Foo
Version: 0.1
Architecture: armel
Description: Foo makes your dreams come true!* *Dreams not included. :P
Maintainer: ammyt <ammyt1@hotmail.com>
Author: ammyt <ammyt1@hotmail.com>
Section: user/Utilities+
<empty line>
Copy these lines to the control file opened by your text editor, and edit what you need to edit! Don't touch the Architecture however if you're aiming the N900 or the N9/50. Save and exit, then give it the 755 permissions:
Code:
chmod 755 /home/user/foopackage/DEBIAN/*
9. That's it! We are now ready to roll! BUT our lovely N900s do not have the specific version of tar installed (GNU) so we're gonna have to install it manually.
Code:
apt-get update
apt-get install tar-gnu
cp /usr/bin/gnu/tar /bin/
This should install the updated GNU version of tar.
10. Let's build!
Code:
dpkg-deb -b /home/user/foopackage
cp /home/user/foopackage.deb /home/user/MyDocs/
That's it! Now open the file manager and you should find foopackage.deb in Nokia N900!

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
2. Create the DEBIAN directory and give it 755 permissions:
Code:
mkdir -p /home/user/themefoo/DEBIAN
chmod 755 /home/user/themefoo/DEBIAN
3. Now let's create and edit the mandatory control file:
Code:
leafpad or nano or vi or any text editor /home/user/themfoo/DEBIAN/control
This should launch leafpad for example with the control file. Observe the typical structure of a control file:
Code:
Package: The-Amazing-Foo-Theme
Name: The Amazing Foo Theme
Version: 0.1
Architecture: armel
Description: Foo makes your dreams come true!* *Dreams not included. :P
Maintainer: ammyt <ammyt1@hotmail.com>
Author: ammyt <ammyt1@hotmail.com>
Section: user/Utilities+
<empty line>
Copy these lines to the control file opened by your text editor, and edit what you need to edit! Don't touch the Architecture however if you're aiming the N900 or the N9/50. Save and exit, then give it the 755 permissions:
Code:
chmod 755 /home/user/themefoo/DEBIAN/*
4. Let's build!
Code:
dpkg-deb -b /home/user/themefoo
cp /home/user/themefoo.deb /home/user/MyDocs/
That's it! Now open the file manager and you should find themefoo.deb in Nokia N900!

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:

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

Last edited by ammyt; 04-25-2012 at 06:52 AM.
 

The Following 44 Users Say Thank You to ammyt For This Useful Post:
Estel's Avatar
Posts: 4,739 | Thanked: 7,740 times | Joined on Mar 2011
#2
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
__________________
N900's aluminum backcover / body replacement
-
N900's HDMI-Out
-
Camera cover MOD
-
Measure battery's real capacity on-device
-
TrueCrypt 7.1 | ereswap | bnf
-
Hardware's mods research is costly. To support my work, please consider donating. Thank You!
 

The Following 4 Users Say Thank You to Estel For This Useful Post:
ammyt's Avatar
Posts: 1,896 | Thanked: 3,031 times | Joined on Oct 2010 @ Digizonia
#3
Originally Posted by Estel View Post
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
Lol, I guess that wink was pointed towards CPU Power Control eh? xD
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?
 

The Following User Says Thank You to ammyt For This Useful Post:
Estel's Avatar
Posts: 4,739 | Thanked: 7,740 times | Joined on Mar 2011
#4
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
__________________
N900's aluminum backcover / body replacement
-
N900's HDMI-Out
-
Camera cover MOD
-
Measure battery's real capacity on-device
-
TrueCrypt 7.1 | ereswap | bnf
-
Hardware's mods research is costly. To support my work, please consider donating. Thank You!
 
ammyt's Avatar
Posts: 1,896 | Thanked: 3,031 times | Joined on Oct 2010 @ Digizonia
#5
Originally Posted by Estel View Post
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
Sure, a good example would be MaeModder, I betchu' will search about 10 minutes till you find its .deb. I'm with ya.

I haven't touched it yet either, any body in here with an N9?
 
Posts: 924 | Thanked: 2,159 times | Joined on May 2011 @ Brazil
#6
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.
__________________
Python, C/C++, Qt and CAS developer. For Maemo/MeeGo/Sailfish :
Integral, Derivative, Limit - calculating mathematical integrals, derivatives and limits. SymPy - Computer Algebra System.
MatPlotLib - 2D & 3D plots in Python. IPython - Python interactive shell.
-- My blog about mobile & scientific computing ---
2 Nokia N9 16GB Black @ 1.35 GHz, 1 with Sailfish, Stowaway foldable BT keyboard.
Nexus 4 with Sailfish. Nokia N900 @ 1.1 GHz. N810. Nokia 9500. Psion Revo+.
 

The Following User Says Thank You to rcolistete For This Useful Post:
ammyt's Avatar
Posts: 1,896 | Thanked: 3,031 times | Joined on Oct 2010 @ Digizonia
#7
Originally Posted by rcolistete View Post
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.
Good. This guide is also applicable on the N9/50, and IF I ever happened to buy an N9, I can pretty much package everything on it as I do right now on my good ol' N900.
 

The Following User Says Thank You to ammyt For This Useful Post:
Posts: 477 | Thanked: 1,099 times | Joined on Jan 2011 @ Germany
#8
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.
 

The Following User Says Thank You to sulu For This Useful Post:
Posts: 924 | Thanked: 2,159 times | Joined on May 2011 @ Brazil
#9
Originally Posted by sulu View Post
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.
Nokia N9/N950 don't have this optification problem : "/" has 3.9GB with 2-3 GB available when brand new.
__________________
Python, C/C++, Qt and CAS developer. For Maemo/MeeGo/Sailfish :
Integral, Derivative, Limit - calculating mathematical integrals, derivatives and limits. SymPy - Computer Algebra System.
MatPlotLib - 2D & 3D plots in Python. IPython - Python interactive shell.
-- My blog about mobile & scientific computing ---
2 Nokia N9 16GB Black @ 1.35 GHz, 1 with Sailfish, Stowaway foldable BT keyboard.
Nexus 4 with Sailfish. Nokia N900 @ 1.1 GHz. N810. Nokia 9500. Psion Revo+.
 
ammyt's Avatar
Posts: 1,896 | Thanked: 3,031 times | Joined on Oct 2010 @ Digizonia
#10
Well I have 12Gigs for installable applications, and the rest as MyDocs.
 
Reply

Thread Tools

 
Forum Jump


All times are GMT -4. The time now is 11:50 PM.