diff options
author | Karl Berry <karl@freefriends.org> | 2008-06-10 01:18:26 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-06-10 01:18:26 +0000 |
commit | 255db2f3bb08ad2932f94408958bf388e138275d (patch) | |
tree | dbd95da7de16932b9fb58207c3c8ea62a5e8b797 /Master/tlpkg/bin/tl-update-install-pkg | |
parent | 08a7a657ead12cbef29c4e403b49a408337fd68e (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-x | Master/tlpkg/bin/tl-update-install-pkg | 192 |
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: # |