Intro
This post adds nothing to the knowledge out there and readily available on the Internet. I just got tired of looking up elsewhere the few useful rpm and yum commands that I employ. Here’s how I installed a missing binary on one system when I have a similar system that has it.
RPM is the Redhat Package Manager. It is also used on Suse Linux (SLES). A much better resource than this page (Hey, we can’t all be experts!) is http://www.idevelopment.info/data/Unix/Linux/LINUX_RPMCommands.shtml
List all installed packages:
$ rpm −qa
dmidecode-2.11-2.el6.x86_64
libXcursor-1.1.10-2.el6.x86_64
basesystem-10.0-4.el6.noarch
plymouth-core-libs-0.8.3-24.el6.centos.x86_64
libXrandr-1.3.0-4.el6.x86_64
ncurses-base-5.7-3.20090208.el6.x86_64
python-ethtool-0.6-1.el6.x86_64
…
Same as above – list all installed packages – but list the most recently installed packages first (Wish I had discovered this command sooner)!
$ rpm −qa −−last
libcurl-devel-7.19.7-35.el6 Mon Apr 1 20:00:47 2013 curl-7.19.7-35.el6 Mon Apr 1 20:00:47 2013 libidn-devel-1.18-2.el6 Mon Apr 1 20:00:46 2013 libcurl-7.19.7-35.el6 Mon Apr 1 20:00:46 2013 libssh2-1.4.2-1.el6 Mon Apr 1 20:00:45 2013 ncurses-static-5.7-3.20090208.el6 Mon Apr 1 19:59:24 2013 ncurses-devel-5.7-3.20090208.el6 Mon Apr 1 19:58:40 2013 gcc-c++-4.4.7-3.el6 Fri Mar 15 07:59:36 2013 gcc-gfortran-4.4.7-3.el6 Fri Mar 15 07:59:34 2013 ... |
Which package owns a command:
$ rpm −qf `which make`
make-3.81-3.el5
(This was run on an older Redhat 5.6 system which has make.)
Similarly, which package owns a file:
$ rpm −qf /usr/lib64/libssh2.so.1
libssh2-1-1.2.9-4.2.2.1
List files in (an installed) package:
$ rpm −ql freeradius-client-1.1.6-40.1
List files in an rpm package file:
$ rpm −qlp packages/HPSiS1124Core-11.24.241-Linux2.4.rpm
Get history of the package versions on this server:
$ yum history list te-agent
Get history of the list of changes to this package:
$ rpm -q -changelog te-agent
Install a package from a local RPM file:
$ rpm −i openmotif-libs-32bit-2.3.1-3.13.x86_64.rpm
Uninstall a packge:
$ rpm −e package
$ rpm −e freeradius-server-libs-2.1.1-7.12.1
How will you install the missing make in CentOS? Use yum to search for it:
$ yum search make
Loaded plugins: fastestmirror Determining fastest mirrors * base: mirror.umd.edu * extras: mirror.umd.edu * updates: mirror.cogentco.com ============================== N/S Matched: make =============================== automake.noarch : A GNU tool for automatically creating Makefiles ... imake.x86_64 : imake source code configuration and build system ... make.x86_64 : A GNU tool which simplifies the build process for users makebootfat.x86_64 : Utility for creation bootable FAT disk mendexk.x86_64 : Replacement for makeindex with many enhancements ... |
How to install it:
$ sudo yum install make.x86_64
Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.umd.edu * extras: mirror.umd.edu * updates: mirror.cogentco.com Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package make.x86_64 1:3.81-19.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved =========================================================================================================================== Package Arch Version Repository Size =========================================================================================================================== Installing: make x86_64 1:3.81-19.el6 base 389 k Transaction Summary =========================================================================================================================== Install 1 Package(s) Total download size: 389 k Installed size: 1.0 M Is this ok [y/N]: y Downloading Packages: make-3.81-19.el6.x86_64.rpm | 389 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : 1:make-3.81-19.el6.x86_64 1/1 Installed: make.x86_64 1:3.81-19.el6 Complete! |
make should now be in your path.
If we were dealing with SLES I would use zypper instead of yum, but the idea of searching and installing is similar.
Debian Linux, e.g. Raspberry Pi
Find which package a file belongs to:
> dpkg -S filepath
List installed packages:
> dpkg -l
List all files belonging to the package iperf3:
> dpkg -L iperf3
Transferring packages from one system to another
When I needed to transfer Debian packages from one system with Internet access to another without, I would do:
apt download apache2
Then sftp the file to the other system and on it do
apt install ./apache2_2.4.53-1~deb11u1_amd64.deb
In fact that only worked after I installed all dependencies. This web of files covered all dependencies:
apache2-bin_2.4.53-1~deb11u1_amd64.deb
apache2-data_2.4.53-1~deb11u1_all.deb
apache2-utils_2.4.53-1~deb11u1_amd64.deb
apache2_2.4.53-1~deb11u1_amd64.deb
libapr1_1.7.0-6+deb11u1_amd64.deb
libaprutil1-dbd-mysql_1.6.1-5_amd64.deb
libaprutil1-dbd-odbc_1.6.1-5_amd64.deb
libaprutil1-dbd-pgsql_1.6.1-5_amd64.deb
libaprutil1-dbd-sqlite3_1.6.1-5_amd64.deb
libaprutil1-ldap_1.6.1-5_amd64.deb
libaprutil1_1.6.1-5_amd64.deb
libgdbm-compat4_1.19-2_amd64.deb
libjansson4_2.13.1-1.1_amd64.deb
liblua5.3-0_5.3.3-1.1+b1_amd64.deb
libmariadb3_1%3a10.5.15-0+deb11u1_amd64.deb
libperl5.32_5.32.1-4+deb11u2_amd64.deb
mailcap_3.69_all.deb
mariadb-common_1%3a10.5.15-0+deb11u1_all.deb
mime-support_3.66_all.deb
mysql-common_5.8+1.0.7_all.deb
perl-modules-5.32_5.32.1-4+deb11u2_all.deb
perl_5.32.1-4+deb11u2_amd64.deb
ssl-cert_1.1.0+nmu1_all.deb