#!/usr/bin/perl use File::Path; use File::Copy; use File::Glob ":glob"; use POSIX ":sys_wait_h"; $timeout = 60; $ENV{HOME}="/root"; $ENV{TMP}="/tmp"; $ENV{MOZILLA_FIVE_HOME}="LIBDIR/mozilla-MOZILLA_VERSION"; $ENV{LD_LIBRARY_PATH}="LIBDIR/mozilla-MOZILLA_VERSION"; $ENV{MOZ_DISABLE_GNOME}="1"; umask 022; if ( -f "LIBDIR/mozilla-MOZILLA_VERSION/MOZILLA_NAME-bin" ) { # remove all of the old files rmtree("LIBDIR/mozilla-MOZILLA_VERSION/chrome/overlayinfo"); # unlink <LIBDIR/mozilla-MOZILLA_VERSION/chrome/*.rdf>; # change cache date to cause it to be dirty system("touch LIBDIR/mozilla-MOZILLA_VERSION/chrome/chrome.rdf"); unlink("LIBDIR/mozilla-MOZILLA_VERSION/components.ini"); unlink("LIBDIR/mozilla-MOZILLA_VERSION/defaults.ini"); unlink <LIBDIR/mozilla-MOZILLA_VERSION/components/*.dat>; # create a new clean path mkpath("LIBDIR/mozilla-MOZILLA_VERSION/chrome/overlayinfo"); # rebuild the installed-chrome.txt file from the installed # languages if ( -f "LIBDIR/mozilla-MOZILLA_VERSION/chrome/lang/installed-chrome.txt" ) { rebuild_lang_files(); } # Exec the "generate-chome.sh" script so that installed-chrome.txt gets re-generated $pid = fork(); # I am the child. if ($pid == 0) { exec("cd ".$ENV{MOZILLA_FIVE_HOME}."/chrome/rc.d && ./generate-chrome.sh"); } # I am the parent. else { my $timepassed = 0; do { $kid = waitpid($pid, &WNOHANG); sleep(1); $timepassed++; } until $kid == -1 || $timepassed > $timeout; # should we kill? if ($timepassed > $timeout) { kill (9, $pid); # kill -9 can leave threads hanging around system("/usr/bin/killall -9 ./generate-chrome.sh"); } } # make sure installed-chrome.txt is always more recent than chrome.rdf system("touch LIBDIR/mozilla-MOZILLA_VERSION/chrome/installed-chrome.txt"); # Register firefox $pid = fork(); # I am the child. if ($pid == 0) { exec("LIBDIR/mozilla-MOZILLA_VERSION/MOZILLA_NAME-bin -register> /dev/null 2> /dev/null"); } # I am the parent. else { my $timepassed = 0; do { $kid = waitpid($pid, &WNOHANG); sleep(1); $timepassed++; } until $kid == -1 || $timepassed > $timeout; # should we kill? if ($timepassed > $timeout) { kill (9, $pid); # kill -9 can leave threads hanging around system("/usr/bin/killall -9 LIBDIR/mozilla-MOZILLA_VERSION/MOZILLA_NAME-bin"); } } } sub rebuild_lang_files { unlink("LIBDIR/mozilla-MOZILLA_VERSION/chrome/installed-chrome.txt"); open (OUTPUT, "+>", "LIBDIR/mozilla-MOZILLA_VERSION/chrome/installed-chrome.txt")|| die("Failed to open installed-chrome.txt: $!\n"); copy("LIBDIR/mozilla-MOZILLA_VERSION/chrome/lang/installed-chrome.txt", \*OUTPUT); foreach (bsd_glob("LIBDIR/mozilla-MOZILLA_VERSION/chrome/lang/lang-*.txt")) { copy($_, \*OUTPUT); } copy("LIBDIR/mozilla-MOZILLA_VERSION/chrome/lang/default.txt", \*OUTPUT); }