LINUX.ORG.RU

Сообщения Shushundr

 

Как выравнивать данные?

Форум — Development

Современные процессоры не такие же, как те процессоры, на которых разрабатывали язык Си. В новых процессорах огромные кеши, которые состоят из «строк», и данные в них пересылаются целиковыми строками (это моя гипотеза), по крайней мере уж очищаются-то точно строками. «This enables several tricks, like making sure neighboring elements of an array never share the same cache line with each other (which may speed up certain kinds of concurrent code).»
Так или иначе, для данных сегодня очень полезно быть выровненными на границу 8 байт (при 64-х битной архитектуре вроде x86_64), или даже на границу 16-ти байт (стек вроде так просят выравнивать). «The choice of both Windows x64 and x86-64 System V to maintain 16-byte stack alignment». С мотивацией, что «некоторые типы данных, такие как SSE- и AVX-векторы, требуют выравнивания по границе 16 байт для корректной работы».

В спецификации языка Си возможность выравнивания типов на границу появилась начиная с C11.

«alignment of any given struct or union type is required by the ISO C standard to be at least a perfect multiple of the lowest common multiple of the alignments of all of the members of the struct or union in question.»

Мне надо, чтобы экземпляры структуры всегда выравнивались на границу 16 байт (в стеке и в куче). Как мне этого добиваться?

Пункт 7.15 стандарта C11:

7.15 Alignment <stdalign.h>
1 The header <stdalign.h> defines four macros.
2 The macro
alignas
expands to _Alignas; the macro
alignof
expands to _Alignof.
3 The remaining macros are suitable for use in #if preprocessing directives. They are
_ _alignas_is_defined
and
_ _alignof_is_defined
which both expand to the integer constant 1.

В C11, вы можете использовать ключевое слово alignas для установки выравнивания структуры.

alignas(16) struct MyStruct {
    // поля структуры
};

«Для выделения памяти для таких типов данных следует использовать функции aligned_alloc и подобные». И тут начинаются разброд и шатание:

  • C11

    void * aligned_alloc (size_t alignment, size_t size)

  • POSIX

    int posix_memalign (void **memptr, size_t alignment, size_t size)

В GCC, для выравнивания структур и объединений, можно использовать атрибут __attribute__((aligned(n))). Но непонятно, требование по выравниванию применятся к самой структуре в целом, или к каждому полю в ней (думал, что второе, а на самом деле оказалось, что первое).

To specify multiple attributes, separate them by commas within the double parentheses: for example, __attribute__ ((aligned (16), packed)). Ну ок, а в C11 как добится такого же эффекта (выравнивание + packed)?

В LLVM реализация стандарта C11 тоже должна быть.

Ещё есть пункт 7.19 с типом max_align_t

7.19 Common definitions <stddef.h>
1 The header <stddef.h> defines the following macros and declares the following types.
Some are also defined in other headers, as noted in their respective subclauses.
2 The types are
...
max_align_t
which is an object type whose alignment is as great as is supported by the implementation in all contexts;

Отсюда, насколько я понимаю, если мне надо выравнивание не менее чем на 16 байтов, использовать malloc в коде нельзя (только aligned_alloc, возможно с alignof).

Я это всё потому пишу, что наткнулся на github-е на фрагмент кода, и мне захотелось сделать по-аналогии, только выравнивать не на 4 байта, а на 16. Наличие четырёх битов позволило бы мне в них закодировать не только разницу в глубине/высоте поддеревьев, но и количество дочерних узлов (два, один, или ни одного). Зная, что в листе нет дочерних, можно выделять под него меньше памяти, а листов в дереве чуть ли не половина от всех узлов.

Стоит ли заморачиваться именно с такой структурой дерева (для экономии памяти), если всё равно результат будут размещать в докере и потеряют много ресурсов в других местах, а предварительная оптимизация - зло? Может быть уже кто-то готовый код написал, никто не видел?

А что, если бы это был не Си, а какой-нибудь Rust?

«Один из способов управления выравниванием в Rust - использование атрибута #[repr(C)]. Этот атрибут гарантирует, что структура данных будет представлена в памяти так, как если бы она была написана на C. Это означает, что порядок и размер полей структуры будут соответствовать тому, что определено в C, и выравнивание будет соответствовать стандартам C»

«использование атрибута #[repr(align(16))] может привести к неэффективному использованию памяти, так как компилятор будет добавлять дополнительные заполнения в структуру, чтобы удовлетворить требование выравнивания.»

Shushundr
()

Смотрю на репозиторий php-overlay и не понимаю.

Форум — Linux-install

Есть такой репозиторий: https://github.com/gentoo-php-overlay/php-overlay

Лидера у проекта php нет, документации тоже нет (только как установить сам php, но не как работать с его приложениями и фреймворками типа Laravel).

В репозитории нет директории eclass. А она определённо должна быть.

Дело в том, что в технологии php есть пакетный менеджер с названием composer, который работает с сайтом https://packagist.org/

Этот composer может скачивать пакеты локально в проект или глобально в систему. Путь Gentoo, это когда пакеты скачиваются и устанавливаются глобально, чтобы использоваться совместно.

На утилиту composer можно повлиять и подсказать ей при помощи переменной окружения ${COMPOSER_HOME}

# composer global --help | head -n 2
Description:
  Allows running commands in the global composer dir ($COMPOSER_HOME)

Можно предположить, что в качестве такой директории выбрана /usr/share/php/Composer

# ls -1 /usr/share/php/Composer
CaBundle
ClassMapGenerator
MetadataMinifier
Pcre
res
Semver
Spdx
XdebugHandler

(но это неточно, потому что внутри этой директории нет директории vendor).

В генте есть практика, когда для использования какой-нибудь утилиты пишется eclass-обёртка с функциями bash, а уже эти функции вызываются из .ebuild-файлов.

Моя проблема в том, что я не вижу такого класса ни в репозитории php-overlay, ни в списке eclass-ов в gentoo.

 , , ,

Shushundr
()

Где лежат исходные тексты pastebin от Calculate?

Форум — Talks

Т.е. исходники вот этого сайта:
http://pastebin.calculate-linux.ru

Или они нигде не выложены, потому что это коммерческий дистрибутив, рассчитывающий на капиталистический заработок денег?

Вижу такие темы:
https://www.gentoo.ru/node/22714
https://www.gentoo.ru/node/27920

А исходные тексты не вижу.

Ранее по теме:
свой pastebin

Перемещено leave из web-development

 ,

Shushundr
()

Как установить кодировку Apache через .ebuild?

Форум — Web-development

Нормальные люди создают внутри приложения .htaccess файл, и вписывают туда строку `AddDefaultCharset UTF-8". (зачем мне web-приложение написано в предыдущей теме)

Но здесь есть три проблемы:

  1. с какого хрена вообще Apache использует ISO-8859-1, если в системе Gentoo по-умолчанию в файловой системе используется utf-8 ?
# eselect locale list
Available targets for the LANG variable:
  [1]   C
  [2]   C.utf8
  [3]   en_US.utf8
  [4]   POSIX
  [5]   ru_RU.utf8 *
  [ ]   (free form)

Проклятый RFC 2616 дотянулся…

  1. файлы .htaccess не всегда работают, а только тогда, когда их обработка сконфигурирована админом сервера Apache при помощи директивы AllowOverride
  2. эти файлы надо будет включать много раз в каждое приложение, это нарушает принцип DRY.

У меня была идея сделать отдельный .ebuild, который будет устанавливать файл /etc/apache2/modules.d/00_default_encoding.conf со строчкой AddDefaultCharset UTF-8 внутри, и добавлять этот ebuild в зависимости каждого web-приложения. Но у такого решения по-прежнему сохраняются недостатки 1 и 3.

В общем, надо как-то переделать .ebuild-файл для Apache, или добавить к нему Reverse Dependency, правильно? Или там уже всё есть, я просто использовать не умею?

Настроек нужных в USE-флагах я не вижу:

[ebuild   R    ] www-servers/apache-2.4.57:2::gentoo  USE="gdbm (split-usr) ssl suexec-caps systemd -debug -doc -ldap (-selinux) -static -suexec -suexec-syslog -threads" APACHE2_MODULES="actions alias auth_basic auth_digest authn_anon authn_core authn_dbm authn_file authz_core authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir env expires ext_filter file_cache filter headers include info log_config logio mime mime_magic negotiation rewrite setenvif socache_shmcb speling status unique_id unixd userdir usertrack vhost_alias -access_compat -asis -auth_form -authn_dbd -authn_socache -authz_dbd -brotli -cache_disk -cache_socache -cern_meta -charset_lite -dbd -dumpio -http2 -ident -imagemap -lbmethod_bybusyness -lbmethod_byrequests -lbmethod_bytraffic -lbmethod_heartbeat -log_forensic (-lua) -macro -md -proxy -proxy_ajp -proxy_balancer -proxy_connect -proxy_fcgi -proxy_ftp -proxy_hcheck -proxy_html -proxy_http -proxy_http2 -proxy_scgi -proxy_uwsgi -proxy_wstunnel -ratelimit -remoteip -reqtimeout -session -session_cookie -session_crypto -session_dbd -slotmem_shm -socache_memcache -substitute (-tls) -version -watchdog -xml2enc" APACHE2_MPMS="prefork -event -worker" LUA_SINGLE_TARGET="lua5-1 -lua5-3 -lua5-4" 7 308 KiB

Можно, конечно, сделать свой особый билд для Apache и в нём добавить патч, или использовать фичу user patches но что-то мне такое решение не кажется правильным, и включабельным в профиль для распространение на множество машин.

Я бы сказал, что «кодировка» - это такая фича, прикрученная сбоку. И эту фичу билды должны иметь возможность требовать через зависимости. Чтобы пакетный менеджер мог такие зависимости вычислить и установить ту кодировку, которую требуют сайты.
А если кодировок требуется несколько, то устанавливать несколько пакетов с кодировками, но конфигурировать их уже не глобально для инстанса Apache, а на приложения, которые её используют.

Пакетных менеджеров, вообще говоря, много. Поэтому логику выбора что и как конфигурировать можно было бы засунуть в отдельную утилиту, и написать к ней .eclass. А в билдах вызывать какую-нибудь функцию, чтобы она символизировала. Такая утилита есть, это webapp-config. Вы в ней установку кодировки видите? И я - нет.

 , ,

Shushundr
()

Почему coreutils не собирают статически?

Форум — Linux-install

Запустил команду emerge -auvDNGK @world
и машина превратилась в тыкву

server /lib64 # cp
cp: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by cp)
server /lib64 # mv
mv: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by mv)
server /lib64 # wget
wget: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory

sftp не может приконнектиться к серверу, потому что там библиотек не хватает. В общем, закачать их туда неясно как.

Насколько я понимаю, надо идти 10 километров зимой в мороз в гору и загружаться с DVD (ISO-диска), потом копировать недостающие файлы и перезапускать.

Я считаю, что надо было собрать coreutils и ssh статически. А мейнтейнеры генты так не считают. Они неправы.

Shushundr
()

Не то понятие назвали слотом

Форум — Talks

Слот, это вроде бы как некоторая версия приложения, только определяет её мейнтейнер, а не разработчик приложения. Это сделано на тот случай, когда разработчик выкатит две версии приложения с одинаковыми номерами версии, но ломающими изменениями. Тогда мейнтейнер такой «хоппа» и установит эти версии в разные слоты. Некоторые скажут, что слоты не для этого, но для чего - они объяснить не могут.

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

Тогда первый слот будет, допустим:
SLOT="[0.0.0-1.2.34]"
следующий SLOT="(1.2.34]-[2.6.1)"
дальше
SLOT="[2.6.1-)"

По-умолчанию: SLOT="(-)"

если возникнет редкая проблема что версии у пакетов одинаковые, а работают они по-разному, ну, можно букву добавить (на усмотрение мейнтейнера):
SLOT="[2.6.1a-)"

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

Возможно, что слоты могут потребоваться не по причине использования разных версий, а по другой какой-то причине. Тогда можно её просто через запятую приписать:
SLOT="(-),debug"

Сравнивать версии всё равно тогда останется возможность.

«Открой для себя сабслоты» напишут они.

Возможность сохранить сабслоты остаётся: SLOT="(-),debug/subslot"

Хотя я так до сих пор и не понимаю, как это работает и какая вообще связь между зависимостями/версиями и запуском (triggering) перестроения.

Shushundr
()

Для чего можно использовать ROOTPATH не такой как PATH ?

Форум — General

В Gentoo есть две разные переменные окружения - PATH и ROOTPATH.

PATH

This variable contains a colon-separated list of directories in which the system looks for executable files. If a name is entered of an executable (such as ls, rc-update, or emerge) but this executable is not located in a listed directory, then the system will not execute it (unless the full path is entered as the command, such as /bin/ls).

ROOTPATH

This variable has the same function as PATH, but this one only lists the directories that should be checked when the root-user enters a command.

Пользователь user видит PATH, а пользователь root - мне непонятно что. Подменой значения переменной PATH на значение переменной ROOTPATH вроде бы занимается утилита sudo:
«sudo -E su will preserve the PATH variable for root»
(интересно, как это работает, если в консоли просто сразу рутом залогиниться, ведь sudo при этом не выполняется?)

Как это можно использовать в мирных полезных целях?

 

Shushundr
()

Хочу сделать сайт, но не знаю, с чего начать

Форум — Talks

Уверен, что вы такого не читали:
https://www.gnu.org/server/standards/gnu-website-guidelines.html

Меня расстраивает, что там ничего не сказано о проекте
https://gnuweb.sourceforge.net/

И уж тем более на Gentoo Wiki нет туториала на тему того, как сделать .ebuild-файл для проекта на основе макросов GNU Web. А ведь это базовые знания!

# equery files perl-m4-shell/autotools-webapps
 * Searching for autotools-webapps in perl-m4-shell ...
 * Contents of perl-m4-shell/autotools-webapps-2.8.0:
/usr
/usr/bin
/usr/bin/conf2lib
/usr/share
/usr/share/aclocal
/usr/share/aclocal/acx_check_erlang_lib.m4
/usr/share/aclocal/acx_check_php_lib.m4
/usr/share/aclocal/acx_check_prog.m4
/usr/share/aclocal/acx_check_webapp_lib.m4
/usr/share/aclocal/acx_define_dir.m4
/usr/share/aclocal/acx_done.m4
/usr/share/aclocal/acx_erlang.m4
/usr/share/aclocal/acx_eunit.m4
/usr/share/aclocal/acx_feature.m4
/usr/share/aclocal/acx_htaccess.m4
/usr/share/aclocal/acx_init_gnuweb.m4
/usr/share/aclocal/acx_init_script.m4
/usr/share/aclocal/acx_package.m4
/usr/share/aclocal/acx_php.m4
/usr/share/aclocal/acx_prefix.m4
/usr/share/aclocal/acx_section.m4
/usr/share/aclocal/acx_silent_v.m4
/usr/share/aclocal/acx_sql.m4
/usr/share/aclocal/acx_webapp.m4
/usr/share/aclocal/amx_common.m4
/usr/share/aclocal/amx_erlang.m4
/usr/share/aclocal/amx_php.m4
/usr/share/aclocal/amx_sql.m4
/usr/share/aclocal/amx_webapp.m4
/usr/share/doc
/usr/share/doc/autotools-webapps-2.8.0
/usr/share/doc/autotools-webapps-2.8.0/AUTHORS
/usr/share/doc/autotools-webapps-2.8.0/ChangeLog.bz2
/usr/share/doc/autotools-webapps-2.8.0/README.bz2
/usr/share/doc/autotools-webapps-2.8.0/README.md.bz2

Допустим даже, что я со всем этим разберусь, и с webapp.eclass и повызываю всё правильно, но это ещё не конец истории.

Кроме файлов для web-сервера нужно залить файлы для SQL-сервера.
А для того в Gentoo нет утилиты dbdata-config, аналогичной утилите webapp-config.

О чём вы вообще там думаете?

Перемещено hobbit из development

Перемещено leave из web-development

 , ,

Shushundr
()

Регистрация на форуме

Форум — Talks

Обычно происходит через email. Это связано с какими-то законами? Ну, типа, что по email можно найти телефон, по нему паспорт и всё это записывается и хранится вечно.

Почему бы не сделать на сайте скачивание Android-приложения, как это сделал github, и регистрироваться через такое приложение, без email?

Если так хочется двухфакторности, то вместо email ещё есть XMPP и XEP-0445.

 , ,

Shushundr
()

Как работает двойной слеш в URL?

Форум — Web-development

Почему страница
https://wiki.gentoo.org/wiki//etc/portage/package.license
существует, а страницы
https://wiki.gentoo.org/wiki/etc/portage/package.license
нет?

Я-то думал, что это одно и то же!

UPD: и не я один:
https://stackoverflow.com/questions/10161177/url-with-multiple-forward-slashes-does-it-break-anything

 

Shushundr
()

Мосбиржа допустила к торгам акции группы компаний «Астра»

Новости — Linux в России
Группа Linux в России

Группа «Астра», куда входит разработчик российской операционной системы Astra Linux, выйдет на биржу с 13 октября, доля акций группы в свободном обращении (free-float) составит около 5%.

Мосбиржа включила акции в раздел «второй уровень» списка ценных бумаг, тикер ASTR.

Аналитики «Альфа-Банка» оценили справедливую стоимость группы «Астра» в диапазоне ₽70–90,7 млрд.

Ранее по теме:
АСТРА готовит IPO
Группа Астра планирует выход на биржу

>>> Подробности

 , ,

Shushundr
()

ГК РФ Статья 141.1

Форум — Talks

Объясните, пожалуйста, что там написано. Слова вижу, а смысл не понимаю.

ГК РФ Статья 141.1. Цифровые права
(введена Федеральным законом от 18.03.2019 N 34-ФЗ)

  1. Цифровыми правами признаются названные в таком качестве в законе обязательственные и иные права, содержание и условия осуществления которых определяются в соответствии с правилами информационной системы, отвечающей установленным законом признакам. Осуществление, распоряжение, в том числе передача, залог, обременение цифрового права другими способами или ограничение распоряжения цифровым правом возможны только в информационной системе без обращения к третьему лицу.
  2. Если иное не предусмотрено законом, обладателем цифрового права признается лицо, которое в соответствии с правилами информационной системы имеет возможность распоряжаться этим правом. В случаях и по основаниям, которые предусмотрены законом, обладателем цифрового права признается иное лицо.
  3. Переход цифрового права на основании сделки не требует согласия лица, обязанного по такому цифровому праву.

Мне непонятно:

  1. какие вообще бывают права (обязательственный и какие иные?)?
  2. что такое обязательственные права?
  3. чем все эти виды прав различаются между собой?
  4. какие признаки установлены законом для информационных систем?
  5. какими другими способами можно обременять цифровые права?
  6. зачем упоминается про третье лицо? Что вообще здесь имеется в виду, кто здесь рассматривается в качестве «третьих лиц»?
  7. Какие основания предусмотрены законом для обладания цифровыми правами?
  8. Какие случаи предусмотрены законом для обладания цифровыми правами?
  9. Про согласие вообще непонятно. Для чего это сделано и чем черевато отсутствие такого согласия.

Рассмотрите на примере:

  1. прав на web-портал «Госуслуги» (и тамошнюю цифровую подпись);
  2. прав на приложение-мобильный клиент для Сбербанка для Android;
  3. прав на программный продукт компании 1С для Linux.

 , ,

Shushundr
()

Как гентушники делают билдсерверы?

Форум — Admin

Если на всём LOR ни разу не упоминается Viagrunts?

Он написан на Ruby, и поэтому конечно же к нему нет .ebuild-файла (только к php-технологии они есть, ко всем другим - нет).

При этом изучить его будет непросто, потому что под ним virsh, ниже libvirt, ниже lxc, в общем это надолго.

Вроде есть какое-то руководство, но там всё как обычно - ничего непонятно. Но вместо Viagrunts там какой-то Mottainai (точнее он не вместо, он поверх - «nodes are executing the steps inside a Docker container or a Vagrant environment») Билда к которому, конечно же, тоже нет.

Я просто уверен, что пользоваться этим умеет ровно один человек (и наверное он уже retired). Точно так же издох проект tinderbox.

Что с вами не так?

 , ,

Shushundr
()

Multiple package instances -> a slot conflict

Форум — Linux-install

Пытаюсь обновить генту командой emerge -auvDN @world, не получается.

При обновлении выдаётся сообщение:

!!! Multiple package instances within a single package slot have been pulled
!!! into the dependency graph, resulting in a slot conflict:

Десять лет назад была такая ветка:
https://forum.calculate-linux.org/t/emerge-e/6296

англы тоже страдают:
https://unix.stackexchange.com/questions/116001/emerge-on-gentoo-fails-with-multiple-package-instances-within-a-single-package

работающего решения, либо объяснения никто не предложил. Идёт 2023-ий год.

Чисто теоретически, вроде там были какие-то ключи командной строки, которые какие-то проверки отключали, но я не помню их на память.

Внимание вопрос: что мешает третьей строкой ниже добавить в вывод фразу «см. страницу … в Gentoo Wiki для исправления этой ошибки: https://...»?

UPD: в man emerge есть ключи:

--ignore-built-slot-operator-deps < y | n >
    Ignore the slot/sub-slot := operator parts of dependencies that have been recorded when packages where built. This option is intended only for debugging purposes, and it only affects built packages that specify slot/sub-slot := operator dependencies  which  are  supported beginning with EAPI 5.

и

--rebuild-if-new-slot [ y | n ]
    Automatically  rebuild  or  reinstall  packages when slot/sub-slot := operator dependencies can be satisfied by a newer slot, so that older packages slots will become eligible for removal by the --depclean action as soon as possible. This option only affects packages that specify slot/sub-slot := dependencies which are supported beginning with EAPI 5.  Since this option requires checking of reverse dependencies, it enables --complete-graph mode whenever a new slot is installed. This option is enabled by default.
    NOTE: If you want to skip all rebuilds involving slot-operator dependecies (including those that  involve  sub-slot  changes  alone), then --ignore-built-slot-operator-deps=y is the option that you are looking for, since --rebuild-if-new-slot does not affect rebuilds triggered by sub-slot changes alone.

UPD2:

--verbose-conflicts
    Make slot conflicts more verbose. Note that this may in some cases output hundreds of packages for slot conflicts.

 , ,

Shushundr
()

Хочу NixOS с Gnome на Xorg-server

Форум — Linux-install

мне пишут:
«it can be a chore to set up a new machine»
https://hoverbear.org/blog/declarative-gnome-configuration-in-nixos/

Можно ли как-нибудь скачать .iso и с него установить без изучения чего-либо?

Ходил на страницу
https://nixos.org/download
там написано:
https://channels.nixos.org/nixos-23.05/latest-nixos-gnome-x86_64-linux.iso
но мне непонятно - это с wayland или без.

Для запуска использую скрипт

#!/bin/bash
# =app-emulation/qemu-8.0.4

DISK_FILE_NAME=image.qcow2

if [ ! -f "${DISK_FILE_NAME}" ]; then
    qemu-img create -f qcow2 ${DISK_FILE_NAME} 11G
fi

/usr/bin/qemu-system-x86_64  -enable-kvm \
	-cpu qemu64 \
	-m 2048M \
	-cdrom latest-nixos-gnome-x86_64-linux.iso \
	-drive file=${DISK_FILE_NAME},format=qcow2

раскладку предлагает английскую, но числа почему-то русские (с запятой вместо точки), где логика? Поменял на английские числа.

установил. Но мне неясно - Xorg там или Wayland.

Даю команду:

echo $XDG_SESSION_TYPE

и оно мне пишет wayland, хотя я его об этом нигде не просил, я хотел x11 и xorg-server.

 ,

Shushundr
()

Можно ли установить и играть в StarCitizen без Windows и бесплатно?

Форум — Games

На десктопе, т.е. не покупая лицензию Windows.
Надо ли для этого устанавливать Android-x86,
или можно ли это запустить в Wine,
или вообще что как делать?

В английской википедии говорится что платформа только Windows.

На ютубе лежат ролики про запуск на Android.

В русской википедии говорится, что обсуждался {1, 2} Linux.

Ранее про игру:
Голосование за выпуск Linux-порта для Star Citizen

Существуют ли российские аналоги этому проекту? Что останавливает?
https://battleofspaceraiders.com/general/contact/

 , ,

Shushundr
()

В Gentoo не хватает безопасности

Форум — Talks

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

Для человеческого социума это нормально - доверять одним и не доверять другим. Недавно компания Google [снова] потеряла лицо.

А в Gentoo нет возможности отключить весь код от Google.

 

Shushundr
()

Autotools: A Practitioner's Guide to GNU Autoconf, Automake, and Libtool

Форум — Talks

Расскажите про книгу
2019, John Calcote, Autotools: A Practitioner’s Guide to GNU Autoconf, Automake, and Libtool (2nd Ed.)
(есть в Library Genesis)

Стоит ли прочитать, читали ли вы эту книгу, как вам содержание, хорош ли автор в раскрытие темы, какие книги по Autotools вы бы порекомендовали (желательно на русском языке).

 ,

Shushundr
()

Как сделать Makefile пригодным для опакечивания?

Форум — Linux-install

Обычно все программы используют autotools, и там всё из коробке. Но вот попалась программа, которая собирается просто при помощи Makefile (и это очень простой файл, не следует никаким соглашениям).

Что надо сделать с Makefile, чтобы он стал пригодным для опакечивания? И как потом к нему писать .ebuild? Есть ли статьи на эту тему?

В то же время, насколько я знаю, для Gentoo надо, чтобы поддерживалась переменная DESTDIR, для того, чтобы можно было собирать программы в PREFIX.


О том, что можно писа́ть
make prefix=/usr
а не только PREFIX=/usr make
сказано в пункте 9.5 Overriding Variables руководства по GNU make.

«If you specify a value in this way, all ordinary assignments of the same variable in the makefile are ignored; we say they have been overridden by the command line argument.»


В каких случаях как надо делать:

  1. make --prefix=/usr
  2. PREFIX=/usr make
  3. make prefix=/usr
  4. make PREFIX=/usr

первое не сработает, потому что параметры make принимает другие
второе не сработает, потому что буквы заглавные, а не строчные
четвёртое тоже не сработает


Почему PREFIX и prefix пишут то большими, то маленькими буквами?
Маленькими буквами написан пример в пункте 16.5 Variables for Installation Directories

«Installers are expected to override these values when calling make (e.g., make prefix=/usr install) or configure (e.g., configure –prefix=/usr).»

И пришло такое написание в руководство GNU make из пункта 7.2.5 Variables for Installation Directories документа GNU Coding Standards

Большими буквами называется переменная окружения EPREFIX, описанная в Gentoo wiki.

В autotools.eclass существует функция eautoreconf, которая вызывает что-то там…

«autotools_run_tool –at-m4flags autoconf «$@»»

Пример использования eautoreconf в ebuild-файле:

src_configure() {
    # Вызывать autoreconf должны авторы распространяемого архива
    # где-то внутри make dist
    # Но если автор ебилда пробует архив стянуть с github, то 
    # отсутствие документации для make dist вручную это косяк Gentoo
    # не проводить же сначала локальную сборку архива make dist
    # а затем распаковку и всё это только чтобы вызов make прошел
    # Просто поместить eautoreconf билде недостаточно

    econf
}

функции autotools_src_configure не видно, поэтому явный вызов eautoreconf надо (если надо) вписывать в текст .ebuild-файла.

В документации на ./configure пишут:

«There are two ways to change the default: when creating configure, and when running it.»
«To accomplish that, use the AC_PREFIX_DEFAULT macro.»
«The user of configure can select a different prefix using the –prefix and –exec-prefix options.»

И написано там это маленькими буквами:

# AC_PREFIX_DEFAULT(PREFIX)
# -------------------------
AC_DEFUN([AC_PREFIX_DEFAULT],
[m4_divert_text([DEFAULTS], [ac_default_prefix=$1])])

Вызвать только eautoreconf недостаточно, ещё можно вызвать пару функций из autotools.eclass

eautoconf Runs autoconf.
eautomake Runs automake.

Вызов программы ./configure выполняется при помощи функции econf внутри src_configure

Передача переменной окружения EPREFIX через параметр --prefix задокументирована в руководстве по разработке ебилдов:

«econf is designed to work with configure scripts generated by GNU Autoconf. It first passes the default options listed below to the configure script, followed by any additional parameters passed to econf.

--prefix="${EPREFIX}"/usr
--libdir is set from the value of the LIBDIR_${ABI} variable in profiles.

Как параметр –prefix обрабатывается внутри ./configure остаётся загадкой. Но из написанного можно предположить, что название PREFIX заглавными буквами (без первой буквы E) это фантазия и нигде не используется.


Зачем в Gentoo назвали переменную EPREFIX, если переменной c именем PREFIX нигде нет? Зачем было добавлять лишнюю букву?

https://devmanual.gentoo.org/ebuild-writing/variables/index.html

EPREFIX The normalised offset-prefix path of an offset installation. See Gentoo Prefix Technical Documentation for more information.

но там тоже про PREFIX ничего нет.

Зато есть в вопросах у пользователей Ubuntu - https://askubuntu.com/questions/891835/what-does-prefix-do-exactly-when-used-in-configure

вероятно негентушные дистрибутивы всё-таки имеют слово PREFIX заглавными буквами? Что там в документации по Debian? И в примере попроще и в примере посложнее используются конкретные значения, переменная окружения PREFIX не упоминается.

Может GNU make не учитывает регистр в названиях переменных?
В пункте 6 How to Use Variables написано:

«Variable names are case-sensitive.»

В пункте 6.10 Variables from the Environment написано:

«Every environment variable that make sees when it starts up is transformed into a make variable with the same name and value.»

А вот здесь мало того, что предлагают использовать заглавные буквы, так ещё и пишут, что это работает. Странно, не должно бы.

И по факту не работает:

$ cat Makefile
.SILENT: all
.PHONY: all

all:
	echo prefix=$(prefix)
$ make prefix=/usr
prefix=/usr
$ PREFIX=/usr make
prefix=

Где вообще описан «стандарт» установки программ при помощи

./configure  
make  
make install  

Почему надо делать именно так? В большом количестве книг? Пользователи привыкли? Так GNU Make не единственная, есть другие, (но они хуже, к ним не пользователи не привыкли)

Использование emake прописано прямо в Package Manager Specification (PMS).
Поэтому использование операционной системы Gentoo тормозит прогресс и переход на Cmake.

 , ,

Shushundr
()

Alt+Shift+Tab спустя 10 лет

Форум — Desktop

У меня такая проблема - Alt+Shift+Tab (комментарий)

только в Mate. @bytecode - что удалось узнать, в чём дело если копать углублённо, и как с этим бороться?

«есть патч, который применяет комбинацию при отпускании, а не нажатии»

Кстати, где он? Мне кажется, что это решило бы проблему, если патч позволяет различать Alt+Shift(отпускание) и Alt+Shift+Tab(отпускание).
То есть, если Tab был нажат, то не переключает раскладку клавиатуры, а если не был нажат, то переключает раскладку.

Вот бага, не закрытая 19 лет:
https://gitlab.freedesktop.org/xorg/xserver/-/issues/258

 ,

Shushundr
()

RSS подписка на новые темы