XEN Kernel EFW: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(78 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Vorbereitung == | == Vorbereitung == | ||
Basis der Endian Firewall ist CentOS, | 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. | ||
RHEL | |||
die | '''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 [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''': 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 === | === EFW Developer Umgebung === | ||
Die Entwicklungsumgebung für EFW 2.0 habe ich wie folgt erstellt: | |||
---- | |||
-> hier [[Devel-EFW2.1.1|EFW2.1.1]] | |||
---- | |||
<pre> | |||
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 | |||
</pre> | |||
<pre> | |||
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 | |||
</pre> | |||
Jetzt die Sourcen laden und den Kernel übersetzen: | |||
<pre> | |||
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 | |||
</pre> | |||
Der Kernel sollte jetzt übersetzt werden, also haben wir eine funktionstüchtige Entwicklungsumgebung für die Endian Firewall geschaffen. | |||
=== Sourcen === | === Sourcen === | ||
{| | |||
|[http://www.efw.it Endian Firewall] | |||
|- | |||
| | |||
|[http://prdownloads.sourceforge.net/efw/EFW_COMMUNITY_2_RESPIN.iso?download EFW_COMMUNITY_2_RESPIN.iso] | |||
|Endian Firewall 2 Respin (Installationsimage für CD) | |||
|- | |||
| | |||
|[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 == | ||
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 [http://www.xensource.com 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 :-) | |||
<pre> | |||
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 | |||
</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(ist mit obigen bauen des kernels schon erfolgt). Anschliessend kann man den XEN-RHEL Kernel bauen (patchen) und kompilieren: | |||
<pre> | |||
# 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> | |||
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