我试图创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
在手动安装软件包的主机上(交互选项select)运行:
apt-get install debconf-utils debconf-get-selections > answers.conf
此时,您可能需要过滤answers.conf以仅包含特定软件包的configuration答案。 我没有过滤testing。
创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