NPDD/Baobáxia/GitAnnexPub

De Rede Mocambos
< NPDD | Baobáxia(Diferença entre revisões)
Ir para: navegação, pesquisa
m (obtendo informação sobre repositórios e arquivos)
(adicionando sshfs / get de arquivo em outras máquinas)
 
(16 edições intermediárias de um usuário não apresentadas)
Linha 10: Linha 10:
 
  |bartolina|------------------|acotirene.sarava.org|\
 
  |bartolina|------------------|acotirene.sarava.org|\
 
  |_________|                  ---------------------  \_______
 
  |_________|                  ---------------------  \_______
     |                                                   |  
+
     |                                                       |  
     |                                             -----|-------
+
     |                                                 -----|-------
     |                                             | kalakuta  |   
+
     |                                                 | 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 [bartolina|kalakuta]
+
 
 +
(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 ==
  
na estação, adicione arquivos ao repositório
+
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]
git commit -a
+
  
 
vince@kalakuta
 
vince@kalakuta
  cp -a [gnawa] .
+
  $ cp -a [gnawa] .
  git annex add [gnawa]
+
  $ git annex add [gnawa]
git commit -a
+
  
 
ou então:
 
ou então:
  
  git annex import [nome do arquivo]
+
  $ git annex import [nome do arquivo]
  
== criando repositório de transporte ==
+
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
 
vince@kalakuta
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 ==
  
 
fernao@bartolina
 
fernao@bartolina
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 informação sobre repositórios e arquivos ==
+
== 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
 
  $ git annex status
Linha 87: Linha 120:
 
  trusted repositories: 0
 
  trusted repositories: 0
 
  semitrusted repositories: 6
 
  semitrusted repositories: 6
00000000-0000-0000-0000-000000000001 -- web
+
        00000000-0000-0000-0000-000000000001 -- web
0d02f634-b4eb-11e2-a308-5b2a12a056c9 -- pendrive-sync
+
        0d02f634-b4eb-11e2-a308-5b2a12a056c9 -- pendrive-sync
3565b218-b745-11e2-b6bf-3f1d4382aece
+
        3565b218-b745-11e2-b6bf-3f1d4382aece
7b9706b6-b4e7-11e2-a815-df29d94aea3b -- origin
+
        7b9706b6-b4e7-11e2-a815-df29d94aea3b -- origin
b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta
+
        b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta
ebb92320-b4e7-11e2-a761-3f407428bde8 -- here (bartolina)
+
        ebb92320-b4e7-11e2-a761-3f407428bde8 -- here (bartolina)
 
  untrusted repositories: 0
 
  untrusted repositories: 0
 
  dead repositories: 0
 
  dead repositories: 0
Linha 102: Linha 135:
 
  bloom filter size: 16 mebibytes (0% full)
 
  bloom filter size: 16 mebibytes (0% full)
 
  backend usage:  
 
  backend usage:  
SHA256: 74
+
        SHA256: 74
  
  
Linha 109: Linha 142:
 
  $ git annex whereis  
 
  $ git annex whereis  
 
  whereis musicas/musica_x.mp3)  
 
  whereis musicas/musica_x.mp3)  
  0d02f634-b4eb-11e2-a308-5b2a12a056c9 -- pendrive-sync
+
        0d02f634-b4eb-11e2-a308-5b2a12a056c9 -- pendrive-sync
  b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta
+
        b4debebe-b4e7-11e2-877b-736e379b6ff5 -- kalakuta
  ebb92320-b4e7-11e2-a761-3f407428bde8 -- here (bartolina)
+
        ebb92320-b4e7-11e2-a761-3f407428bde8 -- here (bartolina)
 
  ok
 
  ok
 
  whereis videos/Desenvolvimento_Web_com_Python_e_Django/Aula 9.avi (1 copy)  
 
  whereis videos/Desenvolvimento_Web_com_Python_e_Django/Aula 9.avi (1 copy)  
  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 ==
 +
 +
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)
 +
 +
 +
= 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

Conteúdo

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)


Referências

Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas
Rede Mocambos