SSH туннель (SSH tunnel & port forwarding)
ssh -L локальный_порт:хост_к_которому_надо_подключиться:порт_того_самого_хоста user@ssh_server -N
вроде как всё должно быть итак понятно, а -N
— значит не запускать на ssh
-сервере шелл.
ssh -L локальный_порт:хост_к_которому_надо_подключиться:порт_того_самого_хоста user@ssh_server -N
вроде как всё должно быть итак понятно, а -N
— значит не запускать на ssh
-сервере шелл.
Шаг первый — скачиваем .dmg. Монтируем .dmg.
Шаг номер два — привычно перетаскиваем иконку Wireshark
в Application
s, после чего открываем в .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
zfs create -V SIZE pool/swapvolume
zfs set org.freebsd:swap=on pool/swapvolume
swapon /dev/zvol/pool/swapvolume
convert -resize SIZE -quality NUMBER IMAGE RESIZED_IMAGE
Параметры:
SIZE
— новый размер, в процентах от исходного (75%) или ширина на высоты (640x480);NUMBER
— качество (JPEG) в процентах, знак процента ставить не надо;IMAGE
— исходная картинка;RESIZED_IMAGE
— выходная картинка.Всё просто, нам поможет команда:
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
Имеем сервер с тремя сетевыми интерфейсами:
Intel 82567LF
на материнской плате Intel DX58SO
, драйвер em
;Intel E1G42ETBLK
, драйвер igb
.Всё это хозяйство висит на гигабитном свитче 3Com Baseline Switch 2920-SFP Plus
.
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
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
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
, проявляется, когда свободное место на томе подходит к концу (вообще это крайне нежелательно для 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
Скачать вот отсюда образ: http://mfsbsd.vx.sk/ и нарезать болванку. Ценность данной болванки в том, что в нее уже заинтегрирована 14-я версия ZFS
, то есть она будет актульна минимум до появления 8.1-что угодно.iso.
Пароль рута — mfsroot.
Командой 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.
zpool import имя_пула
Примечание: команда zpool import
без параметров выдаст все несмонтированные пулы и их имена.
zfs mount -a
Будет смонтировано содержимое пула, причем в корень, с перекрытием имеющейся ФС. «Всем похуй» ©
gpart bootcode -p /boot/gptzfsboot -i 1 adN
где adN — правильное название устройства из пункта 3, где находится загрузчик. В моем случае это было ad10. С удовольствием наблюдал истерику, когда какой-то неведомый дятел тупо копировал строку из примера (где было ad4), не смотря на то, что вывод его gpart
-а давал ad0.
cd /
umount -a
reboot
Подправляем nginx.conf
и получаем редирект с www.sitename.com
на sitename.com
:
server {
server_name sitename.com;
if ( $host = 'www.sitename.com' ) {
rewrite ^/(.*)$ http://sitename.com/$1 permanent;
}
По-умолчанию nginx
не даёт посмотреть содержимое директории и ругается 403-ей ошибкой. Лечиться это добавлением в конфиг следующей строки:
autoindex on;
Иногда приходится обновлять PostgreSQL
, прогресс не стоит не месте.
При обновлении с версии X.Y.Z на X.Y.Z+ всё предельно просто — portupgrade
и никаких проблем.
При обновлении с X.Y.* на X.Y+.* всё чуть-чуть сложнее...
...итак, краткий план действий:
PostgreSQL
-клиент;PostgreSQL
-сервер;PostgreSQL
-сервер;initdb
для сервера;vacuum analyse
;При обновлении минорной версии 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
, лучше скопировать старый каталог с данными 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 заставляет PostgreSQL
обновить внутреннюю статистику, используемую для планирования запросов, это необходимо всегда производить после загрузки дампа БД.
$ psql regress
psql (8.4.2)
Type "help" for help.
regress=# vacuum analyse;
Помимо обычных юниксовых прав доступа к файлам (srwx
) в FreeBSD
имеются особые флаги доступа, для повышения уровня защиты файлов (но не каталогов — на них не распространятеся). Основная фишка этих флагов в том, что если они установленны, то даже root не сможет изменить/удалить защищённый файл, тем самым надёжно оберегая нас от скрипт-киддисов, идиотов и тупых линуксойдов)))).
Итак, за всё отвечает команда chflags
, по ссылке указан англоязычный ман по сабжу, а если кратко и по-русски, то наиболее интересны следующие флаги:
schg
— флаг системно-неизменяемого файла (так же есть пользовательски-неизменяемый uchg
);sunlnk
— флаг системно-неудаляемого файла (так же есть пользовательски-неудаляемый uunlnk
).Пример использования:
chflags schg FILE
После выполнения данной команды даже root
не сможет изменить файл. Посмотреть флаги файлов можно командой ls -lo
.
Выполняем в Terminal.app
следующую команду (без sudo
):
defaults write com.apple.dock persistent-others -array-add '{ "tile-data" = { "list-type" = 1; }; "tile-type" = "recents-tile"; }'
После чего убиваем Dock
для активации изменений:
killall Dock
И вуаля — у нас новый, полезный в хозяйстве стек!
ssh USER@REMOTEHOST cat /remote/file | diff - /local/file
/remote/file
— путь к файлу на удалённой машине,/local/file
— путь к локальному файлу.dd if=/dev/acd0 of=filename.iso bs=2048
В bs=2048
вся соль, ибо в линуксах dd не требует этого параметра для дампа CD/DVD
, а вот FreeBSD
без него выдаст ошибку.
Размечаем всю флешку под 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
Монтируем флешку:
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
Итак, имеем:
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'ом.
Итак, имеем FLAC
-файл, в который закодирован целый аудио-диск и имеем файл CUE
, в котором содержится информация о треках. Как порезать большой файл на маленькие файлы-треки? Необходимо вооружиться пакетом shntool
и выполнить одну из следующих команд:
shnsplit -o flac -f file.cue file.flac
или
shntool split -o flac -f file.cue file.flac
*
— любое (в том числе и нулевое) количество символов в строке, соответсвующих символу перед *. Т.е. 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.Да, иногда такие сообщения сыпятся в консоль, это может случаться и на реальном железе, и в виртуалках, причина — «откат» системного времени назад, и, в резульатате рассинхронизация работы некоторых процессов.
Причины могут быть в кривом NTP
, с которым синхронизируется машина, а может быть и в кривоватом железе.
Итак, варианты лечения:
# echo "kern.hz=\"100\"" >> /boot/loader.conf && reboot
хотя лучше, если значение этой переменной кратно ^2 ;) 128 рулит.
# sysctl kern.timecounter.hardware=TSC
или
# sysctl kern.timecounter.hardware=i8254
dd if=/dev/urandom of=FILE bs=1M count=SIZE_IN_MEGABYTES
Классный такой туалет. Есть биде, писсуары, толчки, рукомойники, одноразовые полотенца, все чистенько, светло, уютно. Регулярно убирается, поддерживается в тепле и чистоте. Рассчитан на очень большое кол-во пользователей. Пользоваться таким туалетом приятно, несмотря на то, что туалет платный. Платность туалета выражается не только в использовании, но и в саппорте — требует достаточно много регулярных вложений на поддержание текущего оборудования, канализации, света и прочего в порядке. В новых версиях говно извлекается из задницы автоматизированно — вакуумным насосом (иногда вместе с кишкой), изменить алгоритм посещения (например, помыть руки перед кабинкой) нельзя, задержаться поболтать тоже нельзя, а перед посещением надо породить problem case "захотелось в толчок". Каждая порция вторичного продукта заворачивается в свой отдельный пакетик с timestamp'ом посещения. Подключается к общей канализационной системе.
Туалет типа "сортир". Обычный такой деревенский сортир на одну-две персоны. В конструкции прост — дыра и стенки вокруг. Но сделано на совесть — доски свежие, плотно подогнанные друг к другу, гумном почти не пахнет, щелей нет, внутри тесно, но все же довольно уютно и относительно чисто. Пользоваться не противно, особенно учитывая, что туалет бесплатен. Для личного домика гораздо более разумный вариант, чем воздвигать рядом с домом аналогичных размеров здание под туалет класса "clearcase", да еще и за деньги. Саппорт cvs-туалета также дешев — время от времени поменять прохудившуюся доску, да яму почистить изредка. Туалетной бумаги нет.
Тот же cvs-туалет, но с щеколдой на двери. Разница в сравнении с cvs'ом чувствуется только, когда туалетом пользуются больше одного человека.
Попытка исправить недостатки cvs-туалета. Почти получилось, но есть ньюансы. С одной стороны — появилась возможность смывать гумно; с другой стороны – сделать это можно, только погадив несколько раз. С одной стороны – появился стульчак; с другой стороны – его нельзя просто взять и опустить, вместо этого каждый раз требуется продолжительная возьня с отверткой для того, чтобы его примонтировать. Ну а освежитель воздуха, намертво приколоченный к потолку – это вообще уже ни в какие ворота...
Попытка построить один subversion-туалет на всю деревню. В результате он ничем не отличается от subversion, кроме: — гадить могут несколько человек одновременно, — гумно вывозится не сразу на свалку, а сначала складируется неподалеку на краю деревни, — есть намек на туалетную бумагу, но на поверку это оказывается газетой “Красные зори” за 1967 год, которую к тому же нельзя использовать, предварительно не помяв. Как результат появления дорогостоящих нововведений, туалет платный. Есть и бесплатная версия, но только на двух пользователей одновременно.
Тупо дыра в земле. Является прародителем CVS-туалетов. Одновременное использование исключено полностью. Более того, если при использовании предварительно не заблокировать доступ к туалету (например, взяв в руки лопату фирмы “Lock”), то есть шанс, что другой пользователь вас не заметит и нагадит сверху.
Тот же cvs-туалет, только без освежителя воздуха, без туалетной бумаги, без щеколды на двери, а также без самой двери, зато с офигенными щелями по всему периметру неоднозначной конструкции, исключающей наличие прямых углов. В любой момент может упасть, причем делает это как правило при попытки воспользоваться по назначению. Видимо, осознавая убогость конструкции, компания-столяр распространяет этот вид туалета совершенно бесплатно, в отличии от своих оконных рам и офисной мебели.
У каждого пользователя свой ночной горшок, которым он может пользоваться по своему усмотрению. Горшок весьма качественный и удобный в использовании. Пользователи сами могут между собой договорится о механизмах взаимодействия. Например, все могут сливать по очереди содержимое своих горшков в один общий горшок, или можно организоваться в цепочку. В качестве механизма доставки содержимого может использовать любой вид канализации, вплоть до доставки по почте. Предусмотрена так же возможность разделить содержимое своего горшка на порции, и отправить разные порции по разному назначению. Если в один горшок содержимое не помещается, стандартная рекомендация заключается в том, чтобы завести несколько горшков. С помощью внешних модулей приобретает любою дополнительную функциональность, вплоть до сортировки содержимого по цвету и запаху.
То же самое, что Mercurial, Bazaar, но горшок взят со списанного космического корабля. Управление горшком взято оттуда же. Необычайно эффективен для использования в открытом космосе, но в мирных условиях Вы предпочтете что-то поудобнее.
То же самое, что Mercurial, Bazaar, но спроектировано физиком-теоретиком на основе так называемой теории испражнений.
cat FILE | grep -v '^#' | sed '/^$/d'
grep
вырезает все строки, начинающиеся на #
, а sed
вырезает все пустые строки.
FreeBSD | Linux | Windows |
pciconf | lspci | - |
kldstat | lsmod | - |
kldload | modprobe | - |
kldunload | rmmod | - |
netstat -r | route -n | route print |
ifconfig | ifconfig | ipconfig |
traceroute | traceroute | tracert |
adduser | useradd | net user /add |
rmuser | userdel | net user /delete |