Add proxy-syncd and example squid.conf
This commit is contained in:
parent
5ae344bcd8
commit
750e460404
6 changed files with 4505 additions and 0 deletions
1
scripts/proxy-mirror/README
Normal file
1
scripts/proxy-mirror/README
Normal file
|
@ -0,0 +1 @@
|
||||||
|
These files are scripts and examples to help you to configure your own proxy mirror.
|
0
scripts/proxy-mirror/example-squid-config/README
Normal file
0
scripts/proxy-mirror/example-squid-config/README
Normal file
4352
scripts/proxy-mirror/example-squid-config/squid.conf
Normal file
4352
scripts/proxy-mirror/example-squid-config/squid.conf
Normal file
File diff suppressed because it is too large
Load diff
47
scripts/proxy-mirror/example-squid-config/squid.conf.diff
Normal file
47
scripts/proxy-mirror/example-squid-config/squid.conf.diff
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
--- /tmp/squid.conf 2007-07-09 14:00:14.000000000 -0400
|
||||||
|
+++ squid.conf 2007-07-08 16:22:49.000000000 -0400
|
||||||
|
@@ -86,7 +86,8 @@
|
||||||
|
# visible on the internal address.
|
||||||
|
#
|
||||||
|
# Squid normally listens to port 3128
|
||||||
|
-http_port 3128
|
||||||
|
+http_port 80 accel defaultsite=download.fedora.redhat.com
|
||||||
|
+cache_peer 209.132.176.220 parent 80 0 no-query originserver
|
||||||
|
|
||||||
|
# TAG: https_port
|
||||||
|
# Usage: [ip:]port cert=certificate.pem [key=key.pem] [options...]
|
||||||
|
@@ -759,7 +760,7 @@
|
||||||
|
# objects.
|
||||||
|
#
|
||||||
|
#Default:
|
||||||
|
-# cache_mem 8 MB
|
||||||
|
+ cache_mem 384 MB
|
||||||
|
|
||||||
|
# TAG: cache_swap_low (percent, 0-100)
|
||||||
|
# TAG: cache_swap_high (percent, 0-100)
|
||||||
|
@@ -792,7 +793,7 @@
|
||||||
|
# See replacement_policy below for a discussion of this policy.
|
||||||
|
#
|
||||||
|
#Default:
|
||||||
|
-# maximum_object_size 4096 KB
|
||||||
|
+ maximum_object_size 2000000 KB
|
||||||
|
|
||||||
|
# TAG: minimum_object_size (bytes)
|
||||||
|
# Objects smaller than this size will NOT be saved on disk. The
|
||||||
|
@@ -1014,7 +1015,7 @@
|
||||||
|
# (hard coded at 1 MB).
|
||||||
|
#
|
||||||
|
#Default:
|
||||||
|
-# cache_dir ufs /var/spool/squid 100 16 256
|
||||||
|
+ cache_dir ufs /var/spool/squid 53000 16 256
|
||||||
|
|
||||||
|
# TAG: logformat
|
||||||
|
# Usage:
|
||||||
|
@@ -2541,6 +2542,7 @@
|
||||||
|
#http_access deny to_localhost
|
||||||
|
#
|
||||||
|
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
|
||||||
|
+http_access allow all
|
||||||
|
|
||||||
|
# Example rule allowing access from your local networks. Adapt
|
||||||
|
# to list your (internal) IP networks from where browsing should
|
2
scripts/proxy-mirror/proxy-syncd/README
Normal file
2
scripts/proxy-mirror/proxy-syncd/README
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
proxy-syncd.py
|
||||||
|
This script monitors repomd.xml of all configured yum repositories on the originating HTTP server. If it changes, then it forces a "Pragma: no-cache" refresh of all repodata files on the proxy mirror. This ensures that all repodata pulled from the proxy mirror is self-consistent (i.e. filelists.sqlite.bz2 matches the repomd.xml) and guards against failure conditions of yum clients.
|
103
scripts/proxy-mirror/proxy-syncd/proxy-syncd.py
Normal file
103
scripts/proxy-mirror/proxy-syncd/proxy-syncd.py
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import sha
|
||||||
|
from urlgrabber.grabber import URLGrabber
|
||||||
|
from urlgrabber.grabber import URLGrabError
|
||||||
|
|
||||||
|
# original address
|
||||||
|
BASE1='http://gromit.redhat.com/pub/fedora/linux'
|
||||||
|
# proxy address
|
||||||
|
BASE2='http://download.boston.redhat.com/pub/fedora/linux'
|
||||||
|
# individual repos
|
||||||
|
DIRS="""
|
||||||
|
/updates/7/i386
|
||||||
|
/updates/testing/7/i386
|
||||||
|
/updates/7/x86_64
|
||||||
|
/updates/testing/7/x86_64
|
||||||
|
/updates/7/ppc
|
||||||
|
/updates/testing/7/x86_64
|
||||||
|
/development/i386/os
|
||||||
|
/development/x86_64/os
|
||||||
|
/development/ppc/os
|
||||||
|
/core/updates/6/i386
|
||||||
|
/core/updates/6/x86_64
|
||||||
|
/core/updates/6/ppc
|
||||||
|
"""
|
||||||
|
# All repodata files
|
||||||
|
REPOFILES=['repomd.xml','filelists.sqlite.bz2','filelists.xml.gz','other.sqlite.bz2','other.xml.gz','primary.sqlite.bz2','primary.xml.gz','updateinfo.xml.gz']
|
||||||
|
# Log File
|
||||||
|
LOGFILE='~/repodata-syncd.log'
|
||||||
|
|
||||||
|
DEBUG=False
|
||||||
|
|
||||||
|
# Hash URL, return hex sha1sum
|
||||||
|
# http_headers = (('Pragma', 'no-cache'),)
|
||||||
|
def hash_url(url):
|
||||||
|
retval = ''
|
||||||
|
try:
|
||||||
|
f = g.urlopen(url)
|
||||||
|
so = sha.new()
|
||||||
|
so.update(f.read())
|
||||||
|
f.close()
|
||||||
|
retval = so.hexdigest()
|
||||||
|
except URLGrabError:
|
||||||
|
retval = 'ERROR: Try again later.'
|
||||||
|
return retval
|
||||||
|
|
||||||
|
# Print Debug Messages
|
||||||
|
def debug(msg):
|
||||||
|
if DEBUG == True:
|
||||||
|
print " DEBUG: %s" % msg
|
||||||
|
|
||||||
|
# Get Hashes of All repomd.xml
|
||||||
|
def hash_all_urls():
|
||||||
|
for path in DIRDICT.keys():
|
||||||
|
url = BASE1 + path + '/repodata/repomd.xml'
|
||||||
|
hash = hash_url(url)
|
||||||
|
DIRDICT[path] = hash
|
||||||
|
print("%s %s" % (url, hash))
|
||||||
|
|
||||||
|
# Refresh Repodata
|
||||||
|
def refresh_repodata(path):
|
||||||
|
url = BASE2 + path + '/repodata/'
|
||||||
|
for file in REPOFILES:
|
||||||
|
debug("Grabbing %s" % url + file)
|
||||||
|
try:
|
||||||
|
r.urlread(url + file)
|
||||||
|
except URLGrabError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
### Main()
|
||||||
|
# Setup Variables
|
||||||
|
DIRLIST = DIRS.split()
|
||||||
|
tuples = []
|
||||||
|
for x in DIRLIST:
|
||||||
|
if x.startswith('#') == False:
|
||||||
|
tuples.append((x,0))
|
||||||
|
DIRDICT = dict(tuples)
|
||||||
|
g = URLGrabber(keepalive=0)
|
||||||
|
r = URLGrabber(keepalive=0,http_headers = (('Pragma', 'no-cache'),))
|
||||||
|
|
||||||
|
# Get Initial Hashes
|
||||||
|
hash_all_urls()
|
||||||
|
serial = 0
|
||||||
|
|
||||||
|
# Loop Forever
|
||||||
|
while True:
|
||||||
|
print "serial=%d" % serial
|
||||||
|
# Check each repodata directory
|
||||||
|
for path in DIRDICT.keys():
|
||||||
|
url = BASE1 + path + '/repodata/repomd.xml'
|
||||||
|
hash = hash_url(url)
|
||||||
|
if hash != DIRDICT[path]:
|
||||||
|
print "CHANGE %s" % url
|
||||||
|
print " %s" % DIRDICT[path]
|
||||||
|
print " %s" % hash
|
||||||
|
print 'REFRESHING ' + BASE2 + path
|
||||||
|
# if hash changes, refresh repodata on proxy server
|
||||||
|
refresh_repodata(path)
|
||||||
|
# update dictionary entry to new hash value
|
||||||
|
DIRDICT[path]=hash
|
||||||
|
time.sleep(120)
|
||||||
|
serial += 1
|
Loading…
Add table
Add a link
Reference in a new issue