#!/usr/bin/env perl use strict; use warnings; use DBI; #### Begin Section: Useful webpages # http://directory.fsf.org/GNU/ Directory of GNU software # http://sql-info.de/mysql/examples/Perl-DBI-examples.html # http://mailliststock.wordpress.com/2007/03/01/sqlite-examples-with-bash-perl-and-python/ #### End Section: Useful webpages my $repository = '/tmp/'; my $stow_dir = '/stow'; my $target_dir = my $su_command = 'sudo'; my $tar_command = 'tar --verbose --extract --file'; my $database = 'gnu.db'; my $dbh = DBI->connect("dbi:SQLite:$database", "", "", {RaiseError => 1, AutoCommit => 1}); # su -c 'aptitude install libdbd-sqlite3-perl' on a Debian system TDW 2009-04-19 &print_software; if ( defined($ARGV[0])) { &stow_gnu_software($ARGV[0]); } ################################################ Subroutines only below this line ############################ sub stow_gnu_software { my ( $software ) = @_; print "\t$software\n"; # $dbh->do("CREATE TABLE gnu_software (id INTEGER PRIMARY KEY, short_name TEXT UNIQUE, name TEXT, latest_version TEXT, date_checked DATE )"); my $sth_id = $dbh->prepare("SELECT id, latest_version FROM gnu_software WHERE short_name = \'$software\'"); $sth_id->execute(); my ($software_id, $version) = $sth_id->fetchrow_array(); print "$software => $version\n"; # Given software short name, get id # Given id, get version my $all = $dbh->selectall_arrayref("SELECT * FROM mirror_url"); foreach my $row (@$all) { my ($software_id, $country_id, $region_id, $url, $date_checked ) = @$row; } my $sth = $dbh->prepare('SELECT url FROM mirror_url WHERE id = ?'); $sth->execute(1); my $url = $sth->fetchrow_array(); my $sth2 = $dbh->prepare('SELECT directory, latest_tarball FROM latest_tarball WHERE gnu_software_id = ?'); $sth2->execute($software_id); my ( $directory, $tarball ) = $sth2->fetchrow_array; &download_tarball( $directory, $tarball, $url ); sub download_tarball { my ( $directory, $tarball, $url ) = @_; my $download_command = ''; if ( $tarball ne 'OVERRIDE' ) { $download_command = "wget --no-clobber ${url}${directory}/$tarball"; } else { $download_command = "wget --no-clobber http://www.mpfr.org/mpfr-current/mpfr-2.4.1.tar.bz2"; } print "==== $download_command ====\n"; system ("$download_command"); system ("$tar_command $tarball"); } chdir ("$software-$version"); open(OUT, ">stow-$software-$version"); print OUT "#!/bin/bash\n"; print OUT "set -o errexit # exit on error\n"; print OUT "# ./configure --prefix=/usr/local\n"; print OUT "# make\n"; print OUT "$su_command make DESTDIR=$stow_dir/$software-$version install\n"; print OUT "$su_command stow $software-$version\n"; print OUT "$su_command /sbin/ldconfig\n"; # To-do Check /etc/ldconfig close(OUT); } sub print_software { print "=================================== Table gnu_software =================================\n"; # $dbh->do("CREATE TABLE gnu_software (id INTEGER PRIMARY KEY, short_name TEXT UNIQUE, name TEXT, latest_version TEXT, date_checked DATE )"); my $all = $dbh->selectall_arrayref("SELECT * FROM gnu_software ORDER BY short_name"); foreach my $row (@$all) { my ($id, $short_name, $name, $latest_version, $date_checked ) = @$row; print "$short_name\t$latest_version v.$latest_version\t$name\n"; } }