リポジトリのサイレント自動更新を有効にする方法は?


43

ここで、Google Chromeのサイレント自動更新を有効にする方法を読みました。ただし、Spotify、Dockyなど、サイレントアップデートを有効にする他のリポジトリがあります。

Ubuntu 10.04システムでこれを実行しようとしています。しかし、この質問はすべてのUbuntuバージョンに当てはまります。私が持っている無人アップグレードパッケージがインストールされています。

これどうやってするの?


サイレントセキュリティアップデートが必要ですか?または介入なしでインストールされたすべての更新プログラム?どうして?
david6

1
ユーザーリポジトリを含むほとんどすべての更新。
nik90

回答:


66

まず、インストールgksu

sudo apt-get install gksu

お使いのシステムの無人アップデートを有効にする最も簡単には、ファイルを編集することで50unattended-upgrades内部を/etc/apt/apt.conf.d/例えば、あなたの好みのテキストエディタで:

gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades

その中で、Allowed Originsブロックのコメントセクションをコメントアウトする必要があります

変化する

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
//      "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
        "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

更新したいUbuntuリポジトリにないソフトウェアの場合、ファイルにオリジンアーカイブを追加する必要があります。それらがPPAに何であるかを見つけるには、フォルダーを開きます/var/lib/apt/lists/。これは、各パッケージリソースの状態情報のストレージ領域です。探しているのは、名前がReleaseで終わるファイルです。

テキストエディタで開きます。つまり、Google Chromeの場合:

gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release

Origin: Google, Inc.
Label: Google
Suite: stable
Codename: stable
Version: 1.0
Date: Thu, 17 Nov 2011 19:09:01 +0000
Architectures: i386 amd64
Components: main
Description: Google chrome-linux repository.

起源は明らかであり(Origin: Google, Inc.)、アーカイブはSuiteの下にあるもの(Suite: stable)になります。

OriginまたはのいずれかSuiteが欠落している場合、空の文字列になります。ただし、両方が不足している場合は、おそらく同じソースの他のソースを含めずに、そのソースを無人アップグレードで使用することはできないことに注意してください。

これらの2行を書き留めたら、この例のために、この50unattended-upgrades形式"<origin>:<archive>";を使用してファイルを編集し、行を追加する必要があります"Google\, Inc.:stable";

Google Chromeの起源はややややこしいですが、そこにはエンドポイントとカンマがありますが、ほとんどのリリースファイルは読みやすいでしょう。

別の例として、Node JSソースNode Sourceは、アーカイブではなくオリジン()を指定します。ので、それを一致させることができます"Node Source:";

許可されたOriginsは、シェルスタイルのワイルドカード(より具体的には、Pythonのfnmatch())を使用して照合されます。競合するソースを含めないように十分に注意している場合、のようなものを書くことができ"Node *:*";ます。


50unattended-upgrades編集する前にファイルのバックアップを作成することを忘れないでくださいsudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak

ファイルで行われた変更をテストするにsudo unattended-upgradesは、パラメータ--dry-runとで使用できます--debug

--dry-run アップグレードを実際にインストールせず、すべてが正常であることを確認して検証する以外は、無人アップグレードサイクルを実行します。

--debug 詳細モードを有効にします。

あなたはいつものログを確認することができますunattended-upgrades/var/log/unattended-upgrades/unattended-upgrades.log


ファイルを編集することにより、無人アップグレードの構成を変更できます。構成の/etc/apt/apt.conf.d/10periodicオプションは/etc/cron.daily/aptスクリプトヘッダーにあります。それらを読んで、無人アップグレードの頻度を設定してください。


2
ありがとう...非常に詳細です!Googleの後に\を付けた理由を尋ねてもいいですか?
nik90

原点には特殊文字があるため、カンマのエスケープ文字です。あなたが見つけるほとんどの起源はそれを持っていません。
ブルーノペレイラ

1
@josいいえ、それはそれが動作する方法--dry-runです、更新されたリストに利用可能な更新があるかどうかをチェックし、それらを出力します。あなたの設定が何であれリストが更新され/etc/cron.daily/apt、手動で実行してもリストは更新されません
ブルーノペレイラ

1
対応するリリースファイルにスイートがリストされていない場合、アーカイブ名として何を指定すればよいですか?
hsivonen

2
自動化されたアプローチもこちらで確認してください:askubuntu.com/a/792621/417607
Abhishek Bhatia

14

@Bruno Pereiraの回答の自動化されたアプローチ:( 回答が役立つと思う場合は、githubリポジトリにスターを付けることを検討してください。)

コードリンク:https : //github.com/abhigenie92/unattended_upgrades_repos

  • 追加するリポジトリを確認します。

    $ python automatic_upgrade.py 
    Add repos:
    "Ubuntu:xenial";
    "LP-PPA-kubuntu-ppa-backports:xenial";
    "LP-PPA-tuxonice:xenial";
    "LP-PPA-webupd8team-sublime-text-3:xenial";
    
    Skipping files due to not present origin or suite. Or origin being a url.:
    packagecloud.io_slacktechnologies_slack_debian_dists_jessie_InRelease
    tiliado.eu_nuvolaplayer_repository_deb_dists_xenial_InRelease
    
  • 次に、編集/etc/apt/apt.conf.d/50unattended-upgradesしてそれらを含めます。

    // Automatically upgrade packages from these (origin:archive) pairs
    Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        "${distro_id}:${distro_codename}-updates";
        "${distro_id}:${distro_codename}-proposed";
        "${distro_id}:${distro_codename}-backports";
      "Ubuntu:xenial";
      "LP-PPA-kubuntu-ppa-backports:xenial";
      "LP-PPA-tuxonice:xenial";
      "LP-PPA-webupd8team-sublime-text-3:xenial";
    };
    ....
    ....
    
  • それらが含まれているかどうかを確認します。

    $ sudo unattended-upgrade --dry-run --debug
    Initial blacklisted packages: 
    Initial whitelisted packages: 
    Starting unattended upgrades script
    Allowed origins are: ['o=Ubuntu,a=xenial-security', 'o=Ubuntu,a=xenial-updates', 'o=Ubuntu,a=xenial-proposed', 'o=Ubuntu,a=xenial-backports', 'o=Ubuntu,a=xenial', 'o=LP-PPA-kubuntu-ppa-backports,a=xenial', 'o=LP-PPA-tuxonice,a=xenial', 'o=LP-PPA-webupd8team-sublime-text-3,a=xenial']
    pkgs that look like they should be upgraded: 
    Fetched 0 B in 0s (0 B/s)                                                                                  
    fetch.run() result: 0
    blacklist: []
    whitelist: []
    No packages found that can be upgraded unattended and no pending auto-removals
    

@ andy.holmesようこそ、可能であればgithubリポジトリにスターを付けることを検討してください。リンク-github.com/abhigenie92/unattended_upgrades_repos
Abhishek Bhatia

また、構成ファイルを変更しようとするパッケージのdpkgの処理方法を変更することもできます。unix.stackexchange.com
questions

このpythonスクリプトは優れていますが、ストレッチを実行しているRaspberry Piの50無人アップグレードのためにREADME.mdが提案したものを変更する必要がありました。たとえば、許可された起点を指定"Raspberry:stable";しても機能しませんでした。代わりに、たとえば"o=Raspberry, a=stable";
cfogelberg

5

編集/etc/apt/apt.conf.d/50unattended-upgrades、次を追加します。

Unattended-Upgrade::Origins-Pattern {
        "origin=*";
};

これにより、すべてのパッケージの無人アップグレードが可能になります。


はい、明確で簡潔な回答をありがとう。しかしorigin:''、例えばからのdatadog-agent を持つパッケージがありますsite:'apt.datadoghq.com'。その場合、"origin=";オリジンが空のパッケージをスキップしないように追加する必要もあります。しかし、その後はの"site=*";代わりに使用する方が良いでしょう"origin=*";
ポールトビアス

のファイルに自分のリポジトリを追加しました/etc/apt/sources.list.d/my_repo.listが、パッケージはアップグレードされません。手動で動作しsudo apt updateます。どのような手がかりですか?
サンダー

これは手動更新と同じソースを使用しますか、つまり無効なソースを無視しますか?
シリコマンサー

3

次のリンクには、再実行を強制してcronに自動更新を開始させる指示があります。cronを停止する手順はこちら

sudo service anacron stop
sudo service cron stop
sudo rm -rf /var/run/unattend* /var/run/cron* /var/run/anacron*
sudo rm -rf /var/lib/apt/periodic/*

cronを再起動して自動更新をすぐに(または少なくとも数時間以内に)実行するには

sudo service cron start
sudo anacron -fn

使い方

いくつかのことがトリガーになります。

  • /etc/cron.dailycronによる実行、特にから起動され/etc/cron.daily/aptます。Cronは/etc/cron.daily午前6時25分に実行されます(を参照/etc/crontab

  • Anacronは新興企業から実行されますか?そして/etc/cron.daily、アップタイムの5分後に起動します(を参照/etc/anacrontab

    APT::Periodic::RandomSleepはで設定できます /etc/apt/apt.conf.d/10periodicが、デフォルトは1800秒(30分)であるため、/etc/cron.daily/apt実行後30分まで更新は行われません。

ログ

動作する場合は、このフォルダーにログが記録されるはずです/var/log/unattended-upgrades


私の仮想ホスティングプロバイダが、削除することをお勧めだろうと思ったので、これは私にとって特に有用であった/etc/cron.daily/aptデフォルトのUbuntu 12.04インストールから- 。そう自動APTの更新は行われませんでした:-( ServerFaultの回答serverfault.com/a/568329/ 95570は、そのファイルを再作成するための詳細を提供しました
アレックスデュピュイ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.