Админы бывают двух видов: те кто…
- еще не делают бекапы
- уже делают
Итак, бекапы уже делаем, и не важно, свой ли опыт или чужой послужил тому причиной. И уже знаем, что один бекап нужно иметь под рукой, а другой — за тысячу километров. С бекапом который «под рукой» — в целом все понятно. С удаленным бекапом тоже все просто, если у вас есть желание и возможности оплачивать эти услуги. А если хотим «на шару»?
Один из таких сервисов — Wuala. Предоставляют бесплатно 5 Гб хранилища (можно бесплатно расширить еще на несколько гигов, участвуя в промо-акциях, приглашая друзей и т.п.), позиционируют свой сервис как секурный: данные передаются и хранятся в зашифрованном виде (если верить рекламе). Отмечу, что клиент Wuala может работать как с графическим интерфейсом (довольно неплохим), так и из консоли.
Доступ к файловой системе облачного хранилища можно получить через клиентский софт. В линуксе этот софт (java!) позволяет примонтировать через свой специфический модуль fuse мое хранилище в отдельную папочку. Симлинки, правда, не поддерживаются, но файлы хранить может, а это уже многое.
Архитектура приложения такова, что вначале требуется запустить демон, который все инициализирует, обновляется, если потребуется, соединяется с облачными серверами. Последующие инвокации wualacmd позволяют передавать демону команды, такие как login, logout.
К сожалению, мне не удалось найти метод, повзоливший бы узнать, что wuala-демон успешно запустился и готов принимать команды. В состоянии пока демон не готов принимать команды инвокации wualacmd завершаются с кодом 0, так что чувствуется «теплота и забота» разработчиков о пользователях консоли. Привязываться к конкретному синтаксису сообщений об ошибке\успехе в консоли — тем более что они могут быть самыми разными — мне не захотелось. Отчасти поэтому код проверок успешности завершения некоторых операций в скрипте реализован так, как реализован, и отводится целых 10 секунд просто на подождать, пока wuala-демон не подготовится к работе. Ну для ночного, запускаемого по расписанию скрипта 10 секунд — не велика потеря.
Секурность Wuala
Пару слов на счет секурности Wuala. Для меня подозрительным выглядит тот факт, что смена типа доступа с приватного на публичный с доступом по ссылке происходит незамедлительно. Даже для больших файлов. Как такое может быть, если файл хранится на сервере в зашифрованном виде?
Может, сервера вуалы умеют на лету расшифровывать файлы, помеченные как публичные? Если да, то wuala тогда хранит у себя мой пароль для дешифровки данных? Каким ключом зашифрованы данные? Кто им владеет, только я? Или нет никакого ключа при хранении, а шифруется лишь передача файлов по сети? И шифруется ли? — Я не проверял.
Как бы там ни было, хранение своих важных данных с использованием инфраструктуры третьей стороны требует от нас шифрования своих данных. gpg, encfs или любой другой инструмент — в помощь.
В результате работы над этой задачей был рожден приблизительно такой скрипт. В результате выполнения скрипта запустится (если еще на запущен) демон wuala в сессии screen с именем «wuala». Произведется логин с указанным логином и паролем и выполнился код из функции wualaSync с последующим логаутом. По завершении работы скрипта демон в скрине не прибивается, чтоб быстрей включалось в следующий раз.
#!/bin/bash ####BASIC SETTINGS WUALA_LOGIN=ваш-логин WUALA_PASSWORD=ваш-пароль WUALA_PATH=~/WualaDrive/$WUALA_LOGIN/ ####HELPER FUNCTIONS FOR WUALA #test if wuala is already running function wualaRunning { a=`screen -ls |grep wuala | wc -l` return $a } function wualaLogin { a=`wualacmd login $WUALA_LOGIN $WUALA_PASSWORD | grep "ogged in" | wc -l` return $a } function wualaLogout { wualacmd logout } function startWuala { screen -d -m -S wuala wualacmd wualaRunning isRunning=$? if [[ "$isRunning" -eq "0" ]]; then echo "Wuala failed to run" exit fi #sleep to let wuala connect to server #FIXME: need a better way of doing this sleep 10 return 1 } ####YOUR CODE TO SYNC BACKUP DATA TO WUALA function wualaSync { #Here comes code to sync files between local filesystem and $WUALA_PATH rsync -av --del /storage/backup/mysql-encoded $WUALA_PATH/myserver-backup/ } ####MAIN SEQUENCE #check if wuala is running wualaRunning isRunning=$? if [[ "$isRunning" -ne "0" ]]; then echo "wuala is running. Logging in" else echo "starting wuala" startWuala fi wualaLogin loggedIn=$? if [[ "$loggedIn" -ne "0" ]]; then wualaSync wualaLogout else echo "Failed to log in" exit fi
Всяческие улучшения — welcome!
ссылка на оригинал статьи http://habrahabr.ru/post/195010/
Добавить комментарий