Posts filed under 'Archlinux'
Hospedando repositórios git com gitosis em um servidor Arch Linux
Ontem resolvi me propor novos desafios e criar um repositório git dentro do meu servidor para projetos pessoais. Antes, eu somente era um usuário da ferramenta, e para montar tal repositório, fui buscar informações com quem havia me dado algumas dicas no início: visitem a wiki do nofxx. Além de algumas explicações e configurações rápidas para o aprendizado da linguagem, também há um screencast muito interessante.
Depois de procurar sobre informações na internet, ele me indicou a gitosis. Uma ferramenta para hospedar repositórios git. Sendo assim, achei alguns artigos que me fizeram ter uma ou outra dor de cabeça, e eis que resolvi escrever o meu.
Instalando a gitosis
Antes de mais nada, faz-se necessária a instalação do git (obviamente) e da python (para instalar a gitosis). Para os dois há pacotes prontos no repositório oficial extra. Utilizando o pacman:
# pacman -S git python
Já com os programas instalados, é preciso criar um novo usuário onde vão residir os arquivos hospedados em disco. Para tal criei um usuário denominado git:
# adduser
Obs: Atenção na hora de criar o usuário, o mesmo pode ter qualquer nome, porém não será possível realizar acesso ao mesmo através do ssh mais tarde, somente acesso físico. Ou seja, uma vez os repositórios criados, o gitosis bloqueia o ssh do usuário para somente acesso via git.
Com o novo usuário já logado, baixe a gitosis através do repositório:
$ cd
$ git clone git://eagain.net/gitosis.git
Para instalá-la, execute o seguinte procedimento:
$ cd gitosis
# python setup.py install
A instalação da gitosis irá criar um repositório inicial na pasta ~/repositories/gitosis-admin.git.
Volte ao seu computador. Caso não haja uma chave de ssh pública ainda, crie uma através do comando:
$ ssh-keygen -t rsa
A chave pública criada geralmente fica em ~/.ssh/id_rsa.pub, utilize o scp para copiar o arquivo para o servidor:
$ scp ~/.ssh/id_rsa.pub git@ENDERECO_DO_SEU_SERVIDOR:/tmp
Obs: Note que git é o nome do usuário criado no servidor anteriormente.
Voltando para o servidor, inicie o servidor da gitosis com a chave copiada e altere a permissão do arquivo post-update:
$ gitosis-init < /tmp/id_rsa.pub
$ chmod 755 ~/repositories/gitosis-admin.git/hooks/post-update
Agora, no seu computador, clone o repositório da gitosis para manipulação do servidor criado:
$ mkdir ~/projects
$ cd ~/projects
$ git clone git@ENDERECO_DO_SEU_SERVIDOR:gitosis-admin.git
Adicionando um novo repositório
Toda manipulação dos repositórios controlados pela gitosis se faz através do arquivo gitosis.conf, encontrado dentro do repositório clonado. Para criar um novo repositório, adicione o seguinte conteúdo ao arquivo gitosis.conf:
$ emacs ~/projects/gitosis-admin/gitosis.conf
[group nome_do_projeto]
writable = nome_do_projeto
members = usuario_do_seu_computador
Obs: não esqueça de apertar <ENTER> ao terminar a linha members.
Obs2: para encontrar encontrar qual conteúdo correto para utilizar na variável usuario_do_seu_computador procure no final da chave pública gerada anteriormente. Por exemplo, usuario@archlinux.
Com o arquivo editado, crie um commit para o mesmo:
$ git commit -a -m "Adicionando permissão ao usuário usuoario_do_seu_computador para o projeto nome_do_projeto."
E logo após de um push para o repositório no seu servidor:
$ git push
Logo em seguida, crie um repositório local para o novo projeto:
$ mkdir ~/projects/new_project
$ cd ~/projects/new_project
$ git init
$ git remote add origin git@ENDERECO_DO_SEU_COMPUTADOR:new_project.git
Então crie algum conteúdo, um commit e faça o push inicial.
$ touch README.txt
$ git add README.txt
$ git commit -m "Criando o repositório"
$ git push origin master:refs/heads/master
Obs: caso ocorra algum erro, preste atenção nas chaves públicas utilizadas e nos dados no arquvio gitosis.conf.
Adicionando novos usuários
O processo pra adicionar novos usuários aos repositórios controlados pela gitosis é bem fácil. Basta copiar os arquivos de chaves públicas dos mesmos para a pasta keydir do repositório renomeando para o nome de usuário e host aos quais os arquivos pertencerem. Segue um exemplo:
Usuário lhe manda o arquivo id_rsa.pub como usuario_pog@computer_do_pog, para achar esses detalhes basta ler o final do arquivo com o cat:
$ cat id_rsa.pub
Sendo assim, faz-se necessário copiar o arquivo para a pasta com o nome alterado:
$ cp id_rsa.pub ~/projects/gitosis/keys/usuario_pog@computer_do_pog
Depois é só adicionar o arquivo a um novo commit e realizar o push do mesmo:
$ cd ~/projects/gitosis/
$ git add keys/usuario_pog@computer_do_pog
$ git push
Pronto, o novo usuário já poderá acessar o repositório permitido no arquivo gitosis.conf.
DICA
Caso você tenha trocado sua porta do ssh, edite o arquivo ~/.ssh/config:
$ emacs ~/.ssh/config
host nome_do_computador
HostName 127.0.0.1
port numero_da_porta
Com essas modificações basta acessar usuario_do_computador@nome_do_computador, não precisando digitar o endereço IP do mesmo.
DICA 2
Adicione o branch master ao arquivo .git/config do repositório do novo projeto:
$ emacs ~/projects/new_project/.git/config
[branch "master"]
remote = origin
merge = refs/heads/master
Realizando esta operação para os branchs não é necessário indicar qual você gostaria de atualizar ao executar o comando git pull.
Add comment Março 4, 2009
Corrigindo bug do hal 0.5.11 no Arch Linux
Algum tempo depois de atualizar o pacote hal do Archlinux para a versão 0.5.11 notei que os meus pendrives não estavam mais montando automaticamente, sem nem pestanejar eu comecei a utilizar o autofs novamente enquanto precisava acessar os drivers. Porém, ontem anoite, um amigo meu que utiliza o XFCE veio me perguntando se eu já havia me deparado com tal problema, e, em seguida, já me deu a solução, eu a apliquei aqui e então estou postando para não esquecer.
Na realidade você precisará editar o arquivo:
# emacs /etc/PolicyKit/PolicyKit.conf
E adicione o seguinte conteúdo:
<config version="0.1">
<match action="org.freedesktop.hal.storage.mount-removable">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.power-management.shutdown">
<return result="yes"/>
</match>
<match action="org.freedesktop.hal.power-management.reboot">
<return result="yes"/>
</match>
</config>
Note que as tags </config> já existirão no seu arquivo PolicyKit.conf.
Logo após, faz-se necessário reiniciar as daemons:
# /etc/rc.d/fam stop
# /etc/rc.d/hal stop
# /etc/rc.d/dbus restart
# /etc/rc.d/hal start
# /etc/rc.d/fam start
E agora tudo estará funcionando perfeitamente.
5 comments Fevereiro 14, 2009
Configurando o RTorrent com Screen no Arch Linux
Já faz algum tempo, quando o Azureus virou Vuze, que ando evitando o mesmo por gastar muita memória ram. Desde então venho testando vários e vários clientes de torrent no meu Archlinux.
Por causa de alguns problemas, em sua maior parte, sem tempo para configurações textuais minimalistas, terminei utilizando Kde durante o kde 4.1, e esqueci dos programas de baixo consumo de recursos.
Até então utilizando o Deluge como cliente oficial de torrents, pois não consumia tanta memória quanto o Azureus, na realidade metade, e ainda assim tinha boas configurações.
Porém, ocorreu uma queda de energia em casa e o deluge perdeu seus arquivos de status, e simplesmente bugou, perdendo todas as informações sobre os meus torrents ativos.
Sendo assim, resolvi procurar outra solução para o meu problema, e então testei o rtorrent. Eu já havia ouvido sobre o mesmo a não muito tempo atrás, porém, com a ideologia do Kde todo pronto, nunca havia parado para testá-lo.
Vamos configurar o RTorrent para trabalhar em background através do Screen.
Instalando:
Como sempre, utilize o pacman:
# pacman -Sy screen rtorrent
Configurando:
As configuração são realizadas através dos arquivos ~/.screenrc e ~/.rtorrent.rc, Screen e RTorrent respectivamente. Os arquivos de configuração são auto explicativos. Eu não alterei absolutamente nenhuma configuração do Screen e somente algumas no RTorrent, segue o meu ~/.rtorrent.rc
~/.rtorrent.rc
# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.
# Maximum and minimum number of peers to connect to per torrent.
#min_peers = 40
#max_peers = 100
# Same as above but for seeding completed torrents (-1 = same as downloading)
#min_peers_seed = 10
#max_peers_seed = 50
# Maximum number of simultanious uploads per torrent.
max_uploads = 4
# Global upload and download rate in KiB. "0" for unlimited.
download_rate = 0
upload_rate = 22
# Default directory to save the downloaded torrents.
directory = ~/torrents/
# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = ~/torrents/.session/
# Watch a directory for new torrents, and stop those that have been
# deleted.
schedule = watch_directory,5,5,load_start=~/torrents/watch/*.torrent
schedule = untied_directory,5,5,stop_untied=
# Close torrents when diskspace is low.
schedule = low_diskspace,5,60,close_low_diskspace=1200M
# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
#schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"
# The ip address reported to the tracker.
#ip = 127.0.0.1
#ip = rakshasa.no
# The ip address the listening socket and outgoing connections is
# bound to.
#bind = 127.0.0.1
#bind = rakshasa.no
# Port range to use for listening.
port_range = 6890-6999
# Start opening ports at a random position within the port range.
port_random = no
# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
check_hash = yes
# Set whetever the client should try to connect to UDP trackers.
use_udp_trackers = yes
# Alternative calls to bind and ip that should handle dynamic ip's.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa
# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
#
# encryption = allow_incoming,enable_retry,prefer_plaintext
encryption = allow_incoming,try_outgoing,enable_retry
# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
# The default is "off". For DHT to work, a session directory must be defined.
#
# dht = no
# UDP port to use for DHT.
#
# dht_port = 6881
# Enable peer exchange (for torrents not marked private)
#
peer_exchange = yes
#
# Do not modify the following parameters unless you know what you're doing.
#
# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
#hash_read_ahead = 10
# Interval between attempts to check the hash, in milliseconds.
#hash_interval = 100
# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#hash_max_tries = 10
Depois precisaremos criar as pastas indicadas no arquivo:
$ mkdir ~/torrents
$ mkdir ~/torrents/watch
$ mkdir ~/torrents/.session/
Utilizando:
Para utilizar o RTorrent através do Screen é muito fácil. Abra seu terminal e digite:
$ screen
Isso fara com que uma sessão do screen seja aberta, agora chame o RTorrent dentro da sessão aberta:
$ rtorrent
E o RTorrent já estará carregado dentro do screen.
Para sair do screen e manter o RTorrent aberto faça a combinação de teclas:
Ctrl + A, solte as duas e em seguida tecle D.
O Screen será “detached” e continuará rodando o RTorrent em background. Para retornar a sessão do Screen basta digitar o comando:
$ screen -r
Para fechar o RTorrent digite a combinação de teclas:
Ctrl + q
Para fechar o Screen primeiramente feche o RTorrent e logo em seguida digite:
$ exit
Para adicionar torrents há várias maneiras, porém eu me utilizo simplesmente da pasta watch que criamos. Para tal basta mover o arquivo.torrent para dentro dela:
$ mv arquivo.torrent ~/torrents/watch/
Para remover os torrents, adivinhem, basta remover ou mover o arquivo.torrent da pasta watch:
$ rm ~/torrents/watch/arquivo.torrent
ou
$ mv ~/torrents/watch/arquivo.torrent ~/
Para maiores informações de como utilizar os comandos internos do RTorrent acesse o manual do usuário do mesmo.
Como nota final, o RTorrent e o Screen mais todas as bibliotecas necessárias para o seu funcionamento ocupam singelos 15 Megabyes de memória ram.
Até a próxima.
1 comment Fevereiro 6, 2009
Corrigindo problemas do Xorg 7.4 no Arch Linux
Este é o primeiro post que eu faço diretamente od painel do wordpress no blog, então provavelmente vou escrever menos…
A mais ou menos uns 2 dias atrás o Arch Linux atualizou seu servidor Xorg para a versão 1.5.2 causando vários problemas para algumas pessoas e eu não escapei dos mesmos.
Em meu sistema eu não deixo hal e dbus funcionando por não necessitar de nada, pois uso o autofs para montar e desmontar meus dispositivos externos, mas como agora o xorg detecta mouse e teclado por eles, eu simplesmente fiquei sem mouse e teclado quando iniciei meu X, sendo assim precisei fazer algumas alterações no meu arquivo de configuração:
# emacs /etc/X11/xorg.conf
E adicione as seguintes linhas:
Section "ServerFlags"
Option "AutoAddDevices" "False"
EndSection
E reiniciando o X eu já tinha meu mouse teclados funcionando, mas a pior guerra ainda estava por vir, meu monitor ainda estava rodando somente em 60Hz, quase fiquei cego, por 2 dias, foi quando resolvi explicitar o modo como o X subiria nele.
Primeiramente procurei na internet as frenquências vertical e horizontal do monitor e adicionei-as na sessão correta:
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 30-61
VertRefresh 50-120
EndSection
E o problema continuava, foi quando meu amigo Thaigo (killown) resolveu me passar uma linha de Modline que configuraria o X para funcionar direto no monitor. Ficando a sessão monitor deste jeito:
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 30-61
VertRefresh 50-120
ModeLine "1024x768 " 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
EndSection
Pronto, foi só reiniciar o X e tudo estava perfeito.
Para maiores dúvidas vai aí a configuração do meu xorg.conf. Mas atenção! Lembrem-se de alterar as taxas para a correspondente aos seus monitores.
$ cat /etc/X11/xorg.conf
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "ServerFlags"
Option "AutoAddDevices" "False"
EndSection
Section "Files"
# RgbPath "/usr/share/X11/rgb"
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/misc"
FontPath "/usr/share/fonts/100dpi:unscaled"
FontPath "/usr/share/fonts/75dpi:unscaled"
FontPath "/usr/share/fonts/TTF"
FontPath "/usr/share/fonts/Type1"
EndSection
Section "Module"
Load "extmod"
Load "xtrap"
# Load "record"
Load "GLcore"
Load "dri"
Load "glx"
Load "dbe"
Load "freetype"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "abnt2"
Option "XkbLayout" "br"
Option "XkbVariant" ""
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
HorizSync 30-61
VertRefresh 50-120
ModeLine "1024x768 " 78.8 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
EndSection
Section "Device"
### Available Driver options are:-
### Values: : integer, : float, : "True"/"False",
### : "String", : " Hz/kHz/MHz"
### [arg]: arg optional
#Option "NoAccel" # []
#Option "SWcursor" # []
#Option "ColorKey" #
#Option "CacheLines" #
#Option "Dac6Bit" # []
#Option "DRI" # []
#Option "NoDDC" # []
#Option "ShowCache" # []
#Option "XvMCSurfaces" #
#Option "PageFlip" # []
Identifier "Card0"
Driver "intel"
VendorName "Intel Corporation"
BoardName "82946GZ/GL Integrated Graphics Controller"
BusID "PCI:0:2:0"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 1
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 4
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 8
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 15
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 16
EndSubSection
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection
Até.
Add comment Dezembro 4, 2008