Version : 2024.01
Dernière mise-à-jour : 2024/03/08 08:30
Historiquement il était nécessaire d'installer un logiciel à partir de ses fichiers sources.
Pour commencer, installez les outils dont vous aurez besoin :
root@debian11:~# apt-get -y install gcc
Pour comprendre ce qui est la compilation d'un logiciel, commencez par télécharger le logiciel hello :
root@debian11:~# wget --no-check-certificate https://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz --2022-04-25 13:38:57-- https://ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz Resolving ftp.gnu.org (ftp.gnu.org)... 209.51.188.20, 2001:470:142:3::b Connecting to ftp.gnu.org (ftp.gnu.org)|209.51.188.20|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 389363 (380K) [application/x-gzip] Saving to: ‘hello-2.1.1.tar.gz’ hello-2.1.1.tar.gz 100%[====================================================================================================================>] 380.24K 864KB/s in 0.4s 2022-04-25 13:38:58 (864 KB/s) - ‘hello-2.1.1.tar.gz’ saved [389363/389363]
Ensuite désarchivez le logiciel :
root@debian11:~# tar xvf hello-2.1.1.tar.gz
Changez de répertoire :
root@debian11:~# cd hello-2.1.1/ root@debian11:~/hello-2.1.1# ls ABOUT-NLS AUTHORS ChangeLog config.guess config.rpath configure contrib depcomp INSTALL intl Makefile.am man mkinstalldirs po src THANKS aclocal.m4 BUGS ChangeLog.O config.h.in config.sub configure.ac COPYING doc install-sh m4 Makefile.in missing NEWS README tests TODO
A l'étude du fichier README, celui-ci nous renvoie vers le fichier INSTALL :
root@debian11:~/hello-2.1.1# cat README We are pleased to announce the version 2.1 release of GNU Hello. All reported bugs in previous test releases have been fixed. Some bugs surely remain. The GNU implementation of this classic program is brought to you by the efforts of several people, including Mike Haertel, David MacKenzie, Jan Brittenson, Roland McGrath, Charles Hannum, and The King. The basic algorithm is described in: "The C Programming Language", by B. W. Kernighan and D. M. Ritchie, Prentice-Hall, New Jersey, 1978; the program is an enhancement of the one published in that book. See the file INSTALL for building and installation instructions. Please send all bug reports by electronic mail to: bug-gnu-hello@gnu.org GNU Hello is free software. See the file COPYING for copying conditions.
Visualisez donc ce dernier :
root@debian11:~/hello-2.1.1# more INSTALL Copyright 1994, 1995, 1996, 1999, 2000, 2001 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the --More--(26%) [q] <<<<<<<<<<<< Appuyez sur la touche q
La procédure expliquée est celle utilisée pour la plupart des installations manuelles, à savoir la saisie des quatre commandes suivantes.
Important : configure est un script chargé de créer les makefiles pour une architecture donnée. Les makefiles sont lus par la commande make.
root@debian11:~/hello-2.1.1# ./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... no checking for mawk... mawk checking whether make sets ${MAKE}... no checking for gcc... gcc checking for C compiler default output... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for style of include used by make... none checking dependency style of gcc... none checking for strerror in -lcposix... no checking how to run the C preprocessor... gcc -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking for string.h... (cached) yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking sys/file.h usability... yes checking sys/file.h presence... yes checking for sys/file.h... yes checking sys/param.h usability... yes checking sys/param.h presence... yes checking for sys/param.h... yes checking for working alloca.h... yes checking for alloca... yes checking for struct stat.st_blksize... yes checking for msgfmt... no checking for gmsgfmt... : checking for xgettext... no checking for msgmerge... no checking build system type... x86_64-unknown-linux checking host system type... x86_64-unknown-linux checking for ranlib... ranlib checking for gcc option to accept ANSI C... none needed checking for an ANSI C-conforming const... yes checking for inline... inline checking for off_t... yes checking for size_t... yes checking for stdlib.h... (cached) yes checking for unistd.h... (cached) yes checking for getpagesize... yes checking for working mmap... yes checking whether we are using the GNU C Library 2.1 or newer... yes checking for ld used by GCC... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for shared library run path origin... done checking for iconv... yes checking argz.h usability... yes checking argz.h presence... yes checking for argz.h... yes checking limits.h usability... yes checking limits.h presence... yes checking for limits.h... yes checking locale.h usability... yes checking locale.h presence... yes checking for locale.h... yes checking nl_types.h usability... yes checking nl_types.h presence... yes checking for nl_types.h... yes checking malloc.h usability... yes checking malloc.h presence... yes checking for malloc.h... yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking for unistd.h... (cached) yes checking for sys/param.h... (cached) yes checking for feof_unlocked... yes checking for fgets_unlocked... yes checking for getc_unlocked... yes checking for getcwd... yes checking for getegid... yes checking for geteuid... yes checking for getgid... yes checking for getuid... yes checking for mempcpy... yes checking for munmap... yes checking for putenv... yes checking for setenv... yes checking for setlocale... yes checking for stpcpy... yes checking for strcasecmp... yes checking for strdup... yes checking for strtoul... yes checking for tsearch... yes checking for __argz_count... yes checking for __argz_stringify... yes checking for __argz_next... yes checking for iconv declaration... extern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); checking for nl_langinfo and CODESET... yes checking for LC_MESSAGES... yes checking for bison... no checking whether NLS is requested... yes checking whether included gettext is requested... no checking for GNU gettext in libc... yes checking for perl... perl configure: creating ./config.status config.status: creating Makefile config.status: creating contrib/Makefile config.status: creating doc/Makefile config.status: creating intl/Makefile config.status: creating man/Makefile config.status: creating po/Makefile.in config.status: creating m4/Makefile config.status: creating src/Makefile config.status: creating tests/Makefile config.status: creating config.h config.status: executing depfiles commands config.status: executing default-1 commands config.status: creating po/POTFILES config.status: creating po/Makefile config.status: executing default commands
Important : make sert à appeler des commandes créant des fichiers nécessaires à l'installation du logiciel.
Notez que la commande make n'est pas installée. Installez la commande :
root@debian11:~/hello-2.1.1# make -bash: make: command not found root@debian11:~/hello-2.1.1# which make root@debian11:~/hello-2.1.1# apt install y make
Exécutez maintenant la commande make :
root@debian11:~/hello-2.1.1# make make all-recursive make[1]: Entering directory '/root/hello-2.1.1' Making all in contrib make[2]: Entering directory '/root/hello-2.1.1/contrib' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/root/hello-2.1.1/contrib' Making all in doc make[2]: Entering directory '/root/hello-2.1.1/doc' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/root/hello-2.1.1/doc' Making all in intl make[2]: Entering directory '/root/hello-2.1.1/intl' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/root/hello-2.1.1/intl' Making all in po make[2]: Entering directory '/root/hello-2.1.1/po' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/root/hello-2.1.1/po' Making all in src make[2]: Entering directory '/root/hello-2.1.1/src' source='hello.c' object='hello.o' libtool=no \ depfile='.deps/hello.Po' tmpdepfile='.deps/hello.TPo' \ depmode=none /bin/bash ../depcomp \ gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I.. -I. -I. -I.. -I../intl -I../intl -g -O2 -c `test -f 'hello.c' || echo './'`hello.c source='version.c' object='version.o' libtool=no \ depfile='.deps/version.Po' tmpdepfile='.deps/version.TPo' \ depmode=none /bin/bash ../depcomp \ gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I.. -I. -I. -I.. -I../intl -I../intl -g -O2 -c `test -f 'version.c' || echo './'`version.c source='getopt.c' object='getopt.o' libtool=no \ depfile='.deps/getopt.Po' tmpdepfile='.deps/getopt.TPo' \ depmode=none /bin/bash ../depcomp \ gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I.. -I. -I. -I.. -I../intl -I../intl -g -O2 -c `test -f 'getopt.c' || echo './'`getopt.c source='getopt1.c' object='getopt1.o' libtool=no \ depfile='.deps/getopt1.Po' tmpdepfile='.deps/getopt1.TPo' \ depmode=none /bin/bash ../depcomp \ gcc -DLOCALEDIR=\"/usr/local/share/locale\" -DHAVE_CONFIG_H -I. -I. -I.. -I. -I. -I.. -I../intl -I../intl -g -O2 -c `test -f 'getopt1.c' || echo './'`getopt1.c gcc -g -O2 -o hello hello.o version.o getopt.o getopt1.o make[2]: Leaving directory '/root/hello-2.1.1/src' Making all in man make[2]: Entering directory '/root/hello-2.1.1/man' perl help2man --name="Friendly Greeting Program" ../src/hello >hello.1 make[2]: Leaving directory '/root/hello-2.1.1/man' Making all in m4 make[2]: Entering directory '/root/hello-2.1.1/m4' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/root/hello-2.1.1/m4' Making all in tests make[2]: Entering directory '/root/hello-2.1.1/tests' make[2]: Nothing to be done for 'all'. make[2]: Leaving directory '/root/hello-2.1.1/tests' make[2]: Entering directory '/root/hello-2.1.1' make[2]: Leaving directory '/root/hello-2.1.1' make[1]: Leaving directory '/root/hello-2.1.1'
Important : make check permet de vérifier si la commande make a bien fonctionné.
root@debian11:~/hello-2.1.1# make check Making check in contrib make[1]: Entering directory '/root/hello-2.1.1/contrib' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/root/hello-2.1.1/contrib' Making check in doc make[1]: Entering directory '/root/hello-2.1.1/doc' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/root/hello-2.1.1/doc' Making check in intl make[1]: Entering directory '/root/hello-2.1.1/intl' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/root/hello-2.1.1/intl' Making check in po make[1]: Entering directory '/root/hello-2.1.1/po' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/root/hello-2.1.1/po' Making check in src make[1]: Entering directory '/root/hello-2.1.1/src' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/root/hello-2.1.1/src' Making check in man make[1]: Entering directory '/root/hello-2.1.1/man' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/root/hello-2.1.1/man' Making check in m4 make[1]: Entering directory '/root/hello-2.1.1/m4' make[1]: Nothing to be done for 'check'. make[1]: Leaving directory '/root/hello-2.1.1/m4' Making check in tests make[1]: Entering directory '/root/hello-2.1.1/tests' make check-TESTS make[2]: Entering directory '/root/hello-2.1.1/tests' PASS: hello-1 PASS: world-1 PASS: nothing-1 ================== All 3 tests passed ================== make[2]: Leaving directory '/root/hello-2.1.1/tests' make[1]: Leaving directory '/root/hello-2.1.1/tests' make[1]: Entering directory '/root/hello-2.1.1' make[1]: Leaving directory '/root/hello-2.1.1'
Important : make install sert à installer le logiciel.
root@debian11:~/hello-2.1.1# make install Making install in contrib make[1]: Entering directory '/root/hello-2.1.1/contrib' make[2]: Entering directory '/root/hello-2.1.1/contrib' make[2]: Nothing to be done for 'install-exec-am'. make[2]: Nothing to be done for 'install-data-am'. make[2]: Leaving directory '/root/hello-2.1.1/contrib' make[1]: Leaving directory '/root/hello-2.1.1/contrib' Making install in doc make[1]: Entering directory '/root/hello-2.1.1/doc' make[2]: Entering directory '/root/hello-2.1.1/doc' make[2]: Nothing to be done for 'install-exec-am'. /bin/bash ../mkinstalldirs /usr/local/info mkdir -p -- /usr/local/info /usr/bin/install -c -m 644 ./hello.info /usr/local/info/hello.info make[2]: Leaving directory '/root/hello-2.1.1/doc' make[1]: Leaving directory '/root/hello-2.1.1/doc' Making install in intl make[1]: Entering directory '/root/hello-2.1.1/intl' if test "hello" = "gettext" \ && test '' = 'intl-compat.o'; then \ /bin/sh `case "./mkinstalldirs" in /*) echo "./mkinstalldirs" ;; *) echo ".././mkinstalldirs" ;; esac` /usr/local/lib /usr/local/include; \ /usr/bin/install -c -m 644 libintl.h /usr/local/include/libintl.h; \ @LIBTOOL@ --mode=install \ /usr/bin/install -c -m 644 libintl.a /usr/local/lib/libintl.a; \ else \ : ; \ fi if test 'no' = yes; then \ test yes != no || /bin/sh `case "./mkinstalldirs" in /*) echo "./mkinstalldirs" ;; *) echo ".././mkinstalldirs" ;; esac` /usr/local/lib; \ temp=/usr/local/lib/t-charset.alias; \ dest=/usr/local/lib/charset.alias; \ if test -f /usr/local/lib/charset.alias; then \ orig=/usr/local/lib/charset.alias; \ sed -f ref-add.sed $orig > $temp; \ /usr/bin/install -c -m 644 $temp $dest; \ rm -f $temp; \ else \ if test yes = no; then \ orig=charset.alias; \ sed -f ref-add.sed $orig > $temp; \ /usr/bin/install -c -m 644 $temp $dest; \ rm -f $temp; \ fi; \ fi; \ /bin/sh `case "./mkinstalldirs" in /*) echo "./mkinstalldirs" ;; *) echo ".././mkinstalldirs" ;; esac` /usr/local/share/locale; \ test -f /usr/local/share/locale/locale.alias \ && orig=/usr/local/share/locale/locale.alias \ || orig=./locale.alias; \ temp=/usr/local/share/locale/t-locale.alias; \ dest=/usr/local/share/locale/locale.alias; \ sed -f ref-add.sed $orig > $temp; \ /usr/bin/install -c -m 644 $temp $dest; \ rm -f $temp; \ else \ : ; \ fi if test "hello" = "gettext"; then \ /bin/sh `case "./mkinstalldirs" in /*) echo "./mkinstalldirs" ;; *) echo ".././mkinstalldirs" ;; esac` /usr/local/share/gettext/intl; \ /usr/bin/install -c -m 644 VERSION /usr/local/share/gettext/intl/VERSION; \ /usr/bin/install -c -m 644 ChangeLog.inst /usr/local/share/gettext/intl/ChangeLog; \ dists="COPYING.LIB-2.0 COPYING.LIB-2.1 Makefile.in config.charset locale.alias ref-add.sin ref-del.sin gmo.h gettextP.h hash-string.h plural-exp.h eval-plural.h os2compat.h libgnuintl.h loadinfo.h bindtextdom.c dcgettext.c dgettext.c gettext.c finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c explodename.c dcigettext.c dcngettext.c dngettext.c ngettext.c plural.y plural-exp.c localcharset.c localename.c osdep.c os2compat.c intl-compat.c"; \ for file in $dists; do \ /usr/bin/install -c -m 644 ./$file \ /usr/local/share/gettext/intl/$file; \ done; \ chmod a+x /usr/local/share/gettext/intl/config.charset; \ dists="plural.c"; \ for file in $dists; do \ if test -f $file; then dir=.; else dir=.; fi; \ /usr/bin/install -c -m 644 $dir/$file \ /usr/local/share/gettext/intl/$file; \ done; \ dists="xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c COPYING.LIB-2 gettext.h libgettext.h plural-eval.c"; \ for file in $dists; do \ rm -f /usr/local/share/gettext/intl/$file; \ done; \ else \ : ; \ fi make[1]: Leaving directory '/root/hello-2.1.1/intl' Making install in po make[1]: Entering directory '/root/hello-2.1.1/po' /bin/sh `case "./mkinstalldirs" in /*) echo "./mkinstalldirs" ;; *) echo ".././mkinstalldirs" ;; esac` /usr/local/share mkdir -p -- /usr/local/share/locale/ca/LC_MESSAGES installing ca.gmo as /usr/local/share/locale/ca/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/da/LC_MESSAGES installing da.gmo as /usr/local/share/locale/da/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/de/LC_MESSAGES installing de.gmo as /usr/local/share/locale/de/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/de_DE/LC_MESSAGES installing de_DE.gmo as /usr/local/share/locale/de_DE/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/el/LC_MESSAGES installing el.gmo as /usr/local/share/locale/el/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/eo/LC_MESSAGES installing eo.gmo as /usr/local/share/locale/eo/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/es/LC_MESSAGES installing es.gmo as /usr/local/share/locale/es/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/et/LC_MESSAGES installing et.gmo as /usr/local/share/locale/et/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/fi/LC_MESSAGES installing fi.gmo as /usr/local/share/locale/fi/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/fr/LC_MESSAGES installing fr.gmo as /usr/local/share/locale/fr/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/gl/LC_MESSAGES installing gl.gmo as /usr/local/share/locale/gl/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/he/LC_MESSAGES installing he.gmo as /usr/local/share/locale/he/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/hr/LC_MESSAGES installing hr.gmo as /usr/local/share/locale/hr/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/hu/LC_MESSAGES installing hu.gmo as /usr/local/share/locale/hu/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/id/LC_MESSAGES installing id.gmo as /usr/local/share/locale/id/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/it/LC_MESSAGES installing it.gmo as /usr/local/share/locale/it/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/ja/LC_MESSAGES installing ja.gmo as /usr/local/share/locale/ja/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/ko/LC_MESSAGES installing ko.gmo as /usr/local/share/locale/ko/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/lv/LC_MESSAGES installing lv.gmo as /usr/local/share/locale/lv/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/nb/LC_MESSAGES installing nb.gmo as /usr/local/share/locale/nb/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/nl/LC_MESSAGES installing nl.gmo as /usr/local/share/locale/nl/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/nn/LC_MESSAGES installing nn.gmo as /usr/local/share/locale/nn/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/pl/LC_MESSAGES installing pl.gmo as /usr/local/share/locale/pl/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/pt/LC_MESSAGES installing pt.gmo as /usr/local/share/locale/pt/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/pt_BR/LC_MESSAGES installing pt_BR.gmo as /usr/local/share/locale/pt_BR/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/ru/LC_MESSAGES installing ru.gmo as /usr/local/share/locale/ru/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/sk/LC_MESSAGES installing sk.gmo as /usr/local/share/locale/sk/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/sl/LC_MESSAGES installing sl.gmo as /usr/local/share/locale/sl/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/sv/LC_MESSAGES installing sv.gmo as /usr/local/share/locale/sv/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/tr/LC_MESSAGES installing tr.gmo as /usr/local/share/locale/tr/LC_MESSAGES/hello.mo mkdir -p -- /usr/local/share/locale/uk/LC_MESSAGES installing uk.gmo as /usr/local/share/locale/uk/LC_MESSAGES/hello.mo if test "hello" = "gettext"; then \ /bin/sh `case "./mkinstalldirs" in /*) echo "./mkinstalldirs" ;; *) echo ".././mkinstalldirs" ;; esac` /usr/local/share/gettext/po; \ for file in Makefile.in.in Makevars remove-potcdate.sin quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot ; do \ /usr/bin/install -c -m 644 ./$file \ /usr/local/share/gettext/po/$file; \ done; \ else \ : ; \ fi make[1]: Leaving directory '/root/hello-2.1.1/po' Making install in src make[1]: Entering directory '/root/hello-2.1.1/src' make[2]: Entering directory '/root/hello-2.1.1/src' /bin/bash ../mkinstalldirs /usr/local/bin /usr/bin/install -c hello /usr/local/bin/hello make[2]: Nothing to be done for 'install-data-am'. make[2]: Leaving directory '/root/hello-2.1.1/src' make[1]: Leaving directory '/root/hello-2.1.1/src' Making install in man make[1]: Entering directory '/root/hello-2.1.1/man' make[2]: Entering directory '/root/hello-2.1.1/man' make[2]: Nothing to be done for 'install-exec-am'. /bin/bash ../mkinstalldirs /usr/local/man/man1 mkdir -p -- /usr/local/man/man1 /usr/bin/install -c -m 644 ./hello.1 /usr/local/man/man1/hello.1 make[2]: Leaving directory '/root/hello-2.1.1/man' make[1]: Leaving directory '/root/hello-2.1.1/man' Making install in m4 make[1]: Entering directory '/root/hello-2.1.1/m4' make[2]: Entering directory '/root/hello-2.1.1/m4' make[2]: Nothing to be done for 'install-exec-am'. make[2]: Nothing to be done for 'install-data-am'. make[2]: Leaving directory '/root/hello-2.1.1/m4' make[1]: Leaving directory '/root/hello-2.1.1/m4' Making install in tests make[1]: Entering directory '/root/hello-2.1.1/tests' make[2]: Entering directory '/root/hello-2.1.1/tests' make[2]: Nothing to be done for 'install-exec-am'. make[2]: Nothing to be done for 'install-data-am'. make[2]: Leaving directory '/root/hello-2.1.1/tests' make[1]: Leaving directory '/root/hello-2.1.1/tests' make[1]: Entering directory '/root/hello-2.1.1' make[2]: Entering directory '/root/hello-2.1.1' make[2]: Nothing to be done for 'install-exec-am'. make[2]: Nothing to be done for 'install-data-am'. make[2]: Leaving directory '/root/hello-2.1.1' make[1]: Leaving directory '/root/hello-2.1.1'
Il convient maintenant de tester le nouveau logiciel :
root@debian11:~/hello-2.1.1# hello Hello, world!
Le logiciel hello a été correctement installé.
Placez-vous dans le répertoire personnel de root grâce à la commande cd ~ :
root@debian11:~/hello-2.1.1# cd ~ root@debian11:~# pwd /root
Afin de faciliter l'installation, la désinstallation et la gestion des logiciels (appelés paquets) sous Linux, Debian et ses dérivés utilisent un format de fichier de logiciels installables spécifique. Celui-ci s'appelle DEB. La commande utilisée pour manipuler ses paquetages s'appelle dpkg.
Les options de la commande dpkg sont :
root@debian11:~# dpkg --help Usage: dpkg [<option>...] <command> Commands: -i|--install <.deb file name>... | -R|--recursive <directory>... --unpack <.deb file name>... | -R|--recursive <directory>... -A|--record-avail <.deb file name>... | -R|--recursive <directory>... --configure <package>... | -a|--pending --triggers-only <package>... | -a|--pending -r|--remove <package>... | -a|--pending -P|--purge <package>... | -a|--pending -V|--verify [<package>...] Verify the integrity of package(s). --get-selections [<pattern>...] Get list of selections to stdout. --set-selections Set package selections from stdin. --clear-selections Deselect every non-essential package. --update-avail [<Packages-file>] Replace available packages info. --merge-avail [<Packages-file>] Merge with info from file. --clear-avail Erase existing available info. --forget-old-unavail Forget uninstalled unavailable pkgs. -s|--status [<package>...] Display package status details. -p|--print-avail [<package>...] Display available version details. -L|--listfiles <package>... List files 'owned' by package(s). -l|--list [<pattern>...] List packages concisely. -S|--search <pattern>... Find package(s) owning file(s). -C|--audit [<package>...] Check for broken package(s). --yet-to-unpack Print packages selected for installation. --predep-package Print pre-dependencies to unpack. --add-architecture <arch> Add <arch> to the list of architectures. --remove-architecture <arch> Remove <arch> from the list of architectures. --print-architecture Print dpkg architecture. --print-foreign-architectures Print allowed foreign architectures. --assert-<feature> Assert support for the specified feature. --validate-<thing> <string> Validate a <thing>'s <string>. --compare-versions <a> <op> <b> Compare version numbers - see below. --force-help Show help on forcing. -Dh|--debug=help Show help on debugging. -?, --help Show this help message. --version Show the version. Assertable features: support-predepends, working-epoch, long-filenames, multi-conrep, multi-arch, versioned-provides, protected-field. Validatable things: pkgname, archname, trigname, version. Use dpkg with -b, --build, -c, --contents, -e, --control, -I, --info, -f, --field, -x, --extract, -X, --vextract, --ctrl-tarfile, --fsys-tarfile on archives (type dpkg-deb --help). Options: --admindir=<directory> Use <directory> instead of /var/lib/dpkg. --root=<directory> Install on a different root directory. --instdir=<directory> Change installation dir without changing admin dir. --pre-invoke=<command> Set a pre-invoke hook. --post-invoke=<command> Set a post-invoke hook. --path-exclude=<pattern> Do not install paths which match a shell pattern. --path-include=<pattern> Re-include a pattern after a previous exclusion. -O|--selected-only Skip packages not selected for install/upgrade. -E|--skip-same-version Skip packages whose same version is installed. -G|--refuse-downgrade Skip packages with earlier version than installed. -B|--auto-deconfigure Install even if it would break some other package. --[no-]triggers Skip or force consequential trigger processing. --verify-format=<format> Verify output format (supported: 'rpm'). --no-pager Disables the use of any pager. --no-debsig Do not try to verify package signatures. --no-act|--dry-run|--simulate Just say what we would do - don't do it. -D|--debug=<octal> Enable debugging (see -Dhelp or --debug=help). --status-fd <n> Send status change updates to file descriptor <n>. --status-logger=<command> Send status change updates to <command>'s stdin. --log=<filename> Log status changes and actions to <filename>. --ignore-depends=<package>[,...] Ignore dependencies involving <package>. --force-<thing>[,...] Override problems (see --force-help). --no-force-<thing>[,...] Stop when problems encountered. --refuse-<thing>[,...] Ditto. --abort-after <n> Abort after encountering <n> errors. --robot Use machine-readable output on some commands. Comparison operators for --compare-versions are: lt le eq ne ge gt (treat empty version as earlier than any version); lt-nl le-nl ge-nl gt-nl (treat empty version as later than any version); < << <= = >= >> > (only for compatibility with control file syntax). Use 'apt' or 'aptitude' for user-friendly package management.
Le fichier de configuration proncipal de la commande dpkg est /etc/dpkg/dpkg.cfg :
root@debian11:~# cat /etc/dpkg/dpkg.cfg # dpkg configuration file # # This file can contain default options for dpkg. All command-line # options are allowed. Values can be specified by putting them after # the option, separated by whitespace and/or an `=' sign. # # Do not enable debsig-verify by default; since the distribution is not using # embedded signatures, debsig-verify would reject all packages. no-debsig # Log status changes and actions to a file. log /var/log/dpkg.log
Les directives dans ce fichier sont les options de la commande dpkg sans les charactères –.
Il est important à noter que la base de données de la commande dpkg se trouve dans le répertoire /var/lib/dpkg :
root@debian11:~# ls -l /var/lib/dpkg total 2836 drwxr-xr-x 2 root root 4096 Apr 25 13:38 alternatives -rw-r--r-- 1 root root 121896 Apr 25 06:30 available -rw-r--r-- 1 root root 8 Apr 25 06:29 cmethopt -rw-r--r-- 1 root root 237 Apr 25 07:01 diversions -rw-r--r-- 1 root root 292 Apr 25 07:01 diversions-old drwxr-xr-x 2 root root 258048 Apr 25 13:45 info -rw-r----- 1 root root 0 Apr 25 13:45 lock -rw-r----- 1 root root 0 Apr 25 06:54 lock-frontend drwxr-xr-x 2 root root 4096 Apr 14 2021 parts -rw-r--r-- 1 root root 135 Apr 25 06:49 statoverride -rw-r--r-- 1 root root 100 Apr 25 06:48 statoverride-old -rw-r--r-- 1 root root 1239440 Apr 25 13:45 status -rw-r--r-- 1 root root 1239479 Apr 25 13:45 status-old drwxr-xr-x 2 root root 4096 Apr 25 06:52 triggers drwxr-xr-x 2 root root 4096 Apr 25 13:45 updates
Important - Il est recommendé d'inclure ce répertoire et son contenu dans les sauvegardes régulières.
Afin de connaître la liste des paquets disponibles sur la machine, il convient de saisir la commande suivante dans une fenêtre de console en tant que root :
root@debian11:~# dpkg -l | more Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-=====================================-================================-============-======================================================================================================================= ii acl 2.2.53-10 amd64 access control list - utilities ii adduser 3.118 all add and remove users and groups ii adwaita-icon-theme 3.38.0-1 all default icon theme of GNOME ii alsa-topology-conf 1.2.4-1 all ALSA topology configuration files ii alsa-ucm-conf 1.2.4-2 all ALSA Use Case Manager configuration files ii alsa-utils 1.2.4-1 amd64 Utilities for configuring and using ALSA ii anacron 2.3-30 amd64 cron-like program that doesn't go by time ii apparmor 2.13.6-10 amd64 user-space parser utility for AppArmor ii apt 2.2.4 amd64 commandline package manager ii apt-listchanges 3.24 all package change history notification tool ii apt-utils 2.2.4 amd64 package management related utility programs ii aspell 0.60.8-3 amd64 GNU Aspell spell-checker ii aspell-en 2018.04.16-0-1 all English dictionary for GNU Aspell ii at-spi2-core 2.38.0-4 amd64 Assistive Technology Service Provider Interface (dbus core) ii atril 1.24.0-1 amd64 MATE document viewer ii atril-common 1.24.0-1 all MATE document viewer (common files) ii avahi-daemon 0.8-5 amd64 Avahi mDNS/DNS-SD daemon ii base-files 11.1+deb11u3 amd64 Debian base system miscellaneous files ii base-passwd 3.5.51 amd64 Debian base system master password and group files ii bash 5.1-2+b3 amd64 GNU Bourne Again SHell ii bash-completion 1:2.11-2 all programmable completion for the bash shell ii bc 1.07.1-2+b2 amd64 GNU bc arbitrary precision calculator language ii bind9-dnsutils 1:9.16.27-1~deb11u1 amd64 Clients provided with BIND 9 ii bind9-host 1:9.16.27-1~deb11u1 amd64 DNS Lookup Utility ii bind9-libs:amd64 1:9.16.27-1~deb11u1 amd64 Shared Libraries used by BIND 9 ii binutils 2.35.2-2 amd64 GNU assembler, linker and binary utilities ii binutils-common:amd64 2.35.2-2 amd64 Common files for the GNU assembler, linker and binary utilities ii binutils-x86-64-linux-gnu 2.35.2-2 amd64 GNU binary utilities, for x86-64-linux-gnu target ii bsdextrautils 2.36.1-8+deb11u1 amd64 extra utilities from 4.4BSD-Lite ii bsdutils 1:2.36.1-8+deb11u1 amd64 basic utilities from 4.4BSD-Lite ii bubblewrap 0.4.1-3 amd64 utility for unprivileged chroot and namespace manipulation ii busybox 1:1.30.1-6+b3 amd64 Tiny utilities for small and embedded systems ii bzip2 1.0.8-4 amd64 high-quality block-sorting file compressor - utilities ii ca-certificates 20210119 all Common CA certificates ii coinor-libcbc3:amd64 2.10.5+ds1-3 amd64 Coin-or branch-and-cut mixed integer programming solver (shared libraries) ii coinor-libcgl1 0.60.3+repack1-2 amd64 COIN-OR Cut Generation Library ii coinor-libclp1 1.17.5+repack1-1 amd64 Coin-or linear programming solver (shared libraries) ii coinor-libcoinmp1v5:amd64 1.8.3-3 amd64 Simple C API for COIN-OR Solvers Clp and Cbc -- library ii coinor-libcoinutils3v5 2.11.4+repack1-1 amd64 Coin-or collection of utility classes (binaries and libraries) ii coinor-libosi1v5:amd64 0.108.6+repack1-2 amd64 COIN-OR Open Solver Interface ii colord 1.4.5-3 amd64 system service to manage device colour profiles -- system daemon ii colord-data 1.4.5-3 all system service to manage device colour profiles -- data files ii console-setup 1.205 all console font and keymap setup program ii console-setup-linux 1.205 all Linux specific part of console-setup ii coreutils 8.32-4+b1 amd64 GNU core utilities ii cpio 2.13+dfsg-4 amd64 GNU cpio -- a program to manage archives of files ii cpp 4:10.2.1-1 amd64 GNU C preprocessor (cpp) ii cpp-10 10.2.1-6 amd64 GNU C preprocessor ii cron 3.0pl1-137 amd64 process scheduling daemon ii cups 2.3.3op2-3+deb11u1 amd64 Common UNIX Printing System(tm) - PPD/driver support, web interface ii cups-browsed 1.28.7-1+deb11u1 amd64 OpenPrinting CUPS Filters - cups-browsed ii cups-client 2.3.3op2-3+deb11u1 amd64 Common UNIX Printing System(tm) - client programs (SysV) ii cups-common 2.3.3op2-3+deb11u1 all Common UNIX Printing System(tm) - common files --More-- [q]
Important - L'option -l liste les paquets disponibles spécifiés par le fichier /var/lib/dpkg/available.
root@debian11:~# more /var/lib/dpkg/available Package: gcc-10-base Source: gcc-10 Version: 10.2.1-6 Installed-Size: 261 Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org> Architecture: amd64 Breaks: gnat (<< 7) Description: GCC, the GNU Compiler Collection (base package) Description-md5: b6e93638a6d08ea7a18929d7cf078e5d Multi-Arch: same Homepage: http://gcc.gnu.org/ Tag: role::shared-lib Section: libs Priority: required Filename: pool/main/g/gcc-10/gcc-10-base_10.2.1-6_amd64.deb Size: 201332 MD5sum: 8ad775342ca4fd0adca5a516849b6498 SHA256: be65535e94f95fbf04b104e8ab36790476f063374430f7dfc6c516cbe2d2cd1e Package: libgcc-s1 Source: gcc-10 Version: 10.2.1-6 Installed-Size: 116 Maintainer: Debian GCC Maintainers <debian-gcc@lists.debian.org> Architecture: amd64 Replaces: libgcc1 (<< 1:10) Provides: libgcc1 (= 1:10.2.1-6) Depends: gcc-10-base (= 10.2.1-6), libc6 (>= 2.14) Breaks: cryptsetup-initramfs (<< 2:2.2.2-3~) Description: GCC support library Description-md5: bbd60d723e97d8e06c04228ee4c76f10 Multi-Arch: same Homepage: http://gcc.gnu.org/ Important: yes Protected: yes Tag: role::shared-lib Section: libs Priority: optional Filename: pool/main/g/gcc-10/libgcc-s1_10.2.1-6_amd64.deb Size: 41400 MD5sum: 662ac9938f503745221bd777b5a94cab SHA256: e478f2709d8474165bb664de42e16950c391f30eaa55bc9b3573281d83a29daf Package: libcrypt1 Source: libxcrypt Version: 1:4.4.18-4 Installed-Size: 226 Maintainer: Marco d'Itri <md@linux.it> Architecture: amd64 Replaces: libc6 (<< 2.29-4) Depends: libc6 (>= 2.25) Description: libcrypt shared library Description-md5: deac8c9adc422e925bdaf6bffdd3e875 Multi-Arch: same Important: yes Protected: yes Tag: role::shared-lib Section: libs --More--(1%) [q]
Le statut de chaque paquet est inclus dans le fichier /var/lib/dpkg/status :
root@debian11:~# more /var/lib/dpkg/status Package: acl Status: install ok installed Priority: optional Section: utils Installed-Size: 208 Maintainer: Guillem Jover <guillem@debian.org> Architecture: amd64 Multi-Arch: foreign Version: 2.2.53-10 Depends: libacl1 (= 2.2.53-10), libc6 (>= 2.14) Description: access control list - utilities This package contains the getfacl and setfacl utilities needed for manipulating access control lists. It also contains the chacl IRIX compatible utility. Homepage: https://savannah.nongnu.org/projects/acl/ Package: adduser Status: install ok installed Priority: important Section: admin Installed-Size: 849 Maintainer: Debian Adduser Developers <adduser@packages.debian.org> Architecture: all Multi-Arch: foreign Version: 3.118 Depends: passwd, debconf (>= 0.5) | debconf-2.0 Suggests: liblocale-gettext-perl, perl Conffiles: /etc/deluser.conf 773fb95e98a27947de4a95abb3d3f2a2 Description: add and remove users and groups This package includes the 'adduser' and 'deluser' commands for creating and removing users. . - 'adduser' creates new users and groups and adds existing users to existing groups; - 'deluser' removes users and groups and removes users from a given group. . Adding users with 'adduser' is much easier than adding them manually. Adduser will choose appropriate UID and GID values, create a home directory, copy skeletal user configuration, and automate setting initial values for the user's password, real name and so on. . Deluser can back up and remove users' home directories and mail spool or all the files they own on the system. . A custom script can be executed after each of the commands. Package: adwaita-icon-theme Status: install ok installed Priority: optional Section: gnome Installed-Size: 26370 Maintainer: Debian GNOME Maintainers <pkg-gnome-maintainers@lists.alioth.debian.org> Architecture: all Multi-Arch: foreign Version: 3.38.0-1 Replaces: gnome-themes-standard-data (<< 3.18.0-2~) --More--(0%) [q]
Afin de connaître le nombre total de paquets installés, utilisez la commande suivante :
root@debian11:~# dpkg --get-selections | wc -l 1301
Imaginons maintenant que vous souhaitez vérifier si un paquet contenant la chaîne de caractères zip soit déjà installé sur la machine. Dans ce cas, il convient d'abord d'utiliser la commande suivante :
root@debian11:~# dpkg --get-selections | grep zip bzip2 install gzip install p7zip install p7zip-full install unzip install
Afin de connaître le statut de du paquet gzip, il convient de saisir la commande suivante :
root@debian11:~# dpkg -s gzip Package: gzip Essential: yes Status: install ok installed Priority: required Section: utils Installed-Size: 242 Maintainer: Milan Kupcevic <milan@debian.org> Architecture: amd64 Version: 1.10-4+deb11u1 Depends: dpkg (>= 1.15.4) | install-info Pre-Depends: libc6 (>= 2.17) Suggests: less Description: GNU compression utilities This package provides the standard GNU file compression utilities, which are also the default compression tools for Debian. They typically operate on files with names ending in '.gz', but can also decompress files ending in '.Z' created with 'compress'. Homepage: https://www.gnu.org/software/gzip/
Afin de lister tous les fichiers installés par le paquet gzip, utilisez la commande suivante :
root@debian11:~# dpkg -L gzip /. /bin /bin/gunzip /bin/gzexe /bin/gzip /bin/uncompress /bin/zcat /bin/zcmp /bin/zdiff /bin/zegrep /bin/zfgrep /bin/zforce /bin/zgrep /bin/zless /bin/zmore /bin/znew /usr /usr/share /usr/share/doc /usr/share/doc/gzip /usr/share/doc/gzip/NEWS.gz /usr/share/doc/gzip/README.gz /usr/share/doc/gzip/TODO /usr/share/doc/gzip/changelog.Debian.gz /usr/share/doc/gzip/changelog.gz /usr/share/doc/gzip/copyright /usr/share/info /usr/share/info/gzip.info.gz /usr/share/man /usr/share/man/man1 /usr/share/man/man1/gzexe.1.gz /usr/share/man/man1/gzip.1.gz /usr/share/man/man1/zdiff.1.gz /usr/share/man/man1/zforce.1.gz /usr/share/man/man1/zgrep.1.gz /usr/share/man/man1/zless.1.gz /usr/share/man/man1/zmore.1.gz /usr/share/man/man1/znew.1.gz /usr/share/man/man1/gunzip.1.gz /usr/share/man/man1/uncompress.1.gz /usr/share/man/man1/zcat.1.gz /usr/share/man/man1/zcmp.1.gz /usr/share/man/man1/zegrep.1.gz /usr/share/man/man1/zfgrep.1.gz
A l'inverse, si vous connaissez le nom d'un fichier et vous souhaitez savoir quel paquet l'a installé, utilisez la commande suivante :
root@debian11:~# dpkg -S /bin/zfgrep gzip: /bin/zfgrep
La commande dselect est un outil interactif utilisé pour gérer, installer et désinstaller des paquets. C'est un Front End à la commande dpkg et est lancé sans options.
La commande dselect n'est pas installé par défaut. Il convient donc d'utiliser la commande apt-get pour l'installer :
root@debian11:~# apt-get -y install dselect
Lancez maintenant dselect :
Debian 'dselect' package handling frontend version 1.20.9 (amd64). * 0. [A]ccess Choose the access method to use. 1. [U]pdate Update list of available packages, if possible. 2. [S]elect Request which packages you want on your system. 3. [I]nstall Install and upgrade wanted packages. 4. [C]onfig Configure any packages that are unconfigured. 5. [R]emove Remove unwanted software. 6. [Q]uit Quit dselect. Move around with ^P and ^N, cursor keys, initial letters, or digits; Press <enter> to confirm selection. ^L redraws screen. Copyright (C) 1994-1996 Ian Jackson. Copyright (C) 2000,2001 Wichert Akkerman. This is free software; see the GNU General Public License version 2 or later for copying conditions. There is NO warranty.
A faire - Notez les instructions en bas de l'écran et expérimentez avec l'interface. Quand vous avez terminé, quittez avec la commande [q].
APT ou en anglais Advanced Package Tool est un gestionnaire de paquets de haut niveau capable de résoudre automatiquement les problèmes de dépendances entre les paquets.
La commande apt-get prend la forme suivante :
# apt-get <options> <commande> <paquet(s)> [Entrée]
Les options et commandes de la commande apt-get sont :
root@debian11:~# apt-get --help apt 2.2.4 (amd64) Usage: apt-get [options] command apt-get [options] install|remove pkg1 [pkg2 ...] apt-get [options] source pkg1 [pkg2 ...] apt-get is a command line interface for retrieval of packages and information about them from authenticated sources and for installation, upgrade and removal of packages together with their dependencies. Most used commands: update - Retrieve new lists of packages upgrade - Perform an upgrade install - Install new packages (pkg is libc6 not libc6.deb) reinstall - Reinstall packages (pkg is libc6 not libc6.deb) remove - Remove packages purge - Remove packages and config files autoremove - Remove automatically all unused packages dist-upgrade - Distribution upgrade, see apt-get(8) dselect-upgrade - Follow dselect selections build-dep - Configure build-dependencies for source packages satisfy - Satisfy dependency strings clean - Erase downloaded archive files autoclean - Erase old downloaded archive files check - Verify that there are no broken dependencies source - Download source archives download - Download the binary package into the current directory changelog - Download and display the changelog for the given package See apt-get(8) for more information about the available commands. Configuration options and syntax is detailed in apt.conf(5). Information about how to configure sources can be found in sources.list(5). Package and version choices can be expressed via apt_preferences(5). Security details are available in apt-secure(8). This APT has Super Cow Powers.
APT peut être configuré par un fichier centralisé /etc/apt/apt.conf :
root@debian11:~# cat /etc/apt/apt.conf cat: /etc/apt/apt.conf: No such file or directory
Un exemple est fourni :
root@debian11:~# cat /usr/share/doc/apt/examples/apt.conf /* This file is a sample configuration file with a few harmless sample options. */ APT { // Options for apt-get Get { Download-Only "false"; }; }; // Options for the downloading routines Acquire { Retries "0"; }; // Things that effect the APT dselect method DSelect { Clean "auto"; // always|auto|prompt|never }; DPkg { // Probably don't want to use force-downgrade.. Options {"--force-overwrite";} }
D'autres fichiers de configuration se trouvent dans le répertoire /etc/apt/apt.conf.d/ :
root@debian11:~# ls /etc/apt/apt.conf.d/ 00CDMountPoint 00trustcdrom 01autoremove 01autoremove-kernels 20listchanges 20packagekit 70debconf
Le contenu de ces fichiers sont :
root@debian11:~# cat /etc/apt/apt.conf.d/00CDMountPoint Acquire::cdrom { mount "/media/cdrom"; }; Dir::Media::MountPath "/media/cdrom"; root@debian11:~# root@debian11:~# cat /etc/apt/apt.conf.d/00trustcdrom APT::Authentication::TrustCDROM "true"; root@debian11:~# root@debian11:~# cat /etc/apt/apt.conf.d/01autoremove APT { NeverAutoRemove { "^firmware-linux.*"; "^linux-firmware$"; "^linux-image-[a-z0-9]*$"; "^linux-image-[a-z0-9]*-[a-z0-9]*$"; }; VersionedKernelPackages { # kernels "linux-.*"; "kfreebsd-.*"; "gnumach-.*"; # (out-of-tree) modules ".*-modules"; ".*-kernel"; }; Never-MarkAuto-Sections { "metapackages"; "contrib/metapackages"; "non-free/metapackages"; "restricted/metapackages"; "universe/metapackages"; "multiverse/metapackages"; }; Move-Autobit-Sections { "oldlibs"; "contrib/oldlibs"; "non-free/oldlibs"; "restricted/oldlibs"; "universe/oldlibs"; "multiverse/oldlibs"; }; }; root@debian11:~# root@debian11:~# cat /etc/apt/apt.conf.d/01autoremove-kernels // DO NOT EDIT! File autogenerated by /etc/kernel/postinst.d/apt-auto-removal APT::LastInstalledKernel "5.10.0-13-amd64"; root@debian11:~# root@debian11:~# cat /etc/apt/apt.conf.d/20listchanges DPkg::Pre-Install-Pkgs { "/usr/bin/apt-listchanges --apt || test $? -lt 10"; }; DPkg::Tools::Options::/usr/bin/apt-listchanges::Version "2"; DPkg::Tools::Options::/usr/bin/apt-listchanges::InfoFD "20"; Dir::Etc::apt-listchanges-main "listchanges.conf"; Dir::Etc::apt-listchanges-parts "listchanges.conf.d"; root@debian11:~# root@debian11:~# cat /etc/apt/apt.conf.d/20packagekit // THIS FILE IS USED TO INFORM PACKAGEKIT // THAT THE UPDATE-INFO MIGHT HAVE CHANGED // Whenever dpkg is called we might have different updates // i.e. if an user removes a package that had an update DPkg::Post-Invoke { "/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null"; }; // When Apt's cache is updated (i.e. apt-cache update) APT::Update::Post-Invoke-Success { "/usr/bin/test -e /usr/share/dbus-1/system-services/org.freedesktop.PackageKit.service && /usr/bin/test -S /var/run/dbus/system_bus_socket && /usr/bin/gdbus call --system --dest org.freedesktop.PackageKit --object-path /org/freedesktop/PackageKit --timeout 4 --method org.freedesktop.PackageKit.StateHasChanged cache-update > /dev/null; /bin/echo > /dev/null"; }; root@debian11:~# root@debian11:~# cat /etc/apt/apt.conf.d/70debconf // Pre-configure all packages with debconf before they are installed. // If you don't like it, comment it out. DPkg::Pre-Install-Pkgs {"/usr/sbin/dpkg-preconfigure --apt || true";};
Important - Un dépôt est un lieu de stockage de paquets binaires prêts à installer. Un dépôt peut être le DVD d'installation de la distribution, un dossier sur disque dur ou bien des serveurs distants accessibles par Internet.
Les dépôts de paquets sont spécifiés soit dans le fichier /etc/apt/sources.list, soit dans un fichier par dépôt stocké dans le répertoire /etc/apt/sources.list.d :
root@debian11:~# cat /etc/apt/sources.list # deb cdrom:[Debian GNU/Linux 11.3.0 _Bullseye_ - Official amd64 NETINST 20220326-11:22]/ bullseye main #deb cdrom:[Debian GNU/Linux 11.3.0 _Bullseye_ - Official amd64 NETINST 20220326-11:22]/ bullseye main deb http://deb.debian.org/debian/ bullseye main deb-src http://deb.debian.org/debian/ bullseye main deb http://security.debian.org/debian-security bullseye-security main deb-src http://security.debian.org/debian-security bullseye-security main # bullseye-updates, to get updates before a point release is made; # see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports deb http://deb.debian.org/debian/ bullseye-updates main deb-src http://deb.debian.org/debian/ bullseye-updates main # This system was installed using small removable media # (e.g. netinst, live or single CD). The matching "deb cdrom" # entries were disabled at the end of the installation process. # For information about how to configure apt package sources, # see the sources.list(5) manual.
Chaque ligne de ce fichier comporte quatre champs :
Important - Il est possible d'ajouter une source directement en éditant le fichier /etc/apt/sources.list, en créant un fichier spécifique dans le répertoire /etc/apt/sources.list.d ou en utilisant la commande apt-setup.
La mise à jour de la base de références de la description des paquets est effectuée un utilisant la commande suivante :
root@debian11:~# apt-get update Hit:1 http://deb.debian.org/debian bullseye InRelease Get:2 http://deb.debian.org/debian bullseye-updates InRelease [39.4 kB] Hit:3 http://security.debian.org/debian-security bullseye-security InRelease Fetched 39.4 kB in 1s (58.1 kB/s) Reading package lists... Done
Les commandes les plus utilisées d'apt-get sont :
Commande | Description |
---|---|
install | Installer un ou plusieurs paquets. |
upgrade | Mettre à jour les paquets installés. |
remove | Supprimer un paquet. |
purge | Supprimer un paquet et ses fichiers de configuration. |
Commencez par installer le paquet mc :
root@debian11:~# apt-get install mc Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: mc-data Suggested packages: arj catdvi | texlive-binaries dbview djvulibre-bin epub-utils genisoimage gv imagemagick libaspell-dev links | w3m | lynx odt2txt python python-boto python-tz unar wimtools zip The following NEW packages will be installed: mc mc-data 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 1,880 kB of archives. After this operation, 7,772 kB of additional disk space will be used. Do you want to continue? [Y/n] y
La ré-installation d'un paquet est effectuée un utilisant la commande suivante :
root@debian11:~# apt-get --reinstall install mc Reading package lists... Done Building dependency tree... Done Reading state information... Done 0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded. Need to get 0 B/534 kB of archives. After this operation, 0 B of additional disk space will be used. (Reading database ... 102591 files and directories currently installed.) Preparing to unpack .../mc_3%3a4.8.26-1.1_amd64.deb ... Unpacking mc (3:4.8.26-1.1) over (3:4.8.26-1.1) ... Setting up mc (3:4.8.26-1.1) ... Processing triggers for desktop-file-utils (0.26-1) ... Processing triggers for mailcap (3.69) ...
La suppression complète d'un paquet, y compris les fichiers de configuration éventuellement modifiés est effectuée un utilisant la commande suivante :
root@debian11:~# apt-get --purge remove mc Reading package lists... Done Building dependency tree... Done Reading state information... Done The following package was automatically installed and is no longer required: mc-data Use 'apt autoremove' to remove it. The following packages will be REMOVED: mc* 0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded. After this operation, 1,528 kB disk space will be freed. Do you want to continue? [Y/n] y
Les paquets téléchargés d'une source distante ou via une source copy:// sont stockés dans le répertoire /var/cache/apt/archives. Les paquets partiellement téléchargés ou copiés sont stockés dans le répertoire /var/cache/apt/archives/partial.
root@debian11:~# ls /var/cache/apt/archives/ binutils_2.35.2-2_amd64.deb libasan6_10.2.1-6_amd64.deb libcrypt-dev_1%3a4.4.18-4_amd64.deb libnsl-dev_1.3.0-2_amd64.deb manpages-dev_5.10-1_all.deb binutils-common_2.35.2-2_amd64.deb libbinutils_2.35.2-2_amd64.deb libctf0_2.35.2-2_amd64.deb libtirpc-dev_1.3.1-1_amd64.deb mc_3%3a4.8.26-1.1_amd64.deb binutils-x86-64-linux-gnu_2.35.2-2_amd64.deb libc6-dev_2.31-13+deb11u3_amd64.deb libctf-nobfd0_2.35.2-2_amd64.deb libtsan0_10.2.1-6_amd64.deb mc-data_3%3a4.8.26-1.1_all.deb dselect_1.20.9_amd64.deb libcc1-0_10.2.1-6_amd64.deb libgcc-10-dev_10.2.1-6_amd64.deb libubsan1_10.2.1-6_amd64.deb partial gcc-10_10.2.1-6_amd64.deb libc-dev-bin_2.31-13+deb11u3_amd64.deb libitm1_10.2.1-6_amd64.deb linux-libc-dev_5.10.106-1_amd64.deb gcc_4%3a10.2.1-1_amd64.deb libc-devtools_2.31-13+deb11u3_amd64.deb liblsan0_10.2.1-6_amd64.deb lock
Pour nettoyer le cache il convient d'utiliser la commande suivante :
root@debian11:~# apt-get clean root@debian11:~# ls /var/cache/apt/archives/ lock partial
Pour mettre à jour les paquets déjà installés, il convient d'utiliser une de deux commandes apt-get :
A faire - Utilisez la commande man 8 apt-get pour vous renseigner sur les autres commandes et options.
D'autres commandes apt sont présentes sur le système :
root@debian11:~# ls -l /usr/bin/apt* -rwxr-xr-x 1 root root 18664 Jun 10 2021 /usr/bin/apt -rwxr-xr-x 1 root root 88376 Jun 10 2021 /usr/bin/apt-cache -rwxr-xr-x 1 root root 26936 Jun 10 2021 /usr/bin/apt-cdrom -rwxr-xr-x 1 root root 26856 Jun 10 2021 /usr/bin/apt-config -rwxr-xr-x 1 root root 22848 Jun 10 2021 /usr/bin/apt-extracttemplates -rwxr-xr-x 1 root root 276800 Jun 10 2021 /usr/bin/apt-ftparchive -rwxr-xr-x 1 root root 47416 Jun 10 2021 /usr/bin/apt-get -rwxr-xr-x 1 root root 28191 Jun 10 2021 /usr/bin/apt-key -rwxr-xr-x 1 root root 12242 Mar 28 2021 /usr/bin/apt-listchanges -rwxr-xr-x 1 root root 51512 Jun 10 2021 /usr/bin/apt-mark -rwxr-xr-x 1 root root 39152 Jun 10 2021 /usr/bin/apt-sortpkgs
Chaque commande a une fonction spécifique :
La commande apt-cache prend la forme suivante :
# apt-cache <options> <commande> <paquet(s)> [Entrée]
Les options et les commandes de la commande apt-cache sont :
root@debian11:~# apt-cache --help apt 2.2.4 (amd64) Usage: apt-cache [options] command apt-cache [options] show pkg1 [pkg2 ...] apt-cache queries and displays available information about installed and installable packages. It works exclusively on the data acquired into the local cache via the 'update' command of e.g. apt-get. The displayed information may therefore be outdated if the last update was too long ago, but in exchange apt-cache works independently of the availability of the configured sources (e.g. offline). Most used commands: showsrc - Show source records search - Search the package list for a regex pattern depends - Show raw dependency information for a package rdepends - Show reverse dependency information for a package show - Show a readable record for the package pkgnames - List the names of all packages in the system policy - Show policy settings See apt-cache(8) for more information about the available commands. Configuration options and syntax is detailed in apt.conf(5). Information about how to configure sources can be found in sources.list(5). Package and version choices can be expressed via apt_preferences(5). Security details are available in apt-secure(8).
Les commandes les plus utilisées d'apt-cache sont :
Commande | Description |
---|---|
stats | Affiche quelques statistiques de base. |
search | Cherche une expression rationnelle dans la liste des paquets. |
show | Affiche la description du paquet. |
depends | Affiche toutes les dépendances d'un paquet. |
Utilisez la commande stats de la commande apt-cache pour obtenir des statistiques sur les paquets :
root@debian11:~# apt-cache stats Total package names: 98002 (2,744 k) Total package structures: 87215 (3,837 k) Normal packages: 58293 Pure virtual packages: 632 Single virtual packages: 18895 Mixed virtual packages: 347 Missing: 9048 Total distinct versions: 58947 (5,187 k) Total distinct descriptions: 117595 (2,822 k) Total dependencies: 352751/101877 (8,685 k) Total ver/file relations: 60904 (1,462 k) Total Desc/File relations: 52059 (1,249 k) Total Provides mappings: 22309 (535 k) Total globbed strings: 186821 (4,214 k) Total slack space: 100 k Total space accounted for: 32.4 M Total buckets in PkgHashTable: 196613 Unused: 126297 Used: 70316 Utilization: 35.7637% Average entries: 1.24033 Longest: 16 Shortest: 1 Total buckets in GrpHashTable: 196613 Unused: 119445 Used: 77168 Utilization: 39.2487% Average entries: 1.26998 Longest: 6 Shortest: 1
A faire - Utilisez le manuel d'apt-cache pour trouver les définitions des termes Normal packages, Pure virtual packages, Single virtual packages et Mixed virtual packages.
Recherchez maintenant la chaîne mc dans la liste des paquets :
root@debian11:~# apt-cache search mc | more libace-rmcast-6.5.12 - ACE reliable multicast library libace-rmcast-dev - ACE reliable multicast library - development files libace-tmcast-6.5.12 - ACE transactional multicast library libace-tmcast-dev - ACE transactional multicast library - development files alsa-oss - ALSA wrapper for OSS applications amule-emc - lists ed2k links inside emulecollection files apel - portable library for emacsen appstream - Software component metadata management gir1.2-appstreamcompose-1.0 - Building blocks to compose AppStream metadata (introspection data) ardour - the digital audio workstation libarmci-mpi-dev - ARMCI-MPI (Development version) auto-07p - software for continuation and bifurcation problems in ODE auto-multiple-choice - Auto Multiple Choice - multiple choice papers management auto-multiple-choice-common - Auto Multiple Choice - architecture independent files auto-multiple-choice-doc - Auto Multiple Choice - HTML documentation auto-multiple-choice-doc-pdf - Auto Multiple Choice - PDF documentation bali-phy - Bayesian Inference of Alignment and Phylogeny libbambamc-dev - Development files for reading and writing BAM (genome alignment) files libbambamc0 - Runtime library for reading and writing BAM (genome alignment) files python3-beaker - cache and session library for Python 3 beast-mcmc - Bayesian MCMC phylogenetic inference beast-mcmc-examples - Bayesian MCMC phylogenetic inference - example data libnucleotidelikelihoodcore0 - implementation of LikelihoodCore for nucleotides used by beast-mcmc beast2-mcmc - Bayesian MCMC phylogenetic inference beast2-mcmc-doc - Bayesian MCMC phylogenetic inference - documentation beast2-mcmc-examples - Bayesian MCMC phylogenetic inference - example data biobambam2 - tools for early stage alignment file processing libblosc-dev - high performance meta-compressor optimized for binary data (development files) libblosc1 - high performance meta-compressor optimized for binary data python3-cachy - Provide a simple yet effective caching library (Python 3) libcbf-dev - development files for CBFlib cbmc - bounded model checker for C and C++ programs cccc - C and C++ Code Counter, a software metrics tool libccid - PC/SC driver for USB CCID smart card readers libcglm-dev - Development files for the cglm library cif-tools - Suite of tools to manipulate, validate and query mmCIF files cl-babel - charset encoding/decoding library for Common Lisp cl-trivial-backtrace - generate a Common Lisp backtrace portably cl-uffi - Universal Foreign Function Library for Common Lisp claws-mail-spam-report - Spam reporting plugin for Claws Mail clonalframeml - Efficient Inference of Recombination in Whole Bacterial Genomes libclutter-imcontext-0.1-0 - Open GL based interactive canvas library IMContext framework libclutter-imcontext-0.1-0-dbg - Open GL based interactive canvas library IMContext framework (debug files) libclutter-imcontext-0.1-bin - Open GL based interactive canvas library IMContext framework libclutter-imcontext-0.1-dev - Open GL based interactive canvas library IMContext framework (dev. files) libclutter-imcontext-0.1-doc - Open GL based interactive canvas library IMContext framework (document) cmucl-source - CMUCL lisp sources cohomcalg - sheaf cohomology of line bundles on toric varieties cohomcalg-common - sheaf cohomology of line bundles on toric varieties (common files) collectd-core - statistics collection and monitoring daemon (core system) colortest - utilities to test color capabilities of terminal libcombblas-dev - an extensible parallel graph library for graph analytics libcombblas-docs - an extensible parallel graph library for graph analytics (docs) libcombblas1.16.0 - an extensible parallel graph library for graph analytics comgt - Option GlobeTrotter and Vodafone datacard control tool complexity - tool for analyzing the complexity of C program functions complexity-doc - tool for analyzing the complexity of C program (documentation) cp2k - Ab Initio Molecular Dynamics --More-- [q]
Pour être plus précis dans la recherche, il est nécessaire de rechercher une phrase clef :
root@debian11:~# apt-cache search "midnight commander" pilot - Simple file browser from Alpine, a text-based email client avfs - virtual filesystem to access archives, disk images, remote locations junior-system - Debian Jr. System tools krusader - twin-panel (commander-style) file manager mc - Midnight Commander - a powerful file manager mc-data - Midnight Commander - a powerful file manager -- data files moc - ncurses based console audio player
Afficher maintenant les informations concernant le paquet mc :
root@debian11:~# apt-cache show mc Package: mc Version: 3:4.8.26-1.1 Installed-Size: 1492 Maintainer: Dmitry Smirnov <onlyjob@debian.org> Architecture: amd64 Provides: mcedit Depends: libc6 (>= 2.15), libext2fs2 (>= 1.37), libglib2.0-0 (>= 2.59.2), libgpm2 (>= 1.20.7), libslang2 (>= 2.2.4), libssh2-1 (>= 1.2.8), mc-data (= 3:4.8.26-1.1) Recommends: mime-support, perl, unzip, sensible-utils Suggests: arj, bzip2, catdvi | texlive-binaries, dbview, djvulibre-bin, epub-utils, file, genisoimage, gv, imagemagick, libaspell-dev, links | w3m | lynx, odt2txt, poppler-utils, python, python-boto, python-tz, unar, wimtools, xpdf | pdf-viewer, zip Description-en: Midnight Commander - a powerful file manager GNU Midnight Commander is a text-mode full-screen file manager. It uses a two panel interface and a subshell for command execution. It includes an internal editor with syntax highlighting and an internal viewer with support for binary files. Also included is Virtual Filesystem (VFS), that allows files on remote systems (e.g. FTP, SSH servers) and files inside archives to be manipulated like real files. Description-md5: 252a5c5aeeb7425db45357d4ab8aa55f Homepage: https://www.midnight-commander.org Tag: admin::filesystem, devel::lang:perl, devel::library, implemented-in::c, implemented-in::perl, interface::commandline, interface::text-mode, role::devel-lib, role::program, scope::application, suite::gnu, uitoolkit::ncurses, use::browsing, use::editing, use::organizing, works-with::archive, works-with::file Section: utils Priority: optional Filename: pool/main/m/mc/mc_4.8.26-1.1_amd64.deb Size: 534020 MD5sum: 0f8a73d3655353c27a214a483a7bc8ce SHA256: 517dbba5018b82bee2d6f2b940100360f54bc7cd83d0d791a372a1d279ceebad
Dernièrement, visualisez les dépendances du paquet mc :
root@debian11:~# apt-cache depends mc mc Depends: libc6 Depends: libext2fs2 Depends: libglib2.0-0 Depends: libgpm2 Depends: libslang2 Depends: libssh2-1 Depends: mc-data Recommends: mime-support Recommends: perl Recommends: unzip Recommends: sensible-utils Suggests: arj Suggests: bzip2 |Suggests: catdvi Suggests: texlive-binaries Suggests: dbview Suggests: djvulibre-bin Suggests: epub-utils Suggests: file Suggests: genisoimage Suggests: gv Suggests: imagemagick graphicsmagick-imagemagick-compat imagemagick-6.q16 Suggests: libaspell-dev |Suggests: links |Suggests: w3m Suggests: lynx Suggests: odt2txt Suggests: poppler-utils Suggests: <python> python-is-python2 Suggests: <python-boto> Suggests: <python-tz> Suggests: unar Suggests: wimtools |Suggests: xpdf Suggests: <pdf-viewer> atril evince gv mupdf okular qpdfview viewpdf.app xpdf zathura-pdf-poppler Suggests: zip
Les deux lignes suivantes :
|Suggests: xpdf Suggests: <pdf-viewer>
indiquent soit xpdf soit <pdf-viewer>
Important - Il est aussi possible d'utiliser la commande aptitude pour effectuer le gestion des paquets. Aptitude est un Front End à la commande apt-get.
Les bibliothèques partagées sont des fonctions communes à plusieurs programmes différents d'un même domaine (son, base de données, vidéo etc.). Les fonctions proposées par une ou plusieurs bibliothèques forment un API (Application Programming Interface). Sous Linux les bibliothèques se nomment Shared Objects et portent le suffixe .so.
Les bibliothèques partagées sont stockées par convention dans des répertoires lib, par exemple :
Répertoire | Contenu |
---|---|
/lib | Bibliothèques du système de base |
/usr/lib | Bibliothèques utilisateurs |
/usr/local/lib | Bibliothèques locales |
/usr/X11R6/lib | Bibliothèques de l'environnement X |
/opt/kde4/lib | Bibliothèques de KDE |
Important : La bibliothèque la plus importante est libc. Sans elle, le système Linux ne peut pas fonctionner.
La bibliothèque ld-linux.so.2 est utilisée par le système pour créer un lien avec une bibliothèque partagée au moment de l'exécution d'un programme et s'appelle le chargeur de liens. Ce dernier recherche des bibliothèques partagées dans un ordre précis :
Il est à noter que le contenu du cache ld.so.cache est construit à partir des informations contenus dans le fichier de configuration /etc/ld.so.conf.
Afin d'étudier les bibliothèques liées à une application, nous allons d'abord installer l'application mc, un explorateur de fichiers en mode console :
root@debian11:~# apt-get install mc Reading package lists... Done Building dependency tree... Done Reading state information... Done Suggested packages: arj catdvi | texlive-binaries dbview djvulibre-bin epub-utils genisoimage gv imagemagick libaspell-dev links | w3m | lynx odt2txt python python-boto python-tz unar wimtools zip The following NEW packages will be installed: mc 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 534 kB of archives. After this operation, 1,528 kB of additional disk space will be used. Get:1 http://deb.debian.org/debian bullseye/main amd64 mc amd64 3:4.8.26-1.1 [534 kB] Fetched 534 kB in 0s (20.7 MB/s) Selecting previously unselected package mc. (Reading database ... 102490 files and directories currently installed.) Preparing to unpack .../mc_3%3a4.8.26-1.1_amd64.deb ... Unpacking mc (3:4.8.26-1.1) ... Setting up mc (3:4.8.26-1.1) ... update-alternatives: using /usr/bin/mcview to provide /usr/bin/view (view) in auto mode Processing triggers for desktop-file-utils (0.26-1) ... Processing triggers for mailcap (3.69) ...
Pour déterminer quelles sont les bibliothèques liées à une application, il convient d'utiliser la commande ldd :
root@debian11:~# ldd /usr/bin/mc linux-vdso.so.1 (0x00007ffc4b5cf000) libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007ff729cb2000) libgpm.so.2 => /lib/x86_64-linux-gnu/libgpm.so.2 (0x00007ff729caa000) libe2p.so.2 => /lib/x86_64-linux-gnu/libe2p.so.2 (0x00007ff729c9e000) libssh2.so.1 => /lib/x86_64-linux-gnu/libssh2.so.1 (0x00007ff729c69000) libext2fs.so.2 => /lib/x86_64-linux-gnu/libext2fs.so.2 (0x00007ff729bfd000) libgmodule-2.0.so.0 => /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007ff729bf7000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007ff729ac6000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007ff729ac1000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff729a9f000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff7298da000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff7298d4000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff729790000) libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007ff72966e000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007ff729651000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007ff72964b000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ff7295d8000) /lib64/ld-linux-x86-64.so.2 (0x00007ff72a0e1000) libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007ff7295b2000)
Afin de comprendre ce qui se passe dans le cas où une bibliothèque est manquante, renommez la bibliothèque /usr/lib/libgpm.so.2 en /usr/lib/libgpm.so.2.old :
root@debian11:~# mv /usr/lib/x86_64-linux-gnu/libgpm.so.2 /usr/lib/x86_64-linux-gnu/libgpm.so.2.old
Exécutez de nouveau la commande ldd. Vous obtiendrez un résultat similaire à celui-ci :
root@debian11:~# ldd /usr/bin/mc linux-vdso.so.1 (0x00007fff2999d000) libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007faa2f6d3000) libgpm.so.2 => not found libe2p.so.2 => /lib/x86_64-linux-gnu/libe2p.so.2 (0x00007faa2f6c7000) libssh2.so.1 => /lib/x86_64-linux-gnu/libssh2.so.1 (0x00007faa2f692000) libext2fs.so.2 => /lib/x86_64-linux-gnu/libext2fs.so.2 (0x00007faa2f626000) libgmodule-2.0.so.0 => /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007faa2f620000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007faa2f4ef000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007faa2f4ea000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007faa2f4c8000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faa2f303000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007faa2f2fd000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007faa2f1b9000) libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007faa2f097000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007faa2f07a000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007faa2f074000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007faa2f001000) /lib64/ld-linux-x86-64.so.2 (0x00007faa2fb02000) libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007faa2efdb000)
Notez la présence de la ligne libgpm.so.2 ⇒ not found. Compte tenu de la bibliothèque partagée manquante, le programme mc ne peut plus être lancé :
root@debian11:~# mc mc: error while loading shared libraries: libgpm.so.2: cannot open shared object file: No such file or directory
Renommez la bibliothèque correctement et vérifiez la résolution de l'erreur précédente avec la commande ldd :
root@debian11:~# mv /usr/lib/x86_64-linux-gnu/libgpm.so.2.old /usr/lib/x86_64-linux-gnu/libgpm.so.2 root@debian11:~# ldd /usr/bin/mc linux-vdso.so.1 (0x00007ffc23da7000) libslang.so.2 => /lib/x86_64-linux-gnu/libslang.so.2 (0x00007fe759056000) libgpm.so.2 => /lib/x86_64-linux-gnu/libgpm.so.2 (0x00007fe75904e000) libe2p.so.2 => /lib/x86_64-linux-gnu/libe2p.so.2 (0x00007fe759042000) libssh2.so.1 => /lib/x86_64-linux-gnu/libssh2.so.1 (0x00007fe75900d000) libext2fs.so.2 => /lib/x86_64-linux-gnu/libext2fs.so.2 (0x00007fe758fa1000) libgmodule-2.0.so.0 => /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007fe758f9b000) libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007fe758e6a000) libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fe758e65000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fe758e43000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe758c7e000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe758c78000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fe758b34000) libgcrypt.so.20 => /lib/x86_64-linux-gnu/libgcrypt.so.20 (0x00007fe758a12000) libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fe7589f5000) libcom_err.so.2 => /lib/x86_64-linux-gnu/libcom_err.so.2 (0x00007fe7589ef000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fe75897c000) /lib64/ld-linux-x86-64.so.2 (0x00007fe759485000) libgpg-error.so.0 => /lib/x86_64-linux-gnu/libgpg-error.so.0 (0x00007fe758956000)
Le fichier /etc/ld.so.conf est utilisé pour configurer le cache /etc/ld.so.cache :
root@debian11:~# cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf
Dans ce cas, le fichier ne contient qu'une directive include qui renvoie vers le contenu du répertoire /etc/ld.so.conf.d/ :
root@debian11:~# ls -l /etc/ld.so.conf.d/ total 8 -rw-r--r-- 1 root root 44 Jul 29 2019 libc.conf -rw-r--r-- 1 root root 100 Mar 17 22:37 x86_64-linux-gnu.conf
Le contenu de ces deux fichiers est le suivant :
root@debian11:~# cat /etc/ld.so.conf.d/libc.conf # libc default configuration /usr/local/lib
root@debian11:~# cat /etc/ld.so.conf.d/x86_64-linux-gnu.conf # Multiarch support /usr/local/lib/x86_64-linux-gnu /lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu
La commande ldconfig est utilisée pour :
Les liens symboliques sont utilisés pour gérer les versions de bibliothèques.
La commande ldconfig peut être utilisée avec l'option -p pour visualiser le contenu du cache :
root@debian11:~# ldconfig -p | more 851 libs found in cache `/etc/ld.so.cache' libz3.so.4 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz3.so.4 libzvbi.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libzvbi.so.0 libzvbi-chains.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libzvbi-chains.so.0 libzstd.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libzstd.so.1 libzmq.so.5 (libc6,x86-64) => /lib/x86_64-linux-gnu/libzmq.so.5 libzmf-0.0.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libzmf-0.0.so.0 libzbar.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libzbar.so.0 libz.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libz.so.1 libyaml-0.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libyaml-0.so.2 libyajl.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libyajl.so.2 libx265.so.192 (libc6,x86-64) => /lib/x86_64-linux-gnu/libx265.so.192 libx264.so.160 (libc6,x86-64) => /lib/x86_64-linux-gnu/libx264.so.160 libxxhash.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxxhash.so.0 libxvidcore.so.4 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxvidcore.so.4 libxtables.so.12 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxtables.so.12 libxslt.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxslt.so.1 libxshmfence.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxshmfence.so.1 libxml2.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxml2.so.2 libxmlsec1.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxmlsec1.so.1 libxmlsec1-nss.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxmlsec1-nss.so.1 libxklavier.so.16 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxklavier.so.16 libxkbregistry.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxkbregistry.so.0 libxkbfile.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxkbfile.so.1 libxkbcommon.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxkbcommon.so.0 libxfconf-0.so.3 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxfconf-0.so.3 libxfce4util.so.7 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxfce4util.so.7 libxfce4ui-2.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxfce4ui-2.so.0 libxfce4panel-2.0.so.4 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxfce4panel-2.0.so.4 libxfce4kbd-private-3.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxfce4kbd-private-3.so.0 libxcb.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb.so.1 libxcb-xfixes.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-xfixes.so.0 libxcb-util.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-util.so.1 libxcb-sync.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-sync.so.1 libxcb-shm.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-shm.so.0 libxcb-shape.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-shape.so.0 libxcb-render.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-render.so.0 libxcb-randr.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-randr.so.0 libxcb-present.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-present.so.0 libxcb-glx.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-glx.so.0 libxcb-dri3.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-dri3.so.0 libxcb-dri2.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxcb-dri2.so.0 libxatracker.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxatracker.so.2 libxapian.so.30 (libc6,x86-64) => /lib/x86_64-linux-gnu/libxapian.so.30 libwrap.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwrap.so.0 libwps-0.4.so.4 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwps-0.4.so.4 libwpg-0.3.so.3 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwpg-0.3.so.3 libwpe-1.0.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwpe-1.0.so.1 libwpd-0.10.so.10 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwpd-0.10.so.10 libwoff2enc.so.1.0.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwoff2enc.so.1.0.2 libwoff2dec.so.1.0.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwoff2dec.so.1.0.2 libwoff2common.so.1.0.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwoff2common.so.1.0.2 libwnck-3.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwnck-3.so.0 libwebrtc_audio_processing.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwebrtc_audio_processing.so.1 libwebpmux.so.3 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwebpmux.so.3 libwebpdemux.so.2 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwebpdemux.so.2 libwebp.so.6 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwebp.so.6 libwebkit2gtk-4.0.so.37 (libc6,x86-64) => /lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37 --More-- [q]
Pour ajouter des bibliothèques partagées, il convient de :
Copyright © 2024 Hugh Norris.