- adjust to package changes
[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     Also, you can use 'exists(PACKAGE)' to test for a specific package.
128
129     example:
130
131     if arch eq 'ppc' && (suse_release != 7.1 || lang eq 'fr')
132     # ...
133     elsif abuild && arch eq 'sparc'
134     # ...
135     else
136     # ...
137     endif 
138
139     # note that 'suse_release' is actually $ENV{'suse_release'}; likewise
140     # 'lang' etc. But 'abuild' and 'arch' are *not* $ENV{...}!
141
142 o <package_name>: [script1,script2]
143
144   Unpack the selected package into a temporary directory. You can optionally
145   give the name of rpm-scripts to extract, too. These can be run later
146   with the 'e' command (see below).
147
148   <package_name> may be empty, which matters only for disk usage accounting.
149   Files are still taken from the last non-empty <package_name>.
150
151   <package_name> can contain '*'s. In that case the latest package version
152   is used. If <package_name> ends in '~' the last but one version is used.
153
154   If <package_name> starts with a '?', the package is optional.
155
156   examples:
157   
158     k_delft:
159     aaa_base: prein,postin
160
161 o <action> <arg1> <arg2> ...
162
163   Do the specified action. <action> is one of these:
164
165   - add the file/directory tree to the image:
166
167       <args>
168     ^ there's a space!
169
170   - add a file/directory with a different name
171
172     m <old_name> <new_name>
173
174   - same as 'm', but link files
175
176     L <old_name> <new_name>
177
178   - same as 'm', but follows symlinks
179
180     a <old_name> <new_name>
181
182   - add optional files (e.g. some modules in initrd)
183
184     M <old_name> <new_name>
185
186   - add and gunzip files
187
188     g <src> <dst>
189
190   - remove a file/directory tree
191
192     r <args>
193
194   - create directories:
195
196     d <args>
197
198   - create a namped pipe:
199
200     n <name>
201
202   - touch a file
203
204     t <args>
205
206   - strip
207
208     S <args>
209
210   - hard link (<args> as for the ln command)
211
212     l <args>
213
214   - symlink
215
216     s <args>
217
218   - apply a patch from the data/*/ tree
219     (The patch *must not* contain absolute path names!)
220
221     p <patch>
222
223   - chown/chmod files
224
225     c <perm> <owner> <group> <args>
226
227   - make block device
228
229     b <major> <minor> <name>
230
231   - make char device
232
233     C <major> <minor> <name>
234
235   - add some extra files (That is, add files not from packages but from
236     the data/*/ directory.)
237
238     x <src> <dst>
239
240   - append <src> to <dst>; <src> is from the data/*/ directory.
241
242     A <src> <dst>
243
244   - execute a program/rpm-script
245     <program/script> is run from within the 'base' environment. $PWD will
246     be at the root of the filesystem which is currently built
247
248     e <program> <arg1> <arg2> ...
249     e <script>
250
251   - execute a program/rpm-script (with chroot)
252     <program/script> is run within a chroot env. <script> must be one of the
253     scripts given after the package name
254
255     E <program> <arg1> <arg2> ...
256     E <script>
257
258   - apply a perl regexp in a sed-like fashion to a file, <regexp> may contain
259     white space but not <file>
260
261     R <regexp> <file>
262
263     Note: if the this is a multi line regexp (ends with /s) it is applied to
264     the whole file. Else the regexp is applied to each line.
265
266   - search for a file <name> below <dir> and copy it to <dst>
267     (<dst> may be omitted)
268
269     f <dir> <name> <dst>
270
271   - search for a file <name> (in the local system!) below <dir> and copy it
272     to <dst> (<dst> may be omitted)
273
274     F <dir> <name> <dst>
275
276   - add files from the local system (This should be used only for
277     testing!)
278
279     X <src> <dst>
280