无法强制Debian做无人值守安装… libc6希望交互式确认

我试图创build一个强制Debian Lenny安装的脚本来安装最新版本的CRAN R.在安装过程中,它出现libc6被升级,并且安装需要交互式确认重启三个服务(mysql,exim4,cron )。 这个过程是无人看pipe,因为它运行在亚马逊的Elastic Map Reduce(EMR)机器上。 但是我没有select。 以下是我尝试过的一些事情:

这个前面的问题似乎正是我要找的。 所以我设置我的安装脚本如下:

# 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 

但是这个脚本挂着下面的input请求:

在这里输入图像描述

好的,所以我尝试使用以下脚本停止服务:

 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在没有用户input的情况下重新启动这些服务? 或者有没有办法阻止cron,所以它不会导致交互式提示? 也许是我从未想过的创意select?

请记住,这个系统出现了,一些Hadoop代码被运行,然后被拆除。 所以我可以忍受在生产台式机器或networking服务器中可能不需要的副作用和不良行为。

    我对Lenny中的设置并不积极,但是我知道在Squeeze中,sudo是使用env_resetconfiguration的,这意味着在运行该命令之前,它将除去很less的selectenvvariables。

    这意味着你设置的DEBIAN_FRONTENDvariables实际上并不是真正的使apt-get install --yes --force-yes r-base 。 如果你有完全访问sudo,意味着你在sudoers文件中具有ALL = ALL权限,那么你可以覆盖这个行为。

    尝试使用下面的代替。

     sudo DEBIAN_FRONTEND=noninteractive apt-get install --yes --force-yes r-base 

    编辑:请注意,重写脚本不使用sudo无处不在,而是以root身份运行脚本也将工作。 但是这样做只会避免我指出的真正的问题,而不是解决问题并从中学习。

    另一个答案中提到的debconf解决scheme的更简洁的变体如下:

    echo'libc6 libraries / restart-without-boolean true'| sudo debconf-set-selections

    在Debian 7(wheezy)上升级glibc时,我只是成功地使用了这个解决scheme。

    好奇的是,我find正确的configurationvariables的方式如下:

    sudo apt-get install debconf-utils

    sudo apt-get install -y libc6#交互式地回答提示

    debconf-get-selections | grep libc6

    步骤1

    在手动安装软件包的主机上(交互选项select)运行:

     apt-get install debconf-utils debconf-get-selections > answers.conf 

    步骤2(可选)

    此时,您可能需要过滤answers.conf以仅包含特定软件包的configuration答案。 我没有过滤testing。

    第3步

    创build新主机时,请将answers.conf与自动安装脚本一起包含在内。 在运行apt-get install之前,在脚本中运行:

     debconf-set-selections --verbose < answers.conf 

    结果

    这将用预定义的答案填充debconf数据库。 运行apt-get install时,不会询问交互式问题。

    除了我们在电子邮件中讨论的内容外,还有一句话

    如果你不能打败他们,join'em。

    所以您可以在您的笔记本电脑上创build一个与云实例上的(基本)软件包相对应的虚拟机,然后针对这些软件包重build您自己的本地R 2.12.1 .deb。 由于不涉及升级的libc6 ,你会回避这个问题。

    或者,根据您对允许的可能的副作用的评论,您可以卸载exim4,mysql和cron。 你的R工作将不需要他们。 就像是

     sudo dpkg --force-depends --remove ...names of your packages here... 

    但我不能相信我推荐这:)你可能需要一个试验和错误,以获得所有相关的进出口和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