NPDD/Baobáxia/Arquitetura
(→instalação do baobaxia na mucua dpadua) |
|||
(10 edições intermediárias de 2 usuários não apresentadas) | |||
Linha 1: | Linha 1: | ||
+ | = 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. | ||
+ | |||
+ | |||
+ | |||
+ | == Galáxias == | ||
+ | |||
+ | |||
+ | São grupos de mucuas definidos como universos de saberes. Por exemplo, o galáxia 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 galáxia. Assim, a mucua Abdias pode fazer parte do galáxia Rede Mocambos e também de um outro chamado Rota dos Baobás, por exemplo. Em cada galáxia, a mucua terá saberes específicos que pode não compartilhar em outros galáxias. | ||
+ | |||
+ | |||
+ | |||
+ | :'''Tecnicamente falando''', galáxia é 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 galáxia. Por exemplo, a mucua DPadua, também dentro do galáxia 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 (galáxia). 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 == | == Configuração do Repositório == | ||
+ | |||
# configuração da dpadua | # configuração da dpadua | ||
+ | |||
# mkdir /data/repositories | # mkdir /data/repositories | ||
+ | |||
# mkdir /data/repositories/mocambos | # mkdir /data/repositories/mocambos | ||
+ | |||
# adduser exu | # adduser exu | ||
+ | |||
# chown root:exu /data/repositiores/mocambos | # chown root:exu /data/repositiores/mocambos | ||
+ | |||
# chmod 775 root:exu /data/repositiores/mocambos | # chmod 775 root:exu /data/repositiores/mocambos | ||
+ | |||
# su exu | # su exu | ||
+ | |||
$ cd /data/repositories/mocambos | $ cd /data/repositories/mocambos | ||
+ | |||
$ git config --global user.name "Exu do BBX" | $ git config --global user.name "Exu do BBX" | ||
+ | |||
$ git config --global user.email exu@mocambos.org | $ git config --global user.email exu@mocambos.org | ||
+ | |||
$ git init . | $ git init . | ||
+ | |||
$ git annex init dpadua | $ git annex init dpadua | ||
+ | |||
# fazer no acotirene | # fazer no acotirene | ||
+ | |||
$ git clone --bare ssh://dpadua... | $ git clone --bare ssh://dpadua... | ||
+ | |||
$ git remote rm origin | $ git remote rm origin | ||
+ | |||
# no dpadua | # no dpadua | ||
+ | |||
$ cd /data/repositiores/mocambos | $ cd /data/repositiores/mocambos | ||
+ | |||
$ mkdir dpadua | $ mkdir dpadua | ||
+ | |||
$ mkdir dpadua/mocambolas | $ mkdir dpadua/mocambolas | ||
+ | |||
+ | |||
== django-bbx no debian com Gunicorn + Supervisord + Nginx == | == django-bbx no debian com Gunicorn + Supervisord + Nginx == | ||
+ | |||
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/ | http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/ | ||
+ | |||
== instalação do baobaxia na mucua dpadua == | == instalação do baobaxia na mucua dpadua == | ||
+ | |||
$ su exu | $ su exu | ||
+ | |||
$ cd /srv | $ cd /srv | ||
+ | |||
$ git clone http://github.com/RedeMocambos/baobaxia | $ git clone http://github.com/RedeMocambos/baobaxia | ||
+ | |||
$ cd baobaxia | $ cd baobaxia | ||
+ | |||
$ sudo su | $ sudo su | ||
+ | |||
# apt-get install pip-python | # apt-get install pip-python | ||
+ | |||
# pip install virtualenv | # pip install virtualenv | ||
+ | |||
# mkdir /srv/envs | # mkdir /srv/envs | ||
+ | |||
# chown root:exu /srv/envs | # chown root:exu /srv/envs | ||
+ | |||
# chmod 775 envs | # chmod 775 envs | ||
+ | |||
+ | |||
# sqlite | # sqlite | ||
+ | |||
criar virtualenv | criar virtualenv | ||
+ | |||
# su exu | # su exu | ||
+ | |||
$ cd /srv/envs | $ cd /srv/envs | ||
+ | |||
$ virtualenv bbx | $ virtualenv bbx | ||
+ | |||
$ source /srv/envs/bbx/bin/activate | $ source /srv/envs/bbx/bin/activate | ||
+ | |||
$ pip install -r /srv/baobaxia/app/django-bbx/requirements.txt | $ pip install -r /srv/baobaxia/app/django-bbx/requirements.txt | ||
+ | |||
configurar settings.py | configurar settings.py | ||
+ | |||
$ python manage.py syncdb - (primeira vez vai dar erro) | $ python manage.py syncdb - (primeira vez vai dar erro) | ||
+ | |||
+ | |||
criar conta de email admin do django | criar conta de email admin do django | ||
+ | |||
exu@[nomemucua].mocambos.net | exu@[nomemucua].mocambos.net | ||
+ | |||
email: exu@mocambos.org | email: exu@mocambos.org | ||
+ | |||
fixtures das mucuas: | fixtures das mucuas: | ||
+ | |||
$ python manage.py syncdb --no-input | $ python manage.py syncdb --no-input | ||
+ | |||
$ python manage.py migrate --all | $ 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 == | == 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. | 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: | Em especial o BBX faz uso dos grupos e das policias de "preferred content" como base de comunicação, dessa forma: | ||
+ | |||
=== Grupos === | === Grupos === | ||
+ | |||
{| class="wikitable" | {| class="wikitable" | ||
+ | |||
|- | |- | ||
+ | |||
! Grupo !! Numero de copias !! Notas | ! 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) | | 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. | | sync || 2 || Para garantis o transito dos conteudos, mantem o dado em pelo menos duas mucuas moveis. | ||
+ | |||
|- | |- | ||
+ | |||
| online || 1 || Disponibilidade para babilonia ;) | | online || 1 || Disponibilidade para babilonia ;) | ||
+ | |||
|} | |} | ||
+ | |||
=== Backend === | === Backend === | ||
+ | |||
Para identificar os arquivos no sistema temos o SHA / CHAVES que o git-annex gera. | Para identificar os arquivos no sistema temos o SHA / CHAVES que o git-annex gera. | ||
+ | |||
=== Middleware === | === Middleware === | ||
+ | |||
Temos dois entidades/objetos: | Temos dois entidades/objetos: | ||
+ | |||
* mucua | * mucua | ||
+ | |||
* media | * media | ||
+ | |||
* usuario | * usuario | ||
+ | |||
* repositorio (acervo, bruto, outras redes) | * repositorio (acervo, bruto, outras redes) | ||
+ | |||
* etiqueta | * etiqueta | ||
==== API / Rotas de acesso ==== | ==== API / Rotas de acesso ==== | ||
+ | |||
+ | |||
+ | <pre> | ||
+ | |||
+ | # 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 | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | |||
+ | ===== proposta 22/01/14 ===== | ||
+ | |||
+ | (ANTIGA) | ||
Nova proposta das rotas, padronizando no esquema REST (22/01/2014) | Nova proposta das rotas, padronizando no esquema REST (22/01/2014) | ||
+ | |||
<pre> | <pre> | ||
+ | |||
# sufixo de [localização] | # sufixo de [localização] | ||
+ | |||
/[repo]/[mucua] | /[repo]/[mucua] | ||
+ | |||
# mucua | # mucua | ||
+ | |||
/[repo]/[mucua]/mucua # get data from mucua | /[repo]/[mucua]/mucua # get data from mucua | ||
+ | |||
# mocambola | # mocambola | ||
+ | |||
/[repo]/[mucua]/mocambola/[user] {get} # get mocambola | /[repo]/[mucua]/mocambola/[user] {get} # get mocambola | ||
+ | |||
/[repo]/[mucua]/mocambola/[user] {put, delete} # update/delete mocambola | /[repo]/[mucua]/mocambola/[user] {put, delete} # update/delete mocambola | ||
+ | |||
# funcionalidades media | # funcionalidades media | ||
+ | |||
/[repo]/[mucua]/media {post} # insere media | /[repo]/[mucua]/media {post} # insere media | ||
+ | |||
/[repo]/[mucua]/media/[uuid] {get} # get media | /[repo]/[mucua]/media/[uuid] {get} # get media | ||
+ | |||
/[repo]/[mucua]/media/[uuid] {put, delete} # update/delete media | /[repo]/[mucua]/media/[uuid] {put, delete} # update/delete media | ||
+ | |||
/[repo]/[mucua]/media/last {get} # pega últimas medias adicionadas | /[repo]/[mucua]/media/last {get} # pega últimas medias adicionadas | ||
+ | |||
# funcionalidades bbx | # funcionalidades bbx | ||
+ | |||
/[repo]/[mucua]/bbx/[comando]/[args] | /[repo]/[mucua]/bbx/[comando]/[args] | ||
+ | |||
/[repo]/[mucua]/bbx/localsync # sync direto | /[repo]/[mucua]/bbx/localsync # sync direto | ||
+ | |||
/[repo]/[mucua]/bbx/netsync # sync net | /[repo]/[mucua]/bbx/netsync # sync net | ||
+ | |||
/[repo]/[mucua]/bbx/syncqueue # mostra lista de sync | /[repo]/[mucua]/bbx/syncqueue # mostra lista de sync | ||
+ | |||
/[repo]/[mucua]/bbx/init # inicializa mucua | /[repo]/[mucua]/bbx/init # inicializa mucua | ||
+ | |||
/[repo]/[mucua]/bbx/remote {post, put, delete) # add/update/del git remote | /[repo]/[mucua]/bbx/remote {post, put, delete) # add/update/del git remote | ||
+ | |||
/[repo]/[mucua]/bbx/viewmucuas {get} # lista mucuas | /[repo]/[mucua]/bbx/viewmucuas {get} # lista mucuas | ||
+ | |||
/[repo]/[mucua]/bbx/diffmucuas/:mucua2 {get} # diff mucuaatual/mucua2) | /[repo]/[mucua]/bbx/diffmucuas/:mucua2 {get} # diff mucuaatual/mucua2) | ||
+ | |||
# funcionalidades básicas para definição de escopo | # funcionalidades básicas para definição de escopo | ||
+ | |||
/repository/list # lista repositorios disponíveis | /repository/list # lista repositorios disponíveis | ||
+ | |||
/repository/* # get default repository | /repository/* # get default repository | ||
+ | |||
/[repo]/mucuas # get mucuas | /[repo]/mucuas # get mucuas | ||
+ | |||
/mucua/ # get default mucua | /mucua/ # get default mucua | ||
+ | |||
/mucua/list # get list of mucuas | /mucua/list # get list of mucuas | ||
+ | |||
# busca | # busca | ||
+ | |||
/[repo]/[mucua]/bbx/search/[arg1]/[arg2]/... # busca por args | /[repo]/[mucua]/bbx/search/[arg1]/[arg2]/... # busca por args | ||
+ | |||
# admin / usuário | # admin / usuário | ||
+ | |||
/[repo]/[mucua]/login | /[repo]/[mucua]/login | ||
+ | |||
/login | /login | ||
+ | |||
/logout | /logout | ||
+ | |||
/admin/[...] | /admin/[...] | ||
+ | |||
</pre> | </pre> | ||
+ | |||
==== API / Rotas de acesso (proposta anterior) ==== | ==== API / Rotas de acesso (proposta anterior) ==== | ||
+ | |||
Outra proposta sobre as rotas, simplificada, do ponto de vista da API: | Outra proposta sobre as rotas, simplificada, do ponto de vista da API: | ||
+ | |||
<pre> | <pre> | ||
+ | |||
# sufixo de [localização] | # sufixo de [localização] | ||
+ | |||
/[repo]/[nomemucua] # mucua | /[repo]/[nomemucua] # mucua | ||
+ | |||
/[repo]/local # alias para [mucua] | /[repo]/local # alias para [mucua] | ||
+ | |||
/[repo]/externo # mucuas externas | /[repo]/externo # mucuas externas | ||
+ | |||
/[repo]/rede # todas mucuas | /[repo]/rede # todas mucuas | ||
+ | |||
# funcionalidades media | # funcionalidades media | ||
+ | |||
/[repo]/[localizacao]/media {post} # insere media (media_detail) | /[repo]/[localizacao]/media {post} # insere media (media_detail) | ||
+ | |||
/[repo]/[localizacao]/media/[uuid] {get} # get media (media_list) | /[repo]/[localizacao]/media/[uuid] {get} # get media (media_list) | ||
+ | |||
/[repo]/[localizacao]/media/[uuid] {put, delete} # update/delete media (media_detail) | /[repo]/[localizacao]/media/[uuid] {put, delete} # update/delete media (media_detail) | ||
+ | |||
# funcionalidades bbx | # funcionalidades bbx | ||
+ | |||
/[repo]/[localizacao]/bbx/[comando]/[args] | /[repo]/[localizacao]/bbx/[comando]/[args] | ||
+ | |||
/[repo]/[localizacao]/bbx/localsync # sync direto | /[repo]/[localizacao]/bbx/localsync # sync direto | ||
+ | |||
/[repo]/[localizacao]/bbx/netsync # sync net | /[repo]/[localizacao]/bbx/netsync # sync net | ||
+ | |||
/[repo]/[localizacao]/bbx/syncqueue # mostra lista de sync | /[repo]/[localizacao]/bbx/syncqueue # mostra lista de sync | ||
+ | |||
/[repo]/[localizacao]/bbx/init # inicializa mucua | /[repo]/[localizacao]/bbx/init # inicializa mucua | ||
+ | |||
/[repo]/[localizacao]/bbx/remote {post, put, delete) # add/update/del git remote | /[repo]/[localizacao]/bbx/remote {post, put, delete) # add/update/del git remote | ||
+ | |||
/[repo]/[localizacao]/bbx/viewmucuas {get} # lista mucuas | /[repo]/[localizacao]/bbx/viewmucuas {get} # lista mucuas | ||
+ | |||
/[repo]/mucuaatual/bbx/diffmucuas/:mucua2 {get} # diff mucuaatual/mucua2) | /[repo]/mucuaatual/bbx/diffmucuas/:mucua2 {get} # diff mucuaatual/mucua2) | ||
+ | |||
# busca | # busca | ||
+ | |||
/[repo]/[localizacao]/bbx/search/[arg1]/[arg2]/... # busca por args | /[repo]/[localizacao]/bbx/search/[arg1]/[arg2]/... # busca por args | ||
+ | |||
# admin / usuário | # admin / usuário | ||
+ | |||
/[repo]/[localizacao]/login | /[repo]/[localizacao]/login | ||
+ | |||
/login | /login | ||
+ | |||
/logout | /logout | ||
+ | |||
/admin/[...] | /admin/[...] | ||
+ | |||
</pre> | </pre> | ||
+ | |||
==== Listagem anterior da API / Rotas ==== | ==== 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. | 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. | ||
+ | |||
<pre> | <pre> | ||
+ | |||
/[repositorio]/[mucua] | /[repositorio]/[mucua] | ||
+ | |||
/[repositorio]/local (alias pra mucua atual) | /[repositorio]/local (alias pra mucua atual) | ||
+ | |||
/[repositorio]/externo (alias para outras mucuas exceto atual) | /[repositorio]/externo (alias para outras mucuas exceto atual) | ||
+ | |||
/[repositorio]/rede (todos) | /[repositorio]/rede (todos) | ||
+ | |||
/[repositorio]/kalakuta | /[repositorio]/kalakuta | ||
+ | |||
/mocambos/local/ | /mocambos/local/ | ||
+ | |||
/[repositorio]/[mucua]/etiqueta1/etiqueta2/etiqueta3 | /[repositorio]/[mucua]/etiqueta1/etiqueta2/etiqueta3 | ||
+ | |||
/[repositorio]/[mucua]/mocambola1/etiqueta1 | /[repositorio]/[mucua]/mocambola1/etiqueta1 | ||
+ | |||
/[repositorio]/[mucua]/mocambola/mocambola1 | /[repositorio]/[mucua]/mocambola/mocambola1 | ||
+ | |||
/[repositorio]/[mucua]/mocambola/vince/etiqueta/documentário | /[repositorio]/[mucua]/mocambola/vince/etiqueta/documentário | ||
+ | |||
/[repositorio]/[mucua]/etiqueta/documentario/mocambola/vince | /[repositorio]/[mucua]/etiqueta/documentario/mocambola/vince | ||
+ | |||
/[repositorio]/[mucua]/etiqueta/:etiqueta/mocambola/:mocambola | /[repositorio]/[mucua]/etiqueta/:etiqueta/mocambola/:mocambola | ||
+ | |||
/[repositorio]/[mucua]/mocambola/:mocambola/etiqueta/:etiqueta | /[repositorio]/[mucua]/mocambola/:mocambola/etiqueta/:etiqueta | ||
+ | |||
/[repositorio]/[mucua]/etiqueta/:historia/:video | /[repositorio]/[mucua]/etiqueta/:historia/:video | ||
+ | |||
/mocambos/[mucua]/bbx/search/q=video&alcântara&encontro (busca geral em todos metadados) | /mocambos/[mucua]/bbx/search/q=video&alcântara&encontro (busca geral em todos metadados) | ||
+ | |||
/[repositorio]/[mucua]/media/:uuid -> getFile(uuid) {get} | /[repositorio]/[mucua]/media/:uuid -> getFile(uuid) {get} | ||
+ | |||
/[repositorio]/[mucua]/media/ {post,put,delete} -> publishFile() | /[repositorio]/[mucua]/media/ {post,put,delete} -> publishFile() | ||
+ | |||
/[repositorio]/[mucua]/media/cfb8e07e-49ab-489b-a4da-70ff8f715640 -> get(arquivo TAL - hash) | /[repositorio]/[mucua]/media/cfb8e07e-49ab-489b-a4da-70ff8f715640 -> get(arquivo TAL - hash) | ||
+ | |||
/mocambos/[mucua]/bbx/localsync {post} | /mocambos/[mucua]/bbx/localsync {post} | ||
+ | |||
/mocambos/[mucua]/bbx/netsync {post} | /mocambos/[mucua]/bbx/netsync {post} | ||
+ | |||
/mocambos/[mucua]/bbx/syncqueue {post} | /mocambos/[mucua]/bbx/syncqueue {post} | ||
+ | |||
/mocambos/[mucua]/bbx/init {post} | /mocambos/[mucua]/bbx/init {post} | ||
+ | |||
/mocambos/[mucua]/bbx/remote {post, put, delete) | /mocambos/[mucua]/bbx/remote {post, put, delete) | ||
+ | |||
/mocambos/[local]/bbx/viewmucuas {get} | /mocambos/[local]/bbx/viewmucuas {get} | ||
+ | |||
/mocambos/[externo]/bbx/viewmucuas {get} | /mocambos/[externo]/bbx/viewmucuas {get} | ||
+ | |||
/mocambos/[mucua]/bbx/diffmucuas/:mucua2 {get} (entre atual e mucua 2) | /mocambos/[mucua]/bbx/diffmucuas/:mucua2 {get} (entre atual e mucua 2) | ||
+ | |||
/mocambos/[mucua]/bbx/availability/:qtd {get} | /mocambos/[mucua]/bbx/availability/:qtd {get} | ||
+ | |||
/mocambos/taina/bbx/status {taina} -> infos da mucua taina | /mocambos/taina/bbx/status {taina} -> infos da mucua taina | ||
+ | |||
/mocambos/rede/bbx/status {rede} -> infos das mucuas | /mocambos/rede/bbx/status {rede} -> infos das mucuas | ||
+ | |||
</pre> | </pre> |
Edição atual tal como às 16h46min de 6 de outubro de 2024
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.
Galáxias
São grupos de mucuas definidos como universos de saberes. Por exemplo, o galáxia 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 galáxia. Assim, a mucua Abdias pode fazer parte do galáxia Rede Mocambos e também de um outro chamado Rota dos Baobás, por exemplo. Em cada galáxia, a mucua terá saberes específicos que pode não compartilhar em outros galáxias.
- Tecnicamente falando, galáxia é 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 galáxia. Por exemplo, a mucua DPadua, também dentro do galáxia 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 (galáxia). 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
- 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
- fazer no acotirene
$ git clone --bare ssh://dpadua...
$ git remote rm origin
- 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