GPG error — NO_PUBKEY

Бывают случаи, когда при выполнении команды apt-get update, выводится ошибка, где упоминается GPG:

W: A error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://www.deb-multimedia.org stable Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 5C808C2B65558117

Номер публичного ключа при этом может быть иным.
Решением проблемы является добавление в систему публичного GnuPG-ключа репозитория, из которого осуществляется попытка установить пакет (который, в свою очередь, подписан данным ключом):

gpg --keyserver pgpkeys.mit.edu --recv-key 5C808C2B65558117
gpg -a --export 5C808C2B65558117 | apt-key add -

Disk quota exceeded при наличии свободного места

Порой при работе сайта на арендованном VPS может появиться подобная ошибка:

Warning: mkdir(): Disk quota exceeded
in /var/www/site.ru/logger.php
on line XXX Can’t log exception

Работа сайта может быть нарушена при обращениях к БД. Сама БД при перезагрузке может выдавать ошибку:

mysql open: Disk quota exceeded

Аналогичную ошибку при запуске могут выдавать и все остальные программы.
Если при проверке наличия свободного места (команда df -h) мы видим, что свободного места ещё достаточно, то вероятно дело в ограничении максимального количества дескрипторов, установленных хостером. Следует обратиться в службу технической поддержки, уточнить, подошли ли Вы к пределу количества инод, и если это так, то попросить увеличить лимит. После этого попытаться заново запустить все необходимые службы.

SSHD — POSSIBLE BREAK-IN ATTEMPT!

Запись в журнале /var/log/auth.log вида

sshd[16793]: Address XXX.XXX.XXX.XXX maps to somedomain.com, but this does not map back to the address — POSSIBLE BREAK-IN ATTEMPT!

говорит о том, что при попытке проверить обратное сопоставление домена, полученный IP-адрес отличается от IP-адреса клиента SSH.
Это вполне распространённая ситуация, например: сервер А обслуживает домен somedomain.com и использует его в качестве своего имени, сам сайт somedomain.com физически находится на сервере Б; сервер А пытается подключиться к серверу С; сервер С проводя обратное сопоставление доменного имени клиента видит, что у домена somedomain.com должен быть IP-адрес сервера Б, который отличается от IP-адреса сервера А.
Данная запись может служить поводом для блокировки клиента, например программой fail2ban. Если IP-адрес XXX.XXX.XXX.XXX, указанный в записи журнала, является доверенным, а программа защиты блокирует этот адрес под предлогом спуфинга, то данную проблему можно решить добавив в файл конфигурации /etc/ssh/sshd_config строку (или отредактировав, при её наличии):

UseDNS no

Альтернативным способом отключения блокировок является правка фильтров программы защиты, например всё той же fail2ban, то есть исключение вышеуказанной фразы о взломе из регулярных выражений фильтров.

Open file limits

Часто при использовании какой-либо программы, при открытии большого количества файлов она сваливается, т.к. упирается в ограничение (по умолчанию 1024 открытых файла), выводя ошибку: failed (24: Too many open files). Текущее использование открытых файлов программой можно узнать так:

lsof -u процесс | wc -l

Многие программы умеют изменять ограничения самостоятельно, поэтому задать ограничение на количество открытых файлов можно в конфигурационном файле. Например, используя параметр open_files_limit в конфигурационном файле my.cnf сервера MySQL, или параметр worker_rlimit_nofile для Nginx.
Однако, заданные значения в конфигурационных файлах этих программ могут не применяться при перезапуске. В этом случае ограничение накладывается системой.
Можно узнать ограничение системы для текущего пользователя с помощью команды:

ulimit -a

А для всей системы в целом:

sysctl fs.file-max

Установить же новое значение для ограничения по файлам для текущего пользователя можно так:

ulimit -n значение

Если новые ограничения устанавливаются пользователем root и им же перезапускается Ваша программа, то, несмотря на то, что программа работает от имени другого пользователя, у неё должны вступить в силу новые настройки. Перезапустив программу, можно проверить, применились ли новые значения. Например, выполнить в MySQL команду:

show variables like ‘open_files_limit';

Однако, новые значения ограничений, устанавливаемые утилитой ulimit действуют в рамках одной сессии. Это означает, что при следующем подключении, настройки ограничений системы вернуться к исходным. Чтобы не использовать каждый раз данную утилиту, можно задать параметры ограничений в файле /etc/security/limits.conf. Например, для снятия ограничения на количество одновременно открытых файлов (до 65к, чего хватает в большинстве случаев) для всех пользователей, добавить в конец файла строки:

* soft nofile 65536
* hard nofile 65536

Также следует знать, что файл limits.conf является конфигурационным файлом PAM. А далеко не все программы при запуске используют PAM. Если Ваша программа из числа тех, что не используют PAM, то перед правкой файла limits.conf следует проверить директорию /etc/default/ на наличие конфигурационных файлов Вашей программы. И, если таковые имеются, добавить в конец её конфигурационного файла команду «ulimit -n 65536». Если же в /etc/default/ конфигурационных файлов Вашей программы нет, то можно принудить использовать настройки limits.conf для всех, добавив в конец файлов /etc/pam.d/common-session и /etc/pam.d/common-session-noninteractive (при наличии оного) строку:

session required pam_limits.so

После чего перезагрузить систему.

Завершение зависшего процесса

В настольной версии Ubuntu, если зависло какое то окно, его можно убить следующим образом: нажимаем Alt+F2, пишем в строку поиска «xkill», выбираем найденную утилиту, после чего тыкаем в зависшую программу изменившимся курсором мыши.

VMware — W110: Failed to build vmnet. Failed to execute the build command.

Если после установки VMware не запускается и пишет в /tmp/vmware-root/vmware-modconfig-XXXX.log ошибку:
W110: Failed to build vmnet. Failed to execute the build command.
Можно попробовать следующее:
1. создаём файл vmnet313.patch в домашней директории и пишем в него:

205a206
> #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
206a208,210
> #else
> VNetFilterHookFn(const struct nf_hook_ops *ops,        // IN:
> #endif
255c259,263
<    transmit = (hooknum == VMW_NF_INET_POST_ROUTING);
---
>    #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0)
>       transmit = (hooknum == VMW_NF_INET_POST_ROUTING);
>    #else
>       transmit = (ops->hooknum == VMW_NF_INET_POST_ROUTING);
>    #endif

2. открываем терминал и переходим с директорию модулей VWware

cd /usr/lib/vmware/modules/source

3. извлекаем модули vmnet

tar -xvf vmnet.tar

4. патчим ранее созданным файлом

patch vmnet-only/filter.c < ~/vmnet313.patch

5. кладем модуль обратно в тарбол

tar -uvf vmnet.tar vmnet-only

6. удаляем более ненужную директорию

rm -r vmnet-only

7. запускаем vmware-modconfig

/usr/lib/vmware/bin/vmware-modconfig —console —install-all

Remmina — Failed to read private key

При попытке подключиться к удаленному серверу по SSH с ключом, защищенным паролем, Remmina выдаёт ошибку: Автоматическая аутентификация по публичному ключу SSH не удалась: Failed to read private путь_до_ключа: key
Обойти проблему можно зайдя в консоль и добавив ключ:

ssh-add путь_до_ключа

Xneur — не отображается значок в трее

Если Xneur был установлен из Центра приложений Ubuntu, то его лучше удалить:

sudo apt-get remove xneur

После чего подключаем репозиторий xneur:

sudo add-apt-repository ppa:andrew-crew-kuznetsov/xneur-unstable

И устанавливаем программу:

sudo apt-get update
sudo apt-get install xneur

После установки, чтобы значок появился в трее, необходимо выполнить следующую команду в терминале:

gconftool-2 -s -t string /apps/gxneur/rendering_engine AppIndicator

Добавить программу в автозагрузку можно:

  • кликнув по значку программы в трее -> Параметры -> в открывшемся окне настроек закладка Параметры -> флаг Запускать автоматически при старте системы;
  • Dash -> Поиск на компьютере и в интернете -> Автоматически запускаемые приложения -> добавить -> имя GTK UI for X Neural Switcher, команда gxneur, описание Автоматический переключатель клавиатуры -> сохранить.

Cron — Выполнение PHP сценария с GET запросом

Для выполнения PHP файла по крону с GET запросом, можно воспользоваться программой GET. Запись в crontab имеет примерно такой вид:

0 0 * * * www-data /usr/bin/GET ‘http://mysite.ru/cron.php?module[]=exchange’

При отсутствии в системе программы /usr/bin/GET, следует установить пакет libwww-perl.