XEN Kernel EFW: Unterschied zwischen den Versionen

Aus Neobikers Wiki
Zur Navigation springen Zur Suche springen
 
(27 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 5: Zeile 5:
'''RPM'''
'''RPM'''


Die Endian Firewall ist wie RHEL RPM basiert. In einem ''chroot-jail'' kann die RPM-Entwicklungsumgebung auch unter Debian implementiert werden. Die kann man bei Bedarf auch unter Debian schaffen, z.B. durch mounten eines Images einer RPM-basierten Linux-Distribution, welche mittels ''chroot'' zur Entwicklung genutzt werden kann.
Die Endian Firewall ist wie RHEL RPM basiert. In einem ''chroot-jail'' kann die RPM-Entwicklungsumgebung auch unter Debian implementiert werden, z.B. durch mounten eines Images einer RPM-basierten Linux-Distribution, welche mittels ''chroot'' zum kompilieren genutzt werden kann.


'''Tip''': Bei [http://www.xensource.com/download/ XEN Source] bietet die Demo-CD die Möglichkeit '''CentOS''', '''Debian''' und '''SuSE''' (gleichzeitig) direkt von CD zu benutzen. Auf der CD findet man also fertige XEN-Umgebungen und Images für CentOS, SuSE und Debian. Die Images können auch mit ''chroot'' verwendet werden ...
'''Tip''': Bei [http://www.xensource.com/download/ XEN Source] bietet die Demo-CD die Möglichkeit '''CentOS''', '''Debian''' und '''SuSE''' (gleichzeitig) direkt von CD zu benutzen. Auf der CD findet man also fertige XEN-Umgebungen und Images für CentOS, SuSE und Debian. Die Images können auch mit ''chroot'' verwendet werden ...
Zeile 13: Zeile 13:
=== EFW Developer Umgebung ===
=== EFW Developer Umgebung ===


Die Entwicklungsumgebung für EFW habe ich (in etwa) wie folgt erstellt:
Die Entwicklungsumgebung für EFW 2.0 habe ich wie folgt erstellt:
----
-> hier [[Devel-EFW2.1.1|EFW2.1.1]]
----
<pre>
<pre>
mkdir -p /efw-dev/usr/src
mkdir -p /efw-dev/usr/src
Zeile 23: Zeile 26:
<pre>
<pre>
cd /efw-dev
cd /efw-dev
mkdir -p usr/src/endian var/lib/rpm dev etc
mkdir -p usr/src/endian var/lib/rpm dev etc proc sys
cp -a /dev/null /dev/zero /dev/urandom /dev/random dev
cp -a /dev/null /dev/zero /dev/urandom /dev/random dev
for f in etc/passwd etc/group etc/shadow; do grep root /$f > $f; done
for f in etc/passwd etc/group etc/shadow; do grep root /$f > $f; done
Zeile 32: Zeile 35:
cd /efw-dev/usr/src/EFW-COMMUNITY-2-devel-RPMS
cd /efw-dev/usr/src/EFW-COMMUNITY-2-devel-RPMS
rpm --initdb --root /efw-dev
rpm --initdb --root /efw-dev
rpm --root /efw-dev -Uvh *.rpm --nodeps
rpm --root /efw-dev -Uvh *.rpm --nodeps --force
 
chroot /efw-dev
</pre>
</pre>


Jetzt die Sourcen laden und (zumindest versuchen) den Kernel übersetzen:
Jetzt die Sourcen laden und den Kernel übersetzen:
<pre>
<pre>
cd /usr/src
cd /efw-dev/usr/src
wget http://mesh.dl.sourceforge.net/sourceforge/efw/EFW-COMMUNITY-2-devel-SRPMS.tar.gz
wget http://mesh.dl.sourceforge.net/sourceforge/efw/EFW-COMMUNITY-2-devel-SRPMS.tar.gz
tar xvzf EFW-COMMUNITY-2-devel-SRPMS.tar.gz
tar xvzf EFW-COMMUNITY-2-devel-SRPMS.tar.gz
mount -t proc none /efw-dev/proc
chroot /efw-dev
cd /usr/src/


cd EFW-COMMUNITY-2-devel-SRPMS
cd EFW-COMMUNITY-2-devel-SRPMS
Zeile 47: Zeile 52:


cd ..
cd ..
ln -s linux-2.6.9/scripts/kconfig/libkconfig.so /usr/lib
ln -s /usr/src/linux-2.6.9/scripts/kconfig/libkconfig.so /usr/lib


cd endian
cd endian
Zeile 56: Zeile 61:


=== Sourcen ===
=== Sourcen ===
<table>
<tr><td>[http://www.efw.it Endian Firewall]</td></tr>


<tr><td></td><td>[http://prdownloads.sourceforge.net/efw/EFW_COMMUNITY_2_RESPIN.iso?download EFW_COMMUNITY_2_RESPIN.iso]</td><td>Endian Firewall 2.0 Respin (Installationsimage für CD</td></tr>
{|
<tr><td></td><td>[http://prdownloads.sourceforge.net/efw/EFW-COMMUNITY-2-devel-RPMS.tar.gz?download EFW-COMMUNITY-2-devel-RPMS]</td><td>Developer RPMs für Build-Umgebung</td></tr>
|[http://www.efw.it Endian Firewall]
<tr><td></td><td>[http://prdownloads.sourceforge.net/efw/EFW-COMMUNITY-2-devel-SRPMS.tar.gz?download EFW-COMMUNITY-2-devel-SRPMS]</td><td>Endian Firewall 2 Sourcen (nicht Respin)</td></tr>
|-
 
|
<tr><td>[http://www.xensource.com XEN Source]</td></tr>
|[http://prdownloads.sourceforge.net/efw/EFW_COMMUNITY_2_RESPIN.iso?download EFW_COMMUNITY_2_RESPIN.iso]
<tr><td></td><td>[http://bits.xensource.com/oss-xen/release/3.0.3-0/kernel-rhel4x/SRPMS/kernel-2.6.9-42.0.2.EL.xs148.src.rpm kernel-2.6.9-42.0.2.EL.xs148.src.rpm]</td><td>XEN DomU Guest Kernel</td></tr>
|Endian Firewall 2 Respin (Installationsimage für CD)
<tr><td></td><td>[http://www.xensource.com/download/ XEN Downloads]</td><td>(Binäries, Sourcen, Demo CD)</td></tr>
|-
</table>
|
|[http://prdownloads.sourceforge.net/efw/EFW-COMMUNITY-2-devel-RPMS.tar.gz?download EFW-COMMUNITY-2-devel-RPMS]
|Developer RPMs für EFW Build-Umgebung
|-
|
|[http://prdownloads.sourceforge.net/efw/EFW-COMMUNITY-2-devel-SRPMS.tar.gz?download EFW-COMMUNITY-2-devel-SRPMS]
|Endian Firewall 2.0 Sourcen (nicht Respin)
|-
|[http://www.xensource.com XEN Source]
|-
|
|[http://bits.xensource.com/oss-xen/release/3.0.3-0/kernel-rhel4x/SRPMS/kernel-2.6.9-42.0.2.EL.xs148.src.rpm kernel-2.6.9-42.0.2.EL.xs148.src.rpm]
|XEN DomU Guest Kernel
|-
|
|[http://www.xensource.com/download/ XEN Downloads]
|(Binäries, Sourcen, Demo CD)
|}


== Kernel patchen ==
== Kernel patchen ==
Zeile 80: Zeile 100:
</pre>
</pre>


Das '''SPEC-File''' des RHEL-XEN-Kernels wird entsprechend erweitert, damit die '''EFW-Patches''' eingebunden werden. Die '''Sourcen''' der EFW-Patches müssen in das ''SOURCES'' Verzeichnis kopiert werden. Anschliessend kann man den Kernel neu bauen (patchen) und kompilieren:
Das '''SPEC-File''' des RHEL-XEN-Kernels wird entsprechend erweitert, damit die '''EFW-Patches''' eingebunden werden. Die '''Sourcen''' der EFW-Patches müssen in das ''SOURCES'' Verzeichnis kopiert werden(ist mit obigen bauen des kernels schon erfolgt). Anschliessend kann man den XEN-RHEL Kernel bauen (patchen) und kompilieren:
<pre>
<pre>
rpmbuild -bc SPECS/kernel-efw2-xenU.spec --target i686
# chroot Umgebung verlassen, da wget nicht vorhanden
exit
cd /efw-dev/usr/src
wget http://www.neobiker.de/wiki/dl/efw2-xen-src.tar.bz2
wget http://bits.xensource.com/oss-xen/release/3.0.3-0/kernel-rhel4x/SRPMS/kernel-2.6.9-42.0.2.EL.xs148.src.rpm
 
chroot /efw-dev
# RHEL-XEN Sourcen
cd /usr/src
rpm -Uvh kernel-2.6.9-42.0.2.EL.xs148.src.rpm
cd /usr/src/endian
tar xvjf ../efw2-xen-src.tar.bz2
 
rpmbuild -bc SPECS/kernel-2.6.9-efw2-xenU.spec --target i686
 
cd /lib/modules/
ln -s /var/tmp/kernel-2.6.9-efw2-root/lib/modules/2.6.9-efw2xenU
cd 2.6.9-efw2xenU
rm build
ln -s /usr/src/endian/BUILD/kernel-2.6.9/linux-2.6.9 build
</pre>
</pre>


Den gepatchten [http://www.neobiker.de/wiki/dl/efw2-kernel-i686-xen.tar.bz2 XEN-Kernel für EFW2] und ein [http://www.neobiker.de/wiki/dl/efw2-xen-src.tar.bz2 tarball] mit den geänderten Files (SOURCES u. SPECS) zum kompilieren stelle ich [http://www.neobiker.de/wiki/dl hier] zur Verfügung.
Den gepatchten [http://www.neobiker.de/ftp/pub/efw-xen/efw2-kernel-i686-xen.tar.bz2 XEN-Kernel für EFW2] / [http://www.neobiker.de/ftp/pub/efw-xen/efw2-kernel-i686-xen-pae.tar.bz2 XEN-PAE-SMP Kernel für EFW2] und ein [http://www.neobiker.de/ftp/pub/efw-xen/efw2-xen-src.tar.bz2 tarball] mit den geänderten Files (SOURCES u. SPECS, PAE=off) zum kompilieren stelle ich [http://www.neobiker.de/ftp/pub/efw-xen/ hier] zur Verfügung.
 
Die [http://www.neobiker.de/ftp/pub/efw-xen/efw21-glibc-xen.tar.bz2 XEN-isierte glibc für die EFW2.1] gibt's ebenfalls [http://www.neobiker.de/ftp/pub/efw-xen/ hier].
 
 
Die Kernel und Module findet man im Verzeichnis ''/var/tmp/kernel-2.6.9-efw2-root''.
Das Modul für ''IPSEC'' (openswan) muss zusätzlich kompiliert werden:
<pre>rpm -Uvh /usr/src/EFW-COMMUNITY-2.1-devel-SRPMS/firewall/openswan-2.4.7-8.endian10.src.rpm
 
cd /usr/src/endian
 
vi SPECS/openswan.spec      # Anpassungen, damit rpmbuild läuft
#-----
%{!?kernel:%define kernel %(rpm -q kernel-devel --qf '%{RPMTAG_VERSION}-%{RPMTAG_RELEASE}' | tail -1)}
%define kernel 2.6.9-efw2xenU
... oder: kernel 2.6.9-efw2xenUpae
... dependencies etc. entfernen
...
%{__make} \
  USERCOMPILE="-g %{optflags}" \
  KLIPSCOMPILE="-g %{optflags}" \
  KERNELSRC=/lib/modules/%{kversion}-%{krelease}/build \
  INC_USRLOCAL=%{_prefix} \
  MANTREE=%{_mandir} \
  INC_RCDEFAULT=%{_initrddir} \
  module
 
%install
%{__make} \
  DESTDIR=%{buildroot} \
  INC_USRLOCAL=%{_prefix} \
  INC_RCDEFAULT=%{_initrddir} \
  MANTREE=%{buildroot}%{_mandir} \
  DOCDIR=%{buildroot}/usr/share/doc/openswan-%{version} \
  minstall
...
#-------
rpmbuild -bb SPECS/openswan.spec --target i686
depmod -a 2.6.9-efw2xenU
 
cd /var/tmp/kernel-2.6.9-efw2-root
tar cvjf /usr/src/efw2-kernel-i686-xen.tar.bz2 boot lib
</pre>

Aktuelle Version vom 2. November 2007, 20:53 Uhr

Vorbereitung

Basis der Endian Firewall ist CentOS, eine OpenSource Implementierung von RedHat Enterprise Linux. RHEL stellt seine Sourcen zur Verfügung, welche die Basis von CentOS bilden. Für Anpassungen der Endian Firewall benötigen wir die passende Entwicklungsumgebung.

RPM

Die Endian Firewall ist wie RHEL RPM basiert. In einem chroot-jail kann die RPM-Entwicklungsumgebung auch unter Debian implementiert werden, z.B. durch mounten eines Images einer RPM-basierten Linux-Distribution, welche mittels chroot zum kompilieren genutzt werden kann.

Tip: Bei XEN Source bietet die Demo-CD die Möglichkeit CentOS, Debian und SuSE (gleichzeitig) direkt von CD zu benutzen. Auf der CD findet man also fertige XEN-Umgebungen und Images für CentOS, SuSE und Debian. Die Images können auch mit chroot verwendet werden ...

Tip: Es bietet sich hier alternativ eine Installation der EFW in einer VmWare an. Die VmWare-Disk der EFW (offline!) mountet man einfach in einer anderen VmWare-Installation als 2.te Disk und zieht mit tar die komplette EFW-Installation in ein tar-file ab. Die EFW-Installation kann dann auf einem anderem Rechner in einem beliebigen Verzeichnis ausgepackt und mit chroot benutzt werden.

EFW Developer Umgebung

Die Entwicklungsumgebung für EFW 2.0 habe ich wie folgt erstellt:


-> hier EFW2.1.1


mkdir -p /efw-dev/usr/src
cd /efw-dev/usr/src
wget http://mesh.dl.sourceforge.net/sourceforge/efw/EFW-COMMUNITY-2-devel-RPMS.tar.gz
tar xvzf EFW-COMMUNITY-2-devel-RPMS.tar.gz
cd /efw-dev
mkdir -p usr/src/endian var/lib/rpm dev etc proc sys
cp -a /dev/null /dev/zero /dev/urandom /dev/random dev
for f in etc/passwd etc/group etc/shadow; do grep root /$f > $f; done
grep " / " /etc/fstab > etc/fstab
cd usr/src/endian
mkdir BUILD RPMS SRPMS SPECS SOURCES

cd /efw-dev/usr/src/EFW-COMMUNITY-2-devel-RPMS
rpm --initdb --root /efw-dev
rpm --root /efw-dev -Uvh *.rpm --nodeps --force

Jetzt die Sourcen laden und den Kernel übersetzen:

cd /efw-dev/usr/src
wget http://mesh.dl.sourceforge.net/sourceforge/efw/EFW-COMMUNITY-2-devel-SRPMS.tar.gz
tar xvzf EFW-COMMUNITY-2-devel-SRPMS.tar.gz

mount -t proc none /efw-dev/proc
chroot /efw-dev
cd /usr/src/

cd EFW-COMMUNITY-2-devel-SRPMS
rpm -Uvh kernel-2.6.9-34.0.1.EL.endian14.src.rpm

cd ..
ln -s /usr/src/linux-2.6.9/scripts/kconfig/libkconfig.so /usr/lib

cd endian
rpmbuild -bc SPECS/kernel26.spec --target i686

Der Kernel sollte jetzt übersetzt werden, also haben wir eine funktionstüchtige Entwicklungsumgebung für die Endian Firewall geschaffen.

Sourcen

Endian Firewall
EFW_COMMUNITY_2_RESPIN.iso Endian Firewall 2 Respin (Installationsimage für CD)
EFW-COMMUNITY-2-devel-RPMS Developer RPMs für EFW Build-Umgebung
EFW-COMMUNITY-2-devel-SRPMS Endian Firewall 2.0 Sourcen (nicht Respin)
XEN Source
kernel-2.6.9-42.0.2.EL.xs148.src.rpm XEN DomU Guest Kernel
XEN Downloads (Binäries, Sourcen, Demo CD)

Kernel patchen

Grösstes Problem ist, dass EFW auf dem Kernel 2.6.9 basiert, die XEN-3-Sourcen aber erst ab neueren Versionen (>= 2.6.12) kompilieren. Dank XenSource gibt es aber für eine RHEL 4.4 DomU die Sourcen für einen XEN 3.0.3 Gast-Kernel mit dem Kernel 2.6.9!

Wenn man die beiden Kernel-Sourcen vergleicht (die Details entnimmt man den jeweiligen SPEC-Files), stellt man fest, dass nur wenige Patches für EFW zusätzlich zum RHEL-Kernel einzubauen sind. Da EFW von CentOS und dieses von RHEL abstammt, sind die Kernel-Sourcen weitgehend identisch :-)

Patch3010: linux-2.6.9-endian-usbatm-CVS-2005-07-02.patch
Patch8003: linux-2.6.11-broken_conntrack_nf_fix.patch
Patch8005: kernel-2.6.9-2.6.10-layer7-1.2.patch
Patch8006: http://www.openswan.org/download/openswan-2.4.0.kernel-2.6-natt.patch.gz
Patch100000: iptables-1.3.2-pptp-20050720-workaround.patch

Das SPEC-File des RHEL-XEN-Kernels wird entsprechend erweitert, damit die EFW-Patches eingebunden werden. Die Sourcen der EFW-Patches müssen in das SOURCES Verzeichnis kopiert werden(ist mit obigen bauen des kernels schon erfolgt). Anschliessend kann man den XEN-RHEL Kernel bauen (patchen) und kompilieren:

# chroot Umgebung verlassen, da wget nicht vorhanden
exit
cd /efw-dev/usr/src
wget http://www.neobiker.de/wiki/dl/efw2-xen-src.tar.bz2
wget http://bits.xensource.com/oss-xen/release/3.0.3-0/kernel-rhel4x/SRPMS/kernel-2.6.9-42.0.2.EL.xs148.src.rpm

chroot /efw-dev
# RHEL-XEN Sourcen
cd /usr/src
rpm -Uvh kernel-2.6.9-42.0.2.EL.xs148.src.rpm
cd /usr/src/endian
tar xvjf ../efw2-xen-src.tar.bz2

rpmbuild -bc SPECS/kernel-2.6.9-efw2-xenU.spec --target i686

cd /lib/modules/
ln -s /var/tmp/kernel-2.6.9-efw2-root/lib/modules/2.6.9-efw2xenU
cd 2.6.9-efw2xenU
rm build
ln -s /usr/src/endian/BUILD/kernel-2.6.9/linux-2.6.9 build

Den gepatchten XEN-Kernel für EFW2 / XEN-PAE-SMP Kernel für EFW2 und ein tarball mit den geänderten Files (SOURCES u. SPECS, PAE=off) zum kompilieren stelle ich hier zur Verfügung.

Die XEN-isierte glibc für die EFW2.1 gibt's ebenfalls hier.


Die Kernel und Module findet man im Verzeichnis /var/tmp/kernel-2.6.9-efw2-root. Das Modul für IPSEC (openswan) muss zusätzlich kompiliert werden:

rpm -Uvh /usr/src/EFW-COMMUNITY-2.1-devel-SRPMS/firewall/openswan-2.4.7-8.endian10.src.rpm

cd /usr/src/endian

vi SPECS/openswan.spec       # Anpassungen, damit rpmbuild läuft
#-----
%{!?kernel:%define kernel %(rpm -q kernel-devel --qf '%{RPMTAG_VERSION}-%{RPMTAG_RELEASE}' | tail -1)}
%define kernel 2.6.9-efw2xenU
... oder: kernel 2.6.9-efw2xenUpae 
... dependencies etc. entfernen
...
%{__make} \
  USERCOMPILE="-g %{optflags}" \
  KLIPSCOMPILE="-g %{optflags}" \
  KERNELSRC=/lib/modules/%{kversion}-%{krelease}/build \
  INC_USRLOCAL=%{_prefix} \
  MANTREE=%{_mandir} \
  INC_RCDEFAULT=%{_initrddir} \
  module

%install
%{__make} \
  DESTDIR=%{buildroot} \
  INC_USRLOCAL=%{_prefix} \
  INC_RCDEFAULT=%{_initrddir} \
  MANTREE=%{buildroot}%{_mandir} \
  DOCDIR=%{buildroot}/usr/share/doc/openswan-%{version} \
  minstall
...
#-------
 
rpmbuild -bb SPECS/openswan.spec --target i686
depmod -a 2.6.9-efw2xenU

cd /var/tmp/kernel-2.6.9-efw2-root
tar cvjf /usr/src/efw2-kernel-i686-xen.tar.bz2 boot lib