Posted by: Buzz in python
Having spent a few hours trying to get this working on CentOS 5.4 x64 I am posting this blog entry for others to reference:
Download and complie net-snmp >= 5.4.2.1 http://net-snmp.sourceforge.net/
1 2 3 4 5
| ./configure --with-python-modules
make && make install
cd /path/to/net-snmp-src/python/
python ./setup.py build
python ./setup.py test |
You may get ImportError: libnetsnmp.so.20, this is due to x64 build creating as /usr/lib64/libnetsnmp.so.10
1 2
| ln -s /usr/lib64/libnetsnmp.so.10.0.3 /usr/lib64/libnetsnmp.so.20
python ./setup.py install |
And you are done, you can now use the netsnmp python bindings, I’d recomend seeing the examples here: http://www.ibm.com/developerworks/aix/library/au-netsnmpnipython/
Tags:
bindings,
net-snmp,
python,
snmp
No Comments »
Posted by: Buzz in Linux, python
Following on from Linux – Generating file manifests and then checking them I was always getting the same questions …
How long left on the manifest Buzz ?
How long left on the verification Buzz ?
And I HATE having to turn around an say … I don’t know …
The problem with the usual command line method is that it give no indication of progress, and by extension no indication that it was infact running and not ‘hung’ …
As such I have now added the ‘manifest’ command set to the Sysadmin toolset
The manifest command take two data types, the first is a folder path from which to build the file manifest from, the manifest itself is also compatible with the “md5sum –check” function.
The second is the path to the manifest itself, in this case the manifest command will verify each file against it’s entry in the manifest:
At each point the command give you an indication of it’s current status, however this does come at a small cost, the script has no concept of the size of you console and as such will always render out the same number of character meaning if you console is not wide enough it will not render correctly, in the videos I have the console on a high resolution monitor as can be seen each video itself is 900 pixels wide.
This process is CPU intensive (20-45% on one core of a intel core2duo 2.8GHZ) and uses around 140KB of memory.
Tags:
cli,
indication,
indicator,
Linux,
manifest,
md5,
progress,
python,
sysadmin
No Comments »
Posted by: Buzz in python
Again this is a late blog post about some code committed several months ago, in this case the code was committed 09/06/2009
It is a very short python script to force a subversion commit message to be greater than 10 characters in length
Installation:
svn export http://svn.saiweb.co.uk/branches/python/svn_force_message.py /path/to/your/svn/hooks/pre-commit
chmod +x /path/to/your/svn/hooks/pre-commit
Note installation this way will replace your current pre-commit hooks file.
Tags:
commit,
force,
Subversion
No Comments »
Posted by: Buzz in python, twitter
Some two months after the fact, I thought it may well be time to post a blog on this little code snippet.
As some of you have noticed every commit message to my subversion repository is infact updating my twitter.
This code was uploaded to subversion on 10/06/2009, so sorry for the late write up!
Requirements
Python 2.5 or higher
Subversion server
Installation
- svn co http://svn.saiweb.co.uk/branches/python/svn_tweeter.py /usr/bin/svn_tweeter
- chmod +x /usr/bin/svn_tweeter
- cd /path/to/svn/hooks
- Edit post-commit with your favorite text editor
1 2 3 4
| REPOS="$1"
REV="$2"
/usr/bin/python /usr/bin/svn_tweeter -u twitterusername -p twitterpassword -r $REV -s $REPOS |
Now try a commit, and check your syslog for entries from the script.
Aug 24 11:36:26 132 python: SVN_TWEETER: http://twitter.com/statuses/update.json query complete
Tags:
hooks,
post-commit,
Subversion,
svn,
twitter
No Comments »
Posted by: Buzz in python
In order to get pyinotify working on CentOS 5 x64 a few workarounds need to take place.
(Thanks to Matthew Ife at ukFast for help with this)
First off you are going to need the python-ctypes RPM, available from DAG here: python-ctypes-1.0.0-2.el5.rf.x86_64.rpm
Once installed you are going to need the Fedora 8 python-inotify SOURCE rpm available from here: python-inotify-0.8.0-3.r.fc8.src.rpm
The easiest way I found to extract the required packages was using the following:
1 2 3 4 5 6 7
| mkdir ./python-inotify
cd ./python-inotify
wget ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/linux/updates/8/SRPMS.newkey/python-inotify-0.8.0-3.r.fc8.src.rpm
rpm2cpio ./python-inotify-0.8.0-3.r.fc8.src.rpm | cpio -idv
tar -zxvf ./pyinotify-0.8.0r.tar.gz
cd ./pyinotify
./setup.py install |
Tags:
CentOS,
pyinotify
No Comments »
Posted by: Buzz in python
I meant to write this up over a week ago now, basically the need arose for one of my Python scripts to use HTTP Basic authentication when grabbing the output from a URL.
An example script can be seen below:
Quick description, the script will attempt to connect to a URL and read the data supplied by the webserver, if a HTTP 401 error is returned (Authentication required) the script will then go on to attempt to authenticate using the credentials supplied.
Printing out to the console at each point.
Subversion: http://svn.saiweb.co.uk/branches/python/urllib2_httpbasic_auth.py
Highlighted source (at the time of writing)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #!/usr/bin/env python
"""
Author: David Busby (http://saiweb.co.uk)
Program: Python HTTP Basic Auth Exa
Copyright: David Busby 2009. All rights reserved.
License: http://creativecommons.org/licenses/by-sa/2.0/uk/
"""
import urllib2, base64
""" URL List """
urls = {
0:{"url":"www.saiweb.co.uk/some/fictional/auth/area","user":"someuser","pass":"somepass"}
}
def main():
ulen = len(urls)
for i in range(0,ulen):
url = "http://%s" % (urls[i]["url"])
req = urllib2.Request(url)
try:
res = urllib2.urlopen(req)
headers = res.info().headers
data = res.read()
except IOError, e:
if hasattr(e, 'reason'):
err = "%s ERROR(%s)" % (urls[i]["url"],e.reason)
print err
elif hasattr(e, 'code'):
if e.code != 401:
err = "%s ERROR(%s)" % (urls[i]["url"],e.code)
print err
#401 = auth required error
elif e.code == 401:
base64string = base64.encodestring('%s:%s' % (urls[i]["user"], urls[i]["pass"]))[:-1]
authheader = "Basic %s" % base64string
req.add_header("Authorization", authheader)
try:
res = urllib2.urlopen(req)
headers = res.info().headers
data = res.read()
except IOError, e:
if hasattr(e, 'reason'):
err = "%s:%s@%s ERROR(%s)" % (urls[i]["user"],urls[i]["pass"],urls[i]["url"],e.reason)
print err
elif hasattr(e, 'code'):
err = "%s:%s@%s ERROR(%s)" % (urls[i]["user"],urls[i]["pass"],urls[i]["url"],e.code)
print err
else:
err = "%s query complete" % (urls[i]["url"])
print err
else:
err = "%s query complete" % (urls[i]["url"])
print err
if __name__ == "__main__":
main() |
NOTES: This script does not check the authentication type, it always assumes it is HTTP BASIC, HTTP DIGEST for example is not compatible with this script, though there is no reason why you can not get the Auth type form the headers returned by the server and write in a Digest auth method.
Tags:
auth,
basic,
http,
python,
urllib2
No Comments »
Posted by: Buzz in python
After taking another look at Python I am quickly coming to love it, as an “exercise” in re-learning python I decided to write a very simple command line “tweeter” this uses the Twitter API to update your twitter status, extending from the “update twitter in a single line”
You can grab a copy of the script from here: http://svn.saiweb.co.uk/branches/python/tweet.py
Example usage:
1
| ./tweet.py -u username -p password -t your tweet goes here |
If you want to parse the JSON data normally returned after submitting a new tweet simply add the -j flag.
If you are prompted for a username and password when running this script the username and password supplied using the -u and -p flags was incorrect.
Tags:
python,
twitter
1 Comment »