- add package list to inst-sys
[opensuse:installation-images.git] / bin / mk_root
1 #! /usr/bin/perl
2
3 # Create a root image that can be used on a bootable CD.
4 #
5 # Source files and the file list are taken from data/root; the final
6 # image is stored in images/root.
7 #
8 # Usage:        mk_root
9
10 =head1 mk_root
11
12 C<mk_root> creates a C<root> image (not compressed).
13 This image is intended to go onto a bootable CD.
14
15 The files to go into the root image are taken from
16 C<data/root/root.file_list>.
17
18 The final image is stored as C<images/root>.
19
20 =cut
21
22
23 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
24 # the usual fuss...
25
26 BEGIN { unshift @INC, ( $0 =~ /(.*?)((?<![^\/])bin\/)?[^\/]+$/ )[0] . "lib" }
27 use ReadConfig;
28 use MakeExt2Image;
29 use AddFiles;
30 use Conv2Image;
31
32 die "usage: $Script\n" if @ARGV;
33
34
35 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
36 # some config data
37
38 $srcdir = "${DataPath}root";
39 $tmpdir = "${BasePath}tmp/root";
40 # $tmpinitrd = "${BasePath}tmp/initrd";
41 $image = "${ImagePath}root";
42
43 # leave that much space
44 $extra_size = 500;              # kbyte
45 $extra_inodes = 100;
46
47 # just make them large enough
48 $start_size = 150000;             # kbyte
49 $start_inodes = 5000;
50
51 # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
52 # now we really start...
53
54 $debug = exists($ENV{'debug'}) ?  $ENV{'debug'} : "";
55 $use_cramfs = exists($ENV{'use_cramfs'}) ? $ENV{'use_cramfs'} : 1;
56 $uncompressed_root = exists($ENV{'uncompressed_root'}) ? $ENV{'uncompressed_root'} : "";
57
58
59 if($ENV{'keeproot'} != 1) {
60   # clean up
61   if(-d($tmpdir)) {
62     SUSystem "rm -rf $tmpdir" and die "$Script: failed to remove old $tmpdir";
63   }
64
65   mkdir $tmpdir || die "$Script: failed to create $tmpdir";
66
67   AddFiles $tmpdir, "${srcdir}/root.file_list", $srcdir or
68     die "$Script: failed to setup root image";
69
70   if(-f "${BasePath}tmp/root.rpmlog") {
71     SUSystem "perl -pe 's/\\[(.*?)\\].*/\$1/' ${BasePath}tmp/root.rpmlog | sort >$tmpdir/.packages";
72   }
73
74 #  print "fix locale...\n";
75 #  SUSystem "fix_locale $tmpdir";
76   print "fix permissions of directories...\n";
77   SUSystem "fix_perms $tmpdir";
78   print "strip everything...\n";
79   SUSystem "strip_dir $tmpdir";
80
81   print "running ldconfig...";
82   SUSystem "ldconfig -r $tmpdir";
83   die "$Script: failed to run ldconfig" unless -f "$tmpdir/etc/ld.so.cache";
84
85   if($debug =~ /\bignore\b/ || $debug =~ /\bignorelibs\b/) {
86     system "check_libs $tmpdir" and
87       warn "$Script: error in shared lib config, please fix\n";
88   }
89   else {
90     system "check_libs $tmpdir" and
91       die "$Script: error in shared lib config, please fix\n";
92   }
93
94 #  if(!exists($ENV{'with_yast2'}) || $ENV{'with_yast2'} ne 'no') {
95 #    if($debug =~ /\bignore\b/) {
96 #      system "yast2-deps" and
97 #        warn "$Script: error in yast2 package list, please fix\n";
98 #    }
99 #    else {
100 #      system "yast2-deps" and
101 #        die "$Script: error in yast2 package list, please fix\n";
102 #    }
103 #  }
104
105 }
106
107 if($use_cramfs) {
108   Conv2Image $image, $tmpdir, 'cramfs';
109   die "$Script: $!" unless rename $image, "$image.cramfs";
110   $i = -s "$image.cramfs";
111   print "$Script: created \"$image.cramfs\" ($i bytes)\n";
112 }
113
114 if($uncompressed_root) {
115   Conv2Image $image, $tmpdir, 'ext2', $start_size, $start_inodes, $extra_size, $extra_inodes;
116 }
117