Я обновил Ubuntu 15.10 до 16.04 и где-то должна была случиться моя беда.
Я впервые осознал свою проблему, когда захотел сделать sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
. Там я получил:
modprobe: ERROR: ../libkmod/libkmod.c:586 kmod_search_moddep() could not open moddep file '/lib/modules/4.2.0-25-generic/modules.dep.bin'
modprobe: FATAL: Module ip_tables not found in directory /lib/modules/4.2.0-25-generic
iptables v1.6.0: can't initialize iptables table `filter': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
Хорошо, есть проблема с /lib/modules/4.2.0-25-generic
...
Затем я попытался отремонтировать sudo depmod
. Но я получил:
depmod: ERROR: could not open directory /lib/modules/4.2.0-25-generic: No such file or directory
depmod: FATAL: could not search modules: No such file or directory
Теперь я хотел пересобрать ядро с помощью sudo apt-get install --reinstall linux-...
, вот несколько версий вроде:
linux-image-3.13.0-24-generic
linux-image-3.4.0-4-goldfish
linux-image-4.4.0-21-generic
linux-image-4.4.0-21-lowlatency
linux-image-4.4.0-22-generic
linux-image-4.4.0-22-lowlatency
но нет linux-image-4.2.0-25-generic
. Странная вещь. Итак, при обновлении Linux каким-то образом была установлена старая и неправильная версия ядра.
Теперь я хочу посмотреть, где эта версия сохранена. И я нашел ее в uname -r
команда. Так apt-get install linux-image-'uname -r'-dbgsym
, было похоже:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package linux-image-4.2.0-25-generic-dbgsym
E: Couldn't find any package by glob 'linux-image-4.2.0-25-generic-dbgsym'
E: Couldn't find any package by regex 'linux-image-4.2.0-25-generic-dbgsym'
Но я понятия не имею, как изменить uname -r
рукой. И я также не знаю, почему я ошибся в версии. И самое главное, если это хорошая идея изменить uname
.
Кстати, я использую Digitalocean и обновился через do-release-upgrade
.
Я просто хотел увидеть свое текущее ядро. А это на самом деле 4.4.0-22:
sudo update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.4.0-22-generic
Found initrd image: /boot/initrd.img-4.4.0-22-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
но uname по-прежнему говорит:
uname -r
4.2.0-25-generic
Может кто-нибудь объяснить мне, что могло случиться и как решить?
Вы не можете установить собственное ядро или модули ядра на VPS. Если вам абсолютно необходимы определенные модули ядра, вам следует проконсультироваться со своим хостом.
я думаю filter
модуль обязательно должен быть включен.
Мне просто нужно было устанавливать в ядро в Digitalocean. Теперь у меня правильное ядро (4.4.0.22) и iptables тоже работают.