Package Management: Difference between revisions
Jump to navigation
Jump to search
Managing alternatives with
(→Basic) |
|||
(48 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Ubuntu / Debian == |
== Ubuntu / Debian == |
||
See [[apt]]. |
|||
=== Basic === |
|||
{{blue|'''Installing'''}} a package '''from REPOSITORIES''', using '''aptitude''': |
|||
<source lang="bash"> |
|||
# ----- Installing from the REPOSITORIES - APTITUDE |
|||
aptitude update # (OPTIONAL) update the local repository cache |
|||
aptitude install <package(s)> # Install given package |
|||
aptitude remove <package(s)> # Remove package (or install it if package name prefixed with - ) |
|||
</source> |
|||
''Note: Advantage of <code>aptitude</code> over <code>apt-get</code> is that it maintains <tt>/var/log/aptitude</tt>, and remove dependencies by default.'' |
|||
{{blue|'''Installing'''}} a package '''from REPOSITORIES''', using '''apt-get''': |
|||
<source lang="bash"> |
|||
# ----- Installing from the REPOSITORIES - APT-GET |
|||
apt-get update # (OPTIONAL) update the local repository cache |
|||
apt-get install <package(s)> # Install given package |
|||
apt-get install <package(s)>=<version> # Use = to install a specific version (usually to force downgrade) !!! no space !!! |
|||
apt-get install <package(s)>/<release> # Or use / to install from a specific distribution version !!! no space !!! |
|||
apt-get upgrade # Install new version of all installed package (without installing new package) |
|||
apt-get remove <package(s)> # Remove package (or install it if package name prefixed with - ) |
|||
apt-get autoremove <package(s)> # Remove package and all its unused dependencies |
|||
apt-get purge <package(s)> # Remove package and related configuration files |
|||
apt-get autoremove # Remove package installed to satisfy dependencies for some package and that are no more needed |
|||
</source> |
|||
{{blue|'''Installing'''}} a package '''from a .deb PACKAGE file''': |
|||
<source lang="bash"> |
|||
# ----- Installing from a .deb PACKAGE file |
|||
dpkg --install <debfile> # (or -i) Install a package from given .deb file |
|||
</source> |
|||
{{blue|'''Querying'''}} the '''cache''' or '''installed''' packages: |
|||
<source lang=bash> |
|||
# ----- Querying INSTALLED PACKAGE |
|||
dpkg --get-selections # Show the list of packages installed through apt-get |
|||
dpkg --get-selections | grep php # ... filtering for some specific package keyword |
|||
dpkg -l <pattern> # (dpkg-query) List packages matching pattern, incl. version + description |
|||
dpkg -s <package> # (dpkg-query) Report status of specified package |
|||
dpkg -L <package> # List files delivered by a given <package> |
|||
dlocate -L <package> # ... same as above but much faster (require package dlocate) |
|||
dpkg -S <file> # List packages providing given file |
|||
dlocate -S <file> # ... same as above but much faster (require package dlocate) |
|||
dlocate <file> # ... same as dpkg -L -S combined but much faster (require package dlocate) |
|||
# ----- Querying the CACHE |
|||
apt-cache search <regex> # Search package cache (package name and description) for given <regex> |
|||
apt-cache search --name-only <regex> # ... same but only search in package name |
|||
apt-cache showpkg <package(s)> # Show version and dependencies information about given package(s) |
|||
apt-cache show <package(s)> # Show information (description...) about given package(s) |
|||
apt-cache dotty <package(s)>|dot -Tpng|display |
|||
# Generate & display dependency graph (require graphviz & imagemagick) |
|||
apt-rdepends -d <package(s)>|dot -Tpng|display |
|||
# Idem (but usually much lighter) |
|||
apt-cache dotty -o APT::Cache::GivenOnly=true $(dpkg --get-selections linux*|awk '{print $1}')|dot -Tpng|display |
|||
# Dependency graph restricted to package(s) given on command line |
|||
aptitude why|why-not <package> # Explain why a package should or cannot be installed on the system |
|||
# ----- Querying a .deb PACKAGE file |
|||
dpkg --info <debfile> # (or -I) Show information of given .deb file |
|||
dpkg --content <debfile> # (or -c) Show content of given .deb file |
|||
</source> |
|||
{{blue|'''Querying'''}} packages that are '''not installed yet''' (requires package '''apt-file'''):<br> |
|||
<source lang=bash> |
|||
apt-file update # (optional - needed 1st time use) |
|||
apt-file list <package> # Search package in repositories, and show the content |
|||
apt-file search <file> # Display the name of all packages within repository that contain this file |
|||
apt-file search -l <file> # ... only print package name |
|||
apt-file search -x "/<file>$" # ... more accurate query using regex |
|||
</source> |
|||
:''Note: An alternative is to use the script '''[{{#file: dweblocate}} dweblocate]''', but '''apt-file''' is more powerful actually'' |
|||
<div style="display:none"><source lang="bash"> |
|||
#!/bin/bash |
|||
# Very handy script to query online debian/ubuntu package database. |
|||
# It more or less imitates the behaviour of dlocate, but is not limited to package installed on the current system. |
|||
# |
|||
# Usage: |
|||
# |
|||
# dweblocate -L <package> List all files in package <package> |
|||
# dweblocate -S <filename> List all packages that contains <filename> |
|||
# |
|||
# Based on script at http://mydebian.blogdns.org/?p=742 |
|||
# Modified by Fuujuhi, 2009. |
|||
DIST=ubuntu # debian | ubuntu |
|||
SUITENAME=jaunty # Not necessary for debian |
|||
if [ "$DIST" = "ubuntu" ] ; then |
|||
LISTURL="http://packages.ubuntu.com/$DISTNAME/all/$2/filelist" |
|||
SEARCHURL="http://packages.ubuntu.com/search?suite=${SUITENAME}&searchon=contents&keywords=$2" |
|||
elif [ "$DIST" = "debian" ] ; then |
|||
LISTURL="http://packages.ubuntu.com/$DISTNAME/all/$2/filelist" |
|||
SEARCHURL="http://packages.debian.org/search?suite=stable&searchon=contents&keywords=$2" |
|||
else |
|||
echo -e "Unknown distribution $DIST... Aborting!" |
|||
exit 1 |
|||
fi |
|||
if [ $# -lt 2 ]; then |
|||
echo -e "Usage:\t$0 -S file \n\t$0 -L package" |
|||
exit 1 |
|||
fi |
|||
if [ "$1" = "-L" ]; then |
|||
wget -q "$LISTURL" -O- | sed -n '/<pre>/,/<\/pre>/ {s/^[^/]*//;/\/pre>/!p}' |
|||
elif [ "$1" = "-S" ]; then |
|||
wget -q "$SEARCHURL" -O- | sed -n '/<table>/,/<\/table>/ { s/[[:space:]]*<a href="[^>]*>\([^<]*\)<\/a>/\1/p}' |
|||
else |
|||
echo "Error: invalid argument \"$1\""; |
|||
exit 2 |
|||
fi |
|||
</source></div> |
|||
{{blue|'''View'''}} package source repository: |
|||
<source lang="bash"> |
|||
apt-cache madison <package> # Display available version of a package in each repository |
|||
</source> |
|||
{{blue|'''View'''}} package installation history: |
|||
<source lang="bash"> |
|||
grep install /var/log/dpkg.log # Also check dpkg.log.1, etc. |
|||
sudo cat /var/log/apt/terl.log # Also check |
|||
sudo cat /var/log/apt/history.log |
|||
</source> |
|||
{{blue|'''Add'''}} a repository: |
|||
<source lang="bash"> |
|||
vi /etc/apt/sources.list # or edit files in /etc/apt/sources.list.d/ |
|||
apt-get update |
|||
</source> |
|||
{{blue|'''Add'''}} a package authentication key: |
|||
<source lang="bash"> |
|||
gpg --keyserver keyserver.ubuntu.com --recv 247D1CFF # (optional) Get the key from some keyserver |
|||
gpg --export --armor 247D1CFF | sudo apt-key add - # Add the key |
|||
</source> |
|||
Miscellaneous: |
|||
<source lang="bash"> |
|||
dpkg-reconfigure popularity-contest # subscribe / unsubscribe to the package usage survey |
|||
apt-get moo # Get super cow powers |
|||
aptitude moo # Get super cow powers? try with -v, -vv |
|||
</source> |
|||
=== Advanced stuff === |
|||
Reference: |
|||
* [http://wiki.yobi.be/wiki/Debian_Commands Debian commands on Yobi.be] |
|||
* Mail from Phil (2011/03/01) |
|||
==== APT with several releases ==== |
|||
Content of file <tt>/etc/apt/apt.conf.d/00default</tt> (or <tt>/etc/apt/apt.conf</tt> if that file doesn't exist): |
|||
<source lang="bash"> |
|||
APT::Default-Release "testing"; |
|||
</source> |
|||
This changes the order of preference for packages. Here it says <tt>default=testing=wheezy</tt>, so: |
|||
<source lang="bash"> |
|||
$ apt-cache policy virtualbox-osevirtualbox-ose: |
|||
Installed: (none) |
|||
Candidate: 4.0.2-dfsg-1 |
|||
Version table: |
|||
4.0.4-dfsg-1+b1 0 |
|||
500 http://ftp.be.debian.org/debian/ sid/main amd64 Packages |
|||
4.0.2-dfsg-1 0 |
|||
990 http://ftp.be.debian.org/debian/ wheezy/main amd64 Packages |
|||
3.2.10-dfsg-1 0 |
|||
500 http://ftp.be.debian.org/debian/ squeeze/main amd64 Packages |
|||
</source> |
|||
The number (500 vs 990) is giving the priority. |
|||
==== APT Pinning ==== |
|||
Reference: |
|||
* <code>man apt_preferences</code> |
|||
* http://www.debianiste.org/?post/2009/06/23/Apt-pinning-ou-comment-avoir-une-Debian-Stable-et-a-jour-%3A |
|||
* http://jaqque.sbih.org/kplug/apt-pinning.html |
|||
* http://www.argon.org/~roderick/apt-pinning.html |
|||
== RPM's == |
== RPM's == |
||
Line 204: | Line 26: | ||
sudo make install |
sudo make install |
||
</source> |
</source> |
||
Usually <code>./configure --help</code> gives additional package configuration options (like installing documentation, etc). |
|||
;Installing build dependencies |
|||
'''{{red|! Power Tip !}}''' A more powerful way to install from source is to use <code>[https://help.ubuntu.com/community/CheckInstall checkinstall]</code>. <tt>checkinstall</tt> will actually create a temporary package that can then later be uninstalled with ''Synaptic'' or via the terminal: |
|||
: Building from sources usually requires more dependencies than using the package. If the package is available on the distribution, the easiest way to install these dependencies is usually via <code>apt-get build-dep</code>: |
|||
<source lang=bash> |
|||
sudo apt-get build-dep udisks |
|||
</source> |
|||
;Installing as a package |
|||
: Instead of installing with <code>make install</code>, use <code>[https://help.ubuntu.com/community/CheckInstall checkinstall]</code> to create a temporary package that can later be uninstalled with the package manager. |
|||
<source lang="bash"> |
<source lang="bash"> |
||
./configure |
./configure |
||
Line 214: | Line 44: | ||
sudo dpkg -r <packagename> |
sudo dpkg -r <packagename> |
||
</source> |
</source> |
||
Note that <tt>checkinstall</tt> can actually run any arbitrary command and monitor change on the file system. |
:Note that <tt>checkinstall</tt> can actually run any arbitrary command and monitor change on the file system. |
||
== Backports == |
|||
=== Debian === |
|||
See [https://www.ocf.berkeley.edu/docs/staff/procedures/backporting-packages/ Backporting Debian packages]. |
|||
== Managing alternatives with <code>update-alternatives</code> == |
|||
Display current set of alternatives (e.g. here for ''gcc'' on ''Cygwin''): |
|||
<source lang=bash> |
|||
$ /usr/sbin/update-alternatives --display gcc |
|||
</source> |
|||
<source lang=bash> |
|||
# gcc - status is manual. |
|||
# link currently points to /usr/bin/gcc-3.exe |
|||
# /usr/bin/gcc-3.exe - priority 30 |
|||
# slave lib-cpp: <NONE> |
|||
# slave cc: /usr/bin/cc-3.exe |
|||
# slave cpp: /usr/bin/cpp-3.exe |
|||
# slave gcov: /usr/bin/gcov-3.exe |
|||
# slave i686-pc-cygwin-gcc-4.3.4: <NONE> |
|||
# slave i686-pc-cygwin-gcc: /usr/bin/i686-pc-cygwin-gcc-3.exe |
|||
# slave protoize: /usr/bin/protoize-3.exe |
|||
# slave unprotoize: /usr/bin/unprotoize-3.exe |
|||
# slave cpp.1.gz: /usr/share/man/man1/cpp-3.1.gz |
|||
# slave gcc.1.gz: /usr/share/man/man1/gcc-3.1.gz |
|||
# slave gcov.1.gz: /usr/share/man/man1/gcov-3.1.gz |
|||
# slave ffi.3.gz: <NONE> |
|||
# slave ffi_call.3.gz: <NONE> |
|||
# slave ffi_prep_cif.3.gz: <NONE> |
|||
# /usr/bin/gcc-4.exe - priority 40 |
|||
# slave lib-cpp: /usr/bin/cpp-4.exe |
|||
# slave cc: /usr/bin/gcc-4.exe |
|||
# slave cpp: /usr/bin/cpp-4.exe |
|||
# slave gcov: /usr/bin/gcov-4.exe |
|||
# slave i686-pc-cygwin-gcc-4.3.4: <NONE> |
|||
# slave i686-pc-cygwin-gcc: /usr/bin/i686-pc-cygwin-gcc-4.exe |
|||
# slave protoize: <NONE> |
|||
# slave unprotoize: <NONE> |
|||
# slave cpp.1.gz: /usr/share/man/man1/cpp-4.1.gz |
|||
# slave gcc.1.gz: /usr/share/man/man1/gcc-4.1.gz |
|||
# slave gcov.1.gz: /usr/share/man/man1/gcov-4.1.gz |
|||
# slave ffi.3.gz: /usr/share/man/man3/ffi-4.3.gz |
|||
# slave ffi_call.3.gz: /usr/share/man/man3/ffi_call-4.3.gz |
|||
# slave ffi_prep_cif.3.gz: /usr/share/man/man3/ffi_prep_cif-4.3.gz |
|||
# Current `best' version is /usr/bin/gcc-4.exe. |
|||
</source> |
|||
'''Create a new entry''' with |
|||
<source lang=bash> |
|||
/usr/sbin/update-alternatives --install /usr/bin/gcc.exe gcc /usr/bin/gcc-3.exe 30 \ |
|||
--slave /usr/bin/cc.exe cc /usr/bin/cc-3.exe \ |
|||
--slave /usr/bin/cpp.exe cpp /usr/bin/cpp-3.exe \ |
|||
--slave /usr/bin/gcov.exe gcov /usr/bin/gcov-3.exe \ |
|||
--slave /usr/bin/i686-pc-cygwin-gcc.exe i686-pc-cygwin-gcc /usr/bin/i686-pc-cygwin-gcc-3.exe \ |
|||
--slave /usr/bin/protoize.exe protoize /usr/bin/protoize-3.exe \ |
|||
--slave /usr/bin/unprotoize.exe unprotoize /usr/bin/unprotoize-3.exe \ |
|||
--slave /usr/share/man/man1/cpp.1.gz cpp.1.gz /usr/share/man/man1/cpp-3.1.gz \ |
|||
--slave /usr/share/man/man1/gcc.1.gz gcc.1.gz /usr/share/man/man1/gcc-3.1.gz \ |
|||
--slave /usr/share/man/man1/gcov.1.gz gcov.1.gz /usr/share/man/man1/gcov-3.1.gz |
|||
</source> |
|||
'''Select an entry''' with |
|||
<source lang=bash> |
|||
/usr/sbin/update-alternatives --auto gcc # Select alternative for gcc based on priority |
|||
/usr/sbin/update-alternatives --set gcc /usr/bin/gcc-3.exe # Set gcc-3 as alternative for gcc (also set slaves, etc) |
|||
/usr/sbin/update-alternatives --config gcc # Select alternative via menu |
|||
</source> |
|||
=== Alternatives for clang === |
|||
<source lang="bash"> |
|||
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 100 |
|||
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-6.0 1000 |
|||
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 100 |
|||
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 1000 |
|||
sudo update-alternatives --config clang |
|||
sudo update-alternatives --config clang++ |
|||
</source> |
Latest revision as of 09:24, 26 November 2019
Ubuntu / Debian
See apt.
RPM's
- RPM RedHat Package Manager
- Using RPM: THe Basics (Part I)
- Install commands
rpm -ivh package # Installing a package - verbose and progress bars
rpm -iv -nodeps package # Installing a package (verbose), ignore dependencies
- Query commands
rpm -ql package # List files provided by a package
- To query a package that has not been installed, add -p option to the command:
rpm -qpl package # List files provided by a package
Source package
Installing from source package is usually done with
./configure
make
sudo make install
Usually ./configure --help
gives additional package configuration options (like installing documentation, etc).
- Installing build dependencies
- Building from sources usually requires more dependencies than using the package. If the package is available on the distribution, the easiest way to install these dependencies is usually via
apt-get build-dep
:
sudo apt-get build-dep udisks
- Installing as a package
- Instead of installing with
make install
, usecheckinstall
to create a temporary package that can later be uninstalled with the package manager.
./configure
make
sudo checkinstall # Creates a package and install it as if 'sudo make install' was run
#... to uninstall:
sudo dpkg -r <packagename>
- Note that checkinstall can actually run any arbitrary command and monitor change on the file system.
Backports
Debian
See Backporting Debian packages.
Managing alternatives with update-alternatives
Display current set of alternatives (e.g. here for gcc on Cygwin):
$ /usr/sbin/update-alternatives --display gcc
# gcc - status is manual.
# link currently points to /usr/bin/gcc-3.exe
# /usr/bin/gcc-3.exe - priority 30
# slave lib-cpp: <NONE>
# slave cc: /usr/bin/cc-3.exe
# slave cpp: /usr/bin/cpp-3.exe
# slave gcov: /usr/bin/gcov-3.exe
# slave i686-pc-cygwin-gcc-4.3.4: <NONE>
# slave i686-pc-cygwin-gcc: /usr/bin/i686-pc-cygwin-gcc-3.exe
# slave protoize: /usr/bin/protoize-3.exe
# slave unprotoize: /usr/bin/unprotoize-3.exe
# slave cpp.1.gz: /usr/share/man/man1/cpp-3.1.gz
# slave gcc.1.gz: /usr/share/man/man1/gcc-3.1.gz
# slave gcov.1.gz: /usr/share/man/man1/gcov-3.1.gz
# slave ffi.3.gz: <NONE>
# slave ffi_call.3.gz: <NONE>
# slave ffi_prep_cif.3.gz: <NONE>
# /usr/bin/gcc-4.exe - priority 40
# slave lib-cpp: /usr/bin/cpp-4.exe
# slave cc: /usr/bin/gcc-4.exe
# slave cpp: /usr/bin/cpp-4.exe
# slave gcov: /usr/bin/gcov-4.exe
# slave i686-pc-cygwin-gcc-4.3.4: <NONE>
# slave i686-pc-cygwin-gcc: /usr/bin/i686-pc-cygwin-gcc-4.exe
# slave protoize: <NONE>
# slave unprotoize: <NONE>
# slave cpp.1.gz: /usr/share/man/man1/cpp-4.1.gz
# slave gcc.1.gz: /usr/share/man/man1/gcc-4.1.gz
# slave gcov.1.gz: /usr/share/man/man1/gcov-4.1.gz
# slave ffi.3.gz: /usr/share/man/man3/ffi-4.3.gz
# slave ffi_call.3.gz: /usr/share/man/man3/ffi_call-4.3.gz
# slave ffi_prep_cif.3.gz: /usr/share/man/man3/ffi_prep_cif-4.3.gz
# Current `best' version is /usr/bin/gcc-4.exe.
Create a new entry with
/usr/sbin/update-alternatives --install /usr/bin/gcc.exe gcc /usr/bin/gcc-3.exe 30 \
--slave /usr/bin/cc.exe cc /usr/bin/cc-3.exe \
--slave /usr/bin/cpp.exe cpp /usr/bin/cpp-3.exe \
--slave /usr/bin/gcov.exe gcov /usr/bin/gcov-3.exe \
--slave /usr/bin/i686-pc-cygwin-gcc.exe i686-pc-cygwin-gcc /usr/bin/i686-pc-cygwin-gcc-3.exe \
--slave /usr/bin/protoize.exe protoize /usr/bin/protoize-3.exe \
--slave /usr/bin/unprotoize.exe unprotoize /usr/bin/unprotoize-3.exe \
--slave /usr/share/man/man1/cpp.1.gz cpp.1.gz /usr/share/man/man1/cpp-3.1.gz \
--slave /usr/share/man/man1/gcc.1.gz gcc.1.gz /usr/share/man/man1/gcc-3.1.gz \
--slave /usr/share/man/man1/gcov.1.gz gcov.1.gz /usr/share/man/man1/gcov-3.1.gz
Select an entry with
/usr/sbin/update-alternatives --auto gcc # Select alternative for gcc based on priority
/usr/sbin/update-alternatives --set gcc /usr/bin/gcc-3.exe # Set gcc-3 as alternative for gcc (also set slaves, etc)
/usr/sbin/update-alternatives --config gcc # Select alternative via menu
Alternatives for clang
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-6.0 1000
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 100
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 1000
sudo update-alternatives --config clang
sudo update-alternatives --config clang++