divendres, 14 de desembre de 2012

YUM Repository management

En les distribucions basades en Redhat, la gestio de repositories es realitza mitjançant l'eina:

yum-config-manager

Les tasques principals que realitzarem amb aquesta comanda bàsicament seran 3:
  • Agregar
  • Habilitar/Deshabilitar
  • Mostrar els repositoris
AGREGAR:

Per agregar un repositori podem editar el fitxer /etc/yum.conf o utilitzar la eina explicada abans.
La sintaxi es la següent:

yum-config-manager --add-repo repository_url

La següent comanda agregarà el repositori.

yum-config-manager --add-repo http://www.example.com/example.repo
Loaded plugins: langpacks, presto, refresh-packagekit
adding repo from: http://www.example.com/example.repo
grabbing file http://www.example.com/example.repo \
        to /etc/yum.repos.d/example.repo
example.repo                     |  413 B     00:00
repo saved to /etc/yum.repos.d/example.repo

HABILITAR/DESHABILITAR:

Per a habilitar repositoris amb YUM utilitzarem:

yum-config-manager --enable example

Per a deshabilitar un respositoris utilitzarem:

yum-config-manager --disable example

MOSTRAR ELS REPOSITORIS:

Per a mostrar els respositoris que tenim agregats, i el seu estat utilitzarem:

yum repolist all








dijous, 13 de desembre de 2012

Actualitzacions amb Red Hat Enterprise

Les actualitzacions de Redhat enterprise es gestionen a traves de la RHN (RedHat Network).
Es pot accedir a aquestes anant a la web:

https://access.redhat.com

Una volta en la web fem login i cliquem en la pestanya Subscriptions => Registered Systems

Per a que una màquina siga actualitzable hi ha que executar en la maquina:

rhn_register --nox

Si la comanda anterior funciona correctament deureim de ser capaços de veure un fixer XML en /etc/sysconfig/rhn/systemid

Una volta introduïda tota la informació demanada per el programa. Anem a la pàgina web, proporcionada abans, a la mateixa secció, fem click en la maquina i fem click en la seccció:
System Properties (Edit These Properties)i canviem el Base Entitlement a Updates.

Una volta donat d'alta i correctament configurada la màquina en la RHN. Ja serem capaços d'actualitzar-la.

Podem netejar la cache de la següent forma:

yum clean all

Podem generar una cache nova com següeix:

 yum makecache

El sistema s'actualitza amb la següent comanda:

yum update

Si volem actualitzar el sistema i mantenir el kernel sense actualitzar hi ha que executar:

yum exclude=kernel* update

O editant el fitxer /etc/yum.conf

...
exclude=kernel*
...

dimecres, 12 de desembre de 2012

MMM Role Switching



MMM (Master-Master Replication Manager for MySQL) es un conjunt de scripts felixibles per a gestionar i realitzar failover/monitoring the MySQL amb configuracions de replicacions  Master-Master (on nomes un node pot ser escrit en un moment determinat).

En MMM hi ha dos tipus de nodes:
  • Nodes de base de dades
  • Nodes de monitoring
Per a canviar el rol d'un node de mmm, hi ha que conectar-se com a root al node de monitoring i comprobar el estat del cluter.

  /usr/local/mmm/sbin/mmm_control @cluster show
  MySQL Multi-Master Replication Manager
  Version: 1.2.3
  Config file: mmm_mon_cluster.conf
  Daemon is running!
  ===============================
  Cluster failover method: AUTO
  ===============================
  Servers status:
  db1(10.0.0.1): master/ONLINE. Roles: None
  db2(10.0.0.2): master/ONLINE. Roles: reader(10.0.0.3;), writer(10.0.0.4;)

En aquest cas veiem que db1 no te rol, cambiarem un dels rols que te db2 a db1. Només podem realitzar açò si ens assegurem que els dos servers estan en status ONLINE. Per canviar el rol hi ha que teclejar la següent comanda:
 
  /usr/local/mmm/sbin/mmm_control @cluster move_role reader db1

Quan la comanda finalitza, tenim que comprobar el estat del cluster de nou.
 
  /usr/local/mmm/sbin/mmm_control @cluster show
  MySQL Multi-Master Replication Manager
  Version: 1.2.3
  Config file: mmm_mon_cluster.conf
  Daemon is running!
  ===============================
  Cluster failover method: AUTO
  ===============================
  Servers status:
  db1(10.0.0.1): master/ONLINE. Roles: reader(10.0.0.1;)
  db2(10.0.0.2): master/ONLINE. Roles: writer(10.0.0.2;)

 
 

dimecres, 5 de setembre de 2012

Watch: Visualització periòdica de comandes

La comanda watch de linux permet la visualització periodica de una comanda de shell. Açò es molt útil quan volem monitoritzar algun element i necessitem visualitzar el resultat d'un programa repetidament.

Per exemple, quan necessitem visualtzar si esta creixent molt la mida d'una partició durant un backup. En aquest cas podem utilitzar:

watch -d -n 2 "df -h" 
 
La opció -d s'utilitza per a destacar les diferencies entre els diferents outputs de la comanda df. La opcio -n indica el nombre de segons que transcorren entre cada execucio de df.

A partir d'ací es utilitzar la imaginació. Si necessitem visualitzar els canvis que es produeixen en un directori podem utilitzar:

watch -d "ls -FlAtS"

Si volem visualitzar els processos de mysql podem utilitzar:

watch -n 4 'mysqladmin processlist -u root -pxxxx'

Per a la visualitzacio de la memoria virtual utilitzada podem utilitzar:
 
watch -d vmstat
 
Per a mostrar la memoria lliure del sistema podem utilitzar:

watch -d "free -m"
 
Per a mostrar estadistiques en temps real sobre la CPU, dispositius i particions podem utilitzar:

watch -d iostat
 
En fi una comanda molt útil, l'únic problema al que no li trobe una solucio es al fet de conseguir disposar de watch amb scrolling. Si algú se li ocorre alguna sol·lució!?!

divendres, 10 d’agost de 2012

Mysqlslap: Emulació de càrrega per a MySQL

Existeix una eina per a MySQL molt útil per a realitzar benchmarks i per a comparar el rendiment de MySQL en diferents hardwares. La utilitat s'anomena mysqlslap.

Aquest programa és útil per a probar la configuració de MySQL amb diferrent engines i configuracions.

Utilització Bàsica:

 

La forma més bàsica en la que podem utilitzar el programa es la següent:

mysqlslap --user=root --auto-generate-sql 
 
Que mostrarà el següent output per pantalla:
Benchmark
        Average number of seconds to run all queries: 0.274 seconds
        Minimum number of seconds to run all queries: 0.274 seconds
        Maximum number of seconds to run all queries: 0.274 seconds
        Number of clients running queries: 1
        Average number of queries per client: 0

Aquesta utilitat crearà una base de dades anomenada mysqlslap i una taula de 2 columnes anomenada t1 i començarà a fer inserts i selects aleatoris sobre aquesta taula. Podem veure el que està realitzant mysqlslap si afegim -v a la linia de comandes. Depenent del nombre de v que utilitzem obtindrem més o menys informació.
mysqlslap --user=root --auto-generate-sql -vvv
El sistema ens mostrarà la següent eixida a la comanda:
Building Create Statements for Auto
Building Query Statements for Auto
Parsing engines to use.
Starting Concurrency Test
DROP SCHEMA IF EXISTS `mysqlslap`;
Loading Pre-data
CREATE SCHEMA `mysqlslap`;
CREATE SCHEMA `mysqlslap`;
CREATE TABLE `t1` (intcol1 INT(32) ,charcol1 VARCHAR(128));
INSERT INTO t1 VALUES (1804289383,'mxvtvmC9127qJNmKQ1lT4zg9rdxBL');
...
INSERT INTO t1 VALUES (737703662,'2zxutF6rOAKEF4MknsY');
Generating primary key list
connected!
INSERT INTO t1 VALUES (73673339,'BN3152Gza4GW7atxJ7yTahm');
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (1759592334,'3lkoxjtvgLu5xKJgaZDu2');
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (95275444,'bNIrBDBl81tjzdvuw4igsp');
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (866596855,'naQuzhMt1IrZ3KgEIM');
SELECT intcol1,charcol1 FROM t1;
INSERT INTO t1 VALUES (364531492,'qMa5SuYwEKdvuWr');
Generating stats
Benchmark
        Average number of seconds to run all queries: 0.067 seconds
        Minimum number of seconds to run all queries: 0.067 seconds
        Maximum number of seconds to run all queries: 0.067 seconds
        Number of clients running queries: 1
        Average number of queries per client: 0

DROP SCHEMA IF EXISTS `mysqlslap`;

També es pot simular un nombre de connexions concurrent. En aquest cas 99. Com es pot veure el rendiment cau bastant.
mysqlslap --user=root --auto-generate-sql --concurrency=99
El resultat del test es el següent:
Benchmark
        Average number of seconds to run all queries: 20.056 seconds
        Minimum number of seconds to run all queries: 20.056 seconds
        Maximum number of seconds to run all queries: 20.056 seconds
        Number of clients running queries: 99
        Average number of queries per client: 0
 

Altres opcions: 

Un altre aspecte que podem configurar es el nombre de voltes que realitzarem el test.
mysqlslap -user=root --auto-generate-sql --concurrency=99 --iterations=10
El resultat del test es el següent:
Benchmark
        Average number of seconds to run all queries: 17.898 seconds
        Minimum number of seconds to run all queries: 15.922 seconds
        Maximum number of seconds to run all queries: 21.250 seconds
        Number of clients running queries: 99
        Average number of queries per client: 0
Per a configurar el nombre de consultes a realitzar també existeix un parametre:
mysqlslap --user=root --concurrency=99 --iteration=10 --auto-generate-sql \
       --number-of-queries=3000
El resultat del test és el següent:
Benchmark
        Average number of seconds to run all queries: 42.705 seconds
        Minimum number of seconds to run all queries: 37.088 seconds
        Maximum number of seconds to run all queries: 46.909 seconds
        Number of clients running queries: 99
        Average number of queries per client: 30

Un altre aspecte modificable es la taula que es crea inicialment. Per defecte es crea una taula de dues files una numèrica i l'altra de chars. Amb 2 parametres podem configurar el nombre de camps int o char de la taula.
mysqlslap --user=root --concurrency=99 --iteration=10 --auto-generate-sql \
        --number-of-queries=1000 --number-int-cols=2 --number-char-cols=3 
El resultat del test es el següent:
Benchmark
        Average number of seconds to run all queries: 23.206 seconds
        Minimum number of seconds to run all queries: 21.860 seconds
        Maximum number of seconds to run all queries: 24.543 seconds
        Number of clients running queries: 99
        Average number of queries per client: 10
El programa també permet definir diferents engines, probar queries específiques sobre una base de dades existent i fins i tot generar fitxers .csv que es poden utilitzar posteriorment per a realitzar gràfiques.

Links:

 

 http://blog.dbadojo.com/2007/08/mysql-vs-mysqlslap.html
 http://blog.dbadojo.com/2008/01/mysql-vs-mysqlslap-round-2.html
 http://www.techrepublic.com/blog/howdoi/how-do-i-stress-test-mysql-with-mysqlslap/133

dilluns, 30 de juliol de 2012

Enviar un correu des de bash

Per a enviar un correu desde bash podem utilitzar el següent script:

#!/bin/bash

TO_ADDRESS="someone@domain.tld"
FROM_ADDRESS="sender"
SUBJECT="Proba"
BODY="Aquest es un mail de proba"

echo ${BODY}| mail -s ${SUBJECT} ${TO_ADDRESS} -- -r ${FROM_ADDRESS}

El double dash "--" s'utilitza per a indicar el final de la llista de parametres d'una comanda.
Per exemple si volem buscar en grep la opció -v ho fariem com segueix:

grep -- -v file

dilluns, 16 de juliol de 2012

Runlevels en Redhat i Debian

RedHat estructura els runlevels com segueix:

0:Halt
1:Single User
2:User Defined
3:Multiuser with console only (Everything up without X11)
4:User Defined
5:X11 (All services running including X11)
6:Reboot
Debian estructura els runlevels com següeix:
0:System Halt
1:Single user
2:Full multi-user mode (Default)
3-5:Same as 2
6:System Reboot
Per a interactuar amb els runlevels Redhat proporciona les seguents eines. Si necessitem veure en quin runlevel estem actualment ho podem realitzar amb les següents comandes:
who -r
runlevel
Si volem llistar i rebre informació de tots els runlevels configurats podem utilitzar les següents comandes:
chkconfig --list
que mostrarà el següent:
NetworkManager  0:off   1:off   2:off   3:off   4:off   5:off   6:off
acpid           0:off   1:off   2:off   3:off   4:off   5:off   6:off
anacron         0:off   1:off   2:on    3:on    4:on    5:on    6:off
atd             0:off   1:off   2:off   3:off   4:off   5:off   6:off
auditd          0:off   1:off   2:on    3:on    4:on    5:on    6:off
autofs          0:off   1:off   2:off   3:off   4:off   5:off   6:off
avahi-daemon    0:off   1:off   2:off   3:on    4:on    5:on    6:off

...

wpa_supplicant  0:off   1:off   2:off   3:off   4:off   5:off   6:off
xfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
xinetd          0:off   1:off   2:off   3:on    4:on    5:on    6:off
ypbind          0:off   1:off   2:off   3:off   4:off   5:off   6:off
yum-updatesd    0:off   1:off   2:off   3:off   4:off   5:off   6:off

xinetd based services:
        chargen-dgram:  off
        chargen-stream: off
        daytime-dgram:  off

...

        rsync:          off
        tcpmux-server:  off
        time-dgram:     off
        time-stream:    off
Es util utilitzar grep per a filtrar aquesta info:
chkconfig --list | grep on
chkconfig --list | grep 3:on
chkconfig --list | grep '[123]:on' 
Per a afegir script podem utilitzar els flags --del i --add, aquestes flags només actuen sobre la estructura de symlinks dels directoris rcX.d.
chkconifg --del myownscript
chkconfig --add myownscript
Per a configurar els scripts en els runlevels que creiem adequats utlitzarem les següents comandes en distribucions Redhat:
chkconfig myownscript on (Per defecte es configura en els runlevels 2345)
chkconfig myownscript off (Per defecte es configura en els runlevels 2345)
chkconfig --level2 myownscript on
chkconfig --level2 myownscript off
chkconfig --level234 myownscript on
chkconfig --level234 myownscdript off
En Debian la gestió es lleugerament diferent, Una volta tinguem l'script programat el copiarem a
/etc/init.d
Els init-scripts es gestionen amb uptade-rc.d
update.rc.d -f myownscript remove ( Borra els symlinks)
update-rc.d myownscript defaults ( Llança l'script per 
                                   als runlevels 0 1 2
                                   3 i fa un stop per als
                                   runlevels 4 5 6)
update-rc.d myownscript start 20 2 3 4 5 . stop 20 0 1 6 
                                  ( Aixi assignes la prioritat i 
                                    els runlevels corresponents
                                    per a start i per stop)
També es pot instalar en debian el paquet chkconfig o utilitzar el següent command per a veure quins serveis tenim UP desde el començament:
find . /var/run | grep pid
Si instalem la utilitat sysv-rc-conf ja tenim alguna cosa semblant a chkconfig --list.

divendres, 11 de maig de 2012

Creació d'un proxy SOCKS

El programa ssh permet crear proxies SOCKS, per a la creació d'un proxy SOCKS utilitzarem el flag -D. La comanda que utilitzarem per a la creació del proxy serà la següent:

ssh -D 8080 -Nf someone@machine

El flag -D: crea el proxy SOCKS.
El flag -N: deixa la conexió oberta i no executa cap comanda.
El flag -f: fa que ssh s'execute en background.

Una volta tenim el proxy socks en funcionament configurem el navegador per a eixir a internet utilitzant un proxy. En firefox es realitza  de la següent manera:

Tools -> Options -> Advance -> Network -> Settings -> Manual Proxy Configurations:

En el camp Proxy Socks configurem el host com a localhost i el port com a 8080. Com es pot veure a la imatge:


Una volta configurat el proxy només nes queda entrar a la configuració del firefox teclejant about:config a la barra de direccions i posar la següent cadena a true per a habilitar els dns a través del proxy SOCKS.

network.proxy.socks_remote_dns         true

dilluns, 2 d’abril de 2012

Multiplexació de terminals: Screen

En Unix existeix una aplicació anomenada screen. Aquesta utilitat sol·luciona 2 problemes.

1. Permet multiplexar terminals. Accedir amb un terminal a multiples aplicacions a la vegada sense tenir que obrir un altre terminal

2. Permet desacoplar els programes del terminal, així aquestos poden seguir funcionant una volta es tanca el terminal.

La utilització de screen es senzilla. A continuació enumerarem les seues comandes més útils:

screen -S NOM : Iniciar i donar un nom a la sessió.
screen -ls :  Llistar les sessions d'screen.
Ctrl + A n :  Canviar a la pestanya següent.
Ctrl + A p : Canviar a la pestanya anterior.
Ctrl +A 0 ... 9 : Anar a la pestanya número  
Ctrl + A d : Fer un detach de la sessió del screen
screen -r Nom : Fer un attach a la sessió del screen
Ctrl + A | : Subdividir el screen verticalment
Ctrl + A S : Subdividr el screen horitzontalment
Ctrl + A X : Eliminar una subdivió
Ctrl + A Tab : Moures entre subdivisions
Ctrl + A  c :Crear una nova terminal
Ctrl + A " :  Elegir la terminal a mostrar
Ctrl + A k :Eliminar una terminal

A les següents webs podeu trobar més informació.
http://www.kuro5hin.org/story/2004/3/9/16838/14935
http://www.gnu.org/software/screen/manual/


divendres, 23 de març de 2012

Strace, eixa gran utilitat

A voltes estem configurant una aplicació i quan l'executem l'aplicació fa un crash i no podem obtenir informació de que esta passant.

El que podem fer es interceptar les cridades al sistema i tratar d'entendre que produeix el crash a l'aplicació. Aquesta funcionalitat ens la proporciona strace.

En aquest example l'aplicació sqldeveloper falla i no es veu perquè.

strace sqldeveloper 

Que mostra la següent eixida:

execve("/usr/bin/sqldeveloper", ["sqldeveloper"], [/* 44 vars */]) = 0
brk(0)                                  = 0x1722000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f107a464000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=78060, ...}) = 0
mmap(NULL, 78060, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f107a450000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0 \24\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1685816, ...}) = 0
mmap(NULL, 3801960, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f1079ea5000
mprotect(0x7f107a03c000, 2093056, PROT_NONE) = 0
mmap(0x7f107a23b000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x196000) = 0x7f107a23b000
mmap(0x7f107a240000, 21352, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f107a240000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f107a44f000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f107a44d000
arch_prctl(ARCH_SET_FS, 0x7f107a44d720) = 0
mprotect(0x7f107a23b000, 16384, PROT_READ) = 0
mprotect(0x619000, 4096, PROT_READ)     = 0
mprotect(0x7f107a466000, 4096, PROT_READ) = 0
munmap(0x7f107a450000, 78060)           = 0
getpid()                                = 27105
rt_sigaction(SIGCHLD, {SIG_DFL, [CHLD], SA_RESTORER|SA_RESTART, 0x7f1079edb420}, {SIG_DFL, [], 0}, 8) = 0
geteuid()                               = 1000
brk(0)                                  = 0x1722000
brk(0x1743000)                          = 0x1743000
getppid()                               = 27104
stat("/home/melkor", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat(".", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/bin/sqldeveloper", O_RDONLY) = 3
fcntl(3, F_DUPFD, 10)                   = 10
close(3)                                = 0
fcntl(10, F_SETFD, FD_CLOEXEC)          = 0
rt_sigaction(SIGINT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGINT, {0x40f050, ~[RTMIN RT_1], SA_RESTORER, 0x7f1079edb420}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f1079edb420}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL, ~[RTMIN RT_1], SA_RESTORER, 0x7f1079edb420}, NULL, 8) = 0
read(10, "#!/bin/sh\nset -e\n\n# sqldeveloper"..., 8192) = 3041
pipe([3, 4])                            = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f107a44d9f0) = 27106
close(4)                                = 0
read(3, "sqldeveloper\n", 128)          = 13
read(3, "", 128)                        = 0
close(3)                                = 0
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 27106
--- SIGCHLD (Child exited) @ 0 (0) ---
stat("/home/melkor/.sqldeveloper/jdk", {st_mode=S_IFREG|0664, st_size=33, ...}) = 0
pipe([3, 4])                            = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f107a44d9f0) = 27107
close(4)                                = 0
read(3, "/usr/lib/jvm/java-6-openjdk/jre/"..., 128) = 33
read(3, "", 128)                        = 0
close(3)                                = 0
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 27107
--- SIGCHLD (Child exited) @ 0 (0) ---
stat("/usr/lib/jvm/java-6-openjdk/jre//bin/javac", 0x7fffd27b6d70) = -1 ENOENT (No such file or directory)
stat("/usr/bin/x-terminal-emulator", {st_mode=S_IFREG|0755, st_size=1394, ...}) = 0
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f107a44d9f0) = 27108
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 27108
--- SIGCHLD (Child exited) @ 0 (0) ---
read(10, "", 8192)                      = 0
exit_group(0)                           = ?
[7]+  Hecho                   sqldeveloper

Si analitzem aquesta eixida podem deduïr que el que esta fallant es la ruta al jdk que està mal configurada.

stat("/usr/lib/jvm/java-6-openjdk/jre//bin/javac", 0x7fffd27b6d70) = -1 ENOENT (No such file or directory)

dimarts, 20 de març de 2012

Configuració d'un firewall Linux

L'objectiu d'aquest tutorial es mostrar com configurar un firewall linux per aïllar la xarxa interna d'Internet.

Aquest tutorial suposa que disposem ja d'un adsl configurada amb "monopuesto" i per tant coneixem ja la IP, la mascara de la subxarxa i la gateway.

En primer lloc hem de configurar el ip_forwarding en la máquina:

echo 1 > /proc/sys/net/ipv4/ip_forward

En segon lloc configurem el script del iptables.

#!/bin/bash

ipt=/sbin/iptables

#Flushing everything
$ipt -F
$ipt -t nat -F
$ipt -X
$ipt -Z

#Defining the policy
$ipt -P INPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -p OUTPUT ACCEPT

#Rules
$ipt -A INPUT -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A INPUT -p icmp -m icmp --icmp-type 0 -j ACCEPT
$ipt -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
$ipt -A INPUT -i eth0 -m state --state NEW,INVALID -j DROP

#NAT and forwarding
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

Bibliografia

dilluns, 5 de març de 2012

Instal·lació d’una Debian en un sistema remot

1. Introducció

L’objectiu d’aquest document és actualitzar el document “Howto Install Debian Onto Remote Linux System” de Erik Jacobson realitzat en 2003 [1].
S’han revisat els programes utilitzats durant aquest any i s’han canviat per
l’equivalent a Debian Etch, que es la distribució stable de debian en el moment de redactar aquest tutorial.

També s’ha adaptat el document de l’autor anterior per a satisfer les nostres necessitats. Per tant l’esquema de particionat emprat ha sigut el que
hem considerat mes adient per a la nostra situació. En altres situacions
aquest pot canviar.

2. Debootstrap

Existeixen diverses formes per a instal·lar Debian remotament. La més fàcil és utilitzar debootstrap així que utilitzarem aquesta. Abans es podia
obtenir un paquet rpm del programa de la pàgina:

http://people.debian.org/~blade/install/debootstrap

Però després de l’atac als servidors Debian no es una font fiable, com a la
pàgina es diu. Per tant hi ha que buscar els paquet a la pàgina de Debian
i convertir-lo amb el programa alien. Nosaltres utilitzarem la versió estable de Debian. Descarreguem el programa de la rama estable de debian en la pàgina i el convertim a rpm si aquest es el sistema d’administració de paquets utilitzat. La següent ordre fa la conversió:

alien −vr debootstrap_0.3.3.2etch1_all.deb

Una volta s’ha realitzat la conversió  del programa a rpm el podem instal·lar fàcilment amb:

rpm −ivh debootstrap_0.3.3.2etch1_all.deb


Si estem en una distribució basada en debian, podem instal·lar-lo amb dpkg,
aquest paquet depen de binutils:

 
dpkg −i debootstrap_0.3.3.2etch1_all.deb


3. Inicialització de la partició de treball

Anem a instal·lar el sistema sobre la partició de swap existent, per a no tindre problemes necessitarem un espai swap amb almenys 256 MB encara que un poc més ens ajudarà també. El primer que fem es desactivar el swap.


 swapoff -a
  
Pel que fa a la RAM de la màquina pot ser interessant crear un fitxer de swap si la màquina en questio no disposa d’espai. Podem crear un fitxer swap amb:

dd if=/dev/zero of=/swapfile bs=1024 count=65536

Així creem un fitxer de 64 MB. Després fem que aquest fitxer siga swap
amb la comanda:


mkswap /swapfile

I l’activem:

swapon /swapfile

Una volta sol·lucionat els problems de memoria utilitzem fdisk per a canviar la partició swap en una partició de dades de Linux.
 

fdisk /dev/hda


Busquem la partició amb identificador 82 y sistema Linux swap i canviem el tipus de partició a Linux (id: 83) amb t i salvem els canvis a fdisk amb w. Una volta ja fets els canvis en la taula de particions, formategem la partició amb el format ext3.

mkfs.ext3 /dev/hda2

Una volta ja tenim el sistema formatejat amb ext3 exportarem el punt
de montatge per a treballar més comodament. També creem el directori i
montem el punt de montatge.


export LFS=/mnt/ lfs
mkdir −p $LFS
mount /dev/hda2 $LFS


Hi ha que assegurar-se que la partició que montem es la swap i no una altra. La següent ordre ens ajudarà.

df -h

4. Instal·lació del sistema base

Ara ha arribat el moment de llançar debootstrap (açò tardarà un moment). Aquest programa necessita diversos arguments. L'arquitectura, la distribució, el directori, i la url al arxiu debian.
 

La arquitectura que utilitzarem serà i386. Potser necessites una arquitectura diferent depenent del hardware. Les possibilitats són les següents: alpha, arm, hppa, ia64, mips, mipsel, powerpc, s390 o sparc.
 

La distribució es qualsevol nom de distribució de Debian. Els típics són Stable, Testing i Unstable. Els noms en codi per a cada una son Etch per Stable, Lenny per a testing i Sid és sempre Unstable. El millor es utilitar stable per a evitar problemes i despres quan finalitzem la instal·lació ja podem actualitzar el que necesitem.
 

Per a l’últim parametre l’url qualsevol mirror de Debian es vàlid

debootstrap −−arch i386 etch $LFS

A continuació, copia resolv.conf, hostname i hosts. Seran iguals en el nou sistema. L’eixida de la comanda hostname ha de ser la mateixa que /etc/hostname.
cp /etc/resolv.conf $LFS/etc/resolv.conf
cp /etc/hosts $LFS/etc/hosts
cp /etc/hostname $LFS/ etc/hostname

 
5. Entrant en el chroot


Ara que ja tenim tots els fitxer copiats es moment de entrar en el chroot.
Tecleja el següent:



chroot $LFS /usr/bin/env −i HOME=/root \
> TERM=$TERM PS1=’\u:\w\$’ PATH=/bin:/usr/bin:/sbin:/usr/sbin \
> /bin/bash −−login


També necessitem especificar-li al sistema quines particions s’han de montar durant l’arranc. Primer realitzarem un fstab bàsic.

cat > /etc/fstab << ”EOF”
>#filesystem  mount−point  fs-type options  dump fsck-order

>
>/dev/hda2    /            auto   defaults  0    1

>proc         /proc        proc   defaults  0    0
>EOF



Tot seguit montem el sistema de fitxers proc:

mount −t proc proc /proc

Abans que ens oblidem, es important que fixem el hostname. Canvia
mybox.domain.com per el teu hostname. Pots verificar-lo amb hostname –
fqdn. Si obtens un error com a resposta de la comanda, revisa el man per
a trobar informació sobre com sol·lucionar-ho. Tamb é pots canviar aquestos
valors desde /proc (/proc/sys/net, crec). Mira la pàgina del man de proc
per a més detalls.



hostname mybox.domain.com

6. Configuració dels paquets





En primer lloc instal·lem els següents paquests:




apt−get install console−data kbd console−common








Després configurarem el teclat.


dpkg−reconfigure console−data kbd




Es important que seleccionem la nostra varietat de teclat, que seleccionen qwerty com a keyboard layout, Spanish com a key layout, estandar com a variant i estandar com a specific keymap.
 

Ara acabarem de configurar la xarxa. Si no coneixes la informació, simplement obrir una segona sessió i mira els fitxer rellevants (En l’entorn original, no en el chroot).
 

Debian té un fitxer que no es troba en altres distribucions. El fitxer /etc/network/interfaces i presenta una sintaxi molt simple. La que proporcione
funciona be. Assegurat de canviar les adreces IP com es mostra més avall.


Necessitaras fer una configuració diferent si la IP es dinàmica. Hi ha
documentació en les manpages de Debian. La ordre man interfaces aportarà aquesta documentació. Deuria estar disponible en el chroot.
 

Configurem el fitxer /etc/network/interfaces:
  
cat > /etc/network/interfaces << ”EOF”
> #The loopback interface
> auto lo
> iface lo inet loopback
>
> # The first networkcard
> auto eth0
> iface eth0 inet static
> address 207.44.214.88
> netmask 255.255.254.0
> network 207.44.214.0
> broadcast 207.215.255
> gateway 207.44.214.1
> EOF
 

Es pot obtenir tota aquesta informació obrint un altre shell fora del chroot. Les següents ordres ajudaran a obtindre la adreça IP, la m+ascara de la subxarxa, la xarxa, la adreça de broadcast i la porta d’enllaç.



eth0    Link encap : Ethernet  HWaddr 00:01:80:31:81:AD
        inet addr:207.44.214.88 Bcast:207.44.215.255 Mask:255.255.254.0
        UP BROADCAST MULTICAST MTU:1500 Metric:1
...  ...  ...



La segona linea té la informació rellevant, amb IP, Broadcast i Màscara de subxarxa en aquest ordre. La resta de la informació la podem obtenir amb route -n.


Kernel IP routing table
Destination  Gateway                
Genmask        Flags  Metric Ref Use Iface 
207.44.214.0 0.0.0.0                 255.255.254.0  U      0      0   eth0
127.0.0.0    0.0.0.0                 255.0.0.0      U      0      0       lo
default      207.44.214.1   0.0.0.0        UG     0      0       eth0



La primera IP de destinació en la eth0 es la Xarxa, normalment serà la teua IP amb un 0 en l’ultim quartet. La porta d’enllaç ̧ es mostra en la columna “Gateway” i en la fila “default”.
Arribats a aquest punt procedirem amb la configuraci ́ de la fus horari.

Tecleja les següents ordres. La primera s’encarrega de la configuració del
rellotge UTC i la segona de la propia configuració del Fus horari.



tzselect
tzconfig


Després configurem les fonts dels apt. Hi ha que configurar el fitxer sources.list situat en /etc/apt i habilitar les actualitzacions de seguretat i totes les actualitzacions the main contrib i non-free.
 

A continuació configurem el password de l’usuari root.


passwd

Per a evitar entrar com a root al sistema creem qualsevol nombre d’usuaris que necessitem.
adduser −−home /home/usuari −−shell /bin/bash −uid 1000 −ingroup operator usuari

Ara ja es possible utilitzar apt. Primer instal·larem uns paquets que ens
seran utils després.
apt−get install less vim wget netselect netselect−apt deborphan

Executem deborphan i després eliminem els paquests que s’han quedat
orfes amb apt-get remove.

Una volta instal·lats aquestos programes ens assegurem de quin es el millor
mirror i creem un sources.list nou.

cd /etc/apt
netselect−apt etch

Editem el fitxer i ens assegurem que estan activades les actualitzacions de seguretat. Arribats a aquest punt es important acutalitzar la distribuci ó perva que estiga tot el programari actualitzat.

apt−get update; apt−get upgrade









Instal·lem ssh per a poder accedir al sistema posteriorment.





apt−get install ssh

Configurem els locals.

apt−get install locales
dpkg−reconfigure locales

Ara es el moment d’instal·lar un kernel. La següent ordre mostrarà els kernels disponibles. SMP s'utilitza per a multiprocessadors (com els Xeon). S’instala amb apt-get intall

apt−cache search linux−image | less
Bàsicament elegeix la versió més actualitzada. Que en el nostre cas sera 2.6.X:X.

apt−get install linux−image



Es important que no reiniciem l’ordinador encara per tant hi que contestar
que no al reinici i evitar la instal·lació del grub ja que s’instalaria mal des d’un
chroot.

Podem instal·lar discover i executar-lo fora del chroot per a veure quin
software tenim i quins moduls hi ha que carregar per a que funcione correc-
tament.

Eixim del chroot i seguirem amb la configuració del grub.

logout

7. Configuració del kernel per al reinici




Copiem el kernel i la imatge d’initrd (si existeix) a la partició de boot. Realitzarem una copia dels que prèviament hem instal·lat.

cp $LFS/boot/vmlinuz−∗ /boot
cp $LFS/boot/initrd.img−∗ /boot



Editem el /boot/grub/menu.lst.

default saved
timeout 5
fallback 1
title DebianNet
root (hd0,0)
kernel /boot/vmlinuz−2.6.18.5−686 root=/dev/hda2 panic=60
initrd /boot/initrd.img−2.6.18−5−686
savedefault fallback
boot

title Ubuntu, kernel 2.6.12−9−386
root (hd0,0)
kernel /boot/vmlinuz−2.6.12.9−386 root=/dev/hda1 ro quiet splash
initrd
/boot/initrd.img−2.6.12−9−386
savedefault
boot

Amb grub-set-default 0 defineixes en el grub el default inicial. S’ha
d’anar molt en compte ja que el fallback prevaleix sobre el default. Si el
default es 0 i el fallback es 1 accedira al fallback.



8. Primer Reinici

Una volta realitzada tota la configuració bàsica reiniciem. Hi ha que assegurar-se molt be que tot el realitzat anteriorment es correcte.  Reinicem!!!

shutdown −r now


Amb sort ... hauriem de tenir instal·lat el sistema base de Debian.
 

Espera uns minuts el reinici, i entra via ssh a la IP que hem configurat prèviament. Hauriem de ser capaços de poder utilitzar ambdos contes, el d’usuari i el de root, que prèviament hem creat.
 

Si no reinicia el següent reinici després de 10 minuts t’hauria de portar al sistema que hi havia configurat prèviament.


9. Particionat del disc

En aquest moment creem les particions que necessitem. En el nostre cas
aquestes seran les següents:


/ on instal·larem tot el sistema
• swap on esta la debian instalada actualment
/home
/tmp
/var/www
•  /var/cache/apt/


Per a particionar el disc utilitzarem la utilitat fdisk tal i conforme l’hem utilitzat anteriorment. Recorda que només estem canviant la taula de particions i no modifiquem la partició en si.

Una volta canviada la taula de particions aquesta no sera efectiva fins que reiniciem per tant preparem el sistema per a reiniciar.
 

En primer lloc instal·lem grub.

apt−get install grub


Una volta instal·lat el grub el fem permanent amb:


grub−install /dev/hda

Revisem el directori /boot/grub/menu.lst i si aquest no està el creem
utilitzant el mateix que hem utilitzat abans en la secció 7.
 

Una volta instal·lat correctament el gestor d’arranc reiniciem per a que els canvis de la taula de partions siguen permanents.
 

10. Formatejant les noves particions



Una volta ja hem reiniciat i la nova taula de particions del sector d’arranc
està ja activa, procedim al formateig de les noves particions.
 
mkfs.ext3 /dev/hda2
mkfs.ext3 /dev/hda3 
mkfs.ext3 /dev/hda5
mkfs.ext3 /dev/hda6 
mkfs.ext3 /dev/hda7

Una volta estan formatejades totes les particions procedim a la copia del sistema a la seua partició. La partició que rep la copia ha de ser igual o major o fallar la execució de les ordres de comprobació que expliquem just després.
 

dd if=/dev/hda1 of=/dev/hda2 bs=1024


Una volta finalitzada aquesta ordre. Pot costar uns minuts. Seguim amb un xequeig del sistema. Hi ha que xequejar tantes vegades com faça falta fins arribar a una exida sense errors. Fins que no s’aconsegueixca açò no executar l’ordre següent. 

e2fsck −f /dev/hda2


Una volta aquesta eixida ja no ens mostra errors, procedim amb una compactació i un canvi de mida de les dades copiades anteriorment amb dd.
  
resize2fs −p /dev/hda2
Quan aquesta ordre finalitze procedim a realitzar successius xequejos del sistema de fitxers fins que aquest siga completament correcte.


e2fsck −f /dev/hda2





  
Quan finalitze aquesta ultima ordre sense errors, montem la partició per a assegurar-se que no hi ha errors.

mount −t auto /dev/hda2 /mnt



Accedim al fitxer /mnt/etc/fstab i canviem la partició que allotjarà la barra per la que acabem de copiar.

#filesystem  mount−point  fs-type options  dump fsck-order

/dev/hda2    /            auto   defaults  0    1
proc         /proc        proc   defaults  0    0

Tambe editem el menu del grub situat en /boot/grub/menu.lst per a que
quede com a si s’indica.


default 0
timeout 5

title DebianNet
root (hd0,0)
kernel /boot/vmlinuz−2.6.18.5−686 root=/dev/hda2
initrd /boot/initrd.img−2.6.18−5−686
savedefault
boot

Una volta configurat el grub reiniciem.


11. Modificació del fstab

Editem el fitxer /etc/fstab per a que continga les següents entrades:



#filesystem  mount−point    fs-type options  dump fsck-order

/dev/hda1    none           swap   sw        0    0
/dev/hda2    /              auto   defaults  0    1
/dev/hda3    /home          auto   defaults  0    2
/dev/hda5    /tmp           auto   defaults  0    3
/dev/hda6    /var/cache/apt auto   defaults  0    4
/dev/hda7    /var/www       auto   defaults  0    5   
proc         /proc          proc   defaults  0    0

Montem la partició hda3 i copiem el contingut actual de /home a la nova partició, borrem el contingut de /home i desmonetem la partició.

mount −t auto /dev/hda3 /mnt
cp −r /home/∗ /mnt
rm −r /home/∗
umount /dev/hda3

Montem la partició hda5 per a assegurar-nos que funciona correctament. A
continuació montem la partició hda6 i copiem el contingut de /var/cache/apt,
borrem el contingut de /var/cache/apt i desmonetem la partició.

mount −t auto /dev/hda6 /mnt
cp −r /var/cache/apt/∗ /mnt
rm −r /var/cache/apt/∗
umount /dev/hda6

Creem un directori /var/www

mkdir /var/www

Per ultim habilitem el swap amb:


mkswap /dev/hda1
swapon −a

Arribats a aquest punt ja tenim la Debian instal·lada,

12. Referencias

[1] Erik Jacobson Howto - Install Debian Onto a Remote Linux System http://www.underhanded.org/papers/debian-conversion/remotedeb.html
[2] http://www.linuxfromscratch.org/lfs/downloads/
[3] http://www.debian.org/releases/stable/i386/ch-preparing.en.html#s-linux-upgrade (BROKEN)
[4] http://www.gnu.org/software/grub/manual/legacy/Booting-fallback-systems.html
[5] Howto Remote Kernel Upgrade http://www.gentoo-wiki.info/HOWTO_Remote_Kernel_Upgrade