Админы бывают двух видов: те кто…
- еще не делают бекапы
- уже делают
Итак, бекапы уже делаем, и не важно, свой ли опыт или чужой послужил тому причиной. И уже знаем, что один бекап нужно иметь под рукой, а другой — за тысячу километров. С бекапом который «под рукой» — в целом все понятно. С удаленным бекапом тоже все просто, если у вас есть желание и возможности оплачивать эти услуги. А если хотим «на шару»?
Один из таких сервисов — 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!
Автор: uazure