Changes

Jump to navigation Jump to search
12,864 bytes added ,  22:08, 1 May 2007
This HOWTO describes how to get SME 7.x working with a custom kernel.
Line 1: Line 1:  
==Introduction==
 
==Introduction==
   −
This HowTo describes how to get SME 7.x working properly on a Jetway J7F4 Mini-ITX motherboard. These motherboards are an extremely attractive option for builing an energy-efficient server. They have two Realtek RTL8110SC Gigabit LAN adapters on board, and are powered by a VIA C7 (Ester) processor at 1.2 Ghz (with passive cooling), or at 1.5 or 2.0 Ghz with active cooling. Unfortunately however, this hardware is not very well supported by the 2.6.9 kernel that is supplied with SME and CentOS 4. This document can also be used as an example of how to get SME running on any hardware that requires a modified or newer linux kernel.
+
This HowTo describes how to get SME 7.x working properly on a [http://www.mini-itx.com/store/?c=34#j7f4 Jetway J7F4 Mini-ITX motherboard]. These motherboards are an extremely attractive option for builing a small, energy-efficient yet relatively fast server. The J7F4 series have two Realtek RTL8110SC Gigabit LAN adapters on board, and are powered by a VIA C7 (Ester) processor at 1.2 Ghz (with passive cooling), or at 1.5 or 2.0 Ghz with active cooling. In addition, it includes hardware AES and SHA encryption/decryption, hardware MPEG2/4 decoding and a number of other potentially useful features. Unfortunately however, most of its hardware is not very well supported by the 2.6.9 kernel that is supplied with SME and CentOS 4. This document describes the compilation and installation of a custom kernel. It can also be used as an example of how to get SME running on or with any hardware that requires a modified or newer linux kernel.
 +
 
 +
==Procedure==
 +
 
 +
===Before you start===
 +
 
 +
It is always a good idea to make a backup, in case things get messed up. Furthermore, as the standard SME 7.x kernel doesn't support the on-board RTL8110SC network controllers, you might want to perform at least steps 1 through 4 on a different machine, and switch the harddisk to the Jetway machine after the new kernel is installed. If you follow the instructions below, the new kernel should run on most machines with a 686-compatible CPU (i.e. a Pentium II or higher).
 +
 
 +
Alternatively you could install a temporary network-card in the PCI slot on the Jetway-board, or [http://forums.contribs.org/index.php?topic=35435.0 temporarily install the r1000 kernel module from Realtek]. The r1000 driver works with all RTL8169 and RTL8110 gigabit ethernet controllers. However, many people have found it to be buggy and unstable, so as soon as you have installed the new kernel you should switch to the r8169 kernel module. Recent versions of this driver have support for the RTL8110.
 +
 
 +
===Step 1: Installing a compiler and build tools===
 +
 
 +
Log in to the shell as root, and install the packages needed for compiling a kernel:
 +
 
 +
yum install kernel-devel gcc gcc-c++ ncurses-devel
 +
 
 +
===Step 2: Installing the kernel sources===
 +
 
 +
You can download the source tree for the newest Linux kernel from http://www.kernel.org. You should check to see which versions are available. If you need stability, you're best off using a 'stable' version. If you need maximum support for new hardware, you can try a 'testing' version, with or without the latest snapshot patches. For example, I used the latest 'testing' kernel, at the time of writing this was 2.6.21-rc5:
 +
 
 +
cd /usr/src/
 +
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/linux-2.6.21-rc5.tar.bz2
 +
 
 +
Unpack the source tree and make /usr/src/linux a symbolic link to the source directory:
 +
 
 +
tar xvjf linux-2.6.21-rc5.tar.bz2
 +
ln -s /usr/src/linux-2.6.21-rc5 /usr/src/linux
 +
 
 +
I also downloaded and applied the latest snapshot patches (this is of course optional, see the [[#References|references section]] for more information):
 +
 
 +
wget http://www.kernel.org/pub/linux/kernel/v2.6/snapshots/patch-2.6.21-rc5-git1.bz2
 +
cd /usr/src/linux/
 +
bzip2 -dc /usr/src/patch-2.6.21-rc5-git1.bz2 | patch -p1
 +
 
 +
Finally, I applied a patch to add kernel support for the VIA C7 processor (this is also optional, it should work just fine without this patch):
 +
 
 +
wget -O /usr/src/via-c7.patch http://lkml.org/lkml/diff/2007/2/12/428/1
 +
cd /usr/src/linux/
 +
patch -p1 </usr/src/via-c7.patch
 +
 
 +
===Step 3: Configuring the kernel===
 +
 
 +
Next, we need to configure our new kernel. We need to make sure that all the drivers we need are included in the kernel or are built as modules. It is always a good idea to use the current kernel configuration as a starting point:
 +
 
 +
cd /usr/src/linux
 +
make clean && make mrproper
 +
cp /boot/config-`uname -r` ./smeconfig
 +
 
 +
Run the configuration tool:
 +
 
 +
make menuconfig
 +
 
 +
Select "Load an Alternate Configuration File" and load the file "smeconfig". If you don't want to bother with the manual configuration below, you may also load the ready-made configuration file attached to this document and [[#Step 4: Compiling and installing the kernel|skip to the next step]].
 +
 
 +
We should give our custom kernel a name, to distinguish it from a generic kernel. You may choose any suffix you want, in this example I will use "-custom-via". Select the following in the menu:
 +
 
 +
General setup  --->
 +
        () Local version - append to kernel release
 +
 
 +
Fill in "-custom-via".
 +
 
 +
Next comes a tricky part, you need to select the appropriate drivers.
 +
You will need at least these options to make MASQ routing and VPN work:
 +
 
 +
Device Drivers  --->
 +
        Network device support  --->
 +
                <M>  PPP (point-to-point protocol) support
 +
                <M>    PPP MPPE compression (encryption) (EXPERIMENTAL)
 +
 
 +
Networking  --->
 +
  Networking options  --->
 +
 +
  [*] Network packet filtering framework (Netfilter)  --->
 +
 +
  --- Network packet filtering framework (Netfilter)
 +
        [ ]  Network packet filtering debugging
 +
        [*]  Bridged IP/ARP packets filtering
 +
 +
                Core Netfilter Configuration  --->
 +
                <M> Netfilter connection tracking support
 +
                        Netfilter connection tracking support (Layer 3 Dependent Co.
 +
                <M> Netfilter Xtables support (required for ip_tables)
 +
                [...]
 +
 
 +
I also selected all the netfilter targets as modules.
 +
 
 +
 
 +
                IP: Netfilter Configuration  --->
 +
                [...]
 +
                <M> FTP protocol support
 +
                <M> PPTP protocol support
 +
                <M> IP tables support (required for filtering/masq/NAT)
 +
                <M>  IP range match support
 +
                <M>  TOS match support
 +
                <M>  recent match support
 +
                <M>  ECN match support
 +
                <M>  TTL match support
 +
                <M>  Owner match support
 +
                <M>  address type match support
 +
                <M>  Packet filtering
 +
                <M>    REJECT target support
 +
                <M>  LOG target support
 +
                <M>  ULOG target support
 +
                <M>  Full NAT
 +
                <M> MASQUERADE target support
 +
                <M> REDIRECT target support
 +
                <M> NETMAP target support
 +
                <M> SAME target support
 +
                <M> Packet mangling
 +
                <M>  TOS target support
 +
                <M>  ECN target support
 +
                <M> raw table support (required for NOTRACK/TRACE)
 +
                <M> ARP tables support
 +
                <M>  ARP packet filtering
 +
                <M>  ARP payload mangling
 +
 
 +
I also selected these, just in case:
 +
 
 +
                <M> IRC protocol support
 +
                <M> TFTP protocol support
 +
                <M> Amanda backup protocol support
 +
                <M> H.323 protocol support (EXPERIMENTAL)
 +
                <M> SIP protocol support (EXPERIMENTAL)
 +
 
 +
 
 +
Finally you should make sure that all necessary modules are built for
 +
the hardware that you have. The default settings are quite reasonable,
 +
but for the Jetway board, I would select at least the following additional options (when available):
 +
 
 +
Processor type and features  --->
 +
    Processor family (VIA C7)  --->
 +
        (X) VIA C7
 +
 
 +
Power management options (ACPI, APM)  --->
 +
        [*] Power Management support
 +
        ACPI (Advanced Configuration and Power Interface) Support --->
 +
                [*] ACPI Support
 +
                [*]  Procfs interface (deprecated)
 +
                <M>  AC Adapter
 +
                <M>  Button
 +
                <*>  Fan
 +
                <*>  Processor
 +
                <*>    Thermal Zone
 +
        CPU Frequency scaling  --->
 +
                [*] CPU Frequency scaling
 +
                <*>  CPU frequency translation statistics
 +
                Default CPUFreq governor (userspace)  --->
 +
                <*>  'performance' governor
 +
                <*>  'powersave' governor
 +
                ---  'userspace' governor for userspace frequency scaling
 +
                <*>  'ondemand' cpufreq policy governor
 +
                <*>  'conservative' cpufreq policy governor
 +
                ---  CPUFreq processor drivers
 +
                <*>  ACPI Processor P-States driver
 +
                <*>  VIA C7 Enhanced PowerSaver (EXPERIMENTAL)
 +
 
 +
Device Drivers  --->
 +
        ATA/ATAPI/MFM/RLL support  --->
 +
                <*>        VIA82CXXX chipset support
 +
        Network device support  --->
 +
                Ethernet (1000 Mbit)  --->
 +
                        <M> Realtek 8169 gigabit ethernet support
 +
        Character devices  --->
 +
                <M> Hardware Random Number Generator Core support
 +
                <M>  VIA HW Random Number Generator support
 +
                <*>  VIA chipset support
 +
                <M>  Via unichrome video cards
 +
        I2C support  --->
 +
                <M> I2C support
 +
                <M>  I2C device interface
 +
                I2C Hardware Bus support  --->
 +
                        <M> VIA VT82C596/82C686/82xx and CX700
 +
        Sound  --->
 +
                <M> Sound card support
 +
                Advanced Linux Sound Architecture  --->
 +
                        <M> Advanced Linux Sound Architecture
 +
                        <M>  Sequencer support
 +
                        <M>  OSS Mixer API
 +
                        <M>  OSS PCM (digital audio) API
 +
                        PCI devices  --->
 +
                                <M> VIA 82C686A/B, 8233/8235 AC97 Controller
 +
 
 +
Cryptographic options  --->
 +
        Hardware crypto devices  --->
 +
                <M> Support for VIA PadLock ACE
 +
                <M>  PadLock driver for AES algorithm
 +
                <M>  PadLock driver for SHA1 and SHA256 algorithms
 +
 
 +
When you're done, exit and save your configuration.
 +
 
 +
===Step 4: Compiling and installing the kernel===
 +
 
 +
When everything is configured, you can can build the kernel. In order to facilitate an easy installation and maintenace, we will build the new kernel as an RPM package:
 +
 
 +
make rpm
 +
 
 +
This will take a while. When the build is done, the kernel package will be located in /usr/src/redhat/RPMS/i386/. You can install it using rpm, e.g.:
 +
 
 +
cd /usr/src/redhat/RPMS/i386/
 +
rpm -ivh --nodeps kernel-2.6.21rc5git1customvia.i386.rpm
 +
 
 +
Add the switch --force if you want to replace a previously installed
 +
version.
 +
 
 +
The new kernel is now almost ready for booting. You need to create an initrd ramdisk for the new kernel:
 +
 
 +
/sbin/mkinitrd /boot/initrd-2.6.21-rc5-git1-custom-via.img 2.6.21-rc5-git1-custom-via
 +
 
 +
And you need to add the new kernel to the configuration file of the GRUB bootloader:
 +
 
 +
mcedit /boot/grub/grub.conf
 +
 
 +
My kernel is at /boot/vmlinuz-2.6.21-rc5-git1-custom-via and my initrd image is /boot/initrd-2.6.21-rc5-git1-custom-via.img.
 +
So I add the following kernel definition to grub.conf, as the first kernel in the list:
 +
 
 +
title SME Server (2.6.21-rc5-git1-custom-via)
 +
        root (hd0,0)
 +
        kernel /vmlinuz-2.6.21-rc5-git1-custom-via ro root=/dev/hda6
 +
        initrd /initrd-2.6.21-rc5-git1-custom-via.img
 +
 
 +
Before rebooting, you should tell SME that wou want to use the r8169 driver for the on-board ethernet controllers:
 +
 
 +
/sbin/e-smith/config set EthernetDriver1 r8169
 +
/sbin/e-smith/config set EthernetDriver2 r8169
 +
 
 +
 
 +
===Step 5: Booting the new kernel===
 +
 
 +
Now you can reboot the server:
 +
 
 +
/sbin/e-smith/signal-event post-upgrade
 +
/sbin/e-smith/signal-event reboot
 +
 
 +
Don't forget to select the new kernel in the GRUB boot menu! You can enter the kernel selection menu by hitting a key when in the GRUB splash-screen. Select the new kernel using the cursor keys, and keep your fingers crossed... ;-) GRUB will automagically remember the last-used kernel next time you boot.
 +
 
 +
If all goes well, your server should come up after a minute or so. You should check if everything still works, especially networking. If not, you have probably forgotten one or more essential modules, and you should go back to step 3.
 +
 
 +
===Step 6: Final configuration and cleaning up===
 +
 
 +
If all has gone well, you should now be up and running on your brand new kernel. All that remains is to make sure that any remaining 'extra features' are loaded into the kernel. If you are running on a VIA C7 based board such as the Jetway J7F4, try the following to enable hardware crypting support:
 +
 
 +
/sbin/modprobe via-rng
 +
/sbin/modprobe padlock
 +
 
 +
And in the unlikely event that you want to run an Xserver with hardware accellerated 2D graphics and MPEG-decoding:
 +
 
 +
/sbin/modprobe via
 +
 
 +
You should also enable on-demand frequency scaling, so the processor will switch from 400 Mhz to 1200 Mhz when needed:
 +
 
 +
echo ondemand >/sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
 +
 
 +
Of course, you don't want to type all of this every time you reboot the server. So you can create a script in /etc/e-smith/events/local that will configure things at boot-time:
 +
 
 +
[...]
 +
http://forums.contribs.org/index.php?topic=36665.0
 +
 
 +
Remove compiler and development tools (optional):
 +
yum -y remove libstdc++-devel cpp glibc-kernheaders glibc-headers
 +
glibc-devel gcc gcc-c++ kernel-devel ncurses-devel
 +
 
 +
You can delete the remaining packages and sources in /usr/src,
 +
if you wish.
 +
 
 +
 
 +
==Acknowledgements==
 +
 
 +
This HOWTO is based on forum postings and documents by Harro, Charlie Brady, Falko Timme, Simon Arlott and many others.
 +
 
 +
 
 +
==References==
 +
 
 +
http://forums.contribs.org/index.php?topic=35435.0
 +
http://www.howtoforge.com/kernel_compilation_centos
 +
http://lkml.org/lkml/2007/2/12/428
 +
http://acpi.sourceforge.net/documentation/processor.html
55

edits

Navigation menu