我正在编写一个Linux Shell脚本来自动完成我在Ubuntu 11.04上做的一些事情.
基本上,我正在编写一个shell脚本来安装NGINX,MySQL和PHP,然后配置所有内容.我知道如何通过命令行完成所有事情.
但是,我不知道我将如何处理进程要求用户输入的部分.例如,我使用apt-get安装的某些内容会要求您进行确认,即(Y)es或(N)o.
我究竟如何处理shell脚本中的自动确认,即在被问到时自动确认是或否?
我正在设置一个bash脚本来自动构建LAMP环境.
我debconf-set-selections在安装mysql,phpmyadmin等之前用来设置选项...
它的工作原理很棒.但问题是我必须为mysql设置一个空密码,并且在安装过程中它仍然要求输入密码,即使在之前键入的行:
echo "mysql-server-5.5 mysql-server/root_password password" | debconf-set-selections
echo "mysql-server-5.5 mysql-server/root_password_again password" | debconf-set-selections
Run Code Online (Sandbox Code Playgroud) 我使用Linux Mint 16并且在通过apt-get install安装软件包时总是出错:
阅读包列表...完成构建依赖关系树读取状态信息...完成sqlitebrowser已经是最新版本.0升级,0新安装,0删除,26未升级.1未完全安装或删除.执行此操作后,将使用0 B的额外磁盘空间.你想继续[Y/n]吗?是在连接(.)中使用未初始化的值或在/usr/share/perl5/Debconf/DbDriver/File.pm第44行,第3行使用字符串3.在/ usr/share/perl5/Debconf /中使用-in中的未初始化值DbDriver/File.pm第46行,块3.在/usr/share/perl5/Debconf/DbDriver/File.pm第47行,模块匹配(m //)中使用未初始化的值3.使用未初始化的值$ directory in -d at /usr/share/perl5/Debconf/DbDriver/File.pm第48行,块3.在连接(.)中使用未初始化的值$目录或在/ usr/share/perl5/Debconf/DbDriver/File中使用字符串.pm第49行,块3. debconf:DbDriver"config":mkdir:没有这样的文件或目录设置man-db(2.6.5-2)...在连接(.)或字符串中使用未初始化的值usr/share/perl5/Debconf/DbDriver/File.pm第44行,块3.在/usr/share/perl5/Debconf/DbDriver/File.pm第46行使用未初始化的值,块3.使用未初始化的模式匹配中的值匹配(m //)/usr/share/perl5/Debconf/DbDriver/File.pm第47行,块3.使用 未初始化的值$目录在-dr /share/perl5/Debconf/DbDriver/File.pm第48行,块3.在连接(.)中使用未初始化的值$目录或在/ usr/share/perl5/Debconf中使用字符串/DbDriver/File.pm第49行,块3. debconf:DbDriver"config":mkdir:没有这样的文件或目录dpkg:错误处理man-db( - configure):安装后的子进程安装后脚本返回错误退出状态1处理时遇到错误:man-db E:子进程/ usr/bin/dpkg返回错误代码(1)
运行
sudo apt-get install debconf --reinstall
Run Code Online (Sandbox Code Playgroud)
要么
sudo apt-get update --fix-missing
sudo apt-get autoremove && sudo apt-get clean && sudo apt-get install -f
Run Code Online (Sandbox Code Playgroud)
只解决了暂时(直到下次重启)
也许我已经安装了perl一次,而不是使用apt-get.我也尝试用synaptic重新安装perl,但它没有帮助.我能做什么?
想要从bash脚本安装phpmyadmin,我发现很难获得正确的debconf选择,以便不安装/配置任何Web服务器(使用nginx,只有apache2和lighttpd可用)并且没有配置dbconfig-的phpmyadmin数据库很常见,因为我在谷歌上没有找到这样的东西.
这是在Ubuntu 14.04 phpmyadmin 4:4.0.10-1上的debconf选择的完整列表:
debconf-get-selections | grep phpmyadmin
phpmyadmin phpmyadmin/password-confirm password
# MySQL application password for phpmyadmin:
phpmyadmin phpmyadmin/mysql/app-pass password
phpmyadmin phpmyadmin/mysql/admin-pass password
phpmyadmin phpmyadmin/setup-password password
phpmyadmin phpmyadmin/app-password-confirm password
# Database type to be used by phpmyadmin:
phpmyadmin phpmyadmin/database-type select mysql
# Reinstall database for phpmyadmin?
phpmyadmin phpmyadmin/dbconfig-reinstall boolean false
phpmyadmin phpmyadmin/remove-error select abort
phpmyadmin phpmyadmin/reconfigure-webserver multiselect
phpmyadmin phpmyadmin/missing-db-package-error select abort
# Configure database for phpmyadmin with dbconfig-common?
phpmyadmin phpmyadmin/dbconfig-install boolean false
phpmyadmin phpmyadmin/upgrade-error select abort
# Perform upgrade …Run Code Online (Sandbox Code Playgroud) 我创建了一个小的Debian软件包,它必须从用户那里获取输入并打印出来.
为了在postinst脚本上从用户"read"命令获取输入将无法在Debian系统上运行我不知道究竟是什么原因,但它在Ubuntu系统中有效.
后来我发现我们必须使用模板文件为Debian系统使用"debconf".
模板文件:
Template: test/input
Type: text
Description: enter some text, which will be displayed
Run Code Online (Sandbox Code Playgroud)
postinst脚本:
db_get test/input
echo "you have entered ::$RET" >&2
Run Code Online (Sandbox Code Playgroud)
但是,当我安装我的测试包时,我收到此错误:
Can't exec "postinst": No such file or directory at /usr/share/perl/5.10/IPC/Open3.pm line 168. <br>open2: exec of postinst configure failed at /usr/share/perl5/Debconf/ConfModule.pm line 59
有谁知道我做错了什么?
如何在.deb文件中包含许可协议交互?这个问题对Linux的支持点击直通许可证只要求如果有可能,但不知道如何.另外,我不确定deb软件包的许可证信息是否真的可以使用...
我知道可以将文本作为包描述的一部分包含在内,但我更倾向于将其与Windows MSI安装程序类似.
请注意,我不希望在应用程序第一次运行时弹出许可证.
我正在使用dpkg-deb在Ubuntu 8.10上生成.deb文件.
我正在尝试为运行NGINX的Ubuntu服务器自动安装PhpMyAdmin,我在跳过重新配置 - webserver多选提示时遇到问题:
是否有针对每个PhpMyAdmin安装设置的可能选项的参考或多选设置类型的选项?
apt-get install phpmyadmin -y
debconf-get-selections | grep phpmyadmin
Run Code Online (Sandbox Code Playgroud)
这是我认为我试图找出如何跳过的具体选项:
phpmyadmin phpmyadmin/reconfigure-webserver multiselect ?
Run Code Online (Sandbox Code Playgroud)
另外,我如何跳过应用密码以便自动生成?
非常感谢任何帮助,谢谢!
我已经能够为Ubuntu成功创建一个.deb安装文件,但是我需要用户输入才能完成后安装脚本的配置。这些问题是动态的,并且基于用户计算机上的界面。
在Ubuntu软件中心使用debconf进行安装的过程中,是否有办法向用户提示具有动态答案的问题(即计算机上的接口列表)?
我正在使用 Dockerfile 来构建一个 docker 映像。我已将其放在ARG DEBIAN_FRONTEND=noninteractiveDockerfile 的开头以避免构建时出现 debconf 警告。
apt-get install在 Dockerfile 内部使用时不会出现警告。但是,当从包含 apt-get install 命令的 Dockerfile 执行 sh 脚本 (install_dependency.sh) 时,警告会再次出现。我还尝试DEBIAN_FRONTEND=noninteractive在 sh 脚本本身内部进行设置。
我可以通过echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections在 apt-get install 命令之前添加 sh 脚本来解决这个问题,但我想避免这种情况,因为脚本中的任何失败都会使 debconf 选择为非交互式。
Dockerfile:
FROM ubuntu:18.04
# Avoid warnings by switching to noninteractive
ARG DEBIAN_FRONTEND=noninteractive
WORKDIR /tmp
# Configure APT --> HERE THE WARNINGS 'debconf: unable to initialize frontend: Dialog' ARE NOT DISPLAYED
RUN apt-get update \ …Run Code Online (Sandbox Code Playgroud) 如何编写Bash脚本来安装和配置Postfix(适用于Debian或Ubuntu).
这是我安装Postfix的方法:
sudo apt-get install postfix
Run Code Online (Sandbox Code Playgroud)
然后我重新配置它:
sudo dpkg-reconfigure postfix
Run Code Online (Sandbox Code Playgroud)
如何使用预定义的答案集创建一个自动回答重新配置问题的脚本?或者还有其他方法吗?