viernes, mayo 28, 2010

FreeBSD + MySQL

Requerimientos:

FreeBSD Instalado


Instrucciones:
1) Instalar MySQL desde los ports
# cd /usr/ports/databases/mysql50-server
# make install clean

2) Hacer que el MySQL se inicie con el sistema poniendo una linea en /etc/rc.conf como esta

# Activamos MySQL
mysql_enable="YES"

3) Iniciar MySQL para no tener que re-iniciar el servidor
# /usr/local/etc/rc.d/mysql-server start

4) Creamos el usuario administrador del gestor
# mysqladmin -u root password 'PASSWORDROOT'

Nota:
PASSWORDROOT se debe cambiar por una clave valida para el usuario root en MySQL
MyDB se debe cambiar por el nombre de la base de datos que requiero crear
usuario1 se debe cambiar por el nombre de usuario con el que se ingresara a DB
passusuario1 se debe cambiar por la clave que queremos para usuario1

5) Creamos la DB con su usuario correspondiente

# mysql -u root -p
Enter password: <- PASSWORDROOT
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15 Server version: 5.0.90 FreeBSD port: mysql-server-5.0.90 Type 'help;' or '\h' for help.
Type '\c' to clear the current input statement. mysql>

6) Crear la DB junto con el usuario y clave (todo de una)

CREAMOS DB utf8, permiso solo desde red clase "C", usuario y password, recargamos permisos
# mysql -u root -p
Enter password: <- PASSWORDROOT
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.0.90 FreeBSD port: mysql-server-5.0.90

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> CREATE DATABASE MyDB CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.01 sec)

mysql> GRANT ALL PRIVILEGES ON MyDB.* TO usuario1@'192.168.1.%' IDENTIFIED BY 'passusuario1';

Query OK, 0 rows affected (0.05 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> \q


Nota:

Esta permite conectar desde cualquier ip de la lan clase "C"
mysql> GRANT ALL PRIVILEGES ON MyDB.* TO usuario1@'192.168.1.%' IDENTIFIED BY 'passusuario1';

Con esta linea solo se permite conectar desde la ip 192.168.1.244
mysql> GRANT ALL PRIVILEGES ON MyDB.* TO usuario1@192.168.1.244 IDENTIFIED BY 'passusuario1';

7) Creamos la estructura (no se puede hacer si en el shell estoy como root)
$ mysql --user=root --password=PASSWORDROOT* MyDB < /tmp/dbiniciar.sql

8) Importamos los datos a la DB (no se puede hacer si en el shell estoy como root)
$ mysql --user=root --password=PASSWORDROOT* MyDB < /tmp/datos.sql

NOTA: Para borrar la DB que en este caso llamamos MyDB
# mysqladmin -u root drop MyDB -p
Enter password: <- PASSWORDROOT
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'MyDB' database [y/N]y

9) PRUEBAS CONEXION

REMOTA (desde un linux con mysql-client -> FreeBSD)

$ mysql -h 192.168.1.1 -u usuario1 MyDB -p
Enter password: <- passusuario1
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 522
Server version: 5.0.90 FreeBSD port: mysql-server-5.0.90

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \q
Bye

LOCAL (desde FreeBSD)

# mysql -u root MyDB -p
Enter password: <- PASSWORDROOT
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.0.90 FreeBSD port: mysql-server-5.0.90

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> \q
Bye

BACKUP A LA DB ACTUAL (NO SE PUEDE HACER COMO ROOT)
$ mysqldump --user=root --password=PASSWORDROOT MyDB | gzip > /tmp/MyDB.sql.gz

IMPORTAR BACKUP

DESCOMPRIMIR EL BACKUP
# cd /tmp
# gunzip MyDB.sql.gz

IMPORTAR LA DB DEL BACKUP (NO SE PUEDE HACER COMO ROOT)
$ mysql --user=root --password=PASSWORDROOT MyDB < /tmp/MyDB.sql

martes, mayo 25, 2010

FreeBSD + Squid-cache + squidGuard

Este resumen no está disponible. Haz clic aquí para ver la publicación.

martes, mayo 11, 2010

FreeBSD 8

Requerimientos:

Disco de instalacion de FreeBSD
Conexion a internet

Instalando:

Iniciar el equipo desde el cd

232 United States
OK

Standard Begin a standard installation (recommended)
[Select]

...fdisk...
OK

Would you like to keep using the current geometry?
YES

A = Use Entire Disk
Q = Finish

Standard Install a standard MBR (no boot manager)
OK

Now you need to create BSD partitions...
OK

C = Create
4096M
OK
FS A file system
OK
Please specify a mount point for the partition
/
OK

C = Create
2048M
OK
Swap A swap partition
OK

C = Create
8192M
FS A file system
OK
/var
OK

C = Create
(the resto of hd free)
OK
FS A file system
OK
/usr
OK

Q = Finish

----------------------------------------------
Ejemplo de particionado para un disco de 36GB SCSI

Part Mount Size Newfs Part
da0s1a / 4096MB UFS2 Y
da0s1b swap 2048MB SWAP
da0s1d /var 8192MB UFS2+S Y
da0s1e /usr 22528MB UFS2+S Y
----------------------------------------------

[X] 5 Kern-Developer Full binaries and doc, kernel soruces only
OK

<<< X Exit Exit this menu (returning to previous)
OK

Would you like to install the FreeBSD ports collection?
YES
OK
1 CD/DVD Install fron a FreeBSD CD/DVD
OK

Last Chance!
YES

Congratulations! You now have FreeBSD installed on your system.

/usr/sbin/sysinstall

OK

Would you like to configure any Ethernet or SLIP/PPP network devices?
YES

(si tenemos dos tarjetas, debemos tomar nota de los nombres, por ejemplo: sis0 y rl0)

sis0 SiS 900/SiS 7016 PCI Ethernet card
OK

Do you want to try IPv6 configuration of the interface?
YES

Do you want to try DHCP configuration of the interface?
YES

Host: pruebas.company.com
Domain: company.com
IPv4 Gateway: 192.168.1.1
Name server: 192.168.1.1
IPv4 Address: 192.168.1.108
Netmask: 255.255.255.0
OK

Do you want this machine to funtion as a network gateway?
NO

Do you want to configure inetd and the network services that it provides?
NO

Would you like to enable SSH login?
YES

Do you want to have anonymous FTP access to this machine?
NO

Do you want to configure this machine as an NFS server?
NO

Do you want to configure this machine as an NFS client?
NO

Would you like to customize your system console settings?
NO

Would you like to set this machine's time zone now?
YES

Is this machine's CMOS clock set to UTC? If ...
NO

2 America -- North and South
OK

13 Colombia
OK

Does the abbreviation 'COT' look reasonable?
YES

Does this system have a PS/2, serial, or bus mouse?
NO

The FreeBSD package collection is a ...
NO

Would you like add any initial user accounts...?
YES

User Add a new user to the system
OK

Login: myname
UID: 1001
Group:
Password: ******
Confirm Password: *******
Full name: My Full Name
Member groups:
Home directory: /home/myname
Login shell: /bin/sh
OK

X Exit Exit this menu (returning to previous)
OK

Now you must set the system manager's password
OK
New Password: ******
Retype New Password: ******

Visit the general configuration menu...?
NO

X Exit Install

Are you sure you wish to exit? The system will reboot
YES

(expulsa el disco de instalacion)

Be sure to remove the media fron the drive
OK

(se reinicia el equipo)

(al terminar de cargar, nos pide login y password en el shell)

FreeBSD/i386 (pruebas.company.com) (ttyv0)
Login: root
Password: ******

pruebas#

Nota:
FreeBSD por defecto solo permite conectar por SSH con usuarios normales, tampoco permite a los usuarios hacer 'su' por seguridad, por esto para permitirle a un usuario hacer 'su' hay que editar el archivo /etc/group

# edit /etc/group
---
wheel:*:0:root,angel
---
En nuestro ejemplo hemos agregado el login angel como se puede ver, los logins van separados por (,).

martes, mayo 04, 2010

FreeBSD + Network UPS Tools

Requerimientos:
FreeBSD Instalado

Manuales:
http://www.networkupstools.org/
http://people.freebsd.org/~thierry/nut_FreeBSD_HowTo.txt
http://opensource.mgeups.com/howto.htm#test-cfg

Otros manuales:
http://taquiones.net/sysadmin/nut.html
http://www.lissyara.su/articles/freebsd/programms/network_ups_tools/
http://www.usebox.net/jjm/ups-obsd/

/usr/local/share/doc/nut

Datos de la tarjeta SNMP en la UPS
http://www.ingrasys.com/Product/usha/pd_usha_1.aspx

1) Instalar el port nut
#cd /usr/ports/sysutils/nut
# cd make config

Solo activo las opciones
[ ] SERIAL
[ ] USB
[X] SNMP
[X] NEON
[ ] HAL
[X] IPV6
[ ] DEVEL
[ ] CGI

Guardar y salir

# make install clean

2) Crear los archivos de configuracion

# cd /usr/local/etc/nut/

# cp ups.conf.sample ups.conf
---
[myups]
driver = snmp-ups
port = 192.168.1.252
#cable = 1234
desc = "UPS Pinnacle Plus 10000T"
---

# cp upsd.conf.sample upsd.conf
---
LISTEN 127.0.0.1 3493
---
# cp upsd.users.sample upsd.users
---
[admin]
password = mypass
actions = SET
instcmds = ALL

[upsmon]
password = pass
upsmon master
MONITOR myups@localhost 1 monuser pass master
---

# cp upsmon.conf.sample upsmon.conf
---
MONITOR myups@localhost 1 monuser mypass master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
---

Asegurando un poco los archivos de configuracion
# chown root:uucp /usr/local/etc/nut/upsd.conf
# chmod 0640 /usr/local/etc/nut/upsd.conf
# chown root:uucp /usr/local/etc/nut/upsd.users
# chmod 0640 /usr/local/etc/nut/upsd.users

Por defecto parece que requiere un directorio cuando esta corriendo,
en el configure.txt lo comenta en el numeral 5
# mkdir -p /var/state/ups
# chmod 0770 /var/state/ups
# chown uucp:wheel /var/state/ups

Tambien requiere otro directorio en /var/db/nut/upssched para el upssched.conf (upssched.pipe y upssched.lock)
# mkdir /var/db/nut/upssched
# chown uucp:uucp /var/db/nut/upssched

3) Hacer que inicie con el sistema agregando en /etc/rc.conf las lineas
---
# Activamos Network UPS Tools
nut_enable="YES"
nut_upslog_enable="YES"
nut_upsmon_enable="YES"
---

4) Iniciar el servicio [sart|stop]
# /usr/local/etc/rc.d/nut start
---
Network UPS Tools - UPS driver controller 2.4.1
Network UPS Tools - Generic SNMP UPS driver 0.44 (2.4.1)
Detected Model 10K on host 192.168.1.252 (mib: ietf 1.3)
[myups] unhandled ASN 0x5 recieved from 1.3.6.1.2.1.33.1.2.3.0
[myups] unhandled ASN 0x5 recieved from 1.3.6.1.2.1.33.1.2.6.0
[myups] unhandled ASN 0x5 recieved from 1.3.6.1.2.1.33.1.4.2.0
Starting nut.
Network UPS Tools upsd 2.4.1
/usr/local/etc/nut/upsd.conf is world readable
listening on 127.0.0.1 port 3493
Connected to UPS [myups]: snmp-ups-myups
/usr/local/etc/nut/upsd.users is world readable
---

Hay que iniciar los otros dos
# /usr/local/etc/rc.d/nut_upsmon start
# /usr/local/etc/rc.d/nut_upslog start


5) Solicitar informacion de la ups
# upsc myups@localhost
---
battery.charge: 100.00
battery.runtime.low: 0
battery.temperature: 32.00
battery.voltage: 256.80
driver.name: snmp-ups
driver.parameter.pollinterval: 2
driver.parameter.port: 192.168.1.252
driver.version: 2.4.1
driver.version.internal: 0.44
input.current: 0.00
input.frequency: 60.00
input.phases: 1.00
input.quality: 34.00
input.voltage: 2060.00
output.current: 0.00
output.phases: 1.00
output.realpower: 0.00
output.voltage: 2300.00
ups.firmware: Ver P7.0
ups.firmware.aux: AlphaLink Card v4.26 (SN 1117027624120)
ups.load: 64.00
ups.mfr: UPS
ups.model: Model 10K
ups.power: 0.00
ups.serial:
ups.status: OL
ups.test.result:
---

Para ver como va la cosa
# tail -f /var/log/messages

http://opensource.mgeups.com/howto.htm#test-cfg

Nota:
Se cambio la parte original ups_name@localhost por myups@localhost

To view the list of available settable variables, use the following command:
upsrw myups@localhost

To set the low battery level (which trigger shutdown), use the following command:
upsrw -s battery.charge.low=20 -u admin -p mypass myups@localhost

To view the list of available settable variables, use the following command:
upscmd -l myups@localhost

To execute a battery test, use the following command:
upscmd -u admin -p mypass myups@localhost battery.test

Actualizacion:
Active la opcion [X] cgi y re-instale el port

# edit /usr/local/etc/apache22/httpd.conf
agrego las siguientes lineas:
---
<Directory /usr/local/www/nut>
AllowOverride Options FileInfo
Order deny,allow
Allow from all
</Directory>

<Directory /usr/local/www/nut/cgi>
Options ExecCGI
</Directory>

ScriptAlias /nut/cgi/ /usr/local/www/nut/cgi/
Alias /nut /usr/local/www/nut/
---

Por defecto el port crea los directorios

# ls /usr/local/www/cgi-bin/nut/
upsimage.cgi upsset.cgi upsstats.cgi

# ls /usr/local/www/nut/
bottom.html header.html index.html nut-banner.png

Pero aun no se como hacer en el httpd.conf para que el sitio este en un lugar y que se pueda ejecutar los .cgi que estan en otro!

Para solucionarlo, copiare el contenido de /usr/local/www/cgi-bin/nut/ en una carpeta que creare dentro de /usr/local/www/nut/cgi

# mkdir /usr/local/www/nut/cgi
# cp /usr/local/cgi-bin/nut/*.cgi /usr/local/www/nut/cgi

El codigo del archivo /usr/local/www/nut/header.html apunta a los .cgi , pero los hago apuntar dentro de /usr/local/www/nut/cgi

# edit /usr/local/www/nut/header.html

Asi quedaron las lineas ya modificadas

<a href=/nut/cgi/upsstats.cgi target=mainFrame>Statistics</a>

<a href=/nut/cgi/upsset.cgi target=mainFrame>Settings</a>

adicionalmente con la activacion de [X] CGI se crearon otros archivos dentro de /usr/local/etc/nut/

Aqui pongo el contenido de todos luego del cambio:

# egrep -v '#|^ *$' hosts.conf
MONITOR myups@localhost "My UPS"

# egrep -v '#|^ *$' nut.conf
MODE = none

# egrep -v '#|^ *$' ups.conf
[myups]
driver = snmp-ups
port = 192.168.1.252
desc = "My UPS"

# egrep -v '#|^ *$' upsd.conf
LISTEN 127.0.0.1 3493
LISTEN 192.168.1.1 3493 (esta es la ip fija que da a la lan)

# egrep -v '#|^ *$' upsmon.conf
MONITOR myups@localhost 1 upsmon pass master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

# egrep -v '#|^ *$' upssched.conf
CMDSCRIPT /usr/local/bin/upssched-cmd

# egrep -v '#|^ *$' upsset.conf
este no tiene nada activado

# egrep -v '#|^ *$' upsd.users
[admin]
password = mypass
actions = SET
instcmds = ALL
[upsmon]
password = pass
upsmon master
MONITOR myups@localhost 1 monuser pass master

copio un par de archivos .html.sample

# cp upsstats-single.html.sample upsstats-single.html
# cp upsstats.html.sample upsstats.html

Re-inicio el servicio

# /usr/local/etc/rc.d/nut restart

Para ver si la cosa del html funciona, ingreso a
http://ipdemiservidor/nut

Nota2:
Ya encontre la razon de que me diera errores al tratar de compartir los cgi del nut, la razon era una linea en el /usr/local/etc/apache22/httpd.conf
la linea que daba problemas era:
ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"

Si la desactivo con un #, puedo crear toda la entrada asi:
# Modificacion para Network UPS Tools inicio

# Para el sitio
<Directory /usr/local/www/nut>
AllowOverride Options FileInfo
Order deny,allow
Allow from all
</Directory>

<Directory /usr/local/www/nut/cgi>
Options ExecCGI
</Directory>

#ScriptAlias /nut/cgi/ /usr/local/www/nut/cgi/
Alias /nut /usr/local/www/nut/

# Notas:
# * Los CGI los pone en el directorio /usr/local/www/cgi-bin/nut
# * Para poder ejecutar los cgi en el directorio de instalacion, desactivo (#) una linea
# de arriba que dice:
# ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"
# ya que parece que no se requiere actualmente para nadie
#
# Para los CGI
<Directory /usr/local/www/cgi-bin/nut>
AllowOverride Options FileInfo
Order deny,allow
Allow from all
</Directory>

<Directory /usr/local/www/cgi-bin/nut>
Options ExecCGI
</Directory>

ScriptAlias /cgi-bin/nut/ /usr/local/www/cgi-bin/nut/
Alias /cgi-bin/ /usr/local/www/cgi-bin/nut/

# Modificacion para Network UPS Tools fin

Logicamente, con esta solucion ya no es necesario la carpeta /usr/local/www/nut/cgi y tampoco hay que poner a apuntar los links en /usr/local/www/nut/header.html a otros lugares.

Nota3:
Tambien tengo una ups de la marca CyberPower System

y para el FreeBSD 8 en el archivo de la ups tengo esto:
# egrep -v '#|^ *$' ups.conf
[CPS425SL]
driver = genericups
port = /dev/cuau0
upstype = 7
desc = "CyberPower Systems 425SL 425VA / CPS425SL"

Hay que anotar que en FreeBSD 8 el nombre de los COM cambio:
http://www.freebsd.org/releases/8.0R/relnotes-detailed.html

COM1 /dev/cuau0
COM2 /dev/cuau1

Hasta este punto, cuando la UPS llega al nivel critico de las baterias, apaga el servidor.

Otra opcion interesante es poder programar un apagado en el servidor luego de que la UPS esta agotando las baterias, por ejemplo luego de 60 segundos...

Para esto hay que usar upssched y agregarle unas lineas, aqui dejo las modificaciones:

# egrep -v '#|^ *$' /usr/local/etc/nut/upsmon.conf
MONITOR myups@localhost 1 upsmon pass master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
NOTIFYCMD /usr/local/sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONBATT "%s is on battery"
NOTIFYMSG ONLINE "%s is back online"
NOTIFYMSG LOWBATT "%s has a low battery!"
NOTIFYMSG SHUTDOWN "System is being shutdown!"
NOTIFYFLAG ONBATT SYSLOG+EXEC
NOTIFYFLAG ONLINE SYSLOG+EXEC
NOTIFYFLAG LOWBATT SYSLOG+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

# egrep -v '#|^ *$' /usr/local/etc/nut/upssched.conf
CMDSCRIPT /usr/local/bin/upssched-cmd
PIPEFN /var/db/nut/upssched/upssched.pipe
LOCKFN /var/db/nut/upssched/upssched.lock
AT ONBATT * START-TIMER ONBATT 60 <- los 60 seg
AT ONLINE * CANCEL-TIMER ONBATT
AT LOWBATT * EXECUTE LOWBATT
AT SHUTDOWN * EXECUTE SHUTDOWN

# egrep -v '#|^ *$' /usr/local/bin/upssched-cmd
case $1 in
ONBATT)
echo ONBATT TIMEOUT | mail -s "UPS Notify" reidrac
/usr/local/sbin/upsmon -c fsd
;;
LOWBATT)
echo LOWBATT | mail -s "UPS Notify" reidrac
;;
SHUTDOWN)
echo SHUTDOWN | mail -s "UPS Notify" reidrac
;;
*)
logger -t upssched-cmd "Unrecognized command: $1"
;;
esac

Re-inicio upsmon para que tome la nueva configuracion
# /usr/local/etc/rc.d/nut_upsmon restart