Difference between revisions of "DEB package notes - dpkg, apt, aptitude, and friends"

From Noah.org
Jump to navigationJump to search
m
m
Line 12: Line 12:
 
</pre>
 
</pre>
  
== Download a specific DEB package from a repository ==
+
== download source package and extract the package source directory tree ==
 +
 
 +
This will download a source package and unpack its source tree.
 +
<pre>
 +
apt-get source python-pexpect
 +
</pre>
 +
This will download a source package but leave it unpacked.
 +
<pre>
 +
apt-get --download-only source python-pexpect
 +
</pre>
 +
 
 +
== download a specific DEB file from a repository ==
  
 
This will force a download of the given PACKAGE_NAME. The file will be stored in /var/cache/apt/archives and the exact name might be different than the package name. It will at least have a version number appended to it.
 
This will force a download of the given PACKAGE_NAME. The file will be stored in /var/cache/apt/archives and the exact name might be different than the package name. It will at least have a version number appended to it.

Revision as of 15:36, 20 March 2014


Notes on APT, apt-get, aptittude, dpkg, and friends

open and extract files from a DEB package

This will create the destination directory that you give as the last argument.

dpkg-deb -x example-package-name.deb /tmp/example-package-name

download source package and extract the package source directory tree

This will download a source package and unpack its source tree.

apt-get source python-pexpect

This will download a source package but leave it unpacked.

apt-get --download-only source python-pexpect

download a specific DEB file from a repository

This will force a download of the given PACKAGE_NAME. The file will be stored in /var/cache/apt/archives and the exact name might be different than the package name. It will at least have a version number appended to it.

apt-get --download-only --force-yes -yy install --reinstall [PACKAGE_NAME]

This script will download into the current directory:

#!/bin/sh
# deb-download

PACKAGE_NAME=$1
DESTINATION_DIR=$(readlink -f .)
PARTIAL_DIR=${DESTINATION_DIR}/partial
[ -d ./partial/ ] && PARTIAL_EXISTS=1

if [ -z "${PARTIAL_EXISTS}" ]; then
    mkdir ${DESTINATION_DIR}/partial
fi

apt-get -d --force-yes -y install --reinstall -o Dir::Cache::archives=${DESTINATION_DIR} ${PACKAGE_NAME}

if [ -z "${PARTIAL_EXISTS}" ]; then
    rmdir ${DESTINATION_DIR}/partial
fi

You can also see the URL of where the package would be downloaded from:

--print-uris

Creating DEB packages

debian control directory

debian/
root name of a package control directory.
dh-make
Convert an existing source package to your own package for modification.
aptitude -q -y install dh-make fakeroot pbuilder cdebootstrap

How To

  1. Put all source into a directory named package-version.
  2. Modify source directory as specified in http://www.debian.org/doc/maint-guide/ch-modify.en.html
  3. When you are done cd above this directory: cd ..
  4. create package-version.tar.gz source tarball: `tar czf package-version.tar.gz package-version`.
  5. Create initial debian package environment: `cd package-version/;dh_make -e user@example.com -f ../package-version.tar.gz`. This will create a new "debian" directory.
  6. Edit these files ./debian/control ./debian/copyright ./debian/license
  7. Run `dpkg-buildpackage -rfakeroot`

clean environment and workspace

This depends on `cdebootstrap`. This will take a while as it create an entire Debian chroot directory that looks like a fresh install.

sudo pbuilder create

Errors

Package is in a very bad inconsistent state - you should reinstall it before attempting a removal.

If an install or remove gets interrupted the package database might get left in an inconsistent state. This can cause errors like the one below:

dpkg: error processing xserver-xorg-video-s3virge (--remove):
Package is in a very bad inconsistent state - you should
reinstall it before attempting a removal.


The following may resolve the issue. This forces dpkg to remove the package despite the errors. This may break stuff!

dpkg --force-remove-reinstreq --remove xserver-xorg-video-s3virge