вторник, 16 августа 2016 г.

Проблемы с eaccelerator (Invalid opcode, Unable to change cache directory)

Кривой eaccelerator, который нужно патчить при каждом чихе.
Например могут встретиться такие ошибки:
[error] [client 1.1.1.1] eAccelerator: Unable to change cache directory /var/cache/php-eaccelerator permissions
или
Fatal error: Invalid opcode 153/1/8. in /var/www/.../pdofetch.class.php on line 494

Для устранения первой ошибки мне помог этот патч:
# diff -U 0 eaccelerator.c_old eaccelerator.c
--- eaccelerator.c_old 2016-08-16 14:17:15.331786184 +0300
+++ eaccelerator.c 2016-08-16 13:34:36.592906639 +0300
@@ -1770 +1770 @@
-        if (buffer.st_mode != 777) {
+        if (buffer.st_mode != 040777) {

Для второй:
# diff -U 0 optimize.c_old optimize.c
--- optimize.c_old 2016-08-08 12:00:02.000000000 +0300
+++ optimize.c 2016-08-08 12:00:43.000000000 +0300
@@ -3503,0 +3504,11 @@
+    /* do not optimize if opcodes have "closures" */
+    zend_op* op = op_array->opcodes;
+    int len = op_array->last;
+    int line_num;
+
+    for (line_num = 0; line_num < len; op++,line_num++) {
+        if (op->opcode == ZEND_DECLARE_LAMBDA_FUNCTION) {
+            return;
+        }
+    }
+

Также можно еще в /etc/php.d/eaccelerator.ini попробовать сменить значение переменной eaccelerator.cache_dir:
eaccelerator.cache_dir = "/tmp"
;eaccelerator.cache_dir = "/var/cache/php-eaccelerator"

пятница, 12 августа 2016 г.

Блокировка по User-Agent с помощью IPTables

Блокируем все соединения на 80 и 81 порты, в которых есть совпадения с нужным UA:
# iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string "compatible; MSIE 6.0; Windows NT 5.1; SV1" -j DROP
# iptables -A INPUT -p tcp --dport 81 -m string --algo bm --string "compatible; MSIE 6.0; Windows NT 5.1; SV1" -j DROP

пятница, 22 июля 2016 г.

HTTPS для кастомного домена в blogger

Вдохновившись идеей автора блога https://www.stableit.ru/2016/06/cloudflare.html решил для своего блога наконец-таки включить HTTPS, потому что от Google я наверное уже не дождусь нативной поддержки.

Все что нужно было сделать, сменить DNS'ы на cloudflare'овские и включить SSL, больше мне ничего не нужно было.
А еще добавил правила редиректа с HTTP на HTTPS.

воскресенье, 26 июня 2016 г.

Использование TryStack для ознакомления с OpenStack

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

Сервис TryStack позволяет использовать уже готовое окружение OpenStack без развертывания сложной инфраструктуры на локальных серверах.

Для регистрации на сервисе необходимо иметь аккаунт в Facebook и вступить в группу TryStack.
Ведется разработка OpenStackID для авторизации на сервисе с помощью OAuth2, однако регистрация возможна только через Facebook.

вторник, 21 июня 2016 г.

Сброс пароля IPMI Supermicro

Устанавливаем ipmitool:
# apt-get install ipmitool

Если во время установки в конце появляются ошибки:
ipmievd: using pidfile /var/run/ipmievd.pid0
Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory
Unable to open interface
invoke-rc.d: initscript ipmievd, action "start" failed.
Unable to start ipmievd during installation.  Trying to disable.
значит надо подключить модули ядра для работы IPMI:
# lsmod | grep ipmi
# modprobe ipmi_devintf
# modprobe ipmi_si
# lsmod | grep ipmi
ipmi_si                26764  0 
ipmi_devintf            4029  0 
ipmi_msghandler        22871  2 ipmi_si,ipmi_devintf
# vim /etc/modules
ipmi_devintf
ipmi_si

Рестартим сервис и меняем пароль:
# service ipmievd restart
# ipmitool -I open user set password 2 P@$$w0rd
в данном случае цифра 2 означает ID пользователя ADMIN.

суббота, 11 июня 2016 г.

Подключение IP-адресов в CentOS 7 для работы SSH-туннеля

Задача: на сервере с CentOS 7 нужно добавить дополнительные IP-адреса, для каждого пользователя, который соединяется к SSH-туннелю исходящий трафик должен идти со своего адреса.
Например для user1 адрес должен быть 192.168.0.1, а для user2 192.168.0.2.

пятница, 10 июня 2016 г.

Беспарольный push в репозиторий на GitHub

Для того, чтобы не вводить каждый раз пароль при пуше на GitHub можно добавить публичный SSH-ключ в настройках репозитория, вот тут:

Затем идем изменяем url для репозитория и делаем тестовый push:
$ cd amet13.github.io/
$ git remote set-url origin [email protected]:Amet13/amet13.github.io.git
$ git push -u origin master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 600 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
To [email protected]:Amet13/amet13.github.io.git
   5e47dcf..c062630  master -> master
Branch master set up to track remote branch master from origin.

среда, 8 июня 2016 г.

Замена дисков с сохранением информации и расширение ФС в software RAID1

На сервере в software RAID1 установлены 2 диска по 1Тб, задача состоит в том, чтобы заменить эти два диска на диски 2Тб с сохранением всей информации.
Оригинал заметки отсюда.

Исходные данные:
# cat /proc/mdstat 
Personalities : [raid1] 
md1 : active raid1 sda3[0] sdb3[1]
      967979584 blocks super 1.2 [2/2] [UU]
md0 : active raid1 sda1[0] sdb1[1]
      262080 blocks [2/2] [UU]

суббота, 4 июня 2016 г.

cURL/yum и https в CentOS: Illegal instruction

С недавнего времени curl не может работать с https:
# curl https://google.com
Illegal instruction
# echo $?
132
# curl -v https://amet13.name
* About to connect() to amet13.name port 443 (#0)
*   Trying 103.203.90.2... connected
* Connected to amet13.name (103.203.90.2) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
*   CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none
Illegal instruction

У yum такая же проблема.

Баг описан тут: https://bugs.centos.org/view.php?id=10930
Там же есть и воркэраунды.

Пример:
# export NSS_DISABLE_HW_GCM=1
# curl -I https://google.com
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=UTF-8
Location: https://www.google.ru/?gfe_rd=cr&ei=Qd1SV6fINcWDZNuIjVA
Content-Length: 256
Date: Sat, 04 Jun 2016 13:53:05 GMT
Alternate-Protocol: 443:quic
Alt-Svc: quic=":443"; ma=2592000; v="34,33,32,31,30,29,28,27,26,25"

суббота, 14 мая 2016 г.

Nginx и systemd в CentOS 7

После перезагрузки контейнера с CentOS 7 не поднимается автоматически nginx.
В логах ошибка:
nginx: [emerg] bind() to 0.0.0.0:443 failed (99: Cannot assign requested address)

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

Сделал так:
# vim /etc/systemd/system/multi-user.target.wants/nginx.service
#After=network.target remote-fs.target nss-lookup.target
After=network.target remote-fs.target nss-lookup.target network-online.target

После перезагрузки nginx стал нормально подниматься.