- build splashs without silent image to reduce size (#24750)
[opensuse:installation-images.git] / bin / mk_mod_disk
1 #! /usr/bin/perl -w
2
3 # Create a module disk.
4 #
5 # Usage:        mk_mod_disk
6
7 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
8 # the usual fuss...
9
10 BEGIN { unshift @INC, ( $0 =~ /(.*?)((?<![^\/])bin\/)?[^\/]+$/ )[0] . "lib" }
11 use ReadConfig;
12 use AddFiles;
13 use MakeFATImage;
14
15 die "usage: $Script\n" if @ARGV;
16
17
18 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
19 # some config data
20
21 $srcdir = "${ImagePath}";
22 $image = "${ImagePath}modules$ENV{modules}";
23 $gen = "${DataPath}initrd/gen/module.";
24 $mdisk_i = "${BasePath}tmp/module_disks_images";
25 $mdisk_l = "${BasePath}tmp/module_disks_list";
26
27 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
28 # now we really start...
29
30 $bootsplash = 0;
31 $bootsplash = 1 if $ENV{bootsplash} eq 'modules1';
32
33 $disk = 1;
34 $disk = $ENV{modules} + 0 if exists $ENV{modules};
35
36 open F, $mdisk_i;
37 while(<F>) { @modimages_i = split ' ', $1 if /^$disk:\s*(.+?)\s*$/ }
38 close F;
39
40 open F, $mdisk_l;
41 while(<F>) { @modimages_l = split ' ', $1 if /^$disk:\s*(.+?)\s*$/ }
42 close F;
43
44 ($i1, $i2) = split /\./, $ConfigData{suse_release};      
45
46 if($ConfigData{product_name} eq "UnitedLinux") {
47   $label = "UNITEDLINUX";
48 }
49 else {
50   $label = "SUSE${i1}${i2}_MODS";
51 }
52
53 # create an empty image
54 ($blocks, $block_size) = MakeFATImage(
55   $image, $label, 1,
56   undef, undef, undef, undef, undef,
57   "\r\nI'm $ConfigData{product_name} module disk $disk. I cannot boot. :-(\r\n"
58 );
59
60 die "$Script: failed to create DOS disk image \"$image\"\n" unless defined $blocks;
61
62 printf "$Script: image \"%s\", %u blocks a %u bytes (%u total)\n", $image, $blocks, $block_size, $blocks * $block_size;
63
64 # umount it first, just in case
65 SUSystem "umount /mnt 2>/dev/null";
66
67 # add the other files
68 SUSystem "mount -oloop,umask=022 -t vfat $image /mnt" and
69   die "$Script: mount failed";
70
71 SUSystem "cp ${DataPath}initrd/module.help /mnt/module.config";
72 unlink "$image.txt";
73 for (@modimages_i) {
74   $s = $_;
75   $s =~ s/\@[^@]+?\b//;
76   if(SUSystem "cp $srcdir/$_ /mnt/$s") {
77     print "--\n";
78     system "du $srcdir/$_";
79     system "df -Pk /mnt | grep -v Filesystem";
80     print "--\n";
81     die "$Script: could not add $_";
82   }
83 }
84
85 if($disk == 1 && $bootsplash) {
86   SUSystem "cp ${BasePath}tmp/base/$ConfigData{splash_theme}/floppy/*.spl /mnt"
87     and die "$Script: could not add boot splash";
88 }
89
90 for (@modimages_l) {
91   SUSystem "sh -c 'cat ${gen}config.$_ >>/mnt/module.config'";
92   system "sh -c 'cat ${gen}list.$_ >>$image.txt'";
93 }
94
95 $i3 = $i2*10;
96 SUSystem "touch -d $i1:$i3 /mnt/*";
97
98 print "contents of $image:\n";
99 system "ls -lU /mnt";
100
101 SUSystem "umount /mnt" and
102   die "$Script: umount failed";
103
104 Print2File $MToolsCfg, "drive r: file=\"$image\"\n" or die "$Script: oops!";
105 @f = `mdir r:`;
106 unlink $MToolsCfg;
107
108 for (@f) {
109   if(/^\s*([ 0-9]+?)\s+bytes\s+free\s*$/) {
110     $free = $1;
111     $free =~ s/\s+//g;
112     last;
113   }
114 }
115
116 die "$Script: oops, no space on modules disk???" unless defined $free;
117
118 print "$Script: prepared modules disk \"$image\"; $free bytes free\n";
119