Skip to content

Commit

Permalink
net-proxy/http-replicator: revbump, bug 442874
Browse files Browse the repository at this point in the history
Adds X-Unique-Cache-Name header to try and catch files based on their
saved name in DISTFILES. Additionally bumps ebuild to EAPI6 and elogs
information for required setup. Ebuild supplied by Matthew Ogilvie.

Gentoo-bug: 442874
Package-Manager: portage-2.2.28
Signed-off-by: Sam Jorna <[email protected]>
  • Loading branch information
wraeth committed Mar 23, 2016
1 parent 1f0217a commit 91d6d05
Show file tree
Hide file tree
Showing 3 changed files with 167 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
Author: Matthew Ogilvie
Date: Sat Jan 17 09:24:34 2015 -0700

add some suggestions to the missing-directory error message

Also wait until directory confirmed before forking.

See gentoo bug 502574 and bug 442874

diff --git a/http-replicator b/http-replicator
index bbc163c..81e254d 100755
--- a/http-replicator
+++ b/http-replicator
@@ -636,13 +636,6 @@ def main ():
parser.error('user %r does not exist' % options.user)
except OSError:
parser.error('no permission for changing to user %r' % options.user)
- pid = os.fork() # fork process
- if pid: # parent process
- pidfile.write(str(pid)) # store child's pid
- pidfile.close()
- return
- else:
- signal.signal(signal.SIGHUP, signal.SIG_IGN)
else:
handler = logging.StreamHandler(sys.stdout) # log to stdout
handler.setFormatter(logging.Formatter('%(levelname)s: %(name)s %(message)s'))
@@ -651,10 +644,22 @@ def main ():
try:
os.chdir(options.dir) # change to cache directory
except OSError:
- parser.error('invalid directory %r' % options.dir)
+ parser.error('invalid directory %r\n' \
+ 'Try running repcacheman, and/or see\n' \
+ 'http://forums.gentoo.org/viewtopic-t-173226.html' \
+ % options.dir)
if not os.access(os.curdir, os.R_OK | os.W_OK): # check permissions for cache directory
parser.error('no read/write permission for directory %r' % options.dir)

+ if options.daemon:
+ pid = os.fork() # fork process
+ if pid: # parent process
+ pidfile.write(str(pid)) # store child's pid
+ pidfile.close()
+ return
+ else:
+ signal.signal(signal.SIGHUP, signal.SIG_IGN)
+
sys.stdout = sys.stderr = open('/dev/null', 'w') # redirect all output to bit bucket
logging.root.name = 'HttpReplicator'
try:
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Author: Matthew Ogilvie
Date: Sun Dec 28 20:14:15 2014 -0700

honor x-unique-cache-name header in flat mode, if present

This allows things like different versions of the adobe-flash
downloader that are given different names in a flat download
directory (like in gentoo) to work in an http-replicator cache
as well. As long as the fetcher passes the custom name through
the experimental header...

See gentoo bug # 442874

diff --git a/http-replicator b/http-replicator
index 19ae427..befe9f2 100755
--- a/http-replicator
+++ b/http-replicator
@@ -311,7 +311,12 @@ class HttpClient (Http):
self.log.info('requested range: bytes %s to %s' % self.range) # log request

head = ''
- for tail in self.path.split('/'): # iterate over items in path
+ adjUrlPath = self.path
+ if not self.direct and self.flat:
+ uniqueCacheName = body.get('x-unique-cache-name')
+ if uniqueCacheName:
+ adjUrlPath = uniqueCacheName
+ for tail in adjUrlPath.split('/'): # iterate over items in path
head = os.path.join(head, tail) # build target path
if head in self.alias: # path up till now hos an alias
head = self.alias[head] # replace by alias
85 changes: 85 additions & 0 deletions net-proxy/http-replicator/http-replicator-3.0-r5.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=6
PYTHON_COMPAT=( python2_7 ) # not 2.6 bug #33907, not 3.0 bug #411083
inherit eutils python-single-r1 systemd

MY_P="${PN}_${PV}"

DESCRIPTION="Proxy cache for Gentoo packages"
HOMEPAGE="http://sourceforge.net/projects/http-replicator"
SRC_URI="mirror://sourceforge/http-replicator/${MY_P}.tar.gz"
S="${WORKDIR}/${MY_P}"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~hppa ~ppc ~sparc ~x86"

PATCHES=(
"${FILESDIR}/http-replicator-3.0-sighup.patch"
"${FILESDIR}/http-replicator-3-unique-cache-name.patch"
"${FILESDIR}/http-replicator-3-missing-directory.patch"
)

src_install(){
python-single-r1_pkg_setup

# Daemon and repcacheman into /usr/bin
python_scriptinto /usr/bin
python_doexe http-replicator
python_newexe "${FILESDIR}/http-replicator-3.0-repcacheman-0.44-r2" repcacheman.py

exeinto /usr/bin
newexe "${FILESDIR}/http-replicator-3.0-callrepcacheman-0.1" repcacheman

# init.d scripts
newinitd "${FILESDIR}/http-replicator-3.0.init" http-replicator
newconfd "${FILESDIR}/http-replicator-3.0.conf" http-replicator

systemd_dounit "${FILESDIR}"/http-replicator.service
systemd_install_serviced "${FILESDIR}"/http-replicator.service.conf

# Docs
dodoc README debian/changelog

# Man Page - Not Gentooified yet
doman http-replicator.1

insinto /etc/logrotate.d
newins debian/logrotate http-replicator
}

pkg_postinst() {
elog
ewarn "Before starting http-replicator, please follow the next few steps:"
elog "- Modify /etc/conf.d/http-replicator if required."
ewarn "- Run /usr/bin/repcacheman to set up the cache."
elog "- Add http_proxy=\"http://serveraddress:8080\" to make.conf on"
elog " the server as well as on the client machines."
elog "- Make sure FETCHCOMMAND adds the X-unique-cache-name header to"
elog " HTTP requests in make.conf (or maybe portage will add it to"
elog " the default make.globals someday). Example:"
elog ' FETCHCOMMAND="wget -t 3 -T 60 --passive-ftp -O \"\${DISTDIR}/\${FILE}\" --header=\"X-unique-cache-name: \${FILE}\" \"\${URI}\""'
elog ' RESUMECOMMAND="wget -c -t 3 -T 60 --passive-ftp -O \"\${DISTDIR}/\${FILE}\" --header=\"X-unique-cache-name: \${FILE}\" \"\${URI}\""'
elog "- Arrange to periodically run repcacheman on this server,"
elog " to clean up the local /usr/portage/distfiles directory."
elog "- Arrange to periodically run something like the following"
elog " on this server. 'eclean' is in app-portage/gentoolkit."
elog " ( export DISTDIR=/var/cache/http-replicator/"
elog " eclean -i distfiles )"
elog "- Even with FETCHCOMMAND fixing most cases, occasionally"
elog " an older invalid version of a file may end up in the cache,"
elog " causing checksum failures when portage tries to fetch"
elog " it. To recover, either use eclean (above), manually delete"
elog " the relevant file from the cache, or temporarily comment"
elog " out the http_proxy setting. Commenting only requires"
elog " access to client config, not server cache."
elog "- Make sure GENTOO_MIRRORS in /etc/portage/make.conf starts"
elog " with several good http mirrors."
elog
elog "For more information please refer to the following forum thread:"
elog " http://forums.gentoo.org/viewtopic-t-173226.html"
elog
}

0 comments on commit 91d6d05

Please sign in to comment.