Packages: Difference between revisions

From Freephile Wiki
This changes nothing
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Debian and derivatives ==
== Debian and derivatives ==
Much of why Debian is a strong Linux distribution comes from the core of Debian namely its package management. Everything in Debian - every application, every component _everything_ is built into a package, and then that package is installed onto your system (either by the Installer, or by you).


 
There are over 29 thousand software packages available for Debian - everything from the Linux kernel to games.
 


And Apt is simply awesome!  Learn more at https://wiki.debian.org/Apt or https://help.ubuntu.com/14.04/serverguide/package-management.html
And Apt is simply awesome!  Learn more at https://wiki.debian.org/Apt or https://help.ubuntu.com/14.04/serverguide/package-management.html
Line 11: Line 11:


=== What files did this package install? ===
=== What files did this package install? ===
The synaptic gui will have a 'properties' tab that lists all the files installed.  On the console, you can use <code>dpkg-query --listfiles package_name</code>.  I don't use <code>apt-file</code> since dpkg is already installed on a base system.
The synaptic gui will have a 'properties' tab that lists all the files installed.  On the console, you can use <code>dpkg-query --listfiles package_name</code>.  I don't use <code>apt-file</code> since '''[https://man7.org/linux/man-pages/man1/dpkg.1.html dpkg]''' is already installed on a base system.


=== What package provides file Y? ===
=== What package provides file Y? ===
Line 17: Line 17:


You can also use the web interface at http://packages.ubuntu.com/
You can also use the web interface at http://packages.ubuntu.com/
=== What PPA and sources am I installing from? ===
It is surprising that I haven't found a simple command to list apt sources.
<code>grep -r --include '*.list' '^deb ' /etc/apt/sources.list*</code>
or even pretty up the output a bit [https://askubuntu.com/a/741948/146518 from here]


=== Remove old kernels ===
=== Remove old kernels ===


Kernels take up a lot of disk space. And once you've got a new one, the old ones really don't serve a purpose. <code>autoremove</code> is supposed to remove old kernels (keeping the currently running kernel plus the prior one or two for backups).
Kernels take up a lot of disk space. And once you've got a new one, the old ones really don't serve a purpose. <code>autoremove</code> is supposed to remove old kernels (keeping the currently running kernel plus the prior one or two for backups).
<source lang="bash">
<syntaxhighlight lang="bash">
sudo apt-get autoremove
sudo apt-get autoremove
</source>
</syntaxhighlight>
But sometimes old kernels are left lying around.  Maybe a lot of them. I'm not sure why, because normally you would only be left with 2 or 3 kernels if you run autoremove (perhaps this is because you have old virtualboxes?).
But sometimes old kernels are left lying around.  Maybe a lot of them. I'm not sure why, because normally you would only be left with 2 or 3 kernels if you run autoremove (perhaps this is because you have old virtualboxes?).


The post-install script <code>/etc/kernel/postinst.d/apt-auto-removal</code> is responsible for keeping track of what to preserve. And it writes a manifest to <code>/etc/apt/apt.conf.d/01autoremove-kernels</code>.
The post-install script <code>/etc/kernel/postinst.d/apt-auto-removal</code> is responsible for keeping track of what to preserve. And it writes a manifest to <code>/etc/apt/apt.conf.d/01autoremove-kernels</code>.
<source lang="bash">
<syntaxhighlight lang="bash">
# run the post-install script
# run the post-install script
sudo /etc/kernel/postinst.d/apt-auto-removal
sudo /etc/kernel/postinst.d/apt-auto-removal
# see what's reserved
# see what's reserved
cat /etc/apt/apt.conf.d/01autoremove-kernels
cat /etc/apt/apt.conf.d/01autoremove-kernels
</source>
</syntaxhighlight>


Let's use <code>dpkg</code> to see all the kernels that are currently installed.  Note: there are other related packages like headers (<code>linux-headers-*</code>), but those are dependencies of the kernel images, and will be removed when we remove the images so we don't need to even look at them.
Let's use <code>dpkg</code> to see all the kernels that are currently installed.  Note: there are other related packages like headers (<code>linux-headers-*</code>), but those are dependencies of the kernel images, and will be removed when we remove the images so we don't need to even look at them.
<source lang="bash">
<syntaxhighlight lang="bash">
# the last pipe uses a simple extended grep to take the meta package 'linux-image-generic' out of our list
# the last pipe uses a simple extended grep to take the meta package 'linux-image-generic' out of our list
dpkg -l linux-image* | awk '/^ii/ { print $2 }' | grep -e [0-9]
dpkg -l linux-image* | awk '/^ii/ { print $2 }' | grep -e [0-9]
# more complete perl-compatible regex to highlight the kernel release number
# more complete perl-compatible regex to highlight the kernel release number
dpkg -l linux-image* | awk '/^ii/ { print $2 }' | grep -P '[0-9]+\.[0-9]+\.[0-9\-]+[0-9]+'
dpkg -l linux-image* | awk '/^ii/ { print $2 }' | grep -P '[0-9]+\.[0-9]+\.[0-9\-]+[0-9]+'
</source>
</syntaxhighlight>
Manually compose an <code>apt-get purge</code> invocation of the kernels you don't want (keep the running kernel and the prior as a fallback).
You might also have several '''removed''' kernels with the configuration files still hanging around. These will be marked with status '''rc''' (remove configured) instead of 'ii' like in the awk command above. So, use something like <syntaxhighlight lang="bash">
<source lang="bash">
echo "apt purge $(dpkg -l | egrep '^rc' | awk 'ORS=" " {print $2}')"
</syntaxhighlight>Manually compose an <code>apt-get purge</code> invocation of the kernels you don't want (keep the running kernel and the prior as a fallback).
<syntaxhighlight lang="bash">
sudo apt-get -y purge linux-image-3.13.0-44-generic linux-image-3.13.0-46-generic linux-image-3.13.0-48-generic linux-image-3.13.0-55-generic linux-image-3.13.0-71-generic linux-image-3.13.0-74-generic
sudo apt-get -y purge linux-image-3.13.0-44-generic linux-image-3.13.0-46-generic linux-image-3.13.0-48-generic linux-image-3.13.0-55-generic linux-image-3.13.0-71-generic linux-image-3.13.0-74-generic
</source>
</syntaxhighlight>


== RedHat and derivatives ==
== RedHat and derivatives ==

Latest revision as of 06:39, 3 July 2025

Debian and derivatives

Much of why Debian is a strong Linux distribution comes from the core of Debian namely its package management. Everything in Debian - every application, every component _everything_ is built into a package, and then that package is installed onto your system (either by the Installer, or by you).

There are over 29 thousand software packages available for Debian - everything from the Linux kernel to games.

And Apt is simply awesome! Learn more at https://wiki.debian.org/Apt or https://help.ubuntu.com/14.04/serverguide/package-management.html


Search for a package

Sometimes you're searching for a list of packages available. You can easily take care of that with apt-cache search.

What files did this package install?

The synaptic gui will have a 'properties' tab that lists all the files installed. On the console, you can use dpkg-query --listfiles package_name. I don't use apt-file since dpkg is already installed on a base system.

What package provides file Y?

dpkg-query --search z.so reveals the packages you could install that would possibly install the missing source file your linker is looking for.

You can also use the web interface at http://packages.ubuntu.com/

What PPA and sources am I installing from?

It is surprising that I haven't found a simple command to list apt sources.

grep -r --include '*.list' '^deb ' /etc/apt/sources.list*

or even pretty up the output a bit from here

Remove old kernels

Kernels take up a lot of disk space. And once you've got a new one, the old ones really don't serve a purpose. autoremove is supposed to remove old kernels (keeping the currently running kernel plus the prior one or two for backups).

sudo apt-get autoremove

But sometimes old kernels are left lying around. Maybe a lot of them. I'm not sure why, because normally you would only be left with 2 or 3 kernels if you run autoremove (perhaps this is because you have old virtualboxes?).

The post-install script /etc/kernel/postinst.d/apt-auto-removal is responsible for keeping track of what to preserve. And it writes a manifest to /etc/apt/apt.conf.d/01autoremove-kernels.

# run the post-install script
sudo /etc/kernel/postinst.d/apt-auto-removal
# see what's reserved
cat /etc/apt/apt.conf.d/01autoremove-kernels

Let's use dpkg to see all the kernels that are currently installed. Note: there are other related packages like headers (linux-headers-*), but those are dependencies of the kernel images, and will be removed when we remove the images so we don't need to even look at them.

# the last pipe uses a simple extended grep to take the meta package 'linux-image-generic' out of our list
dpkg -l linux-image* | awk '/^ii/ { print $2 }' | grep -e [0-9]
# more complete perl-compatible regex to highlight the kernel release number
dpkg -l linux-image* | awk '/^ii/ { print $2 }' | grep -P '[0-9]+\.[0-9]+\.[0-9\-]+[0-9]+'

You might also have several removed kernels with the configuration files still hanging around. These will be marked with status rc (remove configured) instead of 'ii' like in the awk command above. So, use something like

echo "apt purge $(dpkg -l | egrep '^rc' | awk 'ORS=" " {print $2}')"

Manually compose an apt-get purge invocation of the kernels you don't want (keep the running kernel and the prior as a fallback).

sudo apt-get -y purge linux-image-3.13.0-44-generic linux-image-3.13.0-46-generic linux-image-3.13.0-48-generic linux-image-3.13.0-55-generic linux-image-3.13.0-71-generic linux-image-3.13.0-74-generic

RedHat and derivatives

There is Yum package manager for RedHat and derivatives.

See Also

Regular Expressions