首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法强迫Debian做无人值守的安装..。libc6想要交互确认

无法强迫Debian做无人值守的安装..。libc6想要交互确认
EN

Server Fault用户
提问于 2011-02-22 15:08:25
回答 6查看 5.5K关注 0票数 7

我正在创建一个脚本,强制Debian安装安装最新版本的CRAN。在安装过程中,它看起来是libc6升级了,安装需要交互确认重新启动三个服务(mysql、exim4、cron)是可以的。这个过程必须无人参与,因为它运行在亚马逊的弹性地图减少(EMR)机器上。但我已经没有选择了。以下是我尝试过的几件事:

这个前一个问题似乎正是我要找的。因此,我按照以下方式设置了安装脚本:

代码语言:javascript
复制
# 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 

但是这个脚本挂起以下输入请求:

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

代码语言:javascript
复制
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服务器。

EN

回答 6

Server Fault用户

回答已采纳

发布于 2011-02-22 18:04:44

我对Lenny中的设置不是肯定的,但我知道在压缩中,sudo配置了env_reset,这意味着在运行命令之前,它将删除除极少数select env变量之外的所有变量。

这意味着您设置的DEBIAN_FRONTEND变量永远不会真正进入apt-get install --yes --force-yes r-base。如果您完全可以访问sudo,这意味着您在具有ALL = ALL权限的sudoers文件中,那么您可以重写此行为。

试着使用以下方法。

代码语言:javascript
复制
sudo DEBIAN_FRONTEND=noninteractive apt-get install --yes --force-yes r-base

编辑:请注意,重写脚本而不是在任何地方使用sudo,而是以root方式运行脚本也是有效的。但这样做只会避免我指出的真正问题,而不是解决问题并从中吸取教训。

票数 11
EN

Server Fault用户

发布于 2014-03-08 17:16:50

另一个答案中提到的debconf解决方案的一个更简洁的变体是:

回显'libc6库/重新启动-不需要询问布尔值真‘\ sudo debconf set-选择

在Debian 7(喘息)上升级glibc时,我刚刚成功地使用了这个解决方案。

对于好奇的人来说,我找到要设置的正确配置变量的方式如下:

sudo apt-get install debconf utils sudo apt-get install -y libc6 #应答提示交互式地删除-获取选择\ grep libc6

票数 4
EN

Server Fault用户

发布于 2011-02-22 16:51:00

步骤1

在手动安装包的主机上(交互式选项选择)运行:

代码语言:javascript
复制
apt-get install debconf-utils
debconf-get-selections > answers.conf

步骤2(可选)

此时,您可能希望筛选answers.conf,使其只包含特定包的配置答案(S)。我没有过滤就进行了测试。

步骤3

创建新主机时,请包括answers.conf和自动安装脚本。在运行apt-get install之前,在脚本中运行:

代码语言:javascript
复制
debconf-set-selections --verbose < answers.conf

结果

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

票数 3
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/238679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档