grub configプロンプトなしでapt-get -y dist-upgradeを実行するにはどうすればよいですか?


63

あたりは(または適性)apt-getを作る-yを実行しますが、設定ファイルの交換を促すありませんか?

私は次のことをしました:

ec2run ami-3c994355 --region us-east-1 -n 1 -t m1.large -z us-east-1d

マシン上:

sudo apt-get update
sudo apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

どの設定ファイルを使用するかを尋ねるプロンプトが表示されます。これらはプロンプトの前に来る行です:

Setting up grub-pc (1.99-21ubuntu3.1) ...

その後:

                         ┌───────────────────────────────────────────────────────┤ Configuring grub-pc ├───────────────────────────────────────────────────────┐                              
                         │ A new version of configuration file /etc/default/grub is available, but the version installed currently has been locally modified.  │                              
                         │                                                                                                                                     │                              
                         │ What do you want to do about modified configuration file grub?                                                                      │                              
                         │                                                                                                                                     │                              
                         │                                     install the package maintainer's version                                                        │                              

不十分な回避策:echo grub-pc hold | 最初のapt-getコマンドの前にsudo dpkg --set-selections
fratrik

これと同じ問題が発生し、Dpkg :: Options :: =のさまざまな順列/スペルを試してみましたが、どれも機能しませんでした。また、示されているように/etc/apt/apt.conf.d/localファイルに行を追加しようとしましたが、それらも機能しませんでした。これは、Preciseの退行のようです。
スコットリッチー

回答:


95

この/etc/default/grubファイルはパッケージのインストール時に生成されますが、これはdebconfと統合されるため必要です。これは、dpkg confファイルとして処理できないため、dpkgの構成ファイルの処理では認識されないことを意味します。

代わりに、ucf設定を処理するためのより洗練されたDebianツールであるを使用します。残念ながら、これはdpkgオプションを理解していないため、設定してDpkg::Options::="--force-confdef"も役に立ちません。ただし、UCF_FORCE_CONFFNEWおよびUCF_FORCE_CONFFOLD環境変数を使用して、プロンプトなしのアップグレードを行う独自の方法があります。

ucfdebconfプロンプトに使用するため、debconfインターフェースをに設定するnoninteractiveと、メッセージも沈黙します。非対話型の更新が本当に必要な場合は、とにかくこれを行う必要があります-任意のパッケージがdebconfの質問をすることがあります(ただし、通常はアップグレード中はそうなりません)。

DEBIAN_FRONTEND=noninteractive環境に追加することでdebconfインターフェースを一時的に設定dpkg-reconfigure debconfすることも、非対話型フロントエンドを実行して選択することで永続的に設定することもできます。非対話型のフロントエンドを使用している場合、パッケージが尋ねる可能性のある質問に対するデフォルトの回答が得られます。

ucfデフォルトの答えは、「既存のファイルを保持」です。

したがって、100%保証された¹プロンプトなしの更新を実行するための完全なコマンドは次のようになります。

sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

¹:パッケージがdebconfとは別のプロンプト方法を使用することは技術的に可能ですが、これはDebianのポリシーに反しています。そのようなパッケージに出くわした場合は、バグを報告してください。


8
これをシェルでテストしている場合、sudoコマンドはDEBIAN_FRONTEND変数を削除するように見えることに注意してください。つまり、sudo DEBIAN_FRONTEND = noninteractive apt-get -y dist-upgradeが必要ですが、DEBIAN_FRONTEND = noninteractive sudo apt-get -y dist-upgradeは失敗します
スコットリッチー

私のためにうまくいった、
ありがとう-cwd

また、これはバグと見なされ、この問題が発生しない新しいAMIイメージをリリースしていることに注意してください。bugs.launchpad.net
Scott Ritchie

そして、新しいAMIがリリースされました。
スコットリッチー

@ScottRitchie-あなたのコメントは、ganglia-webfrontendパッケージのインストールを自動化するのにも役立ちます。フロントにあなたのコメントを追加し、問題を修正-それは、新しいconfファイルを処理するためのApacheの再起動を求めるためのプロンプトが、神経節のインストールを自動化しようとすると、これが壊れている
ジェレミーHajek

19

RAOFの答えを失い、Ubuntu 12.04で完全に自動更新とdist-upgradeを実行できるようにWebで無数の時​​間を費やした後、この投稿(https:// bugs .launchpad.net / ubuntu / + source / grub / + bug / 239674 / comments / 1)可能なローカルメニューの代わりにパッケージメンテナーgrub menu.lstを使用する場合、grubはDpkgオプションではなくUCFに準拠することを指摘します。 .lstの編集。

grubではない他のパッケージのDpkg force-confnewオプションを残しました。

#!/bin/bash

unset UCF_FORCE_CONFFOLD
export UCF_FORCE_CONFFNEW=YES
ucf --purge /boot/grub/menu.lst

export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -o Dpkg::Options::="--force-confnew" --force-yes -fuy dist-upgrade

1
これは私のために働いた唯一のものでした。ありがとう!
ウェス・

1
それでは、unattended-upgradesgrub config を使用して編集したとしましょUCF_FORCE_CONFFNEWう。そのコンテキストでどのように設定しますか?または、grubの更新をブラックリストに登録する必要がありますか?
thom_nic


1

過去数日、Ubuntu 18.04で同じ問題に取り組んできました。新しいEC2インスタンス(具体的にはami-00035f41c82244dab)を起動すると、自動化されたプロビジョニングスクリプトを実行します(初期化時に提供されたユーザーデータ構成を使用)。最初のステップの1つはapt更新/アップグレードの実行です。

変更されたGRUBファイルについてユーザーにプロンプ​​トが表示されている間、スクリプトはブロックされます-最初に/ etc / default / grub、次に/boot/grub/menu.lst。これはユーザーデータとして提供された場合に無人モードで実行されているため、プロセスは停止し、回復することはありません。

多くのグーグルから、これは何らかの形で長期にわたるGRUBの問題であり、修正が適用されてから、後者が再び後退しているように思えます。

最終的に、正常に適用できた唯一の回避策は、プロビジョニングスクリプトの次のfollowingいハックです。うまくいけば、他の誰かがバインドから抜け出すかもしれません!

#!/bin/bash 

apt update

### Workaround: Pre-update /etc/default/grub and remove /boot/grub/menu.lst to avoid 'file changed' prompts from blocking completion of unattended update process
patch /etc/default/grub <<'EOF'
10c10
< GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0"
---
> GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 nvme.io_timeout=4294967295"
19c19
< GRUB_TERMINAL=console
---
> #GRUB_TERMINAL=console
EOF
rm /boot/grub/menu.lst

apt upgrade -y

### Workaround part 2: re-generate /boot/grub/menu.lst
/usr/sbin/update-grub-legacy-ec2 -y

私が遭遇した問題は現在利用可能なUbuntu 18.04 AMIバージョンに非常に特有のものであり、新しいGRUBパッケージを組み込んだ更新バージョンは同じ問題の対象ではない可能性があります。特に、変更の性質/etc/default/grubは、AMIの新しいバージョンには適用されない可能性があります。とにかくこれを外に出すだけです。


以下のワンライナーを実行してみましょう:sudo DEBIAN_FRONTEND=noninteractive apt-get -y -o DPkg::options::="--force-confdef" -o DPkg::options::="--force-confold" -qq --force-yes upgrade
DarkNeuron

また、上記の最新のバグ(回帰)は次のとおりです。bugs.launchpad.net
images
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.