Package Management: Difference between revisions
Jump to navigation
Jump to search
Managing alternatives with
(66 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== Ubuntu / Debian == |
== Ubuntu / Debian == |
||
See [[apt]]. |
|||
== RPM's == |
|||
Installing a package from repository: |
|||
* [http://susefaq.sourceforge.net/articles/rpm.html RPM RedHat Package Manager] |
|||
* [http://linuxgazette.net/issue68/nazario.html Using RPM: THe Basics (Part I)] |
|||
* '''Install commands''' |
|||
<source lang="bash"> |
|||
rpm -ivh package # Installing a package - verbose and progress bars |
|||
rpm -iv -nodeps package # Installing a package (verbose), ignore dependencies |
|||
</source> |
|||
* '''Query commands''' |
|||
<source lang="bash"> |
|||
rpm -ql package # List files provided by a package |
|||
</source> |
|||
:* To query a package that has '''not been installed''', add '''-p''' option to the command: |
|||
<source lang="bash"> |
|||
rpm -qpl package # List files provided by a package |
|||
</source> |
|||
== Source package == |
|||
Installing from source package is usually done with |
|||
<source lang="bash"> |
<source lang="bash"> |
||
./configure |
|||
apt-get update # (OPTIONAL) update the local repository cache |
|||
make |
|||
apt-get install <package(s)> # Install given package |
|||
sudo make install |
|||
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 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> |
</source> |
||
Usually <code>./configure --help</code> gives additional package configuration options (like installing documentation, etc). |
|||
;Installing build dependencies |
|||
Querying packages that are installed / from cache repository: |
|||
: 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> |
<source lang=bash> |
||
sudo apt-get build-dep udisks |
|||
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 <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) |
|||
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 information about given package(s) |
|||
</source> |
</source> |
||
;Installing as a package |
|||
Querying packages that are '''not installed yet''' (requires package '''apt-file'''):<br> |
|||
: 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. |
|||
''Note: An alternative is to use the script '''[{{#file: dweblocate}} dweblocate]''', but '''apt-file''' is more powerful actually'' |
|||
<source lang="bash"> |
|||
./configure |
|||
#!/bin/bash |
|||
make |
|||
sudo checkinstall # Creates a package and install it as if 'sudo make install' was run |
|||
#... to uninstall: |
|||
# Very handy script to query online debian/ubuntu package database. |
|||
sudo dpkg -r <packagename> |
|||
# It more or less imitates the behaviour of dlocate, but is not limited to package installed on the current system. |
|||
</source> |
|||
# |
|||
:Note that <tt>checkinstall</tt> can actually run any arbitrary command and monitor change on the file 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 |
|||
== Backports == |
|||
if [ "$DIST" = "ubuntu" ] ; then |
|||
=== Debian === |
|||
LISTURL="http://packages.ubuntu.com/$DISTNAME/all/$2/filelist" |
|||
See [https://www.ocf.berkeley.edu/docs/staff/procedures/backporting-packages/ Backporting Debian packages]. |
|||
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 |
|||
== Managing alternatives with <code>update-alternatives</code> == |
|||
if [ $# -lt 2 ]; then |
|||
Display current set of alternatives (e.g. here for ''gcc'' on ''Cygwin''): |
|||
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> |
|||
<source lang=bash> |
<source lang=bash> |
||
$ /usr/sbin/update-alternatives --display gcc |
|||
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 -x "/<file>$" # ... more accurate query using regex |
|||
</source> |
</source> |
||
Querying / Installing a .deb package file: |
|||
<source lang=bash> |
<source lang=bash> |
||
# gcc - status is manual. |
|||
dpkg --info <debfile> # (or -I) Show information of given .deb file |
|||
# link currently points to /usr/bin/gcc-3.exe |
|||
dpkg --content <debfile> # (or -c) Show content of given .deb file |
|||
# /usr/bin/gcc-3.exe - priority 30 |
|||
dpkg --install <debfile> # (or -i) Install a package from given .deb file |
|||
# 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> |
</source> |
||
'''Create a new entry''' with |
|||
To add a repository: |
|||
<source lang= |
<source lang=bash> |
||
/usr/sbin/update-alternatives --install /usr/bin/gcc.exe gcc /usr/bin/gcc-3.exe 30 \ |
|||
vi /etc/apt/sources.list # or edit files in /etc/apt/sources.list.d/ |
|||
--slave /usr/bin/cc.exe cc /usr/bin/cc-3.exe \ |
|||
apt-get update |
|||
--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> |
</source> |
||
'''Select an entry''' with |
|||
To add a package authentication key: |
|||
<source lang= |
<source lang=bash> |
||
/usr/sbin/update-alternatives --auto gcc # Select alternative for gcc based on priority |
|||
gpg --keyserver keyserver.ubuntu.com --recv 247D1CFF # (optional) Get the key from some keyserver |
|||
/usr/sbin/update-alternatives --set gcc /usr/bin/gcc-3.exe # Set gcc-3 as alternative for gcc (also set slaves, etc) |
|||
gpg --export --armor 247D1CFF | sudo apt-key add - # Add the key |
|||
/usr/sbin/update-alternatives --config gcc # Select alternative via menu |
|||
</source> |
</source> |
||
=== Alternatives for clang === |
|||
<div style="display:none">You should not see this</div> |
|||
== RPM's == |
|||
* [http://susefaq.sourceforge.net/articles/rpm.html RPM RedHat Package Manager] |
|||
* [http://linuxgazette.net/issue68/nazario.html Using RPM: THe Basics (Part I)] |
|||
* '''Install commands''' |
|||
<source lang="bash"> |
<source lang="bash"> |
||
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-3.8 100 |
|||
rpm -ivh package # Installing a package - verbose and progress bars |
|||
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-6.0 1000 |
|||
rpm -iv -nodeps package # Installing a package (verbose), ignore dependencies |
|||
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-3.8 100 |
|||
</source> |
|||
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 1000 |
|||
* '''Query commands''' |
|||
sudo update-alternatives --config clang |
|||
<source lang="bash"> |
|||
sudo update-alternatives --config clang++ |
|||
rpm -ql package # List files provided by a package |
|||
</source> |
|||
:* To query a package that has '''not been installed''', add '''-p''' option to the command: |
|||
<source lang="bash"> |
|||
rpm -qpl package # List files provided by a package |
|||
</source> |
</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++