четверг, 27 сентября 2012 г.

Рабочий hibernate при использовании LVM2 swap

Вчерашний вечер ушел на миграцию дисковой подсистемы ноутбука на LVM2. С разбиением на разлелы я решил не хитрить (для ноутбука оно себя редко оправдывает) и сделал минимальное разбиение диска

/dev/sda1           /boot  ext2
/dev/sda2                  LVM2 PV

/dev/laptop/rootfs  /      ext4
/dev/laptop/home    /home  ext4
/dev/laptop/swap           swap

При этом я оставил небольшой запас (порядка 10GB) неиспользованного пространства в группе томов laptop чтобы была возможность использовать снапшоты либо создать дополнительный том в будущем.

Хочу отметить, что я стараюсь не использовать название групп томов в виде VolGroup0, vg0 и прочие, т.к. существует вероятность того, что эту группу томов придется активировать на другом компе и там окажется группа томов с таким же названием.

Если вы мигрируете существующую систему и используете swap на LVM2, то для корректной работы засыпания на диск (hibernation) нужно проверить настройку initramfs-tools.

Логический том имеет название /dev/laptop/swap, но в настройку нужно внести generic путь из device-mapper - для моего случая это будет /dev/mapper/laptop-swap

Остается обновить конфигурацию initramfs-tools и перегенерировать initramfs

# echo 'RESUME=/dev/mapper/laptop-swap' > /etc/initramfs-tools/conf.d/resume
# update-initramfs -u

Теперь для работы hibernate не нужно писать параметр resume= в опциях ядра.

среда, 26 сентября 2012 г.

Новые версии vzctl и ploop

Сегодня пришло письмо от крона, который проверяет доступность обновлений на серверах работающих с легковесной виртуализацией OpenVZ. На продакшен серверах я предпочитаю не полагаться на автоматическое обновление и поэтому установка обновлений производится вручную.

Обычно проверив список обовляемых пакетов я топаю на сервер и выполняю там

# yum upgrade

Но сегодня видимо особый день и привычный процесс отвалился с множеством ошибок и конфликтов зависимостей. В списке конфликтов были vzctl и ploop, которым не понравилась версия ядра vzkernel (установлено последнее доступное openvz-ядро для CentOS 5).

Ответ нашелся в списке новостей на сайте openvz. Оказалось, что вчера вышли новые версии vzctl и ploop и для работы последнего нужно работающее ядро vzkernel >= 2.6.32-042stab061.1. Причем нет возможности отдельно обновить vzctl поскольку ему нужен свежий ploop.

Чтобы попытки обновить vzctl и ploop не мешали установке других апдейтов, пришлось отключить секцию openvz-utils в yum (еще можно добавить их в exclude в /etc/yum.conf, но мне проще вырубить всю ветку).

Из приятных новостей - в vzctl добавили возможность работать на относительно свежих немодифицированных ядрах. При этом пока такая поддержка объявлена экспериментальной и похоже ничего кроме как запустить контейнер у вас не получится (сейчас даже штатное выключение контейнера не работает). Полный список фич: vzctl-4.0, ploop-1.5

В процессе прочтения новостей, наткнулся на видео, где показывают разницу между online и offline миграцией в openvz.

суббота, 15 сентября 2012 г.

New Midnight Commander bugfix releases

Only few days passed after previous Midnight Commander release. Yesterday I got email notification about Midnight Commander bugfix release.

ChangeLog
Debian/Ubuntu repositories was freezed because of the upcoming Wheezy release, so you can find the latest versions in my repository.

четверг, 13 сентября 2012 г.

Простой HTTP сервер на perl

Сегодня нужно было проверить скорость HTTP соединения на сервере без использования установленного там Apachе (были подозрения, что скорость HTTP соединений ограничивал либо сам Apache, либо внешний шейпер).

Немного погуглил и нашел простенький скрипт написанный на perl, который только отдает один файл на заранее определенный запрос.

#!/usr/bin/env perl

use HTTP::Daemon;
use HTTP::Status;

my $d = new HTTP::Daemon
            LocalAddr   => '0.0.0.0',
            LocalPort   => '8080';
print "Please contact me at: url, ">\n";
while (my $c = $d->accept) {
    while (my $r = $c->get_request) {
        if ($r->method eq 'GET' and $r->url->path eq "/speed-test") {
            $c->send_file_response("/tmp/test.bin");
        } else {
            $c->send_error(RC_FORBIDDEN)
        }
    }
    $c->close;
    undef($c);
}

В этом варианте скрипт начинает слушать порт 8080 на всех доступных интерфейсах и отдает файл /tmp/test.bin на запрос "GET /speed-test HTTP/1.0". Ну или можно открыть в браузере ссылку http://server-ip:8080/speed-test

среда, 12 сентября 2012 г.

понедельник, 10 сентября 2012 г.

Пробрасывание внешнего ip на виртуальный сервер

Редко, но метко в моей практике возникает задача, когда нужно быстро поднять сервер с "белым ip" для демонстрации результатов работы или просто для целей тестирования нового функционала перед выкатыванием его в продакшен. Каждый раз арендовать VDS для этого накладно, а связываться с облаками для подобных целей мне не хочется.

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