#!/usr/bin/perl -w use utf8; use LWP::Simple; use HTML::TreeBuilder; use Encode; use constant download_page_url => 'http://www.mozilla.com/en-US/products/download.html'; use constant install_directory => '/usr/local/'; use constant verbose => 0; chdir install_directory or die $!; my $download_link_rx = qr{^http://download\.mozilla\.org/\?product=(firefox-\d+(?:\.\d+)+)&os=linux&lang=en-US$}; my $download_page = get download_page_url or die $!; my $tree = HTML::TreeBuilder->new_from_content(decode_utf8 $download_page) or die "error parsing " . download_page_url; my $download_link_element = $tree->look_down(_tag => 'a', 'href' => $download_link_rx) or die "error parsing " . download_page_url; my $download_link = $download_link_element->attr('href'); $download_link =~ $download_link_rx; my $firefox_with_version = $1; if (-d install_directory . $firefox_with_version) { warn("$firefox_with_version exists; exiting") if verbose; exit; } #rename "index.html?product=$firefox_with_version&os=linux&lang=en-US", "$firefox_with_version.tar.bz2"; system(qw(wget --trust-server-names -nv -N -c), $download_link) == 0 or die "wget error (\$?/\$!=$?/$!)"; #rename "index.html?product=$firefox_with_version&os=linux&lang=en-US", "$firefox_with_version.tar.bz2"; die "did not download $firefox_with_version.tar.bz2 from $download_link" unless -f "$firefox_with_version.tar.bz2"; my @tar_cmd = (qw(tar --transform), "s/^firefox/$firefox_with_version~/", '-jxf', "$firefox_with_version.tar.bz2"); print join ' ', @tar_cmd, "\n" if verbose; system(@tar_cmd) == 0 or die "tar error (\$?/\$!=$?/$!)"; rename "$firefox_with_version~", $firefox_with_version or die "rename: $!"; my ($install_dest, $link_dest) = ("../$firefox_with_version/firefox", install_directory . '/bin/firefox'); unlink($link_dest); symlink($install_dest, $link_dest) or die "link: $!"; unlink("$firefox_with_version.tar.bz2");