Я думаю, у всех случались ситуации, когда домашний роутер или офисная файлопомойка по причинам старости железа или недостаточной прямоты рук уходили в оффлайн и самое быстрое, что могло их вернуть к жизни, это установка с нуля. И хорошо, когда есть backup, а если его нет? Или же есть, но после того как он был сделан, конфиги были переписаны, и снова нужно что-то допиливать. Вот и у меня случилась такая ситуация, когда жесткий диск умирает, а backup старый и в мыле пришлось вспоминать все изменения и снова вносить их. По этому после восстановления работы сервера, решил сделать систему, которая будет периодически делать backup и отправлять мне его на почту.
Methods & Instruments
Архивирование
Для начала нужно все необходимы конфиги, собрать в один файл и сжать его. Для чего используется стандартная утилита tar, она упакует конфиги и сожмет их, чтобы места лишнего не занимали.
Код: Выделить всё
tar -cjz -hP -T ./list -f /tmp/backup.tar.bzip2
Код: Выделить всё
/etc/
/usr/local/etc/
/usr/src/sys/amd64/conf/MYKERN
/root/
Код: Выделить всё
*passwd
*.default
Код: Выделить всё
tar -cjz -hP -T ./list -X ./notbackup -f /tmp/backup.tar.bzip2
Я думаю, что никто не хочет, чтобы его конфиги путешествовали по всемирной паутине в открытом виде. Даже если они попадут в чужие руки, пусть эти чужие руки натрут мозоли, перед тем как откроют их, если вообще откроют. Для шифрования используем opensll:
Код: Выделить всё
openssl enc -rc5-cbc -e -pass file:./pass -in /tmp/backup.tar.bzip2 -out /tmp/bu.rar
Отправка на почту
Тут нужен был простой минимум: отправить полученный файл с одного моего ящика на другой, где они и будут храниться. Хранить я их решил где нибудь в районе mail.ru. С этим возникло больше всего проблем. Оказалось, чтобы стандартными средствами отправить почту на мой ящик, нужно настроить полноценный почтовый сервер, что на тот момент никак не входило в мои планы. Пришлось искать простую утилиту, которая сможет через smtp отправить мне полученный файл. После прочесывания портов обнаружился простой перловский скрипит smtp-cli, который может легко отправить наш файл куда надо. Ставим его:
Код: Выделить всё
cd /usr/ports/mail/smtp-cli/
make install clean
Код: Выделить всё
smtp-cli --host=smtp.ngs.ru --user=ngsmail@ngs.ru --pass=MyMegaPass --from="ngsmail@ngs.ru" --subject="`date`" --to=mien_archive@mail.ru --attach=/tmp/bu.rar
Код: Выделить всё
#!/bin/sh
sleep 30
tar -cjz -hP -T /root/work/arch/list -f /tmp/backup.tar.bzip2
openssl enc -rc5-cbc -e -pass file:/root/work/arch/pass -in /tmp/backup.tar.bzip2 -out /tmp/bu.rar
rm /tmp/backup.tar.gz
smtp-cli --host=smtp.ngs.ru --user=ngsmail@ngs.ru --pass=MyMegaPass --from="ngsmail@ngs.ru" --subject="`date`" --to=mien_archive@mail.ru --attach=/tmp/bu.rar
rm /tmp/bu.rar
Код: Выделить всё
#!/bin/sh
echo "Etner pass for archive"
openssl enc -rc5-cbc -d -pass stdin -in bu.rar -out oldbackup.tar.bzip2
mkdir restore
tar -C restore -xf oldbackup.tar.bzip2
Или "а теперь хочу, чтобы всё само работало". Желательно, чтобы наши конфиги без нашего ведома собирались, шифровались и шли дружным строем в хранилище. Как часто они это будут делать, каждый выбирает сам, я решил для начала поставить два раза в неделю и после перезагрузки. Вносим изменения в наш любимый крон:
Код: Выделить всё
echo "### Config Backup" >> /etc/crontab
echo "@reboot root /root/work/arch/arch.sh" >> /etc/crontab
echo "0 4 * 1-6/3 root /root/work/arch/arch.sh" >> /etc/crontab
Код: Выделить всё
PATH=/etc:/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/root/bin
После допилки нескольких косяков и багов, нехитрая система заработала. Что мне надо на данный момент она делает.
Так же не забываем поставить соответствующие разрешения на файлы, чтобы никто кроме root'a читать/исполнять не мог.
References
man tar
man openssl
Готов выслушать критику, пожелания и прочие комментарии. Так же интересен вопрос "А нужна ли такая заметка в статьях?"