viernes, 18 de diciembre de 2009

Contador antes del fin del mundo.... perl Tk

#!/usr/local/bin/perl -w
#####################################
# Contador para el fin del mundo
#
#######################


use Date::Calc qw(Delta_DHMS);
use Time::localtime;
use strict;
use Tk;

my @W_End = (2012, 12, 21, 00, 00, 01); # 21 Dec 2012, 0:00:01

my $str = "...";

my $mw = new MainWindow;
$mw->title("Fin del mundo");
$mw->Label(-text => "Faltan para el fin del mundo")->pack;

my $entry = $mw->Entry(
-textvariable => \$str,
-width => 17,
-font => "{Comic Sans MS} 12",
-relief => 'raised',
-highlightthickness => 0,
-state => 'disable',
)->pack();


$mw->Button(-text => 'Quit',
-justify => 'center',
-command => sub{exit} )->pack;

$mw->repeat(1000 => \&downcounter);


MainLoop;

sub downcounter {
# Calculando fecha actual
my @Today = (localtime->year()+ 1900, localtime->mon()+ 1, localtime->mday(), localtime->hour(), localtime->min(), localtime->sec());
my @diff = Delta_DHMS(@Today, @W_End);
if ( $diff[1] <10 ){
$diff[1]="0$diff[1]";
}
if ( $diff[2] <10 ){
$diff[2]="0$diff[2]";
}
if ( $diff[3] <10 ){
$diff[3]="0$diff[3]";
}
$str = "$diff[0] dias, $diff[1]:$diff[2]:$diff[3] ";
}

martes, 8 de diciembre de 2009

Link sobre perl....

Estaba vagando por la red y vi este link que considero esta interesante:

http://perlenespanol.com/articulos/archivo/000112.html

lunes, 7 de diciembre de 2009

Contador antes del fin del mundo....

Dado que segun se acabara el mundo el 21 de diciembre del 2012, hay que saber cuanto tiempo nos sobra; para eso este contador en perl.

Nota: No es el mejor, pero funciona. Ademas esta el detalle de que en realidad no se cual es la hora exacta de dicho fin, por lo que el programa supone que sera en el segundo 1 del ese dia.

:D
============================================


#!/usr/bin/perl
#####################################
# Contador para el fin del mundo
#
#######################


use Date::Calc qw(Delta_DHMS);
use POSIX qw(strftime);

@W_End = (2012, 12, 21, 00, 00, 01); # 21 Dec 2012, 0:00:01
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime;
@Today = ( 1900+$year, 1+$mon, $mday, $hour, $min, $sec);
@diff = Delta_DHMS(@Today, @W_End);
print " $diff[0] days, $diff[1]:$diff[2]:$diff[3] \n";


Aqui esta otra version y creo es mejor:
#!/usr/bin/perl
#####################################
# Contador para el fin del mundo
#
# cortesia de Salvador Ortiz.
#######################
#


use Date::Calc qw(Delta_DHMS Today_and_Now);

printf "Faltan %d dias, %2d:%2d:%2d para el fin del mundo\n",Delta_DHMS(Today_and_Now, 2012, 12, 21, 00, 00, 01);

martes, 10 de noviembre de 2009

Bomba fork....

Referencia:

bomba fork



Comando shell:

:(){ :|:& };:



Solucion en Linux:

Agregar en el archivo /etc/security/limits.conf la linea;

* hard nproc 1024

Asi se limita a 1024 el numero de procesos que pueden correr simultaneamente.

jueves, 5 de noviembre de 2009

Sony Vaio VPC W110XL con Linux??

Compre hace poco una netbook Sony Vaio VPC-W110XL. Probe Ubuntu en 9.04 y no reconocio a la primera las interfaces de red. Ahora estoy probando Fedora 11 y parece funcionar de manera general bastante bien.

Alguien le ha puesto Debian 5? .... Debian sera su siguiente SO :P

jueves, 2 de julio de 2009

cssh

En algunas ocasiones me es necesario tener sesiones simultaneas en maquinas distintas y ejecutar comando similares en todas las maquinas. Muchas veces me fue muy util crear un script con expect y ejecutarlo de manera que realmente no fuera interectiva mi sesion remota en los nodos.

Sin embargo, otras ocasiones tengo que hacer dichas sesiones interactivas y ademas deben ser de manera simultanea, la solucion: cssh

Mi archivo de configuracion: /etc/clusters


2 localhost localhost
3 localhost localhost localhost
4 localhost localhost localhost localhost
5 localhost localhost localhost localhost localhost
6 localhost localhost localhost localhost localhost localhost
7 localhost localhost localhost localhost localhost localhost localhost
8 localhost localhost localhost localhost localhost localhost localhost localhost
10 localhost localhost localhost localhost localhost localhost localhost localhost localhost localhost

PD: En debian el nombre del paquete es : clusterssh

miércoles, 1 de julio de 2009

Comandos...

Visitando la wikipedia vi una lista interesante los 60 comandos de usuario de la sección 1 de la Primera Edición de UNIX:

ar as b bas bcd boot cat chdir check chmod chown cmp cp date db dbppt dc df dsw dtf du ed find for form hup lbppt ld ln ls mail mesg mkdir mkfs mount mv nm od pr rew rkd rkf rkl rm rmdir roff sdate sh stat strip su sum tap tm tty type un wc who write

cuantos realmente se usar???

martes, 28 de abril de 2009

autoexpect....

Como en el paquete que contiene el expect no esta incluida la utileria autoexpect, aqui esta el script necesario:


#!/usr/bin/expect --
# Name: autoexpect - generate an Expect script from watching a session
#
# Description:
#
# Given a program name, autoexpect will run that program. Otherwise
# autoexpect will start a shell. Interact as desired. When done, exit
# the program or shell. Autoexpect will create a script that reproduces
# your interactions. By default, the script is named script.exp.
# See the man page for more info.
#
# Author: Don Libes, NIST
# Date: June 30 1995
# Version: 1.4b

set filename "script.exp"
set verbose 1
set conservative 0
set promptmode 0
set option_keys ""

proc check_for_following {type} {
if {![llength [uplevel set argv]]} {
puts "autoexpect: [uplevel set flag] requires following $type"
exit 1
}
}

while {[llength $argv]>0} {
set flag [lindex $argv 0]
if {0==[regexp "^-" $flag]} break
set argv [lrange $argv 1 end]
switch -- $flag \
"-c" {
set conservative 1
} "-C" {
check_for_following character
lappend option_keys [lindex $argv 0] ctoggle
set argv [lrange $argv 1 end]
} "-p" {
set promptmode 1
} "-P" {
check_for_following character
lappend option_keys [lindex $argv 0] ptoggle
set argv [lrange $argv 1 end]
} "-Q" {
check_for_following character
lappend option_keys [lindex $argv 0] quote
set argv [lrange $argv 1 end]
} "-f" {
check_for_following filename
set filename [lindex $argv 0]
set argv [lrange $argv 1 end]
} "-quiet" {
set verbose 0
} default {
break
}
}

################################################## ###########
# Variables Descriptions
################################################## ###########
# userbuf buffered characters from user
# procbuf buffered characters from process
# lastkey last key pressed by user
# if undefined, last key came from process
# echoing if the process is echoing
################################################## ###########

# Handle a character that came from user input (i.e., the keyboard)
proc input {c} {
global userbuf lastkey

send -- $c
append userbuf $lastkey
set lastkey $c
}

# Handle a null character from the keyboard
proc input_null {} {
global lastkey userbuf procbuf echoing

send -null

if {$lastkey == ""} {
if {$echoing} {
sendcmd "$userbuf"
}
if {$procbuf != ""} {
expcmd "$procbuf"
}
} else {
sendcmd "$userbuf"
if {$echoing} {
expcmd "$procbuf"
sendcmd "$lastkey"
}
}
cmd "send -null"
set userbuf ""
set procbuf ""
set lastkey ""
set echoing 0
}

# Handle a character that came from the process
proc output {s} {
global lastkey procbuf userbuf echoing

send_user -raw -- $s

if {$lastkey == ""} {
if {!$echoing} {
append procbuf $s
} else {
sendcmd "$userbuf"
expcmd "$procbuf"
set echoing 0
set userbuf ""
set procbuf $s
}
return
}

regexp (.)(.*) $s dummy c tail
if {$c == $lastkey} {
if {$echoing} {
append userbuf $lastkey
set lastkey ""
} else {
if {$procbuf != ""} {
expcmd "$procbuf"
set procbuf ""
}
set echoing 1
}
append procbuf $s

if {[string length $tail]} {
sendcmd "$userbuf$lastkey"
set userbuf ""
set lastkey ""
set echoing 0
}
} else {
if {!$echoing} {
expcmd "$procbuf"
}
sendcmd "$userbuf$lastkey"
set procbuf $s
set userbuf ""
set lastkey ""
set echoing 0
}
}

# rewrite raw strings so that can appear as source code but still reproduce
# themselves.
proc expand {s} {
regsub -all "\\\\" $s "\\\\\\\\" s
regsub -all "\r" $s "\\r" s
regsub -all "\"" $s "\\\"" s
regsub -all "\\\[" $s "\\\[" s
regsub -all "\\\]" $s "\\\]" s
regsub -all "\\\$" $s "\\\$" s

return $s
}

# generate an expect command
proc expcmd {s} {
global promptmode

if {$promptmode} {
regexp ".*\[\r\n]+(.*)" $s dummy s
}

cmd "expect -exact \"[expand $s]\""
}

# generate a send command
proc sendcmd {s} {
global send_style conservative

if {$conservative} {
cmd "sleep .1"
}

cmd "send$send_style -- \"[expand $s]\""
}

# generate any command
proc cmd {s} {
global fd
puts $fd "$s"
}

proc verbose_send_user {s} {
global verbose

if {$verbose} {
send_user -- $s
}
}

proc ctoggle {} {
global conservative send_style

if {$conservative} {
cmd "# conservative mode off - adding no delays"
verbose_send_user "conservative mode off\n"
set conservative 0
set send_style ""
} else {
cmd "# prompt mode on - adding delays"
verbose_send_user "conservative mode on\n"
set conservative 1
set send_style " -s"
}
}

proc ptoggle {} {
global promptmode

if {$promptmode} {
cmd "# prompt mode off - now looking for complete output"
verbose_send_user "prompt mode off\n"
set promptmode 0
} else {
cmd "# prompt mode on - now looking only for prompts"
verbose_send_user "prompt mode on\n"
set promptmode 1
}
}

# quote the next character from the user
proc quote {} {
expect_user -re .
send -- $expect_out(buffer)
}


if {[catch {set fd [open $filename w]} msg]} {
puts $msg
exit
}
exec chmod +x $filename
verbose_send_user "autoexpect started, file is $filename\n"

# calculate a reasonable #! line
set expectpath /usr/local/bin ;# prepare default
foreach dir [split $env(PATH) :] { ;# now look for real location
if {[file executable $dir/expect] && ![file isdirectory $dir/expect]} {
set expectpath $dir
break
}
}

cmd "#![set expectpath]/expect -f
#
# This Expect script was generated by autoexpect on [timestamp -format %c]
# Expect and autoexpect were both written by Don Libes, NIST."
cmd {#
# Note that autoexpect does not guarantee a working script. It
# necessarily has to guess about certain things. Two reasons a script
# might fail are:
#
# 1) timing - A surprising number of programs (rn, ksh, zsh, telnet,
# etc.) and devices discard or ignore keystrokes that arrive "too
# quickly" after prompts. If you find your new script hanging up at
# one spot, try adding a short sleep just before the previous send.
# Setting "force_conservative" to 1 (see below) makes Expect do this
# automatically - pausing briefly before sending each character. This
# pacifies every program I know of. The -c flag makes the script do
# this in the first place. The -C flag allows you to define a
# character to toggle this mode off and on.

set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}

#
# 2) differing output - Some programs produce different output each time
# they run. The "date" command is an obvious example. Another is
# ftp, if it produces throughput statistics at the end of a file
# transfer. If this causes a problem, delete these patterns or replace
# them with wildcards. An alternative is to use the -p flag (for
# "prompt") which makes Expect only look for the last line of output
# (i.e., the prompt). The -P flag allows you to define a character to
# toggle this mode off and on.
#
# Read the man page for more info.
#
# -Don

}

cmd "set timeout -1"
if {$conservative} {
set send_style " -s"
cmd "set send_slow {1 .1}"
} else {
set send_style ""
}

if {[llength $argv]>0} {
eval spawn -noecho $argv
cmd "spawn $argv"
} else {
spawn -noecho $env(SHELL)
cmd "spawn \$env(SHELL)"
}

cmd "match_max 100000"

set lastkey ""
set procbuf ""
set userbuf ""
set echoing 0

remove_nulls 0

eval interact $option_keys {
-re . {
input $interact_out(0,string)
} -o -re .+ {
output $interact_out(0,string)
} eof {
cmd "expect eof"
return
}
}

close $fd
verbose_send_user "autoexpect done, file is $filename\n"

martes, 31 de marzo de 2009

Nagios 3 en Debian Squeeze

Instalacion y configuracion general y basica de Nagios 3 en un sistema Debian Squeeze/sid.


1) # apt-get update

2) # apt-get install nagios3 nagios-nrpe-plugin

3) # cd /etc/nagios3; htpasswd -c htpasswd.users nagiosadmin

4) # cp /etc/nagios3/apache2.conf /etc/apache2/sites-enabled

5) # /etc/init.d/apache2 restart

6) http://localhost/nagios3/

7) Definiendo mis propios comandos, utilizando los plugins de Nagios.

# vi /etc/nagios3/commands.cfg


define command{
command_name check-ldap
command_line $USER1$/check_ldap -H $HOSTADDRESS$ -3 -b "dc=dominio,dc=dominio1"
}

define command{
command_name check_alfred
command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p 9000
}

define command{
command_name check_root_partition_remote
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c check_disk
}




8) Cambiando detalles de configuracion:

# vi /etc/nagios3/nagios.cfg


cfg_file=/etc/nagios3/contactgroups.cfg
cfg_file=/etc/nagios3/contacts.cfg
cfg_file=/etc/nagios3/timeperiods.cfg
cfg_file=/etc/nagios3/hostgroups.cfg
cfg_file=/etc/nagios3/hosts.cfg
cfg_file=/etc/nagios3/services.cfg


9) Creando cada archivo que defini en el apartado anterior:

# vi /etc/nagios3/contactgroups.cfg
define contactgroup{
contactgroup_name SysAdmin
alias Admin
members Sistemas
}



# vi /etc/nagios3/contacts.cfg

define contact{
contact_name Sistemas
alias SysAdmin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options u,c,r
host_notification_options d,u,r
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email mi_dir@corre
}




# vi /etc/nagios3/timeperiods.cfg

define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}


# 'workhours' timeperiod definition
define timeperiod{
timeperiod_name workhours
alias "Normal" Working Hours
monday 10:30-19:00
tuesday 10:30-19:00
wednesday 10:30-19:00
thursday 10:30-19:00
friday 10:30-19:00
}


# 'nonworkhours' timeperiod definition
define timeperiod{
timeperiod_name nonworkhours
alias Non-Work Hours
sunday 00:00-24:00
monday 00:00-09:00,17:00-24:00
tuesday 00:00-09:00,17:00-24:00
wednesday 00:00-09:00,17:00-24:00
thursday 00:00-09:00,17:00-24:00
friday 00:00-09:00,17:00-24:00
saturday 00:00-24:00
}



# vi /etc/nagios3/hosts.cfg

# 'msantos-pruebas.ing.ollin' host definition
define host{
use generic-host ; Name of host template to use
host_name m-pruebas.ing
alias m-pruebas.ing
address 172.16.30.2
check_command check-host-alive
max_check_attempts 10
notification_interval 120
notification_period 24x7
notification_options d,u,r
contact_groups SysAdmin
}

# 'piedra.domain' definition
define host{
use generic-host ; Name of host template to use
host_name piedra.domain
alias piedra.domain
address 172.16.30.115
check_command check-host-alive
max_check_attempts 10
notification_interval 120
notification_period workhours
notification_options d,u,r
contact_groups SysAdmin
}



# vi /etc/nagios3/services.cfg

define service{
use generic-service ; Name of service template to use
host_name backups.domain, piedra.domain, m-prueba.ing
service_description PING
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups SysAdmin
notification_interval 120
notification_period 24x7
notification_options c,r
check_command check_ping!100.0,20%!500.0,60%
}

# Service definition
define service{
use generic-service ; Name of service template to use
host_name backups.domain
service_description HTTP
is_volatile 0
check_period 24x7
max_check_attempts 3
normal_check_interval 5
retry_check_interval 1
contact_groups SysAdmin
notification_interval 120
notification_period 24x7
notification_options c,r
check_command check_http
}

viernes, 27 de marzo de 2009

Resumen de comandos comunes en mysql

* Conectarse a la consola de mysql:

# mysql -u root -p


* Listar todas las bases de datos:

show databases;


* Cambiarse a una en particular:

use NOM_BASE;


* Listar todas las tablas de una base de datos en uso:

show tables;


* Listar los clientes que tienen permitidas las conexiones:


* Borrar una tabla con todo y contenido:

drop table NOM_TABLA;


* Elimina los registros, pero mantiene la estructura de la tabla:

truncate table NOM_TABLA;


* Renombra una tabla:

rename table NOM_ACTUAL_TABLA to NOM_NUEVO_TABLA;



================================================================================

Comandos de mysql desde consola:


* Crear base de datos:

$ mysqladmin -u -p create


* Borrar la base de datos:

$ mysqladmin -u -p drop


* Listar procesos en ejecucion:

$ mysqladmin -u root -p proc


* Verificar status cada 5 segundos:

$ mysqladmin -u root -p -i 5 status



* Exportar base de datos a la ruta definida.

$ mysqldump --opt -u -h -p > /path/to/file


* Exportar todas las bases de datos a la ruta definida:

$ mysqldump --opt -u -h --all-databases -p > /path/to/file


* Optimizar las bases de datos:

$ mysqlcheck -o -u root -p --all-databases

Etch to Lenny

Se que hay miles de links en la red, que hablan sobre este tema; pero uno en mi blog no estaria de mas ;)


1) vi /etc/apt/sources.list

:%s/etch/lenny/g

2) apt-get update

3) apt-get -u dist-upgrade

miércoles, 25 de febrero de 2009

Xen virtualizando winxp en centos 5.1 en un Dell Power Edge 1950s

La historia empezo, cuando fue necesario que las maquinas de la granja de render, tuvieran varios SO. Inicialmente tenian CentOS 5.1 x86_64, luego fue tambien Windows xp 64. Despues, como todas las maquinas de composicion son Ubuntu, porque no ponerles Ubuntu?

La solución inicial fue instalar y levantar el sistema que fuera necesario para cada ocasion; luego me dio flojera tener que reiniciar las maquinas y desde el grub seleccionar el SO, ademas de que el hecho de que estuvieran en un determinado SO hacia inoperable las otras herramientas usadas en los otros sistemas operativos. Asi que debi recurrir a la virtualizacion.

Segun lei, la alternativa por default de CentOS es XEN. XEN funciona tanto con paravirtualizacion como con virtualizacion completa.

Siguiendo a grandes rasgos el manual

http://www.eslomas.com/index.php/archives/2008/03/11/virtualizacion-linux-y-windows-en-ubuntu-con-xen

La instalación de XEN fue realmente sencilla:

1) # yum install xen

2) los paquetes instalados fueron:

* xen-libs-3.0.3-64.el5_2.9
* xen-libs-3.0.3-25.el5
* xen-3.0.3-64.el5_2.9
* kernel-xen-2.6.18-92.1.22.el5

3) # vi /etc/xen/xend-config.sxp

(xend-unix-server yes)
(xend-unix-path /var/lib/xend/xend-socket)
(xend-relocation-hosts-allow '^localhost$ ^localhost\\.localdomain$')
(network-script network-bridge)
(vif-script vif-bridge)
(dom0-min-mem 256)
(dom0-cpus 0)
(vncpasswd '')


4) Verificar que el kernel de Xen este en el menu del grub y adicionarle la opcion loop max_loops=64 al final del module del kernel

# vi /boot/grub/menu.lst

5) Deshabilitar iptables, SELinux y mover /lib64/tls a /lib64/tls.disabled

6) # shutdown -r now


Máquinas virtuales con virtualización completa - Windows XP 64bits -

1) Comprobar que la maquina soporta virtualizacion:

# egrep '(vmx|svm)' /proc/cpuinfo
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm


2) Hacer un archivo que sera la imagen del SO de la maquina virtual:

# mkdir /opt/VM/winxp
# dd if=/dev/zero of=/opt/VM/winxp/win2_64.img bs=1M count=10240

3) Hacer el archivo de configuracion de la maquina virtual:

# vi /etc/xen/win2xp_64.cfg



kernel = "/usr/lib/xen/boot/hvmloader"
builder = 'hvm'
device_model = '/usr/lib/xen/bin/qemu-dm'
memory = 5120
name = "winxp"
vcpus = 1
vif = [ 'type=ioemu, bridge=xenbr1' ]
disk = [ 'file:/root/winxp/win2_64.img,ioemu:hda,w' ]
cdrom='/dev/scd0'
ne2000=0
boot='d'
vnc=1
vncunused=0
vncviewer=0
sdl=0



4) Tuve un error al intentar hacer

# xm create /etc/xen/win2xp_64.cfg

Error: HVM guest support is unavailable: is VT/AMD-V supported by your CPU and enabled in your BIOS?

La solucion fue activar la virtualizacion por hardware en un Dell PowerEdge 1950s .

Para activar la virtualización asistida por hardware:
1 Pulse en la pantalla de inicio para acceder al programa de configuración del BIOS.
2 Vaya a la sección CPU Information (Información de la CPU).
3 Pulse y vaya a Virtualization Technology (Tecnología de virtualización).
4 Seleccione Enabled (Activada) alternando las teclas de flecha izquierda y derecha.
5 Guarde la selección y salga del programa de configuración del BIOS.

NOTA: No uso el eth0 por eso en el archivo de configuracion esta referenciado xenbr1 ~= eth1.

La otra opcion que vi para crear administrar una maquinas virtuales desde consola grafica: virt-manager





Otro link de documentacion al respecto

miércoles, 18 de febrero de 2009

Atheros AR242x 802.11abg Wireless PCI Express en Ubuntu 8.10

Probando un linux en una netbook Asuss Eee Pc 1000HD, instale Ubuntu 8.10. No funciona con los modulos de Ubuntu la tarjeta wireless.

Aqui el procedimiento para hacerla trabajar:


1) $ wget http://snapshots.madwifi-project.org/madwifi-hal-0.10.5.6/madwifi-hal-0.10.5.6-r3942-20090205.tar.gz
2) $ tar xzvf madwifi-hal-0.10.5.6-r3942-20090205.tar.gz
3) $ cd madwifi-hal-0.10.5.6-r3942-20090205
4) $ make
5) # make install
6) # modprobe ath_pci o user modconf
7) # iwconfig


Nota: Es necesario contar con el linux-headers de la version de kernel y ademas build-essential.

martes, 10 de febrero de 2009

Dell T5400 con Fedora 4

Mas de una vez me he topado con las complicaciones de instalar en un maquina con harware "reciente" alguna distribucion de Linux tambien reciente, suelen no identificarse correctamente todo el hardware, pero es mas que nada por que aun no sale el modulo adecuado ;)


Sin embargo, ayer me tope con el problema de instalar en hardware reciente un Fedora Core 4 :-S

Aqui las caracteristicas generales de la maquina en cuestion Workstation Dell Precision T5400:

- 8G RAM
- Procesador Dual QuadCore
- Disco Duro SAS
- Tarjeta de Red Broadcom Ethernet NIC NetXtreme 5754
- Tarjeta de video Nvidia Quadro FX 3700


La historia de como superar esa instalacion....

La instalacion la pense hacer por DVD, hice el boot desde el dvdrom, pero resulto el siguiente mensaje de error:

vfs cannot open root device null or unknowblock

y varios mensajes despues de un kernel panic :-0

Busque en la red y alguien comento que debi hacerlo asi:

1) boot desde dvdrom
2) En el prompt de boot:

boot: lo que sea

Esto mandara un mensaje de error debido a que no se encuentra dicha imagen "lo que sea"

2) nuevamente en el prompt:

boot: linux media check

Asi se supera el mensaje de error anterior, pero resulto que no detectaba la unidad de dvdrom y aparecio el clasico mensaje:

"Unable to find any devices of the type needed for this installation type. Would you like to manually select your driver or use a driver disk? "


En la pantalla aparece las opciones para cargar el modulo adecuado para dicha unidad, probe varios, pero la verdad ninguno funciono. Asi que opte por cambiar el medio de instalacion, empiezo con dvdrom y a la hora de seleccionar el medio opte por hacerlo desde disco duro.

Para instalar desde disco duro, simplemente copie la imagen iso en una parte del disco duro diferente a la particion donde instalare, recuerdo que debe ser ext2, ext3 o fat para que pueda ser usada. Todo va bien hasta que trata de hacer la instalacion con ambiente grafico :(

No es reconocida la tarjeta grafica; asi que en lugar de usar en el prompt de boot linux media check use linux text, claro aun usando el dvd para hacer boot y el disco duro para la instalacion.

Asi por fin termina la instalacion basica. Pero resulta que no funciona la tarjeta grafica y tampoco la de red 8o|

Para la tarjeta grafica:

1) bajo el driver del sitio de nvidia
2) compilo el driver
3) modifico el archivo /etc/X11/xorg.conf

Para la tarjeta de red:

1) bajo el driver del sitio de broadcom http://www.broadcom.com/support/ethernet_nic/netxtreme_desktop.php

2) unzip linux-3.92n.zip
3) rpm -ivh tg3-3.92n-1.src.rpm
4) cd /usr/src/redhat/SPECS/
5) rpmbuild -bb SPECS/tg3.spec
6) como marco el siguiente error:

error: conflicting types for ’skb_header_cloned’ include /linux/skbuff.h:398: error: previous definition of ’skb_header_cloned’ was here RPM build errors:


vi /usr/src/kernels/2.6.11-1.1369_FC4smp-x86_64/include/linux/skbuff.h

hay que comentar las siguientes lineas:

/** static inline int skb_header_cloned(const struct sk_buff *skb)
*{
* int dataref;
*
* if (!skb->cloned)
* return 0;
*
* dataref = atomic_read(&skb_shinfo(skb)->dataref);
* dataref = (dataref & SKB_DATAREF_MASK) - (dataref >> SKB_DATAREF_SHIFT);
* return dataref != 1;
*}



7) rpmbuild -bb SPECS/tg3.spec
8) rpm -Uvh RPMS/x86_64/tg3-3.92n-1.x86_64.rpm
9) insmod /lib/modules/2.6.11-1.1369_FC4smp/kernel/drivers/net/tg3.ko
10) ifconfig eth0 XXX.XXX.XXX.XXX gw XXX.XXX.XXX.XXX
11) vi /etc/resolv.conf
12) ping google.com


Listo!!!!


PD: Quiza este post nunca le sea util a alguien, pero me da mucho gusto poder decir que esto fue prueba superada ;)

jueves, 29 de enero de 2009

Script en bash para renombrar archivos...

Ultimamente ha sido muy comun cambiar secuencia de archivos, ya sea en el nombre o bien en el numero de la secuencia, asi que aqui el borrador del script en bash que haga eso ;)


#!/bin/bash

nombre=$1
inicio=$2
ext=$ext


for file in ` ls *.$ext`
do
if [ -e $nombre.$i.$ext ]
then
echo El $nombre.$i.$ext existe, cuidado puede sobreescribirse
else
echo mv $file $nombre.$i.$ext
mv $file $nombre.$i.$ext
i=` expr $i + 1 `
fi
done

miércoles, 21 de enero de 2009

Recuperando el Grub....

He tenido que recuperar el grub de una maquina con 2 discos SATA y 6 SO diferentes, se que hay muchas ligas a respecto; pero aqui esta una mas :P


1) usar un LiveCD
2) mount /dev/sdaX /mnt
mount -o bind /dev /mnt/dev
mount -o bind /proc /mnt/proc

3) chroot /mnt

4) grub-install /dev/sdaX

o

grub;
grub> find /boot/grub/stage1
grub> root (hdX,Y)
grub> setup (hd0)
grub> quit

5) shutdown -r now

Una vez que se tenga el grub instalado, el meter todas las opciones en el menu no deberia ser complicado.

miércoles, 7 de enero de 2009

Trucos con historial de bash ....

Limpiando cualquier rastro en el archivo de historial de bash.

Adicionar al ~/.bashrc las siguientes alias :

alias exit=’history -c && clear && exit’
alias logout='history -c && clear && logout'

Guardar los comandos ejecutados sin importar si hay varias terminales abiertas

Adicionar al ~/.bashrc

shopt -s histappend
PROMPT_COMMAND=`history -a`

Algunas variables del Bash

HISTSIZE Limita el número de instrucciones que tendra el archivo historico de comandos (almacenado en la variable $HISTFILE, normalmente es .bash_history). Su valor default es 500.

HISTFILE Nombre del archivo donde se guardara el historial.

HOSTNAME El nombre del host actual ( similar a uname -n).

LANG Usada para determinar el idioma.

LOGNAME Almacena el nombre de login.

MAILCHECK La frecuencia en segundos con que el Shell verificara correo en los archivos indicados por las variables $MAILPATH o $MAIL.

PATH Rutas que se usaran para localizar archivos.

PS1 Es el prompt principal.

PS2 Prompt de continuacion, es aquel signo que aparece despues de un cuando un comando no ha finalizado.

PWD Ruta completa del directorio actual ( similar a pwd ).

BASH_VERSION Imprime la version de bash

HISTCMD Imprime el numero en el indice del historial del comando actual.

HOSTTYPE Imprime el tipo de sistema en el que se esta ejecutando. Ejemplo de salida: i486, x86_64

OLDPWD El directorio anterior al actual ( similar a cd - ).

PPID EL PID del padre del proceso de shell. Es de solo lectura este valor.

UID EL UID del usuario, es de solo lectura esta variable.

HOME La ruta del directorio HOME del usuario (similar a cd )

IFS El separador interno. El valor default es ‘‘’’

TMOUT El tiempo que esperara el comando read antes de dar por terminada.

TMPDIR Ruta que tendra bash para generar archivos temporales necesarios para la ejecucion de comandos. No tiene un valor por default.