Bug geral na PSN

ATENÇÃO: A falha do PS3 já foi corrigida. Foi um problema no relógio interno do sistema, que acabou sendo consertado naturalmente. Podem voltar a usar seus aparelhos normalmente. Entretando, isso não diminui o vacilo da Sony.

Desde ontem vários donos de PS3 estão com problemas para usar seu sistema. Ao que parece, eles não estão conseguindo sincronizar seus troféus, nem jogar online (em alguns casos, nem offline). Além disso, muitas pessoas relataram que os temas e outros dados do sistema foram corrompidos.

Estes problemas afetam apenas uma parcela dos usuários do modelo antigo do PS3, o fat. Por sorte, possuo um fat e não fui afetado pelo bug. Donos do PS3 slim podem ficar tranquilos. :-)

A causa ainda não foi oficialmente anunciada, mas rumores dizem que o problema é causado por um bug, conhecido como “leap year bug", no calendário do PS3. Aparentemente há uma incompatibilidade entre o PS3 fat, que está tentando colocar a data como "29/02/2010" e o sistema da PSN, que estaria usando "01/03/2010" como data.

De acordo com o twitter da Sony, ela já está ciente do problema e tentando consertá-lo:

"We're aware that many of you are having problems connecting to PSN, and yes, we're looking into it. Stay tuned for updates."

Há, também, um relato no blog do playstation:

We’re aware that many of you are having difficulty connecting to the PlayStation Network this evening. Those of you with “slim” PS3s (the 120/250 GB models) appear to be unaffected.

Know that we have narrowed down the issue and have engineers working to restore service even as you read this. We apologize for any inconvenience this may cause you, and genuinely appreciate your patience while we work to resolve this.

O engraçado dessa história é que até os desenvolvedores de jogos estão com problemas:

Various developers and studios are claiming that their debug PS3 units are failing from suspected internal-clock-related hardware errors.

A multitude of debug consoles – crucial to the development of current PS3 projects – have been thrown into a rebooting cycle, due to an endlessly-looping error message.

The issue comes as a separate issue is affecting retail PS3 consoles, though both problems are thought to be related.

Alguns usuários do fórum da Sony acabaram coletando algumas informações sobre os modelos afetados. Por enquanto a situação é essa:

  • CECHA01= Sem funcionar.
  • CECHE01 - Sem funcionar.
  • CECHG01 - Sem funcionar.
  • CECHH01 - Sem funcionar.
  • CECHK01- Sem funcionar.
  • CECHL01- Funcionando.
  • CECHP01 - Funcionando.

Para verificar o modelo do seu PS3 procure uma etiqueta branca no fundo do aparelho. Se você tem um modelo diferente dos citados acima, por favor, relate se foi afetado ou não.

UPDATES:

Assim que houver mais notícias eu atualizarei este post. Por enquanto recomendo ficar de olho nestes links:

Enquanto o problema não é consertado, divirta-se com o vídeo abaixo:

Hitler com problemas na PSN

Convertendo um repositório git para mercurial

Hoje eu precisei migrar um projeto do git para o mercurial. Achei que ia dar um trabalho enorme, mas , felizmente, o processo é bem simples. Segue um passo-a-passo rápido:

Para fazer a migração é preciso da extensão "convert" do mercurial, mas ela vem desabilitada por padrão. Para reverter isso adicione as seguintes linhas ao arquivo ~/.hgrc :

[extensions]
hgext.convert=

Agora para importar seu código faça:

$ hg convert seu-repositório-git

Exemplo:

$ hg convert ~/projetos/meu-git

Isso vai criar um novo diretório, chamado "meu-git-hg". Se preferir, você pode definir o diretório para onde o código será convertido. Para fazer isso basta rodar o comando dessa forma:

$ hg convert seu-repositório-git meu-novo-repositório-mercurial

Exemplo:

$ hg convert ~/projetos/meu-git ~/projetos/meu-hg

Ao tentar listar o conteúdo deste diretório você verá que ele está vazio. Para que seus arquivos originais apareçam neste é preciso fazer o seguinte:

$ cd meu-git-hg

$ hg checkout

Pronto! Seus arquivos aparecerão novamente e já estarão sob o mercurial. :-)

Maiores informações: http://mercurial.selenic.com/wiki/ConvertExtension

Script para sorteio de amigo secreto

As festas chegaram e, com elas, os amigos secretos. Para facilitar a vida dos sorteios segue um pequeno script que fiz ano passado. O script pega um lista de pessoas, sorteia e envia um email para cada uma com o nome do seu amigo secreto. Ele evita que uma pessoa pegue a si mesmo, ou alguém deixe de ser sorteado:

 
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Script para sorteio de amigo secreto
# Hugo Doria
 
from random import shuffle
import os
 
arquivo = open("amigos.txt","r")
 
pessoas = arquivo.readlines()
shuffle(pessoas)
 
for par in zip(pessoas, pessoas[1:] + pessoas [:1]):
  envia = os.popen("/usr/bin/mail -s '[sorteio] Seu amigo secreto é ...'" + par[0].replace("\n","").split("-")[1], "w")
  envia.write("Seu amigo secreto é .... \n\n\n" + par[1].replace("\n","").split("-")[0])
 
  envia.close()
  print par
 
arquivo.close()
 

Para rodar o script você só precisa do python e de um arquivo chamado amigos.txt, com o nome das pessoas dentro no formato Nome - email.

Exemplo:

Fulana - meu@email.com.br
Sicrana - sicrana@hotmail.com
Beltrana - com-cam@tal.com.br

Script para fazer balanceamento de links ADSL

Há algum tempo coloquei 2 links ADSL aqui em casa e criei o script abaixo para fazer o balanceamento entre eles. Hoje dei um geral no script e lembrei que nunca havia publicado ele por aqui. Então, lá vai:

#!/bin/bash
#
# Script para fazer o balanceamento de links ADSL
# Para adicionar mais um link é so adicionar um item
# às variaveis IFACES, IPS, GATEWAYS, NETWORKS,
# WEIGHTS e NAMES
#
# É extremamente importante manter a ordem dentro das
# variáveis. O primeiro campo da variável "IFACES"
# corresponde ao primeiro campo da variável "IPS"
# e por aí vai.
#
# Ultima modificacao:  22/11/2009
# Hugo Doria 
 
# Interfaces de rede
IFACES=("eth1" "eth2" "eth3")
 
# IP das interfaces de rede. Isto NÂO é o ip do modem.
# É extremamente importante que siga a mesma ordem das interfaces
# listadas na variável IFACES
IPS=("192.168.254.2" "192.168.254.10" "192.168.254.18")
 
# IP dos Gateways. Geralmente esse é o ip do Roteador ou do modem ADSL
GATEWAYS=("192.168.254.1" "192.168.254.9" "192.168.254.17")
 
# IP das redes que o modem e as interfaces pertencem
NETWORKS=("192.168.254.0/29" "192.168.254.8/29" "192.168.254.16/29")
 
# Peso de cada link. Se os links tiverem a mesma banda, entao deve-se
# colocar 1 para todos. Se um link for maior que outro, entao coloque
# os pesos correspondentes
WEIGHTS=("1" "1" "1")
 
# Nome dos links. Usado para criar um alias da conexão
NAMES=("velox1" "velox2" "velox3")
 
#-----------------------------------------------
# NÂO ALTERE A PARTIR DAQUI
#-----------------------------------------------
 
# Comando padrão de adicionar rota
ROUTEADD="ip route add default scope global"
 
# Comando para deletar uma roda
ROUTEDEL="`which route` del default gw"
 
####################################################
# Deletando as rotas
####################################################
 
for (( X=0; X < ${#IPS[@]}; X++ )); do
    echo "Deletando as rotas para ${IPS[$X]}"
    ${ROUTEDEL} ${IPS[$X]}
done
 
#######################################################
# Limpando as rotas
#######################################################
 
for (( X=0; X < ${#IPS[@]}; X++ )); do
    echo "Limpando as rotas da tabela ${NAMES[$X]}"
    ip route flush tables ${NAMES[$X]}
done
 
#######################################################
# Aplicando as regras das redes
#######################################################
 
for (( X=0; X < ${#IPS[@]}; X++ )); do
    echo "Aplicando a regra da rede ${NETWORKS[$X]}"
    ip route add ${NETWORKS[$X]} dev ${IFACES[$X]} src ${IPS[$X]} tables ${NAMES[$X]}
done
 
#######################################################
# Adicionando as regras
######################################################
 
for (( X=0; X < ${#IPS[@]}; X++ )); do
    echo "Adicionando a regra do ${IPS[$X]} na tabela ${NAMES[$X]}"
    ip rule add from ${IPS[$X]} table ${NAMES[$X]}
done
 
##########################################################
# Regra padrão e limpeza do cache
##########################################################
 
for (( X=0;X < ${#IPS[@]}; X++ )); do
    ROUTEADD="${ROUTEADD} nexthop via ${GATEWAYS[$X]} dev ${IFACES[$X]} weight ${WEIGHTS[$X]}"
done
 
echo "Adicionando a regra padrao"
${ROUTEADD}
 
echo "Limpando o cache"
ip route flush cache
# Fim do script

O script serve para mais de dois links ADSL. Para adicionar mais um link é so adicionar um item às variaveis IFACES, IPS, GATEWAYS, NETWORKS, WEIGHTS e NAMES. Lembre-se sempre de manter a ordem dos itens dentro das variáveis.

hntool – uma ferramenta de segurança para Unixes

Resolvi criar uma ferramenta para me ajudar a fazer hardening de servidores linux e facilitar a minha vida no trabalho. Assim nasceu o hntool (hardening tool), uma ferramenta escrita em python cujo objetivo é fazer uma análise simples do servidor e dizer quais as falhas de segurança que existem.

Todas as falhas são niveladas de acordo com risco que podem causar ao servidor. Falhas leves (low), médias (medium) e graves (high). Além destas categorias há mais duas: ok e info.

A ferramenta ainda está em um estágio bem inicial, mas resolvi compartilhá-la logo para ajudar aqueles que querem contribuir com algo e, claro, acelerar o desenvolvimento.

Algumas características:

  • Criei uma estrutura bem modular, baseando-me em outro projeto que mantenho: o namcap. Acredito que com essa estrutura fica muito mais fácil manter e contribuir com o projeto.
  • Não quero que o hntool realize nenhum hardening automaticamente. Quero apenas que ele me avise das falhas que existem. A decisão sobre o que (e como) fazer para consertar a falha cabe ao administrador do sistema.
  • A intenção é fazer com que o hntool sirva para qualquer distribuição, mas no momento eu só tenho testado no Arch Linux.

Usando o hntool

Para testar o hntool é fácil. Baixe-o daqui e descompacte-o. Depois é só entrar no diretório descompactado e rodar:

# python hntool.py

Sim, você só precisa do python.

Segue um exemplo do resultado do hntool (clique para ampliar):

hntool

Acho que deu para entender onde quero chegar, né?

Como contribuir

Você pode contribuir com o hntool de diversas formas: enviando código, patchs, reportando bugs e pedindo recursos. Tudo isso pode ser feito através do bug tracker do Google Code ou enviando um email para contato arroba hugodoria.org.

Todo o código do projeto está disponível no Google Code. Para baixá-lo e gerar seus patchs faça:

$ hg clone https://hntool.googlecode.com/hg/ hntool

$ cd hntool

(faça suas mudanças no código)

A ferramenta também está precisando de um ícone simples e bonito. Sou um zero à esquerda quando se trata de desenho e totalmente incapaz de fazer algo decente. Fica aí a dica. :P

Estrutura modular

Como falei, resolvi criar o hntool de forma modular. A estrutura de um modulo é, mais ou menos, assim:

import os
 
class rule:
	def short_name(self):
		return "ssh"
	def long_name(self):
		return "Checks security problems on sshd config file"
	def analyze(self):
		check_results = [[],[],[],[],[]]
		ssh_conf_file = ['/etc/ssh/sshd_config', '/etc/sshd_config']
 
		for sshd_conf in ssh_conf_file:
			if os.path.isfile(sshd_conf):
				fp = open(sshd_conf,'r')
				lines = [x.strip('\n') for x in fp.readlines()]
 
				# Checking if SSH is using the default port
				if 'Port 22' in lines or '#Port 22' in lines:
					check_results[1].append('SSH is using the default port')
				else:
					check_results[0].append('SSH is not using the default port')				
 
				# Closing the sshd_config file
				fp.close()
 
		return check_results
	def type(self):
		return "config"

Explicando melhor:

  • short_name(self): Uma string contendo o nome curto do modulo. Ele será usado, por exemplo, na hora de listar todos os módulos existentes (hntool -l).
  • long_name(self) : Aqui é a descrição do módulo. Também será mostrada na listagem dos módulos.
  • analyze(self): É aqui que fica o código de verdade. O resultado desse método deve ser sempre uma lista com 5 elementos, que correspondem aos níveis de segurança encontrados - ok, info, low, medium e high, respectivamente.
  • type(self): Cada módulo será de um tipo. "files" para módulos que lidam com arquivos de texto simples(/etc/passwd, por exemplo) ou de configuração. "services" para módulos que lidam com serviços.

Há, também, um arquivo README explicando mais detalhes sobre o hntool. Obviamente, ele será melhorado com o tempo.

Bem, pessoal. É isso. Estarei sempre postando novidades desse projeto à partir de agora. :)

Page 1 of 512345»