yurikhan: (Default)
[personal profile] yurikhan

Стоит задача: время от времени собирать списки файлов с нескольких окрестных серверов. При этом серверы бывают CIFS и FTP, а те, которые FTP, в свою очередь, делятся на RFC2640-compliant и не-compliant. Но на списки это особо не влияет. Хочется иметь списки в каком-нибудь более или менее однородном формате и кодировке. Кодировку хотим какую-нибудь юникодную, дабы не ограничивать в именах себя и партнёров по обмену.

Под Windows задача тривиально решается для CIFS: cmd /u /c dir /a /-c /s \\server\share |iconv -f ucs-2le -t target_encoding >server-%DATE%.txt.

Под Linux у нас такого UNC-синтаксиса нет. Каноническое решение — замонтировать нужный сервер в файловую систему и сказать ls -lR.

CIFS-серверы монтируются через mount.cifs из пакета smbfs. Есть только один нюанс: в ключах -o должно быть iocharset=utf8, иначе по умолчанию оно берёт cp437. utf8 должно быть написано именно так, без привычного минуса, потому что это в данном случае не имя кодировки в iconv, а имя файла динамически подгружаемой библиотеки.

Если среди жертв есть древние серверы на Samba 1.x (или, возможно, Windows 9x/ME), то дополнительно придётся указать в smb.conf параметр dos charset = cp866.

Для монтирования FTP-серверов есть много разных решений — ftpfs (obsolete), lufs, lftpfs, curlftpfs.

lufs поначалу выглядит очень многообещающе, но мануал ни слова не говорит о кодировках. А значит, правильно смонтируются только серверы с правильной кодировкой. К сожалению, их ещё пока в процентном соотношении очень мало. Кроме того, сам пакет требует компиляции отдельного ядерного модуля, который для сборки под ядро 2.6 ещё надо патчить.

lftpfs работает поверх lftp, а значит, с поддержкой кодировок у него всё нормально. Однако он заточен под кэширование. Что само по себе интересно, но для каких-нибудь других задач.

curlftpfs тоже позволяет для каждого сервера задать, в какой кодировке он отдаёт листинги. На нём я и остановился.

Замеченные проблемы:

  • С curlftpfs не работает umount из-под простого пользователя, говорит, что параметры не совпадают с тем, что написано в fstab. Хотя смонтировано именно оттуда.
  • mount.cifs под пользователем позволяет смонтировать одну и ту же шару несколько раз, после чего опять-таки обламывается umount.
  • Если точки монтирования имеют одинаковые имена (скажем, /mnt/foo/pub и /mnt/bar/pub), то в Nautilus’е они показываются как pub и pub (1), что несколько затрудняет их различение.

PS: под Windows есть некая программа FTPDrive. Только она заброшенная (последний релиз два года назад) и, кроме того, её братья (NetView и KillCopy) не внушают доверия.

(will be screened)
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

yurikhan: (Default)
Yuri Khan

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
26 2728293031 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-07-11 18:48
Powered by Dreamwidth Studios