User Tools

Site Tools


Sidebar


Tags Cloud
start

Last updates

Безопасное обновление ядра через ssh в Debian

Во избежание потенциальных проблем с удаленным обновлением ядра, я пользуюсь механизмом fallback, реализованном в grub уже довольно давно.
В данном случае используется grub2, принятый по умолчанию в Debian Wheezy.

Обязательные элементы конфига загрузчика:

GRUB_DEFAULT=saved
GRUB_CMDLINE_LINUX_DEFAULT="panic=30"

В случае kernel panic сервер будет автоматически возвращен в последнее стабильное ядро. Мой конфиг загрузчика:

# grep ^[^#] /etc/default/grub
GRUB_DEFAULT=saved
GRUB_TIMEOUT=15
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on panic=30"
GRUB_CMDLINE_LINUX=""
GRUB_DISABLE_OS_PROBER=true

Просматриваем доступные загрузчику ядра:

# grub-mkconfig 2>/dev/null | perl -ne 'print "$1\n" if m/^menuentry.+?'\''(.+?)'\''/'
Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic
Debian GNU/Linux, with Linux 2.6.32-23-pve

Текущее ядро - стабильное, при проблемах мы вернемся именно в него:

# uname -rs
Linux 2.6.32-23-pve

Выставляем его в fallback:

# grub-set-default 'Debian GNU/Linux, with Linux 2.6.32-23-pve'

Ядро 3.11-rc5 является релиз-кандидатом, но в нем на данный момент наиболее полно реализована поддержка новых чипсетов под процессоры Haswell.
Команда grub-reboot разрешит загрузиться этому ядру только один раз. Реальной перезагрузки не произойдет.

# grub-reboot 'Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic'

Инсталляции Debian, произведенные не через debian-installer, зачастую не содержат в себе post-hook на перегенерацию initrd.
Поэтому выполняем его вручную:

# update-initramfs -k all -u

Обновляем конфиг загрузчика:

# update-grub2

Перезагружаем сервер в новое ядро:

# reboot

В случае успешной загрузки нового ядра сообщаем grub'у что теперь будем использовать обновленную версию:

# grub-set-default 'Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic'
2013/08/16 23:37 · kyxap

Установка групп пакетов в Debian Wheezy (minimal => standard)

Все просто.

apt-get install tasksel
aptitude install ~pstandard ~prequired ~pimportant -F%p
2013/08/06 10:56 · kyxap

Откат c testing до stable на примере Debian Wheezy 7.1

/etc/apt/apt.conf не должен содержать в себе упоминаний APT::Default-Release

/etc/apt/sources.list

deb http://mirror.yandex.ru/debian/ wheezy main contrib non-free
deb http://mirror.yandex.ru/debian/ jessie main contrib non-free  
deb http://security.debian.org/ jessie/updates main contrib non-free


Для отката с testing до stable достаточно внести в /etc/apt/preferences следующие записи:

Package: *
Pin: release a=stable
Pin-Priority: 1001

Package: *
Pin: release a=testing
Pin-Priority: 900

Package: *
Pin: release a=unstable
Pin-Priority: 800

Package: *
Pin: release o=Debian
Pin-Priority: -1

Если команда apt-cache policy выдает правильные приоритеты, то поочередно выполняем apt-get upgrade и apt-get dist-upgrade, после чего мы остаемся на ветке stable.
Теперь можем добавить в /etc/apt/apt.conf строку APT::Default-Release "wheezy";

2013/07/25 18:48 · kyxap

Установка из исходников php 5.2 на Debian Wheezy 7

На многих веб-серверах установлены php-скрипты, скомпилированные под старую версию Zend.
Из-за этого пришлось собирать php 5.2 на wheezy, что оказалось несколько нетривиальной процедурой.

  • Включаем deb-src в /etc/apt/sources.list
  • Выполняем
# apt-get build-dep php5
  • Тянем и распаковываем архив с исходниками в /opt/src
# mkdir -p /opt/src
# cd /opt/src
# wget http://museum.php.net/php5/php-5.2.17.tar.bz2
# tar xf php-5.2.17.tar.bz2
  • Следует учесть что старый php ничего не знает о новой мультиархитектурной структуре репозитория, потому не может нормально определить пути к библиотекам.
  • Стыдно и некультурно плодить симлинки из /usr/lib/x86_64-linux-gnu в /usr/lib/.

По возможности, избегайте этого, задавая LIBRARY_PATH и libdir при конфигурации

  • В директории с исходными кодами php создаем файл MyConfig.sh, в который записываем следующие строки:
#!/bin/sh
CFLAGS="-O2" LIBRARY_PATH=/usr/lib/x86_64-linux-gnu ./configure  --prefix=/opt/php-5.2.17 \
  --with-libdir=lib/x86_64-linux-gnu \
  --enable-calendar \
  --enable-sysvsem \
  --enable-sysvshm \
  --enable-sysvmsg \
  --with-jpeg-dir \
  --with-mcrypt \
  --with-mysql \
  --with-mysqli \
  --enable-bcmath \
  --with-bz2 \
  --with-gd \
  --with-zlib-dir \
  --with-curl \
  --enable-sockets \
  --with-iconv \
  --enable-mbstring \
  --enable-mbregex \
  --enable-ctype \
  --enable-shmop \
  --enable-wddx \
  --with-freetype-dir \
  --with-xmlrpc \
  --enable-dbase \
  --with-mime-magic \
  --with-mhash \
  --with-gettext \
  --with-pear \
  --with-apxs2=/usr/bin/apxs2
  • Возможно, придется доставить некоторые -dev в процессе конфигурации.

Если пан мае багато вильного часу та натхнення, то можно попробовать забекпортить и собрать suhosin.

  • По желанию - после компиляции применить checkinstall для сборки deb-пакета.
  • Устанавливаем Zend Optimizer для php 5.2.
2013/06/12 23:01 · kyxap

Welcome to your new DokuWiki

Congratulations, your wiki is now up and running. Here are a few more tips to get you started.

Enjoy your work with DokuWiki,
– the developers

Create your first pages

Your wiki needs to have a start page. As long as it doesn't exist, this link will be red: Last updates.

Go on, follow that link and create the page. If you need help with using the syntax you can always refer to the syntax page.

You might also want to use a sidebar. To create it, just edit the Tags Cloud page. Everything in that page will be shown in a margin column on the side. Read our FAQ on sidebars to learn more.

Please be aware that not all templates support sidebars.

Customize your Wiki

Once you're comfortable with creating and editing pages you might want to have a look at the configuration settings (be sure to login as superuser first).

You may also want to see what plugins and templates are available at DokuWiki.org to extend the functionality and looks of your DokuWiki installation.

Join the Community

DokuWiki is an Open Source project that thrives through user contributions. A good way to stay informed on what's going on and to get useful tips in using DokuWiki is subscribing to the newsletter.

The DokuWiki User Forum is an excellent way to get in contact with other DokuWiki users and is just one of the many ways to get support.

Of course we'd be more than happy to have you getting involved with DokuWiki.

2013/06/12 22:07

Техническое задание на подготовку и оптимизацию сервера с аппаратным raid10 из N x 3Tb (до 16TB) CentOS 6.x

Максимальный размер fs, который поддерживает ext4 - 16TB, в связи с чем на 16TB+ массивах приходится использовать btrfs.

Операционная система:
Linux CentOS 6.x amd64 последней версии

Роль сервера:
хранилище

Описание хранимых данных:
10% файлы по 5-7 Mb, 90% файлы 0.5-5Gb

Рейд-контроллер:
Просьба сразу обновить firmware на raid-контроллере до последней версии, предварительно сохранив копию заводской прошивки.
Убедиться что не будет проблем с HDD firmware и данной моделью контроллера. При необходимости обновить прошивку и на дисках.
Если у рейд-контроллера есть возможность отправки почтовых извещений о проблемах - настроить ее.
Совместимость дисков: http://www.adaptec.com/en-us/_common/compatibility/

IPMI:
Если есть возможность - крайне желательно подключить ipmi-интерфейс в dedicated порт и выделить отдельный IP.
Если внешнее подключение невозможно и если позволяют стойки - соединить порт ipmi-интерфейса SOHO-свитчом с 2nd NIC любого из серверов.
Очень важно чтобы ipmi-интерфейс не работал в shared режиме через сетевые интерфейсы сервера. Иначе при аппаратных проблемах сервер будет полностью недоступен.
Так же следует обновить прошивку IPMI-интерфейса, т.к. у Supermicro очень часто бывают проблемы с удаленной работой через консоль IPMI.

Система:
лучше если это будет программный mdadm-рейд на 2 диска, подключенных к материнской плате, а не к контроллеру
т.к. надо оставить возможность загружаться в ОС вне зависимости от состояния контроллера

Swap:
не использовать вообще

Корневая файловая система:
единым разделом /dev/md0 подмонтировать в /
файловая система ext3 или ext4
никаких отдельных разделов создавать не следует
опции монтирования в /etc/fstab оставить по-умолчанию
флаги fs так же можно оставить по-умолчанию

Приложения:
огромная просьба ставить всё нужное из официального репозитория, не собирая ничего из исходников

RAID10:
  Расчет приблизительной производительности рейда
  http://www.wesworld.net/raidcalculator.html
  Расчет размера stride
  http://busybox.net/~aldot/mkfs_stride.html

Важно
1. обеспечить автоматический failover при сбоях дисков
2. обеспечить максимальную скорость перестройки массива
3. минимизировать потери дискового пространства

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

Создание RAID10 для 24 дисков:
  raid10 на 20 диска + 2 диска установить в hotspare
  stripe size установить в максимальное значение 4096K

Файловая система ext4:
На массиве будут храниться файлы с размером >4Mb, что позволяет выставить размер блока fs в максимальные 64k.
По этой же причине нет нужды в большом количестве инод, поэтому можно уменьшить их общее количество для освобождения зарезервированного места.
Это делается при запуске mkfs.ext4 изменением соотношения количества инод к количеству байт с 1 иноды к 16384 байтам на 1 иноду к 32768 байтам.

Так же при создании файловой системы ext4 необходимо задать правильный размер stride и stripe-width.

stride или размер шага - это количество блоков, которые должны быть прочитаны или записаны на диск перед переходом к следующему.
Выставление этого параметра позволяет равномерно распределять метаданные по массиву, не позволяя им скапливаться на одном диске.
Если этого не сделать, то в будущем возможно значительное уменьшение скорости работы с RAID-массивом.
  Stride size = Stripe Size / Block Size
  
stripe width или ширина полосы - параметр, позволяющий задать ширину страйпа в блоках fs.
Правильное выставление этого параметра выравнивает файловую систему относительно границ дисков,
позволяя избавиться от традиционного недостатка RAID-массивов с контролем четности - операций read-modify-write.
Формула расчета stripe width для raid10: 
  Stripe width = Stride size * ( Raid10 Disk Members / 2)

Команда для создания файловой системы на raid10 с размером stripe в 4096k:
  mkfs.ext4 /dev/raid10 –b 65536 -i 32768 –E stride=64,stripe-width=704

Освобождение зарезервированных под суперпользователя блоков, отключение автоматического запуска fsck:
  tune2fs -i 0 -m 0 -c 0

Точка монтирования raid10:
/home

Опции монтирования raid10:
  noatime,nodiratime,errors=remount-ro
  так же в /etc/fstab два последних поля - fs_freq и fs_passno - должны быть выставлены в 0.
  

Анализ логов nginx / apache с помощью скриптов wtop и logrep

Фантастически полезная вещь для анализа логов вебсервера.

Очень быстро позволяют отловить медленные выполняющиеся запросы, найти использованную уязвимость, определить файлы с самым большим количеством трафика, отфильтровать ддос-ботов, выбрать самые популярные файлы для перемещения на SSD-кеш, собирать гео-статистику в live режиме, а так же железным аргументом дерзко попячить гордое щячло любителей денвера.

Скрипты написаны на python, соответственно, работать должны везде.

Брать по адресу http://code.google.com/p/wtop/

Главная утилита - logrep.
wtop лично мне не пригодился.

Руководство к logrep: http://code.google.com/p/wtop/wiki/UsingLogrep
Примеры использования: http://code.google.com/p/wtop/wiki/LogrepCookbook

Самое замечательное в logrep - это возможность применять к выводимым значениям операторы.
Т.е. мы можем полностью сформировать вывод скрипта, состоящий из заданных нами параметров и с примененными к ним необходимыми операторами.

Полный список выходных параметров, которыми мы можем оперировать, указан в руководстве под строкой AVAILABLE FIELDS.

Ключ -o позволяет указать используемые в output значения, разделенные табуляцией. К каждому выводимому зачению можно применить оператор.

Список операторов

count(*)     
avg(FIELD)   mean average
min(FIELD)   lowest seen value
max(FIELD)   highest seen value
sum(FIELD)   summation of all values
var(FIELD)   population variance
dev(FIELD)   deviation (square root of variance)

Ключ -s позволяет нам сортировать список, используя параметры вида -s "LIMIT:FIELDS:DIRECTION",
где LIMIT - это общее количество выводимых строк, FIELDS - выводимые значения, а DIRECTION - направление сортировки: 'd' - descending (по умолчанию), 'a' - acending.

Формирование списка наиболее востребованных файлов для выноса на SSD-диск (для Nginx)

Т.к. изначально скрипт создавался для работы с CustomLog типа combined вебсервера Apache, нам необходимо добавить в формат лога nginx переменную $request_time.

Формат лога для nginx

log_format mp4 '$remote_addr - $remote_user [$time_local] '
              '"$request" $status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $request_time' ;

Сортировка по top10 URL:

# logrep -o 'url,count(*)' -s '10:2' /home/log/httpd/yziltz.com/access_log

/videos/ztod.com/546fg/168nzrr/1.mp4            324
/videos/wtfpass/104ghd/560wyqe/1.mp4            259
/videos/evilangel/1004hf/457elux/1.mp4          205
/videos/ztod.com/546fg/84rqek/1.mp4             203
/videos/wtfpass/104ghd/505dtve/1.mp4            192
/videos/realitykings/986fk/314qiga/1.mp4        173
/videos/wtfpass/104ghd/18ifvr/1.mp4             153
/videos/brazzers/758gf/350ihij/1.mp4            143
/videos/wtfpass/104ghd/533jdzo/1.mp4            125
/videos/bangbros/754hj/100geoo/1.mp4            122

где параметрами -o являются

url - URL файла
count(*) - количество всех уникальных вхождений URL,

а параметрами -s

10 - это количество выводимых файлов,
2 - сортировка по полю #2.

В нашем случае поле #2 - это count(*).
Тип сортировки не указан и по умолчанию это 'd' - descending.

Сортировка по top10 URL с отображением дополнительных параметров:

Добавим новые значения в список параметров:

# logrep -o 'url,count(*),avg(msec),sum(bytes)' -s '10:2' /home/log/httpd/yziltz.com/access_log

/videos/evilangel/1004hf/457elux/1.mp4          800     63330.12        1265011232
/videos/wtfpass/104ghd/18ifvr/1.mp4             446     55150.93        199966883
/videos/naughty_america/634fs/6kryk/1.mp4       413     66149.11        422437989
/videos/naughty_america/634fs/83nbna/1.mp4      361     41608.23        284347235
/videos/wtfpass/104ghd/606pfgb/1.mp4            352     35669.83        129798205
/videos/wtfpass/104ghd/216pcko/1.mp4            330     50201.86        563510318
/videos/ztod.com/546fg/168nzrr/1.mp4            325     48295.78        238183106
/videos/wtfpass/104ghd/560wyqe/1.mp4            311     121607.30       4415056002
/videos/wtfpass/104ghd/387jkmy/1.mp4            309     52073.58        677026365
/videos/wtfpass/104ghd/505dtve/1.mp4            240     233122.70       1272250219

Дополнительными параметрами будут avg(msec) - среднее время отдачи файла и sum(bytes) - общий трафик, пришедшийся на этот файл.

А теперь добавим фильтр -f, в котором выведем результаты только за последний час (3600 секунд).
Для этого мы применим unixtime как самый простой способ.

# CUR_DATE=`date +"%s"`; HOUR_OFFSET=`echo "$CUR_DATE - 3600" | bc`; logrep -f "ts<$HOUR_OFFSET" -o 'url,count(*),avg(msec),sum(bytes)' -s '10:2' /home/log/httpd/yziltz.com/access_log
/videos/ztod.com/546fg/168nzrr/1.mp4            325     48295.78        238183106
/videos/wtfpass/104ghd/560wyqe/1.mp4            267     117390.16       2869373722
/videos/evilangel/1004hf/457elux/1.mp4          225     152913.27       954288822
/videos/ztod.com/546fg/84rqek/1.mp4             203     55998.36        188930211
/videos/wtfpass/104ghd/505dtve/1.mp4            196     216440.77       1093232840
/videos/realitykings/986fk/314qiga/1.mp4        173     203926.49       973211068
/videos/wtfpass/104ghd/18ifvr/1.mp4             161     114550.71       145899888
/videos/wtfpass/104ghd/533jdzo/1.mp4            147     182660.09       1100896430
/videos/bangbros/754hj/100geoo/1.mp4            145     175528.83       609455138
/videos/brazzers/758gf/350ihij/1.mp4            143     213783.88       144107563
2013/06/01 08:20
start.txt · Last modified: 2016/09/22 01:27 by kyxap