web-dev-qa-db-ja.com

Arch Linuxで責任あるアップデートを自動的に実行するにはどうすればよいですか?

私はArch Linuxの新人で、まだそのパラダイムのいくつかに慣れています。私は、かなり構造化されており、いくつかの点で予測可能だった別のディストリビューションからの多くの習慣を持っています。

いくつかのシステムで私がやりたいことの1つは、cronジョブがすべてのシステムパッケージの自動更新を実行できるようにすることです。これは非常に簡単なことのようですが、システムから意味のあるフィードバックが欲しいので、システムが動作していることを発見するまでそれを無視してしまうほど冗長ではありませんでした。

  • pacmanの完全な出力は不要です。ダウンロードにかかった時間や、53のアップデート46にあることは気にしません。
  • ほとんどの場合、私は成功を気にしません。
  • エラーは気にします。更新の実行が失敗した場合、それについて知りたいので、特定のエラーメッセージにパッチを適用する必要があります。
  • インストール時に出される「通知」に注意します。たとえば、今日のsystemdアップデートは次のように述べています:

    _:: coredumps are no longer sent to the journal by default. To re-enable:  
    echo >/etc/sysctl.d/50-coredump.conf \  
        "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s %t %e"
    _

    またはファイルシステムがこれを作成しました:

    _warning: /etc/group installed as /etc/group.pacnew  
    warning: /etc/passwd installed as /etc/passwd.pacnew  
    warning: /etc/shadow installed as /etc/shadow.pacnew
    _

    この最後のカテゴリは、パッケージセット全体で非常に一貫性がないように思われるため、実際にこの質問をするきっかけになりました。これらの一部はpost_upgrade()によって生成され、他はinstall()によって生成されるようです。それらはstdoutに書き込まれることもあれば、stderrに書き込まれることもあります。メッセージの形式は大きく異なります。ブロック全体が何らかの方法でインデントされて接頭辞が付けられている場合もあれば、エコーされた文字列だけがある場合もあります。

システムへの介入が必要になる可能性があるが、それ以外の場合は気にしないことについて知りたい。このデータをインテリジェントに管理し、システム管理を簡素化するツールはありますか?パッケージによって生成された出力を、それらをインストールするpacmanプロセスとは別に取得する方法はありますか?それとも私は自分でインストールログから無害なものを除外するパーサーのようなものを書くのですか?

allこれがどれほど愚かであるかを説明する前に、私は実稼働サーバーでこれを実行しないほど賢く、スナップショットベースのシステム全体のバックアップなしでは、大災害の発生時に簡単に回復できることに注意してください。

15
Caleb

このスレッドで発生する可能性のあるあなたと他の人の両方に対して明確にしたいと思います。あなたがしたいことは不可能です。 Archは、youがシステムを管理することを期待しているという事実を明かしません。その責任の一部は、更新サイクルに存在しています。

これで、責任を持って自動化できる更新プロセスのステップがありますが、自動化された-Syuになることはありません。アップグレードのためにそこにいる必要があるだけです。

たとえば、インストールが必要なパッケージをダウンロードする(ただし、インストールはしない)cronジョブを設定することができます。以下は、pacmanドキュメントからの抜粋です。

SYNC OPTIONS
...
-w  --downloadonly
    Retrieve all packages from the server, but do not install/upgrade anything.

次に、cronジョブをセットアップしてSudo pacman -Syuwを実行します。私はcronに精通していないか、それはスケジューリング機能です。ただし、特定の条件が満たされた後にのみジョブを実行できる場合(たとえば、特定の値を返すコマンドなど)、必要に応じて新しいパッケージのダウンロードをトリガーするのはかなり簡単です。

たとえば、checkupdates | wc -lに対してチェックを実行することを想像します。ゼロを超える数値が返された場合は、ダウンロードをトリガーできます。ただし、これは、アップグレードを処理する準備ができており、-Syuの実行に代わるものではありません。

質問の最後の部分である、アップグレード中に何が起こったかの出力を取得するには、/var/log/pacman.logを探します。興味のあるすべてのエラー情報が含まれています。


ツール があります。これは、慣れていないユーザーにとってpacmanを少しフレンドリーにすることを目的としています。私が間違っていない場合は、手動による介入を必要とする更新が必要な場合に、ニュース項目に関する通知も提供されます。

このツールは、短期的にはあなたの人生を少し単純にするかもしれませんが、それは、メーリングリストをフォローすることに慎重かつ熱心に取って代わるものでは決してありません。

11
HalosGhost

本当に良い仕事をする古いスクリプトがあります。 safepac と呼ばれます。

編集:このスクリプトは引き続きgithubから入手できます: https://github.com/bencahill/binfiles/blob/master/safepac

それは何をし、どのように機能しますか?

Archを通常更新する方法は、ニュースを読んでからpacman -Syuを実行するか、単にpacman -Syuを実行して、問題が発生した場合はニュースを読むことです。このスクリプトは他に何もしません。RSSフィードから最新のニュースエントリを取得し、sedマジックを実行して、ニュースに利用可能な更新があるすべてのパッケージの名前を比較します。ニュースの「package-name」と「package-name-」に一致します。パッケージ名がニュースのどこかに表示された場合、パッケージは無視され、他のすべてのパッケージのみが更新されます。この方法では、問題が発生する可能性のあるものはすべて、問題を手動で検査する時間まで延期されますが、重要でない更新は自動的に行われます。

通常、スムーズではない可能性のある更新に対処した後は、特定のパッケージがまだニュースにあるため、safepacに特定のパッケージを無視させたくないでしょう。これが無視リストの目的です。したがって、手動で更新するたびに、safepac -Ia xxxを使用してそれぞれのニュースエントリを無視リストに追加できます。ここで、xxxはニュースエントリの番号です。 -nスイッチを使用して、解析に含める最新ニュースの数を指定することもできます。スクリプトは、存在しないエントリをスキップするのにも十分なほどスマートです。ニュースに任意に表示される可能性のある非常に短い名前(「yes」など)を持つパッケージで問題が発生した場合は、safepac -Waを使用してそれらをホワイトリストに追加し、それらがニュース。

このスクリプトはダイジェストメール(完全なログ付き?)と、更新の重要な部分も送信するため、有効なメール設定が必要です。

pacman出力を解析してこれらの単語を探し、ダイジェストに追加します。
「注意」「pacnew」「エラー」「重要」「警告」「存在」。

スクリプトは古いですが、アイデアは良好であり、マイナーアップデートがある場合でもおそらく動作します。

1
Lesto