JD *_*ong 7 debian automated-install dpkg apt libc6
我正在尝试创建一个脚本,强制 Debian Lenny 安装以安装最新版本的 CRAN R。在安装过程中,似乎 libc6 已升级,并且安装需要交互确认可以重新启动三个服务(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
Run Code Online (Sandbox Code Playgroud)
但是此脚本会因以下输入请求而挂起:

好的,所以我尝试使用以下脚本停止服务:
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
Run Code Online (Sandbox Code Playgroud)
这不起作用,交互屏幕又回来了,但这次只有 cron 列为必须重新启动的服务。
那么有没有办法让 libc6 在没有用户输入的情况下重新启动这些服务?或者有没有办法停止 cron,这样它就不会导致交互式提示?也许是我从未想过的创意选择?
请记住,此系统已启动,运行了一些 Hadoop 代码,然后将其拆除。因此,我可以忍受我们可能不希望在生产台式机或 Web 服务器中出现的副作用和不良行为。
Arr*_*ter 11
我对 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
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,重写脚本以不在任何地方使用 sudo 而是以 root 身份运行脚本也可以。但这样做只会避免我指出的真正问题,而不是解决它并从中学习。
| 归档时间: |
|
| 查看次数: |
4840 次 |
| 最近记录: |