Управление пакетами
   10040

Ускорение сборки пакетов из AUR

Здравствуйте!
Вопрос для тех, кто знаком с дистрибутивом Antergos. Тот кто в теме, тот должен был заметить или же просто уже знает, что пакеты из AUR в указанном дистрибутиве собираются ну так навскидку раз в 10 быстрее, чем на любом другом арч-дистре.
Собственно в этом и вопрос: какие настройки нужно сделать на Manjaro, чтобы добиться такой же производительности?
Спасибо.

p.s. УТОЧНЕНИЕ — вопрос касается сборки посредством pamac (не адресная строка)

47 комментариев

avatar
?
Правильные ответы начинаются с правильных вопросов.
+1
avatar
абсолютно не то, ту тему уже давно нужно удалить, чтобы она не попадалась на глаза в поисковиках и не дезинформировала людей, спасибо :)
0
avatar
чего это «не то»? Что бы «оптимизировать» сборку, каких-то «сказочных» действий делать не надо. Вдобавок, возьмите и сравните настройки сборочных конфигов в антергосе и манжаре. Чудес на свете не бывает.
0
avatar
Подскажите, пожалуйста, какие именно конфиги из Antergos взять для сравнения и с какими из Manjaro сравнивать?

Я написал, что не то, потому что в той теме предлагается использовать неподдерживаемый на данное время пакет и описывается, что ускорение достигается за счёт того, что при его использовании из командной строки (а вопрос об pamac) не нужно отвечать на вопросы вида — Да/Нет, вот это ускорение!!! :)

Дайте, пожалуйста, практические советы, что делать, куда нажать, такого плана советы, спасибо.
0
avatar
Обоснуйте подробнее, почему тему «уже давно нужно удалить»? Очень интересно будет почитать. Какой пакет НЕ поддерживается? Кроме того сборка ускоряется с любым AUR helper'ом. И не только за счёт избегания «да» и «нет». Будьте внимательны при ознакомлении с материалами форума. И не путайте коллег.
0
avatar
У нас на районе помню лет 30 назад тоже так говорили — обоснуй )))
Прежде чем размещать такие статьи, то нужно понимать, что такое кеш и внимательно (!!!) прочитать: Ускоряет повторную и последующие компиляции пакета.

Слова — повторную и последующие, хорошо видно? )))

Чудак-человек.
0
avatar
Больше вопросов нет. Спасибо.
+1
avatar
Да не за что )))

Пойду установлю кеш (ccache), потом 5 минут буду собирать пакет и потом его второй раз повторно соберу с ускорением!

Брависсимо :)

Да бред та статья.
Последний раз редактировалось
0
avatar
Всё правильно. Если Вы кодер или сборщик- это и требуется. На таких задачах редко пакеты собираются сразу, обычно идут ошибки. Приходится собирать повторно, и не раз. Вот тут кэш и помогает.
Так что не торопитесь объявлять что-то бредом- возможно Вы просто не попадали в ситуацию когда бред превращается в рутину.
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
Всё правильно: я не кодер самоделкин, я человек, (программист) познающий мир — поэтому мне всего лишь нужен ответ на вопрос — куда нажать, чтобы пакеты из AUR собирались в 10 раз быстрее, как это сделано в очередной самделке под названием — Antergos.
Вот и всё.
0
avatar
Так Познавайте. Только почему здесь Вы спрашиваете не о Manjaro, а об Antergos?
Вы у них-то спрашивали? Или там тоже не знают ничего про свою самоделку?
И кстати, код открытый. Берите их исходники и смотрите на здоровье- если Вы дейстнвительно программист, а не скрипткидди-пэхапешник.
?
Правильные ответы начинаются с правильных вопросов.
+2
avatar
на здоровье- если Вы дейстнвительно программист
Взято в топике: «p.s. УТОЧНЕНИЕ — вопрос касается сборки посредством pamac (не адресная строка)»
Последний раз редактировалось
0
avatar
Самое простое — поправить пкгбилд, добавив опцию -j8 к утилите make.
8 это количество потоков
0
avatar
Где делается эта настройка?
Дайте, пожалуйста, пример команды какой-то, спасибо.
0
avatar
Нужно глянуть Antergos, с чего это он такой шустрый… Сейчас попробую.
?
Правильные ответы начинаются с правильных вопросов.
+2
avatar
Гляньте :)
Google Chrome он мне за полминуты собрал, на других арчах у меня браузер около 5-ти минут собирается.
PhpStorm — 3 минуты против 15-ти (хотел уже был сбрасывать думал ошибка), вот такие разбежки замечены мною.
0
avatar
Глянул :)
Ничего особенного (кроме старой ветки pamac, которая в репах Manjaro тоже есть под названием pamac-classic) не обнаружил. Какой-то особенной скорости сборки- тоже. В makepkg.conf значение MAKEFLAGS равно "-j2"; ccache не установлен… Ну совсем не похоже на то что там пакеты собираются на порядок быстрее…
Зато после того как свою машину настроил по статье — Google Chrome собрался за три минуты вместе со скачиванием пакета на скорости 450КиБ (3G). Большую часть времени заняла скачка deb-пакета и сжатие пакета в tar.xz А сама сборка- что-то очень быстро, я и засечь не успел. До этого сборка шла явно медленнее, ускорение реально заметное.
Всё делалось из Pamac.
Так что статья ничуть не устарела. Yaourt- тот да, действительно RIP. Но pacaur сейчас вроде снова в строю.
Да и по сути безразлично, какими программами пользоваться — речь там о настройке make и окружения, а это влияет на любые программы.
ccache который в репах- тоже не устарел, а его git-версия в АУР- совсем свежая.
Вполне актуальная статья-то. Мне помогла.
Попробуйте, вдруг и Вам поможет :)
Последний раз редактировалось
?
Правильные ответы начинаются с правильных вопросов.
+2
avatar
У них pamac-aur свой собственный в их репах лежит, я так думаю они его пошаманили.
0
avatar
Ну раз у них в репах- то конечно, свой собственный!
А если .PKGINFO из их пакета посмотреть- то вроде и не совсем их… :)
# Generated by makepkg 5.1.2
# using fakeroot version 1.23
pkgname = pamac
pkgbase = pamac
pkgver = 7.3.4-1
pkgdesc = A GTK3 frontend for libalpm
url = https://gitlab.manjaro.org/applications/pamac
builddate = 1547952565
packager = Antergos Build Server <dev@antergos.com>
size = 3349504

Сравните с аналогичным манжаровским. Размер, дату, URL…
# Generated by makepkg 5.1.2
# using fakeroot version 1.23
pkgname = pamac
pkgbase = pamac
pkgver = 7.3.4-1
pkgdesc = A Gtk3 frontend for libalpm
url = https://gitlab.manjaro.org/applications/pamac
builddate = 1546459724
packager = Philip Mueller <philm@manjaro.org>
size = 3349504
Последний раз редактировалось
?
Правильные ответы начинаются с правильных вопросов.
+2
avatar
Дичь… очередная
Короче я понял, давайте распрощаемся :) удачи Вам в нащупывании чего-то там :) может быть и подойдёт мало ли
0
avatar
Короче Вы поняли что Pamac там точно такой же, потому что исходники взяты у нас? Нам не жалко- пользуйтесь. Только не нужно сказок о том что у них наша прога на порядок быстрее летает.
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
Вообще-то pamac не Ваш.
0
avatar
Я совсем не претендую на авторство Pamac, моих там всего несколько строк в файлах локализации.
Пишет его Гильом Бенуа.
Вот только среди разработчиков Antergos я Гильома не наблюдаю, а в команде Manjaro он с самого начала и по сей день.
?
Правильные ответы начинаются с правильных вопросов.
+1
avatar
Ради интереса попробовал поставить Хром. По времени вышло минута 20 сек, без учета скачивания.
Arch Linux. Довольно древний i7-2640m. Никаких специальных настроек.
0
avatar
Внизу код для файла настроек компиляции, Хром собирается за полминуты.
0
avatar
Так ТС написал, что на других арчах у него Хром по 5 минут собирается, а я решил ради интереса проверить, на (genuine) Арче. На мобильном процессоре 2011 года.
Кстати, «makepkg.conf» у меня по дефолту практически такой же, только MAKEFLAGS закомментирован и в COMPRESSXZ нет опции --threads=0.

Update.
MAKEFLAGS="-j$(nproc)" — включает все ядра при компиляции.
--threads=0 включает все ядра для сжатия.
Сейчас Хром примерно за 50 секунд ставится.
Последний раз редактировалось
+1
avatar
Нашел отличную статейку по ускорению сборки пакетов. Правда, статья не про Arch а совсем даже про Gentoo, но make- он везде make, память- везде память; а с гентушного на арчевский переводить не так уж сложно.
Кроме того, в статье куча ссылок на другие полезные статьи.
Последний раз редактировалось
?
Правильные ответы начинаются с правильных вопросов.
+1
avatar
Даже просто тему нужно удалить так как растяжимые понятия о смысле вопроса упираются в то, как автор найдёт ответ САМ и ещё и напишет его сюда, а автор уже нашёл )))))))
Ответ: ставим Antergos, собираем пакеты в 10 раз быстрее чем гопники с вопросами обоснования и сваливаем с такого форума.

ПОКА гопота.

p.s. кеш у него ускоряет борку пакетов ахахахахахахахахахахахахахахахахах
0
avatar
Чем удалять из сети кучу тем, статей и прочей по Вашему мнению дичи (которая для тех кто действительно хочет разобраться, совсем не дичь)- Вам проще будет отключить интернет. Подсказать куда нажать? или сами найдёте?

ЗЫ: В этом интернете вообще неуютно- здесь столько гопоты.
Обратитесь к сенатору Клишасу- оп сейчас пилит для Вас другой, в котором можно будет всё с чем несогласен легко удалить.
Последний раз редактировалось
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
Та тема дичь полная, там не об ускорении сборки написано, а об использовании кеширования для ПОВТОРНОЙ СБОРКИ. Поэтому её нужно удалить либо переименовать — это не ускорение.
0
avatar
до свидания, тролль
+3
avatar
сказало чудо не принимавшее участие в обсуждении
0
avatar
Привет, тролль! Перелогинился смотрю. А толку?
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
РЕШЕНИЕ

Заменить содержимое /etc/makepkg.conf на следующий код:


#!/hint/bash
#
# /etc/makepkg.conf
#

#########################################################################
# SOURCE ACQUISITION
#########################################################################
#
#-- The download utilities that makepkg should use to acquire sources
#  Format: 'protocol::agent'
DLAGENTS=('file::/usr/bin/curl -gqC - -o %o %u'
          'ftp::/usr/bin/curl -gqfC - --ftp-pasv --retry 3 --retry-delay 3 -o %o %u'
          'http::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
          'https::/usr/bin/curl -gqb "" -fLC - --retry 3 --retry-delay 3 -o %o %u'
          'rsync::/usr/bin/rsync --no-motd -z %u %o'
          'scp::/usr/bin/scp -C %u %o')

# Other common tools:
# /usr/bin/snarf
# /usr/bin/lftpget -c
# /usr/bin/wget

#-- The package required by makepkg to download VCS sources
#  Format: 'protocol::package'
VCSCLIENTS=('bzr::bzr'
            'git::git'
            'hg::mercurial'
            'svn::subversion')

#########################################################################
# ARCHITECTURE, COMPILE FLAGS
#########################################################################
#
CARCH="x86_64"
CHOST="x86_64-pc-linux-gnu"

#-- Compiler and Linker Flags
CPPFLAGS="-D_FORTIFY_SOURCE=2"
CFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
CXXFLAGS="-march=x86-64 -mtune=generic -O2 -pipe -fno-plt"
LDFLAGS="-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
#-- Make Flags: change this for DistCC/SMP systems
MAKEFLAGS="-j$(nproc)"
#-- Debugging flags
DEBUG_CFLAGS="-g -fvar-tracking-assignments"
DEBUG_CXXFLAGS="-g -fvar-tracking-assignments"

#########################################################################
# BUILD ENVIRONMENT
#########################################################################
#
# Defaults: BUILDENV=(!distcc !color !ccache check !sign)
#  A negated environment option will do the opposite of the comments below.
#
#-- distcc:   Use the Distributed C/C++/ObjC compiler
#-- color:    Colorize output messages
#-- ccache:   Use ccache to cache compilation
#-- check:    Run the check() function if present in the PKGBUILD
#-- sign:     Generate PGP signature file
#
BUILDENV=(!distcc color !ccache check !sign)
#
#-- If using DistCC, your MAKEFLAGS will also need modification. In addition,
#-- specify a space-delimited list of hosts running in the DistCC cluster.
#DISTCC_HOSTS=""
#
#-- Specify a directory for package building.
#BUILDDIR=/tmp/makepkg

#########################################################################
# GLOBAL PACKAGE OPTIONS
#   These are default values for the options=() settings
#########################################################################
#
# Default: OPTIONS=(!strip docs libtool staticlibs emptydirs !zipman !purge !debug)
#  A negated option will do the opposite of the comments below.
#
#-- strip:      Strip symbols from binaries/libraries
#-- docs:       Save doc directories specified by DOC_DIRS
#-- libtool:    Leave libtool (.la) files in packages
#-- staticlibs: Leave static library (.a) files in packages
#-- emptydirs:  Leave empty directories in packages
#-- zipman:     Compress manual (man and info) pages in MAN_DIRS with gzip
#-- purge:      Remove files specified by PURGE_TARGETS
#-- debug:      Add debugging flags as specified in DEBUG_* variables
#
OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug)

#-- File integrity checks to use. Valid: md5, sha1, sha256, sha384, sha512
INTEGRITY_CHECK=(md5)
#-- Options to be used when stripping binaries. See `man strip' for details.
STRIP_BINARIES="--strip-all"
#-- Options to be used when stripping shared libraries. See `man strip' for details.
STRIP_SHARED="--strip-unneeded"
#-- Options to be used when stripping static libraries. See `man strip' for details.
STRIP_STATIC="--strip-debug"
#-- Manual (man and info) directories to compress (if zipman is specified)
MAN_DIRS=({usr{,/local}{,/share},opt/*}/{man,info})
#-- Doc directories to remove (if !docs is specified)
DOC_DIRS=(usr/{,local/}{,share/}{doc,gtk-doc} opt/*/{doc,gtk-doc})
#-- Files to be removed from all packages (if purge is specified)
PURGE_TARGETS=(usr/{,share}/info/dir .packlist *.pod)
#-- Directory to store source code in for debug packages
DBGSRCDIR="/usr/src/debug"

#########################################################################
# PACKAGE OUTPUT
#########################################################################
#
# Default: put built package and cached source in build directory
#
#-- Destination: specify a fixed directory where all packages will be placed
#PKGDEST=/home/packages
#-- Source cache: specify a fixed directory where source files will be cached
#SRCDEST=/home/sources
#-- Source packages: specify a fixed directory where all src packages will be placed
#SRCPKGDEST=/home/srcpackages
#-- Log files: specify a fixed directory where all log files will be placed
#LOGDEST=/home/makepkglogs
#-- Packager: name/email of the person or organization building packages
#PACKAGER="John Doe <john@doe.com>"
#-- Specify a key to use for package signing
#GPGKEY=""

#########################################################################
# COMPRESSION DEFAULTS
#########################################################################
#
COMPRESSGZ=(gzip -c -f -n)
COMPRESSBZ2=(bzip2 -c -f)
COMPRESSXZ=(xz -c -z - --threads=0)
COMPRESSLRZ=(lrzip -q)
COMPRESSLZO=(lzop -q)
COMPRESSZ=(compress -c -f)

#########################################################################
# EXTENSION DEFAULTS
#########################################################################
#
# WARNING: Do NOT modify these variables unless you know what you are
#          doing.
#
PKGEXT='.pkg.tar'
SRCEXT='.src.tar.gz'
+1
avatar
Ой, Ой, РЕШЕНИЕ! ЭВРИКА ПРЯМ, афигеть.
ЧТО поменялось-то? Одна строка? и на что поменялось?
И чем предложенное ранее
MAKEFLAGS="-j(количество ядер)"
отличается по смыслу от Вашего
MAKEFLAGS="-j$(nproc)" ???
Это лучше с точки зрения универсальности и защиты от дурака, но ускорит не больше чем если вписать число ядер вручную. Что Вам сразу и предлагалось сделать.

А не кажется ли Вам что предлагать ради одной строчки менять весь файл- это глупо?

У меня 8 ядер. И строка в моём /etc/makepkg.conf выглядит теперь так:
MAKEFLAGS="-j10 -l5", и это действительно резко меняет загруженность процессора. И баланс нагрузки на ядра.
Чтобы понять почему- придется прочесть man make и пару статей. Ссылки я давал, кому нужно читайте.

ЗЫ:- единственное что в Вашем файле полезного- добавлен ключ, влияющий на скорость компрессии. Сжимать пакет будет несколько быстрее, да.

ЗЫЫ: И ещё: PKGEXT='.pkg.tar' вместо PKGEXT='.pkg.tar.xz' — это выигрыш в скорости, но проигрыш в пространстве. SSD у многих пока невелики, а время оно бесконечно.
Лучше будет PKGEXT='.pkg.tar.lzo' Не так быстро как просто .tar, но быстрей чем .tar.xz
Последний раз редактировалось
?
Правильные ответы начинаются с правильных вопросов.
+1
avatar
Хм, при 8 ядрах вы можете "-l7" попробовать.
0
avatar
Пробовал. Но ИМХО, многовато будет. А разницы почти не чувствуется.
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
У вас наверное 8 ядер с учетом HT? Тогда "-l5" нормально.
0
avatar
Ага, с гипертрейдингом конечно.
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
Вы сильно облегчили задачу троллю. Поскольку предполагал в продолжение обсуждения задать вопрос — зачем переписывать дефолтный конфиг make, вместо того чтобы просто указать изменения в одном параметре? Скорее всего автор поста был просто не в курсе. И для перестраховки опубликовал полное содержание конфигурации. Что во второй раз изобличает его как «программиста». Больше похож на 14-летнего школьника со своими хотелками.

С другой стороны хоть чему-то научили человека. Который изначально мог бы предложить обсудить вариант
MAKEFLAGS="-j$(nproc)"

И всё. Вместо того, чтобы многократно хохотать в ветке.

Пишу всё это для менее опытных форумян, которые могли запутаться в этом обилии букв. Но не для того, чтобы кормить тролля. Хотя частично он своей задачи достиг. Как и мы) Уточнив наши знания по предмету. В этом смысле ещё раз благодарю весьма опытного и уважаемого коллегу @dimonmmk за найденную статью на кальке.
+4
avatar
Больше похож на 14-летнего школьника
Просто виндоюзер. Их же код и мануалы читать не учат. Учат «куда нажать».

Спойлер!
— Как известно, — говорил Тиберий, соединяя и разъединяя части оружия, — в современных бластерах три детали: дуло, приклад и курок. Дуло следует направлять, курок — нажимать, а приклад прикладывать к плечу или к противнику — в зависимости от того, какой ведется бой — рукопашный или лучевой. В древних пороховых пистолетах, которые стреляли маленькими железками, был также спусковой крючок. Он являлся крупной неудачей конструкции: во время боя молодые солдаты часто путали, что им следует нажимать, курок или крючок. Поэтому в современных бластерах крючок убран, оставлен только курок, на который и следует нажимать, поскольку больше в бластере нажимать не на что. ©Lleo
Последний раз редактировалось
?
Правильные ответы начинаются с правильных вопросов.
+3
avatar
я прописал MAKEFLAGS="-j$(nproc)" и ничего не изменилось, пока полностью тот код выше не заменил и эффект чёткий получился
0
avatar
Заметный эффект там только из-за предпоследней строчки (PKGEXT='.pkg.tar'), которая отменяет сжатие пакета при упаковке. Это действительно сильно ускоряет, но размер готового пакета получается в среднем в 4 раза больше чем исходный .deb или .tar.gz или нормально сжатый tar.xz
Если Вам не жалко места в каталоге сборки- почему бы и нет? Но учтите- на реальной машине в этом каталоге лежит примерно 1-2 гигабайта сжатых пакетов, а без сжатия будет соответственно 4-8гигов.
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
я прописал MAKEFLAGS="-j$(nproc)" и ничего не изменилось
Раскомментировать строку не забыли случайно?
?
Правильные ответы начинаются с правильных вопросов.
0
avatar
Просьба модераторам дать оценку действиям одного и того же коллеги (с вероятностью близкой к 100%), зарегистрировавшего заранее два ника: @ManjaroLinux и @LinuxMint (с разницей в два дня). И если администрация придёт к выводу, что цель пребывания его здесь обычный троллинг — принять соответствующие меры. Спасибо.
+2
avatar
принять соответствующие меры
Вы имеете в виду насовать ему за щеку и отправить в игнор? Хмм, я думал это задача пользователей.
0
avatar
Чтобы собрать всё в одном месте и на основании изложенного в данной ветке внёс изменения в материал предыдущей публикации. Всем спасибо за конструктивное обсуждение.
+3
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.