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