Package Management¶
Overview¶
Unpatched packages are vulnerability debt. Fluent package ops keep fleets consistent.
This is Tutorial 16 in Module 10: Package Management of the REBASH Academy Linux for Cloud & DevOps Engineers series — written for administrators, DevOps engineers, SREs, and platform engineers operating production Linux.
Prerequisites¶
- SSH and Remote Access
- Terminal access with a regular user account (sudo where noted)
Learning Objectives¶
By the end of this tutorial, you will be able to:
- Apply the core ideas of “Package Management” on a real Linux host
- Use modern tools (
ip/ss,systemctl/journalctl) where they apply - Complete the lab under
~/rebash-linux/with clear outputs - Relate this topic to Cloud, DevOps, and production operations
- Explain the failure modes you would check first in an incident
Architecture¶
Linux ops work sits between humans/automation and the kernel, services, and network. This topic’s control points are shown below.
Theory¶
What it is¶
A package manager installs, updates, and removes software in a consistent way for your distribution: apt/dpkg on Debian and Ubuntu; dnf/yum/rpm on Red Hat Enterprise Linux (RHEL) family systems; zypper on SUSE. Optional desktop-oriented systems such as snap and Flatpak sandbox apps but are usually secondary on servers. Packages bring dependencies, version metadata, and file inventories the OS can query and verify.
Why it matters¶
Unmanaged manual binaries drift; unpatched kernels and libraries are the main host vulnerability class. Golden images, CI runners, and configuration management all assume a known package state. Knowing how to install a tool, pin or hold a version, and reboot after kernel updates keeps fleets reproducible and secure.
How it works¶
Refresh metadata (apt update, dnf check-update, zypper refresh), then install (apt install, dnf install). Query with apt policy, rpm -q, or dpkg -l. Upgrades apply security and bugfix releases; kernel updates typically need a reboot to take effect. Prefer distribution packages for system daemons; use containers or language-specific tools for app runtime isolation. Automate patching carefully (unattended-upgrades, dnf-automatic) with maintenance windows. Remove unused packages to shrink attack surface. Record critical versions in image build pipelines rather than hand-maintained snowflakes.
Key concepts and comparisons¶
| Family | Tools | Query |
|---|---|---|
| Debian/Ubuntu | apt, dpkg | apt policy, dpkg -l |
| RHEL/Fedora/Rocky/Alma | dnf/yum, rpm | rpm -q, dnf list |
| SUSE | zypper, rpm | zypper info |
| Approach | Server fit |
|---|---|
| Distro packages | Best for OS daemons and libs |
| Containers | App shipping and isolation |
| snap/Flatpak | Mostly desktop; use sparingly on servers |
Common pitfalls¶
- Running
upgradeon production without a change window or rollback image. - Mixing random third-party apt repos without pinning or trust evaluation.
- Installing compilers and debug tools on locked-down production hosts against policy.
- Forgetting that a new kernel is inactive until reboot.
- Assuming package names match across Debian and RHEL families.
Hands-on Lab¶
Create a workspace for this tutorial.
Focus: detect package manager; install a CLI tool; query package metadata
Step 1 – Package manager detect¶
{
command -v apt && echo PM=apt
command -v dnf && echo PM=dnf
command -v yum && echo PM=yum
command -v zypper && echo PM=zypper
command -v snap && snap version | head -n 1
command -v flatpak && flatpak --version
} | tee pkg-tools.txt
# Non-mutating query examples:
(apt-cache policy bash 2>/dev/null || dnf info bash 2>/dev/null || true) | head | tee pkg-info.txt
Final step – Cleanup note¶
Validation¶
- Lab commands run under
~/rebash-linux/lab16/ - You can explain each Theory bullet in your own words
- You used modern tooling where applicable (
ip/ss,systemctl/journalctl) - You can describe one production failure mode for this topic
Code Walkthrough¶
Production Linux practice for Package Management always combines:
- Inspect before you change (
status,df,ip, logs) - Prefer reversible, documented changes (config management, drop-ins)
- Capture evidence (command output, journal snippets) for handovers
- Prefer
systemctl/journalctlandip/ssover legacy tools - Least privilege — escalate with
sudoonly when required
Keep runbooks short enough to follow at 03:00. Automate the boring checks; keep humans for judgement.
Security Considerations¶
- Treat host access and sudo as privileged — audit who can do what
- Never paste secrets into shell history, tickets, or screenshots
- Validate device names and paths before destructive disk or
rmoperations - Prefer key-based SSH and deny password auth on internet-facing hosts
- Collect logs centrally; restrict who can read authentication and audit trails
Common Mistakes¶
Using legacy networking tools by default
ifconfig/netstat are missing or incomplete on modern images. Fix: use ip and ss.
Editing vendor unit files in place
Package upgrades overwrite /lib/systemd/system. Fix: systemctl edit drop-ins under /etc.
Trusting df without checking inodes and mounts
A full /var or exhausted inodes looks different from root. Fix: df -h, df -i, and findmnt.
Best Practices¶
- Golden images + config as code over snowflake hosts
- Alert on symptoms (failed units, disk, load) with runbooks attached
- Time-sync (chrony) everywhere — logs and TLS depend on it
- Separate OS and data volumes on Cloud VMs
- Practise restore and rescue paths before you need them
Troubleshooting¶
| Symptom | Likely cause | Fix |
|---|---|---|
| Permission denied | Mode/owner/ACL/MAC | namei -l, id, getfacl, SELinux/AppArmor logs |
| No route / timeout | Routing, DNS, firewall | ip route, dig, ss, security groups |
| Service won’t start | Unit/config/deps | systemctl status, journalctl -u, config -t |
| Disk full | Logs, containers, deleted-open | df/du, lsof +L1, rotate/expand |
| High load | CPU, I/O wait, thrash | vmstat, iostat, ps |
Summary¶
Package Management is essential for Cloud and DevOps engineers operating Linux hosts. Practise the lab until the inspection path is muscle memory, then continue the track.
Interview Questions¶
- How does this topic show up when operating Cloud VMs or Kubernetes nodes?
- What would you check first if this area misbehaves in production?
- Which modern Linux tools replace older equivalents here?
- What security control should accompany this capability?
- How would you automate verification of this topic in CI or a cron/timer job?
Sample answer — question 2
Start with blast radius and recent changes, then gather host signals (systemctl --failed, df, ip/ss, journalctl) before making changes. Fix forward with evidence, not guesswork.
Related Tutorials¶
- Linux for Cloud & DevOps – Category Overview
- SSH and Remote Access (previous)
- Scheduling with cron, at, and Timers (next)
- Learning Paths