Backup da configuração do Linux, scripts e documentos para o Gmail

6

No gmail.com, vejo isto:

  

0,38 GB (2%) de 15 GB usados

Tenho 20 GB da minha partição de 30 GB preenchida com material do Ubuntu, mas provavelmente apenas 1 GB de documentos importantes, então por que não usar esse armazenamento em nuvem gratuito para backup?

Já existe um programa para fazer isso? Provavelmente vou escrever uma, mas queria perguntar antes de começar.

Eu também quero compactação e segmentação de arquivos, porque alguns sistemas têm 10 MB de limites de anexos (como o do trabalho).

Obrigado :)

    
por WinEunuuchs2Unix 22.05.2017 / 01:48

1 resposta

3

Editar 3 de abril de 2018

Post histórico na próxima seção

A parte original da resposta é deixada intacta na próxima seção para referência histórica a tentativa e erro

Script de backup para criar o arquivo .tar

Este é o script de backup atual:

#!/bin/bash

# NAME: daily-backup.sh
# PATH: /mnt/e/bin
# DESC: Backup scripts, documents and configuration files to .tar

# DATE: July 11, 2017. Modified Oct 20, 2017.

# PARM: 1=backup file name. Extension .tar automatically appended.

# NOTE: To include MBR (Master Boot Record) in backup create an image using:
#       sudo dd if=/dev/sda of="$HOME/.mbr.sav" bs=512 count=1

# NOTE: CLONE CURRENT INSTALLATION TO NEW MACHINE
#       =========================================

#       To restore use Live USB to install Ubuntu alongside Windows 10
#       Connect to network with password xxxxxxxxx

#       Install Google Chrome
#       (https://sobrelinux.info/questions/665/how-to-install-google-chrome"Backup-2017-10-21-Saturday"'
    echo '.tar will automatically be added as a file extension'
    exit 1
fi

FileName=".tar"
HomeDir="/home/Me"                    # Required for cron compatibility
EmailAddr="[email protected]"

cd $HomeDir ||
    exit 1

dpkg --get-selections > .packages       # List of installed applications

tar -cvpf "$FileName" bin               # create .tar & add user scripts
tar -rvpf "$FileName" /usr/local/bin    # add global root-based scripts
tar -rvpf "$FileName" /etc/cron*        # crontab, cron.d, cron.daily, etc
tar -rvpf "$FileName" /etc/system*      # systemd files: login.conf, etc.
tar -rvpf "$FileName" /lib/systemd/system-sleep
tar -rvpf "$FileName" /etc/rc.local     # Startup script: calls zaprestore.
tar -rvpf "$FileName" /etc/sudoers      # 120 minute sudo, stars in password
tar -rvpf "$FileName" /etc/default/grub # bootstrap loader
tar -rvpf "$FileName" /boot/grub        # Custom grub fonts and splash...
tar -vpf "$FileName" /usr/share/plymouth   # ... screen (plymouth)
tar -rvpf "$FileName" /usr/share/plymouth/themes/earth-sunrise/
tar -rvpf "$FileName" Desktop           # files and links on desktop
tar -rvpf "$FileName" Documents/*.od*   # Libre Office: *.ods, *.odt, etc.

# Trusted keys to install from third party PPAs
tar -rvpf "$FileName" /etc/apt/trusted.gpg
tar -rvpf "$FileName" /etc/apt/trusted.gpg.d

# Sources for repositories - 1) Main single file - 2) directory of files
tar -rvpf "$FileName" /etc/apt/sources.list
tar -rvpf "$FileName" /etc/apt/sources.list.d

# find all $HOME/.config files and add to .tar
find .* -maxdepth 0 -type f -exec tar -rvf "$FileName" {} +

# Nautilus custom scripts
tar -rvpf "$FileName" .local/share/nautilus/scripts

# /etc/udev rules
tar -rvpf "$FileName" /etc/udev/rules.d

# /etc/rc.local
tar -rvpf "$FileName" /etc/rc.local

# /etc/X11/xorg.conf.d
tar -rvpf "$FileName" /etc/X11/xorg.conf.d

# /mnt/e - shared WSL + Linux
tar -rvpf "$FileName" /mnt/e/bin
tar -rvpf "$FileName" /mnt/e/Documents

echo "Wait a minute... Emailing: $EmailAddr"

# From: https://internetlifeforum.com/gmail/2251-gmail-some-file-types-blocked-fix-how-go-around/
# cat archive.tar.gz | base64 > file
# then i sent the file via email:
# echo "Base64 encoded file" | mutt -a file -s subject -- [email protected]
# then mail was delivered properly!
# then when one need to get readable archive again, he need to decode it by base64. In my case i do it via linux command line:
# cat file | base64 -d > decodedarchive.tar.gz

FileName64="$FileName".64
cat "$FileName" | base64 > "$FileName64"
echo -e "to: $EmailAddr\nsubject: $FileName64\n" | \
    (cat - && uuencode "$FileName64" "$FileName64") | ssmtp "$EmailAddr"

#echo -e "to: $EmailAddr\nsubject: $FileName\n" | \
#    (cat - && uuencode "$FileName" "$FileName") | ssmtp "$EmailAddr"

ls -la $FileName
ls -la $FileName64

rm "$FileName"
rm "$FileName64"

exit 0

Substitua /home/Me acima por seu nome de usuário. Substitua [email protected] pelo seu endereço do Gmail real. Altere o diretório /mnt/e/bin para o diretório que você armazena seus scripts bash. Salve o arquivo e saia. Então use:

chmod a+x /mnt/e/bin/backup

Isso torna o script executável.

Observe como o MBR (Master Boot Record) é salvo no backup. Uma etapa anterior separada para criar ~/.mbr.sav usando sudo dd ... é necessária, conforme descrito nos comentários do script.

Observe a linha dpkg --get-selections . Isso cria uma lista de todos os nomes de aplicativos instalados.

A maneira mais simples de automatizar o envio de e-mail

Em Envie alertas de e-mail usando o ssmtp encontramos a maneira mais simples de enviar e-mail automatizado a partir do terminal ou script. As etapas de instalação são diretas:

sudo apt install ssmtp
sudo nano /etc/ssmtp/ssmtp.conf
# Change "MyEmailAddress" and "MyPassword" to your own.

Há um passo não mencionado; O Google enviará um e-mail confirmando que você deseja permitir que um aplicativo "menos seguro" envie e-mails com sua conta:

Após instalar e configurar ssmpt , é necessário mais um pacote para anexar seu arquivo de backup .tar a uma mensagem de e-mail:

sudo apt install sharutils

Este pacote contém o programa uuencode , que é necessário para converter arquivos binários para transmissão.

Configuração cron diariamente para chamar o script de backup

Crie o arquivo /etc/cron.daily/daily-backup contendo:

#!/bin/sh
#
# NAME: daily-backup
# DESC: A .tar backup file is created, emailed and removed.
# DATE: Nov 25, 2017.
# CALL: WSL or Ubuntu calls from /etc/cron.daily/daily-backup
# PARM: No parameters but /etc/ssmtp/ssmtp.conf must be setup

# NOTE: Backup file name contains machine name + Distro
#       Same script for user with multiple dual boot laptops
#       Single machine should remove $HOSTNAME from name
#       Single distribution should remove $Distro

sleep 30 # Wait 30 seconds after boot

# Running under WSL (Windows Subsystem for Ubuntu)?
if cat /proc/version | grep Microsoft; then
    Distro="WSL"
else
    Distro="Ubuntu"
fi

today=$( date +%Y-%m-%d-%A )
/mnt/e/bin/daily-backup.sh Daily-$(hostname)-$Distro-backup-$today

Salve o arquivo, saia e use:

chmod a+x /etc/cron.daily/daily-backup

Isso torna o script executável.

O que o cron lhe envia por e-mail todas as manhãs

Toda manhã, depois que /etc/cron.daily/daily-backup é executado, cron envia dois e-mails. Um é o arquivo de backup Backup-YYYY-MM-DD.tar , que no meu caso é de 5,2 MB que não posso mostrar. O outro é uma listagem de todos os arquivos no backup que o comando tar relatou para cron :

Anacron <[email protected]>
6:58 AM (1 hour ago)

to root, bcc: me 
/etc/cron.daily/daily-backup:
bin/
bin/.websync.new
bin/log-gsu-del
bin/now
  (... SNIP ...)
.xscreensaver
.xsession-errors
.xsession-errors.old

Resumo

Demorou um mês aguardando uma resposta e depois um mês escrevendo uma resposta, mas agora o projeto está concluído. A partir de agora, é simplesmente uma questão de adicionar diretórios adicionais ao script de backup.

O próximo projeto será um backup completo, mas terá 6 GB e será copiado para o gdrive (Google Drive) porque o Gmail está limitado a 25 MB. Esse script é chamado /usr/local/bin/full-backup e está incluído aqui se você estiver interessado:

#!/bin/bash

# NAME: full-backup
# PATH: $HOME/bin
# DESC: Full system backup - must call with SUDO

# DATE: July 16, 2017. Modified July 26, 2017.

apt autoclean   # reduces size of /var/cache/apt/archives

cd /tmp         # tar must be created in directory not backed up.

time tar -cvpzf backup.tar.gz \
--exclude=/backup.tar.gz \
--exclude=/proc \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/dev \
--exclude=/sys \
--exclude=/media \
--exclude=/usr/src/linux-headers* \
--exclude=/home/Me/.cache \
--exclude=/var/log \
--exclude=/var/run/ \
--exclude=/run \
--exclude=/var/cache/apt/archives /

Seção histórica

Isso será mais uma "jornada" do que uma resposta, conforme as opções disponíveis forem exploradas.

Backup do que é mais importante para você primeiro

Eu tenho dois diretórios onde eu investi a maior parte do meu tempo desde agosto de 2016:

/home/rick/bin
/usr/local/bin

Quando criei pela primeira vez um arquivo tar (arquivo de fitas) usando esses dois diretórios e tentei enviá-los por e-mail para mim mesmo, recebi este erro:

gmail.com não aceita arquivos & gt; 25 MB

Como dois diretórios de scripts escritos em 10 meses podem ser maiores que 25 MB? Em um exame mais detalhado, eles são & gt; 190 MB. Whhaaatttt?

O resultado é um único arquivo criado para fins de teste:

-rw-rw-r--  1 rick rick 191143744 Dec 23 17:27 log-gsu-gedit.tst

Exclua este arquivo de teste e execute novamente os comandos:

tar -cvf scripts-2017-06-05.tar /home/rick/bin
tar -rvf scripts-2017-06-05.tar /usr/local/bin

O primeiro comando cria o arquivo .tar usando um diretório de arquivos de script e o segundo acrescenta ao arquivo .tar usando o segundo diretório de arquivos de script.

O arquivo .tar é agora um tamanho mais respeitável de 1,3 MB:

-rw-rw-r-- 1 rick rick 1341440 Jun  5 17:27 scripts-2017-06-05.tar

A maneira mais simples é enviar um email como anexo

Agora que o arquivo .tar foi criado, basta acessar gmail.com e enviar o arquivo por e-mail para você como um anexo. Na próxima etapa, queremos um trabalho cron que crie o arquivo diariamente e envie-o por e-mail automaticamente usando MTA (Mail Transport Agent). Uma opção precisa ser configurada no gmail.com para excluir todos esses e-mails com mais de 30 dias. Dessa forma, apenas 400 MB ou mais do total de backups de scripts serão armazenados.

Editar 25 de junho de 2017

Descobri que hoje à noite alguns arquivos de configuração são difíceis de fazer backup até que eu deparei com este tópico . Os arquivos em questão estão no meu diretório pessoal:

.bashrc
.conkyrc
.websync # one of my own databases
.bafman* # Another one of my own databases

Usando o link acima, criei um script chamado ~/bin/backup com:

#!/bin/bash

if [[  == "" ]] ; then
    echo 'Parameter required for file name, ie "Backup-2017-06-26"'
    echo ".tar will automatically be added as a file extension"
    exit
fi
tar -cvf .tar /home/rick/bin
tar -rvf .tar /usr/local/bin
find .* -maxdepth 0 -type f -exec tar -rvf .tar {} +

Para ver o que está no .tar archive use o comando:

tar -tvf Backup-2017-06-26.tar

Lembre-se de substituir "Backup-2017-06-26" pelo parâmetro que você usou ao criar o backup.

Editar 1 de julho de 2017

Perguntas e respostas semelhantes foram publicadas em novembro de 2014: Enviar backup por e-mail com crontab .A resposta aceita está incluída abaixo:

Este comando a seguir funcionou para mim quando testei na minha máquina.

echo "This is the message body" | mutt -a "/path/to/file.to.attach" -s "subject of message" -- [email protected]

Então, provavelmente, a abordagem a seguir será algo como

tar -zcf /home/blah/backup.tgz /home/blah/
echo "Please find attached the backup file" | mutt -a "/home/blah/backup.tgz" -s "File attached" -- [email protected]

Vou salvar o script acima como backup_email.sh e agendar o cron job como

0 1 * * * /path/to/backup_email.sh

Referências

link

    
por WinEunuuchs2Unix 06.06.2017 / 02:00