Skip to content.
Joe Heaton's Webzone
🥐 ☕
Online since 2011

Package Management for .deb & .rpm for Debian, Ubuntu & Red Hat, CentOS, Suse

A smattering of useful commands for dealing with package managers!

Frontends

Package manager front-ends are the programs used to use the package manager, for Debian these are apt, apt-get & dpkg; for CentOS these are yum, dnf & rpm.

List all packages

> dpkg -l
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  accountsservice                               0.6.45-2                                     amd64        query and manipulate user account information
ii  accountwizard                                 4:18.08.3-1                                  amd64        wizard for KDE PIM applications account setup
ii  acl                                           2.2.53-4                                     amd64        access control list - utilities
ii  adduser                                       3.118                                        all          add and remove users and groups
> rpm -qa
...

List files provided by a package

> dpkg -S inotifywait
inotify-tools: /usr/share/man/man1/inotifywait.1.gz
inotify-tools: /usr/bin/inotifywait
...
> rpm -ql inotifywait
/etc/ssh
/etc/ssh/moduli
/usr/bin/ssh-keygen
...

List enabled repos

> dpkg ...
> yum repolist

Show scriptlets

Packages can run small shell scripts as part of their install and removal.

> dpkg --dry-run -i package.deb ?????
> rpm -qp --scripts package.rpm
postinstall scriptlet (using /bin/sh):
...
preuninstall scriptlet (using /bin/sh):
...
postuninstall scriptlet (using /bin/sh):
...

Update except for …

> apt-mark hold openssl
> apt dist-upgrade
> apt-mark unhold openssl

> yum update --exclude=openssl

Extract files

> dpkg -x package.deb .

> rpm2cpio package.rpm | cpio -idmv

Build process

RPM

RPMs are build using rpmbuild on a build directory which is defined by ~/.rpmmacros, some directives being:

  • $_topdir /home/joe/rpmbuild - Where rpmbuild will look for sources and produce RPMs.
  • %_tmppath $_topdir/temp - A location for temporary files, perhaps place it in /tmp/ to ensure it gets cleared.
  • %dist .heaton - This is inserted after the version number to denote the package variant.

The rpmbuild/ directory structure:

  • BUILD
    • Axiom
  • RPMS
    • Output completed RPM
  • SOURCES
    • Files to be packaged in RPM
  • SPECS
    • Configuration & scripting for the RPM build
  • SRPMS
    • Conveniently extract or reproduce an existing RPM from its Source RPM
%define _prefix /usr/local/bin/

Name:        nano
Version:     2.8.6
Release:     1%{?dist}
Summary:     a user-friendly editor, a Pico clone with enhancements

Group:       applications/editors
URL:         https://nano-editor.org/
License:     GPLv3+
Vendor:      GNU Project

Source0:     %{name}-%{version}.tar.xz

BuildRoot:   %{_tmppath}/%{name}-%{version}-buildroot
BuildArch:   x86_64
BuildRequires: autoconf, automake, gettext-devel, ncurses-devel, texinfo

%description
GNU nano is a small and friendly text editor.  It aims to emulate the
Pico text editor while also offering several enhancements.

%prep
%setup -q -n %{name}-%{version}

%build
tar -xf "%{SOURCE0}" --strip-components=1

%configure
make

%pre

%install
make install DESTDIR=$RPM_BUILD_ROOT

mkdir -p %{buildroot}/opt/ukmo/nano/%{version}
mkdir -p "%{buildroot}/opt/metoffice/modulefiles/nano-%{version}"
%{__install} -m 0644 -D "%{SOURCE1}" "%{buildroot}/opt/metoffice/modulefiles/nano/%{version}"

%clean
rm -rf "%{buildroot}"

%post

%files
${_prefix}/nano

%changelog
* Fri Jan 01 2016 Joe Heaton <[email protected]> - 1.2.3-0
- Initial Version
avatar
Joe Heaton

Email: [email protected]

Web:

Joe’s technology-focused murmurings.
comments powered by Disqus

Settings!