пятница, 23 ноября 2012 г.

Свободная java и ipmi от SuperMicro

Просто напоминалка, как заставить работать java-интерфейс IPKVM (ipmi) от серверов Supermicro при использовании свободной java. Интерфейс ipkvm работает в Oracle Java, но в свободной java выдает сообщение об ошибке: "iKVM64 in java.library.path" Для этого нужно сохранить на диск файл launch.jnlp и добавить в секцию с нужной архитектурой две строчки. Например так:
<resources os="Linux" arch="x86_64">
     <nativelib href="liblinux_x86_64.jar" download="eager" version="1.0.3"/>
     <property name="jnlp.packEnabled" value="true"/>
     <property name="jnlp.versionEnabled" value="true"/>
</resources>
Сохранить и можно запускать.

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

Немного читерства в играх

Во время очередного приступа ностальгии по старым игрушкам установил себе сразу несколько хитов прошлых лет. Но вот беда, совершенно растерял навыки, ничего не получается. А бывало, проходил "по честному" Jungle Strike по два раза за день, т.к. инернета у меня не было, а фидошная нода принимала соединения только ночью, и получить новую игру было затруднительно.
В более позднее время, эпохи Windows 95,98 пользовался отличной утилитой Cheat'o'matic. Еще был более продвинутый аналог ArtMoney. Вот и полез искать, что есть такого же под Linux.
Нашел scanmem. Работает очень просто. Из под root:
# scanmem <pid>
При запуске игр из-под dosbox нужно указывать pid досбокса.
Дальше в игре смотрим на какой-нибудь количественный параметр и указываем это число в консоли scanmem. Меняем в игре значение (стреляем, покупаем, лечимся и т.д.) и снова вводим это значение в scanmem. Повторяем операцию до тех пор, пока не будет найдено единственное место в памяти, где хранится это значение ( в случае с Jungle Strike таких мест было три).
И дальше даём команду
set 999
Где 999 -- это значение, которое нам нужно.

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

Запланировать проверку диска при перезагрузке

Чтобы запланировать проверку файловой системы при перезагрузке, надо в корне этой ФС создать пустой файл forcefsck. Например:
# touch /forcefsck
touch /var/forcefsck
touch /usr/forcefsck
touch /home/forcefsck
При следующей перезагрузке произойдут проверки. Другой вариант -- проверить, что в /etc/fstab для каждой ФС в последней колонке стоит цифра, отличная от нуля. Для корневой ФС -- единица, для остальных 2. После чего выполнить shutdown с ключом -F.

четверг, 9 августа 2012 г.

Добавление второго ip-адреса без использования виртуальных интерфесов ( алиасов ) в Centos.

Как известно, со времен ядра 2.2 сетевая подсистема была полностью переписана. Т.е. уже долгое время пользователи систем с ядром Linux могут навешивать дополнительные ip-адреса на интерфейсы родными средствами без использования костылей в виде дополнительных виртуальных интерфейсов (некоторые называют их алиасами).

Ядро 2.2 вышло в 1999 году, поэтому странно видеть, что многие администраторы до сих пор используют архаичные ifconfig/route и создают виртуальные интерфейсы для добавления второго ip-адреса.

Под виртуальными интерфейсами я подразумеваю вот это: eth0:0, p1p5:1 и т.д.

Разницу в использовании net-tools (ifconfig/route) и iproute2 (утилита ip) хорошо описал Александр sash-kan с форума http://unixforum.org/index.php?showtopic=129712

Так как же добавить второй ip-адрес интерфейсу? Легко:
Смотрим текущее состояние интерфейса:
# ip a s dev eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:d7:f9:6d brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.97/24 brd 192.168.4.255 scope global eth0
    inet6 fe80::a00:27ff:fed7:f96d/64 scope link 
       valid_lft forever preferred_lft forever
Добавим второй адрес
# ip a a 192.168.5.98/24 dev eth0
Смотрим, что получилось:
# ip a s dev eth0
2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:d7:f9:6d brd ff:ff:ff:ff:ff:ff
    inet 192.168.4.97/24 brd 192.168.4.255 scope global eth0
    inet 192.168.5.98/24 scope global eth0
    inet6 fe80::a00:27ff:fed7:f96d/64 scope link 
       valid_lft forever preferred_lft forever
Два полноценных равнозначных адреса без использования костылей. Поскольку ifconfig не может даже "вообразить", что у интерфейса могут быть два (три, двадцать три) адреса, то вывод этой команды будет неполным.
# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 08:00:27:D7:F9:6D  
          inet addr:192.168.4.97  Bcast:192.168.4.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fed7:f96d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:327348 errors:0 dropped:0 overruns:0 frame:0
          TX packets:488 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:24684863 (23.5 MiB)  TX bytes:83192 (81.2 KiB)
Поэтому на linux-машинах про команды ifconfig / route следует незамедлительно забыть.

Теперь нас интересует, как в Centos задавать второй ip-адрес автоматически, при перезагрузке. В интернете полно инструкций по Centos/RedHat/Fedora, но все они используют дополнительные виртуальные интерфейсы eth0:1. Это неправильно. Как сделать правильно, написано в документации к дистрибутиву, а именно в файле /usr/share/doc/initscripts-9.03.31/sysconfig.txt.

/etc/sysconfig/network-scripts/ifcfg-eth0:
DEVICE="eth0"
BOOTPROTO="static"
HWADDR="08:00:27:D7:F9:6D"
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
UUID="27b04fd3-4291-426f-b3d7-a60c1f5f3e60"
GATEWAY="192.168.4.1"

IPADDR0="192.168.4.97"
NETMASK0="255.255.255.0"

IPADDR1="192.168.5.98"
NETMASK1="255.255.255.0"

среда, 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 и пробуем подключиться.