Установка из портов FreeBSD6 ProFTPd с накладыванием патча для KOI8-R->CP1251

Много у кого осталась нерешенной проблема использования на юниксовых
серверах файлов с названиями в кодировке koi8 клиентами под windows.

Аналогичную проблему испытывают японцы со своими языковыми кодировками.

Их решение ("ProFTPD - iconv() charset conversion patch"
http://home.h01.itscom.net/para/software/m...v/index-e.html)
можно и использовать под нас.

На своем сервере FreeBSD мне захотелось, что бы proftpd был установлен
из портов, но был пропатченным.

Итак, приступим.

что имеем
FreeBSD nat2.spb.ru 6.0-RELEASE FreeBSD 6.0-RELEASE #1: Mon Mar 6 11:03:40 MSK 2006 root@nat2.spb.ru:/usr/src/sys/i386/compile/NAT2 i386
cd /usr/ports/ftp/proftpd
cat distinfo

MD5 (proftpd-1.3.0rc3.tar.bz2) = 050c3e2caec0d930f8a331e7b3ec0931
SHA256 (proftpd-1.3.0rc3.tar.bz2) = ee181d7fe22b849589d9d886e5a4ed40fbe205cc14f8f4c95cc1db629c95ca97
SIZE (proftpd-1.3.0rc3.tar.bz2) = 1377481

Нам потребуется libiconv

cd /usr/ports/converters/libiconv
make install
make clean

Распакуем сырцы proftpd

cd /usr/ports/ftp/proftpd
make fetch
make extract

Скачаем сам патч в каталог /usr/ports/ftp/proftpd/work
cd /usr/ports/ftp/proftpd/work
fetch http://home.h01.itscom.net/para/software/misc/proftpd-iconv/pack/proftpd...
теперь делаем ход конем
mv proftpd-1.3.0rc3 proftpd-1.2.10

патчим командой

gzip -cd proftpd-1.2.10-iconv.patch.gz |patch -p0

обратный конь

mv proftpd-1.2.10 proftpd-1.3.0rc3

теперь избавляемся от проблем от буквы Я
в этом файле
cd /usr/ports/ftp/proftpd/work/proftpd-1.3.0rc3/src/netio.c
надо найти следующий кусок кода (или похожий на него):

Code:

switch (mode) {
case IAC:
switch (cp) {
case WILL:
case WONT:
case DO:
case DONT:
mode = cp;
continue;

case IAC:
mode = 0;
break;

default:
/* Ignore */
mode = 0;
continue;
}
break;

case WILL:
case WONT:
pr_netio_printf(out_nstrm, "%c%c%c", IAC, DONT, cp);
mode = 0;
continue;

case DO:
case DONT:
pr_netio_printf(out_nstrm, "%c%c%c", IAC, WONT, cp);
mode = 0;
continue;

default:
if (cp == IAC) {
mode = cp;
continue;
}
break;
}

и вырезаем его целиком, начиная от команды switch и до завершающей фигурной скобки
что будет находиться гдето от 913 до 954 строчки

теперь немного переделываем
/usr/ports/ftp/proftpd/Makefile

добавляем такие строчки между любыми ".if defined(WITH_***)":

MODULES:=${MODULES}:mod_codeconv
INCLUDEDIRS:=${INCLUDEDIRS}:${PREFIX}/include
LIBDIRS:=${LIBDIRS}:${PREFIX}/lib

я добавил после .if defined(WITH_README)

а также находим строчку
CONFIGURE_ARGS= --localstatedir=/var/run \

это где-то 39 строчка
и приводим к такому виду

CONFIGURE_ARGS= --localstatedir=/var/run \
--sysconfdir=${EXAMPLESDIR}/etc \
--disable-sendfile \
--with-modules=mod_codeconv \
--with-libraries=/usr/local/lib \
--with-includes=/usr/local/include

тоесть мы добавили это для того, что бы configure выполнилось с ключами
--with-modules=mod_codeconv --with-libraries=/usr/local/lib
--with-includes=/usr/local/include

все с Makefile закончено сохраняем и выходим

cd /usr/ports/ftp/proftpd/

Конфигурируем командой

make configure

после этого правим work/proftpd-1.3.0rc3/Make.rules
находим LIBS= и в конец строки добавляем -liconv

После этого уже делаем

make
make install

Теперь в /usr/local/etc/proftpd.conf добавляем

CharsetLocal KOI8-R
CharsetRemote CP1251

Все!!! Теперь можно в качестве клиента любой браузер использовать без
таблиц кодировки, т.е. имея к примеру на сервере unix+proftpd+samba
клиенты под windows смогут без проблем работать с файлами в win1251
кодировке.

Взято с www.opennet.ru обобщено и немного добавлено от себя

P.S.
Проблема с которой столкнулся при использования анонимнрго доступа,
по умолчанию для этого используется пользователь ftp, а при создании
его через sysinsyall ему дается шелл /nonexistent которого нет в
/etc/shells и нам остается только дописать в конец файла
echo '/nonexistent' >> /etc/shells и все будя окей.

Оригинал
http://2.uspenski.z8.ru/install_proftpd_freebsd6.txt

RSS-материал