我使用 12.04 时出现此错误。当我运行 时sudo lxc-execute -n foo -f lxc.example.conf ls
,我得到
/usr/lib/lxc/lxc-init: error while loading shared libraries: libapparmor.so.1: cannot open shared object file: No such file or directory
知道如何解决这个问题吗?我已经安装了 libapparmor-dev,但仍然没有成功。
答案1
该库位于 libapparmor1 包中:
% dpkg -S /usr/lib/libapparmor.so.1
libapparmor1: /usr/lib/libapparmor.so.1
这实际上是 lxc-init 的依赖项,它位于 lxc 包中:
% dpkg -S /usr/lib/lxc/lxc-init
lxc: /usr/lib/lxc/lxc-init
% dpkg -s lxc | grep Depends
Depends: upstart-job, libapparmor1 (>= 2.6~devel), libc6 (>= 2.14), libcap2 (>= 2.10), apparmor, bridge-utils, dnsmasq-base, iptables, rsync
您的安装是否损坏?这可能会有所帮助:
apt-get update
apt-get install -f
答案2
经过一番尝试,我最终尝试将主机上的 libapparmor.so.1 复制到客户容器中,似乎成功了。所以问题实际上不在我试图运行 lxc-execute 的主机上。最后,对于我们的构建脚本,我现在将 libapparmor-dev 安装到容器的文件系统中:
chroot $JAIL /bin/sh -c "apt-get -yf install libapparmor-dev"
之后,我就可以在该容器上运行 lxc-execute。$JAIL 是它所在的目录。
为了进一步阅读,我发现了一篇关于为什么 apparmor 现在成为依赖项的帖子:http://s3hh.wordpress.com/2012/05/03/lxc-in-precise-and-beyond/