commit:     97f0d18a976f63155e49686779c9eb75d539fa8a
Author:     Tony Vroon <chainsaw <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 28 12:03:28 2019 +0000
Commit:     Tony Vroon <chainsaw <AT> gentoo <DOT> org>
CommitDate: Thu Feb 28 12:03:28 2019 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=97f0d18a

net-proxy/http-replicator: Revert 3.0 branch removal

This reverts commit 3b8b8f6ec45e0220e5b841c96f89f52c6c5e02a5.
The 4.0 branch does not implement --alias which means it is not a
drop-in replacement to 3.0 in all cases.
Please speak to me or file me a bug if you have any change requirements
for the 3.x branch ebuilds. I will action them.

Requested-By: Matthew Ogilvie
Signed-Off-By: Tony Vroon <chainsaw <AT> gentoo.org>
Closes: https://bugs.gentoo.org/676758

 net-proxy/http-replicator/Manifest                 |  1 +
 .../http-replicator-3-missing-directory.patch      | 51 ++++++++++++
 .../http-replicator-3-unique-cache-name.patch      | 31 ++++++++
 .../files/http-replicator-3.0-sighup.patch         | 20 +++++
 .../http-replicator/files/http-replicator-3.0.conf | 46 +++++++++++
 .../http-replicator/files/http-replicator-3.0.init | 20 +++++
 .../http-replicator/http-replicator-3.0-r7.ebuild  | 93 ++++++++++++++++++++++
 7 files changed, 262 insertions(+)

diff --git a/net-proxy/http-replicator/Manifest 
b/net-proxy/http-replicator/Manifest
index 8c075058ba4..460a0f3b65b 100644
--- a/net-proxy/http-replicator/Manifest
+++ b/net-proxy/http-replicator/Manifest
@@ -1 +1,2 @@
+DIST http-replicator_3.0.tar.gz 39291 BLAKE2B 
a97d8b6b32f5d4ca4feefa9abaa7da7cb6570f76566c79d7371134c0edd74b2333a02480deff02fa1bf5b6cd6f2bfbfe4aaa649633d70bd2efbdd22701422651
 SHA512 
d98a608c38201db6f2d8ba809a4777ab5588f5ed395882bdf542c2788df1770c61a2de160604c09297d847f2c73463ba0530d7f2c2e482467f8e8f35be068d57
 DIST http-replicator_4.0alpha2.tgz 27575 BLAKE2B 
48138bc8fa9695ddb31ce89c4638adda4a1d1b58c904cd98d0ee1dbab006f79ef7d19495db8eb4de0113f8e45da425950524c48ec9e3e864d8595ccdef9f7cfa
 SHA512 
437e0cc881af0cb8f84bfd1366bb6edeee4f76112c4b2ac2af4bcb8809462852b96e9c99e04c8f370492c9e1eb33ddc68a85c4f09b073694242cd6c05b4d3a6c

diff --git 
a/net-proxy/http-replicator/files/http-replicator-3-missing-directory.patch 
b/net-proxy/http-replicator/files/http-replicator-3-missing-directory.patch
new file mode 100644
index 00000000000..37c2ce2361f
--- /dev/null
+++ b/net-proxy/http-replicator/files/http-replicator-3-missing-directory.patch
@@ -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:

diff --git 
a/net-proxy/http-replicator/files/http-replicator-3-unique-cache-name.patch 
b/net-proxy/http-replicator/files/http-replicator-3-unique-cache-name.patch
new file mode 100644
index 00000000000..3ad0529ed16
--- /dev/null
+++ b/net-proxy/http-replicator/files/http-replicator-3-unique-cache-name.patch
@@ -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

diff --git a/net-proxy/http-replicator/files/http-replicator-3.0-sighup.patch 
b/net-proxy/http-replicator/files/http-replicator-3.0-sighup.patch
new file mode 100644
index 00000000000..969bbc91f9d
--- /dev/null
+++ b/net-proxy/http-replicator/files/http-replicator-3.0-sighup.patch
@@ -0,0 +1,20 @@
+--- a/http-replicator  2007-07-09 20:09:44.000000000 +0200
++++ b/http-replicator  2007-07-09 20:11:48.433913445 +0200
+@@ -5,7 +5,7 @@
+ #  Because of this the server runs as a single process, multiplexing I/O with 
its various client and server connections within a single process/thread.
+ #  According to the readme <http://www.nightmare.com/medusa/README.html> this 
means it is capable of smoother and higher performance than most other servers, 
while placing a dramatically reduced load on the server machine.
+ 
+-import asyncore, socket, os, time, calendar, sys, re, optparse, logging
++import asyncore, socket, os, time, calendar, sys, re, optparse, logging, 
signal
+ 
+ #  LISTENER
+ #
+@@ -636,6 +636,8 @@
+                       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'))

diff --git a/net-proxy/http-replicator/files/http-replicator-3.0.conf 
b/net-proxy/http-replicator/files/http-replicator-3.0.conf
new file mode 100644
index 00000000000..35671fd262c
--- /dev/null
+++ b/net-proxy/http-replicator/files/http-replicator-3.0.conf
@@ -0,0 +1,46 @@
+## Config file for http-replicator
+## sourced by init scripts automatically
+## GENERAL_OPTS used by repcacheman
+## DAEMON_OPTS used by http-replicator
+
+
+## Set the cache dir
+GENERAL_OPTS="--dir /var/cache/http-replicator"
+
+## Change UID/GID to user after opening the log and pid file.
+## 'user' must have read/write access to cache dir:
+GENERAL_OPTS="$GENERAL_OPTS --user portage"
+
+## Don't change or comment this out:
+DAEMON_OPTS="$GENERAL_OPTS"
+
+## Do you need a proxy to reach the internet?
+## This will forward requests to an external proxy server:
+## Use one of the following, not both:
+#DAEMON_OPTS="$DAEMON_OPTS --external somehost:1234"
+#DAEMON_OPTS="$DAEMON_OPTS --external username:password@host:port"
+
+## Local dir to serve clients.  Great for serving binary packages
+## See PKDIR and PORTAGE_BINHOST settings in 'man make.conf'
+## --alias /path/to/serve:location will make /path/to/serve
+## browsable at http://http-replicator.com:port/location
+DAEMON_OPTS="$DAEMON_OPTS --alias /usr/portage/packages:packages"
+
+## Dir to hold the log file:
+DAEMON_OPTS="$DAEMON_OPTS --log /var/log/http-replicator.log"
+
+## Make the log messages less and less verbose.
+## Up to four times to make it extremely quiet.
+#DAEMON_OPTS="$DAEMON_OPTS --quiet"
+#DAEMON_OPTS="$DAEMON_OPTS --quiet"
+
+## Make the log messages extra verbose for debugging.
+#DAEMON_OPTS="$DAEMON_OPTS --debug"
+
+## The ip addresses from which access is allowed. Can be used as many times
+## as necessary. Access from localhost is allowed by default.
+DAEMON_OPTS="$DAEMON_OPTS --ip 192.168.*.*"
+DAEMON_OPTS="$DAEMON_OPTS --ip 10.*.*.*"
+
+## The proxy port on which the server listens for http requests:
+DAEMON_OPTS="$DAEMON_OPTS --port 8080"

diff --git a/net-proxy/http-replicator/files/http-replicator-3.0.init 
b/net-proxy/http-replicator/files/http-replicator-3.0.init
new file mode 100644
index 00000000000..7fc3d5e108d
--- /dev/null
+++ b/net-proxy/http-replicator/files/http-replicator-3.0.init
@@ -0,0 +1,20 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+depend() {
+       need net
+}
+
+start() {
+       ebegin "Starting Http-Replicator"
+       start-stop-daemon --start --pidfile /var/run/http-replicator.pid --name 
http-replicator \
+               --exec /usr/bin/http-replicator -- -s -f --pid 
/var/run/http-replicator.pid --daemon $DAEMON_OPTS
+       eend $? "Failed to start Http-Replicator"
+}
+
+stop() {
+       ebegin "Stopping Http-Replicator"
+       start-stop-daemon --stop --pidfile /var/run/http-replicator.pid --name 
http-replicator --signal 2
+       eend $? "Failed to stop Http-Replicator"
+}

diff --git a/net-proxy/http-replicator/http-replicator-3.0-r7.ebuild 
b/net-proxy/http-replicator/http-replicator-3.0-r7.ebuild
new file mode 100644
index 00000000000..68405a1f8c1
--- /dev/null
+++ b/net-proxy/http-replicator/http-replicator-3.0-r7.ebuild
@@ -0,0 +1,93 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+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="https://sourceforge.net/projects/http-replicator";
+SRC_URI="mirror://sourceforge/http-replicator/${MY_P}.tar.gz"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha amd64 hppa ppc ~sparc x86"
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+RDEPEND="${PYTHON_DEPS}"
+DEPEND="${RDEPEND}"
+
+S="${WORKDIR}/${MY_P}"
+
+PATCHES=(
+       "${FILESDIR}/http-replicator-3.0-sighup.patch"
+       "${FILESDIR}/http-replicator-3-unique-cache-name.patch"
+       "${FILESDIR}/http-replicator-3-missing-directory.patch"
+)
+
+pkg_setup() {
+       python-single-r1_pkg_setup
+}
+
+src_install() {
+       # Daemon and repcacheman into /usr/bin
+       python_scriptinto /usr/bin
+       python_doscript http-replicator
+       python_newscript "${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
+}

Reply via email to