NPDD/Baobáxia/Arquitetura

De Rede Mocambos
Ir para: navegação, pesquisa

Conteúdo

Conceitos gerais

Baobáxia pode ser compreendida como uma plataforma de compartilhamento de saberes de comunidades dentro de uma rota de confiança.

Este artigo apresenta os principais conceitos da Baobáxia, tanto do ponto de vista de usuáries quando do ponto de vista técnico.


Tecnicamente falando, Baobáxia é uma aplicação desenvolvida em Python que gerencia repositórios Git de forma descentralizada, distribuindo conteúdo entre instâncias a partir da criação de rotas de confiança, atuando de forma descentralizada, federada e rizomática.


Saberes

São conhecimentos da comunidade representados dentro da plataforma, como seu acervo cultural ou um artigo escrito por seus integrantes. Um saber pode conter em si informações, arquivos e até mesmo outros saberes.


Tecnicamente falando, Saber se apresenta como uma pasta e um arquivo de metadados (chamado de ".baobaxia") em formato JSON. O arquivo de metadados contém informações gerais de identificação e específicas de acordo com o tipo de saber. Por exemplo, se o saber é um item de um acervo cultural, precisará de título, descrição, conjunto de tags e outras informações que facilitem sua organização. Dentro da pasta do saber também podem ser armazenados arquivos anexos (gerenciados pelo git-annex), como a mídia correspondente ao item de acervo, no exemplo anterior. A pasta também pode conter arquivos de hipertexto, por exemplo, se o saber é um artigo, com o conteúdo do artigo. Pode haver ali também outros saberes criando uma relação de composição.


Mucuas

São as unidades que compõe a Baobáxia, as instâncias que rodam a plataforma e nas quais usuáries conectam-se para acessar a rede. Podem ser compreendidas como parte de um território digital. Além de acessar e gerenciar saberes da pŕopria comunidade, as mucuas também refletem os saberes de outras mucuas.


Tecnicamente falando, Mucua pode ser compreendida tanto como uma instância da Baobáxia rodando em uma infraestrutura de rede quanto como conjunto de dados tutelados através daquela instância. A mucua é também um saber, tendo sua pasta específico com o arquivo de metadados e os saberes que constituem aquele conjunto de dados.


Balaios

São grupos de mucuas definidos como universos de saberes. Por exemplo, o balaio chamado Rede Mocambos pode agregar mucuas das diversas comunidades envolvidas na luta desta rede. Além disso, uma mucua pode participar de mais do que um balaio. Assim, a mucua Abdias pode fazer parte do balaio Rede Mocambos e também de um outro chamado Rota dos Baobás, por exemplo. Em cada balaio, a mucua terá saberes específicos que pode não compartilhar em outros balaios.


Tecnicamente falando, Balaio é um repositório git + git-annex compartilhado entre um grupo de instâncias. Também são saberes e portanto possuem metadados em uma pasta (a pasta do repositório) onde estarão as pastas das mucuas. Dessa forma, cada mucua tem sua pasta específica dentro do repositório.


Rotas

São conexões entre mucuas de um mesmo balaio. Por exemplo, a mucua DPadua, também dentro do balaio Rede Mocambos, possui uma rota para a mucua Abdias. Desta forma, a mucua DPadua pode conectar a mucua Abdias para fazer a troca de saberes. A partir daí, Abdias e DPadua passam a compartilhar saberes uma da outra. Assim, se houver uma rota de Abdias para a mucua Oyá, esta última poderá receber o conteúdo de DPádua, mesmo sem que haja uma rota direta entre as duas.


Tecnicamente falando, Rotas são conexões SSH previamente autorizadas por chave pública que são criadas para fazer a sincronização (pull e push) entre instâncias do mesmo repositório (balaio). A mucua que possui a rota (autorização e dados de conexão) conecta outra mucua e faz as operações, de modo que a segunda mucua não precisa conhecer aquela rota ou estar autorizada para conectar a primeira mucua.


Documentação antiga

Configuração do Repositório

  1. configuração da dpadua
# mkdir /data/repositories
# mkdir /data/repositories/mocambos
# adduser exu
# chown root:exu /data/repositiores/mocambos
# chmod 775 root:exu /data/repositiores/mocambos
# su exu
$ cd /data/repositories/mocambos
$ git config --global user.name "Exu do BBX"
$ git config --global user.email exu@mocambos.org
$ git init .
$ git annex init dpadua
  1. fazer no acotirene
$ git clone --bare ssh://dpadua...
$ git remote rm origin
  1. no dpadua
$ cd  /data/repositiores/mocambos
$ mkdir dpadua
$ mkdir dpadua/mocambolas

django-bbx no debian com Gunicorn + Supervisord + Nginx

http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/

instalação do baobaxia na mucua dpadua

$ su exu
$ cd /srv
$ git clone http://github.com/RedeMocambos/baobaxia
$ cd baobaxia
$ sudo su
# apt-get install pip-python
# pip install virtualenv
# mkdir /srv/envs
# chown root:exu /srv/envs 
# chmod 775 envs

# sqlite

criar virtualenv

# su exu
$ cd /srv/envs
$ virtualenv bbx
$ source /srv/envs/bbx/bin/activate
$ pip install -r /srv/baobaxia/app/django-bbx/requirements.txt

configurar settings.py

$ python manage.py syncdb - (primeira vez vai dar erro)
 

criar conta de email admin do django

exu@[nomemucua].mocambos.net
email: exu@mocambos.org

fixtures das mucuas:

$ python manage.py syncdb --no-input
$ python manage.py migrate --all

Gunicorn

# chmod +x /srv/baobaxia/app/django-bbx/bin/guinicorn_start.sh
#  

Nginx

# apt-get install nginx

Supervisor

# apt-get install supervisor

Sincronização

O git-annex implementa umas serie de funcionalidades que podem ser reaproveitadas para a logica de sincronização e triagem dos conteúdos.

Em especial o BBX faz uso dos grupos e das policias de "preferred content" como base de comunicação, dessa forma:

Grupos

Grupo Numero de copias Notas
nucleo 3 Cada conteudo è disponivel por padrao em 3 mucuas (as mais proximas por conexão seja fisica ou internet)
sync 2 Para garantis o transito dos conteudos, mantem o dado em pelo menos duas mucuas moveis.
online 1 Disponibilidade para babilonia ;)

Backend

Para identificar os arquivos no sistema temos o SHA / CHAVES que o git-annex gera.

Middleware

Temos dois entidades/objetos:

  • mucua
  • media
  • usuario
  • repositorio (acervo, bruto, outras redes)
  • etiqueta

API / Rotas de acesso

# autenticacao
/login
/[repo]/[mucua]/login
/logout
/[repo]/[mucua]/logout
/register
/[repo]/[mucua]/register
/lost_password
/[repo]/[mucua]/lost_password

# mocambola
/[repo]/[mucua]/mocambola/[user] {get}          # get mocambola  (profile)
/[repo]/[mucua]/mocambola/[user] {put, delete}  # update/delete mocambola   (edit)

# mucua
/[repo]/[mucua] {get}                           # home da mucua
/[repo]/[mucua] {put}                           # atualiza
/[repo]/[mucua]/info                            # ver + infos sobre a mucua
/[repo]/[mucua]/requests                        # ver requisições da mucua
/[repo]/[mucua]/addgroup/[groupname]                 # add mucua to [groupname]
/[repo]/[mucua]/delgroup/[groupname]                 # remove mucua from [groupname]
/[repo]/[mucua]/getgroups (sem t:)  - todos os grupos da mucua
/[repo]/[mucua]/getterritory (somente t:)  - todos os territórios da mucua
/mucua/                                # get default mucua
/mucua/list                            # get list of mucuas

# home da rede
/rede
/rede/info

# funcionalidades media
/[repo]/[mucua]/media {post}                # insere media
/[repo]/[mucua]/media/[uuid] {get}          # get media
/[repo]/[mucua]/media/[uuid] {put, delete}  # update/delete media
/[repo]/[mucua]/media/last {get}                # pega últimas medias adicionadas
/[repo]/[mucua]/media/[uuid]/url            # pega url (web/api) do arquivo
/[repo]/[mucua]/media/[uuid]/[width]x[height].[format]       # get image of media
/[repo]/[mucua]/media/[uuid]/related          # get related media to [uuid]


# funcionalidades básicas para definição de escopo
/repository/list                          # lista repositorios disponíveis (buggy)
/repository/*                          # get default repository
/[repository]/mucuas                         # get mucuas
/[repo]/getterritories - todos os territórios dentro do repositório atual
/[repo]/getgroups - todos os grupos dentro do repositório atual


# busca
/[repo]/[mucua]/bbx/search/[arg1]/[arg2]/.../[sortby]/[sort1]/[asc|desc]/[sort2].../[limit]/[num]/[offset]  # busca por args
proposta 22/01/14
(ANTIGA)

Nova proposta das rotas, padronizando no esquema REST (22/01/2014)


# sufixo de [localização]
/[repo]/[mucua]

# mucua
/[repo]/[mucua]/mucua                 # get data from mucua

# mocambola
/[repo]/[mucua]/mocambola/[user] {get}          # get mocambola
/[repo]/[mucua]/mocambola/[user] {put, delete}  # update/delete mocambola 

# funcionalidades media
/[repo]/[mucua]/media {post}                # insere media
/[repo]/[mucua]/media/[uuid] {get}          # get media
/[repo]/[mucua]/media/[uuid] {put, delete}  # update/delete media
/[repo]/[mucua]/media/last {get}                # pega últimas medias adicionadas

# funcionalidades bbx
/[repo]/[mucua]/bbx/[comando]/[args]
/[repo]/[mucua]/bbx/localsync          # sync direto
/[repo]/[mucua]/bbx/netsync            # sync net
/[repo]/[mucua]/bbx/syncqueue          # mostra lista de sync
/[repo]/[mucua]/bbx/init               # inicializa mucua
/[repo]/[mucua]/bbx/remote {post, put, delete)   # add/update/del git remote
/[repo]/[mucua]/bbx/viewmucuas  {get}            # lista mucuas
/[repo]/[mucua]/bbx/diffmucuas/:mucua2 {get}     # diff mucuaatual/mucua2)

# funcionalidades básicas para definição de escopo
/repository/list                          # lista repositorios disponíveis
/repository/*                          # get default repository
/[repo]/mucuas                         # get mucuas

/mucua/                                # get default mucua
/mucua/list                            # get list of mucuas

# busca
/[repo]/[mucua]/bbx/search/[arg1]/[arg2]/...  # busca por args

# admin / usuário
/[repo]/[mucua]/login
/login
/logout
/admin/[...]

API / Rotas de acesso (proposta anterior)

Outra proposta sobre as rotas, simplificada, do ponto de vista da API:


# sufixo de [localização]
/[repo]/[nomemucua]     # mucua
/[repo]/local           # alias para [mucua]
/[repo]/externo         # mucuas externas
/[repo]/rede            # todas mucuas

# funcionalidades media
/[repo]/[localizacao]/media {post}                # insere media  (media_detail)
/[repo]/[localizacao]/media/[uuid] {get}          # get media     (media_list)
/[repo]/[localizacao]/media/[uuid] {put, delete}  # update/delete media   (media_detail)

# funcionalidades bbx
/[repo]/[localizacao]/bbx/[comando]/[args]
/[repo]/[localizacao]/bbx/localsync          # sync direto
/[repo]/[localizacao]/bbx/netsync            # sync net
/[repo]/[localizacao]/bbx/syncqueue          # mostra lista de sync
/[repo]/[localizacao]/bbx/init               # inicializa mucua
/[repo]/[localizacao]/bbx/remote {post, put, delete)   # add/update/del git remote
/[repo]/[localizacao]/bbx/viewmucuas  {get}            # lista mucuas
/[repo]/mucuaatual/bbx/diffmucuas/:mucua2 {get}     # diff mucuaatual/mucua2)

# busca
/[repo]/[localizacao]/bbx/search/[arg1]/[arg2]/...  # busca por args

# admin / usuário
/[repo]/[localizacao]/login
/login
/logout
/admin/[...]

Listagem anterior da API / Rotas

Abaixo, listamos um rascunho dos links de acesso a fucionalidades. O texto abaixo é um exercício de listar caminhos, acesso a funções e variáveis.

/[repositorio]/[mucua] 
/[repositorio]/local (alias pra mucua atual)
/[repositorio]/externo (alias para outras mucuas exceto atual)
/[repositorio]/rede (todos)
/[repositorio]/kalakuta
/mocambos/local/

/[repositorio]/[mucua]/etiqueta1/etiqueta2/etiqueta3
/[repositorio]/[mucua]/mocambola1/etiqueta1
/[repositorio]/[mucua]/mocambola/mocambola1
/[repositorio]/[mucua]/mocambola/vince/etiqueta/documentário
/[repositorio]/[mucua]/etiqueta/documentario/mocambola/vince
/[repositorio]/[mucua]/etiqueta/:etiqueta/mocambola/:mocambola
/[repositorio]/[mucua]/mocambola/:mocambola/etiqueta/:etiqueta
/[repositorio]/[mucua]/etiqueta/:historia/:video
/mocambos/[mucua]/bbx/search/q=video&alcântara&encontro (busca geral em todos metadados)


/[repositorio]/[mucua]/media/:uuid  -> getFile(uuid) {get}
/[repositorio]/[mucua]/media/ {post,put,delete}  -> publishFile()
/[repositorio]/[mucua]/media/cfb8e07e-49ab-489b-a4da-70ff8f715640 -> get(arquivo TAL - hash)


/mocambos/[mucua]/bbx/localsync {post}
/mocambos/[mucua]/bbx/netsync {post}
/mocambos/[mucua]/bbx/syncqueue {post}
/mocambos/[mucua]/bbx/init {post}
/mocambos/[mucua]/bbx/remote {post, put, delete)
/mocambos/[local]/bbx/viewmucuas  {get}
/mocambos/[externo]/bbx/viewmucuas  {get}
/mocambos/[mucua]/bbx/diffmucuas/:mucua2 {get}  (entre atual e mucua 2)

/mocambos/[mucua]/bbx/availability/:qtd {get}

/mocambos/taina/bbx/status  {taina}  -> infos da mucua taina
/mocambos/rede/bbx/status  {rede} -> infos das mucuas
Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas
Rede Mocambos