- allow bootdisks to have the initrd on a module disk
[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 $label = "SUSE${i1}${i2}_MODS";
44
45 # create an empty image
46 ($blocks, $block_size) = MakeFATImage(
47   $image, $label, 1,
48   undef, undef, undef, undef, undef,
49   "\r\nI'm module disk $disk. I cannot boot. :-(\r\n"
50 );
51
52 die "$Script: failed to create DOS disk image \"$image\"\n" unless defined $blocks;
53
54 printf "$Script: image \"%s\", %u blocks a %u bytes (%u total)\n", $image, $blocks, $block_size, $blocks * $block_size;
55
56 # umount it first, just in case
57 SUSystem "umount /mnt 2>/dev/null";
58
59 # add the other files
60 SUSystem "mount -oloop -t vfat $image /mnt" and
61   die "$Script: mount failed";
62
63 SUSystem "cp ${DataPath}initrd/module.help /mnt/module.config";
64 unlink "$image.txt";
65 for (@modimages_i) {
66   SUSystem "cp  $srcdir/$_ /mnt" and die "$Script: could not add $_";
67 }
68
69 for (@modimages_l) {
70   SUSystem "sh -c 'cat ${gen}config.$_ >>/mnt/module.config'";
71   system "sh -c 'cat ${gen}list.$_ >>$image.txt'";
72 }
73
74 $i3 = $i2*10;
75 SUSystem "touch -d $i1:$i3 /mnt/*";
76
77 print "contents of $image:\n";
78 system "ls -lU /mnt";
79
80 SUSystem "umount /mnt" and
81   die "$Script: umount failed";
82
83 Print2File $MToolsCfg, "drive r: file=\"$image\"\n" or die "$Script: oops!";
84 @f = `mdir r:`;
85 unlink $MToolsCfg;
86
87 for (@f) {
88   if(/^\s*([ 0-9]+?)\s+bytes\s+free\s*$/) {
89     $free = $1;
90     $free =~ s/\s+//g;
91     last;
92   }
93 }
94
95 die "$Script: oops, no space on modules disk???" unless defined $free;
96
97 print "$Script: prepared modules disk \"$image\"; $free bytes free\n";
98