multi distribution equivalences

English: A multi emiter transistor with an equ...
Complex systems equivalences (Photo credit: Wikipedia)

I’m used to work with several GNU/Linux distribution. Few weeks agor, I mixed all administration commands between CentOS, debian and archlinux. I tried to use yum on a debian, and aptitude on an archlinux. As a reminder, I found this table.
As the table is under the GNU Free documentation license, I may copy it:

Action Arch Red Hat/Fedora Debian/Ubuntu SLES/openSUSE Gentoo
Install a package(s) by name pacman -S dnf install apt install zypper install
zypper in
emerge [-a]
Remove a package(s) by name pacman -Rs dnf remove apt autoremove zypper remove
zypper rm
emerge -C
Search for package(s) by searching the expression in name, description, short description. What exact fields are being searched by default varies in each tool. Mostly options bring tools on par. pacman -Ss dnf search apt search zypper search
zypper se [-s]
emerge -S
Upgrade Packages – Install packages which have an older version already installed pacman -Syu dnf upgrade apt update; apt upgrade zypper update zypper up emerge -u world
Upgrade Packages – Another form of the update command, which can perform more complex updates — like distribution upgrades. When the usual update command will omit package updates, which include changes in dependencies, this command can perform those updates. pacman -Syu dnf distro-sync apt full-upgrade zypper dup emerge -uDN world
Reinstall given Package – Will reinstall the given package without dependency hassle. pacman -S dnf reinstall apt install –reinstall zypper install –force emerge [-a]
Installs local package file, e.g. app.rpm and uses the installation sources to resolve dependencies pacman -U dnf install apt install zypper in emerge
Updates package(s) with local packages and uses the installation sources to resolve dependencies pacman -U dnf upgrade debi emerge
Use some magic to fix broken dependencies in a system pacman dep level – pacman -Dk, shared lib level – findbrokenpkgs or lddd dnf repoquery –unsatisfied apt-get –fix-broken
aptitude install
zypper verify revdep-rebuild
Only downloads the given package(s) without unpacking or installing them pacman -Sw dnf download apt-get install –download-only (into the package cache)
apt-get download (bypass the package cache)
zypper –download-only emerge –fetchonly
Remove dependencies that are no longer needed, because e.g. the package which needed the dependencies was removed. pacman -Qdtq | pacman -Rs – dnf autoremove apt-get autoremove zypper rm -u emerge –depclean
Downloads the corresponding source package(s) to the given package name(s) Use ABS && makepkg -o dnf download –source apt-get source / debcheckout zypper source-install emerge –fetchonly
Remove packages no longer included in any repositories. pacman -Qm | pacman -Rs – package-cleanup –orphans aptitude purge ‘~o’
Install/Remove packages to satisfy build-dependencies. Uses information in the source package. automatic dnf builddep apt-get build-dep zypper si -d emerge -o
Add a package lock rule to keep its current state from being changed /etc/pacman.conf
modify IgnorePkg array
dnf.conf <–”exclude” option (add/amend) apt-mark hold pkg Put package name in /etc/zypp/locks, or zypper al /etc/portage/package.mask
Delete a package lock rule remove package from IgnorePkg line in /etc/pacman.conf apt-mark unhold pkg Remove package name from /etc/zypp/locks or zypper rl /etc/portage/package.mask (or package.unmask)
Show a listing of all lock rules cat /etc/pacman.conf /etc/apt/preferences View /etc/zypp/locks or zypper ll cat /etc/portage/package.mask
Add a checkpoint to the package system for later rollback (unnecessary, done on every transaction) n/a
Remove a checkpoint from the system N/A N/A n/a
Provide a list of all system checkpoints N/A dnf history list n/a
Rolls entire packages back to a certain date or checkpoint. N/A dnf history rollback n/a
Undo a single specified transaction. N/A dnf history undo n/a
Mark a package previously installed as a dependency as explicitly required. pacman -D –asexplicit dnf mark install apt-mark manual emerge –select
Install package(s) as dependency / without marking as explicitly required. pacman -S –asdeps dnf install => dnf mark remove aptitude install ‘$package&M’ emerge -1
Package information management
Get a dump of the whole system information – Prints, Saves or similar the current state of the package management system. Preferred output is text or XML. (Note: Why either-or here? No tool offers the option to choose the output format.) (see /var/lib/pacman/local) (see /var/lib/rpm/Packages) apt-cache stats n/a emerge –info
Show all or most information about a package. The tools’ verbosity for the default command vary. But with options, the tools are on par with each other. pacman -[S|Q]i dnf list, dnf info apt show / apt-cache policy zypper info zypper if emerge -S; emerge -pv; eix
Search for package(s) by searching the expression in name, description, short description. What exact fields are being searched by default varies in each tool. Mostly options bring tools on par. pacman -Ss dnf search apt search zypper search zypper se [-s] emerge -S
Display changelogs apt-get changelog rpm -q –changelog
e-mail delivery of package changes apt-get install apt-listchanges
Lists packages which have an update available. Note: Some provide special commands to limit the output to certain installation sources, others use options. pacman -Qu dnf list updates, dnf check-update apt-get upgrade -> n zypper list-updates zypper patch-check (just for patches) emerge -uDNp world
Display a list of all packages in all installation sources that are handled by the packages management. Some tools provide options or additional commands to limit the output to a specific installation source. pacman -Sl dnf list available apt-cache dumpavail apt-cache dump (Cache only) apt-cache pkgnames zypper packages emerge -ep world
Displays packages which provide the given exp. aka reverse provides. Mainly a shortcut to search a specific field. Other tools might offer this functionality through the search command. pkgfile dnf provides apt-file search zypper what-provides zypper wp equery belongs (only installed packages); pfl
Display packages which require X to be installed, aka show reverse dependencies. pacman -Sii dnf repoquery –alldeps –whatrequires apt-cache rdepends / aptitude search ~D$pattern zypper search –requires equery depends
Display packages which conflict with given expression (often package). Search can be used as well to mimic this function. dnf repoquery –conflicts aptitude search ‘~C$pattern’
List all packages which are required for the given package, aka show dependencies. pacman -[S|Q]i dnf repoquery –requires apt-cache depends / apt-cache show zypper info –requires emerge -ep
List what the current package provides dnf provides dpkg -s / aptitude show zypper info –provides equery files
List the files that the package holds. Again, this functionality can be mimicked by other more complex commands. pacman -Ql
pkgfile -l
dnf repoquery -l dpkg-query -L rpm -ql equery files
List all packages that require a particular package dnf repoquery –alldeps –whatrequires aptitude search ~D{depends,recommends,suggests}:$pattern / aptitude why zypper search –requires equery depends -a
Search all packages to find the one which holds the specified file. auto-apt is using this functionality. pkgfile -s dnf provides apt-file search zypper search -f equery belongs
Display all packages that the specified packages obsoletes. dnf list obsoletes apt-cache show
Verify dependencies of the complete system. Used if installation process was forcefully killed. pacman -Dk dnf repoquery –requires apt-get check zypper verify emerge -uDN world
Generates a list of installed packages pacman -Q dnf list installed dpkg –list | grep ^i zypper search –installed-only emerge -ep world
List packages that are installed but are not available in any installation source (anymore). pacman -Qm dnf list extras deborphan zypper se -si | grep ‘System Packages’ eix-test-obsolete
List packages that were recently added to one of the installation sources, i.e. which are new to it. (none) dnf list recent aptitude search ‘~N’ / aptitude forget-new n/a eix-diff
Show a log of actions taken by the software management. cat /var/log/pacman.log dnf history cat /var/log/dpkg.log cat /var/log/zypp/history located in /var/log/portage
Clean up all local caches. Options might limit what is actually cleaned. Autoclean removes only unneeded, obsolete information. pacman -Sc
pacman -Scc
dnf clean all apt-get clean / apt-get autoclean / aptitude clean zypper clean eclean distfiles
Add a local package to the local package cache mostly for debugging purposes. cp $filename /var/cache/pacman/pkg/ apt-cache add n/a cp $filename /usr/portage/distfiles
Display the source package to the given package name(s) dnf repoquery -s apt-cache showsrc n/a
Generates an output suitable for processing with dotty for the given package(s). apt-cache dotty n/a
Set the priority of the given package to avoid upgrade, force downgrade or to overwrite any default behavior. Can also be used to prefer a package version from a certain installation source. ${EDITOR} /etc/pacman.conf
Modify HoldPkg and/or IgnorePkg arrays
/etc/apt/preferences, apt-cache policy zypper mr -p ${EDITOR} /etc/portage/package.keywords
Add a line with =category/package-version
Remove a previously set priority /etc/apt/preferences zypper mr -p ${EDITOR} /etc/portage/package.keywords
remove offending line
Show a list of set priorities. apt-cache policy /etc/apt/preferences zypper lr -p cat /etc/portage/package.keywords
Ignores problems that priorities may trigger. n/a
Installation sources management ${EDITOR} /etc/pacman.conf ${EDITOR} /etc/yum.repos.d/${REPO}.repo ${EDITOR} /etc/apt/sources.list ${EDITOR} /etc/zypp/repos.d/${REPO}.repo layman
Add an installation source to the system. Some tools provide additional commands for certain sources, others allow all types of source URI for the add command. Again others, like apt and dnf force editing a sources list. apt-cdrom is a special command, which offers special options design for CDs/DVDs as source. /etc/pacman.conf /etc/yum.repos.d/*.repo apt-cdrom add zypper service-add layman, overlays
Refresh the information about the specified installation source(s) or all installation sources. pacman -Sy (always upgrade the whole system afterwards) dnf clean expire-cache && dnf check-update apt-get update zypper refresh zypper ref emerge –sync;layman -S
Prints a list of all installation sources including important information like URI, alias etc. cat /etc/pacman.d/mirrorlist cat /etc/yum.repos.d/* apt-cache policy zypper service-list layman -l
Disable an installation source for an operation dnf –disablerepo= emerge package::repo-to-use
Download packages from a different version of the distribution than the one installed. dnf –releasever= apt-get install -t release package/ apt-get install package/release (deps not covered) echo “category/package ~amd64” >> /etc/portage/package.keywords && emerge package
Other commands
Start a shell to enter multiple commands in one session apt-config shell zypper shell
Package Verification
Single package pacman -Qk[k] rpm -V debsums rpm -V equery check
All packages pacman -Qk[k] rpm -Va debsums rpm -Va equery check
Package Querying
List installed local packages along with version pacman -Q rpm -qa dpkg -l zypper search -s; rpm -qa emerge -e world
Display local package information: Name, version, description, etc. pacman -Qi rpm -qi dpkg -s / aptitude show zypper info; rpm -qi emerge -pv and emerge -S
Display remote package information: Name, version, description, etc. pacman -Si dnf info apt-cache show / aptitude show zypper info emerge -pv and emerge -S
Display files provided by local package pacman -Ql rpm -ql dpkg -L rpm -Ql equery files
Display files provided by a remote package pkgfile -l dnf repoquery -l apt-file list $pattern pfl
Query the package which provides FILE pacman -Qo rpm -qf (installed only) or dnf provides (everything) dpkg -S / dlocate zypper search -f equery belongs
Query a package supplied on the command line rather than an entry in the package management database pacman -Qp rpm -qp dpkg -I
Show the changelog of a package pacman -Qc rpm -q –changelog apt-get changelog equery changes -f
Search locally installed package for names or descriptions pacman -Qs rpm -qa ‘*<str>*’ aptitude search ‘~i(~n $name|~d $description)’ eix -S -I
List packages not required by any other package pacman -Qt package-cleanup –all –leaves deborphan -anp1
List packages installed explicitly (not as dependencies) pacman -Qe apt-mark showmanual
List packages installed automatically (as dependencies) pacman -Qd apt-mark showauto
Building Packages
Build a package makepkg -s rpmbuild -ba (normal)
mock (in chroot)
debuild rpmbuild -ba; build; osc build ebuild; quickpkg
Check for possible packaging issues namcap rpmlint lintian rpmlint repoman
List the contents of a package file pacman -Qpl rpmls rpm -qpl dpkg -c rpm -qpl
Extract a package tar -Jxvf rpm2cpio | cpio -vid dpkg-deb -x rpm2cpio | cpio -vid tar -jxvf
Query a package supplied on the command line rather than an entry in the package management database pacman -Qp rpm -qp dpkg -I
Action Arch Red Hat/Fedora Debian/Ubuntu SUSE/openSUSE Gentoo

Seine flooding

Français : Crue de la Seine à Paris en 1910.
Seine, Paris, 1910. (Photo credit: Wikipedia)

On this mounth, the Seine decided to flood Paris and its neighborouds, so I took my camera to take pictures. I realised:

I was not alone

TV team waiting for the news
TV team waiting for the news
Guy taking picture thanks to a stick
People taking pictures
Taking picture with foot almost on the water

people live on boats

Even when it is barely reachable

homemade bridge
homemade bridge

Some places are impressive when flooded

Flooded road (Voie George Pompidou)
Pont Mirabeau
Voie Georges Pompidou
Temporary dam
Le zouave
Pedestrian bridge in front of the musée d’Orsay
Le Louvre

A flood carry garbages


Life reborn quickly

Small shop

Paris is still beautiful

In front of a boat

UTF8, base64 and other encoding conversion

A/D and D/A conversion.
encoding conversion (Photo credit: Wikipedia)

A common way to represent binary files in ascii-only diplay is to use base64. This is also done a piece of software does not handle unicode: it manipulate its base64 representation.

Let’s take as example this 2 binary sequence represented in base64:
6YCZ5YCL57ay56uZ5piv576O6bqX55qECg== and dGhpcyB3ZWJzaXRlIGlzIGJlYXV0aWZ1bAo=

  • to text/unicode:
    echo '6YCZ5YCL57ay56uZ5piv576O6bqX55qECg==' | base64 -d
    echo 'dGhpcyB3ZWJzaXRlIGlzIGJlYXV0aWZ1bAo=' | base64 -d
  • to text/unicode:
    echo '6YCZ5YCL57ay56uZ5piv576O6bqX55qECg==' | base64 -d | xxd -p -i | sed -e's/, //g'
    echo 'dGhpcyB3ZWJzaXRlIGlzIGJlYXV0aWZ1bAo=' | base64 -d | xxd -p -i | sed -e's/, //g'
  • from hex:
    echo 'e98099e5808be7b6b2e7ab99e698afe7be8ee9ba97e79a840a' | xxd -p -r
  • mix hex and ascii to ascii:
    echo -e 'this\x20website\x20is\x20bueatiful'

GPG key renewal

English: An example of a standard key used for...
standard key (Photo credit: Wikipedia)

What happen when a PGP key expire? Obvious answer: you can no longer securely use it. Nevertheless, you may not delete it as you must be able to read your encrypted files.

Basics step that should be done are:

  1. generate a new (sub)key
  2. publish your key
  3. test your newly generated key

generate a new key

first setup

For the first key generation, you should have used
The common way using pgp is:

gpg --gen-key

On some installation, you may have used gpg --full-gen-key to a obtain a dialog for each option

key rotation

You must generate a new subkey:

gpg --edit-key 
> addkey
> save

Then you add two keys: one to sign and one to encrypt. Do not forget to save your changes.
I recommand to use the default choice when creating a new key (RSA and RSA for my current installation)

publish your key

quite simple:

gpg --keyserver --send-keys

you may use any keyserver of your choice. A short list include,,,

test your key

You may use Adele ( Send an email to Adele. It is quite straightforward.

loop devices

Deutsch: Hondaknoten, als Auge für Lassoschlin...
Loop device (Photo credit: Wikipedia)

Loop devices are used to acces any file as if it were a block device such as a disk. On GNU/linux, the canonical command to interact with loop devices is losetup. To list the next usable loop device: losetup -f

disk image loop mount

The most spread usage of loop devices is mounting a file such as an iso or a img file as if it were a disk.

newloop = $( losetup -f )
losetup $newloop /path/to/iso
mount $newloop /mnt

freebsd md

On UNIX, loop device interaction is different. On freeBSD (since freeBSD 5) you may use mdconfig. To mount an iso file:

unit=$( mdconfig -t vnode -f /path/to/iso )
mount -t cd9660 /dev/$unit /mnt # -t mandatory

swap file over any filesystem

swap can be either into a dedicated partition or into a file. In the second case, the file cannot reside anywhere. I understand (but I may be mistaken) that the kernel will try to access the swap file without using VFS. Thus, the number of filesystem a swap can reside on is limited and does not include network filesystem. One way to avoid this limitation is to create a loop device. The kernel will access a block device (the loop device). You may expect a dramatic fall in performance (due to number of abstraction layers).

Donnot forget that swap can host cached information in an unencrypted way (such as RAM, but in a more persistent way).

create file

First of all, you may create a file. The most obvious way is to use dd:

dd if=/dev/zero of=/path/to/file bs=1M count=512

But one can also use truncate:

truncate -s 512M /path/to/file

Do not forget to format it as a swap partition (man mkswap) if you use it a partition or to check permissions if you use it as a swapfile; and to activate this swap (man swapon).

mount file

This section is greatly inspired by this post.

swapfile=$(losetup -f)
truncate -s 8G /path/to/file       # create 8G sparse swap file
losetup $swapfile /path/to/file    # mount file to loop
mkswap $swapfile
swapon $swapfile

awesome global shortcut

Multimedia keyboard
Multimedia keyboard (Photo credit: Wikipedia)

The awesome window manager does not provide GUI configuration tool.

Here is a litte how to to provide a feature using global shortcut, illustrated with wolume control.

Defining and identifying the feature and the shortcut


The wanted feature is usually accessible via the CLI. For example, to modify the sound, the alsa provides the amixer command (via the alsa-utils package in archlinux):

amixer set Master 40%     # put Master level to 40%
amixer set Master 9%+     # increase Master level by 9%
amixer set Master 9%-     # decrease Master level by 9%
amixer sset Master toggle # toggle Mute on Master

The shortcut can be a combination of keys including the modkey. You may also use some of the Xfree86 key binding1  if your keyboard provides use some multimedia keys.

For sound control, the symbols of interest are XF86AudioRaiseVolume, XF86AudioLowerVolume and XF86AudioMute.


Modifying configuration files


I don’t fully understand the functionning of the awful.key function. It allows to execute a command when pressing some keys. Those keys are sepcified in the first two parameters, and the lua function executed in the last parameter. Several example can be found on the awesome wiki.


To enable a global keybinding, this awful.key() function must be placed inside the global.keys() function.

The configuration file to modify is the rc.lua whose default location is inside the $XDG_CONFIG_HOME/awesome/ directory (~/.config/awesome/ in my case).

For the sound configuration, modify the globalkeys adding the three wanted features:


globalkeys = awful.util.table.join(
    awful.key({ }, "XF86AudioRaiseVolume", function () awful.util.spawn("amixer set Master 2%+") end),
    awful.key({ }, "XF86AudioLowerVolume", function () awful.util.spawn("amixer set Master 2%-") end),
    awful.key({ }, "XF86AudioMute", function () awful.util.spawn("amixer sset Master toggle") end),




random unix notes (part II)

This legend is copied at a resolution of 100 p...
Specific file descriptor (Photo credit: Wikipedia)

Few weeks ago, I wrote down about some unix tools. Here are some other multiple process using the same stdout/stdin file desricptor.

file descriptor

The 3 most used file descriptors are stdin, stdout and stderr. A command’s stdout can easily be redirected to another command’s sdtin using pipe mechanism.

More about file descriptor can be found in this stackoverflow answer and this tiny tutorial. In short, file descriptors are located under /dev/fd/ (e.g. stdin is /dev/fd/0) and an unnamed pipe can be created using NN>&1 (redirecting stdout to /dev/fd/NN).

piping from multiple processes

The problem is the following: I have multiple command and I want to concatenate all the outputs. An obvious and easy way is to pipe all the outputs as input to the cat command. To do so, one must group all this commands together:

$ clear ; (ls /usr ; echo "foo bar" ; grep ntp /etc/passwd) | cat
foo bar
ntp:x:87:87:Network Time Protocol:/var/lib/ntp:/bin/false



moreutils (available in both archlinux and debian) is a tool collection. One (pee) is fitted to pipe an output to multiple command:

$ cd /usr && ls -1
$ ls -1 | pee 'tail -1' 'head -1'

Conference posters

English: This mindmap (Mind map) consists of r...
mindmap needing clarification (Photo credit: Wikipedia)

Few weeks ago, I wrote about mindmap in [latex]LaTeX[/latex]. Now I want to precise few ideas and to have all key ideas visible in one sight. I think the best layout is similar to a conference poster:

  • key ideas are easily seen few meters away
  • one can easily move close to the poster to precise those ideas

I found the beamerposter document class that answer my needs, but it is not well documented. Here are some results of my experimentation.


Its functionning is quite similar to the beamer package. The key concept to understand is the block.

The actual content is enclosed into one frame, and is divided in block. Making another frame will produce another poster. Blocks can go into a column or not. You may divide your poster in as many column as you want. Columns are enclosed in a columns environment.

To control the drawing of a box around blocks, you can modify your current theme. I choose to use the fancybox package and created a new environment based on this stackexchange answer.

The beamer block definition is controlled by the directive \setbeamertemplate{block begin} and \setbeamertemplate{block end}.


Themes are the same as for beamer presentation. It is possible to put no themes at all (the default one will be used).

Minimum Working example

As for many [latex]LaTeX[/latex] packages, finding a minimum working example (MWE) is useful. I think it is better to add specification to a working example than removing.

Here is my MWE:

\usepackage{fancybox} %ovalbox
% title %
\usebeamercolor{title in headline}{\Huge{\textbf{\inserttitle}}\\[0.5ex]}
\usebeamercolor{author in headline}{\Large{\insertauthor}\\[1ex]}
% rounded box around blocks %
\setbeamertemplate{block begin}{
\begin{beamercolorbox}[colsep*=0ex,dp={2ex}]{block title}
\usebeamerfont{block title}\large\insertblocktitle
\ifbeamercolorempty[bg]{block title}{}{\ifbeamercolorempty[bg]{block body}{}{\nointerlineskip\vskip-0.5pt}}
\usebeamerfont{block body}
\begin{beamercolorbox}[colsep*=0ex,vmode]{block body}
\setbeamertemplate{block end}{
\title{Nice minimal working example}
\addtobeamertemplate{block end}{}{\vspace*{2ex}} % White space under blocks
\addtobeamertemplate{block alerted end}{}{\vspace*{2ex}} 
\begin{block}{Dolor sit}
\item lorem
\item ipsum
\item dolor
Justo vitae lacus tincidunt ultrices.
\begin{block}{Dolor sit}
\item $1^{\text{st}}$ item
\item second item, very important item
\item third item

The result:


quick and easy calendar

English: Calendar
Calendar (Photo credit: Wikipedia)

A quick post to share something I was looking for for several month: a quick way to see a calendar.

A simple tool using the command line interface is the cal command that display a calendar in a terminal. In the archlinux distribution, this command is part of the util-linux package.

Here is a brief illustration:

$ cal -3
    November 2015         December 2015         January 2016    
Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su  Mo Tu We Th Fr Sa Su
                   1      1  2  3  4  5  6               1  2  3
 2  3  4  5  6  7  8   7  8  9 10 11 12 13   4  5  6  7  8  9 10
 9 10 11 12 13 14 15  14 15 16 17 18 19 20  11 12 13 14 15 16 17
16 17 18 19 20 21 22  21 22 23 24 25 26 27  18 19 20 21 22 23 24
23 24 25 26 27 28 29  28 29 30 31           25 26 27 28 29 30 31

UPDATE: Moreover, one can use calendar 1 along with its own shell script(s) to periodically check upcoming events and possibly mail reminders.

this morning thought

Pour toi qui est touché, par ces rafales d’horreur
Pour toi qui  est tombé, et pour toi qui a peur
Pour toi je vais danser, la rage de vivre au ventre
Pour toi je vais lutter contre cette épouvante

Le poing plein de colère, et les yeux plein de larmes
Pour toi je lève mon verre, car c’est là ma seule arme
Contre cette lâche force, qui se cache, qui attends
Et qui tire sa force de notre enfermement

Oui pour toi je vais vivre, pour toi je vais jouer
Faire comme dans les livres, me permettre de rêver,
Et le faire pour toi

Celà ne m’empèche pas, d’aider dans la douleur
Tout ces proches qui sans toi, on perdu toute candeur
Et le faire pour toi