关于我为什么碰到以下问题:
我是在容器中碰到这些问题的。
我把主机的/var/lib
目录映射到容器中了,由于宿主机是yum
包管理,容器中是apt
包管理,所以/var/lib/dpkg
目录是不存在的。
我多次重新创建这个容器或删除,所以导致以前安装了软件包,但实际上软件不存在的情况,安装记录信息存在/var/lib/dpkg
中,由于挂载到宿主机上了,安装信息被保留了下来,所以导致新的容器安装不上,会提示已经安装
现象1
安装lsof
,但提示已经安装了,通过whereis
及which
又没有找到这个lsof
命令
# apt install lsof
Reading package lists... Done
Building dependency tree
Reading state information... Done
lsof is already the newest version (4.89+dfsg-0.1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
# whereis lsof
lsof:
# which lsof
#
可能是以前安装过lsof
,但是这个命令又被删除了,你需要重新安装,但是apt这个包管理工具,可能存在安装记录,就会提示你已经按照,不需要再安装了。
# pwd
/var/lib/dpkg
# grep -r "lsof" *
info/lsof.md5sums:e093dc78225e2a0a25e3b137c1c1e442 usr/bin/lsof
info/lsof.md5sums:e27dc9f6db132613e3c4f22f7c1aad3a usr/share/doc/lsof/00FAQ.gz
info/lsof.md5sums:e5767ce8d0aace46a4477eeb8380bbff usr/share/doc/lsof/00LSOF-L
info/lsof.md5sums:08eb541bb8e7e2f5618a0d43fc9ad997 usr/share/doc/lsof/00QUICKSTART.gz
info/lsof.md5sums:b6f69b1684c56dd6153e6fe988327b6a usr/share/doc/lsof/README.Debian
info/lsof.md5sums:18bc90df5810d7724e1e4d5306033552 usr/share/doc/lsof/changelog.Debian.gz
info/lsof.md5sums:a096f2ce9ff41c92dd29148c124014a2 usr/share/doc/lsof/copyright
info/lsof.md5sums:614e957e5c9a4d270bf66c8d230a1712 usr/share/doc/lsof/examples/00MANIFEST
info/lsof.md5sums:817ae17dd85ae5cb7634739c5978e902 usr/share/doc/lsof/examples/00README
info/lsof.md5sums:cc12e0167439712d43e8f2b97805281a usr/share/doc/lsof/examples/big_brother.perl5.gz
info/lsof.md5sums:2c610c1e69a6b7db96e440af906831a4 usr/share/doc/lsof/examples/count_pf.perl
info/lsof.md5sums:85bb99959d1beff6922957f9025ee18b usr/share/doc/lsof/examples/count_pf.perl5
info/lsof.md5sums:120b65ef31729a3d80ee4bdb4ab4ec32 usr/share/doc/lsof/examples/identd.perl5
info/lsof.md5sums:6571cbd6ae19a23691615217b1a5909b usr/share/doc/lsof/examples/idrlogin.perl.gz
info/lsof.md5sums:39eed486a94b38bacc1c56b8a15806cf usr/share/doc/lsof/examples/idrlogin.perl5.gz
info/lsof.md5sums:0fe9bb02027d1de3b9e7dadeed2a04c2 usr/share/doc/lsof/examples/list_NULf.perl5.gz
info/lsof.md5sums:ae45711c792c74a904f5e2f3fa8eebbd usr/share/doc/lsof/examples/list_fields.awk.gz
info/lsof.md5sums:35785f4ff72fdc655d625a0d84be9033 usr/share/doc/lsof/examples/list_fields.perl.gz
info/lsof.md5sums:f06259402a501efcb1d85b85b5cdd8c5 usr/share/doc/lsof/examples/shared.perl5.gz
info/lsof.md5sums:8b28a29e16148275dd0b879ada8278f2 usr/share/doc/lsof/examples/sort_res.perl5
info/lsof.md5sums:f5c6aa1f955c3ac9700cf38fe84f4686 usr/share/doc/lsof/examples/watch_a_file.perl
info/lsof.md5sums:4f2e252bc57ecef48454347f8966fbca usr/share/doc/lsof/examples/xusers.awk
info/lsof.md5sums:c650f494018f872d7c779433981039e7 usr/share/man/man8/lsof.8.gz
info/lsof.list:/usr/share/doc/lsof
info/lsof.list:/usr/share/doc/lsof/00LSOF-L
info/lsof.list:/usr/share/doc/lsof/README.Debian
info/lsof.list:/usr/share/doc/lsof/examples
info/lsof.list:/usr/share/doc/lsof/examples/00MANIFEST
info/lsof.list:/usr/share/doc/lsof/examples/count_pf.perl
info/lsof.list:/usr/share/doc/lsof/examples/shared.perl5.gz
info/lsof.list:/usr/share/doc/lsof/examples/list_NULf.perl5.gz
info/lsof.list:/usr/share/doc/lsof/examples/big_brother.perl5.gz
info/lsof.list:/usr/share/doc/lsof/examples/idrlogin.perl.gz
info/lsof.list:/usr/share/doc/lsof/examples/identd.perl5
info/lsof.list:/usr/share/doc/lsof/examples/watch_a_file.perl
info/lsof.list:/usr/share/doc/lsof/examples/xusers.awk
info/lsof.list:/usr/share/doc/lsof/examples/idrlogin.perl5.gz
info/lsof.list:/usr/share/doc/lsof/examples/count_pf.perl5
info/lsof.list:/usr/share/doc/lsof/examples/list_fields.awk.gz
info/lsof.list:/usr/share/doc/lsof/examples/00README
info/lsof.list:/usr/share/doc/lsof/examples/list_fields.perl.gz
info/lsof.list:/usr/share/doc/lsof/examples/sort_res.perl5
info/lsof.list:/usr/share/doc/lsof/00QUICKSTART.gz
info/lsof.list:/usr/share/doc/lsof/00FAQ.gz
info/lsof.list:/usr/share/doc/lsof/copyright
info/lsof.list:/usr/share/doc/lsof/changelog.Debian.gz
info/lsof.list:/usr/share/man/man8/lsof.8.gz
info/lsof.list:/usr/bin/lsof
status:Package: lsof
status-old:Package: lsof
有4个文件存在lsof相关信息,把它删除了再说
# rm -rf /var/lib/dpkg/info/lsof.md5sums
# rm -rf /var/lib/dpkg/info/lsof.list
# rm -rf /var/lib/dpkg/status
# rm -rf /var/lib/dpkg/status-old
再次执行安装lsof
提示/var/lib/dpkg/status
不存在
# apt install lsof
Reading package lists... Error!
E: flAbsPath on /var/lib/dpkg/status failed - realpath (2: No such file or directory)
E: Could not open file - open (2: No such file or directory)
E: Problem opening
E: The package lists or status file could not be parsed or opened.
再次执行,安装成功。
# touch /var/lib/dpkg/status
# apt install lsof
总结: 之前删除了4个文件,我再次尝试,发现只需要删除/var/lib/dpkg/status
这个文件,再重新创建,就可以执行安装了。其它文件都不需要动。
现象2
安装工具包,提示某个文件不存在
# apt install net-tools
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (2: No such file or directory)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?
解决思路:
- 先把不存在的文件创建出来,结果发现创建不成功。
- 经过排查发现是
/var/lib/dpkg
目录不存在,创建这个目录,再创建/var/lib/dpkg/lock-frontend
文件 - 上面2个步骤都解决后,碰到
/var/lib/dpkg/status
文件不存在的错误,只需创建这个文件即可解决 /var/lib/dpkg/status
这个文件创建完成后,再次执行安装工具包命令,错误出现了/var/lib/dpkg/updates/
这个目录不存在- 创建目录
/var/lib/dpkg/updates/
,再次执行安装工具包命令,出现错误提示/var/lib/dpkg/info/format-new
这个文件不存在 - 创建
/var/lib/dpkg/info/format-new
这个文件,提示创建不成功,排查发现/var/lib/dpkg/info
这个目录不存在 - 解决
/var/lib/dpkg/info/format-new
这个文件不存在的问题,接着安装工具包,成功了。
# touch /var/lib/dpkg/lock-frontend
touch: cannot touch '/var/lib/dpkg/lock-frontend': No such file or directory
# mkdir /var/lib/dpkg
# touch /var/lib/dpkg/lock-frontend
# touch /var/lib/dpkg/status
# mkdir /var/lib/dpkg/updates/
# mkdir /var/lib/dpkg/info
# touch /var/lib/dpkg/info/format-new
又碰到这个,应该知道怎么解决了,只需创建/var/lib/dpkg/status
# apt install net-tools
Reading package lists... Error!
E: flAbsPath on /var/lib/dpkg/status failed - realpath (2: No such file or directory)
E: Could not open file - open (2: No such file or directory)
E: Problem opening
E: The package lists or status file could not be parsed or opened.
# apt install net-tools
...
debconf: delaying package configuration, since apt-utils is not installed
dpkg: error: cannot scan updates directory '/var/lib/dpkg/updates/': No such file or directory
E: Sub-process /usr/bin/dpkg returned an error code (2)
Fetched 3382 kB in 8s (439 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
dpkg: error: unable to create new file '/var/lib/dpkg/info/format-new': No such file or directory
E: Sub-process /usr/bin/dpkg returned an error code (2)
# apt install net-tools
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
gcc-8-base libc6 libgcc1 libpcre3 libselinux1
Suggested packages:
glibc-doc debconf | debconf-2.0 locales
The following NEW packages will be installed:
Selecting previously unselected package gcc-8-base:amd64.
(Reading database ... 0 files and directories currently installed.)
Preparing to unpack .../gcc-8-base_8.4.0-1ubuntu1~18.04_amd64.deb ...
Unpacking gcc-8-base:amd64 (8.4.0-1ubuntu1~18.04) ...
Selecting previously unselected package libgcc1:amd64.
Preparing to unpack .../libgcc1_1%3a8.4.0-1ubuntu1~18.04_amd64.deb ...
Unpacking libgcc1:amd64 (1:8.4.0-1ubuntu1~18.04) ...
Selecting previously unselected package libc6:amd64.
Preparing to unpack .../libc6_2.27-3ubuntu1.5_amd64.deb ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Unpacking libc6:amd64 (2.27-3ubuntu1.5) ...
Selecting previously unselected package libpcre3:amd64.
Preparing to unpack .../libpcre3_2%3a8.39-9ubuntu0.1_amd64.deb ...
Unpacking libpcre3:amd64 (2:8.39-9ubuntu0.1) ...
Selecting previously unselected package libselinux1:amd64.
Preparing to unpack .../libselinux1_2.7-2build2_amd64.deb ...
Unpacking libselinux1:amd64 (2.7-2build2) ...
Selecting previously unselected package net-tools.
Preparing to unpack .../net-tools_1.60+git20161116.90da8a0-1ubuntu1_amd64.deb ...
Unpacking net-tools (1.60+git20161116.90da8a0-1ubuntu1) ...
Setting up gcc-8-base:amd64 (8.4.0-1ubuntu1~18.04) ...
Setting up libc6:amd64 (2.27-3ubuntu1.5) ...
debconf: unable to initialize frontend: Dialog
debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7.)
debconf: falling back to frontend: Teletype
Setting up libpcre3:amd64 (2:8.39-9ubuntu0.1) ...
Setting up libselinux1:amd64 (2.7-2build2) ...
Setting up net-tools (1.60+git20161116.90da8a0-1ubuntu1) ...
Setting up libgcc1:amd64 (1:8.4.0-1ubuntu1~18.04) ...