Неможливо встановити linux-libc-dev в Ubuntu в Windows


4

Я намагаюся встановити linux-libc-dev з apt-get в підсистемі Windows для Linux (ubuntu), але я отримую помилку, і я не можу її вирішити:

dpkg: error processing archive /var/cache/apt/archives/linux-libc-dev_3.13.0-126.175_amd64.deb (--unpack):
 unable to install new version of `/usr/include/linux/netfilter/xt_DSCP.h': File exists
Errors were encountered while processing:
 /var/cache/apt/archives/linux-libc-dev_3.13.0-126.175_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Але коли я перераховую файли в / usr / include /, каталог Linux навіть не існує.

Що може бути причиною цього? Як файл може існувати, коли каталог не працює?

Дякую.


Я наткнувся на те саме - чи ти коли-небудь знайшов дозвіл?
Пітер Тіррелл

На жаль, немає.
Петро

Відповіді:


3

Ймовірно, інсталяція була перервана посередині, залишивши її зламаною.

Знайдіть пакетовані пакети:

dpkg --configure -a

Слід повернути такий список, як:

Errors were encountered while processing:
libc6-dev:amd64
libstdc++-4.8-dev:amd64
g++-4.8
g++

Примушуйте видалити ці:

dpkg --remove libc6-dev
dpkg --remove g++
...

Очистіть кеш усіх завантажених пакетів, які є недійсними, та очистіть додаткові пакунки:

apt-get clean
apt-get autoremove

Ви повинні мати можливість apt-get install fooзнову.

Наскільки я знаю apt, недостатньо розумно це виправити, як тільки він потрапить у такий стан, вам доведеться відмовитися від явного очищення пакетів за допомогою dpkg --remove.


0

У мене була та сама проблема, і я виявив, що вона спрацьовує просто тому, що з якоїсь нещасної та дивної причини пакет Ubuntu linux-libc-devмістить кілька (заголовок) файлів з іменами, які відрізняються лише буквою, наприклад, /usr/include/linux/netfilter/xt_DSCP.hта /usr/include/linuxnetfilter/xt_dscp.h.

Проблема пов'язана з якоюсь дурною поведінкою WSL, а саме помилкою / неузгодженістю того, як реалізована файлова система, що враховує регістр. Припустимо, в якомусь каталозі є файл, і ви хочете створити в тому самому каталозі ще один файл з тим самим іменем, за винятком регістру. Це повинно працювати і створити другий файл на додаток до іншого (або, можливо, перезаписати існуючий файл). Однак це не вдається і, що ще гірше, призводить до оманливої ​​помилки:

touch a.txt touch A.txt врожайність touch: cannot touch 'A.txt': Input/output error

З іншого боку, можна створювати файли з обох випадків таким чином: touch b.txt touch x.txt mv x.txt B.txt ls {b,B}.txt урожай b.txt B.txt

Ось вирішення для пакетів з такими іменами linux-libc-dev_4.4.0-97.120_amd64.deb:

cd any-temp-dir

apt-get download linux-libc-dev
ar x linux-libc-dev*deb
tar xJf data.tar.xz        # ignore all erors like ./usr/include/linux/netfilter/xt_DSCP.h: Cannot open: Input/output error
tar cJf data.tar.xz ./usr
ar rcs linux-libc-dev*.deb debian-binary control.tar.gz data.tar.xz 

sudo dpkg -i linux-libc-dev*.deb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.