How do I get and modify the source code of packages installed through apt-get?

I am assuming that all application installed through apt-get are open source; but for those that are available in that manner, where can I get the source code for these applications as well as update them?

I have a couple applications I use regularly that aren't being actively developed any longer and I would like to add features. Where would I go to get the rights to update these applications?

In this case specifically, I am referring to the hellanzb package

1

5 Answers

Use the command apt-get source <package> (don't use sudo with it) to download the source of a package.

From man apt-get:

 source source causes apt-get to fetch source packages. APT will examine the available packages to decide which source package to fetch. It will then find and download into the current directory the newest available version of that source package while respect the default release, set with the option APT::Default-Release, the -t option or per package with the pkg/release syntax, if possible. Source packages are tracked separately from binary packages via deb-src type lines in the sources.list(5) file. This means that you will need to add such a line for each repository you want to get sources from. If you don't do this you will properly get another (newer, older or none) source version than the one you have installed or could install. If the --compile option is specified then the package will be compiled to a binary .deb using dpkg-buildpackage, if --download-only is specified then the source package will not be unpacked. A specific source version can be retrieved by postfixing the source name with an equals and then the version to fetch, similar to the mechanism used for the package files. This enables exact matching of the source package name and version, implicitly enabling the APT::Get::Only-Source option. Note that source packages are not tracked like binary packages, they exist only in the current directory and are similar to downloading source tar balls.

To build a package from source, first install the build dependencies:

sudo apt-get build-dep <package> 

Then use dpkg-buildpackage to create a .deb file. From APT and Dpkg Quick Reference Sheet:

dpkg-buildpackage Builds a Debian package from a Debian source tree. You must be in the main directory of the source tree for this to work. Sample usage:

 dpkg-buildpackage -rfakeroot -uc -b

Where -rfakeroot instructs it to use the fakeroot program to simulate root privileges (for ownership purposes), -uc stands for "Don't cryptographically sign the changelog", and -b stands for "Build the binary package only"

In a terminal, cd into the directory containing the package source (e.g ~/code/hellanzb-0.13) and run the following command:

dpkg-buildpackage -rfakeroot -uc -b

If the build is successful, there will be a .deb file located in the parent
directory (e.g ~/code/hellanzb_0.13-6.1_all.deb).

10

In general, you can get the source of an installed package by following this procedure:

  1. Enable the source repositories. Open the dashboard (top left button) and search for sources. That should bring up the Software & Updates program, run that and make sure you have the "Source code" option selected:

    enter image description here

  2. Open a terminal and run this command:

     apt-get source vlc

That will download vlc's sources to your current directory and you can view them at your leisure.

Of course, in the case of vlc, you can also download them directly from the videolan.org website:

3

You can use apt-get source --compile directly:

sudo apt-get build-dep <package>
sudo apt-get source --compile <package>

Worked for me. The .deb winds up in the directory you ran the command from.

2

Minimal example with the hello package

All of this and more is described at:

First let's get a sample package to modify the source for:

sudo apt-get install hello
hello

outputs:

Hello, world!

Now let's hack it up. Get the source:

apt-get source hello
cd hello-*

and open:

vim src/hello.c

and modify the message to:

Hello, world hacked!

Then do the same on the test otherwise the annoying test will start failing:

vim tests/greeting-1

Then rebuild with:

sudo apt-get install devscripts
sudo apt-get build-dep hello
debuild -b -uc -us

Near the end of the output, it says:

dpkg-deb: building package 'hello' in '../hello_2.10-1build1_amd64.deb'.

so it created the .deb on the parent directory, how dare it. So finally we install and test the modified package:

sudo dpkg -i ../hello_2.10-1build1_amd64.deb
hello

and there you go, it outputs the new message:

Hello, world hacked!

Tested on Ubuntu 18.04.

Old bzr answer

TODO: this stopped working on Ubuntu 16.04 Xenial, failing with: bzr: ERROR: Not a branch: "bzr+ssh://".. bzr branch lp:ubuntu/wily/hello works and bzr branch lp:ubuntu/xenial/hello fails again. For some reason does not show Xenial:

As mentioned at there is also a Ubuntu-specific approach with bzr.

Get the latest version:

bzr branch lp:ubuntu/hello

Specific version:

bzr branch lp:ubuntu/trusty/hello

You can also use pull-lp-source:

sudo apt-get install ubuntu-dev-tools
pull-lp-source hello

Then you'll be able to edit it:

cd hello
vim some_file

Rebuild it:

dch -i
debcommit
bzr bd -- -b -us -uc

And install it:

sudo dpkg -i ../hello.deb

The Ubuntu packaging guide is a good source of information.

5

To get more information about a package including upstream URL and project/program contacts you can have a look at the copyright file (referenced from packages.debian.org).

When the package is included and installed on your system, you can also read the copyright file directly at /usr/share/doc/$package_or_program_name/copyright.

See how to download Debian package's source code?.

0

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like