Отправляет email-рассылки с помощью сервиса Sendsay

Пакетное сканирование FTP

Доброго времени суток!

Возникла маленькая заморочка с домашней сетью и прошу подсказки.
Есть домашняя сеть в которой есть некоторое количество ftp ресурсов,
открытых для общего доступа. При поиске интересных вещей приходится
выполнять такую последовательность:
- открытие ресурса через прогу ftp
- задание пассивного режима pass
- выполнение команды ls -lR для сохранения дерева каталогов в локальный
файл
- iconv для перекодировки списка из cp1251 в koi8-r
- поиск средствами mc внутри файла(как в локальной файловой системе lslR)
нужного материала по маске

Хочеться автоматизировать этот процесс таким способом:
- есть файл со списком ftp ресурсов
- написать скрипт который выполнит сбор списка файлов со всех ресурсов и
сольет их в один файл в подкаталоги с именами ftp-ресурсов для удобного
поиска.

Вот и прошу помощи в написании скрипта, который бы заходил на ftp-сервер,
сохранял локально список файлов и отключался. Обвязку я и сам (думаю)
смогу организовать...

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 30649; Возраст листа: 1319; Участников: 1423
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/645669

Ответить   Alexander Esmont Mon, 5 Mar 2007 11:43:38 +0200 (#645669)

 

Ответы:

В сообщении от 1173087818 секунд после начала Эпохи Alexander Esmont написал(а):

http://lostclus.linux.kiev.ua/chestnut-ftp-search/

Демо:
http://search.linux.kiev.ua/

Ответить   Konstantin Korikov Mon, 5 Mar 2007 15:43:29 +0200 (#645735)

 

On Mon, Mar 05, 2007 at 03:43:29PM +0200, Konstantin Korikov wrote:

Идея понравилась. Решил попробовать, но не получилось...
Рассказываю как я делал, может поправите...
psql (PostgreSQL) 7.4.3
Python 2.3.3
Cheetah-2.0rc7
flup-0.5
FormEncode-0.4
web.py-0.2
дистрибутив ALTLinux Master 2.4

По инструкции в README.txt:

$ psql postgres
psql: FATAL: database "postgres" does not exist
- После этого пробую в другую базу
$ psql template1
template1=>CREATE DATABASE chnutdb WITH ENCODING 'utf8';
CREATE
template1=>CREATE ROLE yourUser WITH PASSWORD 'yourPassword' LOGIN;
ERROR: syntax error at or near "ROLE" at character 8

{попробовал разобраться самостоятельно и пришел к такой форме}

template1=>CREATE USER alexx WITH PASSWORD 'password';
CREATE
template1=>GRANT ALL PRIVILEGES ON DATABASE chnutdb TO alexx;
GRANT

Далее все по инструкции:
$ ./configure.py --create-schema --create-config
$ ./srvman.py --add host=ftp.example1.net
$ ./indexer.py
Traceback (most recent call last):
File "/usr/lib/python2.3/logging/__init__.pyc", line 674, in emit
File "/usr/lib/python2.3/logging/__init__.pyc", line 567, in format
Return a logger with the specified name, creating it if necessary.
File "/usr/lib/python2.3/logging/__init__.pyc", line 365, in format
iN(rootnodesselfsrootsdisablesemittedNoHandlerWarnings
KeyError: 'threadName'

и вот тут затык минут на 30, хотя ls -lR на сервере выполняеться за
минуту...
Потом :
Exception in thread Thread-1:
Traceback (most recent call last):
File "/usr/lib/python2.3/threading.pyc", line 436, in __bootstrap
File "./indexer.py", line 255, in run
self.indexer.run()
File "./indexer.py", line 95, in run
web.update('server', where = self.serverID, **upd)
File "/home/alexx/rpm/chestnut/chestnut-ftp-search/web.py", line 971, in update
values.values() + vars)
File "/home/alexx/rpm/chestnut/chestnut-ftp-search/web.py", line 794, in <lambda>
ctx.db_execute = lambda cur, sql_query, d=None: \
ProgrammingError: ERROR: current transaction is aborted, commands ignored until
end of transaction block

UPDATE server SET i_end_time='2007-03-06 13:49:41.074113' WHERE id = 1

Соответственно, даже при ручном выполнении запроса UPDATE поля с
количеством файлов и размером остаются незаполнеными.

Что делать и где я виноват?

Для доступа к поиску я использовал
$ run.py
а броузером на 127.0.0.1:8080/
т.к. apache пока не ставил...
Это нормальный метод?

Посмотреть в работе не получилось при задании маски: '*', результат: "Ничего
не найдено"
Opera 9.10

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 30655; Возраст листа: 1320; Участников: 1422
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/645934

Ответить   Alexander Esmont Tue, 6 Mar 2007 14:00:45 +0200 (#645934)

 

В сообщении от 1173182445 секунд после начала Эпохи Alexander Esmont написал(а):

Там написано:

# su -c psql postgres

Что означает выполнить команду psql от имени пользователя postgres. А
Вы пытаетесь выполнить psql от имени текущего пользователя и
подключится к базе данных postgres.

CREATE ROLE это для нового PostgreSQL (>= 8.1). Для старого нужно
CREATE USER.

Теоретически программе нужен PostgreSQL 7.3.16 (это если опираться на
документацию). При написании использовался 8.1.

Похоже что threadName появился в Python 2.4, однако в документации об
этом не сказано. Попробуйте Python 2.4. Или замените

"[%(asctime)s] [%(levelname)s] [%(threadName)s] %(message)s")

на

"[%(asctime)s] [%(levelname)s] [%(thread)d] %(message)s")

в indexer.py.

update

<lambda>

until

Потому что индексирование было прервано по ошибке выше.

Для тестирования - да. Для использования в продакшин - нет, так как
небезопасно.

Наверно потому что не было файлов, в которых содержится символ "*".
Чтобы этот символ интерпретировался как маска нужно выбрать режим писка
= шаблон оболочки.

Ответить   Konstantin Korikov Tue, 6 Mar 2007 15:46:49 +0200 (#645968)

 

On Tue, Mar 06, 2007 at 03:46:49PM +0200, Konstantin Korikov wrote:

Извиняюсь, мой косяк - я забыл написать
1) вариант как написано завершаеться с сообщением
[alexx@alexx alexx]$ su -c psql postgres
Password:
su: Authentication failure
(пароль точно правильный)
2) вариант с командой взятой в кавычки
[alexx@alexx alexx]$ su -c "psql postgres"
Password:
psql: FATAL: database "postgres" does not exist
Делаю вывод такой базы не существует, проверяю

[alexx@alexx alexx]$ psql -l
Список баз данных
Имя | Владелец | Кодировка
-----------+----------+template0 | postgres | SQL_ASCII
template1 | postgres | SQL_ASCII
(записей: 2)

точно - базы нет. Там наверное хранится информация о пользователях?

Понял - будет возможность проверю... Может в Ридми подправить-бы надо?

Заменил - прошло без ошибок и вылетов.

Если индексирование было прервано, то чем же он занимался все это время?
;-)

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 30658; Возраст листа: 1320; Участников: 1422
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/645987

Ответить   Alexander Esmont Tue, 6 Mar 2007 16:36:14 +0200 (#645987)

 

В сообщении от 1173191774 секунд после начала Эпохи Alexander Esmont написал(а):

Еще раз :) Там написано:

# su -c psql postgres
^
обратите внимание, что означает от рута. Если su выполняете от рута, он
не спрашивает пароль.

Такой базы нет, она и не нужна. postgres - это не база данных, а
пользователь. По умолчанию postgres - это суперпользователь в
PostgreSQL. По умолчанию в PostgreSQL используется метод авторизации
ident, который получает имя пользователя у операционной системы, по
этому мы используем su чтобы сменить пользователя.

Как настроен PostgreSQL именно у Вас я только догадываюсь. Если он
позволяет непривилегированному пользователю alex создавать базы данных,
то это похоже дыра в безопасности.

В ридми я это все описывать не буду и не просите :) Для этого есть
соответствующая документация. Как создавать базы данных и устанавливать
к ним права доступа нужно читать в документации к вашей версии
PostgreSQL.

Что именно подправить? Сказать что требуется 8.1? Если будет точно
известно что требуется 8.1, я подправлю. А пока по имеющимся у меня
данным я полагаю что подойдет любая версия >= 7.3.16.

Какое время? 30 милисекунд? 30 секунд? 30 минут? 30 часов?

Ответить   Konstantin Korikov Tue, 6 Mar 2007 19:05:30 +0200 (#646012)

 

On Tue, Mar 06, 2007 at 07:05:30PM +0200, Konstantin Korikov wrote:

Точно, не спрашивает! Но и не работает... :-)
[root@alexx root]# su -c psql postgres
su: exec failed

[root@alexx root]# psql --help
This is psql 7.4.3, the PostgreSQL interactive terminal.

Usage:
psql [OPTIONS]... [DBNAME [USERNAME]]
.
.
.
-U NAME database user name (default: "root")
Насколько я понял по справке на psql то первым парамметров идет именно имя
БД, а не имя пользователя. Для запуска psql надо указать БД к какой
подключаться,а потом уже имя пользователя.
В моем случае (на страрте присутствуют только БД template1 и template0, но
template0 не принимает подключений) команда трансформируется в

$ su -c "psql template1 postgres"

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

Ладно, ладно - я и не настаиваю... :) Может просто пояснения действий
дать? Мне же вот помогло - на этом этапе...

Протестовать не буду, т.к. пока не до конца разобрался и настроил.
А какие данные нужны?

Но всеже если указывается что версия >= 7.3.16, а в наборе команд
CREATE ROLE отсутствует, то может стоит подправить?
Кстати, в строке

postgres=# GRANT ALL PRIVILEGES ON DATABASE yourDBUser TO yourUser;

думаю стоит исправить yourDBUser на yourDBName, ведь права передаются на
БД созданую двумя строками выше.

20-30 минут стоит, потом возвращает управление shell-у.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 30664; Возраст листа: 1321; Участников: 1422
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/646132

Ответить   Alexander Esmont Wed, 7 Mar 2007 08:52:28 +0200 (#646132)

 

В сообщении от 1173250348 секунд после начала Эпохи Alexander Esmont написал(а):

Опа... Как такое возможно?

# su -c skdfjlsdkfj postgres
bash: skdfjlsdkfj: command not found
# su -c psql skdfjldskfj
su: user skdfjldskfj does not exist
#

У Вас явно какой-то неправильный su.

Точно. Но команда su получает первым параметром именно имя пользователя.

А можно и не указывать ни БД, ни имя пользователя.

Ради бога. Если оно у Вас работает...

Это для каждой версии PostgreSQL давать отдельные разъяснения? А может
еще и для каждого конкретного дистрибутива?

Доказательства :) Может быть оно у Вас работает "не так" совсем не
из-за номера версии. Может это у вас настройки такие. А может
и разработчики дистрибутива что-то нахимичили в исходниках СУБД.

Использование нового синтаксиса - намек на то что нужно использовать
свежие версии ПО :)

Да, а тут опечатка. :) Исправил. Спасибо.

Значит по какой-то непонятной причине какие-то непонятные процессы
продолжались :)

Ответить   Konstantin Korikov Wed, 7 Mar 2007 17:36:09 +0200 (#646239)

 

On Mon, Mar 05, 2007 at 03:43:29PM +0200, Konstantin Korikov wrote:

Заработало! Первый тест показала приятность и удобство использования.
Осталось выяснить некоторые подробности:
1) в базе при создании устанавливаеться кодировка utf-8, на ftp
файлы лежат с именами в кодировке cp1251, у меня локаль koi8-r - как
правильно задать парамметры при добавлении сервверов и настроек чтобы в
результатах поиска были правильные надписи? Если можно, то по-шагам...

2) где хранятся индексы для поиска?

3) один из серверов слег сегодня и при подключении ftp выдает сообщение
421 Service not available, remote server has closed connection
а indexer вываливает ошибку
Traceback (most recent call last):
File "./indexer.py", line 82, in run
self.connect()
File "./indexer.py", line 104, in connect
self.ftp.connect(*self.connectArgs)
File "/usr/lib/python2.3/ftplib.pyc", line 132, in connect
shostssplitshbytessportspbytessbytessjoinscmdsselfsvoidcmd(sselfshostsportscmdsbytesshbytesspbytes((s/usr/lib/python2.3/ftplib.pycsendportЬs

File "/usr/lib/python2.3/ftplib.pyc", line 207, in getresp
print_linesselfssendcmdsrespstransfercmdscmdsconnmakefilesfpreadlineslinesdebuggingsCRLFsclosevoidresp(sselfscmdcallbacksfpslinesrespsconn((s/usr/lib/python2.3/ftplib.pycs
retrliness*
File "/usr/lib/python2.3/ftplib.pyc", line 193, in getmultiline
A new port is created for you. Return the response code.
File "/usr/lib/python2.3/ftplib.pyc", line 183, in getline
EOFError

Это нормально или все-таки что-то несовместимо?
После этой ошибки остальные сервера из списка тоже не индексируются...

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 30659; Возраст листа: 1320; Участников: 1422
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/645993

Ответить   Alexander Esmont Tue, 6 Mar 2007 17:02:05 +0200 (#645993)

 

В сообщении от 1173193325 секунд после начала Эпохи Alexander Esmont написал(а):

Во первых, в config.py должно быть:

DB_CHARSET = 'utf-8'

Во вторых, нужно указывать кодировку сервера при добавлении:

$ ./srvman --add host=имяхоста charset=кодировкасервера

В базе данных :)

То что печатается Traceback это нормально. Только непосредственно перед
ним должна быть строчка "FTP Error occurred". Программа обрабатывает
такие ошибки и продолжает индексацию других серверов, если такие
имеются.

Возможно они уже были проиндексированы и еще не пришло время их
индексации.

Чтобы можно было ответить точно нужно больше информации, т.е. подробно
опишите все действия и покажите полный вывод программ. Перед запуском
индексировщика покажите вывод

$ ./srvman.py --list

и

$ ./srvman.py --print --server=номерсервера

для каждого сервера.

Ответить   Konstantin Korikov Tue, 6 Mar 2007 20:00:51 +0200 (#646020)

 

On Tue, Mar 06, 2007 at 08:00:51PM +0200, Konstantin Korikov wrote:

Именно 'utf-8', а не 'utf8' как сказано в README при создании базы? Или
это одно и тоже?

А в каком виде? Например у меня на серверах cp1251 так и указать 'cp1251'
или '1251' или 'win1251'. Сам склоняюсь к 'cp1251' - так и попробую.

Понял. :)

Обязательно обкатаю ситуацию, т.к. у нас таки кто-то уронил свой сервер и
он теперь не работает, а только отвечает 421...

Обязательно попробую и после обеда отпишусь, если что...

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 30665; Возраст листа: 1321; Участников: 1422
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/646133

Ответить   Alexander Esmont Wed, 7 Mar 2007 09:22:39 +0200 (#646133)

 

В сообщении от 1173252159 секунд после начала Эпохи Alexander Esmont написал(а):

Как написано в комментариях "Must be valid python encoding name".
Вообще Python одинаково понимает такие значения: utf8, utf-8, UTF8,
UTF-8. Что относится и к PostgreSQL. А вот MySQL не поддерживает такие
псевдонимы, он понимает только одно из значений.

И тут нужно указывать кодировку, которую понимает Python. О кодировках
в Python читайте тут http://docs.python.org/lib/standard-encodings.html

Ответить   Konstantin Korikov Wed, 7 Mar 2007 18:05:01 +0200 (#646274)