jueves, abril 09, 2015

SELINUX Rapido - Fedora 21


Configuración fedora


/etc/sysconfig/selinux
 

Estado


# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      29

SELinux status:                 enabled

Modos

enforcing: Fuerza la aplicación de la politica SE. Deniega acceso y loguea las operaciones.permissive: No deniega acceso, solo emite avisos. Se usa para depurar problemas con SE.
disabled: SELinux deshabilitado.

Politicas


SELinux permite varias políticas diseñadas para ser intercambiables.

Se puede ver las instaladas con:

# rpm -qa | grep selinux-policy
selinux-policy-3.13.1-105.9.fc21.noarch
selinux-policy-targeted-3.13.1-105.9.fc21.noarch

Estan instaladas en /etc/selinux// .

En Fedora la política por defecto es targeted.

En esta política todo corre sobre el dominio unconfined_t, excepto para ciertos demonios específicos. Los objetos en unconfined_t no tienen restricciones y equivalen a los accesos de Unix estandar (DAC).

Herramientas para modificar la política

audit2allow

Permite modificar reglas de la política basado en el log de auditoría.

Documentacion audit2allow en CentOS 5

Booleans

Permiten modificar el comportamiento de la política sin necesidad de recompilar la misma.

Documentacion Booleans en CentOS 5

Control de acceso

SELinux tiene tres modos de acceso:
  
Type Enforcement (TE): Es el mecanismo primario usado en la  targeted 

Role-Based Access Control (RBAC): Basado en usuarios SELinux que no necesariamente coinciden con los usuarios del sistema no se usa en la politica targeted

Multi-Level Security (MLS): No usada habitualmente y oculta a veces en la politica targeted


De los procesos y ficheros se pueden ver con los comandos habituales y la opción (-Z) los campos del contexto de seguridad:

Ver procesos:

# ps -eZ | grep httpd
system_u:system_r:httpd_t:s0      889 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     1255 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     1256 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     1257 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     1258 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     1259 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     3126 ?        00:00:00 httpd
system_u:system_r:httpd_t:s0     3811 ?        00:00:00 httpd

# ps -eZ | grep bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 2826 pts/0 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 3626 pts/0 00:00:01 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 7524 pts/1 00:00:00 bash

Ver ficheros:

# ls -Z /etc/passwd
-rw-r--r--. root root system_u:object_r:passwd_file_t:s0 /etc/passwd

Estos campos estan basados en user:role:type:mls, en los ejemplos el campo mls esta oculto. En la politica targeted el campo mas importante es el type.

El acceso solo esta permitido entre tipos similares.

Modificacion de contexto de seguridad

Añadimos el directorio R_Tutorial a nuestro arbol del servidor http, pero este no tiene acceso, revisamos los permisos y vemos que el campo type no es correcto:

www # ls -Z
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 ProGit2.0
drwxrwxr-x. root root unconfined_u:object_r:user_home_t:s0 R_Tutorial

Cambiamos el contexto:

 chcon -Rv --type=httpd_sys_content_t R_Tutorial/

Verificamos que ya accedemos correctamente:

www # ls -Z
drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 ProGit2.0
drwxrwxr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 R_Tutorial




martes, julio 08, 2014

Linux: Ver que RPM instalados son los que más ocupan

¿Como averiguar que rpm instalados son los que mas ocupan?

Usamos la opción "queryformat" del comando rpm:

# rpm -qa --qf '%{SIZE} %{NAME}-%{VERSION}-%{RELEASE}%|ARCH?{.%{ARCH}}|\n'  | sort -n | tail

Con esta opción podemos sacar mucha información, para saber los TAGS disponibles usaremos el comando:

# rpm --querytags



miércoles, diciembre 04, 2013

Transmission: Configurar Daemon en fedora 19


Este tutorial está basado en el manual que publicó Daniel Gibbs para fedora 17 :

Comenzamos instalando el demonio de transmission:
# yum install transmission-daemon

Y los clientes remotos:

# yum install transmission-remote-cli
# yum install transmission-remote-gtk

También nos ayudará instalar el cliente GTK normal para crear un fichero de configuración. Los ficheros de configuración son comunes para todas las versiones del software (gtk, qt, cli, daemon):

# yum install transmission-gtk

La configuración puede realizarse a mano pero es más cómodo empezar con una configración pre creada desde el GUI especificando los puertos que queremos y demás parámetros una vez creada la podemos copiar al directorio por defecto donde Fedora pone la configuración del demonio:

# rpm -ql transmission-daemon
...
/var/lib/transmission

Si lo configuramos previamente con el cliente GTK tendremos una config válida en el $HOME/user que habremos modificado al gusto:

# ll /home/user/.config/transmission/

drwxrwxr-x.   blocklists
drwxrwxr-x.   resume
-rw-------.          settings.json
-rw-------.          stats.json
drwxrwxr-x.   torrents

Antes arrancamos el demonio para que genere una configuración automática:

# systemctl start transmission-daemon.service
# systemctl stop transmission-daemon.service

Copiamos la config al directorio del Daemon:

# cp /home/user/.config/transmission/settings.json /var/lib/transmission/.config/transmission
# chown transmission:transmission /var/lib/transmission/.config/transmission/settings.json

Y la editamos al gusto:

- Añadimos la blocklist recomendada por Daniel (info) no tengo mucha info sobre el tema así que dejo la recomendada:

"blocklist-url": "http://list.iblocklist.com/?list=bt_level1&fileformat=p2p&archiveformat=gz",

- Modifico los directorios de descargas:

"download-dir": "/misc/btorrent/download",
"incomplete-dir": "/misc/btorrent/download",
"recent-download-dir-1": "/misc/btorrent/download",
"recent-download-dir-1": "/misc/btorrent/download",

- Configuro el puerto de p2p:

"peer-port": 12345,

 - Configuro opciones RPC para habilitar el cliente Web embebido:

    "rpc-authentication-required": true,
    "rpc-bind-address": "0.0.0.0",
    "rpc-enabled": true,
    "rpc-password": "password",                                        
    "rpc-port": 9091,
    "rpc-url": "/transmission/",
    "rpc-username": "user",
    "rpc-whitelist": "127.0.0.1",
    "rpc-whitelist-enabled": true,

Arrancamos:

# systemctl start transmission-daemon.service

Verificamos:

# ps -ef | grep transmis
transmi+  3781     1  0 23:43 ?        00:00:00 /usr/bin/transmission-daemon -f --log-error

Vemos que no arrancaron correctamente los puertos P2P:

# lsof -a -i -n -P -p 3781
COMMAND    PID         USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
transmiss 3974 transmission    9u  IPv4 1159896      0t0  TCP *:9091 (LISTEN)
transmiss 3974 transmission   10u  IPv4 1159897      0t0  TCP *:12345 (LISTEN)
transmiss 3974 transmission   11u  IPv6 1159899      0t0  TCP *:12345 (LISTEN)
transmiss 3974 transmission   12u  IPv4 1159900      0t0  UDP *:12345

Probamos la interfaz web:

http://localhost:9091/

Ojo, al arrancar verifica que la password (rpc-password) está en claro y la cambia por un hash, para modificar la contraseña se pone la contraseña que deseemos y al arrancar la volverá a encriptar.



-



martes, diciembre 03, 2013

Linux jukebox 6th round: Montando todo en USB

Usaremos el USB del 1st round, de tal manera que podamos arrancar con dsl o con slitaz en función de la necesidad usaremos YUMI añadiendo la ISO generada, slitaz es una de las distribuciones reconocidas por el gestor de arranque por lo que la añade sin problemas.

Verificamos que arranca correctamente pero no coje la configuración de lenguaje, montamos el USB y modificamos a mano el fichero Z:\multiboot\menu\slitaz.cfg :

# Simple Menu Created by Lance http://www.pendrivelinux.com for YUMI - (Your USB Multiboot Installer)
menu title Slitaz Boot Menu
menu background yumi.png
MENU TABMSG http://www.pendrivelinux.com
MENU WIDTH 72
MENU MARGIN 10

MENU VSHIFT 3

MENU HSHIFT 6
MENU ROWS 15

MENU TABMSGROW 20
MENU TIMEOUTROW 22
menu color title 1;36;44 #66A0FF #00000000 none

menu color hotsel 30;47 #C00000 #DDDDDDDD

menu color sel 30;47 #000000 #FFFFFFFF
menu color border 30;44 #D00000 #00000000 std
menu color scrollbar 30;44 #DDDDDDDD #00000000 none

default live


label live

menu label ^Run Slitaz from this USB

kernel /multiboot/slitaz/boot/bzImage

append initrd=/multiboot/slitaz/boot/rootfs.gz rw root=/dev/null vga=normal autologin lang=en kmap=es



MENU SEPARATOR
label <-- Back to Main Menu

kernel vesamenu.c32

append /multiboot/syslinux.cfg


Aún nos quedan algunos pasos:

Sistema:
- Datos persistentes
- Samba
- UPnP

Jukebox:
- Interfaz web más productiva.
- Interfaz para dispositivos moviles
- Interfaz gráfica ¿?
- Conexión a bbdd (freedb, musicbrainz, etc)

Ampliaciones:
- Convertir jukebox en mediacenter
- Convertir mediacenter en consola juegos (emuladores)






Linux jukebox 5th round: Hacking slitaz

Una vez generada la ISO y viendo que cumple las funcionalidades básicas empezamos a realizar modificaciones en la misma para personalizarla.

Primero borramos la iso generada:

# cd distro
# rm slitaz-base.iso

Realizamos las modificaciones:

1. Configuración idioma y teclado, arrancará con la configuració por defecto en lugar de preguntar:

# cd jukebox/distro/rootcd/boot/isolinux/
# vi isolinux.cfg
display isolinux.msg
label slitaz
kernel /boot/bzImage
append initrd=/boot/rootfs.gz rw root=/dev/null vga=normal autologin lang=en kmap=es

include common.cfg

2. Añadimos los clientes web:

# cd jukebox/distro/rootfs/var/www/
# tar -xzvf /home/tux/phpmpreloaded-1.1c.tar.gz
# tar -xzvf /home/tux/relaxx-070.tar.gz

3. Añadimos demonios en arranque (mpd lighttpd dropbear):

# cd jukebox/distro/rootfs/etc
# vi rcS.conf

RUN_DAEMONS="dbus hald firewall slim mpd lighttpd dropbear"

Como mpd no tiene un script en init.d debemos añadirlo:

# cd jukebox/distro/rootfs/etc/init.d

# cat mpd

#!/bin/sh
# /etc/init.d/lighttpd: Start, stop and restart web server on SliTaz,
# at boot time or with the command line. Daemons options are configured
# with /etc/daemons.conf
#
. /etc/init.d/rc.functions
. /etc/daemons.conf

NAME=mpd
DESC="music player daemon"
DAEMON=/usr/sbin/mpd
OPTIONS=$MPD_OPTIONS
PIDFILE=/var/run/mpd.pid
KILL_OPTION=--kill

case "$1" in
start)
if [ -f $PIDFILE ] ; then
echo "$NAME already running."
exit 1
fi
echo -n "Starting $DESC: $NAME... "
$DAEMON $OPTIONS
status
;;
stop)
if [ ! -f $PIDFILE ] ; then
echo "$NAME is not running."
exit 1
fi
echo -n "Stopping $DESC: $NAME... "
$DAEMON $KILL_OPTION
rm $PIDFILE
status
;;
restart)
if [ ! -f $PIDFILE ] ; then
echo "$NAME is not running."
exit 1
fi
echo -n "Restarting $DESC: $NAME... "
$DAEMON $KILL_OPTION
rm $PIDFILE
sleep 2
$DAEMON $OPTIONS
status
;;
*)
echo ""
echo -e "\033[1mUsage:\033[0m /etc/init.d/`basename $0` [start|stop|restart]"
echo ""
exit 1
;;
esac

exit 0

4. Añadimos el usuario tux usamos chroot para ello:

# cd jukebux/distro/rootfs
# chroot .
root@slitaz:/# adduser tux
adduser: /home/tux: File exists
Changing password for tux
New password:
Bad password: too short
Retype password:
Password for tux changed by root
root@slitaz:/# exit
# cd jukebox/rootfs/home/tux
# mkdir .mpd
# mkdir .mpd/playlists
# mkdir music
# cd jukebox/rootfs/home
# chown -R tux:tux tux

Hay que añadir el usuario al grupo audio:

# cd jukebox/rootfs/etc
# vi group
audio:x:20:tux

Regeneramos el rootfs:

# rm jukebox/distro/rootcd/boot
# cd jukebox/distro/rootfs
# find . -print | cpio -o -H newc | gzip -9 > ../rootcd/boot/rootfs.gz

Por último generamos la iso:

# tazlito gen-iso

Linux jukebox 4th round: Web client

Vamos a instalar y configurar el cliente web, los clientes web disponibles para mpd son PHP por lo que precisaremos un servidor con soporte de este lenguaje.

Probamos lighttpd ya que el consumo de memoria y CPU son menores que apache.

Instalamos lighttpd y sus módulos:
root@slitaz:/home/tux/jukebox# tazpkg get-install lighttpd
root@slitaz:/home/tux/jukebox# tazpkg get-install lighttpd-modules
root@slitaz:~# tazpkg get-install php

Probamos el cliente phpMpReloaded que incluye varios clientes PHP:

# cd /var/www
# tar -xzvf /home/tux/phpmpreloaded-1.1c.tar.gz

Tambien probamos un cliente ajax relaxx con una interfaz mas depurada:
# cd /var/www
# tar -xzvf /home/tux/relaxx-070.tar.gz

Problemas:
- Los clientes web en local solo conectan cuando esta en play ¿?. Sin embargo, si el cliente web está en otro host funciona correctamente ¿?
- Relaxx no vé ciertos tipos de ficheros (.ogg) ¿?

A pesar de los problemas los añadimos a la distro (distro-packages.list) :

lighttpd-1.4.26
lighttpd-modules-1.4.26
php-5.2.11

Además añadimos soporte para ntfs ya que el disco externo está en ese form
ato de fs:

ntfsprogs-2.0.0

Añadimos tambien el cliente curses ncmpcpp:
ncmpcpp-0.5

Linux Jukebox 3rd round: Creando ISO SliTaz con mpd

La distribución bajada precisa 160Mb de RAM mínimos, vamos a intentar generar una primera versión básica usaremos la herramienta tazlito:

root@slitaz:~# tazlito list-flavors --recharge
Connecting to mirror.slitaz.org (94.23.60.116:80) - 100% |*************************************************************| 833 --:--:-- ETA List of flavors ================================================================================ Name ISO Rootfs Description ================================================================================ base 6.9M 13.1M Minimal set of packages to boot
core-3in1 31.5M 105.6M SliTaz core system with justx and base alternatives
core 26.0M 86.0M Core system with a full featured desktop.

firefox 29.0M 92.0M Small desktop Mozilla Firefox.

justx 29.0M 97.5M Very small desktop with X only

loram-cdrom-sqfs 30.0M 7.7M SliTaz loram system (/usr on cdrom)
loram-cdrom 88.1M 7.5M SliTaz loram system (/usr on cdrom) loram-http 7.0M 7.9M SliTaz loram system (/usr on web)
loram 30.0M 32.2M SliTaz loram system (all in RAM)

xvesa 29.0M 97.5M Core system with a full featured desktop (use tinyX server).


Creamos un arbol para crear la iso:

mkdir jukebox

mkdir jukebox/distro

mkdir jukebox/packages

Y generamos una configuración:

root@slitaz:/home/tux/jukebox# tazlito configure
Configuring : /home/tux/jukebox/tazlito.conf
================================================================================ ISO name : jukebox
Volume name : jkb Packages
repository : /home/tux/jukebox/packages

Distro path : /home/tux/jukebox/distro
================================================================================ Config file is ready to use. You can now extract an ISO or generate a distro.

A continuación bajamos un flavor:

tux@slitaz:~/jukebox$ tazlito get flavor base
Connecting to mirror.slitaz.org (94.23.60.116:80)

base.flavor 100% |*************************************************************| 11562 --:--:-- ETA Cleaning distro... [ OK ]
Extracting flavor base.flavor... Creating distro-packages.list... [ OK ]

Adding rootcd... Updating tazlito.conf... [ OK ]


Hacemos la primera prueba:

tazlito gen-distro

Arranca perfectamente en un entorno virtualizado con 128Mb de RAM, pero no tenemos X ni sonido, tenemos que añadir algunos paquetes adicionales.

Limpiamos la distro:

tazlito clean-distro

Empezamos con el sonido:

Podemos bajar el mpd al directorio packages:

root@slitaz:/home/tux/jukebox/packages# tazpkg get mpd

Mirar sus dependencias e ir bajando todas:

root@slitaz:/home/tux/jukebox/packages# tazpkg depends mpd

Pero es más rápido añadir el paquete mpc a la lista distro-packages.list y al regenerar la distro bajará todos los paquetes necesarios, añadimos algún paquete adicional.

echo alsa-utils-1.0.21
>> distro-packages.list
echo linux-sound-2.6.30.6 >> distro-packages.list
echo mpc-0.19 >> distro-packages.list


tazlito gen-distro

Vamos a probarlo, copiamos un mp3 y arrancamos mpd:

tux@slitaz:~$ mkdir .mpd
tux@slitaz:~$ mkdir .mpd/playlists

tux@slitaz:~$ mkdir .mpd/database
tux@slitaz:~$ mkdir .mpd/log

Descomentamos la linea del puerto:

port "6600"

Y recreamos la BBDD:

tux@slitaz:~$ mpd --create-db
output: No "audio_output" defined in config file

output: Attempt to detect audio output device
output: Attempting to detect a alsa audio device
output: Successfully detected a alsa audio device

Y listo, ya tenemos funcionando nuestro juke con mpd.

Aún faltan algunos pasos para tener algo funcional pero ya pita!.













Linux Jukebox 2nd Round: SliTaz + mpd

Tras el primer intento con éxito de montar el Jukebox con DSL y Xmms, la cosa se nos queda algo corta y queremos ir algo más allá.

Los requisitos nuevos son:

- Gestión a distancia del Jukebox: Usando un movil wifi como mando a distancia.
- Streaming de audio: Para poder crear un canal adicional.

Para esta ampliación probaré con mpd, este daemon no está incluido entre los paquetes de DSL así que para montar algo rápido buscamos una distribución que cubra los requisitos del 1er round, de momento probamos con SliTaz ya que incluye mpd/mpc entre sus paquetes.

SliTaz tiene unos requerimientos de memoria superiores a los requisitos especificados pero de momento vamos a montar una maqueta virtualizada para ver las necesidades finales y si el enfoque es el adecuado intentaremos "adelgazar" la instalación.

Probamos la maqueta en un entorno virtualizado arrancando la ISO y posteriormente la volcamos a disco virtual (256MB), SliTaz trae de serie una interfaz (SliTaz installer) que hace prácticamente todo:

1. Creamos la partición (asignamos todo el disco disponible y la marcamos como vfat).
2. Ejecutamos el instalador y le indicamos la partición, le indicamos que formatee con vfat.
3. Al reiniciar arrancaremos ya desde el disco nuevo, podemos verificar que los cambios son persistentes.

Tras la instalación comenzamos la instalación, primero actualizamos la lista de paquetes de los mirror:

tazpkg recharge

Y buscamos el paquete que nos interesa:

tazpkg list-mirror | grep mpd

Lo instalamos:

tazpkg get-install mpd
tazpkg get-install mpc


Listo, copiamos un disco para probar y tras trastear un poco con los controles de volumen ya pita:

tux@slitaz:~$ mpd
output: No "audio_output" defined in config file

output: Attempt to detect audio output device

output: Attempting to detect a alsa audio device

output: Successfully detected a alsa audio device


tux@slitaz:~$ mpc update
Updating DB (#1) ...

volume:100% repeat: off random: off single: off consume: off


tux@slitaz:~$ mpc listall

CoolJerks/1.SoulTeller.mp3

CoolJerks/2.ICantTurnYouLoose.mp3

CoolJerks/3.GoodOldMan.mp3
CoolJerks/4.YourSilhouette.mp3


tux@slitaz:~$ mpc listall | mpc add

tux@slitaz:~$ mpc playlist
CoolJerks/1.SoulTeller.mp3
CoolJerks/2.ICantTurnYouLoose.mp3
CoolJerks/3.GoodOldMan.mp3
CoolJerks/4.YourSilhouette.mp3

tux@slitaz:~$ mpc play

CoolJerks/1.SoulTeller.mp3

[playing] #1/4 0:00/2:20 (0%)

volume:100% repeat: off random: off single: off consume: off


tux@slitaz:~$ mpc next

CoolJerks/2. ICantTurnYouLoose.mp3
[playing] #2/4 0:01/2:18 (0%)

volume:100% repeat: off random: off single: off consume: off

Ok, parece que esto es lo que queremos, tenemos múltiples clientes ricos y web que nos permitirán gestionar nuestro juke de forma remota.



sábado, agosto 27, 2011

jueves, mayo 19, 2011

perl: Listado de módulos instalados

Se puede usar el comando "instmodsh" :

[root@localhost ~]# instmodsh
Available commands are:
l - List all installed modules
m - Select a module
q - Quit the program
cmd? l
Installed modules are:
App::cpanminus
CPAN::Meta
CPAN::Meta::YAML
ExtUtils::CBuilder
IPC::Cmd
JSON::PP
Locale::Maketext::Simple
Module::Build
Module::CoreList
Module::Load
Module::Load::Conditional
Module::Metadata
Params::Check
Parse::CPAN::Meta
Perl
Perl::OSType
Test::Simple
Version::Requirements
version

No se instala por defecto, en Fedora se encuentra en el paquete:

perl-ExtUtils-MakeMaker

miércoles, diciembre 01, 2010

Oracle: Espacio ocupado por un esquema

Consulta que obtiene el espacio ocupado por los objetos de la BBDD (agrupados):

SELECT
-- ds.tablespace_name TABLESPACE,
ds.segment_name TABLA,
NULL COLUMNA,
ds.segment_type TIPO,
SUM(ds.bytes) / 1024 KBYTES,
SUM(ds.blocks) BLOCKS,
SUM(ds.extents) EXTENTS
FROM dba_segments ds
WHERE ds.owner IN('ESQUEMA')
AND ds.segment_type NOT IN ('LOB PARTITION','LOBSEGMENT','INDEX PARTITION','INDEX','LOBINDEX')
GROUP BY
-- ds.tablespace_name,
ds.segment_name,
ds.segment_type
UNION
SELECT
-- ds.tablespace_name TABLESPACE,
dlp.TABLE_NAME TABLA,
dlp.column_name COLUMNA,
ds.segment_type TIPO,
SUM(ds.bytes) / 1024 KBYTES,
SUM(ds.blocks) BLOCKS,
SUM(ds.extents) EXTENTS
FROM dba_segments ds,
dba_lob_partitions dlp
WHERE ds.owner IN('ESQUEMA')
AND(dlp.lob_partition_name = ds.partition_name
AND ds.segment_type = 'LOB PARTITION')
GROUP BY
-- ds.tablespace_name,
dlp.TABLE_NAME,
ds.segment_name,
dlp.column_name,
ds.segment_type
UNION
SELECT
-- ds.tablespace_name TABLESPACE,
dl.table_name TABLA,
dl.column_name COLUMNA,
ds.segment_type TIPO,
SUM(ds.bytes) / 1024 KBYTES,
SUM(ds.blocks) BLOCKS,
SUM(ds.extents) EXTENTS
FROM dba_segments ds, dba_lobs dl
WHERE ds.owner IN('ESQUEMA')
AND (ds.segment_type = 'LOBSEGMENT'
AND dl.segment_name = ds.segment_name)
GROUP BY
-- ds.tablespace_name,
dl.table_name,
dl.column_name,
ds.segment_type
UNION
SELECT
-- ds.tablespace_name TABLESPACE,
di.TABLE_NAME TABLA,
ds.segment_name COLUMNA,
ds.segment_type TIPO,
SUM(ds.bytes) / 1024 KBYTES,
SUM(ds.blocks) BLOCKS,
SUM(ds.extents) EXTENTS
FROM dba_segments ds,
dba_indexes di
WHERE ds.owner IN('ESQUEMA')
AND(di.index_name = ds.segment_name
AND ds.segment_type IN ('INDEX PARTITION','INDEX','LOBINDEX'))
GROUP BY
-- ds.tablespace_name,
di.table_name,
ds.segment_name,
ds.segment_type ;

miércoles, abril 22, 2009

Oracle: Productos instalados

column COMP_ID format a10
column COMP_NAME format a40
column VERSION format a15
column STATUS format a7
column NAMESPACE format a10
column CONTROL format a7
column PARENT_ID format a10
column OTHER_SCHEMAS format a50
select * from dba_registry;

martes, abril 21, 2009

Oracle: Relación PROCESSES - SESSIONS - TRANSACTIONS (10g):

SESSIONS = (1.1 * PROCESSES) + 5
TRANSACTIONS = 1.1 * SESSIONS

martes, enero 29, 2008

WGET: Download "persistente"

A veces ocurre que tenemos que bajar algo muy grande y por temas de nuestra red interna o la red del proveedor se corta el download a la mitad.

Para evitar esto podemos usar wget pero ¿y si la página está protegida con usuario?, si esta protección usa cookies podemos usarlo con la opción --load-cookies y usando el navegador para generar una cookie válida tanto en Firefox como en IExplorer.

Suponemos que tenemos el fichero 10gr2_companion_hpi.zip que hemos comenzado a bajar desde otn.oracle.com con el navegador y ha fallado a los 200MB:

1. Estamos validados en OTN con usuario y contraseña en el navegador.
2. Copiamos o exportamos el fichero de cookies en el directorio de wget.
3. Copiamos la URL de la página web en el fichero otn.txt.
4. Ejecutamos el wget:

C:\> wget -c -i otn.txt -O 10gr2_companion_hpi.zip --no-check-certificate --load-cookies cookies.txt.ff

--09:23:47-- http://download.oracle.com/otn/hp/oracle10g/10201/itanium/10gr2_co
mpanion_hpi.zip
=> `10gr2_companion_hpi.zip'
Resolving download.oracle.com... 87.248.199.20, 87.248.199.22
Connecting to download.oracle.com|87.248.199.20|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 1.504.430.051 (1.4G), 1.292.714.171 (1.2G) remaining [application/zip]

39% [+++++========> ] 591.636.384 --.--K/s ETA 1:24:19

Y continua bajando desde el punto, en caso de que vuelva a cortarse, wget lo reintentará varias veces.

WGET: Uso de certificados.

A veces es necesario usar una herramienta off-line para la verificación de sitios https de forma remota o para bajarse ficheros de sitios protegidos con certificados.

Para este tipo de tareas la herramienta perfecta es, sin duda, wget. Existen versiones para Unix, VMS, Windows y MS-DOS con packet drivers.

El procedimiento para usarlo con certificados sería algo así (no esta totalmente verificado):

1. Escribimos la URL a la que queremos acceder la copiamos en el fichero testurl.txt


2. Suponiendo que estemos usando Unix y que tengamos el certificado en un fichero cert.pfx:

Primero debemos convertir el fichero cert.pfx en un fichero cert.pem:

openssl pkcs12 -in cert.pfx -out cert.pem -nodes

Del fichero cert.pem copiamos el certificado al fichero "cert":

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----

Y la clave al fichero "key":

-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----

3. A continuación ejecutamos la consulta con el wget:

$ wget -i testurl.txt --certificate=cert --private-key=key --no-check-certificate

--11:42:59-- https://sitio.com/miurl/objetivo.html
=> `objetivo.html'
Resolving sitio.com... 123.456.789.1
Connecting to sitio.com|123.456.789.1|:443... connected.
WARNING: Certificate verification error for sitio.com: self signed certificate in certificate chain
HTTP request sent, awaiting response... 200 OK
Length: 214 [text/html]

100%[===================================================>] 214 --.--K/s

11:42:59 (21.45 MB/s) - `objetivo.html' saved [214/214]


FINISHED --11:42:59-- Publicar entrada
Downloaded: 214 bytes in 1 files

Listo, si miramos en el fichero "objetivo.html" veremos la respuesta.

miércoles, enero 23, 2008

Oracle: Consultar parametros de sesion.

La tabla donde se incluyen los parámetros de sesión es la vista dinámica v$parameters, para poder consultarla sys tiene que darle permisos al usuario:

grant select on v_$parameter to usuario;

A partir de ese momento ya se pueden consultar los parámetros:

SQL> SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME = 'optimizer_mode' ;

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
optimizer_mode
CHOOSE

lunes, septiembre 10, 2007

Reiniciar Linux en caso de bloqueo

¿Que hacer cuando se nos bloquea nuestro Linux? Si el sistema está tan colgado que no funciona la opción de Control + Alt + Backspace ni podemos mover el ratón, antes de darle el botón de Reset que podría dañar seriamente tu sistema:

* Pulsa Alt+ ImprPantalla y mantenlos pulsados.
* Teclea RSEIUB y tu sistema se reiniciará, así de simple.

Aquí está lo que hace cada tecla con detalle:

* R devuelve el control al teclado.
* S sincroniza.
* E manda a los procesos la señal term.
* I manda a los procesos la señal kill.
* U desmonta los sistemas de ficheros.
* B reinicia el sistema.

Otra posible combinación de letras: REISUB.

La secuencia 'SysRq' sirve para poder realizar ciertas tareas elementales de mantenimiento de emergencia en un sistema Linux que ha dejado de responder. A menudo problemas en el hardware (chips de memoria defectuosos, bugs en los drivers, conflictos de IRQs, etc) hacen que el sistema se "congele". En estas situaciones lo más importante es ser capaz de prevenir daños mayores, como una corrupción del sistema de archivos al reiniciar. La secuencia 'SysRq' implica la pulsación simultánea de 3 teclas: la tecla ALT izquierda, la tecla 'SysRq' key (también etiquetada como 'PrtSc', 'ImprPantalla' o 'F13') y una letra. ALT r , por ejemplo, pone el teclado en modo 'raw'. Para apagar el sistema de forma segura, es importante presionar las letras en el orden correcto, sincronizando las unidades antes de desmontarlas, por ejemplo: Raw - tErm - kIll - Sync - Umount - reBoot : REISUB

Hay un nemotécnico sobre qué significan las siglas que dice: "Raising Elephants Is So Utterly Boring" (el cultivo de elefantes es completamente aburrido, en castellano).

No en todas las distribuciones viene activado el soporte de esta secuencia por defecto, por ejemplo en las basadas en RedHat, viene desactivado (CentOS, Fedora...). Para activarlo basta con cambiar en /etc/sysctl.conf la entrada kernel.sysrq y dejarla con valor 1, asi:

kernel.sysrq = 1

Guardamos cambios y ejecutamos "sysctl -p" para activarlos en la sesion actual.

Si el equipo que se cuelga es remoto o no tiene teclado, es posible instalar sysrqd, configurarle la contraseña de acceso y hacer un telnet..
# apt-get install sysrqd
# echo "mypassword" > /etc/sysrqd.secret && chmod 0600 /etc/sysrqd.secret
# /etc/init.d/sysrqd restart
Para acceder:
$ telnet equipo 4094
sysrqd password: mypassword
sysrq> s
sysrq> u
sysrq> b
Algunas opciones sobran... normalmente se puede pulsar: SUB

miércoles, noviembre 29, 2006

Oracle: ARCHIVELOG

Verificar el modo en que está la BBDD:

SQL> Select NAME, CREATED, LOG_MODE, CHECKPOINT_CHANGE#,
ARCHIVE_CHANGE# from V$DATABASE;

NAME CREATED LOG_MODE CHECKPOINT_CHANGE# ARCHIVE_CHANGE#
---- ----------------- ------------ ------------------ --------------
ORCL 05/21/97 17:55:06 NOARCHIVELOG 7.7174E+12 7.7174E+12

O bien:

SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /SIHGA/bd/test10g/archives
Oldest online log sequence 323
Next log sequence to archive 325
Current log sequence 325

Rotar un log:

SQL> ALTER SYSTEM SWITCH LOGFILE;

Habilitar archivado automático en el arranque:

LOG_ARCHIVE_START=TRUE

Habilitar archivado automático tras arracar:

Oracle 7.x y Oracle 8/8i:

SVRMGRL> ALTER SYSTEM ARCHIVE LOG START;

Oracle 9.x

SQL> ALTER SYSTEM ARCHIVE LOG START;

NOTE: En 9i, podemos usar un SPFILE en lugar del estandar pfile. El parámetro LOG_ARCHIVE_START esta deprecated con 10g.

SQL> alter system set log_archive_start=true scope=spfile;

Cambiar el modo de archivado:

Hay que configurar en el init.ora los parámetros:

LOG_ARCHIVE_START: Habilita el archivado automático.
LOG_ARCHIVE_DES: Indica el directorio donde se gurdaran los archive logs.
LOG_ARCHIVE_FORMAT: Indica el nombre de los archives.

Preparar la BBDD para el cambio de modo de archivado:

1. Parar la BBDD.
2. Hacer backup.
3. Operaciones de S.O. (opcional).
4. Arrancar la BBDD y montarla, no abrirla:

SQL> startup mount

Si estamos usando OPS o RAC debemos montarla solo una instancia para cambiar el modo de archivado.

5. Cambiar el modo de archivado.

Activarlo:

SQL> ALTER DATABASE ARCHIVELOG;

Desactivarlo:

SQL> ALTER DATABASE NOARCHIVELOG;

6. Abrir la BBDD.

SQL> ALTER DATABASE OPEN;

7. Verficar que esta en modo archivelog.

Oracle 7.x y Oracle8 / 8i

SVRMGRL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination for example: $ORACLE_HOME/dbs/arch
Oldest on-line log sequence 275
Next log sequence 277
Current log sequence 278

Oracle 9i/10g

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled Archive
destination for example: $ORACLE_HOME/dbs/arch
Oldest on-line log sequence 275
Next log sequence 277
Current log sequence 278

8. Archivar todos los archives hasta el momento.

SQL> ARCHIVE LOG ALL;

9. Asegurarse de que el procedimiento de backup está recogiendo los archives.

martes, noviembre 28, 2006

Oracle: Cambio de editor en SQLPlus, cambios permanentes.

Para cambia el editor en una sesión:

SQL> DEFINE_EDITOR=vi

En windows por ejemplo:

SQL> DEFINE_EDITOR=Z:\PUB\UTILIDADES\Sc1.exe

Para hacerlo permanente, editar el fichero GLOGIN.SQL. El fichero está en el directorio ORACLE_HOME\PLUS33 o bien en el directorio ORACLE_HOME\PLUS80, o bien en el directorio ORACLE_HOME\SQLPLUS\admin.

Añadir la línea:

DEFINE_EDITOR=Z:\PUB\UTILIDADES\Sc1.exe

Oracle: Como saber el NLS_LANG que está usando SQLPlus

En Unix:

SQL> HOST ECHO $NLS_LANG

En Windows:

SQL> HOST ECHO %NLS_LANG% > c:\borrame.txt

Si no está definido podemos consultar el valor que tiene por defecto (en el registro):

SQL> @.[%NLS_LANG%]

Nos dará algo como:

Unable to open file.[ENGLISH_UNITED KINGDOM.WE8ISO8859P1].

El nombre entre corchetes es el valor del parámetro del registro.

Si obtenemos un valor como:

Unable to open file ".[%NLS_LANG%]."

entonces el valor no existe tampoco en el registro.

El resto de los valores de NLS se pueden obtener con:

SELECT * FROM NLS_SESSION_PARAMETERS;

Los de la base de datos y la instancia respectivamente con:

SELECT * FROM NLS_DATABASE_PARAMETERS;
SELECT * FROM NLS_INSTANCE_PARAMETERS;