Gentoo Cheat Sheet
emerge — configuration — ebuild repository — dispatch-conf
world file — USE flags — ebuilds — profiles
upgrades — using testing packages — binary packages
tools — gentoolkit — eselect
Portage FAQ — cheat sheet — FAQ
all articles
This is a reference card of useful commands and tips for administrating Gentoo systems. Newcomers and greybeards alike are encouraged to add their helpful tips below.
Package management
Sync methods
It is important to read and follow any and all news items that may be listed after performing a repository sync. See detailed instructions about upgrades.
Portage
Sync all repositories that are set to auto-sync including the Gentoo ebuild repository:
root #emaint --auto syncOr, for short:
root #emaint -a syncSync the Gentoo ebuild repository using the mirrors by obtaining a snapshot that is (at most) a day old:
root #emerge-webrsyncemerge --sync now runs the emaint sync module with the --auto option. See Portage's sync operation.
eix
Sync configured package repositories and the Gentoo ebuild repository using eix:
root #eix-syncThis not only syncs the repositories, it also updates the cache used by eix to perform queries. It may be preferable to configure portage to update the cache automatically.
Package listings
qlist
List installed packages with version number and name of overlay used:
root #qlist -IRvqlist is provided by app-portage/portage-utils .
eix
To view the list of packages in the world set, along with their available versions, it is possible to use eix:
root #eix --world | lessTo keep color in the output, use the --color switch:
root #eix --color -c --world | less -RPortage
The Gentoo Linux Security Advisories check tool can test systems against some security vulnerabilities:
user $glsa-check --test allReferring to Package sets, the selected set packages are listed by issuing:
user $emerge --pretend --quiet --emptytree --nodeps @selectedList all (*), or specific named, packages using multiple slots:
user $equery list --duplicates '*'List the available synchronized versions and keywords of a package.
user $equery y firefoxPackage installation
In the following examples the www-client/firefox package will be used, but users should replace it with the package they want to install.
List what packages would be installed, without installing them:
user $emerge --pretend --verbose www-client/firefoxOr, for short:
user $emerge -pv www-client/firefoxList what packages would be installed, ask for confirmation before installing them:
root #emerge --ask --verbose www-client/firefoxOr, for short:
root #emerge -av www-client/firefoxInstall a specific version
Install a specific version of a package (use "\=" (backslash and equal sign) for shells that attach special meaning to the "=" character). For example:
root #emerge --ask =www-client/firefox-96.0.1This will work temporarily, until the system is updated. During an update Portage will try to install the latest stable version of the package no matter which version is currently installed; whether the package was originally emerged via a preceding = operator or not.
To prevent Portage from automatically updating a package, add a line into a the /etc/portage/package.mask/package.mask file (create the file if it does not exist). Specify using the greater than operator (>) prefix if it is an older package than latest stable or lesser than operator (<) as a prefix if it is a newer one:
/etc/portage/package.mask<www-client/firefox-96.0.1
See /etc/portage/package.mask for more details on package masking.
Install only some packages in a group
To exclude packages and their dependencies when updating:
root #emerge --update @world --exclude="firefox libreoffice"Add an already installed package to the world
Update the world file without reinstalling a package:
root #emerge --noreplace firefoxInstall without adding to the world file
Install a package without adding it to the world file:
root #emerge --ask --oneshot www-client/firefoxOr, for short:
root #emerge -a1 www-client/firefoxPackage removal
See the emerge documentation on removing packages for full information.
--deselect
Use emerge --deselect (or -W option for short) to remove the specified package from the @world set, indicating that the package is no longer wanted:
root #emerge --deselect www-client/firefoxNow run emerge --depclean (or -c option for short). The --pretend (-p) option will have emerge display what actions would be taken, this must be reviewed to make sure no required packages would be removed:
user $emerge --pretend --depcleanIf emerge --depclean has not been run in a while, it may try to remove many packages - caution is advised. Once it has been assured that emerge --depclean will only remove unneeded packages, run:
root #emerge --ask --depcleanThe --ask option is not really needed after a check via --pretend, but is included in the previous example to help avoid "copy paste" mishaps.
Do not confuse the lower case
-c switch, which is short for --depclean (and is safe), with the upper case -C switch which risks damaging the system and should only be used when absolutely required (see warning in following section).--depclean
To directly remove a package that no other packages depend on:
root #emerge --ask --verbose --depclean www-client/firefoxCalculating dependencies... done! >>> Calculating removal order... >>> These are the packages that would be unmerged: www-client/firefox selected: 68.5.0 protected: none omitted: none All selected packages: =www-client/firefox-68.5.0 >>> 'Selected' packages are slated for removal. >>> 'Protected' and 'omitted' packages will not be removed. Would you like to unmerge these packages? [Yes/No]
As a safety measure, depclean will not remove any packages unless all required dependencies have been resolved. As a consequence of this, it is sometimes necessary to first run:
root #emerge --ask --verbose --update --newuse --deep @worldUse --changed-use (-U) in place of --newuse (-N) to avoid rebuilds when the only changes are USE flags added to or dropped from the repository. Use the --quiet (-q) flag for more succinct execution:
root #emerge --ask --quiet --update --changed-use --deep @worldThere is an
--unmerge option (-C), but this is not recommended and can break the system if not used with caution. This should only ever be used if necessary, and once properly informed of what it does. This will break the system, or other software, if used on some packages. The correct way to remove packages in Gentoo is virtually always with the --depclean option, as described above. This may sometimes be useful to temporarily remove a hard block though.Package upgrades
Upgrade all packages in the world set, their dependencies (--deep), and packages that have USE flag changes (avoiding unnecessary rebuilds when USE changes have no impact):
root #emerge --ask --verbose --update --deep --changed-use @worldThe --newuse may be used in place of--changed-use to make sure that all package use flags reflect the current state of those in the Gentoo repository, though this will entail more rebuilds. The --with-bdeps=y can be used to update build time dependencies also.
See upgrading Gentoo for more in depth information.
Package troubleshooting
Check for and rebuild missing libraries (not normally needed):
root #revdep-rebuild -vequery is part of app-portage/gentoolkit . Install it by issuing this command:
root #emerge -a gentoolkitTell which installed package provides a command using equery:
user $equery b `which vim`qfile can provide a faster alternative to equery, if needed.
Tell which (not) installed package provides a command using e-file:
user $e-file vimInstall e-file with:
root #emerge -a app-portage/pflTell which packages depend on a specific package (cat/pkg in the example) using equery:
user $equery d www-client/firefoxGet information about a package using eix:
root #eix www-client/firefoxDo not unemerge sys-libs/glibc . It is needed by nearly every other package. If it gets inadvertently removed, a rescue stick/disk may be required.
Rebuilds
Sometimes it's necessary to rebuild some packages for them to work properly, here are some examples of rebuild commands.
After installing a new kernel:
root #emerge @module-rebuildFor using new libraries:
root #emerge @preserved-rebuildPortage enhancements
Manage configuration changes after an emerge completes:
root #dispatch-confAfter installations or updates
After updating perl-core packages:
root #perl-cleaner --allOr if previous didn't help:
root #perl-cleaner --reallyall -- -avFor haskell packages:
root #haskell-updaterUSE flags
Obtain descriptions and usage of the USE flag X using euse:
user $euse -i XGather more information on euse by reading its manual page:
user $man euseShow what packages have the mysql USE flag:
user $equery hasuse mysqlShow what packages are currently built with the mysql USE flag:
user $eix --installed-with-use mysqlShow what USE flags are available for a specific package:
user $equery uses <package-name>Quickly add a required USE flag for a package install:
root #echo 'dev-util/cmake -qt5' >> /etc/portage/package.useImportant Portage files
- /etc/portage - primary configuration directory for Portage.
- /etc/portage/make.conf - Global settings (USE flags, compiler options).
- /etc/portage/package.use - USE flags of individual packages. Can also be a folder containing multiple files.
- /etc/portage/package.accept_keywords - Keyword individual packages; e.g. ~amd64, ~x86, or ∼arm.
- /etc/portage/package.license - Accepted licenses
- /etc/portage/profile/use.mask - for masking/unmasking locked use flags.
- /var/lib/portage/world - List of explicitly installed package atoms.
- /var/db/pkg - Contains information for every installed package a set of files about the installation.
Log management
genlop
genlop is a Portage log processor, also estimating build times when emerging packages.
Install app-portage/genlop by issuing:
root #emerge -a app-portage/genlopGather more information on genlop by reading its manual page:
root #man genlopView the last 10 emerges (installs):
root #genlop -l | tail -n 10View how long emerging LibreOffice took:
root #genlop -t libreofficeEstimate how long emerge -uND --with-bdeps=y @world will take:
root #emerge -pU @world | genlop --pretendWatch the latest merging ebuild during system upgrades:
root #watch genlop -uncOverlays
eselect repository
app-eselect/eselect-repository can be installed by issuing:
root #emerge -a app-eselect/eselect-repositoryList all existing overlays:
user $eselect repository listList all installed overlays:
user $eselect repository list -iSee Eselect/Repository for more information.
Services
Obtain root shell (if the current user is listed in the sudoers list):
user $sudo -iOpenRC
Start the ssh daemon in the default runlevel at boot:
root #rc-update add sshd defaultStart the sshd service now:
root #rc-service sshd startCheck if the sshd service is running:
root #rc-service sshd statusRestart the sshd service:
root #rc-service sshd restartStop the sshd service:
root #rc-service sshd stopList services, their status, and the runlevels they belong to:
root #rc-status --allShow enabled services and the runlevels they belong to (not whether they are running or not, just if they are enabled):
root #rc-update showsystemd
Start the ssh daemon at boot:
root #systemctl enable sshdStart the sshd service now:
root #systemctl start sshdCheck if the sshd service is running:
root #systemctl status sshdTips
Generate metadata caches
Ebuild repositories vary from very small to very large in size. As a result they slow down the majority of Portage operations. That happens because overlays do not contain metadata caches. The cache is used to speed up searches and the building of dependency trees. A neat trick is to generate local metadata cache after syncing overlays.
root #emerge --regenThis trick also works in conjunction with eix. eix-update can use metadata cache generated by emerge --regen to speed up things. To enable this, add the following variable to /etc/eixrc/00-eixrc:
/etc/eixrc/00-eixrcOVERLAY_CACHE_METHOD="assign"
Search packages in Portage by regular expressions
To search packages in Portage, along with installed version, by regular expressions:
root #emerge -s "%^python$"or
root #emerge --search "%^python$"qcheck
Use qcheck to verify installed packages:
root #qcheck vim-coreqcheck comes with app-portage/portage-utils and can be installed by running this command:
root #emerge -a app-portage/portage-utilsLearn more about qcheck by reading its manual page:
user $man qcheck