- don't mess with mtab (bnc #668149)
[opensuse:installation-images.git] / README
1 1. Overview
2 ===========
3
4 To build a new image, you have to:
5
6  - be root
7  - put the installation-images dir on a *local* file system (non-NFS)
8  - on ia32 systems: linuxrc & syslinux installed
9
10 Then you can do:
11
12   make initrd
13     - build an initial ramdisk
14
15   initrd=small make initrd
16     - build a 'small' test initrd, suitable for 1.44MB boot images (for ia32)
17     - *** This is not suitable for release on our CDs! ***
18
19   make boot
20     - build an boot image (for ia32)
21
22   make root
23     - build a root image
24
25   demo=live make demo
26   demo=eval make demo
27     - build a root image for a Live/LiveEval CD
28
29   make boot
30     - build a (2.88MB) boot image (for ia32)
31
32   demo=live make boot
33   demo=eval make boot
34     - build a (2.88MB) Live/LiveEval boot image (for ia32)
35     - add 'boot=small initrd=small' to get a 1.44MB *test* image
36
37 The images are stored in the image directory, the contents of the
38 images (except for the boot image) in the tmp directory.
39
40 There is some special magic built into the scripts that make sure that the
41 initrd fits on the boot disk by removing/adding some of the modules. See the
42 description of the *.file_list format for details.
43
44 You can select the SuSE release to build for, e.g:
45
46   suserelease=6.4 make initrd
47
48 but note:
49   - This is ignored in an autobuild environment (for obvious reasons).
50   - You cannot sensibly test for 'suserelease' in the various *.file_list files
51     using the 'ifenv' construct.
52     Use 'suse_major_release', 'suse_minor_release' or 'suse_release' instead.
53
54
55 2. How to make boot disks
56 =========================
57
58 The various boot disks differ only slightly from the installation-images stuff
59 (different kernel, module lists and syslinux.cfg file) and are derived from
60 the installation-images directory using the bin/ci_boot* scripts.
61
62 o 'boot' (*the* boot image (2.88MB, 1st CD, ia32 only)
63
64   Whithin the installation-images directory, do a
65
66     make boot
67
68 o 'yast2' boot disk (== boot image for 2nd CD, ia32 only)
69
70   Running 'bin/ci_bootdis2 test' creates the necessary files in a temporary
71   directory. Go there and run:
72
73     boot=small make boot
74
75 o 'eide' boot disk (for special eide chipsets, ia32 only)
76
77   Running 'bin/ci_bootdise test' creates the necessary files in a temporary
78   directory. Go there and run:
79
80     boot=small make boot
81
82 o 'laptop' boot disk (for laptops, ia32 only)
83
84   Running 'bin/ci_bootdisl test' creates the necessary files in a temporary
85   directory. Go there and run:
86
87     boot=small make boot
88
89 o 'bootdisk' boot disk (the fallback *floppy*, ia32 only)
90
91   Running 'bin/ci_bootdisk test' creates the necessary files in a temporary
92   directory. Go there and run:
93
94     initrd=initrd boot=small make boot
95
96 o 'modules' disk (ia32 only)
97
98   Running 'bin/ci_bootdisk test' creates the necessary files in a temporary
99   directory. Go there and run:
100
101     make modules
102
103
104 3. Format of *.file_list files
105 ==============================
106
107 o Lines starting with '#' are comments, empty lines are ignored.
108
109     example:
110
111     # some comment
112
113 o You can include other files:
114
115     include <file>
116
117     <file> is relative to the data/*/ tree.
118
119 o   if/elsif/else/endif
120
121   - if <expression>
122
123     <expression> is more or less a valid perl expression except that
124     variables don't have a starting '$' and are implicitly environment
125     variables. The only exceptions to this are 'abuild' and 'arch'.
126
127     example:
128
129     if arch eq 'ppc' && (suse_release != 7.1 || lang eq 'fr')
130     # ...
131     elsif abuild && arch eq 'sparc'
132     # ...
133     else
134     # ...
135     endif 
136
137     # note that 'suse_release' is actually $ENV{'suse_release'}; likewise
138     # 'lang' etc. But 'abuild' and 'arch' are *not* $ENV{...}!
139
140 o <package_name>: [script1,script2]
141
142   Unpack the selected package into a temporary directory. You can optionally
143   give the name of rpm-scripts to extract, too. These can be run later
144   with the 'e' command (see below).
145
146   <package_name> may be empty, which matters only for disk usage accounting.
147   Files are still taken from the last non-empty <package_name>.
148
149   <package_name> can contain '*'s. In that case the latest package version
150   is used. If <package_name> ends in '~' the last but one version is used.
151
152   examples:
153   
154     k_delft:
155     aaa_base: prein,postin
156
157 o <action> <arg1> <arg2> ...
158
159   Do the specified action. <action> is one of these:
160
161   - add the file/directory tree to the image:
162
163       <args>
164     ^ there's a space!
165
166   - add a file/directory with a different name
167
168     m <old_name> <new_name>
169
170   - same as 'm', but link files
171
172     L <old_name> <new_name>
173
174   - same as 'm', but follows symlinks
175
176     a <old_name> <new_name>
177
178   - add optional files (e.g. some modules in initrd)
179
180     M <old_name> <new_name>
181
182   - add and gunzip files
183
184     g <src> <dst>
185
186   - remove a file/directory tree
187
188     r <args>
189
190   - create directories:
191
192     d <args>
193
194   - create a namped pipe:
195
196     n <name>
197
198   - touch a file
199
200     t <args>
201
202   - strip
203
204     S <args>
205
206   - hard link (<args> as for the ln command)
207
208     l <args>
209
210   - symlink
211
212     s <args>
213
214   - apply a patch from the data/*/ tree
215     (The patch *must not* contain absolute path names!)
216
217     p <patch>
218
219   - chown/chmod files
220
221     c <perm> <owner> <group> <args>
222
223   - make block device
224
225     b <major> <minor> <name>
226
227   - make char device
228
229     C <major> <minor> <name>
230
231   - add some extra files (That is, add files not from packages but from
232     the data/*/ directory.)
233
234     x <src> <dst>
235
236   - append <src> to <dst>; <src> is from the data/*/ directory.
237
238     A <src> <dst>
239
240   - execute a program/rpm-script
241     <program/script> is run from within the 'base' environment. $PWD will
242     be at the root of the filesystem which is currently built
243
244     e <program> <arg1> <arg2> ...
245     e <script>
246
247   - execute a program/rpm-script (with chroot)
248     <program/script> is run within a chroot env. <script> must be one of the
249     scripts given after the package name
250
251     E <program> <arg1> <arg2> ...
252     E <script>
253
254   - apply a perl regexp in a sed-like fashion to a file, <regexp> may contain
255     white space but not <file>
256
257     R <regexp> <file>
258
259     Note: if the this is a multi line regexp (ends with /s) it is applied to
260     the whole file. Else the regexp is applied to each line.
261
262   - search for a file <name> below <dir> and copy it to <dst>
263     (<dst> may be omitted)
264
265     f <dir> <name> <dst>
266
267   - search for a file <name> (in the local system!) below <dir> and copy it
268     to <dst> (<dst> may be omitted)
269
270     F <dir> <name> <dst>
271
272   - add files from the local system (This should be used only for
273     testing!)
274
275     X <src> <dst>
276