среда, 27 июня 2012 г.

Подсчет процессов

Встретил в книге одного "эксперта" по GNU/Linux следующий способ подсчета количества запущенных экземпляров определенного процесса:

ps aux | grep httpd | grep -v grep | wc -l

Unix-way, не спорю.
Что тут не так?
За grep -v grep нужно руки отрывать.
Уж можно было сделать ps aux | grep http[d], старый трюк, чтоб строчка с самой командой grep не выводилась в результатах. Но и это костыль:
 Давно известно, что на замену ps | grep есть pgrep. Ну а чтобы еще и посчитать, у pgrep есть опция -c.
Т.е. вызов четырех команд можно заменить одной:

pgrep -fc httpd


Всё давно придумано за нас.

P.S. в той книге встречаются еще и конструкции типа cat | grep | awk или grep | sed. "Эксперт", что уж поделаешь.

среда, 20 июня 2012 г.

Узнать время модификации файла

Как узнать время последней модификации файла?


Не просто узнать, а еще и перевести в unixtime, и при этом с минимумом телодвижений:
stat -c "%Y" filename


А вообще,man stat

пятница, 15 июня 2012 г.

Быстрое развертывание хоста виртуализации на Centos+KVM+libvirt

KVM -- специальная прослойка-интерфейс для предоставления доступа виртуальным машинам к реальному железу. Требует обязательной поддержки аппаратной виртуализации в процессоре.


1. Ставим Centos 6 x86_64 в минимальной конфигурации. Я обычно ставлю с netinstall, убрав галочки со всех компонентов.

2. Устанавливаем собственно модули, эмулятор qemu и библиотеку libvirt, которая является оберткой для комфортного управления машинами.
yum install qemu-kvm libvirt

3. В файле /etc/libvirt/libvirtd.conf находим и раскомментируем следующие опции (отключаем шифрование административного подключения, разрешаем входящие подключения по сети, режим аутентификации -- sasl):
listen_tls = 0
listen_tcp = 1
mdns_adv = 0
auth_tcp = "sasl"

4. Включаем "удаленный рабочий стол" по протоколу VNC. Там же можно включить протокол SPICE, если нужно. В файле /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0"
vnc_password = "pa55w0rd"

5. Еще одно место, где нужно разрешить демону libvirtd принимать соединения. В файле /etc/sysconfig/libvirtd
LIBVIRTD_ARGS="--listen"

6. Создать пользователя и задать ему пароль. Этот пользователь не имеет отношения ни к локальным unix-пользователям, ни к пользователям виртуальных машин. Это логин+пароль для подключения к libvird с другой машины. Дать команду:
saslpasswd2 -a libvirt username

7. Открыть в iptables подключения с админской машины (для VNC 5900/tcp, для libvirt 16509/tcp).

8. Запускаем.
service libvirtd start

9.Проверим работу локально.
virsh list
Если ошибок нет, значит всё, сервер настроен верно.

На админскую машину ставим virt-manager и пробуем подключиться.

среда, 11 апреля 2012 г.

Грабли в скриптах Gentoo

Как известно, чтобы в gentoo сеть поднималась автоматом при загрузке системы, нужно создать символьную ссылку с net.lo на net.eth0 и добавить последний в boot или в default Делал это много раз, а тут наступил на грабли. Итак, делаю ссылку:
 # cd /etc/init.d
# ln -s ./net.lo ./net.eth0
# rc-update add net.eth0 default
Делаю по привычке:
 # /etc/init.d/net.eth0 restart
 * WARNING: you are stopping a boot service
 * Caching service dependencies ...                                       [ ok ]
 * Bringing down interface lo
net.lo
lo
 * Bringing up interface lo
 *   127.0.0.1/8 ...                                                      [ ok ]
 *   Adding routes
 *     127.0.0.0/8 via 127.0.0.1 ...
Какого лешего перезапускается net.lo? Почему net.eth0 даже не шевельнулся? Нагуглить ничего не удалось, пришлось ковыряться самостоятельно. Оказалось, что символьную ссылку нужно создавать правильно, а именно так:
 # cd /etc/init.d
# ln -s net.lo net.eth0
Вот так. Всё дело в волшебных точках. На каком-то этапе скрипт net.lo, пытаясь определить имя интерфейса, удаляет своём названии всё до первой точки, наивно полагая, что всё оставшееся - и есть название интерфейса. Ну а если там получилось что-то непонятное, то по дефолту имя будет lo.

пятница, 16 марта 2012 г.

Перенос lvm тома

Перенос lvm тома
Появился новый жесткий диск, решил перенести на него всю систему.
Старый диск:
/dev/sdb1 - ext4, на нём корень
/dev/sdb2 - lvm, там /usr, /var, swap и шифрованный /home.

Все действия осуществляю, загрузившись с liveusb SystemRescueCD.

На новом диске создаю соответствующее разбиение.

Перенос раздела с ext4 (/dev/sdb1 -> /dev/sda1) делается просто:
# partclone -b -s /dev/sdb1 -O /dev/sda1
Переходим к lvm.

Форматируем раздел под lvm:
# pvcreate /dev/sda2
Растягиваем имеющуюся группу томов на оба раздела (старый и новый), до запуска команды в vg1 только один раздел
# vgextend vg1 /dev/sda2
Переносим непосредственно данные:
# pvmove /dev/sdb2 /dev/sda2
Удаляем из группы vg1 старый том:
# vgreduce vg1 /dev/sdb2
Готово. Только не забыть установить загрузчик на новый диск, и можно удалять старый.

суббота, 10 марта 2012 г.

Сделать фото вебкамерой из консоли

Простой способ сделать фото с подключенной вебкамеры (например для использования в скриптах):
mplayer -vo png -frames 1 tv://
Моя камера, видимо, не успевает до конца инициализироваться, поэтому вместо фото я получаю зеленый прямоугольник. Достаточным оказалось поставить параметр -frames 2, после чего первый кадр просто удаляю.

среда, 8 февраля 2012 г.

Модули virtualbox и ошибка Unknown symbol pv_irq_ops pv_lock_ops

Если попытка подгрузить модули VirtualBox ругается таким образом:
FATAL: Error inserting vboxdrv (/lib/modules/3.2.1-gentoo-r2/misc/vboxdrv.ko): Unknown symbol in module, or unknown parameter (see dmesg)
А в /var/log/messages сообщается следующее:
Feb  8 16:26:58 gentoobook kernel: vboxdrv: Unknown symbol pv_irq_ops (err 0)
Feb  8 16:26:58 gentoobook kernel: vboxdrv: Unknown symbol pv_lock_ops (err 0)
То нужно в ядре включить опцию CONFIG_UNUSED_SYMBOLS.