
systemd-240 にバグがあり、jackdbus に影響を及ぼし、オーディオ設定全体が壊れてしまいます。このバグは systemd-241 で修正されました。systemd-241 にアップグレードする方法はありますか?
答え1
もう 1 つのオプションは、パッチを適用して systemd-240 を再コンパイルすることです (パッチが systemd-240 に正常に適用されると仮定)。
可能であれば、それは実に簡単です。Ubuntu で既に使用されているパッチのリストにパッチを追加するだけです。
答え2
免責事項
この方法は問題に対する良い解決策だとは言いません。自己責任で試してください。
さらに、Ubuntu 19.10 には systemd 242 が付属しているため、Ubuntu 19.10 にアップグレードする予定がある場合は、これを試す必要はありません。
現在のインストールに対する修正
基本的にそれはsolsTiCeの答え: ディストリビューションのソースにパッチを当てます。ただし、systemd
システム全体を再インストールしないでください。systemd
実行可能ファイルのみを置き換えます。これは、パッチが のコードにのみ影響するため可能ですsystemd
。この方法により、現在のインストールを大幅に混乱させることはなくなります。
解決策への道筋は、これから説明するほど「直線的」ではありませんでした。最初は、元のシステムv240にパッチを当てて(v241の適切な部分を使用して)、ビルドしてカスタムインストールしたいと考えていたからです。その後、pビルダー。
以下の説明が書かれていますかのように素直に理解できました。手順を整理する過程で詳細を忘れていないことを願います。
フォローするこのハウツーインストールするpビルダー、ビルド環境を準備し ( sudo pbuilder create --distribution disco --debootstrapopts --variant=buildd
)、ソースをダウンロードします ( apt-get source systemd
)。3 つのファイル (2 つのアーカイブと.dsc
) とディレクトリを取得します。したがって、現在のディレクトリのファイル汚染を避けるために、新しいフォルダで apt-get コマンドを実行する必要があるでしょう。
次にクローンsystemd githubリポジトリタグv241(git checkout tags/v241
)をチェックアウトします。
ここでdiff -u
、Ubuntusrc/core/main.c
とタグ v241 の間でパッチを取得しますmy.patch
。memlock 制限だけでなく、それ以上に影響する可能性のあるものを削除するように編集しました (開いているファイル記述子の数に対しても同様の修正が行われ、これも保持しました)。また、ヘッダーを次の形式で正しく取得するようにしました。
--- a/src/core/main.c ....
+++ b/src/core/main.c ....
a
もちろん、 の代わりにb
他の名前を付けることもできます。
フォルダー内systemd-240
( を実行して取得apt-get source systemd
) には がありますdebian/patches
。my.patch
そこにコピーし、 の末尾にファイル名を追加しますdebian/patches/series
。
パッケージ ( sudo pbuilder build systemd_240-6ubuntu5.dsc
) をビルドしてみてください。これにより依存関係も取得され、すべてが正常であれば が に含まれます.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
として にコピーしますa-folder/lib/systemd/systemd
。元のファイル( に名前を変更しました)/lib/systemd/
をバックアップすることを忘れないでください。 何か問題が発生した場合、リカバリ シェルなどから、新しいファイルを古いファイルで置き換えることができます。/lib/systemd/systemd
__systemd
再起動後、ulimit -l
次のように表示されるはずですunlimited
(設定によって異なりますが、オーディオ グループのユーザーに期待される内容であるため、ここまでお読みになったと思います)。
リソース
- システムv240パッチ適用; 私はこれをコンパイルして試していませんが、もしあなたができる元のリリースからアップグレードしたい場合
systemd
は、最新のタグを選択して最新バージョンを使用することをお勧めします。たとえば、今日は243ページ。 - パッチとしてgithub の gistこれは、Ubuntu の
systemd
ソース、バージョン 240-6ubuntu5.7 に適用されました。
このパッチは前のセクションで説明したようには生成されません。異なるmain.c
すでにパッチが適用されたUbuntuのソースは、前述のブランチ最終結果はあまり変わらないはずです。
最後に
しばらく前にこの問題に初めて気づいたとき、構成が問題ないことを確認した後、Ubuntu が修正するのを待つことにしました (systemd のバグまでさかのぼることはできませんでした)。
しかし、今日はそれが私が本当にやりたいことを妨げてしまったので、何か対策を講じる時だと判断しました。
ここでコメント 7私が見つけたのはsystemdのバグ初めて言及された後、この質問を見つけました。
数時間後、2日前の19.10の発表も見ました。
「パッケージ制御システム」で実行ファイルを置き換えることは必ずしも良い考えではないことは言うまでもありません。ただし、この場合は問題ありません。