среда, 15 декабря 2010 г.

Как починить initramfs в Ubuntu

Иногда ubuntu перестает грузиться с ошибкой: udevadm trigger is not permitted while udev is unconfigured.
Что делать?


На самом деле все просто.
1. Грузимся с LiveCD (если у нас LVM, то с alternate livecd).
2. Выясняем информацию о нашем диске fdisk -l.
3. Монтируем диск mount /dev/sda1 /mnt. (Если диск разбит на несколько партиций, то монтируем с учетом этого).
4. Делаем chroot /mnt/.
5. Выясняем, версию последнего ядра: ls /boot/. Например нашли, что ядро 2.6.32-26-generic.
6. Выполняем команду update-initramfs -u -k 2.6.32-26-generic
7. Все, перезагружаемся.



пятница, 10 декабря 2010 г.

Медленная работа Captive Portal и web-интерфейса Pfsense

Pfsense - отличный продукт. Готовое решение на основе FreeBSD для управления трафиком. Грубо говоря, продвинутый роутер с веб-интерфейсом. Сделан на базе схожего решения m0n0wall. Основные фичи: NAT, traffic shaper, DHCP, DNS forwarder, VPN (PPTP, OpenVPN, IPSec), RIP, SNMP, CARP. Один недостаток. При включении Captive Portal, его страничка медленно открывается, да и web-интерфейс сильно тормозит.

Дело в том, что Pfsense создан для работы на слабом железе с малым объемом RAM. Соответствующим образом настроен и lighttpd, на котором крутится web часть решения. Чтобы повысить скорость общения с роутером нужно в файле /etc/inc/system.inc выставить параметры PHP_FCGI_MAX_REQUESTS и PHP_FCGI_CHILDREN в соответствии с задачей и объемом памяти. PHP_FCGI_CHILDREN задается переменной max_procs, значения которой зависят от RAM, в файле это выглядит так:

$avail = $memory[0];

        if($avail > 0 and $avail < 98) {
                $max_procs = 1;
        }

        if($avail > 97 and $avail < 128) {
                $max_procs = 1;
        }

        if($avail > 127 and $avail < 256) {
                $max_procs = 1;
        }

        if($avail > 255 and $avail < 384) {
                $max_procs = 3;
        }

        if($avail > 384) {
                $max_procs = 36;
        }

        if($captive_portal == true)  { 
                $bin_environment =  <<
        "bin-environment" => (
                        "PHP_FCGI_MAX_REQUESTS" => "9500",
                        "PHP_FCGI_CHILDREN" => "$max_procs"
        ),


По умолчанию при объеме памяти больше 384 max_procs=4, а PHP_FCGI_MAX_REQUESTS=500.
В моем pfsense-маршрутизаторе 2 Гб ОЗУ, поэтому я выставил max_procs=36 и  PHP_FCGI_MAX_REQUESTS=9500. Т.е. приведенная выше часть конфига стала такой:

$avail = $memory[0];

if($avail > 0 and $avail < 98) {
                $max_procs = 1;
        }

        if($avail > 97 and $avail < 128) {
                $max_procs = 1;
        }

        if($avail > 127 and $avail < 256) {
                $max_procs = 1;
        }

        if($avail > 255 and $avail < 384) {
                $max_procs = 3;
        }

        if($avail > 384) {
                $max_procs = 36;
        }

        if($captive_portal == true)  { 
                $bin_environment =  <<
        "bin-environment" => (
                        "PHP_FCGI_MAX_REQUESTS" => "9500",
                        "PHP_FCGI_CHILDREN" => "$max_procs"
        ),