DebianLennyのインストールで最新バージョンのCRANRをインストールするように強制するスクリプトを作成しようとしています。インストール中にlibc6がアップグレードされ、インストールで3つのサービス(mysql、exim4、cron)を再起動しても問題がないことをインタラクティブに確認する必要があるようです。 )。このプロセスは、AmazonのElastic Map Reduce(EMR)マシンで実行されるため、無人である必要があります。しかし、私はオプションを使い果たしています。これが私が試したいくつかのことです:
この 前の質問 はまさに私が探しているもののようです。そこで、インストールスクリプトを次のように設定しました。
# set my CRAN repos... yes, I know there's a new convention where to put these.
echo "deb http://cran.r-project.org/bin/linux/debian lenny-cran/" | Sudo tee -a /etc/apt/sources.list
echo "deb-src http://cran.r-project.org/bin/linux/debian lenny-cran/" | Sudo tee -a /etc/apt/sources.list
# set the dpkg.cfg options per the previous SuperUser question
echo "force-confold" | Sudo tee -a /etc/dpkg/dpkg.cfg
echo "force-confdef" | Sudo tee -a /etc/dpkg/dpkg.cfg
export DEBIAN_FRONTEND=noninteractive
# add key to keyring so it doesn't complain
gpg --keyserver pgp.mit.edu --recv-key 381BA480
gpg -a --export 381BA480 > jranke_cran.asc
Sudo apt-key add jranke_cran.asc
Sudo apt-get update
# install the latest R
Sudo apt-get install --yes --force-yes r-base
ただし、このスクリプトは次の入力要求でハングします。
OK、次のスクリプトを使用してサービスを停止してみました。
Sudo /etc/init.d/mysql stop
Sudo /etc/init.d/exim4 stop
Sudo /etc/init.d/cron stop
Sudo apt-get install --yes --force-yes libc6
これは機能せず、インタラクティブ画面に戻りますが、今回は、再起動する必要のあるサービスとしてcronのみがリストされています。
では、libc6にユーザー入力なしでこれらのサービスを再起動させる方法はありますか?または、インタラクティブなプロンプトが表示されないようにcronを停止する方法はありますか?多分私が考えたことのない創造的なオプション?
このシステムが起動され、いくつかのHadoopコードが実行されてから、破棄されることに注意してください。そのため、実稼働デスクトップマシンやWebサーバーでは望まない可能性のある副作用や悪い動作に我慢できます。
Lennyの設定には前向きではありませんが、SqueezeではSudoがenv_reset
で構成されていることを知っています。つまり、コマンドを実行する前に、ごく一部の選択された環境変数を除いてすべて削除されます。
これは、設定したDEBIAN_FRONTEND変数が実際にapt-get install --yes --force-yes r-base
に到達することは決してないことを意味します。 Sudoへのフルアクセス権がある場合、つまりALL = ALL
権限を持つsudoersファイルにいる場合は、この動作をオーバーライドできます。
代わりに以下を使用してみてください。
Sudo DEBIAN_FRONTEND=noninteractive apt-get install --yes --force-yes r-base
編集:どこでもSudoを使用せず、代わりにrootとしてスクリプトを実行するようにスクリプトを書き直すことにも注意してください。しかし、そうすることは、それを解決してそこから学ぶのではなく、私が指摘した本当の問題を回避することになるでしょう。
別の回答で言及されているdebconfソリューションのより簡潔な変形は次のとおりです。
echo'libc6ライブラリ/ restart-without-askingブール値true '| Sudodebconf-set-selections
Debian 7(wheezy)でglibcをアップグレードするときに、このソリューションをうまく使用しました。
不思議なことに、設定する適切な構成変数を見つける方法は次のとおりです。
Sudo apt-get install debconf-utils
Sudo apt-get install -y libc6#answerインタラクティブにプロンプトを表示
debconf-get-selections | grep libc6
パッケージを手動でインストールしたホスト(インタラクティブオプションの選択)で、次のコマンドを実行します。
apt-get install debconf-utils
debconf-get-selections > answers.conf
この時点で、answers.confをフィルタリングして、特定のパッケージの構成回答のみを含めることができます。フィルタリングせずにテストしました。
新しいホストを作成するときは、自動インストールスクリプトとともにanswers.confを含めます。 apt-get install
を実行する前に、スクリプトで次のコマンドを実行します。
debconf-set-selections --verbose < answers.conf
これにより、debconfデータベースが事前定義された回答でいっぱいになります。 apt-get install
を実行しても、インタラクティブな質問は行われません。
メールで話し合ったことに加えて、ことわざもあります
あなたがそれらを打ち負かすことができない場合は、それらに参加してください。
そのため、ラップトップ上にクラウドインスタンスの(ベース)パッケージに対応する仮想マシンを作成し、それらのパッケージに対して独自のローカルR 2.12.1.debを再構築できます。アップグレードされていないのでlibc6
が関与している場合は、問題を回避します。
または、許可されている可能性のある副作用に関するコメントに沿って、exim4、mysql、およびcronをアンインストールできます。あなたのRの仕事はそれらを必要としません。何かのようなもの
Sudo dpkg --force-depends --remove ...names of your packages here...
しかし、私がこれをお勧めするとは本当に信じられません:)関連するすべてのeximおよびmysqlパッケージを取得するには、試行錯誤が必要な場合があります。
Libc6インストーラーがcronの再起動を促していると推測できましたcronが実行されていなくてもこれは奇妙に思えます。いずれにせよ、cron init.dスクリプトの名前を変更して、パッケージインストーラーがcronが存在するとは思わないようにだまされることで、これを回避することができました。うーん。なんてめちゃくちゃ:
Sudo /etc/init.d/mysql stop
Sudo /etc/init.d/exim4 stop
Sudo /etc/init.d/cron stop
Sudo mv /etc/init.d/cron /etc/init.d/cron.bak
Sudo apt-get install --yes --force-yes libc6
Sudo mv /etc/init.d/cron.bak /etc/init.d/cron
Sudo /etc/init.d/mysql start
Sudo /etc/init.d/exim4 start
Sudo /etc/init.d/cron start
その小さな歌舞伎ダンスの後、私は最新のRをインストールすることができます。
あなたが試すことができます:
printf "\n" | Sudo apt-get install --yes --force-yes libc6