LinuxForum.Fans
Тема

[Решение] Распределённая компиляция из исходников

Автор: system-root 4 сообщений 4946 просмотров
#43185

навеянно
http://www.bsdportal.ru/viewtopic.php?p=69652



простейшее использование distcc ccache.
text

make -C /usr/ports/sysutils/bsdadminscripts/ install
make -C /usr/ports/devel/distcc install
make -C /usr/ports/devel/ccache install
text
cp /usr/local/share/bsdadminscripts/buildflags.mk /etc/make.conf

после этого, нам больше не понадобиться файл /etc/make.conf никогда. все настройки для исходников конфигурируються в /usr/local/etc/buildflags.conf

text
cp /usr/local/etc/buildflags.conf.sample /usr/local/etc/buildflags.conf



настройка distcc и ccache показана уважаемым fidaj очень хорошо по ссылке выше по этому я её опущу.

приведу пример /usr/local/etc/buildflags.conf
как видно из примера, в конфиге легко обходяться те порты, которые не могут собираться паралельно или с какими-то общими опциями.
так-же каждому отдельному порту или целой котегории можно назначить свои, особые настройки.
cat /usr/local/etc/buildflags.conf
text
#
# Dear bsdadminscripts user, beware for this example is a copy of my
# very own buildflags.conf and I'm of a rather experimental nature when it
# comes to building software. There are things done here that are definitely
# not supported or recommended.
#
# Also note that this file is shared over NFS and thus certain machine
# specific settings are left in the make.conf(5) file.
#
# If some of the variables used here don't make sense to you, search for them
# in the buildflags.mk(1), ports(7), make.conf(5) or in the file
# /usr/ports/Mk/bsd.port.mk.
#
# Apart from that, I hope the syntax is easy enough to understand with
# the help of the buildflags.conf(1) manual page.
#
# - Dominic Fandrey <kamikaze@bsdforen.de>
#
# ---< configure buildworld/buildkernel >--------------------------------------
/usr/src | /usr/src/*{
    USE_DISTCC=yes
    USE_CCACHE=yes
    THREADS=        3
    # Don't clean.
    NO_CLEAN
}
# ---< configure ports >-------------------------------------------------------
/usr/ports/*{
    # Clustering
    FORCE_MAKE_JOBS= yes
    MAKE_JOBS_NUMBER=    16
    USE_DISTCC=yes
    USE_CCACHE=yes

# Common settings that are applied to all ports in hope to do some good. WITHOUT_ARTS #-------------------------------------------------------------------------- CPUTYPE=i686 CFLAGS= -O2 -pipe -funroll-loops -s -frename-registers -ffast-math -fprofile-use -fpeel-loops -fvpt -ftracer -fomit-frame-pointer CXXFLAGS= -O2 -pipe -funroll-loops -s -frename-registers -felide-constructors

DOC_LANG= en_US.ISO8859-1 ru_RU.KOI8-R FORCE_PKG_REGISTER= yes INSTALL_AS_INFOUNZIP= yes #-------------------------------------------------------------------------- #WITH_IPV6 WITH_CPUFLAGS WITH_OPT_PPRO WITH_OPTIMIZED_CFLAGS FETCH_ARGS= -ApRrF # Prefer German mirrors. MASTER_SORT_REGEX= ://([^/]*\.de[\./]|de\.) # Keep interactive ports from annoying me without turning the # config dialogues off. .if ! target(config*) BATCH .endif

# Do not build these. */editors/openoffice.org*{IGNORE}

# это список портов котрым явно запрещаем собираться с каими-то опциями. # */archivers/p7zip {!FORCE_MAKE_JOBS !CXXFLAGS !CXXFLAGS !CFLAGS} */audio/cdparanoia {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */audio/libsndfile {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */audio/nas {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */converters/libiconv {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */devel/autoconf261 {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */devel/boost-python {!USE_CCACHE !USE_DISTCC !CXXFLAGS !CFLAGS} */devel/doxygen {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */devel/gperf {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */devel/libthai {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */devel/nasm {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */devel/ncurses {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */devel/ORBit2 {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */devel/physfs {!USE_CCACHE !USE_DISTCC !CXXFLAGS !CFLAGS} */devel/pth {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */dns/libidn {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */editors/vim {!FORCE_MAKE_JOBS !USE_CCACHE !CXXFLAGS !CFLAGS} */games/ultimatestunts {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */graphics/libafterimage {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */graphics/libart_lgpl {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */lang/ruby18 {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */multimedia/ffmpeg {!USE_CCACHE !USE_DISTCC !CXXFLAGS !CFLAGS} */multimedia/gpac-libgpac {!USE_DISTCC !CXXFLAGS !CFLAGS} */multimedia/mplayer {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */multimedia/mencoder {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */print/ghostscript* {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */print/scribus {!USE_CCACHE !USE_DISTCC !CXXFLAGS !CFLAGS} */print/xdvik {!USE_CCACHE !USE_DISTCC !CXXFLAGS !CFLAGS} */security/libgpg-error {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */security/nss {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */science/hdf5 {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */textproc/exempi {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */graphics/poppler {!FORCE_MAKE_JOBS !CXXFLAGS !CFLAGS} */security/libgcrypt {!FORCE_MAKE_JOBS !USE_CCACHE !USE_DISTCC !CXXFLAGS !CFLAGS} */x11/libXp {!FORCE_MAKE_JOBS !USE_CCACHE !USE_DISTCC} */print/freetype2 {!USE_CCACHE !USE_DISTCC} */x11/liboldX {!FORCE_MAKE_JOBS !USE_DISTCC} */x11/libXTrap {!FORCE_MAKE_JOBS !USE_DISTCC} */devel/gobject-introspection {!FORCE_MAKE_JOBS !USE_DISTCC} */sysutils/polkit {!USE_CCACHE !USE_DISTCC} */graphics/jasper {!USE_CCACHE !USE_DISTCC !CXXFLAGS !CFLAGS} */x11-toolkits/gtk20 {!FORCE_MAKE_JOBS !USE_CCACHE !USE_DISTCC} */audio/flac {!USE_CCACHE !USE_DISTCC} */audio/speex {!USE_CCACHE !USE_DISTCC} */devel/libgtop {!FORCE_MAKE_JOBS !USE_CCACHE !USE_DISTCC} */x11/libgnome {!FORCE_MAKE_JOBS !USE_CCACHE !USE_DISTCC} # Other build flags. */audio/linux-alsa-lib {USE_LINUX=yes !OVERRIDE_LINUX_BASE_PORT}

*/devel/freetype2 {WITH_LCD_FILTERING}

*/devel/subversion {WITHOUT_BDB} */mail/thunderbird-i18n{ WITHOUT_SWITCHER THUNDERBIRD_I18N= ru }

#-------------------------------------------------------------------------- */databases/* { CFLAGS= -O1 -pipe -s CXXFLAGS= -O1 -pipe -s !FORCE_MAKE_JOBS !USE_CCACHE !USE_DISTCC } */lang/* { CFLAGS= -O2 -pipe -s CXXFLAGS= -O2 -pipe -s } */x11-drivers/* { CFLAGS= -O2 -pipe -s CXXFLAGS= -O2 -pipe -s } } # -----------------------------------------------------------------------------

с этим конфигом собереться Xorg и gnome2.
если какой-то пакет не сможет собраться
например сообщение вида

===> Compilation failed unexpectedly.
You have chosen to use multiple make jobs (parallelization) for all ports.
This port was not tested for this setting. Please remove FORCE_MAKE_JOBS and
retry the build before reporting the failure to the maintainer.
*** Error code 1

Stop in /usr/ports/x11/libgnome.
*** Error code 1

, его просто нужно добавить в /usr/local/etc/buildflags.conf с отключенными опциями, например для порта /x11/libgnome

*/x11/libgnome {!FORCE_MAKE_JOBS !USE_CCACHE !USE_DISTCC}
#43192

system-root, это как некое решение? :)

#43194

fidaj показал пример своего make.conf, но он не решет проблем связанных с портами которые не могут компилироваться распределенно (напримр вызываю сами себя или в них присутствуют вставки из ассэмблера)
да, можно сказать решение, но не моё, а гражданина kamikaze из германии.

#43195

ссылка есть на источник и это главное :) добавь тогда тег топику как "решение" или "пример"

Войдите или зарегистрируйтесь, чтобы ответить.