Friday, April 10, 2009

Adding local directory to apt sources.list

I faced this problem when trying to install the latest version of lyx, frontend for the famous LaTeX/TeX document processor. Lyx is available at the ubuntu main repo, but the version is kind of outdated. After checking at, a latest version is available. After downloading the lyx and lyx-common package from here, I tried to install both of them using "dpkg -i *.deb" but they have unsatisfied dependencies. One of the way to solve this is to download all the dependencies and put them inside one directory, and run "dpkg -i *.deb" but I think I wanna try another solution which is using apt to install them. This is where "Adding local directory to apt sources.list" comes into the picture. The steps will be explained below:

1. Create the directory to put all the deb files you downloaded, in this case I'll create /home/foo/debs
$ mkdir /home/foo/debs

2. Put all the downloaded deb files into the directory
$ mv /home/foo/Desktop/*.deb /home/foo/debs

3. Check the current priorities and section for the package, find entry named Section and Priority:
$ dpkg --info lyx_1.6.2-1~getdeb1_i386.deb

Here are some of the info:
Package: lyx

Section: editors

Priority: optional


4. Create override file. Override file is used to override the default priority and section setting of the package (refer to no. 3 for guide on how to check section and priority). Override file contains 3 columns: package, priority, section. Package is the name of the package, priority is low, medium, high or optional and section is the section to which it belongs.
Example of override file content:

## Override
#Package priority section

lyx low editors

5. Create Packages.gz inside /home/foo/debs
$ cd /home/foo/debs
$ sudo dpkg-scanpackages . override | gzip -c9 > Packages.gz

6. If you are too lazy to do the override file, you do not have to. Just change the "dpkg --scanpackages" command above to this:
$ cd /home/foo/debs
$ sudo dpkg-scanpackages . /dev/null | gzip -c9 > Packages.gz
If you follow this path, ignore step 4 and 5

7. Add this line to /etc/apt/sources.list
deb file:///home/foo/debs /

8. Resynchronize the package index files from their sources
$ sudo apt-get update

9. Install your application (in this case, lyx)
$ sudo apt-get install lyx

Apt will fetch the deb files from your local file directory also. Congratulations, you just created a local file repository in your own computer :)


bushgrad said...

This was very helpful. Thank you for posting this. My friend couldn't get access to medibuntu repos so I had to download 22 debs, 7z them and send them via host site to my friend. She then created a local source dir as you described here, and installed the 22 files with deps. Magical!

Anonymous said...

im a little bit confuse of your code
$ cd /home/foo/bar

whats with the bar?

blackorga said...

Hi anonymous,

Thanks for the highlight. It should be /home/foo/debs and not /home/foo/bar. I have already corrected it.

Anonymous said...

Careful on item 7, there is a space in there I couldn't see:
deb file://(space)/home/foo/debs /

Wouldn't work without it, worked great after I entered the space.

Trevor Hartman said...

On 14.04 the format is: deb file:/home/foo/debs /