76

https://wiki.mageia.org.ru/index.php?ti … 0.BA.D0.B0

Разработчик, мейнтейнер, переводчик, по всем вопросам.
Спасибо сказали: alex_q_20001

77

AlexL⇓ пишет:

https://wiki.mageia.org.ru/index.php?ti … 0.BA.D0.B0

Почитал про mass_rebuild и даже собрал тут чего-то. Хотелось бы сказать больше, но, пожалуй, воздержусь от комментариев. Пусть этот способ сборки останется достоянием профессионалов. Благодарю за консультации. smile

78 (2019-06-25 16:51:53 отредактировано alex_q_2000)

Здравствуйте, saahriktu.

Если Вы располагаете временем, хотел бы обсудить с Вами насущную проблему повсеместного бардака в ОС Linux на примере... smile

Вот нашёл я красивую и полезную программу (дисковая диаграмма) Duc: https://pingvinus.ru/program/duc
Иду на сайт программы: https://duc.zevv.nl/

Читаю про сборку и инсталляцию...

Install
To build Duc with its default options, run:

$ ./configure
$ make
$ sudo make install

To get the required dependencies on Debian or Ubuntu, run:
$ sudo apt-get install libncursesw5-dev libcairo2-dev libpango1.0-dev build-essential

On RHEL or CentOS systems, you need to do:
$ sudo yum install pango-devel cairo-devel tokyocabinet-devel

Перед сборкой ставлю devel-зависимости: urpmi --auto pango-devel cairo-devel tokyocabinet-devel

Иду на гитхаб и качаю исходники: https://github.com/zevv/duc/archive/1.4.4.tar.gz
Распаковываю в /duc-1.4.4 и захожу в неё: cd /duc-1.4.4

Имею список файлов:

ls
build/     configure.ac  doc/       gentoo/  INSTALL  Makefile.am  src/      todo     valgrind-suppressions
ChangeLog  COPYING       examples/  img/     LICENSE  README.md    test.sh*  TODO.md

По инструкции делаю следующее:

./configure
bash: ./configure: Нет такого файла или каталога

Здесь хочу ещё раз подчеркнуть, что всё делаю по инструкции с официального сайта.

Чтож. Как обычно ищу переписку адептов и профессионалов в этой сфере...
Через братьев по несчастью и десятые руки нахожу: https://unixforum.org/viewtopic.php?t=87963

Цитата:
Если отсутствует configure, собираем его командами bootstrap или autogen.sh. Если нет и таких скриптов, то пробуем
aclocal
autoheader
automake --gnu --add-missing --copy --foreign
autoconf

Проделываем описанное выше и только теперь делаем то, что написано на сайте:
$ ./configure --prefix=/usr
$ make
#Отлавливаем файлы через porg:
$ porg -lp duc "make install"

Получаем 2 файла:

/usr/bin/duc
/usr/share/man/man1/duc.1

Программа собрана и работает. Проверяем...

#Добавляем каталог в индекс:
duc index /var
#И смотрим результат в гуях:
duc gui /var

http://images.vfl.ru/ii/1561469009/1dbefea4/27001709_s.png

Перед упаковкой в пакет требуется сжать в xz man-файл, иначе он не будет включен в пакет...

cd /usr/share/man/man1/
xz ./duc.1

Но возвращаясь к теме бардака... Почему авторы программы предлагают сразу перейти к ./configure, минуя шаманскую стадию:

aclocal
autoheader
automake --gnu --add-missing --copy --foreign
autoconf

Вопрос возник потому, что этими "граблями" усеяны все пути к трезвому, адекватному пониманию того, что именно нужно делать в Линукс, чтобы достигнуть желаемый результат. Почему всё именно так?

79

Но при чём здесь линукс, если нет файла в git-репозитории этой конкретной проги?
https://github.com/zevv/duc/issues/211

Mageia 9b2
openSUSE 15.4

80

gaurii⇓ пишет:

Но при чём здесь линукс, если нет файла в git-репозитории этой конкретной проги?
https://github.com/zevv/duc/issues/211

А. Вы ещё одну ссылку нашли, как эту проблему решить? )) Так вот я и говорю, как это делается у нормальных людей:
1. Зашёл на сайт
2. Получил всю необходимую информацию
3. Выполнил группу действий и поимел результат

В данном случае, как и в большинстве других с Линуксом имеем другую схему:
1. Заходим на сайт
2. Получаем НЕправильную информацию
3. Начинаем всем миром искать концы
4. Потом вылазит бородатый мужик, говорит "айм сорри, сделайте там autoreconf", но изменения в инструкции на сайте сделать не удосуживается. Кусок бороды здесь, кусок бороды там, всё это размазано попытками участников обсуждения решить проблему своими методами. А методов, как выясняется пруд пруди. И вот время прошло... Исписаны километры форумов, назначены новые гуру и... На сайт заходит следующий нуб... Продолжение Вы уже знаете.

Нет системы, нет стандартов и нет общего вектора развития. Даже в элементарном приходится заниматься доделками/переделками. Почему нет каких-то общих алгоритмов сборки программ? Я не имею ввиду толстенный фолиант с мантрами, а 5-6 страниц понятного текста. Открыл, посмотрел какие файлы присутствуют, каких нет. Поводил по стрелкам пальцем и пришёл к выводу: сделать нужно то-то. Но похоже, уписывать в 5-6 страниц - это не юниксвэй? Юниксвэй - это массовка андеграунда? Нет очертаний системы как таковой, всё из каких-то лоскутов и догадок соткано. Дисциплины нет нигде. Отсюда и назначение для штучных устройств: заточили под определённое железо и пока не устарело продали. Время прошло - ещё нарезали. Что это за подход?

81

alex_q_2000 пишет:

Так вот я и говорю, как это делается у нормальных людей:
1. Зашёл на сайт
2. Получил всю необходимую информацию
3. Выполнил группу действий и поимел результат

В данном случае, как и в большинстве других с Линуксом имеем другую схему:
1. Заходим на сайт
2. Получаем НЕправильную информацию
3. Начинаем всем миром искать концы
4. Потом вылазит бородатый мужик

Бородатый мужик - автор прилолжения на своём сайте не написал, что в репозитории его программы нет файла configure. Ну ладно, допустим мужик ненормальный. Но при чём здесь линукс вообще? Какие нужны алгоритмы? Обычный алгоритм configure - make - make install, если как-то иначе - смотрим файл Install в исходниках. А что линукс - это конструктор, это и так известно и в этом его достоинства и его недостатки, которые есть продолжение достоинств.

Mageia 9b2
openSUSE 15.4

82

gaurii⇓ пишет:

Обычный алгоритм configure - make - make install, если как-то иначе - смотрим файл Install в исходниках

На дворе 21 век. И только в Линуксе нужно встать в какую-то неописуемую раскаряку, чтобы установить программу на компьютер. Сегодня не хватило configure, завтра выяснится, что нужен какой-нибудь ниндзя, кумэйк, симэйк или ещё что. Не устанавливается? Ба! Так это у Вас в системе не хватает заголовочных файлов, других пакетов, других средств сборки, других разных фигней. Их нужно из предыдущей версии брать и собирать в этой. При всём уважении - всё вот это, глобально, ну никак нельзя назвать преимуществом. Поясню иначе...

Вот есть микросхема. Сегодня она содержит 500 транзисторов. Через месяц уже 1500, через 10 лет 2 миллиона. А вот родился человек с нулевым представлением о жизни. Человек ростёт, развивается, берёт в руки паяльник и собирает схему, содержащую микросхему, которая внутри себя содержит 2 миллиона транзисторов.

Человек вовсе не обязан вникать в архитектуру всех технологий и наработок. Из поколения в поколение дискретизация мышления естественным образом меняется: первооткрыватель мыслит штуками, продолжатель мыслит коробками из штук, новое поколение обрабатывает информацию контейнерами из коробок, которые содержат штуки. Линукс же предполагает изучение этих "штук" на всех этапах своего развития. Невозможно что-то сделать в Линукс, если заранее не располагать необходимым представлением о штуках из каменного века. Но прогресс то не стоит на месте. Естественная убыль аудитории, непопулярность ввиду планомерного усложнения всей конструкции - вот последствия такого подхода. Хороший конструктор мог бы состоять не из непонятных штук, а из понятных контейнеров. При всём уважении.

83

alex_q_2000 пишет:

На дворе 21 век. И только в Линуксе нужно встать в какую-то неописуемую раскаряку, чтобы установить программу на компьютер.

В линуксе в большинстве (пакетных) дистрибутивов программы собирают специально обученные майнтейнеры, я как-то уже писал об этом. И чтобы установить программу из репозитория нужно выполнить

Консоль: root
[root@localhost ~]# urpmi programname

или поставить галочку в пакетном менеджере.
Если программы нет в репозитории или хочется извращений, тогда приходится разбираться с разными штуками.

Mageia 9b2
openSUSE 15.4
Спасибо сказали: alex_q_20001

84 (2019-06-26 18:30:08 отредактировано alex_q_2000)

gaurii⇓ пишет:

или хочется извращений, тогда приходится разбираться с разными штуками.

Сорри, мне тут доски на дачу подвозили, пришлось отъехать, поучаствовать. )) Ладно, задам последний вопросище, больше не буду Вас мучить (пока). )) А почему бы на каталог, в который распаковали некий исходник не натравить некую "программу-эксперт"? Скормил ей каталог, она сама определила, что требуется для сборки, сопоставила всё это добро с окружением, в котором запущена и предложила вариант сборки: доустановить то-то, выполнить то-то и т.д. Есть ли такие в природе? smile

85

В Росе есть какой-то скрипт, поищите, только его надо дорабатывать, как впрочем всё, что в Росе есть.

Разработчик, мейнтейнер, переводчик, по всем вопросам.

86 (2019-06-27 11:06:23 отредактировано alex_q_2000)

AlexL⇓ пишет:

В Росе есть какой-то скрипт, поищите, только его надо дорабатывать, как впрочем всё, что в Росе есть.

Привет, AlexL. А как оно примерно может называться? Хоть одним глазком глянуть... drinks


В ходе поисков параллельно открыл для себя checkinstall. Он даже в официальных репах Магии есть. Мега-прикольная программа. Сразу, в процессе сборки создаёт пакет из исходников. Пакует всю выжимку в RPM без спеков. Надо же, всё это время совсем рядом был ещё более наглый, прямой конкурент. big_smile


Оставлю описание checkinstall для кучи: http://ashep.org/2010/sozdanie-paketov- … ckinstall/
А здесь оригинал статьи по проблеме с отсутствующим configure: https://help.ubuntu.ru/wiki/programs_installation

87

alex_q_2000, не помню название, Денис Силаков вроде делал.

Разработчик, мейнтейнер, переводчик, по всем вопросам.

88 (2019-06-27 15:30:58 отредактировано AlexL)

spec-gen:
http://wiki.rosalab.ru/en/index.php/%D0 … d_Programs
https://pkgs.org/download/spec-gen
4 года назад заглохла разработка, что в принципе для Росы обычное явление.

Разработчик, мейнтейнер, переводчик, по всем вопросам.
Спасибо сказали: alex_q_20001

89

AlexL⇓ пишет:

alex_q_2000, не помню название, Денис Силаков вроде делал.

Нашёл ещё про ABF: http://2014.secrus.org/2014/files/022_silakov.pdf Как раз год, когда заглох spec-gen, наверное. Посмотрел презентацию. Довольно толково всё объясняет. Ну да ладно.

AlexL⇓ пишет:

spec-gen:

Посмотрел spec-gen. В питонах я не силён, но по коду и описанию доходит, что скрипт парсит configure.in, configure.ac, CMakeLists.txt, *.cmake или setup.py.
Затем ищет в репах сходные провИдесы зависимостей через подстановку:
---
urpmq --whatprovides pkgconfig(то_что_нашёл)
urpmq --whatprovides pkgconfig("lib"+то_что_нашёл)
urpmq --whatprovides pkgconfig(то_что_нашёл+"-devel")
urpmq --whatprovides pkgconfig("lib"+то_что_нашёл+"-devel")

Например:

urpmq --whatprovides "pkgconfig(cairo)"
lib64cairo-devel|lib64cairo-devel

Дальше какой-то канделябр с поиском локальных путей к файлам установленных пакетов... Ну и вишенка на торте - подобие спека с BuildRequires-ами (а как же Requires:-ы ?) и шапкой из входных параметров при запуске.

Спасибо, AlexL. Кусок безусловно интересный и неоднозначный, по ощущениям. Сдаётся мне, что вариаций поиска должно быть больше, но ход мысли автора примерно ясен. Нужно взять на вооружение... smile

90 (2020-02-25 21:09:20 отредактировано alex_q_2000)

Господа, а как обустроить для себя сборочную из исходников, чтобы ни в чем себе не отказывать?
Цель: скачать любой интересный исходник с гит-хаба и уже не задумываться о средствах сборки и нюансах. Сейчас ставлю вот такую кучу...

Обязательные:
---
gcc
gcc-c++
ninja
make
cmake
automake
autoconf
meson
qtbase5-common-devel (qmake)
vala (компилятор, часто попадался при сборке)

Разное для пакетов:
---
rpm-build (притянет много полезной фигни)
rpm-sign (подписывать пакеты)
porg (в плюшевом, искать файлы после установки)
deps (в плюшевом, ставит BuildRequires из спеков)
checkinstall (собирает файлы в rpm-пакет; вместо make install, удобно)

Понимаю, что для гуру это выглядит неким лоховством, но мне просто гемор не нужен. Может есть смысл что-то добавить? smile

p.s. Кто подскажет пакетов пачку, тот получит водокачку. big_smile

91

urpmi *

Разработчик, мейнтейнер, переводчик, по всем вопросам.

92

AlexL⇓ пишет:

urpmi *

Очень информативно, AlexL. lol

Ладно, обещания надо выполнять. Сорри, красные закончились.

http://images.vfl.ru/ii/1561720891/86979738/27036510_s.jpg

93 (2019-12-17 04:27:56 отредактировано Olej)

alex_q_2000⇓ пишет:

Читаю про сборку и инсталляцию...

То что вы пытаетесь делать - это вовсе не "сборка", а конфигурирование-компиляция-сборка из исходного программного кода.
Для такой сборки существует несколько разных технологий, то с чем вы столкнулись: autoconf, automake, libtools и т.д. - это очень старый (1970-1980) способ сборки в UNIX, не только Linux. Этот способ рассчитан был на программистов (даже не на адаптаторов ... и уж никак не на пользователей).

gaurii⇓ пишет:

что в репозитории его программы нет файла configure.


Поскольку это ориентировано было на разные UNIX (ещё до появления слова Linux), то и ./configure не обязательно должен присутствовать - он в разных ОС генерируется как-раз с помощью aclocal, autoheader, automake, autoconf.
Готовый ./configure вы получаете (вам предоставляют) только тогда, когда исходники предназначены исключительно под Linux (и так бывает). 

alex_q_2000⇓ пишет:

Вопрос возник потому, что этими "граблями" усеяны все пути к трезвому, адекватному пониманию того, что именно нужно делать в Линукс,

Ничего подобного.
В Linux, в разное время, были созданы несколько разных технологий сборки из исходников (например cmake), но вы их в своих рассуждениях свалили все в кучу ... а потом у вас и такая неразбериха.

Про технологии сборки можете почитать здесь: Разработка программных проектов в Linux

P.S. Только к сборке пакетов Linux (о чём названа тема) это не имеет ни малейшего отношения - это всё относится к области сборки приложений (проектов, библиотек), которые к процессу инсталляции в системе не имеют никакого отношения. И эта сборка приложений никак не различается в самых разнообразных дистрибутивах Linux.
И только уже после сборки приложения можно делать (или не делать) сборку пакета в том или другом конкретном дистрибутиве Linux.

94 (2020-02-28 19:09:33 отредактировано alex_q_2000)

Вопрос к мейнтейнерам... yikes

Имеется:
---
%pre - этот сценарий выполняется перед установкой пакета в систему
%post - этот сценарий выполняется после установки пакета в систему
%preun - этот сценарий выполняется перед удалением пакета из системы
%postun - этот сценарий выполняется после удаления пакета из системы

Различаем процедуры установки пакета от обновления пакета:
---

%pre и %post
    if [ $1 -eq 1 ]; then действия; fi - первая установка пакета
    if [ $1 -eq 2 ]; then действия; fi - обновление пакета
%preun и %postun
    if [ $1 -eq 1 ]; then действия; fi - обновление пакета
    if [ $1 -eq 0 ]; then действия; fi - деинсталляция пакета

Работаем с сервисом systemd в спеке (без start, ибо не нужен):
---

%pre
    if [ $1 -eq 2 ]; then systemctl disable мой_сервис.service; fi
%post
    systemctl enable мой_сервис.service
%preun
    if [ $1 -eq 0 ]; then systemctl disable мой_сервис.service;  fi
%postun
    if [ $1 -eq 0 ]; then systemctl daemon-reload; fi

Результат - всё работает: сервис ставится, врубается, при обновлении пакета предварительно отрубается, затем опять врубается, делается рефрэш всех сервисов, а при удалении пакета вырубается и удаляется.

Однако, вот здесь: https://docs.fedoraproject.org/en-US/pa … s/#_syntax в разделе "Scriptlets" написано:

BuildRequires: systemd-rpm-macros
[...]
%post
%systemd_post apache-httpd.service

%preun
%systemd_preun apache-httpd.service

%postun
%systemd_postun_with_restart apache-httpd.service

Дальше можно найти ещё много разных штук из той же оперы: %systemd_post, %systemd_preun, %systemd_postun_with_restart, %systemd_user_post, %systemd_user_preun и т.д.

Вопрос:
---
Что это за лабудень (%systemd_бла_бла_бла)? Если это дополнительные костыли для работы с юнитами systemd в спеках, то где про них можно почитать? Или это какая-то абстрактная фигня, чтобы народ из спеков до пенсии не вылазил?

95

alex_q_2000⇓ пишет:

Что это за лабудень (%systemd_бла_бла_бла)? Если это дополнительные костыли для работы с юнитами systemd в спеках, то где про них можно почитать? Или это какая-то абстрактная фигня, чтобы народ из спеков до пенсии не вылазил?

В общем, отвечаю сам себе. Вверху был указан BuildRequires: systemd-rpm-macros. Т.е. чтобы использовать волшебные макросы вида %systemd_post, %systemd_preun и т.д., требуется пакет systemd-rpm-macros. Он есть только в Fedora и OpenSuse. В Магии походу этого добра нет и слава тебе, Госспади. Одним геморроем меньше.