Skip to content

Instantly share code, notes, and snippets.

@timhughes
Created December 14, 2019 01:41
Show Gist options
  • Save timhughes/3d39306d27e5cfaa87410dd5dc0f763a to your computer and use it in GitHub Desktop.
Save timhughes/3d39306d27e5cfaa87410dd5dc0f763a to your computer and use it in GitHub Desktop.
Yum Squid
#!/usr/bin/env python
from __future__ import print_function
import sys
import logging
import traceback
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(module)-12s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename='/var/log/squid/calamari.log',
filemode='w')
mirrormap = {
'http://mirrors.coreix.net/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirrors.clouvider.net/CentOS/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.mhd.uk.as44574.net/mirror.centos.org/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirrors.ukfast.co.uk/sites/ftp.centos.org/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.netweaver.uk/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.bytemark.co.uk/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.freethought-internet.co.uk/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.sov.uk.goscomb.net/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://ftp.heanet.ie/pub/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.netweaver.uk/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirrors.clouvider.net/CentOS/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirrors.coreix.net/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirrors.ukfast.co.uk/sites/ftp.centos.org/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.sov.uk.goscomb.net/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.freethought-internet.co.uk/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.mhd.uk.as44574.net/mirror.centos.org/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://mirror.bytemark.co.uk/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://ftp.heanet.ie/pub/centos/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
'http://centos.mirror.triple-it.nl/': 'http://www.mirrorservice.org/sites/mirror.centos.org/',
}
def process_squid_request(request):
"""
Reference:
http://www.squid-cache.org/Doc/config/url_rewrite_program/
https://wiki.squid-cache.org/Features/Redirectors
>>> process_squid_request('1 http://mirror.centos.org/ -')
1 OK
>>> process_squid_request('2 http://mirrors.ukfast.co.uk/sites/ftp.centos.org/ -')
2 OK status=301 url="http://www.mirrorservice.org/sites/mirror.centos.org/"
"""
logging.debug('Request: %s', request.strip())
[ch_id,url,the_rest]=request.split(' ', 2)
response = ch_id + ' OK'
#response = 'OK'
#print(url)
if any(mirror in url for mirror in mirrormap.keys()):
for mirror in mirrormap.keys():
url = url.replace(mirror, mirrormap[mirror])
response += ' status=301 url="%s"' % url
else:
if url.strip().endswith('repomd.xml'):
logging.debug('Uncached yum repo: %s', url.strip())
logging.debug('Response: %s', response.strip())
response += '\n'
sys.stdout.write(response)
sys.stdout.flush()
def main():
request = sys.stdin.readline()
while request:
process_squid_request(request)
request = sys.stdin.readline()
if __name__ == '__main__':
try:
main()
except Exception as exc:
tb = traceback.format_exc()
#print(tb)
logging.debug(tb)
echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/net.ipv4.ip_forward.conf
sysctl -p
firewall-cmd --list-all --zone=libvirt
firewall-cmd --add-masquerade --zone=libvirt
firewall-cmd --add-service=http --zone=libvirt
firewall-cmd --zone=libvirt --add-port=3128/tcp
firewall-cmd --zone=libvirt --add-forward-port=port=80:proto=tcp:toport=3127:toaddr=192.168.121.1
cache_replacement_policy heap LFUDA
maximum_object_size 8192 MB
cache_dir aufs /var/spool/squid 16000 16 256 max-size=8589934592
acl repomd url_regex /repomd\.xml$
cache deny repomd
http_port 3127 intercept
url_rewrite_children 3 startup=0 idle=1 concurrency=1
url_rewrite_extras ""
url_rewrite_program /usr/local/bin/calamari.py
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment