Лечим Network is unreachable в Java на Debian/Ubuntu
Если у вас в Debian или Ubuntu не работают приложения, написанные на Java, ругаясь при этом как то так:
38 connect(22, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::ffff:72.5.124.95", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28
6938 connect(22, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::ffff:72.5.124.95", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)
Или вот так: Could not bind/listen. Network is unreachable.
Лечится это просто.
Редактируем файл /etc/sysctl.d/bindipv6only.conf и ставим там 0 вместо 1. Перегружаемся и всё работает! Проверено, у меня так hadoop, hbase не хотели запускаться.
Если хотите без перезагрузки, то можете ещё выполнить:
echo 0 > /proc/sys/net/ipv6/bindv6only
sysctl net.ipv6.bindv6only=0
Перенос MySQL в другую папку/раздел на Debian/Ubuntu
Недавно мне пришлось переместить данные MySQL в другую папку(а точнее на другой раздел) на Debian Linux 5.0.3.
Логично, что простым переносом файлов тут не отделаешься, надо что-то где-то прописать.
По-умолчанию данные MySQL лежат в /var/lib/mysql. Мне захотелось, чтобы они были в /home/mysql. Переносим папку mysql куда нам нужно, затем лезем в конфиг MySQL (/etc/mysql/my.cnf).
Там есть опция:
datadir = /var/lib/mysql |
Вот её мы заменяем на следующее:
datadir = /home/mysql |
Пробуем перезапустить наш MySQL сервер (/etc/init.d/mysql restart) и в итоге у нас ничего не запускается.
Смотрим tail /var/log/messages и видим приблизительно такое:
kernel: [ 2714.258037] audit(1227462526.718:13): type=1503 operation="inode_create" requested_mask="w::" denied_mask="w::" name="/home/mysql/yii.test" pid=19659 profile="/usr/sbin/mysqld" namespace="default" kernel: [ 2714.310572] audit(1227462526.770:14): type=1503 operation="inode_permission" requested_mask="rw::" denied_mask="rw::" name="/home/mysql/ibdata1" pid=19659 profile="/usr/sbin/mysqld" namespace="default" |
Это нам говорит о том, что политика AppArmor запрещает всякие манипуляции мусклу в новой папке. И это естественно, ведь AppArmor думает, что базы лежат всё там же, в /var/lib/mysql.
Значит надо переписать конфиг AppArmor. Открываем и редактируем /etc/apparmor.d/usr.sbin.mysqld . В нём меняем всё, где упоминается /var/lib/mysql на /home/mysql. Затем перезапускаем AppArmor и MySQL:
sudo service apparmor restart sudo /etc/init.d/mysql restart |
И у нас всё работает! Такая же схема для Ubuntu.