Difference between revisions of "HowTo Compile In Gentoo"

From AMule Project FAQ
Jump to: navigation, search
m (amule-cvs)
(amule CVS)
Line 31: Line 31:
 
   emerge amule
 
   emerge amule
  
=== amule-cvs ===
+
=== amule CVS (portage) ===
The current ebuilds for [[aMule CVS]] can be found [http://forum.amule.org/thread.php?threadid=5732 here]. Download it and continue with this wiki article.
+
Portage have 2 CVS ebuilds: amule-2.2.0_pre20070422.ebuild with wXgtk-2.6 support and amule-2.2.0_pre20071204.ebuild with wXgtk-2.8 support. Both are marked as '''unstable''' for all architectures.
  
1. Define ''PORTDIR_OVERLAY''. Open up ''/etc/make.conf'' with your favourite text editor and define the ''PORTDIR_OVERLAY'' variable. The default is:
+
====To install amule-2.2.0_pre20070422:====
 +
 
 +
1. Add to ''package.keywords'':
 +
  echo "net-p2p/amule ~x86" >> /etc/portage/package.keywords
 +
 
 +
2. Review installation flags:
 +
  emerge amule -pv
 +
 
 +
3. Modify ''/etc/portage/package.use'' to suit your needs :
 +
  net-p2p/amule -amuled -debug gtk nls -remote -stats unicode
 +
 
 +
This would install amule without deamon and remote support.
 +
To activate deamons and remote options, leave out the '-' like this:
 +
 
 +
  net-p2p/amule amuled -debug gtk nls remote -stats unicode
 +
 
 +
As aMule needs unicode support or it won't compile, you might also want to add a line to enable unicode in x11-libs/wxGTK
 +
  x11-libs/wxGTK unicode
 +
 
 +
Personally, I have the unicode USE flag in /etc/make.conf so that any program that support unicode will be compiled with unicode support.
 +
 
 +
4. Install [[aMule]]:
 +
  emerge amule
 +
 
 +
====To install amule-2.2.0_pre-20071204,====
 +
we need to unmask wXgtk-2.8. Process like for amule-2.2.0_pre20070422, but with this supplementary step:
 +
 
 +
1. Unmask amule-2.2.0_pre-20071204 and 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 (latest one) ===
 +
It is no ebuild for the current [[aMule CVS]] so we need to add one in portage. For that, we will make use of a personal portage overlay. If you don't already have one, just follow this HOWTO article: [http://gentoo-wiki.com/HOWTO_Installing_3rd_Party_Ebuilds HOWTO Installing 3rd Party Ebuilds]
 +
 
 +
We will also follow the naming scheme of portage. CVS ebuild from a CVS tarball are not named as '''package_name-cvs''' but as '''package_name-version_date_of_the_tarball'''. That is to distinguish them from real CVS ebuilds (the so called live ebuilds) named as '''package_name-9999''' and using keywords="".
 +
 
 +
1. Define ''PORTDIR_OVERLAY''. Open up ''/etc/make.conf'' with your favourite text editor and define the ''PORTDIR_OVERLAY'' variable. We will use:
 
   PORTDIR_OVERLAY="/usr/local/portage"
 
   PORTDIR_OVERLAY="/usr/local/portage"
  
 
2. Create overlay for amule-cvs:
 
2. Create overlay for amule-cvs:
   mkdir -p {PORTDIR_OVERLAY}/net-p2p/amule-cvs/files
+
   mkdir -p /usr/local/net-p2p/amule
  
 
3. Add to ''package.keywords'':
 
3. Add to ''package.keywords'':
   echo "net-p2p/amule-cvs ~x86" >> /etc/portage/package.keywords
+
   echo "net-p2p/amule ~x86" >> /etc/portage/package.keywords
  
4. Copy [http://forum.amule.org/attachment.php?attachmentid=1342 amule-cvs-3.ebuild] from [http://forum.amule.org/thread.php?postid=46114#post46114 this forum post] to ''{PORTDIR_OVERLAY}/net-p2p/amule-cvs''
+
4. Copy the following ebuild into ''{PORTDIR_OVERLAY}/net-p2p/amule/amule-2.2.0_p20071217.ebuild''
  
5. Copy ''amuled'' and ''amuleweb'' init script from official ebuild files:
+
I use here the tarball from 17 December 2007 that was working fine for me, but you can change the date like you want. I use '''p''' in order to distinguish this ebuild from the ones in portage (using '''pre''').  
  cp {PORTDIR}/net-p2p/amule/files/amuled.* {PORTDIR_OVERLAY}/net-p2p/amule-cvs/files/
+
  cp {PORTDIR}/net-p2p/amule/files/amuleweb.* {PORTDIR_OVERLAY}/net-p2p/amule-cvs/files/
+
  
''PORTDIR'' is the official portage directory (usually ''/usr/portage/'')
+
# 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
 +
}
 +
  
6. Change directory:
+
5. Change directory:
   cd {PORTDIR_OVERLAY}/net-p2p/amule-cvs/
+
   cd /usr/local/portage/net-p2p/amule/
  
7. Digest ebuild:
+
6. Digest the ebuild:
   ebuild amule-cvs-3.ebuild digest
+
   ebuild amule-2.2.0_p10071217.ebuild digest
  
8. Review installation flags:
+
7. Review installation flags:
   emerge amule-cvs -pv
+
   emerge amule -pv
  
9. Modify ''/etc/portage/package.use'' to suit your needs (please note that ''debug'' is enabled regardless of ''USE'' flag):
+
8. Modify ''/etc/portage/package.use'' to suit your needs (please note that ''debug'' is enabled regardless of ''USE'' flag):
   net-p2p/amule-cvs X -amuled -debug gtk2 kad nls -nosystray -optimize -remote -remote-gui -stats unicode
+
   net-p2p/amule -amuled -debug geoip gtk nls -remote -stats unicode
  
 
This would install amule without deamon and remote support.
 
This would install amule without deamon and remote support.
 
To activate deamons and remote options, leave out the '-' like this:
 
To activate deamons and remote options, leave out the '-' like this:
  
   net-p2p/amule-cvs X amuled -debug gtk2 kad nls -nosystray -optimize remote remote-gui -stats unicode
+
   net-p2p/amule X amuled -debug geoip gtk nls -nosystray -optimize remote remote-gui -stats unicode
  
 
As aMule needs unicode support or it won't compile, you might also want to add a line to enable unicode in x11-libs/wxGTK
 
As aMule needs unicode support or it won't compile, you might also want to add a line to enable unicode in x11-libs/wxGTK
 
   x11-libs/wxGTK unicode
 
   x11-libs/wxGTK unicode
  
10. Install [[aMule CVS]]:
+
9. Install [[aMule CVS]]:
   emerge amule-cvs
+
   emerge amule
 
+
'''PLEASE PLEASE PLEASE''' do ''emerge amule-cvs -pv'' before installing to determine how you want to compile [[aMule]].
+
 
+
11. Finally, as this is a CVS version, it's to be run with special care, so you need to modify the init.script with the correct option.
+
Currently this is ''--i-would-marry-my-mule'' as seen in this output of a trial run (run ''amuled'' on command line):
+
  amuled: OnInit - starting timer
+
  This binary requires you to use the flag --i-would-marry-my-mule and only if you're very sure of it. Warning: not legal on most countries.''
+
 
+
So, edit the init.d script:
+
  vi /etc/init.d/amuled
+
and change line 28 to
+
  -x /usr/bin/amuled -- --i-would-marry-my-mule >${LOG} 2>&1
+
 
+
12. make sure that all lockfiles of previous runs are removed:
+
  rm /var/run/amule*.pid ~/.aMule/muleLock
+
 
+
13. Finally start the deamon.
+
  /etc/init.d/amuled start
+
Use ''amulecmd'' or webinterface (start amuleweb) to control.
+
 
+
Note that ''/var/log/amuled'' does '''NOT''' contain any log entries from amuled itself, as it is forked into the background right of the start and this file only may contain any errors the ''start-stop-deamon'' encounters before that.
+
  
To view the log, use:
+
'''PLEASE''' do ''emerge amule -pv'' before installing to determine how you want to compile [[aMule]].
  less ~.aMule/logfile
+
  
 
== aMule 2.1.1 Compilation FAQ ==
 
== aMule 2.1.1 Compilation FAQ ==

Revision as of 22:38, 23 December 2007

English | Español

Someone should check how recent this Article is, and update it for 2.1.3 or better 2.2.0

English version updated: 24.10.2006 - Newest Gentoo Version is now 2.1.2

Introduction

Gentoo is known for choices. Unfortunately, some choices require more labor than others. As such, aMule comes in a variety of versions and installation methods based on what version of wxGTK you decide to use...

Also, if you plan to build a GUI-less core, you might want to take a look at http://bugs.gentoo.org/show_bug.cgi?id=109515, comment #3 contains a patch for wxGTK ebuild that removes the dependency on X.

Methods of Installation

amule-2.1.3.ebuild

This ebuild matches the most current, stable aMule release, it is available 13.10.2007 in portage.

Dependencies: >=x11-libs/wxGTK-2.6.*; >=sys-libs/zlib-1.2.1; >=media-libs/libpng-1.2.0 for remote support; >=media-libs/gd-2.0.26 for unicode support.

amule-cvs

This ebuild is marked as unstable for all architectures.

Not intended for the general public. If you'd like to test out the daily development snapshot, then this is the version for you.

Dependencies: >=x11-libs/wxGTK-2.6.* or 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 development; 2 versions in portage; the latest tarball need a personal portage overlay

Installation instructions

amule-2.1.3.ebuild

1. Emerge package:

 emerge --sync
 emerge amule -pv
 emerge amule

amule CVS (portage)

Portage have 2 CVS ebuilds: amule-2.2.0_pre20070422.ebuild with wXgtk-2.6 support and amule-2.2.0_pre20071204.ebuild with wXgtk-2.8 support. Both are marked as unstable for all architectures.

To install amule-2.2.0_pre20070422:

1. Add to package.keywords:

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

2. Review installation flags:

 emerge amule -pv

3. Modify /etc/portage/package.use to suit your needs :

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

This would install amule without deamon and remote support. To activate deamons and remote options, leave out the '-' like this:

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

As aMule needs unicode support or it won't compile, you might also want to add a line to enable unicode in x11-libs/wxGTK

 x11-libs/wxGTK unicode

Personally, I have the unicode USE flag in /etc/make.conf so that any program that support unicode will be compiled with unicode support.

4. Install aMule:

 emerge amule

To install amule-2.2.0_pre-20071204,

we need to unmask wXgtk-2.8. Process like for amule-2.2.0_pre20070422, but with this supplementary step:

1. Unmask amule-2.2.0_pre-20071204 and 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 (latest one)

It is no ebuild for the current aMule CVS so we need to add one in portage. For that, we will make use of a personal portage overlay. If you don't already have one, just follow this HOWTO article: HOWTO Installing 3rd Party Ebuilds

We will also follow the naming scheme of portage. CVS ebuild from a CVS tarball are not named as package_name-cvs but as package_name-version_date_of_the_tarball. That is to distinguish them from real CVS ebuilds (the so called live ebuilds) named as package_name-9999 and using keywords="".

1. Define PORTDIR_OVERLAY. Open up /etc/make.conf with your favourite text editor and define the PORTDIR_OVERLAY variable. We will use:

 PORTDIR_OVERLAY="/usr/local/portage"

2. Create overlay for amule-cvs:

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

3. Add to package.keywords:

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

4. Copy the following ebuild into {PORTDIR_OVERLAY}/net-p2p/amule/amule-2.2.0_p20071217.ebuild

I use here the tarball from 17 December 2007 that was working fine for me, but you can change the date like you want. I use p in order to distinguish this ebuild from the ones in portage (using pre).

# 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. Change directory:

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

6. Digest the ebuild:

 ebuild amule-2.2.0_p10071217.ebuild digest

7. Review installation flags:

 emerge amule -pv

8. Modify /etc/portage/package.use to suit your needs (please note that debug is enabled regardless of USE flag):

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

This would install amule without deamon and remote support. To activate deamons and remote options, leave out the '-' like this:

 net-p2p/amule X amuled -debug geoip gtk nls -nosystray -optimize remote remote-gui -stats unicode

As aMule needs unicode support or it won't compile, you might also want to add a line to enable unicode in x11-libs/wxGTK

 x11-libs/wxGTK unicode

9. Install aMule CVS:

 emerge amule

PLEASE do emerge amule -pv before installing to determine how you want to compile aMule.

aMule 2.1.1 Compilation FAQ

When compiling aMule-2.1.1 on a hardened system with gcc-3.4.5(at least), it will fail with something like:

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

The possible problem is the -fPIE CFLAG because using `gcc-config` to select i386-pc-linux-gnu-3.4.5-hardenednopiessp fixed the problem, and you can even remove from the ebuild:

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

You can read more on the subject following the link http://bugs.gentoo.org/show_bug.cgi?id=74457