Ubuntu Fundamentals: Ubuntu
DevOps Fundamental

DevOps Fundamental @devops_fundamental

About: DevOps | SRE | Cloud Engineer 🚀 ☕ Support me on Ko-fi: https://ko-fi.com/devopsfundamental

Joined:
Jun 18, 2025

Ubuntu Fundamentals: Ubuntu

Publish Date: Jun 21
5 0

Ubuntu: Beyond the Desktop – A Production Systems Engineer's Perspective

Introduction

The recent surge in container adoption, coupled with the continued dominance of Ubuntu as a cloud image base, has highlighted a critical skill gap: understanding Ubuntu beyond basic package management. We recently encountered a production outage stemming from an improperly configured systemd-resolved service on a fleet of Ubuntu 22.04 VMs, leading to intermittent DNS resolution failures. The root cause wasn’t a complex application bug, but a fundamental misunderstanding of how Ubuntu handles network configuration and service dependencies. This incident underscored the need for a deep dive into Ubuntu’s internals, focusing on operational excellence rather than introductory tutorials. This post aims to provide that depth, geared towards experienced system administrators, DevOps engineers, and SREs. We'll focus on Ubuntu LTS releases as they are the standard for production deployments.

What is "Ubuntu" in Ubuntu/Linux context?

“Ubuntu” in this context refers to the entire operating system distribution, built upon the Debian base. It’s not merely the desktop environment. Crucially, Ubuntu’s lifecycle and package management differ from its Debian parent. Ubuntu LTS (Long Term Support) releases, currently every two years (e.g., 22.04, 20.04), receive five years of standard support and up to ten years with Extended Security Maintenance (ESM). This makes Ubuntu a pragmatic choice for production environments demanding stability.

Key system tools and configuration files include:

  • APT (Advanced Package Tool): /etc/apt/sources.list, /etc/apt/preferences.d/ – Package management.
  • systemd: /etc/systemd/system/, /lib/systemd/system/ – System and service manager. Understanding systemd units is paramount.
  • netplan: /etc/netplan/ – Network configuration (Ubuntu 18.04 and later). Replaces traditional /etc/network/interfaces.
  • journald: /var/log/journal/ – Systemd journal for logging.
  • udev: /etc/udev/rules.d/ – Device management.
  • dpkg: Low-level package manager, rarely used directly in production.

Use Cases and Scenarios

  1. Cloud VM Base Image: Ubuntu is the most popular base image on AWS, Azure, and GCP. Customizing these images requires understanding cloud-init and proper hardening.
  2. Container Host: Ubuntu serves as a robust host OS for Docker and Kubernetes. Kernel features like cgroups and namespaces are heavily utilized.
  3. Web Server Stack: LAMP (Linux, Apache, MySQL, PHP) or LEMP (Linux, Nginx, MySQL, PHP) stacks are frequently deployed on Ubuntu. Performance tuning of Apache/Nginx and MySQL is critical.
  4. Monitoring Server: Ubuntu is a common platform for running monitoring tools like Prometheus, Grafana, and Nagios. Resource constraints and log management are key concerns.
  5. Secure Bastion Host: Ubuntu, hardened with ufw, fail2ban, and SSH key-based authentication, provides a secure entry point to a private network.

Command-Line Deep Dive

  • Checking systemd unit status: systemctl status <service_name> -l ( -l for full logs). Example: systemctl status sshd -l
  • Analyzing network interfaces: ip addr show, ss -tulnp (replacing netstat). netplan apply to activate changes in /etc/netplan/.
  • Investigating disk I/O: iotop -oPa, iostat -xz 1. -o shows only processes actively doing I/O, -P shows I/O priority, -a shows all disks.
  • Monitoring resource usage: htop, free -m, vmstat 1.
  • Examining APT logs: /var/log/apt/history.log, /var/log/apt/term.log.
  • Config Snippet (sshd_config - hardening):
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
AllowUsers <specific_user>
Enter fullscreen mode Exit fullscreen mode

System Architecture

graph LR
    A[Hardware] --> B(Kernel);
    B --> C{systemd};
    C --> D[systemd-journald];
    C --> E[systemd-resolved];
    C --> F[APT];
    B --> G[Filesystem (ext4, XFS)];
    G --> H[Applications & Services];
    E --> I[DNS Servers];
    F --> G;
    H --> D;
    subgraph User Space
        D
        E
        F
        H
    end
    subgraph Kernel Space
        B
        G
    end
Enter fullscreen mode Exit fullscreen mode

Ubuntu’s architecture heavily relies on systemd as the init system. systemd manages services, logging (via journald), network configuration (via resolved and netplan), and more. APT handles package management, interacting with the kernel and filesystem. The kernel provides the core OS functionality, including device drivers and memory management.

Performance Considerations

Ubuntu’s performance is heavily influenced by the filesystem choice (ext4 is default, XFS often preferred for large filesystems), I/O scheduler (noop, deadline, cfq), and kernel parameters.

  • I/O: Use iotop to identify I/O-intensive processes. Consider using a different I/O scheduler for specific workloads.
  • Memory: Monitor memory usage with free -m. Adjust vm.swappiness in /etc/sysctl.conf to control swap usage. Lower values reduce swapping, but can lead to OOM (Out of Memory) errors.
  • CPU: htop provides a real-time view of CPU usage. perf can be used for more detailed performance analysis.
  • Benchmark: fio is a flexible I/O benchmark tool.

Example sysctl tweak (reduce swap):

sysctl -w vm.swappiness=10
echo "vm.swappiness = 10" >> /etc/sysctl.conf
Enter fullscreen mode Exit fullscreen mode

Security and Hardening

Ubuntu is a relatively secure OS, but requires proactive hardening.

  • Firewall: ufw enable, ufw default deny incoming, ufw allow ssh.
  • AppArmor: AppArmor provides mandatory access control. Check AppArmor status with apparmor_status. Customize profiles in /etc/apparmor.d/.
  • Fail2ban: fail2ban monitors logs for failed login attempts and blocks offending IPs. Configure in /etc/fail2ban/jail.local.
  • Auditd: auditd provides detailed auditing of system events. Configure rules in /etc/audit/rules.d/.
  • Regular Updates: apt update && apt upgrade -y. Enable unattended upgrades for automatic security updates.

Automation & Scripting

Ansible is a popular choice for automating Ubuntu configuration.

---
- hosts: all
  become: true
  tasks:
    - name: Update apt cache
      apt:
        update_cache: yes
        cache_valid_time: 3600

    - name: Install nginx
      apt:
        name: nginx
        state: present

    - name: Ensure nginx is running
      service:
        name: nginx
        state: started
        enabled: yes
Enter fullscreen mode Exit fullscreen mode

Cloud-init can be used to customize Ubuntu instances during boot. /etc/cloud/cloud.cfg controls cloud-init behavior.

Logs, Debugging, and Monitoring

  • journalctl: journalctl -u <service_name>, journalctl -f (follow logs), journalctl --since "2023-10-26"
  • dmesg: Kernel messages. Useful for hardware-related issues.
  • netstat/ss: Network connections. ss -tulnp is preferred over netstat.
  • strace: Trace system calls made by a process. strace -p <pid>.
  • lsof: List open files. lsof -i :80 (list processes listening on port 80).
  • Log Locations: /var/log/syslog, /var/log/auth.log, /var/log/kern.log.

Common Mistakes & Anti-Patterns

  1. Directly editing /etc/network/interfaces on Ubuntu 18.04+: Use netplan instead.
    • Incorrect: Editing /etc/network/interfaces
    • Correct: Modifying /etc/netplan/ and running netplan apply.
  2. Disabling systemd-resolved without understanding the implications: Can break DNS resolution.
  3. Ignoring APT update errors: Can lead to package inconsistencies.
  4. Using apt-get instead of apt: apt is the recommended command-line tool.
  5. Not configuring a firewall: Leaving systems exposed to unnecessary risks.

Best Practices Summary

  1. Use LTS releases: Prioritize stability and long-term support.
  2. Automate configuration with Ansible or similar tools: Ensure consistency and repeatability.
  3. Monitor system resources with Prometheus/Grafana: Proactive identification of performance bottlenecks.
  4. Harden systems with ufw, AppArmor, and fail2ban: Minimize attack surface.
  5. Regularly update packages: Patch security vulnerabilities.
  6. Understand systemd unit dependencies: Avoid service startup failures.
  7. Utilize journald for centralized logging: Simplify troubleshooting.
  8. Implement a robust backup and recovery strategy: Protect against data loss.
  9. Use SSH key-based authentication: Disable password authentication.
  10. Document all configuration changes: Maintain a clear audit trail.

Conclusion

Mastering Ubuntu requires moving beyond basic administration and delving into its system internals. Understanding systemd, netplan, APT, and security best practices is crucial for building reliable, maintainable, and secure production systems. Regularly audit your Ubuntu deployments, build automation scripts, monitor system behavior, and document your standards. The investment in this deeper understanding will pay dividends in reduced downtime, improved security, and increased operational efficiency.

Comments 0 total

    Add comment