GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu – Ubuntu Cloud Vmイメージで`apt-daily.service`を無効にする方法は?

Ubuntu 16.04サーバーのVMイメージは、明らかに「apt-daily.service」を
12時間ごとに開始します。このサービスは、利用可能なパッケージのリストの更新、必要に応じて無人アップグレードの実行など、さまざまなAPT関連のタスクを実行します。

VMの「スナップショット」から開始すると、サービスはすぐにトリガーされます。 、(私は
推測します)systemdは、タイマーがずっと前にオフになっているはずだとすぐに認識します。

ただし、実行中のAPTは、他のaptを防ぎます
/var/lib/dpkgのロックを保持しているためプロセスが実行されない 。これを示すエラーメッセージは次のようになります:

E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?

Ansibleがマシンのセットアップを完了するまで(通常はパッケージのインストールが含まれます)、この自動APTタスクを無効にする必要があります。
https://github.com/gc3-uzh-ch/elasticluster/issues/を参照してください。詳細と
コンテキストについては304。

cloud-initの「ユーザーデータ」スクリプトを使用して、「無人アップグレード」機能を無効にするさまざまなオプションを試しました
、しかし、それらはすべてこれまでのところ失敗しています。
これまでのところ。

1。 systemdタスクを無効にする

systemdタスクapt-daily.service apt-daily.timerによってトリガーされます 。次のコマンドのさまざまな組み合わせを使用して、
どちらか一方、または両方を無効にしようとしました。
;それでも、apt-daily.service VMが
SSH接続を受け入れる準備ができた直後に開始されます::

    #!/bin/bash

    systemctl stop apt-daily.timer
    systemctl disable apt-daily.timer
    systemctl mask apt-daily.service
    systemctl daemon-reload

2。構成オプションを無効にするAPT::Periodic::Enable

スクリプト/usr/lib/apt/apt.systemd.daily いくつかのAPT構成を読み取ります
変数;設定APT::Periodic::Enable 機能を完全に無効にします
(331〜337行目)。次の
スクリプトで無効にしてみました::

    #!/bin/bash

    # cannot use /etc/apt/apt.conf.d/10periodic as suggested in
    # /usr/lib/apt/apt.systemd.daily, as Ubuntu distributes the
    # unattended upgrades stuff with priority 20 and 50 ...
    # so override everything with a 99xxx file
    cat > /etc/apt/apt.conf.d/99elasticluster <<__EOF
    APT::Periodic::Enable "0";
    // undo what's in 20auto-upgrade
    APT::Periodic::Update-Package-Lists "0";
    APT::Periodic::Unattended-Upgrade "0";
    __EOF

ただし、APT::Periodic::Enableにも関わらず 値が コマンドラインから
(以下を参照)、unattended-upgrades プログラムはまだ実行されています…

    [email protected]:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
    AutoAptEnable='0'

3。 /usr/lib/apt/apt.systemd.dailyを削除します 完全に

次のcloud-init スクリプトは無人アップグレードスクリプトを削除します
完全に::

    #!/bin/bash

    mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED

それでも、タスクは実行され、プロセステーブルで確認できます。ただし、コマンドラインからプローブした場合、ファイルは存在しません::

[email protected]:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory

cloud-initのように見えます スクリプト(SSHコマンドラインと一緒に)
とルートsystemdプロセスは、別々のファイルシステムとプロセスで実行されます
スペース…

質問

私が見逃している明らかなものはありますか?または、
私が気付いていない名前空間の魔法が起こっていますか?

関連:基本正規表現の[]と()の違いは?

最も重要なこと:apt-daily.serviceを無効にするにはどうすればよいですか
cloud-initを介して スクリプト?

承認された回答:

はい、私が行方不明になっていることは明らかです。

Systemdはすべてサービスの同時開始に関するものなので、cloud-init スクリプトは
同時に実行されます apt-daily.service トリガーされます。 cloud-initまでに ユーザー指定のペイロードapt-get updateを実行します
すでに実行されています。したがって、2。と3.の試行は、名前空間の魔法が原因ではなく、apt.systemd.dailyに対してシステムを変更するのが遅すぎたために失敗しました。
変更を取得します。

これは、基本的に防止する方法がないことも意味します。 apt.systemd.daily 実行から—開始後にのみ殺すことができます。

この「ユーザーデータ」スクリプトは次のルートを取ります::

#!/bin/bash

systemctl stop apt-daily.service
systemctl kill --kill-who=all apt-daily.service

# wait until `apt-get updated` has been killed
while ! (systemctl list-units --all apt-daily.service | egrep -q '(dead|failed)')
do
  sleep 1;
done

# now proceed with own APT tasks
apt install -y python

SSHログインが可能な時間枠はまだありますが、apt-get 実行されませんが、ストックで機能する別のソリューションを想像することはできません
Ubuntu16.04クラウドイメージ。


Ubuntu
  1. Ubuntu でサービスを無効にする方法

  2. Ubuntu Dock を削除または無効にする方法

  3. Ubuntu クラウド イメージにパスワードを設定するにはどうすればよいですか?

  1. Ubuntuで壊れたパッケージを修正する方法

  2. Ubuntu18.04でUFWファイアウォールを有効/無効にする方法

  3. Ubuntu18.04でファイアウォールを無効にする方法

  1. Ubuntu20.04にSpotifyをインストールする方法

  2. Ubuntu16.04で無人アップグレードを有効/無効にする方法

  3. Ubuntu Systemd/Upstartでサービスを有効または無効にする方法