понедельник, 16 апреля 2007 г.

Gmailfs. Монтируем Gmail как сетевой диск.

Продолжаю играться с виртуальными файловыми системами, построенными на основе fuse (Filesystem in Userspace) - файловой системы в пространстве пользователя. Здесь (SSHFS -монтирование удаленных систем через SSH) я уже писал о sshfs - утилите, позволяющей монтировать разделы удаленного компьютера с помощью fuse. Также существуют еще fuseftp, для монтирования ftp разделов, fusesmb монтирования сетевых директорий Windows, ntfs-3g для монтирования ntfs разделов с возможностью записи, о которых я, надеюсь, напишу позже. Вообще, для желающих создать свою виртуальную файловую систему есть статья Разработка собственной файловой системы с помощью FUSE.


В свою очередь, Gmailfs - это виртуальная файловая система позволяющая пользователям монтировать и использовать дисковое пространство, предоставляемое им с почтовым ящиком от Gmail. На данный момент это приблизительно 3 Гигабайта в ваше личное пользование. Конечно, скорость работы меньше чем с локальными разделами. Главным же преимуществом есть возможность доступа с любой точки земного шара, имеющей выход в Интернет.

Установка.

Здесь я рассматриваю установку программы в Debian Etch. Все должно работать и в последних версиях (Edgy и Feisty) Ubuntu/Kubuntu. С Dapper были некоторые проблемы, решение описано здесь.
Бинарные пакеты для других популярных дистрибутивов тоже существуют. Проверьте с помощью менеджера пакетов вашей системы.
Для работы программы в системе должен быть установлен Python версии 2.3 или позже. Также ядро должно быть собрано с поддержкой fuse. В последних версиях ядра он включен по умолчанию. Если в ядро вашего дистрибутива этот модуль не включен, соберите и установите его как описано здесь.

Собственно установка:

$ sudo apt-get install gmailfs

Проверяем, загружен ли модуль fuse (у меня не был):

$ lsmod | grep fuse

Если команда выдает что-нибудь наподобие:

fuse 48944 0

все замечательно, следующий шаг можно пропустить, иначе
подгружаем модуль fuse:

$ sudo modprobe fuse

Модуль должен подгрузиться. Можете проверить опять.

Теперь можно приступить и к знакомой работе, связанной с монтированием.

Монтирование.

Создаем точку монтирования:

$ sudo mkdir -p /mnt/gmail

Монтировать как всегда можно вручную (после перезагрузки все теряется) и прописав опции монтирования в файле /etc/fstab. Все зависит от частоты перезагрузки вашего компьютера и частоты пользования данной утилитой. Рассмотрим оба варианта.

Монтирование вручную:

Наберите в терминале следующее:
$ sudo mount -t gmailfs none /mnt/gmail -o username=account_name@gmail.com,password=password,fsname=xxx
Ignored option :rw

Вставьте соответственно имя своего аккаунта и пароль. Также введите что-нибудь пооригинальней в пункте fsname (вроде пароля).

Для проверки скопируйте файл в созданную директорию и проверьте ее содержимое (только под пользователем root).

$su
#cd /mnt/gmail/
#mc (копируем файлы в папку /mnt/gmail)
#ls
1.png 2.png 3.png 4.png

Закончив работу, отмонтируем:

#umount /mnt/gmail

Монтируем с записью в /etc/fstab/:

Открываем упомянутый файл:

$ sudo nano /etc/fstab

и вносим в него опции монтирования:

/usr/share/pycentral/gmailfs/site-packages/gmailfs.py /mnt/gmail gmailfs username=account_name@gmail.com,password=password,fsname=xxx

Сохраняем изменения и монтируем:

$sudo mount /mnt/gmail

Виртуальная файловая система смонтирована и готова к работе.

В качестве альтернативы все данные (имя, пароль и fsname) можно занести в файл /etc/gmailfs/gmailfs.conf и после этого монтировать без них.

Теперь несколько слов о проблемах:

1. При копировании файла на gmail-disc на ящик приходит 3 письма с такими заголовками:
"v=3 r=1137456558 q=__g__gmail__h__ "

Я эту проблему решил с помощью настройки фильтров на аккаунте gmail и в почтовой программе. В качестве параметра для фильтрования можно задать величину q=__g__123123__h__, где 123123 ваш fsname.


2. Работать можно только от пользователя root
От имени обычного пользователя зайти в примонтированную папку не получается. При попытке просмотреть права доступа выдает следующее:

serhiy@debian:/mnt$ ls -l
итого 6
?--------- ? ? ? ? ? gmail

Пока не знаю как с этим бороться. Добавление пользователя в группу fuse не помогло. Может, кто-нибудь сталкивался?

Монтировать нужно от имени обычного пользователя, а размонтировать с помощью sudo:

serhiy@debian:/mnt$ mount /mnt/gmail/
serhiy@debian:/mnt$ cd gmail/
serhiy@debian:/mnt/gmail$ ls
1.png 2.png 3.png 4.png IMG_0001.JPG
serhiy@debian:/mnt/gmail$ umount /mnt/gmail
serhiy@debian:/mnt/gmail$ cd ..
serhiy@debian:/mnt$ umount /mnt/gmail
umount: /mnt/gmail mount disagrees with the fstab
serhiy@debian:/mnt$ sudo umount /mnt/gmail/
serhiy@debian:/mnt$
Может это выглядит и не очень красиво, но зато работать можно от имени обычного пользователя. В целом, меня все устраивает.

Пока же буду работать только от имени суперпользователя.

17 коммент.:

Анонимный комментирует...

2. Работать можно только от пользователя root
В опциях монтирования можно попробовать добавить user или users, это разные опции, но смысл у них похожий, подробнее man mount. Можно будет монтировать диски без su (XFCE4 mount plugin - очень удобная штука ;) и после монтирования работать с файлами от имени обычного пользователя.
А работать из-под root - это совсем неправильно. Только для настроек и тестирования сети. А все остальное в правильно настроенной системе может обычный пользователь - просто надо разобраться, как ему дать права это делать ;)

Avari

serhiy комментирует...

Да я и сам понимаю, что работать из под рута это не хорошо. Можно правда пользоваться утилитой sudo, но тоже не очень удобно. Пошел рыться в опциях монтирования.

serhiy комментирует...

Немного разобрался. Теперь монтировать и работать можно от имени обычного пользователя. Права рута нужны только для того, чтобы отмонтировать данный раздел.

libc6 комментирует...

Интересно, как просисходит монтирование, ведь страрт сетевых сервисов и соединение с нетом происходят после монтировнаия разделов в соответствии с /etc/fstab.

serhiy комментирует...

to_lib6

Пока не могу ответить на этот вопрос.
А как монтируется NFS?

Oleg комментирует...

Вообще для того что бы отмонтировать fuse-файловые системы не от рута, надо пользоваться fusermount -u. ;) Во всяком случае у меня это прекрасно работает для siefs (только ее юзаю под fuse) под обычным юзером.

serhiy комментирует...

Вообще для того что бы отмонтировать fuse-файловые системы не от рута, надо пользоваться fusermount -u. ;)

Вот спасибо!!! Действительно работает :).

Анонимный комментирует...

drwxr-xr-x 2 root root 48 2007-04-21 14:13 ds2
drwxr-xr-x 2 root root 48 2007-04-21 14:13 ds3
?--------- ? ? ? ? ? gmailfs
drwxr-xr-x 2 root root 48 2007-04-21 13:28 loop1

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

develf комментирует...

Еще нашел проблему, если в пароле содержатся запятые(или не только запятые)
при вводе пароля типа PaSs,wd
получаем вывод:
Ignored option : wd
И далее пароль считается неверным.

Пробовал такими способами:
"PaSs,wd"
'PaSs,wd'
PaSs\,wd

pass="PaSs,wd"
password=$pass

Эффект тот же. Не знаю, что и делать, а пароль менять не по джентльменски.

Анонимный комментирует...

Я сам не линуксоид, но идея мапировать gmail как сетевой диск мне понравилась! Люблю креатив. Спасибо за свежую идею.

Анонимный комментирует...

если монтировать прямо так:

sudo mount -t gmailfs none /mnt/gmail -o username=account_name@gmail.com,password=password,fsname=xxx

то любой желающий увидит ваш пароль и логин, использовав ps aux | grep gmail.com

просветите, как складывать опции в отдельный файл?

Анонимный комментирует...

Монтировать-то монтирует и даже вроде копирует что-то. Только вот почему-то файлы после этого не появляются (вывод ls пустой), хотя в вебинтерфейсе файлы есть. Это только у меня так или это нормальное поведение такое?

Анонимный комментирует...

Я вообще знал, что такое можно делать с Gmail-ом. Но знал я только как это делается в винде...
Спасибо большое за статью, обязательно попробую.

ЗЫ: предлагаю обмен ссылками!
http://mrvisor.wordpress.com/
на вас ссылку я уже добавил :)

Анонимный комментирует...

Что-то не получается у меня от обычного пользователя монтировать...

Nikita комментирует...

что-то вообще работать отказывается

eddy комментирует...

существуют fuseftp, для монтирования ftp разделов, fusesmb монтирования сетевых директорий Windows.
подскажите плиз как в win xp создать виртуал hdd с фтп-источником? эти фусе я искал но вроде всё для линукс

Анонимный комментирует...

а вот это вот!!!
-
приходить в контакт, iCQ, allnight первыми и после удаляться не прощаясь с напускным безразличием и видом жутко занятых особ, которые случайно опустились с небес до нас смертных,
Generic Viagra
Viagra Online
Buy Viagra