<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>Сохранить и можно запускать.
пятница, 23 ноября 2012 г.
Свободная java и ipmi от SuperMicro
Просто напоминалка, как заставить работать java-интерфейс IPKVM (ipmi) от серверов Supermicro при использовании свободной java.
Интерфейс ipkvm работает в Oracle Java, но в свободной java выдает сообщение об ошибке: "iKVM64 in java.library.path"
Для этого нужно сохранить на диск файл launch.jnlp и добавить в секцию с нужной архитектурой две строчки. Например так:
понедельник, 19 ноября 2012 г.
Немного читерства в играх
Во время очередного приступа ностальгии по старым игрушкам установил себе сразу несколько хитов прошлых лет. Но вот беда, совершенно растерял навыки, ничего не получается. А бывало, проходил "по честному" Jungle Strike по два раза за день, т.к. инернета у меня не было, а фидошная нода принимала соединения только ночью, и получить новую игру было затруднительно.
В более позднее время, эпохи Windows 95,98 пользовался отличной утилитой Cheat'o'matic. Еще был более продвинутый аналог ArtMoney. Вот и полез искать, что есть такого же под Linux.
Нашел scanmem. Работает очень просто. Из под root:
Дальше в игре смотрим на какой-нибудь количественный параметр и указываем это число в консоли scanmem. Меняем в игре значение (стреляем, покупаем, лечимся и т.д.) и снова вводим это значение в scanmem. Повторяем операцию до тех пор, пока не будет найдено единственное место в памяти, где хранится это значение ( в случае с 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-адрес интерфейсу? Легко:
Смотрим текущее состояние интерфейса:Ядро 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:Два полноценных равнозначных адреса без использования костылей. Поскольку ifconfig не может даже "вообразить", что у интерфейса могут быть два (три, двадцать три) адреса, то вывод этой команды будет неполным.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 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 следующий способ подсчета количества запущенных экземпляров определенного процесса:
Unix-way, не спорю.
Что тут не так?
За grep -v grep нужно руки отрывать.
Уж можно было сделать ps aux | grep http[d], старый трюк, чтоб строчка с самой командой grep не выводилась в результатах. Но и это костыль:
Давно известно, что на замену ps | grep есть pgrep. Ну а чтобы еще и посчитать, у pgrep есть опция -c.
Т.е. вызов четырех команд можно заменить одной:
Всё давно придумано за нас.
P.S. в той книге встречаются еще и конструкции типа cat | grep | awk или grep | sed. "Эксперт", что уж поделаешь.
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, и при этом с минимумом телодвижений:
А вообще,man stat
Не просто узнать, а еще и перевести в unixtime, и при этом с минимумом телодвижений:
stat -c "%Y" filename
А вообще,man stat
пятница, 15 июня 2012 г.
Быстрое развертывание хоста виртуализации на Centos+KVM+libvirt
KVM -- специальная прослойка-интерфейс для предоставления доступа виртуальным машинам к реальному железу. Требует обязательной поддержки аппаратной виртуализации в процессоре.
1. Ставим Centos 6 x86_64 в минимальной конфигурации. Я обычно ставлю с netinstall, убрав галочки со всех компонентов.
2. Устанавливаем собственно модули, эмулятор qemu и библиотеку libvirt, которая является оберткой для комфортного управления машинами.
3. В файле /etc/libvirt/libvirtd.conf находим и раскомментируем следующие опции (отключаем шифрование административного подключения, разрешаем входящие подключения по сети, режим аутентификации -- sasl):
4. Включаем "удаленный рабочий стол" по протоколу VNC. Там же можно включить протокол SPICE, если нужно. В файле /etc/libvirt/qemu.conf
5. Еще одно место, где нужно разрешить демону libvirtd принимать соединения. В файле /etc/sysconfig/libvirtd
6. Создать пользователя и задать ему пароль. Этот пользователь не имеет отношения ни к локальным unix-пользователям, ни к пользователям виртуальных машин. Это логин+пароль для подключения к libvird с другой машины. Дать команду:
7. Открыть в iptables подключения с админской машины (для VNC 5900/tcp, для libvirt 16509/tcp).
8. Запускаем.
9.Проверим работу локально.
На админскую машину ставим virt-manager и пробуем подключиться.
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.
понедельник, 30 января 2012 г.
Шифрование домашнего каталога
Миграция на шифрованный раздел.
По ряду причин решил зашифровать домашний каталог на ноутбуке, благо он вынесен на отдельный том lvm.
Было:
Стало:
Для этого мне понадобилось:
Включить в ядре опции:
Механизм миграции будет следующим: уменьшим текущий домашний раздел lvm до минимально возможного, создадим новый раздел lvm, зашифруем его, создадим на нем новый домашний раздел. Перенесем данные со старого раздела на новый. Далее настроим систему так, чтобы домашний раздел подключался только после входа пользователя в систему. После чего, по желанию, можно удалить старый раздел, расширить новый раздел lvm за счет старого, расширить зашифрованный раздел, а за ним уже расширить домашний раздел.
На домашнем разделе занято всего ~50 гигабайт.
Значит уменьшаю home до 60 гигабайт, создаю новый том lvm и шифрую его:
Создаю на новом домашнем разделе файловую систему и переношу туда данные со старого раздела
Добавляю в /etc/pam.d/system-auth строчки (выделены):
По ряду причин решил зашифровать домашний каталог на ноутбуке, благо он вынесен на отдельный том lvm.
Было:
+----------------------------------------------------+ | Disk /dev/sda | | +-------+---------------------------------------+ | | | sda1 | sda2 lvm | | | | | +------+------+------+--------------+ | | | | / | | /usr | /var | swap | /home | | | | | | +------+------+------+--------------+ | | | +-------+---------------------------------------+ | | | +----------------------------------------------------+
Стало:
+----------------------------------------------------+ | Disk /dev/sda | | +-------+---------------------------------------+ | | | sda1 | sda2 lvm | | | | | +------+------+------+--------------+ | | | | / | | /usr | /var | swap | luks | | | | | | | | | | +----------+ | | | | | | | | | | | /home | | | | | | | | | | | +----------+ | | | | | | +------+------+------+--------------+ | | | +-------+---------------------------------------+ | | | +----------------------------------------------------+* Кстати, схема-то упрощенная. У lvm не обозначена еще volume group :) *
Для этого мне понадобилось:
Включить в ядре опции:
Cryptographic API -> SHA224 and SHA256 digest algorithm (CONFIG_CRYPTO_SHA256)и
Device Drivers ->Далее я пересобрал ядро и установил пакет cryptosetup.
Multiple devices driver support (RAID and LVM) ->
Device mapper support ->
Crypt target support (CONFIG_DM_CRYPT)
Механизм миграции будет следующим: уменьшим текущий домашний раздел lvm до минимально возможного, создадим новый раздел lvm, зашифруем его, создадим на нем новый домашний раздел. Перенесем данные со старого раздела на новый. Далее настроим систему так, чтобы домашний раздел подключался только после входа пользователя в систему. После чего, по желанию, можно удалить старый раздел, расширить новый раздел lvm за счет старого, расширить зашифрованный раздел, а за ним уже расширить домашний раздел.
На домашнем разделе занято всего ~50 гигабайт.
Значит уменьшаю home до 60 гигабайт, создаю новый том lvm и шифрую его:
# lvresize -r -L60G /dev/mapper/vg-home # lvcreate -n hm -l 51734 vg # cryptosetup luksFormat /dev/mapper/vg-hmПароль в последнем шаге должен совпадать с паролем пользователя, т.к. пароль автоматически передается во время входа в систему.
Создаю на новом домашнем разделе файловую систему и переношу туда данные со старого раздела
# cryptsetup luksOpen /dev/mapper/vg-hm secret # mkfs.ext4 /dev/mapper/secret # mkdir /mnt/temp # mount /dev/mapper/vg-hm /mnt/temp # cp -r /home/* /mnt/temp # umount /mnt/tempТеперь устанавливаю pam_mount. У этого пакета необходимо включить USE-флаг crypt.
Добавляю в /etc/pam.d/system-auth строчки (выделены):
auth required pam_env.so auth required pam_unix.so try_first_pass likeauth nullok auth optional pam_permit.so auth optional pam_mount.so account required pam_unix.so account optional pam_permit.so password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3 password required pam_unix.so try_first_pass use_authtok nullok sha512 shadow password optional pam_permit.so session required pam_limits.so session required pam_env.so session required pam_unix.so session optional pam_permit.so session optional pam_mount.soА в /etc/security/pam_mount.conf.xml следующее:
<?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd"> <!-- See pam_mount.conf(5) for a description. --> <pam_mount> <!-- debug should come before everything else, since this file is still processed in a single pass from top-to-bottom --> <debug enable="0" /> <!-- Volume definitions --> <volume user="yuri" path="/dev/mapper/vg-hm" mountpoint="~" cipher="aes-cbc-essiv:sha256" /> <!-- pam_mount parameters: General tunables --> <!-- <luserconf name=".pam_mount.conf.xml" /> --> <!-- Note that commenting out mntoptions will give you the defaults. You will need to explicitly initialize it with the empty string to reset the defaults to nothing. --> <mntoptions allow="nosuid,nodev,loop,encryption,nonempty,allow_root,allow_other" /> <!-- <mntoptions deny="suid,dev" /> <mntoptions allow="*" /> <mntoptions deny="*" /> --> <mntoptions require="nosuid,nodev" /> <!-- requires ofl from hxtools to be present --> <logout wait="0" hup="0" term="0" kill="0" /> <!-- pam_mount parameters: Volume-related --> <mkmountpoint enable="1" remove="true" /> </pam_mount>И не забыть убрать строчку с home из /etc/fstab.
Подписаться на:
Сообщения (Atom)