summaryrefslogtreecommitdiff
path: root/Master/tlpkg/bin/tl-update-install-pkg
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-06-10 01:18:26 +0000
committerKarl Berry <karl@freefriends.org>2008-06-10 01:18:26 +0000
commit255db2f3bb08ad2932f94408958bf388e138275d (patch)
treedbd95da7de16932b9fb58207c3c8ea62a5e8b797 /Master/tlpkg/bin/tl-update-install-pkg
parent08a7a657ead12cbef29c4e403b49a408337fd68e (diff)
first cut at making images
git-svn-id: svn://tug.org/texlive/trunk@8631 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/bin/tl-update-install-pkg')
-rwxr-xr-xMaster/tlpkg/bin/tl-update-install-pkg192
1 files changed, 192 insertions, 0 deletions
diff --git a/Master/tlpkg/bin/tl-update-install-pkg b/Master/tlpkg/bin/tl-update-install-pkg
new file mode 100755
index 00000000000..44b1e38f1b5
--- /dev/null
+++ b/Master/tlpkg/bin/tl-update-install-pkg
@@ -0,0 +1,192 @@
+#!/usr/bin/env perl
+# $Id$
+#
+# Copyright 2008 Reinhard Kotucha, Norbert Preining
+# This file is licensed under the GNU General Public License version 2
+# or any later version.
+
+# This script creates the zip (everything) and tgz (omits windows)
+# archives to do a network install. Runs from cron.
+
+BEGIN {
+ $^W = 1;
+ my $me=$0;
+ $thisdir=`pwd`;
+ chomp ($thisdir);
+ if ($me=~m!/!) {
+ ($::installerdir=$me)=~s!(.*)/.*$!$1/../..!;
+ } else {
+ $::installerdir='../..';
+ }
+ chdir $installerdir or die "can't chdir \"$installerdir\".\n";
+ $installerdir=`pwd`;
+ chomp ($installerdir);
+ unshift (@INC, "$::installerdir/tlpkg");
+}
+
+use TeXLive::TLUtils qw(mkdirhier copy get_system_tmpdir info);
+use TeXLive::TLPDB;
+use TeXLive::TLPOBJ;
+use Getopt::Long;
+$Getopt::Long::autoabbrev=0;
+
+$opt_help=0;
+$opt_verbose=0;
+$opt_outputdir=0;
+
+sub usage
+{
+ print <<'EOF';
+Usage:
+ tl-make-install-pkg [-h|--help] [-v|--verbose] -o|--outputdir=dir
+
+ tl-make-install-pkg generates a .tar.gz file for Unix and a .zip file
+ for all systems containing all the files needed to install TeX Live
+ from the network.
+
+ Options:
+ -h|--help Print this message.
+ -o|--outputdir Target directory. Must exist and be writable.
+ -v|--verbose Extra messages.
+EOF
+;
+ exit 0;
+}
+
+usage if (@ARGV<1);
+
+TeXLive::TLUtils::process_logging_options();
+GetOptions(
+ "verbose|v",
+ "outputdir|o=s",
+ "help|h") or usage;
+
+usage if $opt_help;
+
+### determine directories.
+
+my $sys_tmp=get_system_tmpdir or die "No system TMPDIR found.";
+my $tmpdir="$sys_tmp/install-tl-$$";
+my $inst_tmp="$sys_tmp/install-tl-$$/install-tl";
+my $outputdir="$opt_outputdir";
+$outputdir="$thisdir/$outputdir" unless ($outputdir=~m!^/!);
+
+### cleanup.
+
+my @signals=qw(HUP INT ILL FPE SEGV TERM ABRT QUIT BUS PIPE);
+
+sub cleanup {
+ if (-d "$tmpdir") {
+ system('rm', '-rf', "$tmpdir");
+ }
+}
+
+foreach my $signal (@signals) {
+ $SIG{"$signal"}=\&cleanup;
+}
+
+### create directories.
+
+die "$tmpdir already exists.\n" if (-d "$tmpdir");
+
+mkdir "$tmpdir" or die "Can't mkdir \"$tmpdir\".\n";
+mkdir "$inst_tmp" or die "Can't mkdir \"$inst_tmp\".\n";
+
+if ($opt_verbose) {
+ info("thisdir: \"$thisdir\"\n");
+ info("installerdir: \"$installerdir\"\n");
+ info("sys_tmp: \"$sys_tmp\"\n");
+ info("tmpdir: \"$tmpdir\"\n");
+ info("inst_tmp: \"$inst_tmp\"\n");
+ info("outputdir: \"$outputdir\"\n");
+}
+
+die "outputdir \"$outputdir\" dosn't exist.\n" unless (-d "$outputdir");
+die "outputdir \"$outputdir\" is not writable.\n" unless (-w "$outputdir");
+
+### read TLPDB and extract files
+
+my $tlpdb = TeXLive::TLPDB->new ("root" => "$installerdir");
+die("Cannot find tlpdb in $installerdir!\n") unless defined($tlpdb);
+my $tlp = $tlpdb->get_package("00texlive.installer");
+die("Cannot find package 00texlive.installer in ${installerdir}'s texlive.tlpdb\n") unless defined($tlp);
+
+my $tlpinfra = $tlpdb->get_package("texlive.infra");
+die("Cannot find package texlive.infra in ${installerdir}'s texlive.tlpdb\n") unless defined($tlp);
+
+
+my @unix;
+push @unix, $tlp->runfiles;
+push @unix, $tlpinfra->runfiles;
+push @unix, $tlp->docfiles;
+my %tlpbin = %{$tlp->binfiles};
+foreach my $a (keys %tlpbin) {
+ next if ($a =~ m/win32/);
+ push @unix, @{$tlpbin{$a}};
+}
+my @win32;
+push @win32, @unix;
+if (defined($tlpbin{"win32"})) {
+ push @win32, @{$tlpbin{"win32"}};
+}
+
+### copy files from the repository to tmpdir
+
+sub copy_files {
+ my ($dir, $file);
+ for (@_) {
+ if ($_ !~ m!/!) {
+ # file in the root, missing ./
+ $_ = "./$_";
+ }
+ ($dir, $file) = /^(.*)\/(.*)/;
+ mkdirhier "$inst_tmp/$dir";
+ copy "$_", "$inst_tmp/$dir";
+ }
+}
+
+### create the .tar.gz and the .zip file
+
+sub make_zip
+{
+ my ($type) = @_;
+ info("making $type\n");
+
+ chdir ($tmpdir) || die "chdir($tmpdir) failed: $!";
+ if ($type eq 'zip') {
+ system('zip', '-rq', 'install-tl.zip', 'install-tl');
+ } else {
+ system('tar', '-czf', 'install-tl-unx.tar.gz', 'install-tl');
+ }
+ chdir ($installerdir) || die "chdir($installerdir) failed: $!";
+}
+
+### copy generated files to outputdir
+
+sub install_zip
+{
+ info("installing to $outputdir\n");
+ copy "$tmpdir/install-tl-unx.tar.gz", $outputdir;
+ system ('ls', '-l', "$outputdir/install-tl-unx.tar.gz");
+
+ copy "$tmpdir/install-tl.zip", $outputdir;
+ system ('ls', '-l', "$outputdir/install-tl.zip");
+}
+
+### main
+copy_files (@unix);
+make_zip 'tgz';
+
+copy_files (@win32);
+make_zip 'zip';
+
+install_zip;
+
+cleanup;
+
+### Local Variables:
+### perl-indent-level: 2
+### tab-width: 2
+### indent-tabs-mode: nil
+### End:
+# vim:set tabstop=2 expandtab: #