From ae627d2aa73ea6862af3985f1c07e95c6d493275 Mon Sep 17 00:00:00 2001 From: tv Date: Tue, 5 Nov 2013 13:07:46 +0100 Subject: //punani: RIP --- .graveyard/punani/Makefile | 9 +++ .graveyard/punani/README.md | 30 +++++++++ .graveyard/punani/autostart/punani-debian | 102 +++++++++++++++++++++++++++++ .graveyard/punani/bin/punani | 70 ++++++++++++++++++++ .graveyard/punani/bot/__init__.py | 105 ++++++++++++++++++++++++++++++ .graveyard/punani/db/punani | 76 +++++++++++++++++++++ .graveyard/punani/doc/releases | 38 +++++++++++ .graveyard/punani/host/dist/arch/getsize | 17 +++++ .graveyard/punani/index.py | 97 +++++++++++++++++++++++++++ punani/Makefile | 9 --- punani/README.md | 30 --------- punani/autostart/punani-debian | 102 ----------------------------- punani/bin/punani | 70 -------------------- punani/bot/__init__.py | 105 ------------------------------ punani/db/punani | 76 --------------------- punani/doc/releases | 38 ----------- punani/host/dist/arch/getsize | 17 ----- punani/index.py | 97 --------------------------- 18 files changed, 544 insertions(+), 544 deletions(-) create mode 100644 .graveyard/punani/Makefile create mode 100644 .graveyard/punani/README.md create mode 100755 .graveyard/punani/autostart/punani-debian create mode 100755 .graveyard/punani/bin/punani create mode 100755 .graveyard/punani/bot/__init__.py create mode 100644 .graveyard/punani/db/punani create mode 100644 .graveyard/punani/doc/releases create mode 100755 .graveyard/punani/host/dist/arch/getsize create mode 100755 .graveyard/punani/index.py delete mode 100644 punani/Makefile delete mode 100644 punani/README.md delete mode 100755 punani/autostart/punani-debian delete mode 100755 punani/bin/punani delete mode 100755 punani/bot/__init__.py delete mode 100644 punani/db/punani delete mode 100644 punani/doc/releases delete mode 100755 punani/host/dist/arch/getsize delete mode 100755 punani/index.py diff --git a/.graveyard/punani/Makefile b/.graveyard/punani/Makefile new file mode 100644 index 00000000..f444b1fc --- /dev/null +++ b/.graveyard/punani/Makefile @@ -0,0 +1,9 @@ + +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/.graveyard/punani/README.md b/.graveyard/punani/README.md new file mode 100644 index 00000000..1b70eab7 --- /dev/null +++ b/.graveyard/punani/README.md @@ -0,0 +1,30 @@ +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/.graveyard/punani/autostart/punani-debian b/.graveyard/punani/autostart/punani-debian new file mode 100755 index 00000000..53db0336 --- /dev/null +++ b/.graveyard/punani/autostart/punani-debian @@ -0,0 +1,102 @@ +#!/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/.graveyard/punani/bin/punani b/.graveyard/punani/bin/punani new file mode 100755 index 00000000..23ba5e00 --- /dev/null +++ b/.graveyard/punani/bin/punani @@ -0,0 +1,70 @@ +#! /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/.graveyard/punani/bot/__init__.py b/.graveyard/punani/bot/__init__.py new file mode 100755 index 00000000..4944bba0 --- /dev/null +++ b/.graveyard/punani/bot/__init__.py @@ -0,0 +1,105 @@ +#!/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/.graveyard/punani/db/punani b/.graveyard/punani/db/punani new file mode 100644 index 00000000..e5d1f383 --- /dev/null +++ b/.graveyard/punani/db/punani @@ -0,0 +1,76 @@ +{ + "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/.graveyard/punani/doc/releases b/.graveyard/punani/doc/releases new file mode 100644 index 00000000..98c4ea82 --- /dev/null +++ b/.graveyard/punani/doc/releases @@ -0,0 +1,38 @@ +# 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/.graveyard/punani/host/dist/arch/getsize b/.graveyard/punani/host/dist/arch/getsize new file mode 100755 index 00000000..a2ef8f95 --- /dev/null +++ b/.graveyard/punani/host/dist/arch/getsize @@ -0,0 +1,17 @@ +#! /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/.graveyard/punani/index.py b/.graveyard/punani/index.py new file mode 100755 index 00000000..ff483d37 --- /dev/null +++ b/.graveyard/punani/index.py @@ -0,0 +1,97 @@ +#!/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
+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() 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
-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() -- cgit v1.2.3