HowTo Compile In Gentoo-de

From AMule Project FAQ
Revision as of 10:40, 2 August 2008 by Vollstrecker (Talk | contribs)

Jump to: navigation, search
Deutsch | English | Spanisch

Einführung

Gentoo ist bekannt für seine Auswahl. Unglücklicherweise sind einige Wahlmöglichkeiten arbeitsintensiver als andere. So kommt auch aMule in einer Vielzahl von Versionen und Installationmethoden, abhängig von der wxGTK Version die du nutzen willst...

Wenn du planst eine Version ohne grafische Oberfläche zu bauen, solltest du einen Blick auf http://bugs.gentoo.org/show_bug.cgi?id=109515 werfen, Kommentar #3 enthält ein Patch für wxGTK, das die Abhängigkeit auf X entfernt.

Methoden der Installation

amule-2.1.3.ebuild

Dieser ebuild passt zur aktuell stabilen Veröffentlichung von aMule, es ist seit 13.10.2007 im portage Verfügbar.

Abhängigkeiten: >=x11-libs/wxGTK-2.6.*; >=sys-libs/zlib-1.2.1; >=media-libs/libpng-1.2.0 für Fernsteuerung; >=media-libs/gd-2.0.26 für Unicode-Unterstützung.

amule-cvs

Dieser ebuild ist als instabil auf allen Architekturen markiert.

Nicht gedacht für die breite Öffentlichkeit. Wenn du den täglichen Entwicklungsschnappschuß ausprobieren willst, dann ist dies der richtige für dich.

Abhängigkeiten: >=x11-libs/wxGTK-2.6.* oder 2.8.*; >=sys-libs/zlib-1.2.1; >=media-libs/gd-2.0.26; >=media-libs/libpng-1.2.0; devs-libs/geoip
Status: In Entwicklung; 2 Versionen im portage; das aktuelle Archiv braucht einen persönlichen overlay

Installationsanweisungen

amule-2.1.3.ebuild

1. Emerge Paket:

 emerge --sync
 emerge amule -pv
 emerge amule

amule CVS (portage)

Portage hat 2 CVS ebuilds: amule-2.2.0_pre20070422.ebuild mit wXgtk-2.6 Untertstützung und amule-2.2.0_pre20071204.ebuild mit wXgtk-2.8 Unterstützung. Beide sind als instabil auf allen Architekturen markiert.

Um amule-2.2.0_pre20070422 zu installieren

1. Hinzufügen zu package.keywords:

 echo "net-p2p/amule ~x86" >> /etc/portage/package.keywords

2. Installationseinstellungen prüfen:

 emerge amule -pv

3. Passe /etc/portage/package.use an deine Bedürfnisse an:

 net-p2p/amule -amuled -debug gtk nls -remote -stats unicode

Dies installiert amule ohne Deamon und Fernsteuerungsunterstützung. Um Deamon und Fernsteuerung zu aktivieren entferne das '-'. Ungefähr so:

 net-p2p/amule amuled -debug gtk nls remote -stats unicode

Da aMule Unicode-Unterstützung benötigt, wird es erstmal nicht kompilieren. Du musst noch eine Zeile in x11-libs/wxGTK hinzuügen um Unicode zu aktivieren

 x11-libs/wxGTK unicode

Persönlich habe ich das unicode USE flag in /etc/make.conf, so dass jedes Programm das Unicode unterstützt mit Unicode-Unterstützung kompiliert wird.

4. aMule installieren:

 emerge amule

Um amule-2.2.0_pre-20071204 zu installieren

Wir müssen wxGTK-2.8 demaskieren. Gehe vor wie bei amule-2.2.0_pre20070422, aber mit diesem ergänzenden Schritt:

1. Demaskiere amule-2.2.0_pre-20071204 und wxGTK-2.8

 echo "=net-p2p/amule-2.2.0_pre20071204" >> /etc/portage/package.unmask
 echo "=x11-libs/wxGTK-2.8.7.1" >> /etc/portage/package.unmask

amule CVS (aktuellste)

Es gibt keinen ebuild für das akuellste aMule CVS also müssen wir eines im portage hinzufügen. Dafür brauchen wir einen persönlichen portage overlay. Wenn du noch keinen hast, folge diesem Artikel.

Wir orientieren uns am portage Namensschema. CVS ebuilds aus einem CVS Archiv werden nicht als paket_name-cvs sondern als paket_name-version_datum_des_archives benannt. Das ist, um sie von echten CVS ebuilds (sogenannten live ebuilds), die als paket_name-9999 bezeichnet werden und das Schlüsselwort keywords="" nutzen, zu unterscheiden.

1. Definiere PORTDIR_OVERLAY. Öffne /etc/make.conf mit deinem bevorzugten Texteditor und definiere die PORTDIR_OVERLAY Variable. Wir verwenden:

 PORTDIR_OVERLAY="/usr/local/portage"

2. Erstelle das overlay für amule-cvs:

 mkdir -p /usr/local/net-p2p/amule

3. Füge zu package.keywords hinzu:

 echo "net-p2p/amule ~x86" >> /etc/portage/package.keywords

4. Kopiere das folgende ebuild in {PORTDIR_OVERLAY}/net-p2p/amule/amule-2.2.0_p20071217.ebuild

Ich verwende hier das Archiv vom 17 Dezember 2007 das hier wunderbar funktioniert hat, aber das Datum kannst du anpassen wie du willst. Ich nutze p um es von denem im portage (welche pre nutzen) zu unterscheiden.

# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $

inherit eutils flag-o-matic wxwidgets

MY_PN=${PN/m/M}
MY_PV="${PV/2.2.0_p/}"
S="${WORKDIR}/amule-cvs"

DESCRIPTION="aMule, the all-platform eMule p2p client"
HOMEPAGE="http://www.amule.org/"
SRC_URI="http://www.hirnriss.net/files/cvs/${MY_PN}-CVS-${MY_PV}.tar.bz2"

RESTRICT="nomirror"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha ~amd64 ~hppa ~ppc ~ppc64 ~sparc ~x86"
IUSE="amuled debug geoip gtk nls remote stats unicode"

DEPEND="=x11-libs/wxGTK-2.8*
		>=sys-libs/zlib-1.2.1
		stats? ( >=media-libs/gd-2.0.26 )
		geoip? ( dev-libs/geoip )
		remote? ( >=media-libs/libpng-1.2.0
		unicode? ( >=media-libs/gd-2.0.26 ) )"

pkg_setup() {
		if ! use gtk && ! use remote && ! use amuled; then
				eerror ""
				eerror "You have to specify at least one of gtk, remote or amuled"
				eerror "USE flag to build amule."
				eerror ""
				die "Invalid USE flag set"
		fi

		if use stats && ! use gtk; then
				einfo "Note: You would need both the gtk and stats USE flags"
				einfo "to compile aMule Statistics GUI."
				einfo "I will now compile console versions only."
		fi

		if use stats && ! built_with_use media-libs/gd jpeg; then
				die "media-libs/gd should be compiled with the jpeg use flag when you have the stats use   flag set"
		fi
}

pkg_preinst() {
	if use amuled || use remote; then
		enewgroup p2p
		enewuser p2p -1 -1 /home/p2p p2p
	fi
}

src_compile() {
		local myconf

		WX_GTK_VER="2.8"

		if use gtk; then
				einfo "wxGTK with gtk support will be used"
				need-wxwidgets unicode
		else
				einfo "wxGTK without X support will be used"
				need-wxwidgets base
		fi

		if use gtk ; then
				use stats && myconf="${myconf}
					--enable-wxcas
					--enable-alc"
				use remote && myconf="${myconf}
					--enable-amule-gui"
		else
				myconf="
					--disable-monolithic
					--disable-amule-gui
					--disable-wxcas
					--disable-alc"
		fi

		econf \
				--with-wx-config=${WX_CONFIG} \
				--with-wxbase-config=${WX_CONFIG} \
				--enable-amulecmd \
				$(use_enable debug) \
				$(use_enable !debug optimize) \
				$(use_enable amuled amule-daemon) \
				$(use_enable geoip) \
				$(use_enable nls) \
				$(use_enable remote webserver) \
				$(use_enable stats cas) \
				$(use_enable stats alcc) \
				${myconf} || die

		# we filter ssp until bug #74457 is closed to build on hardened
		filter-flags -fstack-protector -fstack-protector-all

		emake -j1 || die
}

src_install() {
		emake DESTDIR="${D}" install || die

		if use amuled; then
				newconfd "${FILESDIR}"/amuled.confd amuled
				newinitd "${FILESDIR}"/amuled.initd amuled
		fi

		if use remote; then
				newconfd "${FILESDIR}"/amuleweb.confd amuleweb
				newinitd "${FILESDIR}"/amuleweb.initd amuleweb
		fi
}

5. Wechsle das Verzeichnis:

 cd /usr/local/portage/net-p2p/amule/

6. Erstelle den Digest:

 ebuild amule-2.2.0_p10071217.ebuild digest

7. Überprüfe die Einstellungen:

 emerge amule -pv

8. Passe /etc/portage/package.use an deine Bedürfnisse an (beachte, das debug unabhängig vom USE flag immer aktiviert wird):

 net-p2p/amule -amuled -debug geoip gtk nls -remote -stats unicode

Dies installiert amule ohne Deamon und Fernsteuerungsunterstützung. Um den Deamon und Fernsteuerung zu aktivieren entferne das '-' ungefähr so:

 net-p2p/amule amuled -debug geoip gtk nls remote -stats unicode

Da aMule Unicode-Unterstützung benötigt, wird es erstmal nicht kompilieren. Du musst noch eine Zeile in x11-libs/wxGTK hinzufügen um Unicode zu aktivieren

 x11-libs/wxGTK unicode

9. aMule CVS installieren:

 emerge amule

BITTE führe emerge amule -pv vor der Installation aus um zu sehen wie aMule kompiliert wird.

aMule 2.1.1 Kompilier FAQ

Beim kompilieren von aMule-2.1.1 auf einem gehärteten System mit gcc-3.4.5(oder höher), bricht es mit einer Fehlermeldung ab, in der Art:

WebServer.h: In member function `T* UpdatableItemsContainer<T, G, I>::GetByID(I) [with T = SharedFile, G = CEC_SharedFile_Tag, I = CMD4Hash]':
WebServer.h:270: internal compiler error: in sweep_string_variable, at protector.c:1158

Das Problem ist wahrscheinlich das -fPIE CFLAG weil `gcc-config` mit der Auswahl i386-pc-linux-gnu-3.4.5-hardenednopiessp dieses Problem behoben hat, und du dadurch folgendes aus dem ebuild entfernen kannst:

if has_hardened; then
    filter-flags -fstack-protector -fstack-protector-all
fi

Mehr über dieses Thema kannst du unter folgendem Link finden: http://bugs.gentoo.org/show_bug.cgi?id=74457