LINUX.ORG.RU

systemd 218

 ,


3

5

12 декабря был представлен очередной релиз системного менеджера systemd, совмещающего в себе функции системы инициализации, ведения журнала и управления сессиями пользователей. systemd основан на модели зависимостей (в противовес событийной модели), производит отслеживание процессов запущенных сервисов при помощи механизма cgroups ядра Linux, поддерживает механизмы сокет- и dbus-активации сервисов и предоставляет удобный декларативный синтаксис для описания демонов и других сущностей. Это позволяет производить агрессивную параллелизацию при запуске и остановке сервисов.

В рамках проекта также разрабатывается ряд легковесных приложений и демонов, выполняющих второстепенные, но распространённые задачи по управлению системой — от настройки подсистемы VT (systemd-vconsole-setup) до управления сетью (systemd-networkd) и профилирования загрузки (systemd-bootchart).

Список изменений:

  • Все компоненты systemd, обладающие конфигурационными файлами в /etc/systemd, теперь умеют считывать настройки из соответствующих *.d-директорий в /usr/lib, /run и /etc.

    Например, /etc/systemd/system.conf можно дополнять из /{usr/lib,run,etc}/systemd/system.conf.d/*.conf.

  • Добавлена команда systemctl edit, которая позволяет редактировать unit-файлы (используется редактор, указанный в переменной окружения $EDITOR).

    Возможные режимы работы таковы:

    • (по умолчанию): «режим дополнения», т. е. редактирование нового drop-in'а (создаётся и открывается /etc/systemd/system/$unit.d/override.conf)
    • --full: «режим исправления», т. е. редактирование всего юнит-файла (он предварительно копируется в /etc/systemd/system, если необходимо)
    • --runtime: «режим временных изменений», т. е. вместо /etc используется /run и все внесённые изменения живут только до перезагрузки
  • Команда systemctl is-enabled теперь выводит «indirect» вместо «static» (при этом код возврата равен 0) в тех случаях, когда секция [Install] юнита содержит только директивы Also=, т. е. когда сам юнит не может быть включен, но «включает» другие юниты.
  • Команда systemctl status ЮНИТ теперь выводит также и «предлагаемое» состояние юнита согласно preset'ам. Это показывает, должен ли юнит быть включен согласно дистроспецифичному дефолту.

    Пример:

    $ grep -R remote-fs.target /usr/lib/systemd/system-preset
    /usr/lib/systemd/system-preset/90-systemd.preset:enable remote-fs.target
    
    $ systemctl status remote-fs.target
    ● remote-fs.target - Remote File Systems
       Loaded: loaded (/usr/lib/systemd/system/remote-fs.target; disabled; vendor preset: enabled)
    

  • Команда systemd-run теперь поддерживает отложенный запуск команд в стиле at(1) (параметры командной строки --on-calendar и аналогичные). Это реализовано с помощью создания временного timer-юнита наряду с основным service-юнитом (поддержка создания timer-юнитов как раз была добавлена в API systemd).
  • В команде busctl, предназначенной для работы с шиной D-Bus, добавлены следующие подкоманды и параметры командной строки:
    • busctl capture (захват всех данных, проходящих через шину, в формате libpcap)
    • busctl tree (отображение дерева объектов для конкретного сервиса или для всех сервисов на шине)
    • busctl introspect (отображение подробной информации о конкретном объекте на шине)
    • busctl call, busctl get-property и busctl set-property (предназначение очевидно из названий)
    • busctl --augment-creds= (включение или отключение сбора вспомогательных данных о процессах на шине из /proc)

      Последняя опция по умолчанию включена, но в некоторых случаях это может привести к race conditions, поэтому и была добавлена возможность её отключения.

  • В команде journalctl добавлены параметры командной строки --vacuum-size= и --vacuum-time=, позволяющие принудительно удалить старые файлы журнала. Как легко понять из названий параметров, критерием очистки может быть или суммарный размер файлов журнала, или давность сообщений в конкретном файле.
  • В команде systemd-nspawn добавлены параметры командной строки --link-journal=try-guest и --link-journal=try-host, которые работают аналогично значениям guest и host (а именно — включают объединение журналов хоста и контейнера), но не возвращают ошибку, если на хосте ведение постоянного журнала отключено.

    Параметр командной строки -j теперь является синонимом для --link-journal=try-guest.

  • Команда systemd-inhibit при отображении списка активных ингибиторов теперь поддерживает фильтрацию по типу (block или delay).
  • Для каждой директивы вида ConditionXYZ= в секции [Unit] unit-файлов добавлена аналогичная директива AssertXYZ= в той же секции.

    Отличие между ними состоит в том, что невыполнение Condition-директив приводит к пропуску (игнорированию) юнита, а невыполнение Assert-директив переводит юнит в состояние «failed».

  • В секциях [Scope] и [Service] unit-файлов добавлена директива Delegate=, разрешающая процессам юнита самостоятельно управлять своим поддеревом контрольных групп.
  • В секции [Service] unit-файлов добавлена директива SmackProcessLabel=, позволяющая установить для всех процессов юнита указанную метку SMACK64.
  • Директива ConditionSecurity= unit-файлов теперь может принимать значение audit, что будет приводить к проверке доступности audit-подсистемы ядра.
  • systemd-coredump теперь собирает и кладёт в журнал вместе с core-дампом некоторое количество метаданных об упавшем процессе, а именно:
    • контрольные группы, к которым принадлежал процесс (/proc/$PID/cgroup)
    • список переменных окружения и их значения (/proc/$PID/environ)
    • карту адресного пространства процесса (/proc/$PID/maps)
    • рабочую директорию (/proc/$PID/cwd)
    • корневую директорию (/proc/$PID/root)
    • состояние процесса (/proc/$PID/status)
    • список открытых файловых дескрипторов (/proc/$PID/fd)
  • journald теперь умеет собирать сообщения audit-подсистемы ядра (с обработкой сопутствующих метаданных) и записывать их в общий лог. В частности, это означает, что journalctl становится альтернативой традиционному audit-клиенту ausearch.
  • systemd-networkd теперь поддерживает:
    • конфигурирование VXLAN-устройств (секция [VXLAN] netdev-файлов)
    • указание «стоимости» портов bridge-устройств (директива Cost= в секции [Bridge] network-файлов)
    • настройку правил IP source routing (директива Source= в секции [Route] network-файлов)
    • выбор сетевого интерфейса по его исходному имени (до переименования; директива OriginalName= в секции [Match] link-файлов)
    • изменение MAC-адреса и MTU интерфейса из network-файлов (директивы MACAddress= и MTUBytes= в секции [Link] network-файлов)
  • В systemd-networkd начата работа по реализации протокола PPPoE.
  • NSS-модуль nss-myhostname теперь ресолвит имя «gateway» в IP-адрес шлюза по умолчанию. Если таковых несколько — они сортируются по значению метрики.

    Отмечу, что это изменение не нарушает работу конфигураций, в которых имя «gateway» уже как-либо используется, поскольку модуль nss-myhostname обычно идёт последним в списке NSS-модулей.

  • macvlan-устройства, создаваемые systemd-nspawn внутри контейнеров, теперь имеют стабильные MAC-адреса (в том смысле, что они не будут изменяться каждый раз).
  • systemd-cryptsetup-generator теперь поддерживает указание key-файлов и назначение имён для отдельных устройств из командной строки ядра (luks.key=<UUID>=<имя файла> и luks.name=<UUID>=<назначаемое имя устройства>).
  • В systemd-tmpfiles добавлено действие t — назначение файлу произвольных расширенных атрибутов (xattrs).
  • systemd-localed теперь опционально зависит от libxkbcommon. Эта библиотека будет использоваться для проверки корректности устанавливаемых настроек раскладки клавиатуры X11 (напр., с помощью localectl set-x11-keymap).
  • В systemd-hostnamed список текстовых описаний типов системы (chassis type) был пополнен значением «embedded».
  • systemd-rfkill теперь ассоциирует запоминаемое состояние rfkill'а не с его именем (rfkill0, rfkill1, ...), а с комбинацией его типа (wlan, bluetooth, ...) и свойства ID_PATH.

    Это связано с тем, что имя rfkill'а не обязано сохраняться между перезагрузками или переподключениями устройства. Более того, в последнем случае оно никогда не остаётся прежним.

  • База данных аппаратного обеспечения (hwdb) udev'а теперь содержит базу данных разрешений оптических сенсоров мышей. Она будет использоваться в libinput для автоматической коррекции ускорения курсора.

    Ситуация более подробно описана в этом сообщении.

  • systemd теперь умеет корректно обрабатывать ситуации, в которых система одновременно
    • не имеет файла /etc/machine-id
    • запускается с корневой ФС в режиме «только чтение»

    Для обработки этих случаев была добавлена вспомогательная утилита systemd-machine-id-commit, которая запускается сразу после перемонтирования корневой ФС в режим «чтение и запись» и атомарно перемещает временный файл machine-id из tmpfs в /etc/machine-id.

>>> Объявление о релизе

★★★★★

Проверено: maxcom ()
Последнее исправление: maxcom (всего исправлений: 7)

Ответ на: комментарий от intelfx

Здесь точно никакой разницы.

Разница огромна но по непонятным мне причинам вы отказываетесь ее замечать. Это прямо вера в Поттеринга какая-то. Я ведь могу сделать ненужный free но потерять очистку. Вы тут говорили что systemd можно использовать даже в embedded. У меня плохие новости, в embedded ядра могут собираться с отключенным обнулением страниц при выделении. Это только для десктопов/серверов более-менее гарантировано.

SIGBUS

Тогда мы спасены, память накрылась, очищать нечего. Но в основном вы правы, обработка сигналов в коде оставлена по умолчанию. Еще один баг. Удачи вам с такой системой.

A-234 ★★★★★
()
Ответ на: комментарий от A-234

Я уже более десяти лет ниразу goto не использовал, просто не представляю себе ситуации когда этот оператор нужен.

Есть пара ситуаций. Примеры разумного использования goto встречаются, например, у Ричарда Стивенса в UNIX Network Programming, Vol. 1.

Еще неплохо Дейкстру почитать, он доказал ненужность этого оператора.

Нет. Письмо Дейкстры - чисто субъективная и эмоциональная оценка. Как иначе можно оценить выражения типа

Оператор go to сам по себе просто слишком примитивен; он создает слишком сильное побуждение внести путаницу в программу.

По поводу доказательства ненужности он ссылается на работу Бёма и Якопини, показавших, что любой код _можно_ представить в виде суперпозиции трех основных структур. Но ведь можно с тем же успехом говорить о ненужности циклов, ведь любой цикл можно переписать, использовав рекурсию.

Я не оправдываю полезность goto и не призываю втыкать его во все щели. Но, хотя и с кучей ограничений и оговорок, право на жизнь имеет.

Что касается кода Леннарта. Он, конечно, сыр и мрачен. Его можно сравнивать с прототипом, proof ofconcept, сырым, но достаточно работоспособным. Затем код вычищается уже другой командой (с определенным лагом). Так было с пульсой - сначала это было полное ошибок революционное решето, только потом вычистили. Но ни с какой альсой/осс-ом звуковая система не была адекватной. Сейчас то же самое.

northerner ★★★
()
Ответ на: комментарий от A-234

Еще онин пурист?

Это идеальный вариант управления ресурсами.

anonymous
()
Ответ на: комментарий от A-234

Вообще-то функция савмодостаточно.

В других частях программы достаточно использовать эту функций из отдельного модуля и все.

anonymous
()
Ответ на: системд от denkin

Продолжайте наблюдения, я не хейтер, я ползователь.

t184256 ★★★★★
()
Ответ на: комментарий от A-234

Разница огромна но по непонятным мне причинам вы отказываетесь ее замечать

Разницы между

clear_string(ptr);
free(ptr);
и
clear_string_and_free(ptr);
нет никакой. Все остальные слова (про очистку страниц при выделении, etc) здесь вообще ни при чём: память очищается.

intelfx ★★★★★
() автор топика
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от nanoolinux

А ты попробуй умерить ЧСВ и внятно донести собственную мысль.

Я понимаю, сложно, да... Но ты всё же попробуй.

intelfx ★★★★★
() автор топика
Ответ на: комментарий от ioway

Ух ты, рефакторинг провести? Тестами обвязать?

Я же говорил, что он зассыт свой код на всеобщее обсуждение выставлять и банально сольётся. Так и вышло. Хейтеры только и могут, что на чужой код тявкать и общие словеса разводить - любая попытка перевода в конкретику сразу порождает громкий кудах! вместо кода.

anonymous
()
Ответ на: комментарий от AS

sysvinit практически не меняется много лет, а такой комбайн, как systemd, обречён всегда обновляться.

Ты что - совсем дурак? Тебе который раз твердят, что для тех кто хочет регулярных обновлений есть одни дистрибутивы, для тех кто не хочет - другие, для тех, кто хочет «странного» всегда есть возможность самому стать мейнтейнером... а ты высосал из пальца проблему и теперь бегаешь с кудахтаньем вокруг неё, причитая, что никто не хочет её за тебя решать...

anonymous
()

Сжечь и предать анафеме

cheez ★★★
()
Ответ на: комментарий от intelfx

А если ты на боевой системе собираешь какой-то левак, то ты — опять же, в любом случае — ССЗБ.

Это - пустая отговорка, чтобы оправдать разработку комбайна. А факт в том, что даже сам подход к разработке такого вида допускать нельзя. Не должна куча разнородного кожа быть связана.

Вот, допустим, стоит у тебя на боевой системе systemd-XX. Тут рраз, и в systemd-network remote root. Все срочно-срочно это затыкают/обновляют. Зная, кем это пишется, и помня о пульсе, у меня нет никакой уверенности, что не будут какие-то исправления в init при устранении бага.

На мантейнера списываешь ? Ну вот скажи, зачем мантейнеру устроили головную боль по отслеживанию проблем всех компонент комбайна, а не только одной компоненты в энное время ?

AS ★★★★★
()
Ответ на: комментарий от anonymous

Ты что - совсем дурак ?

Иди в школу и подучись.

AS ★★★★★
()
Ответ на: комментарий от hobbit

Уж на систему инициализации точно мало кто жаловался.

И откуда вы, неучи, набегаете в таком количестве? Как раз кривой и костыльный инит не пнул только ленивый - upstart (мир праху его), openrc (рано или поздно они осилят параллельный запуск), runit, ещё какая-то совсем уж маргинальная срань. Сделать замену инита хотели давно, просто Леннарт оказался первым, кто сумел это сделать удобно и правильно - отсюда и столь массовое внедрение во все основные дистрибутивы.

anonymous
()
Ответ на: комментарий от AS

Зная, кем это пишется, и помня о пульсе, у меня нет никакой уверенности

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

anonymous
()
Ответ на: комментарий от northerner

Что касается кода Леннарта. Он, конечно, сыр и мрачен.

О, ещё одна кудахталка подтянулась... ну давай, покажи свой «правильный» код, а мы откомментируем - и про сыр, и про сало...

anonymous
()
Ответ на: комментарий от A-234

Как один из вариантов

Ну молодец, снизил читаемость и затруднил отладку ибо по коду возврата невозможно понять, в какой именно из функций твоей простыни оно гробанулось. А вот что именно ты улучшил? Тупо убрал goto только ради того, чтобы его убрать? Где хоть какой-то тест валящийся на коде Леннарта, но проходящий на твоём?

anonymous
()
Ответ на: комментарий от anonymous

Ещё раз тебе повторяю - выдуманные тобой проблемы

Это - не выдуманные проблемы, а ошибка в ДНК архитектора проекта. Вопрос стоит не в том, будет ли проблема, а в том, когда она будет.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

Это - не выдуманные проблемы

Ссылку на багтрекер или бздёшь.

Вопрос стоит не в том, будет ли проблема, а в том, когда она будет.

Это у тебя в днк проблема - с какого перепугу ты вообще решил разработчики дистрибутивов ринутся осуществлять твои бредовые фантазии, делая при этом тобою же придуманные идиотские ошибки?

anonymous
()
Ответ на: комментарий от AS

Тут рраз, и в systemd-network remote root.

И поэтому ты решил собрать/поставить systemd другой мажорной версии в свой дистр, вместо того, чтобы только обновить systemd-network(d) из реп своего дистра? И да, чтобы устранить уязвимость в systemd-networkd достаточно обновить только systemd-networkd. Пардон за тавтологию, но тебе это уже несколько раз говорили.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от anonymous

Леннарт оказался первым, кто сумел это сделать удобно и правильно - отсюда и столь массовое внедрение во все основные дистрибутивы.

Не сделал. Идеи может и правильные, но реализация хреновая. Страшно подумать, сколько еще багов вылезет в этом комбайне. Больше фич = больше кода, больше кода = больше багов. Тут кто-то говорил что пульш-ш-ш-аудио вылизали, ждем когда системд вылижут. Хотя он так и останется «поделкой» Лёньки в устах хейтеров.

Deleted
()
Ответ на: комментарий от kir2yar

большая часть лайв-сд шла без поддержки PPPoE

Было такое.

UNiTE ★★★★★
()
Ответ на: комментарий от Ivan_qrt

И да, чтобы устранить уязвимость в systemd-networkd достаточно обновить только systemd-networkd.

Собери пакет, потом поговорим. А то ты, по-моему, меня не понимаешь совсем.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от anonymous

> Это - не выдуманные проблемы

Ссылку на багтрекер или бздёшь.

Марш в школу, учиться. Ты, вообще, понимаешь разницу между ошибкой здесь и сейчас, и потенциально проблемной архитектурой ? Вот я - о втором. А ты, если дальше своего носа не видишь, получается, что не дорос.

AS ★★★★★
()
Ответ на: комментарий от Deleted

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

Ты не понял контекст: «сделал правильно», не в смысле что там вообще багов нет, а в смысле что реализация лучше всех остальных попыток вместе взятых. А так да, софта без багов не бывает, и?

anonymous
()
Ответ на: комментарий от A-234
r = (process_locale() >= 0 &&
     process_timezone() >= 0 &&
     process_hostname() >= 0 &&
     process_machine_id() >= 0 &&
     process_root_password() >= 0) ? EXIT_SUCCESS : EXIT_FAILURE;

Код, как всегда не полон и не аналог, так что я позволю себе дописать до полного main():

int main(int argc, char *argv[]) {
        return (parse_argv(argc, argv) >= 0 &&
        // Не знаю насколько такое корректно. Можно сделать другой вариант, но это не принципиально.
        log_set_target(LOG_TARGET_AUTO),
        log_parse_environment(),
        log_open(),
        umask(0022),process_locale() >= 0 &&
        process_timezone() >= 0 &&
        process_hostname() >= 0 &&
        process_machine_id() >= 0 &&
        process_root_password() >= 0) ? EXIT_FAILURE : EXIT_SUCCESS;
}

Оригинальный код Лёни.

Итого имеем:

  • Для того, чтобы твой код работал, занулять пароль тебе надо в process_root_password(), что делает код менее гибким, не расширяемым и не логичным. Напомню, что опасность вызова free() до зануления ты так и не показал
  • В сравнении с кодом Лёни это ещё большая лапша.
  • Убран goto.
  • Если понадобится, в случае ошибки, например, process_hostname() сделать что-нибудь специфичное(да хоть в лог ошибку записать), у Лёни это решится в 1 строку, а у тебя - в рефакторинг всей лапши.

goto-фобия, это хорошее дело. Но не тогда, кода нормальный код превращают в нечто.

Ну и меня по-прежнему интересует, где в коде Лёни утекающий пароль, и как его, хотя бы в теории, можно вытащить.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от AS

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

Разумеется - ошибка в багтрекере есть факт, а выдуманная тобой «потенциально проблемная архитектуро» есть твой бред и ничего более. То, что выдуманные тобой несуществующие проблемы все упорно отказываются воспринимать иначе как иллюстрацию твоего идиотизма ожидаемо порождает твой баттхёрт. Вывод - слабообразованным людям не стоит фантазировать о вещах, в которых они не разбираются. Для пищеварения вредно :)

anonymous
()
Ответ на: комментарий от AS

по-моему, меня не понимаешь совсем.

По-моему, ты сам плохо себя понимаешь. Иначе не прыгал бы от примера к примеру.

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

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Могу тебе собрать rpm-пакет.
И ты убедишься, что он зависит ровно от тех же библиотек, что и раньше.

Так было бы, если бы ты не собирал эти же библиотеки из этого же src.rpm. Ты, конечно, можешь ослабить межпакетные зависимости, но это чревато проблемами в другое время, например, при реальном обновлении версии. Обычно же внутри подпакетов проставляются зависимости на библиотеки вида «Requires: lib%name = %version-%release». И, в случае нормального ПО, это правильно.

Кроме того, даже если ты поломаешь вышеупомянутый Requires, у тебя из этого src.rpm получится и обновление для того пакета, который обновлять не надо. У него уползёт версия, он попадёт в updates к дистрибутиву, хотя его-то обновлять совсем не надо. Просто потому, что у них src.rpm общий. Ты можешь возразить, что обновления надо делать точечные, или блокировать обновления важных пакетов, но зачем так вообще делать надо было ?

AS ★★★★★
()
Ответ на: комментарий от AS

Кроме того, даже если ты поломаешь вышеупомянутый Requires

А если бы у бабушки был хер... Ты так и не объяснил, почему ты так уверен, что все непременно будут делать твои идиотские ошибки? Начинаю подозревать, что ты просто иллюстрация синдрома Даннинга-Крюгера.

anonymous
()
Ответ на: комментарий от Lincor

RedHat всех подкупил.

а вот и нет. RH всех конкурентов заманивает в ловушку, а сами-то наверняка продолжают делать секретный rhel на sys5init!

anonymous
()
Ответ на: комментарий от anonymous

что все непременно будут делать твои идиотские ошибки?

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

AS ★★★★★
()
Ответ на: комментарий от AS

Пособирай пакеты лет десять, потом возвращайся.

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

anonymous
()
Ответ на: комментарий от anonymous

И после этого мне можно будет бездоказательно обвинять незнакомых людей в том

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

AS ★★★★★
()
Ответ на: комментарий от AS

Потому как тут всё очевидно, и не понять это может только школьник

То-то я смотрю ты уже третью страницу подряд свой бред никак донести не можешь. Ну просто эталонный пример именни Даннинга с Крюгером :-D :-D :-D

anonymous
()
Ответ на: комментарий от AS

тут всё очевидно

любимая присказка пыжащихся неучей

anonymous
()

Почему-то у поклонников программы systemd вся аргументация сводиться к обзывательствам и оскорблениям всех чье мнение отличается от их мнения. А так же к фантазированию о личности оппонента. Почему их еще не банят на ЛОРе? Это ж просто тролли.

anonymous
()
Ответ на: комментарий от anonymous

Почему их еще не банят на ЛОРе?

Потому что не у всех модераторов баттхёрт такой же реактивный как у тебя :-D

anonymous
()
Ответ на: комментарий от anonymous

То-то я смотрю ты уже третью страницу подряд свой бред никак донести не можешь.

Такие слушатели. Одна надежда, что запомнят, а когда-нибудь дойдёт. Пока же вполне ещё можно жить без systemd. Главное - чтобы успело дойти вовремя. :-)

AS ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Могу тебе собрать rpm-пакет. Какой?

Вот этот ldapc++ undefined reference to

Могу наложить на него патч

Не надо. Один уже «патчит» инит, хватит.

ioway
()
Ответ на: комментарий от northerner

любой цикл можно переписать, использовав рекурсию.

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

Что касается кода Леннарта...

Согласен полностью, поэтому с порога его идеи не отвергаю а жду имплементации от BSD.

A-234 ★★★★★
()
Ответ на: комментарий от intelfx

Ну как это нет? А если я делаю free и не делаю cleanup с нужным аргументом, просто забываю. Вы хоть понимаете что free это метод libc локальный для программы?

A-234 ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Для того, чтобы твой код работал, занулять пароль тебе надо в process_root_password()

Бред, вы C не знаете. Я вам написал вариант полностью по функционалу дублирующий оригинал мною процитированный. Просто можете сделать copy/paste и убедиться что никаких перемещений cleanup делать не нужно.

Разработчик не должен думать над вашей задачей, он обязан решать свою.

Ну и меня по-прежнему интересует, где в коде Лёни утекающий пароль, и как его, хотя бы в теории, можно вытащить.

Опять C объяснять надо. Прибегает необрабатываемый сигнал и программа внезапно завершается. А дальше я из userspace анализирую вашу память выделяя ее до одурения на системах где она не обнуляется при выделении. Идите на курсы по C и Linux уже, либо читайте тред, мне за ваш ликбез не платят.

A-234 ★★★★★
()
Ответ на: комментарий от AS

Такие слушатели.

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

anonymous
()
Ответ на: комментарий от anonymous

«Баттхерт» - это презрение и брезгливость? Что ж тут ты прав, мое презрение заслужить очень легко.

anonymous
()
Ответ на: комментарий от intelfx

Тебе уже объяснили выше, но ты не слышишь. Какой смысл мне ещё раз тебе объяснять?

nanoolinux ★★★★
()
Ответ на: комментарий от AS

Так было бы, если бы ты не собирал эти же библиотеки из этого же src.rpm.

ОК. Согласен, не учёл, что там напрямую прописан %{version}-%{release}. Регэкспы туда не воткнёшь, а без зависимости на мажорную версию, только на основе soname, собирать плохо.

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

Осталось выяснить, что в этом может быть плохого на практике, ибо я сомневаюсь, что в rhel/centos без мажорных обновлений сломают systemd.

Вобщем ты прав. Но проблема, имхо, высосана из пальца.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от anonymous

Как я и говорил - чем тупее и безграмотней идиот

Особенно прогрессирование болезни заметно у анонимусов. :-)

Своих мозгов если нет, так подожди ответа Ivan_qrt на моё сообщение, для начала.

AS ★★★★★
()
Ответ на: комментарий от Ivan_qrt

Но проблема, имхо, высосана из пальца.

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

AS ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.