Leos313
Leos313

Reputation: 5627

dpkg:unrecoverable fatal error (files list file for package 'java-common' is missing final newline)

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

Answers (6)

Atharva Patil
Atharva Patil

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

Tarkeshwar
Tarkeshwar

Reputation: 1

I tried the below command and it worked for me

$ sudo apt-get update
$ sudo apt update && sudo apt upgrade

Upvotes: 0

Imam Hossain Roni
Imam Hossain Roni

Reputation: 1056

  • sudo dpkg --configure -a
  • sudo apt-get -f install sudo apt-get clean
  • sudo apt-get update && sudo apt-get upgrade

It fixed the problem for me.

Upvotes: 0

SanthoshRam
SanthoshRam

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

Leos313
Leos313

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

Ankit Kumar
Ankit Kumar

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

Related Questions