I’ve recently needed to create a local mirror of Cent7 packages. I followed the guide posted on techmint but also made a few tweaks to get it to work to my liking.
Create local repo mirror
- Install necessary packages
sudo yum -y install epel-release nginx createrepo yum-utils moreutils
- Create directories that will host your repo
sudo mkdir -p /usr/share/nginx/html/repos/{base,centosplus,extras,updates,epel}
- Use the reposync tool to synchronize to those local directories (repeat for each directory, changing repoid= value to match)
reposync -g -l -d -m --repoid=base --newest-only --download-metadata --download_path=/usr/share/nginx/html/repos/
- Use the createrepo tool to create repodata
- base & epel have a group file, other repos do not.
- For base & epel:
createrepo -g comps.xml /usr/share/nginx/html/repos/<FOLDER>
- For the rest:
- createrepo /usr/share/nginx/html/repos/<FOLDER>
Configure daily synchronization via cron
Copy this script to /etc/cron.daily/ and give it execute rights
#!/bin/bash
##specify all local repositories in a single variable
LOCAL_REPOS="base extras updates epel centosplus"
##a loop to update repos one at a time
for REPO in ${LOCAL_REPOS}; do
reposync -g -l -d -m --repoid=$REPO --newest-only --download-metadata --download_path=/usr/share/nginx/html/repos/Cent7/
if [[ $REPO = 'base' || $REPO = 'epel' ]]; then
createrepo -g comps.xml /usr/share/nginx/html/repos/Cent7/$REPO/
else
createrepo /usr/share/nginx/html/repos/Cent7/$REPO/
fi
done
chmod 755 /etc/cron.daily/<script_name>
E-mails from cron became annoying. I wanted to only get e-mailed on error. The solution is to use chronic
Modify /etc/anacrontab to add “chronic” between nice and run-parts
1 5 cron.daily nice chronic run-parts /etc/cron.daily
7 25 cron.weekly nice chronic run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice chronic run-parts /etc/cron.monthly
Success.
Update 4/25/19 I encountered an issue while trying to use repsync to mirror the remi repo.
warning: /usr/share/nginx/html/repos/Cent7/remi/remi/aspell-nl-0.50-1.el7.remi.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
I found out from here that it means you need to manually import the package’s key into the RPMDB like so
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-remi