From Darren.Young at chicagobooth.edu Fri Nov 6 11:43:25 2009 From: Darren.Young at chicagobooth.edu (Young, Darren) Date: Fri, 06 Nov 2009 13:43:25 -0600 Subject: [Chicago-talk] Net::SSH::W32Perl Message-ID: <07A371D457B501478C1DB3C3DE8372D704E07C6C@GSBHEX2V.gsb.uchicago.edu> Using strawberry perl 5.8.9 on XP and having issues with Net::SSH::W32Perl. I have everything installed but the ssh command gets no results. The sub: sub _getFilerSysconfig { my $ssh; my $stdout; my $stderr; my $exit; my $cmd; logmsg("default filer: $DEFAULT_FILER"); logmsg("New"); $ssh = Net::SSH::Perl->new($DEFAULT_FILER, debug => 1); logmsg("Login, user => $FILER_USER, password => $FILER_PASSWORD"); $ssh->login($FILER_USER, $FILER_PASSWORD); $cmd = "sysconfig"; logmsg("cmd: $cmd"); ($stdout, $stderr, $exit) = $ssh->cmd($cmd); logmsg("stdout: $stdout"); logmsg("stderr: $stderr"); logmsg("exit: $exit"); } And the results: [2009-11-06 13:39:11] main(): default filer: gsbhfs1.chicagogsb.edu [2009-11-06 13:39:11] main(): New dyoung-windows: Reading configuration data /.ssh/config dyoung-windows: Reading configuration data /etc/ssh_config dyoung-windows: Connecting to gsbhfs1.chicagogsb.edu, port 22. dyoung-windows: Remote protocol version 2.0, remote software version OpenSSH_3.4p1 dyoung-windows: Net::SSH::Perl Version 1.34, protocol version 2.0. dyoung-windows: No compat match: OpenSSH_3.4p1. dyoung-windows: Connection established. [2009-11-06 13:39:11] main(): Login, user => appauto, password => XXXXXXXXXXX dyoung-windows: Sent key-exchange init (KEXINIT), wait response. dyoung-windows: Algorithms, c->s: 3des-cbc hmac-sha1 none dyoung-windows: Algorithms, s->c: 3des-cbc hmac-sha1 none dyoung-windows: Entering Diffie-Hellman Group 1 key exchange. dyoung-windows: Sent DH public key, waiting for reply. dyoung-windows: Received host key, type 'ssh-dss'. dyoung-windows: Host 'gsbhfs1.chicagogsb.edu' is known and matches the host key. dyoung-windows: Computing shared secret key. dyoung-windows: Verifying server signature. dyoung-windows: Waiting for NEWKEYS message. dyoung-windows: Send NEWKEYS. dyoung-windows: Enabling encryption/MAC/compression. dyoung-windows: Sending request for user-authentication service. dyoung-windows: Service accepted: ssh-userauth. dyoung-windows: Trying empty user-authentication request. dyoung-windows: Authentication methods that can continue: publickey,password. dyoung-windows: Next method to try is publickey. dyoung-windows: Next method to try is password. dyoung-windows: Trying password authentication. dyoung-windows: Login completed, opening dummy shell channel. dyoung-windows: channel 0: new [client-session] dyoung-windows: Requesting channel_open for channel 0. dyoung-windows: channel 0: open confirm rwindow 0 rmax 32768 dyoung-windows: Got channel open confirmation, requesting shell. dyoung-windows: Requesting service shell on channel 0. [2009-11-06 13:39:12] main(): cmd: sysconfig dyoung-windows: channel 1: new [client-session] dyoung-windows: Requesting channel_open for channel 1. dyoung-windows: Entering interactive session. dyoung-windows: channel 0: rcvd close dyoung-windows: channel 0: output open -> drain dyoung-windows: channel 0: input open -> closed dyoung-windows: channel 0: close_read dyoung-windows: channel 0: obuf empty dyoung-windows: channel 0: output drain -> closed dyoung-windows: channel 0: close_write dyoung-windows: channel 0: send close dyoung-windows: channel 0: full closed [2009-11-06 13:39:12] main(): stdout: [2009-11-06 13:39:12] main(): stderr: [2009-11-06 13:39:12] main(): exit: So, it appears to be connecting and authenticating but there's 0 data coming back from the command. If I manually ssh as that user and run the command (from the same source) I get the output of the command. Any thoughts? Darren Young Systems & Security Architect Computing Services University of Chicago Booth School of Business 5807 South Woodlawn Avenue Chicago, IL 60637 Voice 773.702.0331 | Fax 773.702.0233 From sean at blanton.com Fri Nov 6 14:31:36 2009 From: sean at blanton.com (Sean Blanton) Date: Fri, 6 Nov 2009 16:31:36 -0600 Subject: [Chicago-talk] Net::SSH::W32Perl In-Reply-To: <07A371D457B501478C1DB3C3DE8372D704E07C6C@GSBHEX2V.gsb.uchicago.edu> References: <07A371D457B501478C1DB3C3DE8372D704E07C6C@GSBHEX2V.gsb.uchicago.edu> Message-ID: That module has a lot of known issues. I couldn't get it to work consistently (win <-> Solaris). See perlmonks.org. I abandoned it for Net::SSH2, and that only worked in limited ways. I can send you my wrapper utils, but right now am on the train Regards, Sean On Friday, November 6, 2009, Young, Darren wrote: > Using strawberry perl 5.8.9 on XP and having issues with > Net::SSH::W32Perl. I have everything installed but the ssh command gets > no results. > > The sub: > > sub _getFilerSysconfig { > > ? ?my $ssh; > ? ?my $stdout; > ? ?my $stderr; > ? ?my $exit; > ? ?my $cmd; > > ? ?logmsg("default filer: $DEFAULT_FILER"); > ? ?logmsg("New"); > ? ?$ssh = Net::SSH::Perl->new($DEFAULT_FILER, debug => 1); > > ? ?logmsg("Login, user => $FILER_USER, password => $FILER_PASSWORD"); > ? ?$ssh->login($FILER_USER, $FILER_PASSWORD); > > ? ?$cmd = "sysconfig"; > ? ?logmsg("cmd: $cmd"); > ? ?($stdout, $stderr, $exit) = $ssh->cmd($cmd); > > ? ?logmsg("stdout: $stdout"); > ? ?logmsg("stderr: $stderr"); > ? ?logmsg("exit: $exit"); > > } > > And the results: > > [2009-11-06 13:39:11] main(): default filer: gsbhfs1.chicagogsb.edu > [2009-11-06 13:39:11] main(): New > dyoung-windows: Reading configuration data /.ssh/config > dyoung-windows: Reading configuration data /etc/ssh_config > dyoung-windows: Connecting to gsbhfs1.chicagogsb.edu, port 22. > dyoung-windows: Remote protocol version 2.0, remote software version > OpenSSH_3.4p1 > dyoung-windows: Net::SSH::Perl Version 1.34, protocol version 2.0. > dyoung-windows: No compat match: OpenSSH_3.4p1. > dyoung-windows: Connection established. > [2009-11-06 13:39:11] main(): Login, user => appauto, password => > XXXXXXXXXXX > dyoung-windows: Sent key-exchange init (KEXINIT), wait response. > dyoung-windows: Algorithms, c->s: 3des-cbc hmac-sha1 none > dyoung-windows: Algorithms, s->c: 3des-cbc hmac-sha1 none > dyoung-windows: Entering Diffie-Hellman Group 1 key exchange. > dyoung-windows: Sent DH public key, waiting for reply. > dyoung-windows: Received host key, type 'ssh-dss'. > dyoung-windows: Host 'gsbhfs1.chicagogsb.edu' is known and matches the > host key. > dyoung-windows: Computing shared secret key. > dyoung-windows: Verifying server signature. > dyoung-windows: Waiting for NEWKEYS message. > dyoung-windows: Send NEWKEYS. > dyoung-windows: Enabling encryption/MAC/compression. > dyoung-windows: Sending request for user-authentication service. > dyoung-windows: Service accepted: ssh-userauth. > dyoung-windows: Trying empty user-authentication request. > dyoung-windows: Authentication methods that can continue: > publickey,password. > dyoung-windows: Next method to try is publickey. > dyoung-windows: Next method to try is password. > dyoung-windows: Trying password authentication. > dyoung-windows: Login completed, opening dummy shell channel. > dyoung-windows: channel 0: new [client-session] > dyoung-windows: Requesting channel_open for channel 0. > dyoung-windows: channel 0: open confirm rwindow 0 rmax 32768 > dyoung-windows: Got channel open confirmation, requesting shell. > dyoung-windows: Requesting service shell on channel 0. > [2009-11-06 13:39:12] main(): cmd: sysconfig > dyoung-windows: channel 1: new [client-session] > dyoung-windows: Requesting channel_open for channel 1. > dyoung-windows: Entering interactive session. > dyoung-windows: channel 0: rcvd close > dyoung-windows: channel 0: output open -> drain > dyoung-windows: channel 0: input open -> closed > dyoung-windows: channel 0: close_read > dyoung-windows: channel 0: obuf empty > dyoung-windows: channel 0: output drain -> closed > dyoung-windows: channel 0: close_write > dyoung-windows: channel 0: send close > dyoung-windows: channel 0: full closed > [2009-11-06 13:39:12] main(): stdout: > [2009-11-06 13:39:12] main(): stderr: > [2009-11-06 13:39:12] main(): exit: > > So, it appears to be connecting and authenticating but there's 0 data > coming back from the command. If I manually ssh as that user and run the > command (from the same source) I get the output of the command. > > Any thoughts? > > Darren Young > Systems & Security Architect > Computing Services > University of Chicago > Booth School of Business > 5807 South Woodlawn Avenue > Chicago, IL 60637 > Voice 773.702.0331 | Fax 773.702.0233 > > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk > -- Regards, Sean Sean Blanton, Ph.D. Connect: http://www.linkedin.com/in/seanblanton From Darren.Young at chicagobooth.edu Fri Nov 6 14:33:04 2009 From: Darren.Young at chicagobooth.edu (Young, Darren) Date: Fri, 06 Nov 2009 16:33:04 -0600 Subject: [Chicago-talk] Net::SSH::W32Perl In-Reply-To: References: <07A371D457B501478C1DB3C3DE8372D704E07C6C@GSBHEX2V.gsb.uchicago.edu> Message-ID: <07A371D457B501478C1DB3C3DE8372D704E07E23@GSBHEX2V.gsb.uchicago.edu> > That module has a lot of known issues. I couldn't get it to work > consistently (win <-> Solaris). See perlmonks.org. I abandoned it for > Net::SSH2, and that only worked in limited ways. Yea, I found all sorts of similar postings there. > I can send you my wrapper utils, but right now am on the train Sure, if it works I'd love to take a look. From sean at blanton.com Mon Nov 9 07:43:08 2009 From: sean at blanton.com (Sean Blanton) Date: Mon, 9 Nov 2009 09:43:08 -0600 Subject: [Chicago-talk] Net::SSH::W32Perl In-Reply-To: <07A371D457B501478C1DB3C3DE8372D704E07E23@GSBHEX2V.gsb.uchicago.edu> References: <07A371D457B501478C1DB3C3DE8372D704E07C6C@GSBHEX2V.gsb.uchicago.edu> <07A371D457B501478C1DB3C3DE8372D704E07E23@GSBHEX2V.gsb.uchicago.edu> Message-ID: How many of these apply to you with a different environment, I don't know. Here it is, unfinished, "as is" warts and all, but mostly working. * I couldn't get the 'shell' to work, so only used exec, put and get operations. * The key is to manage the blocking around grabbing a channel and executing the different ops. * Below, I let the program continue when there is an error, and you will want your own error messages (and to rework the entire error handling). * The put operation did not update the timestamp of the remote file - there is a hack to update it. * The Solaris box I was connecting to was running the KeON security application - I doubt that had an effect, but who knows? ------------------------------------------------------------------------ package XXX::DeploySSH; =head1 NAME XXX::DeploySSH - Use SSH from within Perl for build and deploy operations. =head1 SYNOPSIS #-- Import module use XXX::DeploySSH; #-- Set connection parameters my $ds = XXX::DeploySSH->new() or die; $ds->set_user($user); $ds->set_hostname($hostname); #-- Initiate connection including authentication $ds->connect() or die "Couldn't connect to $hostname"; #-- Execute a command. Non-zero return code is bad my ($rc, @output) = $ds->exec("ls -la"); print "Output:\n at output\n"; print "Remote command executed successfully.\n" unless $rc; print "ERROR: Remote command failed.\n" if $rc; #-- Transfer a file. Note opposite sense of return code. 1 is good now. my $rc = $ds->put( $full_target, "$stage_dir/$target_file" ) or die "SFTP put of '$full_target' to '$stage_dir/$target_file' failed"; =head1 DESCRIPTION Uses the SSH2 protocol to create session, execute commands or transfer files from iwthin Perl. Each command is issued on its own "channel'. The execution method is by C, so you can only run programs with arguments, not shell commands. The connection method is via publickey authentication. The public and private key names as well as the password for encrypting the private key are all hardcoded in the module itself. Sure there is a better way, but that is the current state. =head1 OBJECT METHODS =head2 Constructor The constructor is called with no arguments. my $ds = XXX::DeploySSH->new(); =head2 Accessors =over 4 =item $ds->set_user($user) The user authenticating via SSH2. Must set the user before calling connect(). =item $ds->set_hostname($hostname) The hostname that you want to connect to. Must set the hostname before calling connect(). =back =head2 Operators =over 4 =item $ds->exec($remote_cmd) Executes C<$remote_cmd> on the machine you are connected to. This method returns ($rc, at output) Where C<$rc> is the return code and C<@output> is any output. Note that the return value of this method is different from put() and get() because they only indicate success/fail, whereas exec() needs to return the return code of the program execution and output. =item $ds->put($local_file,$remote_file) Transfers C<$local_file> to C<$remote_file> on the connected machine. =item $ds->get($remote_file,$local_file) Retrieves C<$local_file> from C<$remote_file> on the connected machine. =back =head2 Other =over 4 =item $ds->disconnect() Terminates the connection. =back =head1 REQUIRED MODULES Install required modules on Windows using the C<< ppm install >> command. =over 4 =item * Net::SSH2 - Base methods handling the SSH2 protocol. =item * Carp - For error handling. =back =head1 BUGS AND CAVEATS =over 4 =item * Occasional flakiness occurs where a command returns an error for no apparent reason. If this happens, re-execute the workflow. =item * Output is not being returned by exec() in some cases. =back =head1 TODO'S =over 4 =item * Have constructor accept user and hostname arguments. =back =head1 AUTHOR Sean Blanton of OpenMake Software for XXX =head1 SEE ALSO Net::SSH2, XXX::DeployProperties =cut BEGIN { use Exporter (); use vars qw(@ISA @EXPORT $VERSION); @ISA = qw(Exporter); @EXPORT = qw( ); } use Net::SSH2; use Carp qw{confess cluck}; use strict; our $AUTOLOAD; # it's a package global our %fields = ( hostname => undef, user => undef, private_key => undef, public_key => undef, private_key_password => undef, ssh2_handle => undef, ); our $home_dir = $^O =~ /win/i ? $ENV{USERPROFILE} . "/.ssh" : $ENV{HOME} . "/.ssh"; #TODO: The password should be found by lookup instead of hardcoded here our $password = 'XYXYXYX'; #-- password that encrypts the private key, not the logon our $private_key = "$home_dir/ccbuilder"; our $public_key = "$home_dir/ccbuilder.pub"; die "Private key file '$private_key' does not exist as a file." unless -f $private_key; die "Public key file '$public_key' does not exist as a file." unless -f $public_key; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = { _permitted => \%fields, %fields, }; bless( $self, $class ); $self->set_private_key($private_key); $self->set_public_key($public_key); $self->set_private_key_password($password); my $ssh2 = Net::SSH2->new() or confess("couldn't create ssh2 handle"); $self->set_ssh2_handle($ssh2); return $self; } sub connect { my $self = shift or confess "FATAL: Wrong args!"; my $hostname = $self->get_hostname() or confess(''); my $user = $self->get_user() or confess(''); my $private_key = $self->get_private_key() or confess(''); my $public_key = $self->get_public_key() or confess(''); my $password = $self->get_private_key_password() or confess(''); my $ssh2 = $self->get_ssh2_handle() or confess(''); $ssh2->connect($hostname) or die "ERROR: Couldn't connect to $hostname."; $ssh2->auth_publickey( $user, $public_key, $private_key, $password ); unless ( $ssh2->auth_ok ) { my ( $rc, $err_msg ) = $ssh2->error; $ssh2->disconnect; cluck("ERROR: can't log in: $rc : $err_msg"); return undef; } } sub disconnect { my $self = shift or confess "FATAL: Wrong args!"; if ( my $ssh2 = $self->get_ssh2_handle() ) { $ssh2->disconnect; } $self->set_ssh2_handle(undef); return 1; } sub exec { my $self = shift or die; my $cmd = shift or die; my $ssh2 = $self->get_ssh2_handle() or confess(); my $chan = _get_channel($ssh2); $chan->exec("$cmd\n"); my @output = <$chan>; my $rc = $chan->exit_status; cluck("ERROR: $rc\n at output\n") if $rc; $chan->close; #-- channel is useless after exec return $rc, @output; } sub put { my $self = shift or die; my $local_file = shift or die; my $remote_file = shift or die; my $ssh2 = $self->get_ssh2_handle() or confess(); $ssh2->blocking(1); $ssh2->scp_put( "$local_file", "$remote_file" ); #-- Note bug from scp_put puts wrong mtime. Put it right. # take care to actually transfer the file. my $sftp = $ssh2->sftp(); check_ssh2_error($ssh2); $sftp->setstat( "$remote_file", 'mtime', time() ); check_ssh2_error($ssh2); $ssh2->blocking(0); return check_ssh2_error($ssh2); } sub get { my $self = shift or die; my $remote_file = shift or die; my $local_file = shift or die; my $ssh2 = $self->get_ssh2_handle() or confess(); $ssh2->blocking(1); $ssh2->scp_get( "$remote_file", "$local_file" ); $ssh2->blocking(0); return check_ssh2_error($ssh2); } #-- Get a(nother) channel for this logon session # NOTE: Class function, not an object method sub _get_channel { my $ssh2 = shift or confess(); $ssh2->blocking(1); my $chan = $ssh2->channel(); $ssh2->blocking(0); return $chan; } sub check_ssh2_error { #-- be careful here, we are not returning an error code, # but 'true' if operation was successful my $ssh2 = shift or die; return 1 unless $ssh2->error; my @errs = $ssh2->error; cluck("Errors from Net::SSH2: @errs") if @errs; return undef; } #-- this function allows automatic getters and setters # based on what is in the %fields at the beginning of the module sub AUTOLOAD { my $self = shift; my $type = ref($self) or confess "$self is not an object"; my $name = $AUTOLOAD; $name =~ s/.*://; # strip fully-qualified portion my $field = $name; $field =~ s/^(set_|get_)//; unless ( exists $self->{_permitted}->{$field} ) { confess "Can't access `$name' for field '$field' in class $type"; } if ( $name =~ /^set_/ ) { if (@_) { return $self->{$field} = shift; } else { return $self->{$field} = ""; } } elsif ( $name =~ /^get_/ ) { return $self->{$field}; } } 1; Regards, Sean Sean Blanton, Ph.D. Connect: http://www.linkedin.com/in/seanblanton On Fri, Nov 6, 2009 at 4:33 PM, Young, Darren wrote: > > That module has a lot of known issues. I couldn't get it to work > > consistently (win <-> Solaris). See perlmonks.org. I abandoned it for > > Net::SSH2, and that only worked in limited ways. > > Yea, I found all sorts of similar postings there. > > > I can send you my wrapper utils, but right now am on the train > > Sure, if it works I'd love to take a look. > > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk > -------------- next part -------------- An HTML attachment was scrubbed... URL: From Darren.Young at chicagobooth.edu Mon Nov 9 09:08:01 2009 From: Darren.Young at chicagobooth.edu (Young, Darren) Date: Mon, 09 Nov 2009 11:08:01 -0600 Subject: [Chicago-talk] Net::SSH::W32Perl In-Reply-To: References: <07A371D457B501478C1DB3C3DE8372D704E07C6C@GSBHEX2V.gsb.uchicago.edu> <07A371D457B501478C1DB3C3DE8372D704E07E23@GSBHEX2V.gsb.uchicago.edu> Message-ID: <07A371D457B501478C1DB3C3DE8372D704E537D5@GSBHEX2V.gsb.uchicago.edu> Thanks a bunch, I'll fiddle around with it this week. The remote I'm connecting to is a NetApp filer and I only need to execute remote commands and grab the results. Even then it's only the pieces that their SDK doesn't implement. From: chicago-talk-bounces+darren.young=chicagobooth.edu at pm.org [mailto:chicago-talk-bounces+darren.young=chicagobooth.edu at pm.org] On Behalf Of Sean Blanton Sent: Monday, November 09, 2009 9:43 AM To: Chicago.pm chatter Subject: Re: [Chicago-talk] Net::SSH::W32Perl How many of these apply to you with a different environment, I don't know. Here it is, unfinished, "as is" warts and all, but mostly working. * I couldn't get the 'shell' to work, so only used exec, put and get operations. * The key is to manage the blocking around grabbing a channel and executing the different ops. * Below, I let the program continue when there is an error, and you will want your own error messages (and to rework the entire error handling). * The put operation did not update the timestamp of the remote file - there is a hack to update it. * The Solaris box I was connecting to was running the KeON security application - I doubt that had an effect, but who knows? ------------------------------------------------------------------------ package XXX::DeploySSH; =head1 NAME XXX::DeploySSH - Use SSH from within Perl for build and deploy operations. =head1 SYNOPSIS #-- Import module use XXX::DeploySSH; #-- Set connection parameters my $ds = XXX::DeploySSH->new() or die; $ds->set_user($user); $ds->set_hostname($hostname); #-- Initiate connection including authentication $ds->connect() or die "Couldn't connect to $hostname"; #-- Execute a command. Non-zero return code is bad my ($rc, @output) = $ds->exec("ls -la"); print "Output:\n at output\n"; print "Remote command executed successfully.\n" unless $rc; print "ERROR: Remote command failed.\n" if $rc; #-- Transfer a file. Note opposite sense of return code. 1 is good now. my $rc = $ds->put( $full_target, "$stage_dir/$target_file" ) or die "SFTP put of '$full_target' to '$stage_dir/$target_file' failed"; =head1 DESCRIPTION Uses the SSH2 protocol to create session, execute commands or transfer files from iwthin Perl. Each command is issued on its own "channel'. The execution method is by C, so you can only run programs with arguments, not shell commands. The connection method is via publickey authentication. The public and private key names as well as the password for encrypting the private key are all hardcoded in the module itself. Sure there is a better way, but that is the current state. =head1 OBJECT METHODS =head2 Constructor The constructor is called with no arguments. my $ds = XXX::DeploySSH->new(); =head2 Accessors =over 4 =item $ds->set_user($user) The user authenticating via SSH2. Must set the user before calling connect(). =item $ds->set_hostname($hostname) The hostname that you want to connect to. Must set the hostname before calling connect(). =back =head2 Operators =over 4 =item $ds->exec($remote_cmd) Executes C<$remote_cmd> on the machine you are connected to. This method returns ($rc, at output) Where C<$rc> is the return code and C<@output> is any output. Note that the return value of this method is different from put() and get() because they only indicate success/fail, whereas exec() needs to return the return code of the program execution and output. =item $ds->put($local_file,$remote_file) Transfers C<$local_file> to C<$remote_file> on the connected machine. =item $ds->get($remote_file,$local_file) Retrieves C<$local_file> from C<$remote_file> on the connected machine. =back =head2 Other =over 4 =item $ds->disconnect() Terminates the connection. =back =head1 REQUIRED MODULES Install required modules on Windows using the C<< ppm install >> command. =over 4 =item * Net::SSH2 - Base methods handling the SSH2 protocol. =item * Carp - For error handling. =back =head1 BUGS AND CAVEATS =over 4 =item * Occasional flakiness occurs where a command returns an error for no apparent reason. If this happens, re-execute the workflow. =item * Output is not being returned by exec() in some cases. =back =head1 TODO'S =over 4 =item * Have constructor accept user and hostname arguments. =back =head1 AUTHOR Sean Blanton of OpenMake Software for XXX =head1 SEE ALSO Net::SSH2, XXX::DeployProperties =cut BEGIN { use Exporter (); use vars qw(@ISA @EXPORT $VERSION); @ISA = qw(Exporter); @EXPORT = qw( ); } use Net::SSH2; use Carp qw{confess cluck}; use strict; our $AUTOLOAD; # it's a package global our %fields = ( hostname => undef, user => undef, private_key => undef, public_key => undef, private_key_password => undef, ssh2_handle => undef, ); our $home_dir = $^O =~ /win/i ? $ENV{USERPROFILE} . "/.ssh" : $ENV{HOME} . "/.ssh"; #TODO: The password should be found by lookup instead of hardcoded here our $password = 'XYXYXYX'; #-- password that encrypts the private key, not the logon our $private_key = "$home_dir/ccbuilder"; our $public_key = "$home_dir/ccbuilder.pub"; die "Private key file '$private_key' does not exist as a file." unless -f $private_key; die "Public key file '$public_key' does not exist as a file." unless -f $public_key; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $self = { _permitted => \%fields, %fields, }; bless( $self, $class ); $self->set_private_key($private_key); $self->set_public_key($public_key); $self->set_private_key_password($password); my $ssh2 = Net::SSH2->new() or confess("couldn't create ssh2 handle"); $self->set_ssh2_handle($ssh2); return $self; } sub connect { my $self = shift or confess "FATAL: Wrong args!"; my $hostname = $self->get_hostname() or confess(''); my $user = $self->get_user() or confess(''); my $private_key = $self->get_private_key() or confess(''); my $public_key = $self->get_public_key() or confess(''); my $password = $self->get_private_key_password() or confess(''); my $ssh2 = $self->get_ssh2_handle() or confess(''); $ssh2->connect($hostname) or die "ERROR: Couldn't connect to $hostname."; $ssh2->auth_publickey( $user, $public_key, $private_key, $password ); unless ( $ssh2->auth_ok ) { my ( $rc, $err_msg ) = $ssh2->error; $ssh2->disconnect; cluck("ERROR: can't log in: $rc : $err_msg"); return undef; } } sub disconnect { my $self = shift or confess "FATAL: Wrong args!"; if ( my $ssh2 = $self->get_ssh2_handle() ) { $ssh2->disconnect; } $self->set_ssh2_handle(undef); return 1; } sub exec { my $self = shift or die; my $cmd = shift or die; my $ssh2 = $self->get_ssh2_handle() or confess(); my $chan = _get_channel($ssh2); $chan->exec("$cmd\n"); my @output = <$chan>; my $rc = $chan->exit_status; cluck("ERROR: $rc\n at output\n") if $rc; $chan->close; #-- channel is useless after exec return $rc, @output; } sub put { my $self = shift or die; my $local_file = shift or die; my $remote_file = shift or die; my $ssh2 = $self->get_ssh2_handle() or confess(); $ssh2->blocking(1); $ssh2->scp_put( "$local_file", "$remote_file" ); #-- Note bug from scp_put puts wrong mtime. Put it right. # take care to actually transfer the file. my $sftp = $ssh2->sftp(); check_ssh2_error($ssh2); $sftp->setstat( "$remote_file", 'mtime', time() ); check_ssh2_error($ssh2); $ssh2->blocking(0); return check_ssh2_error($ssh2); } sub get { my $self = shift or die; my $remote_file = shift or die; my $local_file = shift or die; my $ssh2 = $self->get_ssh2_handle() or confess(); $ssh2->blocking(1); $ssh2->scp_get( "$remote_file", "$local_file" ); $ssh2->blocking(0); return check_ssh2_error($ssh2); } #-- Get a(nother) channel for this logon session # NOTE: Class function, not an object method sub _get_channel { my $ssh2 = shift or confess(); $ssh2->blocking(1); my $chan = $ssh2->channel(); $ssh2->blocking(0); return $chan; } sub check_ssh2_error { #-- be careful here, we are not returning an error code, # but 'true' if operation was successful my $ssh2 = shift or die; return 1 unless $ssh2->error; my @errs = $ssh2->error; cluck("Errors from Net::SSH2: @errs") if @errs; return undef; } #-- this function allows automatic getters and setters # based on what is in the %fields at the beginning of the module sub AUTOLOAD { my $self = shift; my $type = ref($self) or confess "$self is not an object"; my $name = $AUTOLOAD; $name =~ s/.*://; # strip fully-qualified portion my $field = $name; $field =~ s/^(set_|get_)//; unless ( exists $self->{_permitted}->{$field} ) { confess "Can't access `$name' for field '$field' in class $type"; } if ( $name =~ /^set_/ ) { if (@_) { return $self->{$field} = shift; } else { return $self->{$field} = ""; } } elsif ( $name =~ /^get_/ ) { return $self->{$field}; } } 1; Regards, Sean Sean Blanton, Ph.D. Connect: http://www.linkedin.com/in/seanblanton On Fri, Nov 6, 2009 at 4:33 PM, Young, Darren wrote: > That module has a lot of known issues. I couldn't get it to work > consistently (win <-> Solaris). See perlmonks.org. I abandoned it for > Net::SSH2, and that only worked in limited ways. Yea, I found all sorts of similar postings there. > I can send you my wrapper utils, but right now am on the train Sure, if it works I'd love to take a look. _______________________________________________ Chicago-talk mailing list Chicago-talk at pm.org http://mail.pm.org/mailman/listinfo/chicago-talk -------------- next part -------------- An HTML attachment was scrubbed... URL: From joshua.mcadams at gmail.com Wed Nov 11 21:21:03 2009 From: joshua.mcadams at gmail.com (Joshua) Date: Wed, 11 Nov 2009 23:21:03 -0600 Subject: [Chicago-talk] Book review get-together? Message-ID: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> brian and I were thinking about having a little get-together this upcoming Friday evening. Pizza, beer, and hopefully a little book reviewing. Would anyone be up for that? From hwigoda at mindspring.com Wed Nov 11 21:33:30 2009 From: hwigoda at mindspring.com (Hal Wigoda) Date: Wed, 11 Nov 2009 23:33:30 -0600 Subject: [Chicago-talk] Book review get-together? In-Reply-To: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> Message-ID: <49C363FE-3D73-4A4B-A5C4-9FE19807C8A6@mindspring.com> what book(s)? hal On Nov 11, 2009, at 11:21 PM, Joshua wrote: > brian and I were thinking about having a little get-together this > upcoming Friday evening. Pizza, beer, and hopefully a little book > reviewing. Would anyone be up for that? > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk From joshua.mcadams at gmail.com Wed Nov 11 22:35:13 2009 From: joshua.mcadams at gmail.com (Joshua) Date: Thu, 12 Nov 2009 00:35:13 -0600 Subject: [Chicago-talk] Book review get-together? In-Reply-To: <49C363FE-3D73-4A4B-A5C4-9FE19807C8A6@mindspring.com> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> <49C363FE-3D73-4A4B-A5C4-9FE19807C8A6@mindspring.com> Message-ID: <49d805d70911112235x166f2888q372d5beaf1bc4ce@mail.gmail.com> Effective Perl Programming 2nd Edition... brian and I are just wrapping up the rewrite. On Wed, Nov 11, 2009 at 11:33 PM, Hal Wigoda wrote: > what book(s)? > hal > > > On Nov 11, 2009, at 11:21 PM, Joshua wrote: > >> brian and I were thinking about having a little get-together this >> upcoming Friday evening. ?Pizza, beer, and hopefully a little book >> reviewing. ?Would anyone be up for that? >> _______________________________________________ >> Chicago-talk mailing list >> Chicago-talk at pm.org >> http://mail.pm.org/mailman/listinfo/chicago-talk > > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk > From v.velox at vvelox.net Thu Nov 12 01:02:21 2009 From: v.velox at vvelox.net (Zane C.B.) Date: Thu, 12 Nov 2009 03:02:21 -0600 Subject: [Chicago-talk] module-starter and stuff in /usr/local/share Message-ID: <20091112030221.248f6be8@vixen42.vulpes> When creating a module with module-starter, any one know how to install stuff to '/usr/local/share' or what ever the proper share prefix is? -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 196 bytes Desc: not available URL: From shlomif at iglu.org.il Thu Nov 12 04:31:13 2009 From: shlomif at iglu.org.il (Shlomi Fish) Date: Thu, 12 Nov 2009 14:31:13 +0200 Subject: [Chicago-talk] module-starter and stuff in /usr/local/share In-Reply-To: <20091112030221.248f6be8@vixen42.vulpes> References: <20091112030221.248f6be8@vixen42.vulpes> Message-ID: <200911121431.13714.shlomif@iglu.org.il> Hi Zane! On Thursday 12 Nov 2009 11:02:21 Zane C.B. wrote: > When creating a module with module-starter, any one know how to > install stuff to '/usr/local/share' or what ever the proper share > prefix is? > If you're using Module-Build, you can try to copy the custom logic I have for it for my XML::Grammar modules: http://www.shlomifish.org/open-source/projects/XML-Grammar/ I'm using it to install stuff like XSLT .xslt files, RELAX NG-based .rng schema files and other XML static stuff. Feel free to borrow and adapt this stuff - it's licensed under the MIT/X11 Licence - http://en.wikipedia.org/wiki/MIT_License . Also look at: http://search.cpan.org/dist/File-ShareDir/ Note that if you're planning to use Module-Install (or plain-old ExtUtils- MakeMaker ), then I won't be able to help you without investing some time on figuring out how to do that. If you're still interested in that, maybe try the dedicated mailing lists for this, searching for prior art on the CPAN, or irc.perl.org or maybe #perl on irc.freenode.net . Regards, Shlomi Fish -- ----------------------------------------------------------------- Shlomi Fish http://www.shlomifish.org/ http://www.shlomifish.org/humour/ways_to_do_it.html Chuck Norris read the entire English Wikipedia in 24 hours. Twice. From chicago.pm at galumph.com Thu Nov 12 05:30:56 2009 From: chicago.pm at galumph.com (Elliot Shank) Date: Thu, 12 Nov 2009 07:30:56 -0600 Subject: [Chicago-talk] Book review get-together? In-Reply-To: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> Message-ID: <4AFC0E10.6010109@galumph.com> Joshua wrote: > Would anyone be up for that? Sure. From bruce.files at gmail.com Thu Nov 12 13:48:27 2009 From: bruce.files at gmail.com (Bruce Files) Date: Thu, 12 Nov 2009 15:48:27 -0600 Subject: [Chicago-talk] Book review get-together? In-Reply-To: <49d805d70911112235x166f2888q372d5beaf1bc4ce@mail.gmail.com> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> <49C363FE-3D73-4A4B-A5C4-9FE19807C8A6@mindspring.com> <49d805d70911112235x166f2888q372d5beaf1bc4ce@mail.gmail.com> Message-ID: I'm reading Blank-Edelman's updated System Administration with Perl right now (very good!) and would love to dig into a new version of Effective... Just let me know the exact time and place. Thanks - Bruce Files. On Thu, Nov 12, 2009 at 12:35 AM, Joshua wrote: > Effective Perl Programming 2nd Edition... brian and I are just > wrapping up the rewrite. > > On Wed, Nov 11, 2009 at 11:33 PM, Hal Wigoda > wrote: > > what book(s)? > > hal > > > > > > On Nov 11, 2009, at 11:21 PM, Joshua wrote: > > > >> brian and I were thinking about having a little get-together this > >> upcoming Friday evening. Pizza, beer, and hopefully a little book > >> reviewing. Would anyone be up for that? > >> _______________________________________________ > >> Chicago-talk mailing list > >> Chicago-talk at pm.org > >> http://mail.pm.org/mailman/listinfo/chicago-talk > > > > _______________________________________________ > > Chicago-talk mailing list > > Chicago-talk at pm.org > > http://mail.pm.org/mailman/listinfo/chicago-talk > > > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk > -------------- next part -------------- An HTML attachment was scrubbed... URL: From andrew at cleverdomain.org Thu Nov 12 17:52:35 2009 From: andrew at cleverdomain.org (Andrew Rodland) Date: Thu, 12 Nov 2009 19:52:35 -0600 Subject: [Chicago-talk] [WindyCity-pm] Book review get-together? In-Reply-To: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> Message-ID: <200911121952.35539.andrew@cleverdomain.org> On Wednesday 11 November 2009 11:21:03 pm Joshua wrote: > brian and I were thinking about having a little get-together this > upcoming Friday evening. Pizza, beer, and hopefully a little book > reviewing. Would anyone be up for that? I'm going to try to make it out -- sounds like a great occasion. When in the evening would you be thinking about? Andrew From leonard at umn.edu Thu Nov 12 20:10:42 2009 From: leonard at umn.edu (leonard) Date: Thu, 12 Nov 2009 22:10:42 -0600 Subject: [Chicago-talk] Frozen Perl 2010 announcment and Call for Speakers Message-ID: <45AB7BAF-322B-4175-B75E-AC7EAA23D382@umn.edu> The Minneapolis Perl Mongers are organizing a Perl workshop in Minneapolis on February 5-7, 2010, and I hope some of you can attend. We're also working on a hackathon the day after and two Perl classes: "Effective Perl Programming",taught by brian d foy and "Introduction to Moose" taught by Dave Rolsky on Friday February 5th. If you are a student, you'll be eligible for the super-cheap rates for the Workshop ($25 early bird prices for the workshop). If you are concerned about the weather in Minnesota in February, there is a hotel that is connected to our venue by underground tunnel:http:// www.radisson.com/minneapolismn_metrodome. After you arrive, you won't have to go outside unless you choose. Please pass this information on to your employers/co-workers/fellow students, as they might also like to attend. We've also opened our call for speakers, and we'd love to have your submissions. You can view the CFS at http://www.frozen-perl.org/mpw2010/cfs.html Thanks much for your time The Frozen Perl team. -------------- next part -------------- An HTML attachment was scrubbed... URL: From joshua.mcadams at gmail.com Thu Nov 12 20:44:23 2009 From: joshua.mcadams at gmail.com (Joshua) Date: Thu, 12 Nov 2009 22:44:23 -0600 Subject: [Chicago-talk] [WindyCity-pm] Book review get-together? In-Reply-To: <200911121952.35539.andrew@cleverdomain.org> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> <200911121952.35539.andrew@cleverdomain.org> Message-ID: <49d805d70911122044l10cf6c34o5742615f7466f111@mail.gmail.com> How about 7pm at my place. 124 W Polk. Look for Heather and Josh McAdams on the buzzer when you get there. On Thu, Nov 12, 2009 at 7:52 PM, Andrew Rodland wrote: > On Wednesday 11 November 2009 11:21:03 pm Joshua wrote: >> brian and I were thinking about having a little get-together this >> upcoming Friday evening. ?Pizza, beer, and hopefully a little book >> reviewing. ?Would anyone be up for that? > > I'm going to try to make it out -- sounds like a great occasion. When in the > evening would you be thinking about? > > Andrew > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk > From joshua.mcadams at gmail.com Thu Nov 12 20:45:26 2009 From: joshua.mcadams at gmail.com (Joshua) Date: Thu, 12 Nov 2009 22:45:26 -0600 Subject: [Chicago-talk] [WindyCity-pm] Book review get-together? In-Reply-To: <49d805d70911122044l10cf6c34o5742615f7466f111@mail.gmail.com> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> <200911121952.35539.andrew@cleverdomain.org> <49d805d70911122044l10cf6c34o5742615f7466f111@mail.gmail.com> Message-ID: <49d805d70911122045n9e1e5dbhc828272b1b1af125@mail.gmail.com> BTW, good public transit options: - Red line to Harrison - Blue line to LaSalle - Brown, Pink or Orange line to Library. - 22 or 36 busses. On Thu, Nov 12, 2009 at 10:44 PM, Joshua wrote: > How about 7pm at my place. ?124 W Polk. ?Look for Heather and Josh > McAdams on the buzzer when you get there. > > On Thu, Nov 12, 2009 at 7:52 PM, Andrew Rodland wrote: >> On Wednesday 11 November 2009 11:21:03 pm Joshua wrote: >>> brian and I were thinking about having a little get-together this >>> upcoming Friday evening. ?Pizza, beer, and hopefully a little book >>> reviewing. ?Would anyone be up for that? >> >> I'm going to try to make it out -- sounds like a great occasion. When in the >> evening would you be thinking about? >> >> Andrew >> _______________________________________________ >> Chicago-talk mailing list >> Chicago-talk at pm.org >> http://mail.pm.org/mailman/listinfo/chicago-talk >> > From sean at blanton.com Fri Nov 13 04:31:27 2009 From: sean at blanton.com (Sean Blanton) Date: Fri, 13 Nov 2009 06:31:27 -0600 Subject: [Chicago-talk] [WindyCity-pm] Book review get-together? In-Reply-To: <49d805d70911122045n9e1e5dbhc828272b1b1af125@mail.gmail.com> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> <200911121952.35539.andrew@cleverdomain.org> <49d805d70911122044l10cf6c34o5742615f7466f111@mail.gmail.com> <49d805d70911122045n9e1e5dbhc828272b1b1af125@mail.gmail.com> Message-ID: Count me in! Regards, Sean On Thu, Nov 12, 2009 at 10:45 PM, Joshua wrote: > BTW, good public transit options: > > - Red line to Harrison > - Blue line to LaSalle > - Brown, Pink or Orange line to Library. > - 22 or 36 busses. > > On Thu, Nov 12, 2009 at 10:44 PM, Joshua wrote: > > How about 7pm at my place. 124 W Polk. Look for Heather and Josh > > McAdams on the buzzer when you get there. > > > > On Thu, Nov 12, 2009 at 7:52 PM, Andrew Rodland > wrote: > >> On Wednesday 11 November 2009 11:21:03 pm Joshua wrote: > >>> brian and I were thinking about having a little get-together this > >>> upcoming Friday evening. Pizza, beer, and hopefully a little book > >>> reviewing. Would anyone be up for that? > >> > >> I'm going to try to make it out -- sounds like a great occasion. When in > the > >> evening would you be thinking about? > >> > >> Andrew > >> _______________________________________________ > >> Chicago-talk mailing list > >> Chicago-talk at pm.org > >> http://mail.pm.org/mailman/listinfo/chicago-talk > >> > > > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk > -------------- next part -------------- An HTML attachment was scrubbed... URL: From sean at blanton.com Fri Nov 13 16:22:42 2009 From: sean at blanton.com (Sean Blanton) Date: Fri, 13 Nov 2009 18:22:42 -0600 Subject: [Chicago-talk] [WindyCity-pm] Book review get-together? In-Reply-To: <49d805d70911122045n9e1e5dbhc828272b1b1af125@mail.gmail.com> References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> <200911121952.35539.andrew@cleverdomain.org> <49d805d70911122044l10cf6c34o5742615f7466f111@mail.gmail.com> <49d805d70911122045n9e1e5dbhc828272b1b1af125@mail.gmail.com> Message-ID: Why not Brown/Pink/Orange to LaSalle and Van Buren - am I missing something? Regards, Sean On Thu, Nov 12, 2009 at 10:45 PM, Joshua wrote: > BTW, good public transit options: > > - Red line to Harrison > - Blue line to LaSalle > - Brown, Pink or Orange line to Library. > - 22 or 36 busses. > > On Thu, Nov 12, 2009 at 10:44 PM, Joshua wrote: > > How about 7pm at my place. 124 W Polk. Look for Heather and Josh > > McAdams on the buzzer when you get there. > > > > On Thu, Nov 12, 2009 at 7:52 PM, Andrew Rodland > wrote: > >> On Wednesday 11 November 2009 11:21:03 pm Joshua wrote: > >>> brian and I were thinking about having a little get-together this > >>> upcoming Friday evening. Pizza, beer, and hopefully a little book > >>> reviewing. Would anyone be up for that? > >> > >> I'm going to try to make it out -- sounds like a great occasion. When in > the > >> evening would you be thinking about? > >> > >> Andrew > >> _______________________________________________ > >> Chicago-talk mailing list > >> Chicago-talk at pm.org > >> http://mail.pm.org/mailman/listinfo/chicago-talk > >> > > > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk > -------------- next part -------------- An HTML attachment was scrubbed... URL: From joshua.mcadams at gmail.com Sat Nov 14 13:35:32 2009 From: joshua.mcadams at gmail.com (Joshua) Date: Sat, 14 Nov 2009 15:35:32 -0600 Subject: [Chicago-talk] [WindyCity-pm] Book review get-together? In-Reply-To: References: <49d805d70911112121y6ebbf92p78ea99f8c3b6c1e5@mail.gmail.com> <200911121952.35539.andrew@cleverdomain.org> <49d805d70911122044l10cf6c34o5742615f7466f111@mail.gmail.com> <49d805d70911122045n9e1e5dbhc828272b1b1af125@mail.gmail.com> Message-ID: <49d805d70911141335n16c6dcbek1d6fc7e16640265c@mail.gmail.com> That works too... those are only a couple of blocks apart :) On Fri, Nov 13, 2009 at 6:22 PM, Sean Blanton wrote: > Why not Brown/Pink/Orange to LaSalle and Van Buren - am I missing something? > Regards, > Sean > > > > On Thu, Nov 12, 2009 at 10:45 PM, Joshua wrote: >> >> BTW, good public transit options: >> >> - Red line to Harrison >> - Blue line to LaSalle >> - Brown, Pink or Orange line to Library. >> - 22 or 36 busses. >> >> On Thu, Nov 12, 2009 at 10:44 PM, Joshua wrote: >> > How about 7pm at my place. ?124 W Polk. ?Look for Heather and Josh >> > McAdams on the buzzer when you get there. >> > >> > On Thu, Nov 12, 2009 at 7:52 PM, Andrew Rodland >> > wrote: >> >> On Wednesday 11 November 2009 11:21:03 pm Joshua wrote: >> >>> brian and I were thinking about having a little get-together this >> >>> upcoming Friday evening. ?Pizza, beer, and hopefully a little book >> >>> reviewing. ?Would anyone be up for that? >> >> >> >> I'm going to try to make it out -- sounds like a great occasion. When >> >> in the >> >> evening would you be thinking about? >> >> >> >> Andrew >> >> _______________________________________________ >> >> Chicago-talk mailing list >> >> Chicago-talk at pm.org >> >> http://mail.pm.org/mailman/listinfo/chicago-talk >> >> >> > >> _______________________________________________ >> Chicago-talk mailing list >> Chicago-talk at pm.org >> http://mail.pm.org/mailman/listinfo/chicago-talk > > > _______________________________________________ > Chicago-talk mailing list > Chicago-talk at pm.org > http://mail.pm.org/mailman/listinfo/chicago-talk > From pcmantz at uchicago.edu Sat Nov 21 15:00:22 2009 From: pcmantz at uchicago.edu (Paul Mantz) Date: Sat, 21 Nov 2009 17:00:22 -0600 Subject: [Chicago-talk] Fwd: [ACM] PS1 Hackathons In-Reply-To: References: Message-ID: <42f28fe0911211500g460522b6g7d66f178581c0cb1@mail.gmail.com> Pumping Station: One has been holding monthly hackathons for the past few months, and we've been doing it with so much success that we're going to have two of them! The first all-night event this month is new. It will be held this Saturday, the 21st. It's called Hackathon: Bring the Noise, and is dedicated to loud projects, such as construction, woodworking, DJing, and any other sort of The second event is our regularly-scheduled Hackathon!, and it's happening on Saturday the 28th. We'll be keeping the power tools off so that people can concentrate on coding, and other mind-intensive activities. So far, we've had a wide berth of projects, from Perl and Python development to emacs modes to web design to driver development. Everyone's welcome to come to both. They both start at 8pm, and will go on as long as the Red Bull floweth. Pumping Station: One is located at 3354 N. Elston, Chicago, IL. If the door is locked, ring the bell. For more information about the space, visit http://pumpingstationone.org/ . Adios, -- Paul Mantz http://www.mcpantz.org Zmanda - Open source backup and recovery http://www.zmanda.com/ From davidy at nationalcycle.com Sat Nov 21 15:03:11 2009 From: davidy at nationalcycle.com (David Young) Date: Sat, 21 Nov 2009 17:03:11 -0600 Subject: [Chicago-talk] Fwd: [ACM] PS1 Hackathons ([AutoReply] Out of Office) Message-ID: I'm out of the office until Monday November 30th. If you need assisance, please contact: Jerry Bowman jerryb at nationalcycle.com 708-343-0400 x124. ydy