ProFTPD 1.3.4

Если при рестарте после обновления порта вы увидели такую ошибку:

Fatal: unknown configuration directive 'TLSEngine'
или что-то подобное, то вы везунчик)

В новой ветке ProFTPD, начиная с версии 1.3.4a, модули подгружаются динамически и их нужно ручками дописывать в proftpd.conf, например:

LoadModule mod_tls.c
LoadModule mod_ratio.c
LoadModule mod_readme.c
LoadModule mod_rewrite.c
LoadModule mod_ban.c
LoadModule mod_copy.c
LoadModule mod_deflate.c
LoadModule mod_ifsession.c
LoadModule mod_ifversion.c
LoadModule mod_quotatab.c
LoadModule mod_quotatab_file.c
LoadModule mod_quotatab_sql.c
LoadModule mod_sftp.c
LoadModule mod_sql.c

Учитывайте так же очередность загрузки модулей, модули, зависящие от других, должны загружаться позже, если прописать:

LoadModule mod_quotatab_file.c
LoadModule mod_quotatab_sql.c
LoadModule mod_quotatab.c

получите ошибку:

/libexec/ld-elf.so.1: /usr/local/libexec/proftpd/mod_quotatab_file.so: Undefined symbol "quotatab_register_backend"

Чтобы работал mod_sql нужно установить порт /usr/ports/databases/proftpd-mod_sql_mysql/ или /usr/ports/databases/proftpd-mod_sql_postgres/ (смотря какая у вас база данных)  и в конфиге прописать:

LoadModule mod_sql.c
# и загрузить модуль:
LoadModule mod_sql_mysql.c
# или
LoadModule mod_sql_postgres.с

SQLBackend mysql
# или
SQLBackend postgres

В виртуальных серверах можно использовать разные базы, просто указать нужную через SQLBackend.


Теги: , , , ,

Отправка письма из shell

Как отправить письмо с вложением из оболочки UNIX? Есть несколько вариантов, я рассмотрю самые простые, – системными средствами и сторонним ПО.

mail + uuencode

Почти наверняка самый рабочий способ на любой системе.

~> ( echo "body text message" ; echo ; cat file.txt | uuencode file.txt ) | mail -s 'Subject' to@domain.tld

в почтовый ящик придет сообщение в виде:

To: to@domain.tld
Subject: Subject
Message-Id: <20111205165235.0DB932ECAC@dom.tld>
Date: Mon,  5 Dec 2011 16:52:35 +0000 (UTC)
From: sender@domain.tld (sender)

body text message

begin 644 file.txt
M+W-B:6XO;61M9G,@+7,@-#`Y-DT@+6D@,3`R-"`M=R!M>7-Q;#IM>7-Q;"`M
M<"`W-S<@;60P("]M>7-Q;%]T;7`*(R,M+2TM+2TC(PT*26YC;W)R96-T(&EN
...
M;F1E>"YP:'`[(&-D("T[(&QS("UL82`D:2]I;F1E>"YP:'`[(&1O;F4*(R,M
)+2TM+2TC(PH*
`
end

Плюсы: универсальный способ, не требует установки дополнительного ПО

Минусы: не все почтовые клиенты понимают этот формат и письмо возможно придется раскодировывать. Если вы пользуетесь почтой Гугла (GMail) – вам повезло, такой формат он понимает и файл можно будет скачать как обычный прикрепленный файл.

mail + base64
~> cat file.txt | base64 | mail -s 'Subject' to@dom.tld
~> cat file.txt | uuencode -m file.txt | mail -s 'Subj' to@dom.tld

Плюсы: файл в письме отправится

Минусы: письмо наверняка будет не понято почтовым клиентом и вложение будет просто выведено в виде текста, который нужно дополнительно распаковывать. GMail такие письма не понимает.

sendmail
~> ( cat header ; cat ssh.txt | base64 ) | /usr/sbin/sendmail -t
~> ( cat header ; cat ssh.txt | uuencode -m ssh.txt ) | /usr/sbin/sendmail -t
~>
~> ( cat header ; cat ssh.txt | uuencode ssh.txt ) | /usr/sbin/sendmail -t
# это не правильно, но GMail понимает и такой формат

В файл header предварительно внесены необходимые заголовки:

~> cat header
Subject: With attachment
From: me@dom.tld
To: to@domain.tld
Content-Type: text/plain; charset=UTF-8
Content-Disposition: attachment; filename="file.txt"
Content-Transfer-Encoding: base64

Здесь мы явно указываем кодировку файла (UTF-8), имя файла, которое будет показываться в письме (может не совпадать с именем файла, который мы кодируем) и метод кодирования (base64). В третьем примере файл будет закодирован в uuencode, это тоже может вызвать сложности у почтовых клиентов. uuencode –m, в отличие от base64, помечает начало и конец закодированных данных, так же, как и просто uuencode. В первом случае начало данных будет помечено строкой:

begin-base64 644 file.txt

конец:

====

во втором случае:

begin 644 file.txt

конец:

end

Плюсы: письмо понимается большинством почтовых клиентов

Читать остальную часть заметки »

Теги: , , , , , , , , ,

LF in ee and mcedit

Если внезапно при старте какой-то софтины в консоль валится такое:

readlink: illegal option -- f
usage: readlink [-n] [file ...]
Could not locate binary file, aborting

значит кто-то добрый своими ручками правил /etc/rc.conf в редакторе mcedit и тот в свою очередь не поставил заветный магический символ LF в конце последней строки.

Палится такой фейспалм следующим образом:

20:29 [ME] ~ ~> cat ee-dited.txt
Line 1
Line 2
Last Line
20:29 [ME] ~ ~> cat mcedit-edited.txt
Line 1
Line 2
Last Line20:29 [ME] ~ ~>
20:29 [ME] ~ ~>

Строка приглашения выводится сразу после последней строчки файла, а не с новой строки.

Косяк этот зачастую обнаружить очень не просто, особенно, если человек с таким не сталкивался. Если mcedit’ом отредактировать крон, например:

env EDITOR=mcedit crontab -e

последнее крон-задание выполняться не будет.

Редакто ee таким не страдает, поэтому я отдаю предпочтение именно ему.


Теги: , , , , , , , , ,

Sleeping awake

Решил один из компьютеров отправлять на ночь в спячку ака Stand by. А потом пришла еще одна хорошая идея. Когда-то давно настраивал BIOS чтобы компьютер просыпался только от кнопки питания т.к. пару раз ночью он просыпался от мышки или клавиатуры. Теперь, чтобы включить комп, нужно идти на балкон и тыкать кнопку питания. А мне, конечно же, лень :)

WOL – Wake-on-LAN

Включил на сетевой карте wake-on-LAN и поставил флажок “будить только административным пакетом”, иначе он просыпался от сетевой активности, что мне не нужно. А будить решил с гостевой FreeBSD, которая на второй машине крутится в VMWare. Для гостевой машины я настроил “bridged” доступ в сеть, на роутере присвоил личный IP-адрес и она “напрямую” может видеть адрес первого компа по внутренней сети.

Софтину выбрал wol:

~> cd /usr/ports/net/wol
~> make install clean
~> rehash
~> cd

Усыпил :) первый компьютер и… понял, что нужно посмотреть какой там MAC-адрес (командой arp –a). Разбудил, попинговал с гостевой машины, усыпил снова, отправил магический пакет:

~> wol --verbose 00:11:11:11:11:11

…и обломался. Машинка не проснулась =/ Посмотрел man, попробовал указать IP-адрес – и чудо произошло!

~> wol --ipaddr=192.168.7.100 --verbose 00:11:11:11:11:11

Однако позже выяснился один момент, если в таблице маршрутизации нет адреса первого компьютера, разбудить его нельзя. Добавил:

~> arp -s 192.168.7.100 00:11:11:11:11:11
~> netstat -rn | grep 192.168.7.100
192.168.7.100      00:11:11:11:11:11  UHLS        1      576    em0

Пробую снова:

~> wol --ipaddr=192.168.7.100 --verbose 00:11:11:11:11:11
Waking up 00:11:11:11:11:11 with 192.168.7.100:40000...

Работает, комп проснулся.


Теги: , , , , , , , , , , , , ,

kernel: calcru: runtime went backwards

После перевода виртуалки на VMWare 8 появился баг, на консоль стали валиться сообщения вида:

kernel: calcru: runtime went backwards from 89 usec to 85 usec for pid 516 (moused)

Варианты лечения:

прописать:

kern.hz=100

в файл

/boot/loader.conf

и перезагрузиться и/или выполнить:

sysctl kern.timecounter.hardware

если у вас таймер TSC (такой был у меня), поставить:

sysctl kern.timecounter.hardware=i8254

и добавить строку

kern.timecounter.hardware=i8254

в файл

/etc/sysctl.conf

Пока таких сообщений не замечено, полет нормальный.


Теги: , , , , , , ,

VMWare 8 + real HDD disk

При попытке подключить физический диск к виртуалке VMWare 8 (VMWare 8.0.0 build-471780), выдавались ошибки вида:

 

vmx| W110: DISKLIB-FLAT : Open: Failed to dismount physical drive 2. Perhaps its volumes have open files on them?
vmx| I120: DISKLIB-FLAT : "\\.\PhysicalDrive2" : failed to open (73): .
vmx| I120: DISKLIB-LINK : "D:\VM\backup-FreeBSD72\FreeBSD72.vmdk" : failed to open (The physical disk is already in use).

Лечится довольно просто: на файл *.vmdk (в моем случае – FreeBSD72.vmdk) добавил пользователя __vmware__ с полным доступом (Full Control, Modify, Read & Execute, Read, Write). По умолчанию там были только Users, SYSTEM и Administrators.


Теги: , , , , , , , ,

who am I?

Как-то странно изговнякали утилиту who в 8-й ветке FreeBSD. Раньше можно было набрать

who am i

или

who –m

и увидеть там приятное

netspider        ttysd     8 мар 12:03 (127.0.0.1)

сейчас же выдается несуразное

root             17        8 мар 14:26

при чем по команде

who

выдаются сразу все пользователи в старом добром формате

root             pts/17    7 мар 23:13 (127.0.0.1)

И как с этим жить? =/ У кого чесались яйца руки? Иногда хочется программистам их оторвать…

UPDATE

В лоб лечится одной циферью:

15:26 [root] who ~> pwd
/usr/src/usr.bin/who
15:26 [root] who ~> diff who.c who2.c
270c270
<               tty = p + 1;
---
>               tty = p - 3;
15:26 [root] who ~> ./a.out am i
root             pts/17    7 мар 23:13 (127.0.0.1)

Знаю, что не комильфо так делать, но зато работает.


Теги: , , , ,