- added btrfsprogs
[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   examples:
150   
151     k_delft:
152     aaa_base: prein,postin
153
154 o <action> <arg1> <arg2> ...
155
156   Do the specified action. <action> is one of these:
157
158   - add the file/directory tree to the image:
159
160       <args>
161     ^ there's a space!
162
163   - add a file/directory with a different name
164
165     m <old_name> <new_name>
166
167   - same as 'm', but link files
168
169     L <old_name> <new_name>
170
171   - same as 'm', but follows symlinks
172
173     a <old_name> <new_name>
174
175   - add optional files (e.g. some modules in initrd)
176
177     M <old_name> <new_name>
178
179   - add and gunzip files
180
181     g <src> <dst>
182
183   - remove a file/directory tree
184
185     r <args>
186
187   - create directories:
188
189     d <args>
190
191   - create a namped pipe:
192
193     n <name>
194
195   - touch a file
196
197     t <args>
198
199   - strip
200
201     S <args>
202
203   - hard link (<args> as for the ln command)
204
205     l <args>
206
207   - symlink
208
209     s <args>
210
211   - apply a patch from the data/*/ tree
212     (The patch *must not* contain absolute path names!)
213
214     p <patch>
215
216   - chown/chmod files
217
218     c <perm> <owner> <group> <args>
219
220   - make block device
221
222     b <major> <minor> <name>
223
224   - make char device
225
226     C <major> <minor> <name>
227
228   - add some extra files (That is, add files not from packages but from
229     the data/*/ directory.)
230
231     x <src> <dst>
232
233   - append <src> to <dst>; <src> is from the data/*/ directory.
234
235     A <src> <dst>
236
237   - execute a program/rpm-script
238     <program/script> is run from within the 'base' environment. $PWD will
239     be at the root of the filesystem which is currently built
240
241     e <program> <arg1> <arg2> ...
242     e <script>
243
244   - execute a program/rpm-script (with chroot)
245     <program/script> is run within a chroot env. <script> must be one of the
246     scripts given after the package name
247
248     E <program> <arg1> <arg2> ...
249     E <script>
250
251   - apply a perl regexp in a sed-like fashion to a file, <regexp> may contain
252     white space but not <file>
253
254     R <regexp> <file>
255
256     Note: if the this is a multi line regexp (ends with /s) it is applied to
257     the whole file. Else the regexp is applied to each line.
258
259   - search for a file <name> below <dir> and copy it to <dst>
260     (<dst> may be omitted)
261
262     f <dir> <name> <dst>
263
264   - search for a file <name> (in the local system!) below <dir> and copy it
265     to <dst> (<dst> may be omitted)
266
267     F <dir> <name> <dst>
268
269   - add files from the local system (This should be used only for
270     testing!)
271
272     X <src> <dst>
273