![Arch Linux で責任を持って自動更新を実行するにはどうすればよいでしょうか?](https://rvso.com/image/38695/Arch%20Linux%20%E3%81%A7%E8%B2%AC%E4%BB%BB%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E8%87%AA%E5%8B%95%E6%9B%B4%E6%96%B0%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%3F.png)
私は 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 プロセスとは別に取得する方法はありますか? それとも、インストール ログから無害なものをフィルターする何らかのパーサーを自分で作成する必要があるのでしょうか?
¹ これがいかに愚かなことかと騒ぐ前に、私は運用サーバー上でこれを行わないほど賢明であり、また、大惨事が発生した場合に簡単に復旧できるスナップショット ベースの完全なシステム バックアップなしではこれを行わないという点に注意してください。
答え1
あなたとこのスレッドに偶然出会った人のために明確にしておきたいことがあります。あなたがしたいことはない可能です。Archは、あなたシステムを管理します。その責任の一部には、更新サイクルに参加することが含まれます。
さて、手順更新プロセスの一部は責任を持って自動化できますが、自動化にはなりません-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
。私が間違っていなければ、手動による介入を必要とする更新がある場合、ニュース項目に関する通知も提供されます。
このツールは短期的には生活を少し楽にするかもしれませんが、メーリング リストを賢明かつ熱心にフォローすることの代わりになることはありません。
答え2
非常に優れた古いスクリプトがあります。セーフパック。
編集: このスクリプトは、github でまだ利用可能です: https://github.com/bencahill/binfiles/blob/master/safepac
それは何をし、どのように機能するのでしょうか?
私が普段 Arch を更新する方法は、ニュースを読んでから を実行する
pacman -Syu
か、または を実行してpacman -Syu
、何か問題があればニュースを読むというものです。このスクリプトは他には何もしません。RSS フィードから最新のニュース エントリを取得し、sed
魔法のような処理を行って、ニュースに更新可能なすべてのパッケージの名前を比較します。ニュース内の「 package-name 」と「 package-name- 」を照合し、ニュースのどこかにパッケージ名が表示されている場合は、そのパッケージを無視して、他のすべてだけを更新します。このようにして、問題が発生する可能性のあるものは、手動で問題を調査する時間ができるまで延期され、重要でない更新は自動的に実行されます。通常、スムーズでない可能性のあるアップデートを終えた後、
safepac
まだニュースにあるため特定のパッケージを無視したくないでしょう。それが ignorelist の目的です。そのため、手動でアップデートするたびに、 でそれぞれのニュースエントリを無視リストに追加できます。ここでsafepac -Ia xxx
xxx
ニュース エントリの数です。また、スイッチを使用して、解析に含める最新のニュースの数を指定することもできます-n
。スクリプトは、存在しないエントリをスキップするほどスマートです。非常に短い名前を持つパッケージがニュースに任意に表示される可能性がある (「yes」など) という問題が発生する場合は、 を使用してそれらをホワイトリストに追加し、safepac -Wa
ニュースに表示されても常にインストールされるようにすることができます。
このスクリプトはダイジェスト メール (完全なログを含む) と更新の重要な部分も送信するため、メールの設定が機能している必要があることに注意してください。
出力を解析して
pacman
、次の単語を検索し、ダイジェストに追加します:
"note" "pacnew" "error" "important" "warning" "exists"。
スクリプトは古いですが、アイデアは優れているので、マイナーアップデートがあればおそらくまだ動作するでしょう。
答え3
私は自分のものを使う非常識yaourt
cron で実行します。