Редактирование ProFTPd - устранение проблем с русскими названиями файлов
Статья взята | тут
Автор: CoderInside
e-mail: coder@vmail.ru
icq: 233503535
10.09.2006
Версия 1.2
Содержание
Введение
У ProFTPd существуют две проблемы связанные с русским языком. Первая - при закачивании на сервер Windows клиентами файлов с русскими названиями из них вырезаются буквы "ыьэюя". Вторая - так как эти файлы были закачаны в кодировке CP1251 их названия невозможно прочитать через Linux консоль, где обычно KOI8-R или UTF-8. Если для пользователей это не большая проблема, ведь через FTP все отображается нормально, администратору этого сервера такие файлы доставляют значительные неудобства. Для того чтобы научить ProFTPd автоматически конвертировать названия файлов в Linux кодировку при загрузке на сервер и в Windows кодировку при скачивании - существует специальный патч. Патч этот выпустили японцы - так как у них похоже эта проблема тоже не на последнем месте :).
Проблема с буквами "ыьэюя" (коды 251-255) возникают потому, что ProFTPd пропускает весь свой сетевой трафик через Telnet фильтр, который воспринимает символы с кодами 251-255 как управляющие последовательности и вырезает их. Это лечится небольшим вмешательством в один из исходных файлов.
Нашей целью будет сервер ProFTPd который будет автоматически конвертировать кодировки и хорошо работать с буквами "ыьэюя".
Подготовка
Для осуществления всего выше задуманного потребуется исходный код сервера ProFTPd и патч. На момент написания статьи самая последняя версия сервера - 1.3.0. Патч выпущенный японцами существует только для версии 1.2.10 и на новый код не накладывается. Пришлось немого повозиться и сделать из него патч для 1.3.0 попутно добавив в него строки для нормальной работы с маленькими буквами "ыьэюя". Готовый патч лежит здесь. Как вы уже догадались, мы будем собирать и устанавливать ProFTPd из исходников, поэтому если он у вас уже установлен - его предварительно нужно удалить.
Создадим директорию /tmp/src и скачаем в нее исходники и патч:
$ mkdir /tmp/src $ cd /tmp/src $ wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.0.tar.bz2 http://linuxportal.vrn.ru/file/proftpd-1.3.0-rus.patch.gz
Распакуем исходный код ProFTPd
$ tar xjvf proftpd-1.3.0.tar.bz2
Пропатченый proftpd
У кого Mandriva 2008, советую взять уже пропаченый и собранный пакет. Все пропаченные пакеты для proftpd лежат тут
Накладывание патча
Находясь в каталоге /tmp/src наложим патч на исходный код сервера
$ gzip -cd proftpd-1.3.0-rus.patch.gz | patch -p0
Должно появиться сообщение о том что пропатчились 4 файла
patching file proftpd-1.3.0/modules/mod_codeconv.c patching file proftpd-1.3.0/modules/mod_df.c patching file proftpd-1.3.0/modules/mod_ls.c patching file proftpd-1.3.0/src/netio.c
Если все так - полдела сделано!
Сборка
Переходим в каталог с исходными текстами ProFTPd
$ cd proftpd-1.3.0
Запускаем configure с модулем для конвертации
$ ./configure --with-modules=mod_codeconv
Собираем
$ make
Устанавливаем
$ sudo make install
Конфигурирование
Открываем конфигурационный файл сервера /usr/local/etc/proftpd.conf и добавляем туда строки отвечающие за перекодировку. Например в случае когда на Linux UTF-8 пишем:
CharsetLocal UTF-8 CharsetRemote CP1251
Смысл параметров думаю понятен из их названий. :)
Запуск
Для запуска сервера создадим скрипт /etc/init.d/proftpd и сделаем его исполняемым
#!/bin/sh # ProFTPD files FTPD_BIN=/usr/local/sbin/proftpd FTPD_CONF=/usr/local/etc/proftpd.conf PIDFILE=/usr/local/var/proftpd.pid # If PIDFILE exists, does it point to a proftpd process? if [ -f $PIDFILE ]; then pid=`cat $PIDFILE` fi if [ ! -x $FTPD_BIN ]; then echo "$0: $FTPD_BIN: cannot execute" exit 1 fi case $1 in start) if [ -n "$pid" ]; then echo "$0: proftpd [PID $pid] already running" exit fi if [ -r $FTPD_CONF ]; then echo "Starting proftpd..." $FTPD_BIN -c $FTPD_CONF else echo "$0: cannot start proftpd -- $FTPD_CONF missing" fi ;; stop) if [ -n "$pid" ]; then echo "Stopping proftpd..." kill -TERM $pid else echo "$0: proftpd not running" exit 1 fi ;; restart) if [ -n "$pid" ]; then echo "Rehashing proftpd configuration" kill -HUP $pid else echo "$0: proftpd not running" exit 1 fi ;; *) echo "usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0
Делаем исполняемым
chmod a+x /etc/init.d/proftpd
Готово! Данный скрипт позволяет запускать, останавливать и перегружать запущенный сервер
- запуск
/etc/init.d/proftpd start
- останов
/etc/init.d/proftpd stop
- перезагрузка
/etc/init.d/proftpd restart
Для того чтобы сервер автоматически загружался при старте системы - пропишите комманду /etc/init.d/proftpd start в /etc/rc.local или любой другой стартовый скрипт. Для Debian: находясь в каталоге /etc/init.d выполните комманду
update-rc.d proftpd defaults 99
Все. Перегружаемся и проверяем. ProFTPd должен запуситься автоматически. В названиях закачиваемых из Windows файлов не должны пропадать буквы "ыьэюя", названия должны отображаться в консоли без кракозябликов.
Удачи!
По всем вопросам пишите на coder@vmail.ru