Reputation: 5627
I am trying to install packages on my linux OS using the command apt-get install ...
.
The problem is that I get this error:
Selecting previously unselected package liberror-perl.
dpkg: unrecoverable fatal error, aborting:
files list file for package 'java-common' is missing final newline
E: Sub-process /usr/bin/dpkg returned an error code (2)
Googling the error (even line by line), the solution SEEMS to be "to download and install missing packages to resolve dependencies" as it was point out here. The problem is that when I try to execute sudo apt-get -f install
I continue to have the same error again and again. Any suggestion? How can I change the packages if I cannot use apt-get?
Upvotes: 7
Views: 20557
Reputation: 15
To anyone trying this out on python3
and getting this error:
Traceback (most recent call last):
File "/home/atharva/Documents/development/fix_updates.py", line 20, in <module>
f.seek(-1, os.SEEK_END)
io.UnsupportedOperation: can't do nonzero end-relative seeks
the following modified script (original posted above by @Leos313) should do the trick
#!/usr/bin/python3
import os
dpkg_path = '/var/lib/dpkg/info/'
paths = os.listdir(dpkg_path)
for path in paths:
full_path = os.path.join(dpkg_path, path)
try:
with open(full_path, 'r+b') as f:
f.seek(0, os.SEEK_END)
if f.tell() > 0:
f.seek(-1, os.SEEK_END)
last_char = f.read(1)
if last_char != b'\n':
f.write(b'\n')
print(f'Added newline character to: {full_path}')
except IOError as e:
print(f"Error processing {full_path}: {e}")
except Exception as e:
print(f"Unexpected error processing {full_path}: {e}")
Upvotes: 1
Reputation: 1
I tried the below command and it worked for me
$ sudo apt-get update
$ sudo apt update && sudo apt upgrade
Upvotes: 0
Reputation: 1056
It fixed the problem for me.
Upvotes: 0
Reputation: 41
If you get the below error
dpkg: unrecoverable fatal error, aborting: files list file for package 'java-common' is missing final newline E: Sub-process /usr/bin/dpkg returned an error code (2)
Note : java-common is the list name
Solve this using below commands(Modify java-common with your list name)
sudo rm /var/lib/dpkg/info/java-common.list
sudo apt-get install java-common --reinstall
sudo dpkg --configure -a sudo apt update sudo apt upgrade
Upvotes: 0
Reputation: 5627
I have solved the problem using the python script:
#!/usr/bin/python
# 8th November, 2009
# update manager failed, giving me the error:
# 'files list file for package 'xxx' is missing final newline' for every package.
# some Googling revealed that this problem was due to corrupt files(s) in /var/lib/dpkg/info/
# looping though those files revealed that some did not have a final new line
# this script will resolve that problem by appending a newline to all files that are missing it
# NOTE: you will need to run this script as root, e.g. sudo python newline_fixer.py
import os
dpkg_path = '/var/lib/dpkg/info/'
paths = os.listdir(dpkg_path)
for path in paths:
path = dpkg_path + path
f = open(path, 'a+')
data = f.read()
if len(data) > 1 and data[-1:] != '\n':
f.write('\n')
print 'added newline character to:', path
f.close()
After running the script with the command sudo python name_script.py
, the problem was solved: it seems that some files were corrupted. The solution was proposed here
Upvotes: 20
Reputation: 71
You have to remove that missing file
sudo rm /var/lib/dpkg/info/java-common.list
Now you can reinstall this
sudo apt-get install java-common --reinstall
Upvotes: 6