Study guide
16.2 Install and Update Software from CDN, Remote Repos, and Local Files
Red Hat Certified System Administrator RHCSA
Track your progress as you read
Finished sections get a check mark.
1 Introduction & Exam Overview
1.1 Current Exam Facts 1.2 Lab Setup & Performance-Based Study Strategy
2 Essential Tools: Shell, Redirection & Text Analysis
2.1 Shell Prompt and Command Syntax 2.2 Input-Output Redirection and Pipes 2.3 grep and Regular Expressions for Text Analysis
3 Essential Tools: Remote Access, Users & Text Editing
3.1 Access Remote Systems Using SSH 3.2 Log In and Switch Users in Multiuser Targets 3.3 Create and Edit Text Files
4 Essential Tools: Files, Links & Archives
4.1 Create, Delete, Copy, and Move Files and Directories 4.2 Hard and Soft Links 4.3 Archive and Compress with tar, gzip, and bzip2
5 Essential Tools: Permissions & System Documentation
5.1 List, Set, and Change Standard ugo/rwx Permissions 5.2 System Documentation: man, info, and /usr/share/doc
6 Manage Software: RPM and Flatpak
6.1 Configure Access to RPM Repositories 6.2 Install and Remove RPM Software Packages 6.3 Configure Access to Flatpak Repositories 6.4 Install and Remove Flatpak Software Packages
7 Create Simple Shell Scripts
7.1 Conditional Execution: if, test, and [] 7.2 Looping Constructs for Files and Input 7.3 Process Script Inputs ($1, $2, and Beyond) 7.4 Process Shell Command Output in Scripts
8 Operate Running Systems: Boot and Recovery
8.1 Boot, Reboot, and Shut Down a System Normally 8.2 Boot Systems into Different Targets Manually 8.3 Interrupt the Boot Process to Gain Access
9 Operate Running Systems: Processes and Tuning
9.1 Identify and Kill CPU/Memory Intensive Processes 9.2 Adjust Process Scheduling 9.3 Manage Tuning Profiles
10 Operate Running Systems: Logs, Services & File Transfer
10.1 Locate and Interpret System Log Files and Journals 10.2 Preserve System Journals 10.3 Start, Stop, and Check Status of Network Services 10.4 Securely Transfer Files Between Systems
11 Configure Local Storage: Partitions and LVM
11.1 List, Create, and Delete Partitions on GPT Disks 11.2 Create and Remove Physical Volumes 11.3 Assign Physical Volumes to Volume Groups 11.4 Create and Delete Logical Volumes
12 Configure Local Storage: Mounting and Expansion
12.1 Mount File Systems at Boot by UUID or Label 12.2 Add Partitions, Logical Volumes, and Swap Non-Destructively
13 Create and Configure File Systems: Local FS and Permissions
13.1 Create, Mount, and Use VFAT, ext4, and XFS File Systems 13.2 Extend Existing Logical Volumes 13.3 Diagnose and Correct File Permission Problems
14 Create and Configure File Systems: NFS and autofs
14.1 Mount and Unmount Network File Systems Using NFS 14.2 Configure autofs
15 Deploy and Maintain: Scheduling, Services & Targets
15.1 Schedule Tasks with at, cron, and systemd Timers 15.2 Start, Stop, and Enable Services at Boot 15.3 Configure Systems to Boot into a Specific Target
16 Deploy and Maintain: Time, Software Updates & Bootloader
16.1 Configure Time Service Clients 16.2 Install and Update Software from CDN, Remote Repos, and Local Files 16.3 Modify the System Bootloader
17 Manage Basic Networking
17.1 Configure IPv4 and IPv6 Addresses 17.2 Configure Hostname Resolution 17.3 Configure Network Services to Start Automatically at Boot 17.4 Restrict Network Access Using firewalld and firewall-cmd
18 Manage Users and Groups
18.1 Create, Delete, and Modify Local User Accounts 18.2 Change Passwords and Adjust Password Aging 18.3 Create, Delete, and Modify Local Groups and Memberships 18.4 Configure Privileged Access
19 Manage Security: Firewall, umask & SSH Keys
19.1 Configure Firewall Settings with firewall-cmd and firewalld 19.2 Manage Default File Permissions 19.3 Configure Key-Based Authentication for SSH
20 Manage Security: SELinux Modes and Contexts
20.1 Set Enforcing and Permissive Modes for SELinux 20.2 List and Identify SELinux File and Process Contexts 20.3 Restore Default File Contexts
21 Manage Security: SELinux Ports and Booleans
21.1 Manage SELinux Port Labels 21.2 Use Boolean Settings to Modify SELinux Settings
16.2 Install and Update Software from CDN, Remote Repos, and Local Files
Key Takeaways Explain This Topic AI
EX200 deploy skill: install and update packages from Red Hat CDN/subscription content, other remote repositories, and local files or file:// repos—not only “dnf install from default cache.”
Use dnf install/upgrade/update against enabled repos; use dnf install /path/to.rpm or rpm -ivh for local RPM files; use file:// baseurl repos for directory trees with repodata.
Remote HTTP/HTTPS or CDN repos need working network, correct .repo definitions, and often GPG keys; verify with dnf repolist and makecache before large transactions.
Local ISO or directory repos: mount or copy content, point baseurl=file:///…, enable the repo, then dnf install/update as usual.
Prove end state with rpm -q, dnf list installed, and reboot persistence of repo files—not only a successful scroll of download progress.
Last updated: August 2026
16.2 Install and Update Software from CDN, Remote Repos, and Local Files
Quick Answer: From configured repos (CDN, HTTP/HTTPS, or file:// ), install with dnf install PKG and update with dnf upgrade / dnf update . From a lone file, use dnf install /path/package.rpm (preferred) or rpm -ivh . Ensure repos work first ( dnf repolist , makecache ), then prove packages with rpm -q .
Blueprint placement
Chapter 6 covered configuring RPM repositories and basic install/remove. This deploy objective emphasizes installing and updating software using multiple source types the exam may force:
- CDN / subscription-backed Red Hat content (BaseOS, AppStream, etc.)
- Remote repositories (HTTP/HTTPS training mirrors, extra .repo files)
- Local filesystem (ISO mount, copied repo tree, individual .rpm files)
Same DNF engine—different where bits come from . Tasks may say “install from the local repository under /content ,” “update all packages,” or “install this RPM from /root .”
Source type map
- Source How DNF sees it Typical commands
- Red Hat CDN / RHSM repos Vendor .repo + entitlement dnf install , dnf upgrade
- Remote mirror baseurl=http(s)://… in .repo same
- Local repo tree baseurl=file:///path same after repo enabled
- Single RPM file Local path argument dnf install ./pkg.rpm
- Raw rpm tool Database + file, weaker deps rpm -ivh , rpm -Uvh
Prefer dnf over bare rpm for installs so dependencies resolve from repos.
CDN and subscription-backed content
On a registered RHEL system, subscription-manager and product certificates expose Red Hat CDN repositories. Training VMs may already be registered or may use local content servers that stand in for CDN. # Awareness (may be limited or preconfigured in exam images)
- sudo subscription-manager status 2>/dev/null || true
- sudo subscription-manager repos --list-enabled 2>/dev/null | head
- dnf repolist
You rarely build CDN URLs by hand on EX200. You use whatever BaseOS/AppStream (or lab equivalent) is enabled: dnf repolist
- sudo dnf makecache
- sudo dnf install -y httpd
- sudo dnf upgrade -y httpd
# or broader:
# sudo dnf upgrade -y
If repolist is empty or metadata fails, fix registration/repo enablement or lab mirror connectivity before blaming package names.
Modules (awareness)
AppStream may expose modules . If dnf install says no match but the package is modular, the task or docs may require dnf module enable … first. Only go there when the error or task points you—that is not the everyday path for simple packages.
Remote repositories (HTTP/HTTPS)
Chapter 6 pattern—deploy focus is using the remote repo to install/update: # Example repo already created or you create it:
- sudo tee /etc/yum.repos.d/training.repo <<'EOF'
- [training]
- name=Training remote
- baseurl=http://materials.example.lab/rhel10/BaseOS/x86_64/os/
- enabled=1
- gpgcheck=0
- EOF
- sudo dnf clean all
- sudo dnf makecache
- dnf repolist
- sudo dnf install -y example-package
sudo dnf upgrade -y example-package # One-shot without permanent enable (not enough if task wants lasting access)
sudo dnf install -y --enablerepo=training example-package
For lasting use, enabled=1 in the .repo file (or dnf config-manager --set-enabled ).
- GPG and CDN trust sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
- # gpgcheck=1 and gpgkey= in .repo when keys are provided
Signature failures mid-install mean import the key or fix gpgkey= —do not blindly disable GPG unless the task’s local unsigned tree requires it.
- Local filesystem sources
- A) Directory repository with repodata
- Lab ISOs and content packs often unpack to trees containing repodata/ : sudo mkdir -p /mnt/disc
- sudo mount -o loop /path/to/rhel.iso /mnt/disc # if ISO file given
- # or: already mounted NFS/USB at /mnt/disc
- ls /mnt/disc/BaseOS/repodata 2>/dev/null || ls /mnt/disc/repodata # /etc/yum.repos.d/local-iso.repo
- [local-baseos]
- name=Local BaseOS
- baseurl=file:///mnt/disc/BaseOS
- enabled=1
- gpgcheck=0 sudo dnf makecache
- sudo dnf install -y strace
- sudo dnf upgrade -y
Three slashes in file:///mnt/... . Point baseurl at the repo root that holds repodata , not at a random parent or at the .iso file path itself.
Persist the mount if the repo must work after reboot (fstab entry for the ISO/device)—if the task only needs a one-time install, mounting for the transaction may suffice, but repo files under /etc/yum.repos.d/ remain and should still point at a valid path.
- B) Single local RPM files ls /root/*.rpm /var/tmp/*.rpm 2>/dev/null
- sudo dnf install -y /root/example-1.0-1.el10.x86_64.rpm
- rpm -q example
dnf install on a file path uses the RPM and tries to pull dependencies from enabled repos—best of both worlds. # Weaker alternative (deps not auto-resolved from repos the same way)
- sudo rpm -ivh /root/example-1.0-1.el10.x86_64.rpm
- sudo rpm -Uvh /root/example-1.0-2.el10.x86_64.rpm # upgrade
- sudo rpm -e example # erase
Use rpm -Uvh for upgrade-or-install of a local file; dnf reinstall / dnf upgrade when the package is in a repo.
C) Creating a local repo from a folder of RPMs (when tasked)
If you only have a pile of RPMs and need a repo: sudo dnf install -y createrepo_c # package name may be createrepo_c on modern RHEL
- sudo mkdir -p /srv/localrepo
- sudo cp /path/*.rpm /srv/localrepo/
- sudo createrepo_c /srv/localrepo
- # then file:// baseurl=/srv/localrepo
Only do this when the environment provides createrepo tooling and the task implies a custom local repo—not every exam item needs it.
Install vs update vs upgrade language
- Goal Command
- Install new package dnf install PKG
- Update listed packages dnf upgrade PKG or dnf update PKG
- Update all dnf upgrade / dnf update
- Sync to latest from repos dnf upgrade
- Downgrade (rare) dnf downgrade PKG
- Remove dnf remove PKG
On modern DNF, update and upgrade are closely related; using dnf upgrade is clear for “bring packages up to date.” Always match task verbs (“install,” “update”). sudo dnf install -y wget tree
- sudo dnf upgrade -y wget
- sudo dnf check-update # report only
- dnf list installed wget
- rpm -q wget
- Group installs (occasional) dnf group list
- sudo dnf group install -y "Development Tools"
Use when the task names a group or environment—not as a substitute for a single package name.
- Verification and history rpm -q httpd
- rpm -qi httpd | head
- dnf list installed httpd
- rpm -V httpd # verify file checksums vs database
- sudo dnf history
- sudo dnf history info last
- If an install fails: sudo dnf clean all
- sudo dnf makecache
- dnf repolist -v
- curl -I http://materials.example.lab/… # if network tools allowed
- Failure Check
- No match for argument Typo, wrong repo disabled, modular package
- Failed to download metadata baseurl, network, mount
- Depsolve errors Enable AppStream/other repo; avoid rpm -i missing deps
- GPG check failed Import key / gpgkey line
- Exam workflows
- Workflow A — CDN/default repos: install and update dnf repolist
- sudo dnf install -y httpd
- sudo dnf upgrade -y httpd
- rpm -q httpd
- sudo systemctl enable --now httpd # if service objective also applies
- Workflow B — Remote training repo sudo tee /etc/yum.repos.d/extra.repo <<'EOF'
- [extra]
- name=Extra
- baseurl=http://server.lab/extra/
- enabled=1
- gpgcheck=0
- EOF
- sudo dnf makecache
- sudo dnf install -y lab-tool
- rpm -q lab-tool
- Workflow C — Local ISO repo sudo mount /dev/sr0 /mnt 2>/dev/null || sudo mount -o loop /root/rhel.iso /mnt
- sudo tee /etc/yum.repos.d/iso.repo <<'EOF'
- [iso-appstream]
- name=ISO AppStream
- baseurl=file:///mnt/AppStream
- enabled=1
- gpgcheck=0
- EOF
- sudo dnf install -y python3-pip
- Workflow D — Local RPM file with deps from repos sudo dnf install -y /root/custom-agent-2.1.rpm
- rpm -q custom-agent
- Workflow E — System-wide update from all enabled sources sudo dnf upgrade -y
- sudo dnf needs-restarting -r 2>/dev/null || true
Kernel updates may need reboot; if a task updates kernel packages, remember bootloader/kernel selection (Section 16.3) may matter.
Common traps
Configuring a repo but never running install/update when the task requires packages present.
rpm -ivh only and leaving broken dependency chains.
file:// with wrong slash count or unmounted path.
Pointing baseurl at ISO file instead of mount point tree.
Temporary --enablerepo only when lasting repo access was required.
Disabled AppStream causing “no package” for common tools.
Assuming CDN works offline —use local content when the lab is air-gapped.
Forgetting makecache after changing .repo files.
Updating packages then not verifying rpm -q / version.
Removing the only working repo mid-exam while chasing GPG errors.
Relationship to other chapters
6.1–6.2: repository files and package install/remove fundamentals—this section stresses multi-source update/install in the deploy category.
Services: installed daemons still need enable --now .
Bootloader (16.3): kernel upgrades interact with GRUB/grubby defaults.
Flatpak (Ch6): separate stack for apps; system tools remain RPM/DNF.
Section checkpoint
You should install and update packages from CDN/default Red Hat content , remote HTTP/HTTPS repos , local file:// repos , and individual RPM files ; prefer dnf for dependency resolution; verify with repolist , makecache , and rpm -q ; and leave both packages and repo configuration correct for reboot. That meets the EX200 deploy skill for software from CDN, remote repos, and local files on RHEL 10.