NPDD/Baobáxia/GitAnnexPub
(adicionando alguns problemas encontrados) |
(adicionando sshfs / get de arquivo em outras máquinas) |
||
(9 edições intermediárias de um usuário não apresentadas) | |||
Linha 10: | Linha 10: | ||
|bartolina|------------------|acotirene.sarava.org|\ | |bartolina|------------------|acotirene.sarava.org|\ | ||
|_________| --------------------- \_______ | |_________| --------------------- \_______ | ||
− | | | + | | | |
− | | | + | | -----|------- |
− | | | + | | | kalakuta | |
− | __|_____ | + | __|_____ |___________| |
− | |pendrive|-----------------------------------------------| | + | |pendrive|-------------------------------------------------| |
|________| | |________| | ||
Linha 22: | Linha 22: | ||
zumbi@acotirene: | zumbi@acotirene: | ||
− | git init --bare | + | $ git init --bare |
− | git annex init origin | + | $ git annex init [nomedoservidor] # origin |
− | == Criando repositórios nos servidores de arquivos == | + | == Criando repositórios nos servidores de arquivos [Mucuas] == |
criamos repositório original [origin] | criamos repositório original [origin] | ||
nas estações, inicialize o repositório git annex: | nas estações, inicialize o repositório git annex: | ||
− | git clone ssh://zumbi@acotirene.sarava.org:2241/home/zumbi/raiz/pub | + | $ git clone ssh://zumbi@acotirene.sarava.org:2241/home/zumbi/raiz/pub |
− | git annex init [ | + | |
+ | (ele vai baixar para a pasta [pub]) | ||
+ | $ cd pub | ||
+ | |||
+ | Caso você ainda não tenha um usuário git configurado na sua máquina, faça: | ||
+ | $ git config --global user.email mocambola@email.com | ||
+ | $ git config --global user.name 'nome' | ||
+ | |||
+ | Inicialize o repositório 'git annex' dando um nome | ||
+ | $ git annex init [nomedorepositorio] | ||
por configuração ou algo ainda não sabido, após o clone é preciso adicionar qualquer arquivo para poder receber todos as indicações de arquivos do repositório completo. Adicione e comite | por configuração ou algo ainda não sabido, após o clone é preciso adicionar qualquer arquivo para poder receber todos as indicações de arquivos do repositório completo. Adicione e comite | ||
touch arquivo.txt | touch arquivo.txt | ||
− | git annex add arquivo.txt | + | $ git annex add arquivo.txt |
− | git commit -a | + | $ git commit -a |
− | git annex sync | + | $ git annex sync |
− | + | == Adicionando arquivos nos repositórios == | |
+ | |||
+ | Nas estações, adicione arquivos ao repositório | ||
fernao@bartolina | fernao@bartolina | ||
− | cp -a [/storage/musica/Aldo\ Sena] . | + | $ cp -a [/storage/musica/Aldo\ Sena] . |
− | git annex add [Aldo\ Sena] | + | $ git annex add [Aldo\ Sena] |
− | + | ||
vince@kalakuta | vince@kalakuta | ||
− | cp -a [gnawa] . | + | $ cp -a [gnawa] . |
− | git annex add [gnawa] | + | $ git annex add [gnawa] |
− | + | ||
ou então: | ou então: | ||
− | git annex import [nome do arquivo] | + | $ git annex import [nome do arquivo] |
+ | |||
+ | verifique o estado do git annex: | ||
+ | $ git annex status | ||
+ | |||
+ | envie a alteração para o seu repositório (commit) | ||
+ | $ git commit -a | ||
+ | ou | ||
+ | $ git commit -a -m "sua mensagem direto aqui" | ||
== Criando repositório de transporte == | == Criando repositório de transporte == | ||
Linha 61: | Linha 78: | ||
repositório de transporte (pendrive-sync) é clonado de um servidor de arquivo (kalakuta) | repositório de transporte (pendrive-sync) é clonado de um servidor de arquivo (kalakuta) | ||
− | cd /media/pendrive | + | $ cd /media/pendrive |
− | git clone ~/[path]/annex/pub | + | $ git clone ~/[path]/annex/pub |
− | git annex init [pendrive-sync] | + | $ git annex init [pendrive-sync] |
== Sincronizando repositório através do pendrive == | == Sincronizando repositório através do pendrive == | ||
Linha 72: | Linha 89: | ||
copiando arquivos do repositório de transporte para servidor de arquivos | copiando arquivos do repositório de transporte para servidor de arquivos | ||
− | git annex sync -> sincroniza links dos arquivos (faz symlink sem puxá-los) | + | $ git annex sync -> sincroniza links dos arquivos (faz symlink sem puxá-los) |
− | git annex whereis -> aponta localização dos arquivos | + | $ git annex whereis -> aponta localização dos arquivos |
− | git annex get [nome da pasta] -> faz uma copia local do arquivo (copia do local do link simbolico) | + | $ git annex get [nome da pasta] -> faz uma copia local do arquivo (copia do local do link simbolico) |
copiando arquivos do servidor de arquivos (bartolina) para repositório de transporte (pendrive-sync) | copiando arquivos do servidor de arquivos (bartolina) para repositório de transporte (pendrive-sync) | ||
− | git annex copy --to pendrive-sync [Nome da pasta] | + | $ git annex copy --to pendrive-sync [Nome da pasta] |
− | git annex sync | + | $ git annex sync |
+ | |||
+ | == obtendo arquivos em outras mucuas pela rede == | ||
+ | |||
+ | Primeiro de tudo, é preciso saber o ip da mucua. Depois, é preciso fazer um mount ssh - pode ser com sshfs: | ||
+ | # apt-get install sshfs fuse-utils | ||
+ | # modprobe fuse | ||
+ | |||
+ | Adicione seu user ao grupo do fuse | ||
+ | # adduser [fulano] fuse | ||
+ | |||
+ | Reinicie a máquina. | ||
+ | |||
+ | Configure a máquina que vai receber com o openssh-server, caso ela não o tenha: | ||
+ | # apt-get install openssh-server | ||
+ | |||
+ | $ sshfs user@[endereco|ip:/pasta /ponto/de/montagem | ||
== Obtendo informação sobre repositórios e arquivos == | == Obtendo informação sobre repositórios e arquivos == | ||
Linha 116: | Linha 149: | ||
b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta | b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta | ||
ok | ok | ||
+ | |||
+ | |||
+ | descobrindo arquivos com poucas ou muitas cópias | ||
+ | $ git annex find --copies 1 [busca arquivos com uma ao menos uma cópia] | ||
+ | $ git annex find --copies 3 [busca arquivos com uma ao menos três cópias] | ||
+ | |||
+ | mais detalhes: http://git-annex.branchable.com/tips/powerful_file_matching/ | ||
== Confiança do repositório == | == Confiança do repositório == | ||
Linha 166: | Linha 206: | ||
Para o arquivo não sumir, há opções de que um repositório só seja morto - ex: repositório de transporte - quando os arquivos transportados estiverem já copiados integralmente (não apenas o metadado) em outros repositórios, confiáveis (trusted) | Para o arquivo não sumir, há opções de que um repositório só seja morto - ex: repositório de transporte - quando os arquivos transportados estiverem já copiados integralmente (não apenas o metadado) em outros repositórios, confiáveis (trusted) | ||
+ | |||
+ | |||
+ | = Referências = | ||
+ | |||
+ | * http://git-annex.branchable.com/walkthrough/ | ||
+ | * http://git-annex.branchable.com/tips/powerful_file_matching/ |
Edição atual tal como às 18h22min de 26 de julho de 2013
Documentação sobre exercício com repositórios git annex
Estrutura
- 1 servidor de sincronização - acotirene.sarava.org
- 2 servidores de arquivo (estações) - bartolina | kalakuta
- 1 "servidor" de transporte (pendrive)
_________ | | ____________________ |bartolina|------------------|acotirene.sarava.org|\ |_________| --------------------- \_______ | | | -----|------- | | kalakuta | __|_____ |___________| |pendrive|-------------------------------------------------| |________|
Criando repositório Bare (sincronização)
pasta bare (somente leitura)
zumbi@acotirene:
$ git init --bare $ git annex init [nomedoservidor] # origin
Criando repositórios nos servidores de arquivos [Mucuas]
criamos repositório original [origin]
nas estações, inicialize o repositório git annex:
$ git clone ssh://zumbi@acotirene.sarava.org:2241/home/zumbi/raiz/pub
(ele vai baixar para a pasta [pub])
$ cd pub
Caso você ainda não tenha um usuário git configurado na sua máquina, faça:
$ git config --global user.email mocambola@email.com $ git config --global user.name 'nome'
Inicialize o repositório 'git annex' dando um nome
$ git annex init [nomedorepositorio]
por configuração ou algo ainda não sabido, após o clone é preciso adicionar qualquer arquivo para poder receber todos as indicações de arquivos do repositório completo. Adicione e comite
touch arquivo.txt $ git annex add arquivo.txt $ git commit -a $ git annex sync
Adicionando arquivos nos repositórios
Nas estações, adicione arquivos ao repositório
fernao@bartolina
$ cp -a [/storage/musica/Aldo\ Sena] . $ git annex add [Aldo\ Sena]
vince@kalakuta
$ cp -a [gnawa] . $ git annex add [gnawa]
ou então:
$ git annex import [nome do arquivo]
verifique o estado do git annex:
$ git annex status
envie a alteração para o seu repositório (commit)
$ git commit -a ou $ git commit -a -m "sua mensagem direto aqui"
Criando repositório de transporte
vince@kalakuta formatação que suporte symbolic links - vfat não suporta, formatar com outro tipo de partição
repositório de transporte (pendrive-sync) é clonado de um servidor de arquivo (kalakuta)
$ cd /media/pendrive $ git clone ~/[path]/annex/pub $ git annex init [pendrive-sync]
Sincronizando repositório através do pendrive
fernao@bartolina coloque o pendrive
copiando arquivos do repositório de transporte para servidor de arquivos
$ git annex sync -> sincroniza links dos arquivos (faz symlink sem puxá-los) $ git annex whereis -> aponta localização dos arquivos $ git annex get [nome da pasta] -> faz uma copia local do arquivo (copia do local do link simbolico)
copiando arquivos do servidor de arquivos (bartolina) para repositório de transporte (pendrive-sync)
$ git annex copy --to pendrive-sync [Nome da pasta] $ git annex sync
obtendo arquivos em outras mucuas pela rede
Primeiro de tudo, é preciso saber o ip da mucua. Depois, é preciso fazer um mount ssh - pode ser com sshfs:
# apt-get install sshfs fuse-utils # modprobe fuse
Adicione seu user ao grupo do fuse
# adduser [fulano] fuse
Reinicie a máquina.
Configure a máquina que vai receber com o openssh-server, caso ela não o tenha:
# apt-get install openssh-server
$ sshfs user@[endereco|ip:/pasta /ponto/de/montagem
Obtendo informação sobre repositórios e arquivos
$ git annex status supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL supported remote types: git S3 bup directory rsync web hook trusted repositories: 0 semitrusted repositories: 6 00000000-0000-0000-0000-000000000001 -- web 0d02f634-b4eb-11e2-a308-5b2a12a056c9 -- pendrive-sync 3565b218-b745-11e2-b6bf-3f1d4382aece 7b9706b6-b4e7-11e2-a815-df29d94aea3b -- origin b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta ebb92320-b4e7-11e2-a761-3f407428bde8 -- here (bartolina) untrusted repositories: 0 dead repositories: 0 available local disk space: 2 gigabytes (+1 megabyte reserved) local annex keys: 28 local annex size: 199 megabytes known annex keys: 46 known annex size: 2 gigabytes bloom filter size: 16 mebibytes (0% full) backend usage: SHA256: 74
mostra aonde estão as cópias dos arquivos
$ git annex whereis whereis musicas/musica_x.mp3) 0d02f634-b4eb-11e2-a308-5b2a12a056c9 -- pendrive-sync b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta ebb92320-b4e7-11e2-a761-3f407428bde8 -- here (bartolina) ok whereis videos/Desenvolvimento_Web_com_Python_e_Django/Aula 9.avi (1 copy) b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta ok
descobrindo arquivos com poucas ou muitas cópias
$ git annex find --copies 1 [busca arquivos com uma ao menos uma cópia] $ git annex find --copies 3 [busca arquivos com uma ao menos três cópias]
mais detalhes: http://git-annex.branchable.com/tips/powerful_file_matching/
Confiança do repositório
confiando num repositório (somente para servidores, não para transporte (pendrive/hd externo)
git annex trust [nome_do_repo|hash]
desautorizando repositório (ex. pendrive a ser desativado)
git annex drop [nome_do_repo|hash]
Repositórios trusted, untrusted ou desativados (dead) são exibidos:
$ git annex status supported backends: SHA256 SHA1 SHA512 SHA224 SHA384 SHA256E SHA1E SHA512E SHA224E SHA384E WORM URL supported remote types: git S3 bup directory rsync web hook trusted repositories: 1 ebb92320-b4e7-11e2-a761-3f407428bde8 -- origin (bartolina) semitrusted repositories: 7 00000000-0000-0000-0000-000000000001 -- web 0379acea-b75f-11e2-a3f8-cbb4c5959a7f -- kalakutatest1 0d02f634-b4eb-11e2-a308-5b2a12a056c9 -- pendrive-sync 7b9706b6-b4e7-11e2-a815-df29d94aea3b -- origin a1cdd97a-b75f-11e2-a326-f75b5d18409b -- tmp_bartolina b2ab1784-b760-11e2-8ca8-af9f13e4c448 -- Cronos Sol b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta untrusted repositories: 0 dead repositories: 1 3565b218-b745-11e2-b6bf-3f1d4382aece -- here available local disk space: 7 gigabytes (+1 megabyte reserved) local annex keys: 4 local annex size: 733 megabytes known annex keys: 48 known annex size: 2 gigabytes bloom filter size: 16 mebibytes (0% full) backend usage: SHA256: 52
Problemas encontrados
Nessa seção, documentamos os problemas variados encontrados no uso do git annex.
- uso somente com o mesmo usuário
Quando o git annex é usado por usuários diferentes para adicionar e comitar arquivos, ocorrem problemas de permissão. Por isso, é necessário usar apenas UM MESMO usuário para cada repositório, que também não seja usuário root ou através do sudo.
- arquivos perdidos
Quando um repositório é morto (dead), os arquivos a ele associados são perdidos. Isso pode ser visto pelo git annex whereis.
$ git annex whereis *avi whereis Estamira.2004.Marcos.Prado.Eng.sub.avi (0 copies) failed git-annex: whereis: 1 failed
Para o arquivo não sumir, há opções de que um repositório só seja morto - ex: repositório de transporte - quando os arquivos transportados estiverem já copiados integralmente (não apenas o metadado) em outros repositórios, confiáveis (trusted)