Your message dated 
with message-id <[email protected]>
and subject line apt-proxy removed from Debian unstable
has caused the Debian Bug report #411355,
regarding apt-proxy: add avahi/zeroconf support
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)


-- 
411355: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=411355
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: apt-proxy
Version: 1.9.36~svn
Severity: wishlist
Tags: patch

  Hello,

  I am working on adding avahi/zeroconf support to apt-proxy. Current
  patches only advertise the service if "avahi" option is set to 1 in
  apt-proxy.conf file.
  For this to be useful, apt (itself or through apt-zeroconf) should be
  able to understand that an apt-proxy instance is running in the
  network. This and publishing also which archive are being served are
  things that I hope I can go on adding soon.

  Cheers,


-- System Information:
Debian Release: 4.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (101, 'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-1-686
Locale: lang=es_es.ut...@euro, lc_ctype=es_es.ut...@euro (charmap=UTF-8)

Versions of packages apt-proxy depends on:
ii  adduser                       3.102      Add and remove users and groups
ii  bzip2                         1.0.3-6    high-quality block-sorting file co
ii  debconf [debconf-2.0]         1.5.11     Debian configuration management sy
ii  logrotate                     3.7.1-3    Log rotation utility
ii  python                        2.4.4-2    An interactive high-level object-o
ii  python-apt                    0.6.20     Python interface to libapt-pkg
ii  python-central                0.5.12     register and build utility for Pyt
ii  python-twisted-web            0.6.0-1    An HTTP protocol implementation to

apt-proxy recommends no packages.

-- debconf information excluded
>From 09f68dff0f6f8ab417a4b8316be936e926a4e679 Mon Sep 17 00:00:00 2001
From: Jose Carlos Garcia Sogo <[email protected]>
Date: Tue, 13 Feb 2007 00:15:09 +0100
Subject: [PATCH] Initial work for supporting avahi publising service in apt-proxy.

---
 apt_proxy/apt_proxy.py |    8 +++
 apt_proxy/avahisrv.py  |  113 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 121 insertions(+), 0 deletions(-)

diff --git a/apt_proxy/apt_proxy.py b/apt_proxy/apt_proxy.py
index 5b454af..ed4c913 100644
--- a/apt_proxy/apt_proxy.py
+++ b/apt_proxy/apt_proxy.py
@@ -28,6 +28,9 @@ from misc import log, MirrorRecycler
 import twisted_compat
 from clients import HttpRequestClient
 
+from avahisrv import AvahiService
+import socket
+
 #from posixfile import SEEK_SET, SEEK_CUR, SEEK_END
 #since posixfile is considered obsolete I'll define the SEEK_* constants
 #myself.
@@ -280,6 +283,7 @@ class Factory(protocol.ServerFactory):
         self.periodicCallback = None
         self.databases = databaseManager(self)
         self.recycler = None
+	self.avahisrv = None
 
     def __del__(self):
         pass
@@ -319,6 +323,8 @@ class Factory(protocol.ServerFactory):
         self.dumpdbs()
         self.recycler = MirrorRecycler(self, 1)
         #self.recycler.start()
+	self.avahisrv = AvahiService('apt-proxy@'+socket.gethostname(), '_apt-proxy._tcp', '', '', 9999, ['apt-proxy service'])
+	self.avahisrv.run()
 
     def configurationChanged(self, oldconfig = None):
         """
@@ -508,6 +514,8 @@ class Factory(protocol.ServerFactory):
             self.recycler = None
         self.stopPeriodic()
         #self.closeDatabases()
+	self.avahiservice.stop()
+
 
     def dumpdbs (self):
         def dump_update(key, value):
diff --git a/apt_proxy/avahisrv.py b/apt_proxy/avahisrv.py
new file mode 100644
index 0000000..074aab5
--- /dev/null
+++ b/apt_proxy/avahisrv.py
@@ -0,0 +1,113 @@
+# This file is part of apt-proxy.
+# It is heavily based on similar file from apt-zeroconf.
+# 
+# Copytight (C) 2006 - Jose Carlos Garcia Sogo <[email protected]>
+#
+# Copyright (C) 2006 - Florian Ludwig <[email protected]>
+#                      Franz Pletz <[email protected]>
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This file is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with apt-zeroconf; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+import avahi
+import dbus, dbus.glib
+import gobject
+
+import threading
+from misc import log
+
+
+class AvahiService(threading.Thread):
+    """
+    This class takes care of publishing services in Avahi.
+    When instantiating you have to pass a service name, a type, 
+    current domain and host, port used to contact the service and
+    a descriptive txt.
+
+    It will run in its own thread looping for different Avahi services.
+
+    """
+    def  __init__(self, name, stype, domain, host, port, txt):
+        threading.Thread.__init__(self)
+        self.group = None
+        self.n_rename = 0
+        
+        self.stype = stype
+        self.name = name
+        self.domain = domain
+        self.host = host
+        self.port = port
+        self.txt = txt
+
+
+    def _server_state_changed(self, state):
+        if state == avahi.SERVER_COLLISION:
+            log.warning('Server name collision')
+            self._remove_servivce()
+        elif state == avahi.SERVER_RUNNING:
+            self._add_service()
+
+    def _remove_service(self):
+        if not self.group is None:
+            self.group.Reset()
+
+    def _add_service(self):
+        if self.group is None:
+            self.group = dbus.Interface(self.bus.get_object(avahi.DBUS_NAME,
+                    self.server.EntryGroupNew()),
+                    avahi.DBUS_INTERFACE_ENTRY_GROUP)
+            self.group.connect_to_signal('StateChanged',
+                    self._entry_group_state_changed)
+
+        assert self.group.IsEmpty()
+        log.debug('Creating service \'%s\' of type \'%s\'' %
+                (self.name, self.stype))
+
+        self.group.AddService(avahi.IF_UNSPEC, avahi.PROTO_UNSPEC, 0,
+                self.name, self.stype, self.domain, self.host,
+                dbus.UInt16(self.port),
+                avahi.string_array_to_txt_array(self.txt))
+        self.group.Commit()
+        log.debug('Service commited')
+
+    def _entry_group_state_changed(self, state, wtf):
+        if state == avahi.ENTRY_GROUP_ESTABLISHED:
+            log.debug('Service established.')
+        elif state == avahi.ENTRY_GROUP_COLLISION:
+            self.n_rename += 1
+            if self.n_rename >= 12:
+                log.error('No suitable service name found after %i '
+                        'retries, exiting.' % n_rename)
+                self.stop()
+            else:
+                self.name = self.server.GetAlternativeServiceName(name)
+                log.warning('Service name collision, changing name to '
+                            '\'%s\'.' % name)
+                self._remove_service()
+                self._add_service()
+
+    def run(self):
+        self.bus = dbus.SystemBus()
+        self.server = self.bus.get_object ('org.freedesktop.Avahi', avahi.DBUS_PATH_SERVER)
+        self.interface = dbus.Interface (self.server, avahi.DBUS_INTERFACE_SERVER)
+        log.debug('Avahi service created')
+        self.server.connect_to_signal('StateChanged', self._server_state_changed)
+        self._server_state_changed(self.server.GetState())
+
+        self.ml = gobject.MainLoop()
+        gobject.threads_init()
+        self.ml.run()
+
+    def stop(self):
+        self.ml.quit()
-- 
1.4.4.4

>From 520007c8de5be652f4d792cf8eeef73bde74d0f5 Mon Sep 17 00:00:00 2001
From: Jose Carlos Garcia Sogo <[email protected]>
Date: Thu, 15 Feb 2007 00:09:55 +0100
Subject: [PATCH]  - avahi publishing will be only run if 'avahi' var is set in config file.
 - use 'port' setting from configuration, instead of hardcoding it to 9999
---
 apt_proxy/apt_proxy.py      |    5 +++--
 apt_proxy/apt_proxy_conf.py |    3 ++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/apt_proxy/apt_proxy.py b/apt_proxy/apt_proxy.py
index ed4c913..8c8766e 100644
--- a/apt_proxy/apt_proxy.py
+++ b/apt_proxy/apt_proxy.py
@@ -323,8 +323,9 @@ class Factory(protocol.ServerFactory):
         self.dumpdbs()
         self.recycler = MirrorRecycler(self, 1)
         #self.recycler.start()
-	self.avahisrv = AvahiService('apt-proxy@'+socket.gethostname(), '_apt-proxy._tcp', '', '', 9999, ['apt-proxy service'])
-	self.avahisrv.run()
+	if getattr(self.config, 'avahi'):
+            self.avahisrv = AvahiService('apt-proxy@'+socket.gethostname(), '_apt-proxy._tcp', '', '', getattr(self.config, 'port'), ['apt-proxy service'])
+            self.avahisrv.run()
 
     def configurationChanged(self, oldconfig = None):
         """
diff --git a/apt_proxy/apt_proxy_conf.py b/apt_proxy/apt_proxy_conf.py
index d99df6a..8d38027 100644
--- a/apt_proxy/apt_proxy_conf.py
+++ b/apt_proxy/apt_proxy_conf.py
@@ -101,7 +101,8 @@ class apConfig:
         ['http_proxy', None , 'proxyspec'],
         ['username', 'aptproxy', 'string'],
         ['bandwidth_limit', None, '*int'],
-        ['use_experimental_decompressors', False, 'boolean']
+        ['use_experimental_decompressors', False, 'boolean'],
+        ['avahi', False, 'boolean']
         ]
 
     """
-- 
1.4.4.4


--- End Message ---
--- Begin Message ---
Version: 1.9.37+rm

apt-proxy has been removed from Debian unstable: http://bugs.debian.org/576821

Closing its bugs with a Version higher than the last unstable upload.

More information about this script at:
  
http://git.debian.org/?p=users/morph/mass-bugs-close.git;a=blob_plain;f=README;hb=HEAD


--- End Message ---

Reply via email to