
В systemd-240 есть ошибка, которая влияет на jackdbus, что ломает всю мою аудионастройку. Ошибка была исправлена в systemd-241. Есть ли способ обновиться до systemd-241?
решение1
Другим вариантом будет перекомпиляция systemd-240 с примененным патчем, предполагая, что он полностью применим к systemd-240.
Если это возможно, то это действительно просто. Вам просто нужно добавить ваш патч в список патчей, которые уже используются в Ubuntu.
решение2
Отказ от ответственности
Я не предлагаю этот метод как хорошее решение проблемы. Попробуйте на свой страх и риск.
Более того, Ubuntu 19.10 поставляется с systemd 242, поэтому, если вы планируете обновиться до Ubuntu 19.10, нет смысла пробовать это.
Исправление «поверх» текущей установки
В основном это идея, которая находится вответ solsTiCe: пропатчить исходный код дистрибутива. Но тогда: не переустанавливайте всю systemd
систему. Заменить только systemd
исполняемый файл — это можно сделать, поскольку патч влияет только на код systemd
. Таким образом я уверен, что не испорчу сильно текущую установку.
Мой путь к решению не был таким «линейным», как я собираюсь его описать, потому что сначала я хотел пропатчить исходную систему v240 (используя нужные биты из v241), собрать ее и установить вручную. Затем я перешел к использованиюpbuilder.
Следующее описание написанобудтоЯ понял это просто. Надеюсь, я не забыл детали в процессе очистки шагов.
Следоватьэто руководствоустановитьpbuilder, подготовьте среду для сборки ( sudo pbuilder create --distribution disco --debootstrapopts --variant=buildd
), загрузите исходный код ( apt-get source systemd
). Вы получите три файла (два архива и .dsc
) и каталог. Поэтому, скорее всего, вы захотите выполнить команду apt-get в совершенно новой папке, чтобы избежать загрязнения файлов в текущем каталоге.
Затем клонируйтерепозиторий systemd githubи проверьте тег v241 ( git checkout tags/v241
).
Теперь diff -u
между Ubuntu src/core/main.c
и темой тега v241 для получения патча, скажем my.patch
. Я отредактировал его, чтобы удалить вещи, которые могут повлиять не только на ограничение memlock (аналогичное исправление было сделано также для количества открытых файловых дескрипторов, и я сохранил и его), а также чтобы получить заголовки в правильном виде:
--- a/src/core/main.c ....
+++ b/src/core/main.c ....
Вместо a
and b
, конечно, можно использовать другие имена.
Внутри папки systemd-240
(полученной при запуске apt-get source systemd
) есть debian/patches
. Скопируйте my.patch
туда и добавьте имя файла в конец debian/patches/series
.
Попробуйте собрать пакет ( sudo pbuilder build systemd_240-6ubuntu5.dsc
); он также должен получить зависимости, и если все в порядке, у вас есть in .deb
; /var/cache/pbuilder/result/
но это «оригинал».
Смените каталог systemd-240
и запустите pdebuild --use-pdebuild-internal
.
Через некоторое время… /var/cache/pbuilder/result
там новый .deb
(то же имя, что и раньше…), но на этот раз это пропатченный. Вы должны увидеть строку, если вы это сделаете
tar -tJf /var/cache/pbuilder/result/systemd_240-6ubuntu5.debian.tar.xz |grep my.patch
при условии, что вы назвали свой патч my.patch
и что он tar.xz
назван так же.
Теперь распакуйте .deb
в a-folder
( dpkg-deb -R systemd_240-6ubuntu5_amd64.deb a-folder
), и как root скопируйте a-folder/lib/systemd/systemd
в /lib/systemd/
. Не забудьте сделать резервную копию оригинала /lib/systemd/systemd
(я переименовал его в __systemd
). Если что-то пойдет не так, вы можете заменить новый на старый, скорее всего, из оболочки восстановления.
После перезагрузки ulimit -l
должно появиться сообщение unlimited
(в зависимости от вашей конфигурации, но я полагаю, вы дочитали до этого места, потому что это то, что вы ожидаете от своего пользователя в аудиогруппе).
Ресурсы
- система v240 исправлена; Я не компилировал и не пробовал это — если выможети хотите обновиться
systemd
с оригинальных версий, то я предлагаю использовать последнюю версию, выбрав последний тег, например, сегодняв243. - патч каксуть на github, этот применён к исходному коду Ubuntu
systemd
, версия 240-6ubuntu5.7.
Этот патч не создается так, как описано в предыдущем разделе, потому что яразличалисьисходный код Ubuntu с уже пропатченными версиями main.c
вы можете найти ввышеупомянутая ветвь. Конечный результат не должен сильно отличаться.
Заключительное замечание
Когда я впервые заметил эту проблему, некоторое время назад, проверив, что конфигурация в порядке, я решил подождать, пока Ubuntu исправит ее (мне не удалось связать ее с ошибкой systemd).
Но сегодня это помешало мне сделать то, что я действительно хотел, поэтому я решил, что пришло время что-то с этим сделать.
Здесьвкомментарий 7вот где я нашелошибка systemdупомянул впервые, тогда я и нашел этот вопрос.
Несколько часов спустя я увидел также объявление двухдневной давности от 19.10.
Нет нужды указывать, что замена исполняемого файла в «системе, контролируемой пакетами» — не обязательно очень хорошая идея. В данном случае, однако, меня это устраивает.