воскресенье, 27 марта 2016 г.

Переброс интерфейса на другую сетевую карту

Проблемы с основной сетевой картой (eth0). Задача состоит в том, чтобы перекинуть все на вторую сетевую карту, которая не используется (eth1), свободных портов на циске нет, поэтому придется еще и сбросить таблицу MAC-адресов.

ISPmanager 4: server registration result = 'ERROR 9 : MySQL error

Довелось мне на Debian 7 обновить MySQL с версии 5.5 на версию 5.7.
Обновление вроде как самое обычное:
# echo "deb http://repo.mysql.com/apt/debian/ wheezy mysql-5.7" > /etc/apt/sources.list
# apt-get update
# apt-get install mysql-server mysql-client libmysqlclient20

Но после этого в панели перестала отображаться вкладка "Базы данных".
Зайдя в "Возможности" я обновил список пакетов и панель увидела, что MySQL 5.7 установлен, но не включен. Попытки включить через панель не получались.

В логах наткнулся на такую строчку:
# tail -f /usr/local/ispmgr/var/pkgctl.log
Mar 27 01:24:35 [20551:0] ../../src/mgr/install/pkgmysql.cpp:381 ESC[1;33mDEBUG server registration result = 'ERROR 9 : MySQL error

Решается это так:
# mysql_upgrade -u root -p

После этого снова попробовал включить MySQL через панель, получилось. Вкладка в панели тоже появилась.

четверг, 24 марта 2016 г.

Сборка PHP 7 в Debian

Установка зависимостей:
# apt-get install git checkinstall \
   apache2-threaded-dev libxml2-dev \
   libcurl4-openssl-dev libjpeg-dev \
   libpng-dev libxpm-dev \
   libmysqlclient-dev libpq-dev \
   libicu-dev libfreetype6-dev \
   libldap2-dev libxslt-dev \
   build-essential autoconf \
   bison libbz2-dev \
   libgmp-dev libmcrypt-dev \
   libpspell-dev librecode-dev php-pear

Собираем пакет:
# cd /root
# git clone https://git.php.net/repository/php-src.git 
# cd php-src
# ./buildconf
# ./configure --prefix=/opt/php7 \
   --with-config-file-path=$HOME/tmp/usr/etc \
   --enable-fpm --enable-mbstring --enable-zip --enable-bcmath \
   --enable-pcntl --enable-ftp --enable-exif --enable-calendar \
   --enable-sysvmsg --enable-sysvsem \
   --enable-sysvshm --enable-wddx --with-curl --with-mcrypt \
   --with-iconv --with-gmp --with-pspell --with-gd \
   --with-jpeg-dir=/usr --with-png-dir=/usr \
   --with-zlib-dir=/usr --with-xpm-dir=/usr \
   --with-freetype-dir=/usr --enable-gd-native-ttf \
   --enable-gd-jis-conv --with-openssl \
   --with-pdo-mysql=/usr --with-gettext=/usr \
   --with-zlib=/usr --with-bz2=/usr \
   --with-recode=/usr --with-mysqli=/usr/bin/mysql_config
# make
# checkinstall -D make install
# тут нужно исправить "Version" со значения "src" на  "7"

Если нужно сохранить пакет:
# mv ./php7-1_amd64.deb /root/php7-1_amd64.deb

Если используется селектор в ISPmanager 4, то нужно не забыть про /etc/phpversion

via.

понедельник, 21 марта 2016 г.

cPanel 500 error "Out of memory!"

При попытке просмотра списка поддоменов в cPanel появилась ошибка 500.
Если во время воспроизведения ошибки посмотреть в лог, то можно увидеть, что не хватает памяти панели:
# tail -f /usr/local/cpanel/logs/error_log
Out of memory!
Cpanel::FHTrap was not closed properly and was unable to return the result: []
[2016-03-21 19:01:37 +0300] warn [cpsrvd] The subprocess (cpanel (cpanel)) exited with an error: The subprocess reported error number 1 when it ended. at /usr/local/cpanel/Cpanel/Server/Handlers/SubProcess.pm line 155.
Cpanel::Server::Handlers::SubProcess::_report_subprocess_errors(Cpanel::Server::Handlers::SubProcess=HASH(0x26064d0)) called at /usr/local/cpanel/Cpanel/Server/Handlers/SubProcess.pm line 72
Cpanel::Server::Handlers::SubProcess::handler(Cpanel::Server::Handlers::SubProcess=HASH(0x26064d0), "subprocess_name", "cpanel (cpanel)", "subprocess_read_handle", IO::Handle=GLOB(0x2605eb8), "subprocess_write_handle", IO::Handle=GLOB(0x26062c0), "api_type", "html", ...) called at cpsrvd.pl line 6421
cpanel::cpsrvd::cpHandler("app", "cpanel", "document", "./frontend/x3/subdomain/index.html") called at cpsrvd.pl line 2387
cpanel::cpsrvd::dodoc_cpaneld() called at cpsrvd.pl line 1645
cpanel::cpsrvd::dodoc(HASH(0x1802ea0)) called at cpsrvd.pl line 1328
cpanel::cpsrvd::handle_one_connection() called at cpsrvd.pl line 844
cpanel::cpsrvd::script() called at cpsrvd.pl line 339

Смотрим сколько памяти у нас выделено под панель:
# grep maxmem /var/cpanel/cpanel.config
maxmem=2048

Немного добавим памяти:
# vim /var/cpanel/cpanel.config
maxmem=2548
# service cpanel restart

Ошибка исчезает.

воскресенье, 20 марта 2016 г.

суббота, 19 марта 2016 г.

tlstest.paypal.com cURL error

При попытке подключения к tlstest.paypal.com появляется ошибка:
# php -r '$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://tlstest.paypal.com/"); var_dump(curl_exec($ch));'
bool(false)

# curl -v https://tlstest.paypal.com/
* About to connect() to tlstest.paypal.com port 443 (#0)
*   Trying 23.77.253.128... connected
* Connected to tlstest.paypal.com (23.77.253.128) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* NSS error -5961
* Closing connection #0
* SSL connect error
curl: (35) SSL connect error

Такая ошибка может появляться, если на сервере отключена уязвимая SSLv3.
В таком случаем можно коннектиться по безопасному TLSv1:
# curl -v https://tlstest.paypal.com/ --tlsv1
* About to connect() to tlstest.paypal.com port 443 (#0)
*   Trying 23.77.253.128... connected
* Connected to tlstest.paypal.com (23.77.253.128) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
* SSL connection using TLS_RSA_WITH_AES_256_CBC_SHA256
* Server certificate:
* subject: CN=tlstest.paypal.com,OU=CDN Support,O="PayPal, Inc.",STREET=2211 N 1st St,L=San Jose,ST=California,postalCode=95131-2021,C=US,serialNumber=3014267,businessCategory=Private Organization,incorporationState=Delaware,incorporationCountry=US
* start date: Nov 06 00:00:00 2015 GMT
* expire date: Oct 26 23:59:59 2017 GMT
* common name: tlstest.paypal.com
* issuer: CN=Symantec Class 3 EV SSL CA - G3,OU=Symantec Trust Network,O=Symantec Corporation,C=US
> GET / HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: tlstest.paypal.com
> Accept: */*

< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Length: 20
< Date: Sat, 19 Mar 2016 10:26:09 GMT
< Connection: keep-alive

* Connection #0 to host tlstest.paypal.com left intact
* Closing connection #0

# php -r '$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://tlstest.paypal.com/"); curl_setopt($ch, CURLOPT_SSLVERSION, "1" ); var_dump(curl_exec($ch));'
PayPal_Connection_OK
bool(true)

четверг, 17 марта 2016 г.

ISPmanager: Этот IP адрес используется одним из почтовых доменов и не может быть удален

Если при попытке удаления IP-адреса в панели появляется подобная надпись, то нужно пойти в панель и сменить везде где используется этот адрес на другой.
В моем случае почтовых доменов было очень много и мне нужно было узнать какой именно домен использует этот адрес.
Сделать это можно так:
# cat /etc/exim/domainips | grep 1.2.3.4
site123.ru:1.2.3.4;

После того как мы узнали имя почтового домена, который занимает адрес идем в панель и меняем его на другой, после этого IP-адрес можно спокойно удалить.

среда, 16 марта 2016 г.

Проверка нескольких условий if в nginx

Имеется вот такой виртуальный хост:
server {
   server_name site.ru m.site.ru www.site.ru www.m.ste.ru;
...
}

Нужно сделать редирект http->https только для site.ru и для www.site.ru, но не для m.site.ru и www.m.site.ru:
set $flag 0;
if ($host = site.ru) {
   set $flag A;
}
if ($host != m.site.ru) {
   set $flag "${flag}B";
}
if ($scheme = http) {
   set $flag "${flag}C";
}
if ($flag = ABC) {
   return 301 https://$server_name$request_uri;
}

В .htaccess у меня прописан редирект с www на non-www:
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.m.site.ru$ [NC]
RewriteRule ^(.*)$ http://m.site.ru/$1 [R=301,L]

Проверка:
$ curl -I http://site.ru --silent | grep Loca
Location: https://site.ru/
$ curl -I http://www.site.ru --silent | grep Loca
Location: http://site.ru/
$ curl -I http://www.m.site.ru --silent | grep Loca
Location: http://m.site.ru/
$ curl -I http://m.site.ru --silent | grep Loca

среда, 9 марта 2016 г.

Ansible: nginx+php-fpm+mariadb+wordpress в контейнере Virtuozzo 7

Продолжаю разбираться с Ansible.
Тут вводная заметка по нему: http://blog.amet13.name/2016/02/ansible.html
А тут я устанавливал nginx на разные дистрибутивы: http://blog.amet13.name/2016/02/ansible-playbook-nginx.html

В этот раз задача была развернуть окружене на базе nginx+php-fpm+mariadb+wordpress в контейнере Virtuozzo. В принципе у меня это получилось. Текущий результат тут: https://github.com/Amet13/ansible-vz-wordpress

понедельник, 7 марта 2016 г.

Делист IP-адреса из черных списков Microsoft

Если приходит отбойник типа такого:
This message was created automatically by mail delivery software.

A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:

[email protected]
   host mx2.hotmail.com [65.54.188.126]
   SMTP error from remote mail server after MAIL FROM:<[email protected]> SIZE=2119269:
   550 SC-001 (BAY004-MC4F31) Unfortunately, messages from 1.2.3.4 weren't sent. Please contact your Internet service provider since part of their network is on our block list. You can also refer your provider to http://mail.live.com/mail/troubleshooting.aspx#errors.

Делистнуть можно тут.

суббота, 5 марта 2016 г.

Google Chrome: Unable to find expected entry 'main/binary-i386/Packages' in Release file

В Google Chrome недавно выпилили поддержку i386, после этого при попытке обновления списка пакетов появлялась ошибка:
$ sudo apt-get update
...
W: Failed to fetch http://dl.google.com/linux/chrome/deb/dists/stable/Release  Unable to find expected entry 'main/binary-i386/Packages' in Release file (Wrong sources.list entry or malformed file)
E: Some index files failed to download. They have been ignored, or old ones used instead.

Решение:
$ sudo sed -i -e 's/deb http/deb [arch=amd64] http/' "/etc/apt/sources.list.d/google-chrome.list"
$ sudo sed -i -e 's/deb http/deb [arch=amd64] http/' "/opt/google/chrome/cron/google-chrome"

И снова сделать update.

среда, 2 марта 2016 г.

Exim: retry time not reached for any host after a long failure period

Ошибка может появиться, если бьются базы exim'а.
# exim -Mvl 1ab5H4-0004J9-5c
2016-03-02 14:49:02 Received from [email protected] U=webmaster P=local S=50407
2016-03-02 14:49:02 [email protected] R=dnslookup T=remote_smtp defer (-53): retry time not reached for any host

Решение:
# cd /var/spool/exim/db
# rm retry retry.lockfile wait-remote_smtp wait-remote_smtp.lockfile
# service exim restart