aboutsummaryrefslogtreecommitdiffstats
path: root/BCD/Genisoimage.pm
blob: 7dba9b108cc946127a90db66d255724be59c6504 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package BCD::Genisoimage;

use strict;
use XML::Simple;
use BCD::Common qw(:DEFAULT $isoconf $wd $name $arch $version $builddir $isodir $error_color $repo $based_on);

our @ISA = qw(Exporter);
our @EXPORT = qw(main_iso);
our @EXPORT_OK = qw($isoname);

my $LOG="GENISOIMAGE -";
my $color = "green";

# mandriva-linux-free-2009.1-i586
our $isoname = $isoconf->{nameid} . '-' . $isoconf->{mediainfo}{version} . '-' . $isoconf->{arch};

# genisoimage -f -sort /home/plop/tmp/build/2009.1/11.sort  -r -J -hide-rr-moved -nobak -cache-inodes -A "Mandriva Linux - 2009 Spring (Free64)" -publisher "Mandriva" -sysid "Mandriva Linux" -p "Mandriva-Linux" -volset "Mandriva Linux - 2009 Spring (Free64) - DVD x86_64 [1/1]" -V "Free-20091-x86_64" -o /home/plop/iso/2009.1/11-2009.1.iso   -b x86_64/isolinux/isolinux.bin -c x86_64/isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table "/home/plop/build/2009.1/first/11" /home/plop/build/2009.1/11


sub create_version {
	# create the VERSION file available on the base of the ISO
    my $version_file = "$builddir/VERSION";
    print_color("$LOG create the $version_file file", $color);
    open my $VERSION, ">$version_file";
    my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime(time());
    $year += 1900;
    my $tag = $isoconf->{iso}{tag};
    my $product = $isoconf->{iso}{product};
    my $publisher = $isoconf->{iso}{header}{publisherid};
    printf $VERSION "$publisher $name $tag %04d%02d%02d $hour:%02d\n", $year, $mon+1, $mday, $min;
    close $VERSION;
}

sub create_productid {
	# vendor=Mandriva,distribution=Mandriva Linux,type=basic,version=2009.1,branch=cooker,release=0.1,arch=i586,product=maratangua
    print_color("$LOG create the $builddir/product.id", $color);
    my $productid_file = "$builddir/product.id";
    open my $product_id, ">$productid_file";
    print $product_id "vendor=$isoconf->{iso}{header}{publisherid},";
    print $product_id "distribution=$isoconf->{iso}{header}{systemid},";
    print $product_id "type=$isoconf->{iso}{type},";
    print $product_id "version=$isoconf->{based_on},";
    print $product_id "branch=$isoconf->{iso}{branch},";
    print $product_id "release=$isoconf->{iso}{minor}.$isoconf->{iso}{subversion},";
    print $product_id "arch=$arch,";
    print $product_id "product=$isoconf->{iso}{product}";
    close $product_id;
}

sub create_idx {
        print_color("$LOG create the IDX file from $builddir/pkg-$version-$isoconf->{iso}{tag}.idx", $color);
	# pkg-2009.1-pauillac.idx
        system("find $builddir -name \*.rpm | awk -F 'media/' {'print \"$isoconf->{iso}{header}{volumeid} \" \$2'} | sed -e 's/\.rpm\$//g' | sort > $builddir/pkg-$version-$isoconf->{iso}{tag}.idx");
	system("cp -v $builddir/pkg-$version-$isoconf->{iso}{tag}.idx $isodir/$isoname.idx");
}

sub create_iso {
	# build the ISO with all args
	print_color("$LOG Building the ISO", $color);
	my $cmd = "genisoimage $isoconf->{iso}{genisoimage}{options} \\
-A '$isoconf->{iso}{header}{applicationid}' \\
-publisher '$isoconf->{iso}{header}{publisherid}' \\
-sysid '$isoconf->{iso}{header}{systemid}' \\
-p '$isoconf->{iso}{header}{datapreparer}' \\
-volset '$isoconf->{iso}{header}{volumesetid}' \\
-V '$isoconf->{iso}{header}{volumeid}' \\
-o '$isodir/$isoname.iso' \\
-b $arch/isolinux/isolinux.bin \\
-boot-info-table \\
$builddir/../
";
#-quiet \\
	print_color("\n------------\n $cmd", $color);
	system($cmd);
	system("du -h $isodir/$isoname.iso");
	system("du -sh $builddir/install");

}

sub create_md5 {
	# create the MD5 of the ISO
	print_color("$LOG Create the MD5 and SHA1 of the ISO", $color);
	my $ISOFILE = "$isodir/$isoname.iso";
	if (! -f $ISOFILE) {
		print_color("$LOG can't find $ISOFILE", $error_color);
		exit 1;
	} else {
		print_color("$LOG do a: md5sum $ISOFILE > $ISOFILE.md5", $color);
		system("cd $isodir &&  md5sum $isoname.iso > $ISOFILE.md5 &");
		print_color("$LOG do a: sha1sum $ISOFILE > $ISOFILE.sha1", $color);
		system("cd $isodir &&  sha1sum $isoname.iso > $ISOFILE.sha1 &");
	}
}

sub isohybrid {
	print_color("$LOG isohybrid the ISO", $color);
	my $ISOFILE = "$isodir/$isoname.iso";
	system("isohybrid -fatfirst $ISOFILE") == 0 or die "$LOG system isohybrid failed: $?\n";
}

sub copy_textfiles {
	map { system("cp -vf $repo/$based_on/$arch/$_ $builddir/");
	} qw(COPYING INSTALL.txt install.htm LICENSE.txt LICENSE-APPS.txt README.txt index.htm release-notes.html release-notes.txt);
}

sub main_iso {
	my ($option) = @_;
	create_version;
	create_productid;
	copy_textfiles;
	create_idx;
	if ($option =~ /noiso/) {
		print_color("$LOG skipping ISO creation", $color);
	} else {
		create_iso;
		isohybrid;
		create_md5;
	}

}

1;