diff options
Diffstat (limited to 'punani')
-rw-r--r-- | punani/Makefile | 9 | ||||
-rw-r--r-- | punani/README.md | 30 | ||||
-rwxr-xr-x | punani/autostart/punani-debian | 102 | ||||
-rwxr-xr-x | punani/bin/punani | 70 | ||||
-rwxr-xr-x | punani/bot/__init__.py | 105 | ||||
-rw-r--r-- | punani/db/punani | 76 | ||||
-rw-r--r-- | punani/doc/releases | 38 | ||||
-rwxr-xr-x | punani/host/dist/arch/getsize | 17 | ||||
-rwxr-xr-x | punani/index.py | 97 |
9 files changed, 0 insertions, 544 deletions
diff --git a/punani/Makefile b/punani/Makefile deleted file mode 100644 index f444b1fc..00000000 --- a/punani/Makefile +++ /dev/null @@ -1,9 +0,0 @@ - -install: ../bin/punani - -../bin/punani: - ln -snvf ../punani/bin/punani ../bin/punani -debian: - useradd punani||: - cp autostart/punani-debian /etc/init.d/punani - update-rc.d punani defaults diff --git a/punani/README.md b/punani/README.md deleted file mode 100644 index 1b70eab7..00000000 --- a/punani/README.md +++ /dev/null @@ -1,30 +0,0 @@ -Overview -======= -Punani is a meta packagemanager comprising a server which resolves package -requests and a client containing the logic to find the best suitable packer -on the host system. Packagenames in Punani are binaries in the PATH. All -library packages are named in the Principle of Least Surprise[1]. Different -package names can resolve into the same package. - -If you want to install the `hostname` tool, the query is - punani install hostname -on an archlinux this will result in the call : - pacman --noconfirm -Sy --needed inetutils - -[1] http://de.wikipedia.org/wiki/Principle_of_Least_Surprise - -Punani Client -============ -The punani client will determine which packer are available on the system -and then send a request to the punani server to find out how the given -package is called with the given packer. In addition to that, the client -will add flags to the packers call in order to install packages only when -needed and disable user interaction. - -Punani Server -============ - -The punani server is a web-service which resolves request in the following -manner: - localhost/$packer/$package -The result is the package-name with the given packer or 404 if not found. diff --git a/punani/autostart/punani-debian b/punani/autostart/punani-debian deleted file mode 100755 index 53db0336..00000000 --- a/punani/autostart/punani-debian +++ /dev/null @@ -1,102 +0,0 @@ -#!/bin/sh -# uses template from /etc/init.d/skeleton -### BEGIN INIT INFO -# Provides: punani -# Required-Start: -# Required-Stop: -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: punani -# Description: starts punani daemon -# -### END INIT INFO - -PATH=/sbin:/usr/sbin:/bin:/usr/bin -NAME=punani -USER=punani -DESC="$NAME daemon" -DAEMON=/usr/bin/python -DAEMON_DIR="/krebs/punani" -DAEMON_ARGS="${DAEMON_DIR}/index.py" -PIDFILE=/var/run/$NAME.pid -SCRIPTNAME=/etc/init.d/$NAME - -[ -x "$DAEMON" ] || exit 0 -[ -r /etc/default/$NAME ] && . /etc/default/$NAME -. /lib/init/vars.sh -. /lib/lsb/init-functions - -do_start() -{ - # 0 if daemon has been started - # 1 if daemon was already running - # 2 if daemon could not be started - start-stop-daemon -b -d $DAEMON_DIR -c $USER --start --quiet --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ - || return 1 - start-stop-daemon -b -d $DAEMON_DIR -c $USER --start --quiet --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- \ - $DAEMON_ARGS \ - || return 2 -} - -do_stop() -{ - # 0 if daemon has been stopped - # 1 if daemon was already stopped - # 2 if daemon could not be stopped - start-stop-daemon --stop --retry=TERM/30/KILL/5 --pidfile $PIDFILE - RETVAL="$?" - [ "$RETVAL" = 2 ] && return 2 - rm -f $PIDFILE - return "$RETVAL" -} - -do_reload() { - start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE - return 0 -} - -case "$1" in - start) - [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" - do_start - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - stop) - [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" - do_stop - case "$?" in - 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; - 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; - esac - ;; - status) - status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? - ;; - restart|force-reload) - log_daemon_msg "Restarting $DESC" "$NAME" - do_stop - case "$?" in - 0|1) - do_start - case "$?" in - 0) log_end_msg 0 ;; - 1) log_end_msg 1 ;; - *) log_end_msg 1 ;; - esac - ;; - *) - # Failed to stop - log_end_msg 1 - ;; - esac - ;; - *) - echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 - exit 3 - ;; -esac - -: diff --git a/punani/bin/punani b/punani/bin/punani deleted file mode 100755 index 23ba5e00..00000000 --- a/punani/bin/punani +++ /dev/null @@ -1,70 +0,0 @@ -#! /bin/sh -set -euf - -PUNANI_HOST="${PUNANI_HOST-http://euer.krebsco.de:9111}" -ACTION="$1"; shift -PKGS="$*" - -## find package manager -if ! :; then : # dummy case, so the rest has a common format - -elif for PACKER_CMD in aptitude apt-get - do type $PACKER_CMD 2>/dev/null 1>&2 && break; done; then - INSTALL_PARAM='-y install' - REMOVE_PARAM='-y remove' - -elif for PACKER_CMD in bauerbill packer yaourt pacman - do type $PACKER_CMD 2>/dev/null 1>&2 && break; done; then - INSTALL_PARAM='--noconfirm -S --needed' - REMOVE_PARAM='-Rcs' - -elif for PACKER_CMD in yum - do type $PACKER_CMD 2>/dev/null 1>&2 && break; done; then - INSTALL_PARAM='-y install' - REMOVE_PARAM='-y remove' - -elif for PACKER_CMD in brew - do type $PACKER_CMD 2>/dev/null 1>&2 && break; done; then - INSTALL_PARAM='install' - REMOVE_PARAM='remove' - - - -else - echo "Error 2: no known package manager found; no punani for you!" >&2 - exit 23 -fi - -## find package name -if test -n "$PKGS"; then - for PKG in $PKGS; do - RES="`wget -O- $PUNANI_HOST/$PACKER_CMD/$PKG 2>/dev/null || :`" - if [ ! "$RES" ]; then - echo "Error 2: could not resolve '$PKG'; no punani for you!" >&2 - exit 23 - fi - RESOLVED="${RESOLVED+$RESOLVED }$RES" - done -else - echo "Error 1: no PACKAGE specified." >&2 - ACTION="usage" -fi - -## dispatch -case "$ACTION" in - install) - set -x - for PKG in $RESOLVED; do - sudo $PACKER_CMD $INSTALL_PARAM $PKG || echo "Cannot install $PKG!" - done - ;; - remove) - set -x - for PKG in $RESOLVED; do - sudo $PACKER_CMD $REMOVE_PARAM $PKG || echo "Cannot remove $PKG!" - done - ;; - *) - echo "usage: `basename $0` (install|remove) PACKAGE..." - exit 23 -esac diff --git a/punani/bot/__init__.py b/punani/bot/__init__.py deleted file mode 100755 index 4944bba0..00000000 --- a/punani/bot/__init__.py +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/bin/python -from Queue import Queue -from SocketServer import BaseRequestHandler, ThreadingTCPServer -from threading import Thread -from time import sleep, strftime, strptime - -from ircbot import SingleServerIRCBot -from irclib import nm_to_n - - -class PunaniRequestHandler(BaseRequestHandler): - """Handler for Punani messages.""" - - def handle(self): - try: - msg = self.request.recv(1024).strip() - except ValueError: - msg = 'Invalid message.' - else: - self.server.queue.put((self.client_address, msg)) - print ('%s:%d' % self.client_address), str(msg) - - -class PunaniReceiveServer(ThreadingTCPServer): - """UDP server that waits for Punani messages.""" - - def __init__(self): - ThreadingTCPServer.__init__(self, - ('127.0.0.1', 5555), - PunaniRequestHandler) - self.queue = Queue() - - -class PunaniBot(SingleServerIRCBot): - - def __init__(self, server_list, channel_list, nickname='punani-ircbot', - realname='Bob Ross'): - self.reconnection_interval = 30 - SingleServerIRCBot.__init__(self, server_list, nickname, realname) - self.channel_list = channel_list - - def on_welcome(self, conn, event): - """Join channels after connect.""" - print 'Connected to %s:%d.' % conn.socket.getsockname() - for channel, key in self.channel_list: - conn.join(channel, key) - - def on_nicknameinuse(self, conn, event): - """Choose another nickname if conflicting.""" - self._nickname += '_' - conn.nick(self._nickname) - - def on_ctcp(self, conn, event): - """Answer CTCP PING and VERSION queries.""" - whonick = nm_to_n(event.source()) - message = event.arguments()[0].lower() - if message == 'version': - conn.notice(whonick, 'Punani2irc') - elif message == 'ping': - conn.pong(whonick) - - def on_privmsg(self, conn, event): - """React on private messages. - - Die, for example. - """ - whonick = nm_to_n(event.source()) - message = event.arguments()[0] - if message == 'die!': - print 'Shutting down as requested by %s...' % whonick - self.die('Shutting down.') - - def say(self, msg): - """Say message to channels.""" - for channel, key in self.channel_list: - self.connection.privmsg(channel, msg) - - -def process_queue(announce_callback, queue, delay=2): - """Process received messages in queue.""" - while True: - sleep(delay) - try: - addr, msg = queue.get() - except Empty: - continue - #do something with the addr? - announce_callback(str(msg)) -if __name__ == '__main__': - # Set IRC connection parameters. - irc_servers = [('supernode', 6667)] - irc_channels = [('#retiolum', '')] - - # Prepare and start IRC bot. - bot = PunaniBot(irc_servers, irc_channels) - t = Thread(target=bot.start) - t.daemon = True - t.start() - announce = bot.say - - receiver = PunaniReceiveServer() - t = Thread(target=process_queue, args=(announce, receiver.queue)) - t.daemon = True - t.start() - receiver.serve_forever() diff --git a/punani/db/punani b/punani/db/punani deleted file mode 100644 index e5d1f383..00000000 --- a/punani/db/punani +++ /dev/null @@ -1,76 +0,0 @@ -{ - "packer-symlinks" : { - "packer" : "yaourt", - "aptitude" : "apt-get", - "bauerbill" : "yaourt" - }, - "super-packer" : { - "yaourt" : "pacman" - }, - "nano" : { - "apt-get" : "nano", - "pacman" : "nano" - }, - "vim" : { - "apt-get" : "vim", - "pacman" : "vim", - "brew" : "vim", - "yum" : "vim" - }, - "zsh" : { - "pacman" : "zsh", - "apt-get" : "zsh" - }, - "git" : { - "pacman" : "git", - "apt-get" : "git-core" - }, - "unison" : { - "apt-get" : "unison", - "pacman" : "unison" - }, - "python" : { - "apt-get" : "python", - "pacman" : "python2" - }, - "python2" : { - "apt-get" : "python", - "pacman" : "python2" - }, - "python3" : { - "apt-get" : "python3", - "pacman" : "python" - }, - "tinc" : { - "apt-get" : "tinc", - "pacman" : "tinc" - }, - "python-notify" : { - "pacman" : "python-notify", - "apt-get" : "python-notify" - }, - "python-dbus" : { - "pacman" : "dbus-python", - "apt-get" : "python-dbus" - }, - "w3m" : { - "pacman" : "w3m", - "apt-get" : "w3m" - }, - "make" : { - "pacman" : "make", - "apt-get" : "make" - }, - "perl-xml-simple" : { - "apt-get" : "libxml-simple-perl", - "pacman" : "perl-xml-simple" - }, - "hostname" : { - "pacman" : "inetutils", - "apt-get" : "hostname" - }, - "pip" : { - "pacman" : "python-pip", - "apt-get" : "python-pip" - } -} diff --git a/punani/doc/releases b/punani/doc/releases deleted file mode 100644 index 98c4ea82..00000000 --- a/punani/doc/releases +++ /dev/null @@ -1,38 +0,0 @@ -# release files (guess the os distribution) -# from http://linuxmafia.com/faq/Admin/release-files.html -Annvix: /etc/annvix-release -Arch Linux: /etc/arch-release -Arklinux: /etc/arklinux-release -Aurox Linux: /etc/aurox-release -BlackCat: /etc/blackcat-release -Cobalt: /etc/cobalt-release -Conectiva: /etc/conectiva-release -Debian: /etc/debian_version, /etc/debian_release (rare) -Fedora Core: /etc/fedora-release -Gentoo Linux: /etc/gentoo-release -Immunix: /etc/immunix-release -Knoppix: knoppix_version -Linux-From-Scratch: /etc/lfs-release -Linux-PPC: /etc/linuxppc-release -Mandrake: /etc/mandrake-release -Mandriva/Mandrake Linux: /etc/mandriva-release, /etc/mandrake-release, /etc/mandakelinux-release -MkLinux: /etc/mklinux-release -Novell Linux Desktop: /etc/nld-release -PLD Linux: /etc/pld-release -Red Hat: /etc/redhat-release, /etc/redhat_version (rare) -Slackware: /etc/slackware-version, /etc/slackware-release (rare) -SME Server (Formerly E-Smith): /etc/e-smith-release -Solaris SPARC: /etc/release -Sun JDS: /etc/sun-release -SUSE Linux: /etc/SuSE-release, /etc/novell-release -SUSE Linux ES9: /etc/sles-release -Tiny Sofa: /etc/tinysofa-release -TurboLinux: /etc/turbolinux-release -Ubuntu Linux: /etc/lsb-release -UltraPenguin: /etc/ultrapenguin-release -UnitedLinux: /etc/UnitedLinux-release (covers SUSE SLES8) -VA-Linux/RH-VALE: /etc/va-release -Yellow Dog: /etc/yellowdog-release - -# own collection -Angstrom: /etc/angstrom-version diff --git a/punani/host/dist/arch/getsize b/punani/host/dist/arch/getsize deleted file mode 100755 index a2ef8f95..00000000 --- a/punani/host/dist/arch/getsize +++ /dev/null @@ -1,17 +0,0 @@ -#! /bin/sh -set -euf -sed -n ' - /^Name/{ - s/^Name *: *\(.*\)$/\1/ - T - h - } - /^Installed Size/{ - s/^Installed Size *: *\(.*\)$/ \1/ - T - H - x - s/\n//g - p - } -' | awk '{print$2$3" "$1}' | sort -n diff --git a/punani/index.py b/punani/index.py deleted file mode 100755 index ff483d37..00000000 --- a/punani/index.py +++ /dev/null @@ -1,97 +0,0 @@ -#!/usr/bin/python - -import web -import json -import os -import sys -from bot import * -urls = ( - '/', 'Index', - '/dump','Dump', -# '/reload','Reload', - '/(.+)/(.+)', 'ArchFinder', -) - - -PDB_FILE=os.path.dirname(os.path.abspath(sys.argv[0])) + "/db/punani" -PORT="9111" -CHANNEL="#retiolum" -f = open(PDB_FILE) -pdb = json.load(f) -f.close() -polite = os.environ.get("polite",False) -from socket import * - -def local_announce(msg): - s = socket(AF_INET,SOCK_STREAM) - s.connect(('localhost',5555)) - s.send(msg) - s.close() -class Index: - def GET(self): - ret = """Welcome to the Tightnani API<br/> -Retrieve a package name for your distribution with: /PACKER/PKG""" - return ret - -class Reload: - def GET(self): - f = open(PDB_FILE) - pdb= json.load(f) - f.close() - return "DB reloaded" - - -class Dump: - def GET(self): - return json.dumps(pdb,sort_keys=True,indent=4) - -class ArchFinder: - def GET(self,request_packer,package): - if not request_packer or not package: web.BadRequest() - else: - packer = pdb['packer-symlinks'].get(request_packer,request_packer) #try to resolve similar packers - super_packer = pdb['super-packer'].get(packer,'') - ret = pdb.get(package,{}).get(packer,False) - ret = ret if ret else pdb.get(package,{}).get(super_packer,False) - - if not ret: - try: - if polite: - local_announce("Client `%s` asked for the tool `%s` in packer `%s` but i do not have it in my Database. Please update me!" %(web.ctx.ip, package,packer)) - else: - local_announce("404: no %s/%s for %s" % (request_packer,package,gethostbyaddr(web.ctx.ip)[0])) - except Exception,e: - print ("Got Exception %s: %s" % (str(Exception),(e))) - web.NotFound() - return "not found. i'm so sorry :(" - else: return ret - - - -if __name__ == "__main__": - import sys - # Set IRC connection parameters. - irc_servers = [('supernode.retiolum', 6667)] - irc_channels = [('#retiolum','')] - - # Prepare and start IRC bot. - bot = PunaniBot(irc_servers, irc_channels) - t = Thread(target=bot.start) - t.daemon = True - t.start() - announce = bot.say - - receiver = PunaniReceiveServer() - t = Thread(target=receiver.serve_forever) - t.daemon = True - t.start() - - t = Thread(target=process_queue,args=(announce,receiver.queue)) - t.daemon = True - t.start() - - - sys.argv.append(PORT) - app = web.application(urls,globals()) - app.internalerror = web.debugerror - app.run() |