Expect 软件包包含通过脚本控制的对话,自动化 telnet,ftp,passwd,fsck,rlogin,以及 tip 等交互应用的工具。Expect 对于测试这类程序也很有用,它简化了这类通过其他方式很难完成的工作。DejaGnu 框架是使用 Expect 编写的。
Expect 需要伪终端 (PTY) 才能正常工作。进行简单测试以验证 PTY 是否在 chroot 环境中正常工作:
python3 -c 'from pty import spawn; spawn(["echo", "ok"])'
该命令应该输出 ok
。如果该命令反而输出
OSError: out of pty devices
,说明
PTY 在当前环境无法正常工作。此时需要退出 chroot 环境,再次阅读第 7.3 节 “准备虚拟内核文件系统”,并确认
devpts
文件系统 (以及其他虚拟内核文件系统)
已被正确挂载。之后按照第 7.4 节 “进入 Chroot 环境”重新进入
chroot 环境。在继续构建之前,必须解决这一问题,否则需要使用 Expect 的测试套件 (例如
Bash,Binutils,GCC,GDBM 等的测试套件,当然还有 Expect 本身的测试套件)
都会出现大规模的测试失败,而且也可能产生其他隐蔽的问题。
对该软件包进行一些修改,以允许使用 gcc-14.1 或更新版本构建它:
patch -Np1 -i ../expect-5.45.4-gcc14-1.patch
准备编译 Expect:
./configure --prefix=/usr \ --with-tcl=/usr/lib \ --enable-shared \ --disable-rpath \ --mandir=/usr/share/man \ --with-tclinclude=/usr/include
配置选项的含义:
--with-tcl=/usr/lib
需要使用该选项告知 configure 配置脚本 tclConfig.sh 的位置。
--with-tclinclude=/usr/include
该选项显式指定查找 Tcl 内部头文件的位置。
构建该软件包:
make
运行命令以测试编译结果:
make test
安装该软件包:
make install ln -svf expect5.45.4/libexpect5.45.4.so /usr/lib