net-proxy/http-replicator: Revert 3.0 branch removal
authorTony Vroon <chainsaw@gentoo.org>
Thu, 28 Feb 2019 12:03:28 +0000 (12:03 +0000)
committerTony Vroon <chainsaw@gentoo.org>
Thu, 28 Feb 2019 12:03:28 +0000 (12:03 +0000)
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@gentoo.org>
Closes: https://bugs.gentoo.org/676758

net-proxy/http-replicator/Manifest
net-proxy/http-replicator/files/http-replicator-3-missing-directory.patch [new file with mode: 0644]
net-proxy/http-replicator/files/http-replicator-3-unique-cache-name.patch [new file with mode: 0644]
net-proxy/http-replicator/files/http-replicator-3.0-sighup.patch [new file with mode: 0644]
net-proxy/http-replicator/files/http-replicator-3.0.conf [new file with mode: 0644]
net-proxy/http-replicator/files/http-replicator-3.0.init [new file with mode: 0644]
net-proxy/http-replicator/http-replicator-3.0-r7.ebuild [new file with mode: 0644]

index 8c075058ba4043f8bebfc3770ea6feb5b6ebe161..460a0f3b65b8f0767a7fc59167da096307f971f0 100644 (file)
@@ -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 (file)
index 0000000..37c2ce2
--- /dev/null
@@ -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 (file)
index 0000000..3ad0529
--- /dev/null
@@ -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 (file)
index 0000000..969bbc9
--- /dev/null
@@ -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 (file)
index 0000000..35671fd
--- /dev/null
@@ -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 (file)
index 0000000..7fc3d5e
--- /dev/null
@@ -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 (file)
index 0000000..68405a1
--- /dev/null
@@ -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
+}