The experimental kernel provided by the Cobalt engineering team has
not been compiled with support for the ext3 journalling
filesystem. While this feature is the default standard for Red Hat
Linux 7.2 users, and has generally been found to be a very robust
feature for that distribution, it is still not tested enough on the
Qube 3 architecture for the Sun folks to have enabled that filesystem
in their kernel.
ext2: To use the experimental Cobalt kernel as-is, which
supports ext2 but not ext3, then the steps outlined in the remainder
of this section are not required. Proceed to Installing Red Hat Linux, Part 1:
Stock Distribution.
ext3: To use the experimental Cobalt kernel, rebuilt to
support ext3 journalling, continue this section.
As mentioned previously, the main guide for the RPM build process is
the spec file deposited in the sandbox SPECS/ area. Among
other things, the spec file scripts the unpacking of any source files
and patch files.
The main task in producing a new binary RPM from its source RPM,
assuming that the source code is mostly available and ready to
compile, is to edit the .spec file appropriately. This
document will make a series of independent changes to the
Cobalt-supplied .spec file.
Make the RPM buildable in a general standard
sandbox, rather than relying on the internal Sun/Cobalt build
directory assumptions. The diff-style - and +
notation in the box below indicates that the first line should be
found and removed, and the second line should be added in its place.
[me@desk:~/cobalt/rpm]$ vi SPECS/kernel-2.4.16C2_III.spec
|
- BuildRoot: /home/tmp/kernel
+ BuildRoot: %{_tmppath}/%{name}-%{version}-root
|
|
Add any expected patch files to the manifest of
sources in the spec file. Again, the diff-style notation below
indicates to find the first line, leave it alone, then add the second
line following it. In the previous section, the single patch name chosen
was ext3fs.
[me@desk:~/cobalt/rpm]$ vi SPECS/kernel-2.4.16C2_III.spec
|
Source: cobalt-linux-%{version}.tar.gz
+ Patch0: cobalt-linux-2.4.16C2_III-ext3fs.patch
|
|
(If additional patches are included, they should be led with
consecutively numbered keywords Patch1, Patch2, and
so on.)
Specify which patches the RPM building process
should apply, and how, in the spec file's %setup section.
[me@desk:~/cobalt/rpm]$ vi SPECS/kernel-2.4.16C2_III.spec
|
%setup -c -q
+ cd linux-%{version}
+ %patch0 -p0 -b .ext3fs
+ cd ..
|
|
(If additional patches are included, they should be led with
matching numbered command keywords %patch1,
%patch2, and so on. The -p0 indicates the diff is relative
to the root of the tarball contents; -p1 would be useful for diffs
made one level higher, just outside the tarball's directory.)
Remove all chown commands in the spec
file's %install section so that non-root users can build the
RPM file. An RPM should not include commands which a non-root user
cannot perform, such as setting ownership of files to the
root account.
[me@desk:~/cobalt/rpm]$ vi SPECS/kernel-2.4.16C2_III.spec
|
- chown -R root.root linux-%{version}
[...]
- chown -R root.root[root cobalt]#RPM_BUILD_ROOT/usr/include/asm
[...]
- chown -R root.root[root cobalt]#RPM_BUILD_ROOT/usr/include/linux
|
|
Specify default attributes instead, in the spec
file's %files section. This causes RPM to perform the
equivalent chown and chmod commands at the time the
three resulting binary packages (kernel, kernel-source, and
kernel-headers) are installed, rather than during the
rebuilding of the source code rpm file.
[me@desk:~/cobalt/rpm]$ vi SPECS/kernel-2.4.16C2_III.spec
|
%files
+ %defattr(0644, root, root)
[...]
%files source
+ %defattr(0644, root, root)
[...]
%files headers
+ %defattr(0644, root, root)
|
|
Assign root ownership to the
/dev/lcd device which is created in the %post
section. Since Red Hat Linux doesn't create a group called
httpd, the Cobalt default settings are meaningless. The
%post section is executed when the resulting binary package
is installed, creating the device for the Qube's LCD screen.
[me@desk:~/cobalt/rpm]$ vi SPECS/kernel-2.4.16C2_III.spec
|
- chown root.httpd /dev/lcd
+ chown root.root /dev/lcd
|
|
Lastly, increment the release number at the top.
Differentiating your original files from the ones you produce is very
valuable. If the old rpms were of version
2.4.16C2_III-1, then the output versions will be
marked with a -2 in their names instead.
[me@desk:~/cobalt/rpm]$ vi SPECS/kernel-2.4.16C2_III.spec
|
- Release: 1
+ Release: 2
|
|
Now everything should be ready:
- Any and all source files are packed in the SOURCES/ area,
- Any and all created patch files placed in the SOURCES/ area,
- Any and all release-specific changes are made in the SPEC/*.spec file.
Build the source RPM to regenerate the three binary
rpm files. This also repackages a new renumbered source rpm file for
your convenience. This will take many minutes, or even an hour or
more, depending on the desktop machine's available hardware.
[me@desk:~/cobalt/rpm]$ rpm -ba SPECS/kernel-2.4.16C2_III.spec
[...]
Wrote: /home/me/cobalt/rpm/SRPMS/kernel-2.4.16C2_III-2.src.rpm
Wrote: /home/me/cobalt/rpm/RPMS/i386/kernel-2.4.16C2_III-2.i386.rpm
Wrote: /home/me/cobalt/rpm/RPMS/i386/kernel-headers-2.4.16C2_III-2.i386.rpm
Wrote: /home/me/cobalt/rpm/RPMS/i386/kernel-source-2.4.16C2_III-2.i386.rpm
[...]
+ exit 0
|
If you're new to RPM, you may want to watch the whole process,
scanning for any obvious error conditions. However, the key things
to watch are the lines shown above: the output of the final
.rpm files and the + exit 0 result for the whole
process. (RPM can still create those files erroneously after some
types of minor errors occur, but none of those cases are expected in
this procedure.)