This commit was manufactured by cvs2svn to create tag
[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 $disk = 1;
31 $disk = $ENV{modules} + 0 if exists $ENV{modules};
32
33 open F, $mdisk_i;
34 while(<F>) { @modimages_i = split ' ', $1 if /^$disk:\s*(.+?)\s*$/ }
35 close F;
36
37 open F, $mdisk_l;
38 while(<F>) { @modimages_l = split ' ', $1 if /^$disk:\s*(.+?)\s*$/ }
39 close F;
40
41 ($i1, $i2) = split /\./, $ConfigData{suse_release};      
42
43 if($ConfigData{product_name} eq "UnitedLinux") {
44   $label = "UNITEDLINUX";
45 }
46 else {
47   $label = "SUSE${i1}${i2}_MODS";
48 }
49
50 # create an empty image
51 ($blocks, $block_size) = MakeFATImage(
52   $image, $label, 1,
53   undef, undef, undef, undef, undef,
54   "\r\nI'm $ConfigData{product_name} module disk $disk. I cannot boot. :-(\r\n"
55 );
56
57 die "$Script: failed to create DOS disk image \"$image\"\n" unless defined $blocks;
58
59 printf "$Script: image \"%s\", %u blocks a %u bytes (%u total)\n", $image, $blocks, $block_size, $blocks * $block_size;
60
61 # umount it first, just in case
62 SUSystem "umount /mnt 2>/dev/null";
63
64 # add the other files
65 SUSystem "mount -oloop -t vfat $image /mnt" and
66   die "$Script: mount failed";
67
68 SUSystem "cp ${DataPath}initrd/module.help /mnt/module.config";
69 unlink "$image.txt";
70 for (@modimages_i) {
71   $s = $_;
72   $s =~ s/\@[^@]+?\b//;
73   if(SUSystem "cp  $srcdir/$_ /mnt/$s") {
74     print "--\n";
75     system "du $srcdir/$_";
76     system "df -Pk /mnt | grep -v Filesystem";
77     print "--\n";
78     die "$Script: could not add $_";
79   }
80 }
81
82 for (@modimages_l) {
83   SUSystem "sh -c 'cat ${gen}config.$_ >>/mnt/module.config'";
84   system "sh -c 'cat ${gen}list.$_ >>$image.txt'";
85 }
86
87 if($disk == 1 && $ENV{hp1}) {
88   system "sh -c 'cat ${DataPath}initrd/module.list.hp1 >>$image.txt'";
89 }
90
91 $i3 = $i2*10;
92 SUSystem "touch -d $i1:$i3 /mnt/*";
93
94 print "contents of $image:\n";
95 system "ls -lU /mnt";
96
97 SUSystem "umount /mnt" and
98   die "$Script: umount failed";
99
100 Print2File $MToolsCfg, "drive r: file=\"$image\"\n" or die "$Script: oops!";
101 @f = `mdir r:`;
102 unlink $MToolsCfg;
103
104 for (@f) {
105   if(/^\s*([ 0-9]+?)\s+bytes\s+free\s*$/) {
106     $free = $1;
107     $free =~ s/\s+//g;
108     last;
109   }
110 }
111
112 die "$Script: oops, no space on modules disk???" unless defined $free;
113
114 print "$Script: prepared modules disk \"$image\"; $free bytes free\n";
115