Com a ajuda de Nikratio, finalmente posso montar meu balde S3 automaticamente na inicialização. Atualizei minha pergunta com a solução.
Eu tenho experimentado com o s3ql no Ubuntu 10.04, usando-o para montar os buckets do Amazon S3. No entanto, eu realmente gostaria de montá-los automaticamente. Alguém sabe como fazer isso?
Solução:
Graças à ajuda de Nikratio de s3ql , finalmente posso montar automaticamente baldes S3 quando o sistema é inicializado. Você definitivamente vai querer olhar para o manual , mas aqui está o básico de como fazer isso!
O primeiro passo é criar um arquivo authinfo. Esse arquivo deve ser colocado em um diretório .s3ql dentro do diretório inicial do usuário que o utilizará. O arquivo authinfo contém informações de login, permitindo que o s3ql monte os buckets sem avisar. Abaixo está um exemplo de como deve ser seu arquivo authinfo. A primeira linha contém suas credenciais de segurança da Amazon. O segundo contém o local e a senha do seu intervalo. Você pode adicionar várias linhas de depósito a esse arquivo, se necessário, mas estou usando apenas um neste exemplo. Nesse ponto, a senha do intervalo pode ser qualquer coisa.
backend s3 machine any login YourAWSAccessKeyID password YourAWSSecretAccessKey
storage-url s3://mybucket password EncryptionPasswordOfYourChoosing
O encryption_password_of_your_choosing
é usado pelo S3QL para criptografar / descriptografar todas as gravações / leituras de arquivos do S3.
O nome do intervalo precisa ser único em toda a AWS: dois usuários não podem ter o mesmo nome de intervalo, por isso é uma boa ideia entrar no Amazon Web Services e tentar nomes diferentes até encontrar um que esteja disponível. Um bom esquema de nomenclatura é usar o nome do domínio + servidor do qual você acessará o bloco (por exemplo, "staging.example.com" ou "east.coast.01.example.com", ou o que for apropriado).
Para criar o sistema de arquivos, use o comando:
mkfs.s3ql s3://mybucket
Ele solicitará sua senha de criptografia. Isso deve ser o mesmo que a senha do intervalo no arquivo authinfo.
Agora que seu sistema de arquivos foi criado, você pode montá-lo usando o comando:
mount.s3ql s3://mybucket /mnt/s3/bucket
É claro que o nome do seu intervalo e o ponto de montagem variam.
Agora, se quisermos montar esse bucket automaticamente na inicialização, precisamos adicionar um script upstart ao / etc / init. Felizmente, o s3ql vem empacotado com um, s3ql.conf.
Eu adicionei "--allow-other" ao comando mount.s3ql para permitir que usuários além do root acessem o bucket montado.
#
# This file can be placed in /etc/init. It defines an upstart job that
# takes care of mounting and unmounting an S3QL file system.
#
description "S3QL Backup File System"
author "Nikolaus Rath <[email protected]>"
start on (filesystem and net-device-up IFACE=eth0)
stop on runlevel [016]
env BUCKET="s3://mybucket"
env MOUNTPOINT="/mnt/s3/bucket"
expect stop
script
# Redirect stdout and stderr into the system log
DIR=$(mktemp -d)
mkfifo "$DIR/LOG_FIFO"
logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" &
exec > "$DIR/LOG_FIFO"
exec 2>&1
rm -rf "$DIR"
# Check and mount file system
fsck.s3ql --batch "$BUCKET"
exec mount.s3ql --upstart --allow-other "$BUCKET" "$MOUNTPOINT"
end script
pre-stop script
umount.s3ql "$MOUNTPOINT"
end script
Depois de adicionar esse script, em teoria você deve poder reinicializar e ter o seu bucket montado automaticamente, mas isso é porque eu tive problemas. O meu não estava sendo montado.
Meu problema foi causado pelo fato de que o upstart estava executando o script como root, mas eu criei o sistema de arquivos como outro usuário. Depois que eu copiei o diretório .s3ql do diretório home do usuário que eu estava logado como / root, o problema foi resolvido.
Espero que isso ajude alguém lá fora. Embora eu não tenha usado meu balde S3 montado por muito tempo, estou impressionado com a forma como meus testes iniciais foram feitos.
Além disso, esta resposta foi escrita cerca de uma semana após a solução ter sido encontrada. Acho que cobri tudo, mas se você perceber que eu perdi um passo, me avise e adicionarei. Você também vai querer ler o manual , vale a pena lê-lo se você pretende usar s3ql.
Com a ajuda de Nikratio, finalmente posso montar meu balde S3 automaticamente na inicialização. Atualizei minha pergunta com a solução.
Modernas instalações do Ubuntu usam o sistema upstart orientado a eventos durante grande parte do processo de inicialização, então é melhor mover a inicialização para isso. Você teria um script em / etc / init que seria parecido com isto:
description "S3FS"
start on (filesystem
and net-device-up IFACE!=lo)
stop on runlevel[!2345]
console output
expect fork
respawn
script
# Redirect stdout and stderr into the system log
DIR=$(mktemp -d)
mkfifo "$DIR/LOG_FIFO"
logger -t s3ql -p local0.info < "$DIR/LOG_FIFO" &
exec > "$DIR/LOG_FIFO"
exec 2>&1
rm -rf "$DIR"
modprobe fuse
fsck.s3ql --batch s3://mybucket
exec mount.s3ql --allow-other s3://mybucket /mnt/s3fs
end script
Você terá que fazer algum trabalho de teste - não sei como o redirecionamento de saída para o registro se comportará, e talvez seja necessário configurar um script de pós-inicialização para desmontar corretamente o sistema de arquivos.
A documentação do upstart é aqui . Ainda não encontrei um pacote baseado em FUSE que o use, mas não fiz uma pesquisa exaustiva.
Uma alternativa pode ser construir uma entrada fstab para o sistema de arquivos, de modo a deixar as entradas mountall para cuidar de montá-las para você, mas não sei se existe uma maneira de especificar que um determinado FUSE sistema de arquivos depende da rede.