Запуск Wireshark на Mac OS X

Шаг первый — скачиваем .dmg. Монтируем .dmg.

Шаг номер два — привычно перетаскиваем иконку Wireshark в Applications, после чего открываем в .dmg Utilites, в нём перетаскиваем ChmodBPF в StartupItems. Далее тёмная магия — в консоли (терминале для совсем уж ояблочившихся) копируем содержимое папки Command Line в /usr/local/bin (/usr/local/bin может не существовать, mkdir нам поможет, равно как и sudo; .dmg вайршарковая монтируется в /Volumes/Wireshark).

Шаг три — продолжаем жечь напалмом в терминале:

cd /Library/StartupItems
sudo chown -R root:wheel ChmodBPF

Шаг четвёртый — запускаем Wireshark, радуемся, видим, что он не видит сетевые интерфейсы =))) запускаем его через sudo:

sudo /Applications/Wireshark.app/Contents/MacOS/Wireshark

ImageMagick: изменение размера и качества изображения

convert -resize SIZE -quality NUMBER IMAGE RESIZED_IMAGE

Параметры:

  • SIZE — новый размер, в процентах от исходного (75%) или ширина на высоты (640x480);
  • NUMBER — качество (JPEG) в процентах, знак процента ставить не надо;
  • IMAGE — исходная картинка;
  • RESIZED_IMAGE — выходная картинка.

Как узнать из какого репозитория установлен пакет в Debian-based дистрибутивах линукс

Всё просто, нам поможет команда:

apt-cache policy PACKAGE

Результат будет выглядеть как-то так:

apt-cache policy git-core                                                   
git-core:
  Установлен: 1:1.5.6.5-3+lenny3.2
  Кандидат: 1:1.5.6.5-3+lenny3.2
  Таблица версий:
     1:1.7.1-1.1~bpo50+1 0
        200 http://backports.debian.org lenny-backports/main Packages
 *** 1:1.5.6.5-3+lenny3.2 0
        900 http://security.debian.org lenny/updates/main Packages
        100 /var/lib/dpkg/status
     1:1.5.6.5-3+lenny3.1 0
        900 http://ftp.debian.org lenny/main Packages

О пользе серверных сетевых адаптеров

Исходные данные

Имеем сервер с тремя сетевыми интерфейсами:

  • 1-й — бортовая-чипсетная гигабитка Intel 82567LF на материнской плате Intel DX58SO, драйвер em;
  • 2-й и 3-й — двухпортовый серверный адаптер Intel E1G42ETBLK, драйвер igb.

Всё это хозяйство висит на гигабитном свитче 3Com Baseline Switch 2920-SFP Plus.

Тестируем интерфейсы ping'ом

em0

100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.066/0.168/0.235/0.024 ms

igb0

100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.043/0.067/0.114/0.010 ms

igb1

100 packets transmitted, 100 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.046/0.069/0.124/0.010 ms

Пинг проводился с машины, висящей на том же гигабитном свитче. Так же проверял скорости копированием по SCP файла, размером 1000MB, там на первом интерфейсе скорость 50-60 MB/s, по 2-му и 3-му 70-80 MB/s.

ZFS: gang block detected (FreeBSD)

В сабже — мутная ошибка в бздёвой ZFS, проявляется, когда свободное место на томе подходит к концу (вообще это крайне нежелательно для ZFS), данные не теряются, но бутблок херится и всё отлично работает до ребута.

Вот по этой ссылке можно прочитать много интересного по теме, но на английском языке...

Что делать, если такое произошло?

Идем вот сюда, качаем образ, режем болванку, загружаемся с неё (если что — по ссылке крайне полезный в хозяйстве проджект mfsBSD, образ FreeBSD, загружающийся в лайвсиди в диски в памяти и работающий с них, на борту имеется скрипт для установки FreeBSD корнем на ZFS).

Импортируем пул, с которым стало плохо:

zpool import POOLNAME

Отмонтируем, всё что смонитировалось при импорте пула:

zfs unmount -a

Указываем куда смонтировать корень пула:

zfs set mountpoint=/SOMEMOUNTPOINT POOLNAME

Монтируем:

zfs mount POOLNAME

Сносим /boot и записываем имеющийся под рукой (из mfsBSD):

rm -rf /SOMEMOUNTPOINT/boot
cp -r /boot /SOMEMOUNTPOINT/

Кстати, на данном этапе полезно сохранить /boot/loader.conf и /boot/modules, чтобы закинуть их потом в новый /boot.

Отмонтируем и указываем снова монтировать пулу в корень

zfs unmount -a
zfs set mountpoint=legacy POOLNAME

Для лишней надёжности можно перезаписать бут-код в GEOM:

gpart bootcode -p /boot/gptzfsboot -i 1 adN

Ну и...

reboot

что делать, если FreeBSD установлена на ZFS и мы нечаянно обновили ZFS с v13 на v14

1. Качаем live-cd

Скачать вот отсюда образ: http://mfsbsd.vx.sk/ и нарезать болванку. Ценность данной болванки в том, что в нее уже заинтегрирована 14-я версия ZFS, то есть она будет актульна минимум до появления 8.1-что угодно.iso.

2. Загрузиться с live-cd

Пароль рута — mfsroot.

3. Смотрим какие диски находятся в пуле

Командой gpart show посмотреть, какие диски в пуле, где находится загрузчик. например у меня было:

gpart show
=>       34  625140268  ad10  GPT  (298G)
34        128     1  freebsd-boot  (64K)
162    8388608     2  freebsd-swap  (4.0G)
8388770  616751532     3  freebsd-zfs  (294G)

=>       34  976773101  ad12  GPT  (466G)
34   16777216     1  freebsd-swap  (8.0G)
16777250  959995885     2  freebsd-zfs  (458G)

То есть в массиве два диска, ad10 и ad12, ебучий загрузчик не той версии живет в первом разделе ad10.

4. Монтируем всё

zpool import имя_пула

Примечание: команда zpool import без параметров выдаст все несмонтированные пулы и их имена.

zfs mount -a

Будет смонтировано содержимое пула, причем в корень, с перекрытием имеющейся ФС. «Всем похуй» ©

5. Апгрейдим загрузчик

gpart bootcode -p /boot/gptzfsboot -i 1 adN

где adN — правильное название устройства из пункта 3, где находится загрузчик. В моем случае это было ad10. С удовольствием наблюдал истерику, когда какой-то неведомый дятел тупо копировал строку из примера (где было ad4), не смотря на то, что вывод его gpart-а давал ad0.

6. Завершаем спасательную операцию.

cd /
umount -a
reboot

Обновление PostgreSQL (FreeBSD)

Иногда приходится обновлять PostgreSQL, прогресс не стоит не месте. При обновлении с версии X.Y.Z на X.Y.Z+ всё предельно просто — portupgrade и никаких проблем. При обновлении с X.Y.* на X.Y+.* всё чуть-чуть сложнее...

...итак, краткий план действий:

  1. обновляем PostgreSQL-клиент;
  2. используя новый клиент, создаём дамп данных из старой БД;
  3. останавливаем PostgreSQL-сервер;
  4. обновляем PostgreSQL-сервер;
  5. выполняем initdb для сервера;
  6. загружаем базу данных;
  7. выполняем vacuum analyse;

Обновление PostgreSQL-клиента

При обновлении минорной версии PostgreSQL необходимо сделать дамп БД и загрузить его новым PostgreSQL-клиентом. Почему? Потому что новый клиент знает формат нового сервера, старый может быть не в курсе нововведений.

Обновляем порты — portsnap или csup:

portsnap fetch && portsnap update

или

csup ports-supfile && cd /usr/ports && make index

Обновляем при помощи portupgrade только клиента PostgreSQL:

portupgrade -fo databases/postgresql84-client postgresql-client

Ключик -f нужен... на всякий случай, мало ли что ;)

Производим новым клиентом дамп старых данных, pg_dumpall для сохранения всего, что есть в сервере:

pg_dumpall > dumpall.sql

Останавливаем сервер PostgreSQL:

/usr/local/etc/rc.d/postgresql stop

Обновляем сервер PostgreSQL:

portupgrade -fo databases/postgresql84-server postgresql-server

Возможно, понадобится ещё и это:

portupgrade postgresql-contrib

initdb — инициализируем БД

На всякий случай, перед тем как запускать initdb, лучше скопировать старый каталог с данными PostgreSQL в укромненькое местечко — мало ли, что может произойти, надо иметь пути к отступлению даунгрейду.

Так же, полезно сохранять конфигурационные файлы (postgresql.conf, pg_hba.conf etc).

cd /usr/local/pgsql
mv data data.8.3.9

Запускаем initdb:

/usr/local/etc/rc.d/postgresql initdb

(Возможно, надо подправить /usr/local/pgsql/data/postgresql.conf в случае наличия каких-либо особых настроек для предыдущей версии.)

Запуск сервера и загрузка дампа БД

Запускаем сервер PostgreSQL:

/usr/local/etc/rc.d/postgresql start

Загружаем данные:

su pgsql
psql template1 < dumpall.sql

vacuum analyse

Выполнение vacuum analyse заставляет PostgreSQL обновить внутреннюю статистику, используемую для планирования запросов, это необходимо всегда производить после загрузки дампа БД.

$ psql regress
psql (8.4.2)
Type "help" for help.

regress=# vacuum analyse;

FreeBSD: флаги файлов (chflags)

Помимо обычных юниксовых прав доступа к файлам (srwx) в FreeBSD имеются особые флаги доступа, для повышения уровня защиты файлов (но не каталогов — на них не распространятеся). Основная фишка этих флагов в том, что если они установленны, то даже root не сможет изменить/удалить защищённый файл, тем самым надёжно оберегая нас от скрипт-киддисов, идиотов и тупых линуксойдов)))).

Итак, за всё отвечает команда chflags, по ссылке указан англоязычный ман по сабжу, а если кратко и по-русски, то наиболее интересны следующие флаги:

  • schg — флаг системно-неизменяемого файла (так же есть пользовательски-неизменяемый uchg);
  • sunlnk — флаг системно-неудаляемого файла (так же есть пользовательски-неудаляемый uunlnk).

Пример использования:

chflags schg FILE

После выполнения данной команды даже root не сможет изменить файл. Посмотреть флаги файлов можно командой ls -lo.

Сравнение локального файла с файлом на удалённом компьютере при помощи diff и ssh

ssh USER@REMOTEHOST cat /remote/file | diff - /local/file
  • /remote/file — путь к файлу на удалённой машине,
  • /local/file — путь к локальному файлу.

Установка FreeBSD на USB-Flash

Подготовка флешки (разметка)

Размечаем всю флешку под FreeBSD:

fdisk -BI /dev/da0

Если хочется разбить на несколько разделов, то тогда так (fdisk в интерактивном режиме):

fdisk -i /dev/da0

Создаём BSD-слайс:

bsdlabel -w -B da0s1

Создаём файловую систему, с меткой FBSD, чтобы при монтировании устройства не зависеть от его имени в конкретной системе:

newfs -n -U -L FBSD /dev/da0s1a

Записываем MBR:

boot0cfg -B da0

Устанавливаем загрузку по умолчанию с первого слайса:

boot0cfg -s 1 da0

Запрещаем загрузчику перезаписывать себя:

boot0cfg -o noupdate da0

Установка FreeBSD

Монтируем флешку:

mount /dev/ufs/FBSD /mnt/flash-disk

Долгий способ установки — сборка мира

echo 'DESTDIR=/mnt/flash-disk' >> /etc/make.conf
cd /usr/src
make installkernel
make installworld
cd /usr/src/etc
make distrib-dirs
make distribution

Быстрый способ — копирование

cp -r /boot /bin /sbin /etc /root /mnt/flash-disk
mkdir /mnt/flash-disk/usr
cp -r /usr/bin /usr/sbin /usr/lib /usr/lib32 /usr/libdata /usr/libexec /usr/share /mnt/flash-disk/usr

Настройка после установки

Создаём на флешке файл fstab (/mnt/flash-disk/etc/fstab):

Device Mountpoint FStype Options Dump Pass#
/dev/ufs/FBSD / ufs ro 1 1

Подправляем rc.conf (/mnt/flash-disk/etc/rc.conf):

# Запрещаем fsck в фоновом режиме
background_fsck="NO"

# Запрещаем запись состояния системной энтропии 
entropy_dir="NO" 
entropy_file="NO" 
 
# Запрещаем создавать дампы
dumpdev="NO" 
dumpdir="NO" 

virecover_enable="NO"
ifconfig_DEFAULT="DHCP"

# Важный момент! если / монитирует read-only, то /tmp и /var создаются в виде ram-дисков,
# ниже мы указываем их размер в памяти
tmpsize="8m"
varsize="8m"
# Наполняем /var 
populate_var="YES"

Дополнительно

Проблемы с FreeBSD 8.0-Stable — на некоторых материнских платах флешка определяется уже после того, как ядро пытается смонтировать корневую ФС, чтобы избежать этой неприятности надо в /usr/src/sys/kern/vfs_mount.c добавить одну строчку и пересобрать ядро, вот патч:

Index: sys/kern/vfs_mount.c
===================================================================
RCS file: /usr/src/sys/kern/vfs_mount.c,v
retrieving revision 1.308
diff -u -r1.308 vfs_mount.c
--- sys/kern/vfs_mount.c 5 Jun 2009 14:55:22 -0000 1.308
+++ sys/kern/vfs_mount.c 29 Sep 2009 17:08:25 -0000
@@ -1645,6 +1645,9 @@
options = NULL;
+ /* NASTY HACK: wait for USB sticks to appear */
+ pause("usbhack", hz * 10);
+
root_mount_prepare();
mount_zone = uma_zcreate("Mountpoints", sizeof(struct mount));

Ещё раз «дополнительно»

Как заметили в каментах — можно обойтись и без патча к ядру (на 8й ветке), надо добавить в /boot/loader.conf следующую строку:

kern.cam.boot_delay=10000

Ссылки: 1, 2, 3 и 4.

FreeBSD & APC Smart-UPS SC 1500 via USB to Serial Cable

Итак, имеем:

  • FreeBSD 8.0-Stable (amd64);
  • APC Smart-UPS SC 1500;
  • USB to Serial Cable — кабель, у которого с одной стороны COM-разъём для втыкания в UPS, а с другой — USB для втыкания в компьютер; идёт в комплекте с вышеуказанным UPS.

Задача: подружить его с apcupsd.

Решение

Вроде бы в компьютер втыкаем USB и думается, что надо выставить в apcupsd.conf:

UPSCABLE usb
UPSTYPE usb
DEVICE

и всё должно завестись... Но не заводится. ((

После долгих мучений и попыток найти решение в документации, пришёл к решению методом научного тыка при поддержке логики. Всё-таки изначально из UPS'а идёт COM, стало быть ставим так:

UPSCABLE smart
UPSTYPE apcsmart
DEVICE /dev/ttyU0

Собственно, в этом /dev/ttyU0 собака и порылась — при втыкании в компьютер USB-шного конца он определяется как

kernel: ugen1.2: Prolific Technology Inc. at usbus1
kernel: uplcom0: Prolific Technology Inc. USB-Serial Controller, class 0/0, rev 1.10/3.00, addr 2 on usbus1

номер ugen и usbus меняются в зависимости от порта USB, но мой пытливый глаз углядел в /dev свежепоявившийся девайс /dev/ttyU0, который и оказался UPS'ом.

Краткий F(AQ|uck) по регулярным выражениям

  • * — любое (в том числе и нулевое) количество символов в строке, соответсвующих символу перед *. Т.е. 1589* — 158 + от любое количество 9: 158, 1589, 15899 и т.д.
  • + — любое ненулевое количество символов в строке, соответсвующих символу перед +. Т.е. 1589+ — это 1589, 15897, но не 158.
  • . — не менее одного любого символа (кроме перевода строки). 158. — 1581, 1589, 15891 и т.д.
  • ? — 0 или 1 предществующих выражений. Пример: Star(Craft)? — это Star и StarCraft.
  • ^ — начало строки + в некоторых контекстах отрицание. ^A — все строки, начинающиеся с А.
  • $ — конец строки. mp3$ — все строки, оканчиваюеся на mp3.
  • ^$ — пустая строка.
  • \ — экранирующий символ, нужен для работы с символами, применяющимися в регулярных выражениях. \?, \. и тому подобное.
  • [] — задают подмножество символов, внутри квадратных скобок ^ действует как отрицание.
    [abc] — а, b или c.
    [d-h] — символ из диапазона с d по h.
    [A-E] — символ из диапазона с A по E.
    [d-hA-E] — символ из d-h или A-E.
    [0-7] — диапазон цифр.
    [^k-q] — любой символ, кроме диапазона символов с k по q.

Полезная ссылки по сабжу: один, два, три и четыре.

Страницы