Planeta Sysadmin

de sysadmins para sysadmins

May 18, 2018

# rm-rf.es

Oracle VM Manager: Event queue is full. Drop new event …

En la versión 3.4.2 de Oracle VM, existe un bug que provoca que los jobs que ejecutemos desde la interfaz web de Oracle VM Manager se queden atascados y no terminen nunca. Además, la creación, borrado o clonado de máquinas virtuales tampoco funcionan.

Analizando el log del agente ovs-agent.log se observa que continuamente aparece una entrada similar a lo siguiente:

[2018-01-12 10:32:33 3700] WARNING (notificationserver:119) Event queue is full. Drop new event: {SERVER} {STATUS} {'timestamp': 1419241357C01L, 'lastBootTime': 1419241357C01L}
[2018-01-12 10:32:34 3700] WARNING (notificationserver:119) Event queue is full. Drop new event: {SERVER} {STATUS} {'timestamp': 1476369052402P, 'lastBootTime': 1469741057102P}

El problema como podéis ver es que la cola de eventos está llena, impidiendo el funcionamiento correcto de los jobs. La solución, en esta versión concreta (3.4)es únicamente reiniciar el agente en todos los servidores:

# service ovs-agent restart

Los agentes se pueden reiniciar sin problema, pues no afectará a las máquinas virtuales. En caso de que siguieras teniendo problemas, reinicia completamente Oracle VM Manager:

# service ovmm stop
# service ovmm start

by Alex at May 18, 2018 08:33 PM

soyadmin.com

Prueba

Mantenimiento de servidores:

SERVIDOR:
# Controlar tamaños de ficheros, mayores a 500MB dentro de /home /root /usr/local/apache/logs/
find . -type f -size +50000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

# Eliminar logs "rotados" dentro de:
/usr/local/cpanel/logs/archive

# Empezar a controlar con el MC carpetas perdidas y archivos raros dentro del /root, dentro del /home etc.

# Controlar Backups
# Repara y optimiza las bases mysql
mysqlcheck -r --all-databases
mysqlcheck -o --all-databases

# Borrar los temporales de analisis clamav
rm -fr /var/spool/exim/scan/*

# Limpiar la cache de yum ( /var/cache/yum/ )
yum clean all

# Borrar los temporales de logwatch
rm -fr /var/cache/logwatch/*

# Borra los archivos temporales de horde
rm -f /var/cpanel/horde/tmp/*
rm -fr /var/cpanel/horde/tmp/.horde/imp/attachments/*
[cc lang="bash"]
# Dentro de /tmp
# Clean up PHP temp. session files
ls | grep 'sess_*' | xargs rm -fv
# Clean up dead vBulletin uploads
ls | grep 'vbupload*' | xargs rm -fv
# Clean up trash left by Gallery2
ls | grep '[0-9].inc*' | xargs rm -fv
# Clean up failed php uploads
ls | grep 'php*' | xargs rm -fv
# Clean up failed ImageMagick conversions.
ls | grep 'magick*' | xargs rm -fv
[cc lang="bash"]
WHM:
# Chequear actualizaciones de:
WHM
SCRIPTS
PHP
APACHE
MYSQL

# Controlar avisos del Firewall

# Ver que todos los sitios esten dentro del cagefs

# Controlar versiones de php en easyapache

by Mauro at May 18, 2018 01:32 PM

May 16, 2018

Entre Dev Y Ops

Podcast 39: Entrevistas de trabajo

En el episodio 39 del podcast hablamos sobre las entrevistas de trabajo, tanto desde el punto de vista del entrevistado como del entrevistador.

May 16, 2018 09:00 PM

RooTeando

Tomando Un Café 32: Zenkit, organizando tus tareas

En el audio de hoy hablaré sobre la herramienta Zenkit, comentare mis primeros pasos en  esta, muy recomendable, herramienta. Como se instala y configura, también explicaré las funcionalidades que he utilizado y otras que he visto.  

Muy recomendable ver los siguientes tutoriales en video, para conocer mejor Zenkit.
https://zenkit.com/tutorials
Clientes disponibles
https://zenkit.com/apps

 Música: Blue Dot Sessions- The Balloonist-02 UpUpUp and Over http://freemusicarchive.org/
 

Canales de Telegram  ...

May 16, 2018 01:48 AM

May 15, 2018

soyadmin.com

¡Hola mundo!

Bienvenido a WordPress. Esta es tu primera entrada. Editala o borrala, ¡y comenzá a escribir!

by Mauro at May 15, 2018 08:13 PM

May 09, 2018

CloudAdmins.org

Barcelona Cloud Techday 24/5 : Especial OpenNebula y VMware

 https://opennebula.org/community/techdays/techday-barcelona-2018/

The OpenNebula Cloud TechDays are day-long educational and networking events to learn about OpenNebula.  Join our technical experts from OpenNebula by OpenNebula Systems for a one-day, hands-on workshop on cloud installation and operation. You’ll get a comprehensive overview of OpenNebula and will be equipped with the skills to take this back to your company and implement right away.

Sponsors

Local Organizer

CSUC, which stands for Consorci de Serveis Universitaris de Catalunya (Catalan Consortium for University Services), shares academic, scientific, library, transfer of knowledge and management services to associated entities to improve effectiveness and efficiency by enhancing synergies and economies of scale. It’s integrated by the Generalitat de Catalunya and ten Catalan universities (UB, UAB, UPC, UPF, UdL, UdG, URV, UOC, URL and UVic-UCC).

Location

The TechDay will be held at

CSUC
Gran Capità street, no number
CSUC Building
Barcelona, Spain

Contact: [email protected]

Call for Speakers

Send us an email at [email protected] if you are interested in speaking at this TechDay and:

  • Sharing cloud use cases and deployment experiences
  • Introducing new integrations and ecosystem developments
  • Describing other related cloud open-source projects and tools

Registration

The number of seats is limited  to ensure there is plenty of opportunity for everyone to interact. We encourage everyone to register as early as possible.

Agenda and Speakers

Agenda will include a hands-on cloud installation and operation tutorial, and presentations from OpenNebula community members and users. Send us an email at [email protected] if you are interested in speaking at this TechDay.

09:15 – 09:30: Check-in

09:30 – 09:35: Welcome to Open Cloud TechDay Barcelona

09:35 – 11:00: Session 1, OpenNebula Project

09:35 – 10:00: OpenNebula and VMware

Tino VázquezOpenNebula SystemsIntroduction to OpenNebula on  VMware.

10:00 – 10:30: LINBIT

TBD

10:30 – 11:00: Flexible infrastructures for future Cloud

Daniel Justicia,IT Product Manager – Huawei

11:00 – 11:30: Coffee & Soda

11:30 – 12:15: Session 2, OpenNebula Experiences

ONE Xperience at Facultat d’Informàtica de Barcelona

Daniel Sanchez,inLab UPC

ONE Tips & Tricks

Xavier Peralta,CSUC

ONE and Hybrid Cloud – Terraform

Cristina Jerez,iThinkUPC

Hybrid Clouds: Dancing with “Automated” Virtual Machines

Jordi Guijarro,CSUC

12:15-13:45: Hands-on Part I: OpenNebula in Action

Juan Montiel,OpenNebula Systems.This hands-on tutorial will give an overview of how OpenNebula is used to build and operate private clouds. The attendees will build, configure and operate their own OpenNebula cloud.

13:45 – 14:30: Lunch

14:30-16:30: Hands-on Part II: OpenNebula in Action

Contents

  • Configuration and basic usage
  • An introduction to cloud computing with OpenNebula
  • The architecture of the cloud
  • Planning and installing OpenNebula
  • Virtualization hosts management
  • Basic datastore configuration
  • Basic virtual network creation
  • VM Template creation & instantiation

Methodology

This is an interactive course, where the attendees operate on their own labs with a 3-node OpenNebula cloud, which are provided during the course. OpenNebula provides an abstraction layer on top of the infrastructure and technologies deployed in the datacenter. In order for the attendees to get the best understanding possible of OpenNebula as a whole, the labs used during the course make use of the most common open-source technologies that can be used to deploy an OpenNebula cloud. For example, the hypervisor technology used during the course will be KVM, shared file-system for storage, and regular linux bridges and linux firewall for networking. Other technologies supported by OpenNebula will be addressed and discussed as well.

Audience

The target audience is devops and system administrators interested in deploying a private cloud solution, or in the integration of OpenNebula with other platform.

Skills Gained

  • Describe the features and benefits of using virtualization and clouds
  • Describe different architectures for a cloud that can be deployed with OpenNebula
  • Deployment and basic configuration OpenNebula
  • Basic operation of an OpenNebula cloud instance

Prerequisites

No prior OpenNebula skills are required, but participants should have working knowledge of virtualization, networking and Unix/Linux systems.

Material

The instructor will rely on a set of PDF documents that will be explained throughout the course. These documents will be made available to the attendees right at the very beginning of the course. Attendees need a laptop to connect to their hands-on labs.

16:30: Open Space

This is a session for attendees to gather and discuss passionate questions, burning ideas, features, integrations or any topic of their choice, in an informal and tech-friendly environment, with other passionate and interested people.There is no preplanned list of topics, only time slots and a space in one of the meeting rooms where interested participants propose topics and pick time slots.

by Cloudadmin JordiGuijarro at May 09, 2018 09:26 AM

May 08, 2018

RooTeando

Tomando Un Café 31: Alternativas Raspberry

En el audio de hoy tendré un pequeña reflexión sobre la compra de una alternativa de una Raspberry Pi, porque son tan desconocidas para el gran público. Reflexiono los motivos principales porque se compra Raspberry y no cualquiera de su alternativas, y si son verdad o no.

Música: Kevin MacLeod-Blues Sampler-08 Slow Burn http://freemusicarchive.org

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython

Correo [email protected]
Twitter https://twitter.com/Tomando_Un_Cafe

RSS
Anchor.fm  http ...

May 08, 2018 01:50 AM

May 06, 2018

joseangelfernandez.es

Azure y los servicios disponibles por región en una tabla de Excel

Esta semana, revisando una de nuestras listas de distribución internas, he descubierto un interesante truco para tener de forma fácil en un fichero Excel el resumen de servicios disponibles en Azure por región. Cuando solo existían unas pocas regiones era fácil recordarlo; sin embargo, con casi 50 regiones disponibles en breve se ha vuelto prácticamente imposible.

Desde Excel 2010 existe una funcionalidad basada en PowerQuery que permite recuperar información desde diferentes fuentes de datos e incluirla directamente en una hoja de cálculo. En este caso, la que nos interesa es la opción de obtenerla desde una página web

Al mismo tiempo, Azure proporciona un listado de todos los servicios por región disponibles. La experiencia es bastante buena pero puede no ser suficiente si necesitas por algún motivo tener el listado en un fichero para consultar sin conexión. ¿Cómo resolverlo? Vamos allá.

En primer lugar, abrimos Excel y nos dirigimos a la pestaña de Data. Dentro de ella encontraremos la opción de Get Data > From Other Sources > From Web

Obteniendo información en Excel desde una WebObteniendo información en Excel desde una Web

Una vez seleccionado se abrirá el asistente que nos guiará en el proceso. En primer lugar será necesario copiar la dirección de la página web de Azure donde se encuentra el listado: https://azure.microsoft.com/en-us/global-infrastructure/services/ y pasar al siguiente paso. Esto iniciará el proceso de búsqueda de información disponible en dicha página web y nos permitirá previsualizarla.

Primer paso asistente de Excel para obtener datos desde una WebPrimer paso asistente de Excel para obtener datos desde una Web

De las dos opciones que encuentra, nos interesará la que aparece como Table 0. La seleccionamos y a continuación hacemos click en Load. Excel comenzará a analizar la página web y a extraer la información disponible. Mientras dura el proceso se nos mostrará lo siguiente:

Mensaje de información de carga y procesado de los datosMensaje de información de carga y procesado de los datos

Tras unos segundos, todo el contenido del portal de Azure aparecerá volcado dentro de nuestra hoja de cálculo listo para ser consumido o guardado.

Resultado de la carga de los datosResultado de la carga de los datos

El formato es por defecto no es muy atractivo visualmente; sin embargo, con unas pequeñas modificaciones en los datos y aplicando las opciones de formato condicional podemos tener una tabla mucho más fácil de consultar a simple vista.

Datos cargados con un formato más visualDatos cargados con un formato más visual

Si alguna vez lo necesitáis, ya tenéis un proceso rápido y sencillo para obtenerlo.

by jafernandez at May 06, 2018 05:50 PM

May 04, 2018

RooTeando

Tomando Un Café 30: Rock64, TeleX y ActivityWatch

En el audio de hoy trataremos sobre hardware, Rock64, y software, con las aplicaciones TeleX cliente de Telegram y Activity Watch,tracker de tiempo.

Grupo de Elav https://t.me/systeminsidegroup

Música: Dexter Britian- Creative Commons Volume 5-01 The Time To Run http://dexterbritain.bandcamp.com
 

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Correo [email protected]
Twitter https://twitter.com/Tomando_Un_Cafe

RSS
Anchor.fm  http://anchor.fm/s/18c0860/podcast/rss ...

May 04, 2018 11:07 AM

May 01, 2018

Entre Dev Y Ops

Píldora 3 - DevOps Barcelona

En esta tercera píldora del podcast, David y Daniel nos cuentan cómo vivieron la conferencia DevOps Barcelona; los demás les troleamos lo que podemos.

May 01, 2018 12:25 PM

April 30, 2018

# rm-rf.es

Comprobar el changelog de un paquete instalado (o a instalar) (RPM|YUM)

El registro de cambios​ (changelog) contiene un listado de cambios, nuevas funcionalidades, solución de bugs y vulnerabilidades, etc. aplicadas a un determinado paquete. A través de rpm podemos consultar el changelog de un paquete, para ello se utiliza la opción de query -q y --changelog. Ejemplo:

$ rpm -q --changelog kernel | more
* Sun Nov 10 2013 Rafael Aquini <[email protected]> [2.6.32-431.el6]
- [md] Disabling of TRIM on RAID5 for RHEL6.5 was too aggressive (Jes Sorensen) [1028426]

* Tue Nov 05 2013 Rafael Aquini <[email protected]> [2.6.32-430.el6]
- [x86] Revert "efi: be more paranoid about available space when creating variables" (Rafael Aquini) [1012370 1023173]
- [x86] Revert "efivars: firmware bug workarounds should be in platform code" (Rafael Aquini) [1012370 1023173]
- [x86] Revert "efi: Export efi_query_variable_store() for efivars.ko" (Rafael Aquini) [1012370 1023173]
- [x86] Revert "efi: Check max_size only if it is non-zero" (Rafael Aquini) [1012370 1023173]
- [x86] Revert "efi: Distinguish between "remaining space" and actually used space" (Rafael Aquini) [1012370 1023173]
- [x86] Revert "efi: Implement efi_no_storage_paranoia parameter" (Rafael Aquini) [1012370 1023173]
- [x86] Revert "Modify UEFI anti-bricking code" (Rafael Aquini) [1012370 1023173]
- [x86] Revert "efi: Fix dummy variable buffer allocation" (Rafael Aquini) [1012370 1023173]

* Sat Nov 02 2013 Rafael Aquini <[email protected]> [2.6.32-429.el6]
- [fs] revert xfs: prevent deadlock trying to cover an active log (Eric Sandeen) [1014867]

* Wed Oct 30 2013 Rafael Aquini <[email protected]> [2.6.32-428.el6]
- [fs] Revert "vfs: allow umount to handle mountpoints without revalidating them" (Rafael Aquini) [1024607]
- [fs] Revert "vfs: massage umount_lookup_last() a bit to reduce nesting" (Rafael Aquini) [1024607]
- [fs] Revert "vfs: rename user_path_umountat() to user_path_mountpoint_at()" (Rafael Aquini) [1024607]
- [fs] Revert "vfs: introduce kern_path_mountpoint()" (Rafael Aquini) [1024607]
- [fs] Revert "autofs4: fix device ioctl mount lookup" (Rafael Aquini) [1024607]
[...]

Si queremos consultarlo para un paquete que todavía no hemos instalado, lo podemos hacer con yum, utilizando el añadido yum-plugin-changelog:

# yum install yum-plugin-changelog
[...]
---> Package yum-plugin-changelog.noarch 0:1.1.31-45.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================================================================================================================================================================================================================
 Package                                                                          Arch                                                               Version                                                                   Repository                                                                      Size
====================================================================================================================================================================================================================================================================================================================
Installing:
 yum-plugin-changelog                                                             noarch                                                             1.1.31-45.el7                                                             rhel-7-server-rpms                                                              33 k

Transaction Summary
====================================================================================================================================================================================================================================================================================================================
Install  1 Package

Total download size: 33 k
Installed size: 40 k
[...]
Transaction test succeeded
Running transaction
  Installing : yum-plugin-changelog-1.1.31-45.el7.noarch                                                                                                                                                                                                                                                        1/1 
  Verifying  : yum-plugin-changelog-1.1.31-45.el7.noarch                                                                                                                                                                                                                                                        1/1 

Installed:
  yum-plugin-changelog.noarch 0:1.1.31-45.el7                                                                                                                                                                                                                                                                       
Complete!

Una vez, instalado, la sintaxis es la siguiente:

[[email protected] ~]# yum changelog openssh
Loaded plugins: changelog, langpacks, product-id, search-disabled-repos, subscription-manager

Listing all changelogs

==================== Installed Packages ====================
openssh-6.6.1p1-22.el7.x86_64            installed
* Fri Sep 25 14:00:00 2015 Jakub Jelen <[email protected]> 6.6.1p1-22 + 0.9.3-9
- Use the correct constant for glob limits (#1160377)

* Thu Sep 24 14:00:00 2015 Jakub Jelen <[email protected]> 6.6.1p1-21 + 0.9.3-9
- Extend memory limit for remote glob in sftp acc. to stat limit (#1160377)

* Thu Sep 24 14:00:00 2015 Jakub Jelen <[email protected]> 6.6.1p1-20 + 0.9.3-9
- Fix vulnerabilities published with openssh-7.0 (#1265807)
 - Privilege separation weakness related to PAM support
 - Use-after-free bug related to PAM support

* Thu Sep 24 14:00:00 2015 Jakub Jelen <[email protected]> 6.6.1p1-19 + 0.9.3-9
- Increase limit of files for glob match in sftp to 8192 (#1160377)

* Tue Aug 18 14:00:00 2015 Jakub Jelen <[email protected]> 6.6.1p1-18 + 0.9.3-9
- Add GSSAPIKexAlgorithms option for server and client application (#1253062)

* Wed Jul 29 14:00:00 2015 Jakub Jelen <[email protected]> 6.6.1p1-17 + 0.9.3-9
- Security fixes released with openssh-6.9 (CVE-2015-5352) (#1247864)
 - XSECURITY restrictions bypass under certain conditions in ssh(1) (#1238231)
 - weakness of agent locking (ssh-add -x) to password guessing (#1238238)

* Mon Jul 27 14:00:00 2015 Jakub Jelen <[email protected]> 6.6.1p1-16 + 0.9.3-9
- only query each keyboard-interactive device once (CVE-2015-5600) (#1245971)

También se pueden establecer filtros de búsqueda, como un rango de fechas concreto. Ejemplos extraídos de la página man:

# yum changelog 2008-Jan yum\*
Listing changelogs since: 2008-01-18
yum-versionlock-1.1.11-1.fc8.noarch installed
* Wed Jan 30 17:00:00 2008 Tim Lauridsen <[email protected]>
- mark as 1.1.11

changelog stats. 33 pkgs, 12 source pkgs, 1 changelog

# yum update ktechlab --changelog
Loading "changelog" plugin
Setting up Update Process
Setting up repositories
[..]
Resolving Dependencies
[...]
Changes in packages about to be updated:

ktechlab - 0.3-6.i386
* Wed Nov 22 23:00:00 2006 Chitlesh Goorah - 0.3-6
- Rebuilt due to new gpsim-devel release

by Alex at April 30, 2018 05:00 PM

April 29, 2018

www.rootzilopochtli.com

FLISoL 2018 – La fiesta del software libre

Compartir el conocimiento es generar riqueza intelectual – Richard Stallman

Hace unos días tuve el agrado de presentarme una vez más, en el mayor evento de difusión del Software Libre: El Festival Latinoamericano de Instalación de Software Libre (FLISoL). En esta edición, me invitaron al Centro Cultural “El Rule” y a la Fes Acatlán:

En donde presente mi plática sobre la 3a Ley del SysAdmin (Automatización) además de un taller de Administración de Sistemas y otro más de SELinux.

Pueden descargar ambas presentaciones aquí:

Las fotos del evento las pueden checar en est post del facebook del blog: FLISoL 2018.

Les dejo también el vídeo de la presentación:

Ver en Youtube

Gracias a todos los organizadores por la invitación, en especial a Wendy, Charly, Diego y Emilio, lo disfrute muchísimo!! 🙂

 

 

 

by Alex Callejas at April 29, 2018 11:37 PM

April 28, 2018

# rm-rf.es

Solaris: añadir dependencias a un servicio SMF

Service Management Facility (SMF) permite establecer dependencias entre servicios. Esto, básicamente, abre la posibilidad de establecer una serie de requisitos en el momento de iniciar un servicio.

Por ejemplo, podemos indicar que para que un servicio pueda arrancar, antes debe tener montado un determinado filesystem, o incluso verificar que un archivo de configuración existe, tiene los permisos correctos y su propietario es el indicado.

Toda esta configuración se debe especificar en el manifesto del servicio, pero en lugar de editarlo a mano, lo mejor es hacerlo a través de la utilidad propia de SMF svccfg.

En el siguiente ejemplo vamos a configurar el servicio de MySQL para añadir como dependencia el servicio NFS:

# svccfg -s svc:/application/database/mysql:version_56
svc:/application/database/mysql:version_56> 
svc:/application/database/mysql:version_56> addpg nfs_client dependency
svc:/application/database/mysql:version_56> setprop nfs_client/grouping = astring: require_all
svc:/application/database/mysql:version_56> setprop nfs_client/entities = fmri: svc:/network/nfs/client:default
svc:/application/database/mysql:version_56> setprop nfs_client/type = astring: service
svc:/application/database/mysql:version_56> setprop nfs_client/restart_on = astring: none
svc:/application/database/mysql:version_56> end

Básicamente, lo que estamos haciendo es crear agregar al servicio un nuevo grupo de propiedades llamado nfs_client y que especifica que se requiere que todo lo que contenga el grupo esté levantado antes de arrancar MySQL, en este caso el servicio svc:/network/nfs/client:default. Si en lugar de un servicio fuera por ejemplo un archivo de configuración, en lugar de astring: service especificaríamos:

# svccfg -s application/foo:default setprop config_file/entities = fmri: file://localhost/etc/nfs.conf
# svccfg -s application/foo:default setprop config_file/type = astring: path

Es cuestión de empaparse la documentación para encontrar las distintas opciones. Importante también la parte de control de reinicio restart_on. Extraído directamente de la documentación:

As shown in the following table, if the value of the restart_on attribute of the dependency is none, the dependent service is not restarted when the dependency is stopped or refreshed. If the value of the restart_on attribute of the dependency is refresh, the dependent service is always restarted when the dependency is stopped or refreshed. If the value of restart_on is error, the dependent service is only restarted if the dependency stopped because of an error. If the value of restart_on is restart, the dependent service is only restarted if the dependency was refreshed.

Once running (online or degraded), if a service cited by a require_all, require_any, or optional_all dependency is stopped or refreshed, the SMF considers why the service was stopped and the restart_on attribute of the dependency to decide whether to stop the service.

                    |  restart_on value
event              |  none  error restart refresh
-------------------+------------------------------
stop due to error  |  no    yes   yes     yes
non-error stop     |  no    no    yes     yes
refresh            |  no    no    no      yes

Una vez añadida la dependencia al servicio, se puede hacer un refresh del mismo para aplicar los cambios:

# svcadm refresh svc:/application/database/mysql:version_56

# svcprop svc:/application/database/mysql:version_56 | grep -i nfs
nfs_client/grouping astring require_all
nfs_client/entities fmri svc:/network/nfs/client:default
nfs_client/type astring service
nfs_client/restart_on astring none

by Alex at April 28, 2018 07:27 AM

April 27, 2018

joseangelfernandez.es

Storage Wars ¿cuánto pagarías por lo que hay en tu cuenta de almacenamiento?

Es increíble lo rápido que pasa el tiempo ya que un año más se ha celebrado en Madrid una nueva edición del Global Azure Bootcamp. Este año no hemos tenido un proyecto científico por detrás en el que proporcionar un poco de nuestra capacidad de computación a la causa pero hemos disfrutado de hasta cuatro tracks en paralelo de sesiones durante el pasado fin de semana.

Como en otras ocasiones, Iria y yo nos animamos a presentar una sesión. Este año ha tocado volver a los fundamentos, en particular, a los fundamentos sobre el almacenamiento. Cada vez el número de servicios disponibles en Azure es mayor y muchas veces nos olvidamos de las piezas fundamentales que dan soporte al resto. Azure Storage es uno de ellos y desde su salida ha evolucionado poco a poco pero de forma constante. Si no has estado atento, seguramente te hayas perdido unos cuántos cambios; si lo has hecho, a lo mejor te ha sucedido como a nosotros, has tenido que dar un paso atrás para entender la aparente complejidad que ha alcanzado el producto.

Si eres uno de los nuestros o de nuestros clientes que se han sentido así, ya tienes disponible la sesión para verla bajo demanda.

Storage es uno de los primeros servicios disponibles en Azure desde su lanzamiento y muchas veces uno de los menos conocidos. En los últimos meses se ha incorporado cada vez más funcionalidades creando un cierto caos entre qué se puede hacer con cada tipo de almacenamiento y qué no. En esta sesión pondremos un poco de luz sobre lío y sentar las bases para optimizar tu consumo de almacenamiento en Azure.

by jafernandez at April 27, 2018 06:51 PM

April 26, 2018

RooTeando

Testing

Seguimos con el monográfico sobre programación con un nuevo audio del podcast Tomando Un Café y un artículo en el blog. En este caso, hablaremos sobre testing, desde un punto de vista mas teórico y sin enfocarlo a un lenguaje de programación. El objetivo es dar conocer las cualidades del testing y las ventajas que presenta, tanto para aquellos programadores que no lo utilizan en su flujo de trabajo como para aquellos que estan empezando ...

April 26, 2018 12:17 AM

Tomando Un Café 29: Testing

Continuamos con otro audio del monográfico de programación. A modo de introducción explicaré el concepto de Testing, ventajas y porque es recomendable utilizarlo, también se mostrara diversos tipo de test que podemos aplicar a nuestros desarrollo.

Música: Blue Dot Sessions- Aeronaut- The Zeppelin http://freemusicarchive.org/music

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Correo [email protected]
Twitter https://twitter.com/Tomando_Un_Cafe

RSS
Anchor.fm  http://anchor.fm/s/18c0860/podcast/rss ...

April 26, 2018 12:13 AM

April 20, 2018

# rm-rf.es

Resetear servidor de Oracle VM que ha quedado en estado inconsistente

No será la primera vez, ni desgraciadamente la última, en la que nos encontremos que un servidor de Oracle VM que está registrado en Oracle VM Manager y que forma parte de un pool, con sus respectivas configuraciones, queda en un estado inconsistente o “huerfano“. Esto sucede cuando por ejemplo se elimina en Oracle VM Manager una configuración que hace referencia a ese servidor cuando este estaba inaccesible. Esto crea una inconsistencia entre la base de datos local que guarda el hipervisor con su agente (ovs-agent) y la que tiene el VM  Manager.

A partir de la versión 2.3 (si no me equivoco) Oracle pone a nuestra disposición un script, cleanup.py, que se encarga de limpiar la base de datos local de ovs-agent:

/opt/ovs-agent-2.3/utils/cleanup.py

Hace lo siguiente:

  • Para el servicio OCFS2 cluster  (o2cb) heartbeat.
  • Pone offline el servicio OCFS2 cluster (o2cb).
  • Elimina la configuración de o2cb.
  • Desmonta cualquier repo gestionado por el agente ovs-agent.
  • Limpia la base de datos local de ovs-agent.

Ejemplo de ejecución:

# /opt/ovs-agent-2.3/utils/cleanup.py

This is a cleanup script for ovs-agent.
It will try to do the following:

*) stop o2cb heartbeat
*) offline o2cb
*) remove o2cb configuration file
*) umount ovs-agent storage repositories
*) cleanup ovs-agent local database

Would you like to continue? [y/N] 

Si tenéis versiones inferiores a la 2.3. Podéis copiar el script de una versión superior y ejecutarlo, debería funcionar igual. Sino, siempre podéis ejecutar a mano estos pasos:

# service ovs-agent stop
# rm /etc/ovs-agent/db
# > /etc/ocfs2/cluster.conf
# service ovs-agent start

by Alex at April 20, 2018 08:37 PM

CloudAdmins.org

Integración continua de infraestructura: Terraform & ONE

ScreenLa Infraestructura como Código (IaC) se está convirtiendo en uno de los elementos clave de los equipos Agile, ya que permite que la infraestructura ya no sea el cuello de botella dentro de nuestro pipeline CI/CD.

Una de las herramientas que se puede utilizar es terraform. Esta aplicación permite codificar la infraestructura según las necesidades del servicio y hacerlo de manera agnóstica al entorno cloud donde se ejecute. Por ello, la IaC nos puede ayudar a agilizar la creación y mantenimiento de infraestructuras de forma automatizada.

Dentro de la comunidad de la plataforma abierta de computación en la nube,  OpenNebula, Runtastic ha desarrollado un provider de OpenNebula para terraform, aprovechando la API OpenNebula XML/RPC. Este proveedor permite crear los principales recursos de OpenNebula, como una máquina virtual, un template, una red virtual o una imagen de disco.

En el siguiente tutorial, se detalla como instalar la herramienta i utilizarla con OpenNebula para desplegar un clúster de Kubernetes sobre Docker de forma totalmente automatizada con Terraform y Ansible.

Por último, recordaros que el próximo 24 de mayo, vuelve el “OpenNebula TechDay“,  a Barcelona que constará de un taller práctico donde se presentará esta plataforma, y se procederá a su instalación y se mostrará su funcionamiento y sus utilidades.

Ya podéis registraros al evento en el siguiente enlace! Y en breve tendréis también disponible la Agenda para la Jornada.

Tutorial

Deploying a Kubernetes Cluster to ONE with Ansible and Terraform

 Installing Terraform

To install Terraform, find the appropriate package for your system and download it

$ curl -O https://releases.hashicorp.com/terraform/0.11.4/terraform_0.11.4_linux_amd64.zip

After downloading Terraform, unzip the package

$ sudo mkdir /bin/terraform
$ sudo unzip terraform_0.11.4_linux_amd64.zip -d /bin/terraform

After installing Terraform, verify the installation worked by opening a new terminal session and checking that terraform is available.

$ export PATH=$PATH:/bin/terraform
$ terraform --version

Installing Terraform provider Opennebula

You need to install go first: https://golang.org/doc/install

Install Prerequisites
$ sudo apt install bzr

Use the wget command and the link from Go to download the tarball:

$ wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz

The installation of Go consists of extracting the tarball into the /usr/local

 

$ sudo tar -C /usr/local -xvzf  go1.10.linux-amd64.tar.gz 

We will call our workspace directory projects, but you can name it anything you would like. The `-p` flag for the `mkdir` command will create the appropriate directory tree

$ mkdir -p ~/projects/{bin,pkg,src}

To execute Go like any other command, we need to append its install location to the $PATH variable.

$ export PATH=$PATH:/usr/local/go/bin

Additionally, define the GOPATH and GOBIN Go environment variables:

$ export GOBIN="$HOME/projects/bin"
$ export GOPATH="$HOME/projects/src"

After go is installed and set up, just type:

$ go get github.com/runtastic/terraform-provider-opennebula
$ go install github.com/runtastic/terraform-provider-opennebula
Optional post-installation Step

Copy your terraform-provider-opennebula binary in a folder, like /usr/local/bin, and write this in ~/.terraformrc:

$ sudo cp ~/projects/bin/terraform-provider-opennebula /usr/local/bin/terraform-provider-opennebula

Example for /usr/local/bin:

providers {
  opennebula = "/usr/local/bin/terraform-provider-opennebula"
}
Install Ansible

We can add the Ansible PPA by typing the following command:

$ sudo apt-add-repository ppa:ansible/ansible

Next, we need to refresh our system’s package index so that it is aware of the packages available in the PPA. Afterwards, we can install the software:

$ sudo apt-get update
$ sudo apt-get install ansible

Deploy a Kubernetes cluster

Terraform code is written in a language called HCL in files with the extension “.tf”. It is a declarative language, so your goal is to describe the infrastructure you want, and Terraform will figure out how to create it. This repository provide an Ansible playbook to Build a Kubernetes cluster with kubeadm. The goal is easily install a Kubernetes cluster on machines running CentOS 7. 

$ git clone https://github.com/mangelft/terransible-kubernetes-cluster.git

First, initialize Terraform for your project. This will read your configuration files and install the plugins for your provider:

$ terraform init

In a terminal, go into the folder where you created main.tf, and run the terraform plan command:

The plan command lets you see what Terraform will do before actually doing it. To actually create the instance, run the terraform apply command:

You can access Dashboard using the kubectl command-line tool by running the following command:

$ kubectl proxy --address $MASTER_IP --accept-hosts='^*$'

The last step is to complete the cluster life cycle by removing your resources, do: terraform destroy

 Fuente: https://github.com/mangelft/terransible-kubernetes-cluster

Buen vuelo!

by Miguel Angel Flores at April 20, 2018 02:36 PM

April 19, 2018

RooTeando

Tomando Un Café 28: Explicaciones

Trataré el tema de una buenas explicaciones en una formación,  la importancia que tienen tanto para el formador como la formación.

Música: Yung Kartz- April 2018-25. Bail Out
http://freemusicarchive.org/music/Yung_Kartz/April_2018/Bail_Out

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Correo [email protected]
Twitter https://twitter.com/Tomando_Un_Cafe

RSS
Anchor.fm  http://anchor.fm/s/18c0860/podcast/rss
Blog(post y podcast)  https://rooteando.com/feed/
Whooshkaa   ...

April 19, 2018 01:50 AM

April 15, 2018

# rm-rf.es

Activar JMX en Weblogic

Una entrada rápida. Habilitar las Java Management Extensions (JMX) simplemente requiere añadir la configuración correspondiente al archivo setDomainEnv.sh, disponible en el directorio bin/ del dominio, que como sabréis, contiene gran parte de la configuración y parámetros de arranque de Weblogic. En la mayoría de casos, esta configuración ya viene preestablecida y comentada, por lo que sólo se require revisar la instancia a la que queremos activarla y reiniciar el servicio:

## Enable JMX for monitoring purpose
#if [ "${SERVER_NAME}" != "AdminServer" ] ; then
#   JAVA_OPTIONS="$JAVA_OPTIONS -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888 -Djava.rmi.server.hostname=INSTANCE-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
#   export JAVA_OPTIONS
#fi
[...]

Descomentad, sustituid INSTANCE por el nombre de la instancia, reiniciad la instancia y ya estará escuchando en el puerto TCP correspondiente. Para acceder a JMX desde jConsole, echad un ojo a este otro artículo: Como conectar de forma remota a jconsole.

by Alex at April 15, 2018 03:35 PM

April 12, 2018

# rm-rf.es

Oracle VM manager: tabla OVM_STATISTIC y su crecimiento descontrolado

En instalaciones de Oracle VM, la tabla que almacena las estadísticas de Oracle OVM Manager suele crecer de forma descontrolada. Si no se toma ninguna acción al respecto, termina con toda probabilidad (si no está bien monitorizado) provocando el llenado del filesystem /u01.

[[email protected] ovs]# ls -ltrh | grep -i stat
-rw-rw----. 1 oracle dba  13K Jul 11  2016 OVM_STATISTIC.frm
-rw-rw----. 1 oracle dba 8.4K Jul 11  2016 Mgr_StatisticManager.frm
-rw-rw----. 1 oracle dba 8.4K Jul 11  2016 Mgr_StatsIntervalAdjusterTask.frm
-rw-rw----. 1 oracle dba  96K Apr 11 02:07 Mgr_StatisticManager.ibd
-rw-rw----. 1 oracle dba  96K Apr 11 02:07 Mgr_StatsIntervalAdjusterTask.ibd
-rw-rw----. 1 oracle dba  27G Apr 11 02:27 OVM_STATISTIC.ibd

Si no tienes demasiado apego a estas estadísticas (como la mayoría, supongo), puedes tranquilamente truncar la tabla y esperar a que vuelva a llenarse (o crear un script vía crontab que lo haga periódicamente por ti). Este problema (¡o feature!) tiene lugar en instalaciones de OVMM bajo MySQL así que para truncar la tabla, accederemos a la shell de MySQL, base de datos ovs y ejecutaremos el truncado:

[[email protected] ovs]# mysql ovs -u ovs -p -S /u01/app/oracle/mysql/data/mysqld.sock
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3201
Server version: 5.6.27-enterprise-commercial-advanced MySQL Enterprise Server - Advanced Edition (Commercial)
 
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
mysql>
 
mysql> use ovs
Database changed
mysql>  truncate table OVM_STATISTIC;
Query OK, 0 rows affected (1.03 sec)
 
mysql>

Y solucionado.

by Alex at April 12, 2018 06:46 PM

April 11, 2018

# rm-rf.es

rsync: sincronizar únicamente estructura de directorios

Rsync permite copiar o sincronizar la estructura de directorios de un path sin necesidad de copiar ningún fichero de esos directorios.

En el caso de querer copiar de una ruta local a remoto la sintaxis del comando es la siguiente:

$ rsync -av -f"+ */" -f"- *" /ruta/local/ [email protected]:/ruta/remota/

A tener en cuenta los siguientes parámetros:

-a: modo archive ( -a, –archive archive mode; equals -rlptgoD (no -H,-A,-X)
-v: modo verbose
-f"+ */" -f"- *": copiar todos los directorios y nada más.

Si fuera una copia local:

$ rsync -av -f"+ */" -f"- *" /ruta/origen/ /ruta/destino/

by Alex at April 11, 2018 03:15 PM

April 10, 2018

# rm-rf.es

Configurar Keepalived en modo Unicast en lugar de Multicast

Por defecto, Keepalived siempre funciona en modo multicast, es decir, un emisor (Master) envía un mensaje VRRP y son uno o varios los receptores (Backups/Slaves) que reciben el mismo. Como si fuera una conferencia, una comunicación de uno a varios.

En el caso de que nos encontremos en una infraestructura de red que no permita la comunicación Multicast, será necesario hacer el cambio a Unicast, de modo que la comunicación entre nodos sea de uno a uno y directa.

Importante indicar que Keepalived permite establecer el tráfico VRRP por Unicast a partir de la versión 1.2.8 (es vieja ya, así que no debería ser problema).

Ejemplo de comunicación VRRP por multicast:

15:45:20.455857 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28
15:45:23.460853 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28
15:45:26.465665 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28
15:45:29.460852 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28

Para pasar a Unicast, es necesario especificar en cada uno de los nodos de keepalived, quien es el PEER con el que se va a comunicar. En un entorno de dos nodos (Master/Backup), es sencillo, pues se comunicarán el único con el otro. Estableceremos la configuración dentro del bloque VRRP correspondiente

Nodo 1:

vrrp_instance foo {
   interface eth0
 
   state MASTER           
   virtual_router_id 10
   priority 50
 
   unicast_src_ip 10.0.0.200   
   unicast_peer {              
     10.0.0.100
   }
 
   virtual_ipaddress {    
     10.0.0.5 dev eth0
   }
 }

Nodo 2:

vrrp_instance foo {
   interface eth0
 
   state BACKUP
   virtual_router_id 10
   priority 100
 
   unicast_src_ip 10.0.0.100   
   unicast_peer {              
     10.0.0.200
   }
 
   virtual_ipaddress {    
     10.0.0.5 dev eth0
   }
 }

Como veis, es tan sencillo como especificar:

  • unicast_src_ip: IP/interfaz del nodo por la que se transimitirá el tráfico Unicast
  • unicast_peer: IP del Peer

Tras reiniciar Keepalived en ambos nodos, si analizamos el tráfico de red veremos que ya no hay tráfico Multicast para VRRP:

# tcpdump -vvv -n -i eth0 host 224.0.0.18

by Alex at April 10, 2018 08:03 PM

April 06, 2018

# rm-rf.es

Verificar datos de un CSR (Certificate Signing Request) con OpenSSL

Un CSR contiene información cifrada a partir de la cual se genera un certificado SSL. Entre esta información se encuentran datos como el common name del certificado (dominio), el nombre de la empresa que lo va a adquirir, su localización, dirección de correo electrónico, etc. Hay diversas formas de generarlo, por ejemplo como vimos en su día con OpenSSL o keytool.

Existen sitios web que permiten realizar la verificación de los datos del certificado online, básicamente para confirmar que los datos introducidos son los correctos y que el CSR está listo para enviar a la entidad certificadora. Evidentemente, cuanta menos información se manipule a través de Internet, y más de este tipo, mucho mejor. Para ello, lo lógico es no recurrir a estos sitios web y hacer la comprobación directamente en local con OpenSSL.

La sintaxis es sencilla:

$ openssl req -text -noout -verify -in server.csr

server.csr hace referencia al CSR a verificar. La salida del comando es similar a lo que veis a continuación:

$ openssl req -text -noout -verify -in server.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=ES, ST=Madrid, L=Madrid, O=Foo organization, OU=IT Department, CN=foo.bar.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:ec:e4:e7:2a:c5:ce:0b:1f:6c:e3:cd:5d:7f:0c:
 [...]
                    dd:49:18:43:27:ae:2f:ab:70:68:eb:34:2d:3a:cf:
                    e4:97:21:ac:d0:77:53:82:bd:22:60:7c:56:7e:00:
                    fc:4b
                Exponent: 65537 (0x10001)
        Attributes:
        Requested Extensions:
            X509v3 Subject Key Identifier: 
                63:9F:D3:B6:81:65:EC:95:01:DE:E6:1B:78:DC:7F:02:CB:49:F7:F5
    Signature Algorithm: sha256WithRSAEncryption
         e6:b1:bd:4d:62:06:af:90:88:ec:99:37:ed:a8:b2:e9:9a:6d:
 [...]

by Alex at April 06, 2018 09:10 PM

April 05, 2018

Entre Dev Y Ops

Podcast 38: Ciberseguridad con Alex Soler, CTO de Ackcent

En este episodio entrevistamos a Alex Soler, CTO de Ackcent, para que nos ponga al día sobre seguridad.

April 05, 2018 07:40 PM

# rm-rf.es

qemu-img: verificar la consistencia de una imagen qcow2″, “qed”, “vdi”

qemu-img es una utilidad de QEMU (emulador de procesadores basado en la traducción dinámica de binarios) que permite trabajar con imágenes de disco.

En caso de cualquier problema de corrupción con la imagen, esta utilidad permite analizar el estado y consistencia de la imagen y, en caso de problemas, intentar solucionarlos. Los formatos compatibles de imagen con esta utilidad son “qcow2“, “qed” y “vdi“.

El parámetro check all analizará el estado de la imagen:

   check [-f fmt] [-r [leaks | all]] filename
       Perform a consistency check on the disk image filename.
       If "-r" is specified, qemu-img tries to repair any inconsistencies
       found during the check. "-r leaks" repairs only cluster leaks,
       whereas "-r all" fixes all kinds of errors, with a higher risk of
       choosing the wrong fix or hiding corruption that has already
       occurred.
       Only the formats "qcow2", "qed" and "vdi" support consistency
       checks.
# qemu-img check all diskimage
No errors were found on the image.
Image end offset: 12582912

En caso de problemas, si utilizamos el parámetro -r, la heramienta intentará reparar los problemas encontrados:

# qemu-img check -r all diskimage
No errors were found on the image.
Image end offset: 12582912

by Alex at April 05, 2018 06:21 PM

RooTeando

Tomando Un Café 27: Sustitutos para mi Rasspberry Pi 2

En este audio comento mi busqueda para sustituir mi Raspberry Pi 2, las causas y las opciones que he escogido.
Odroid HC1: http://bit.ly/2q8vaJi
Rock64: http://bit.ly/2GBYfmP

Música: Scott Holmes-Music for TV and Film Vol1-12 Back On The Road Again http://freemusicarchive.org

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Correo [email protected]
Twitter https://twitter.com/Tomando_Un_Cafe

RSS
Anchor.fm  http://anchor.fm/s/18c0860/podcast/rss ...

April 05, 2018 12:35 AM

April 04, 2018

# rm-rf.es

Arranque automático de dominio e instancias de Glassfish en Solaris

A través de la utilidad administrativa de Glassfish asadmin, es posible configurar el arranque automático tanto del dominio como de las diferentes instancias que maneja. El resultado final es la integración total de Glassfish en Solaris Service Management Facility (SMF).

El comando de asadmin que utilizaremos es create-service, tanto para el dominio con las instancias (con diferentes parámetros). Hay que tener en cuenta que si Glassfish se ejecuta usando un usuario sin privilegios (lo habitual), no tendrá permisos para crear o modificar servicios de SMF. Os explicaré como hacerlo como root y después dar el cambiazo.

Arranque automático de dominio

Como root, ejecutaremos la utilidad asadmin, disponible en el directorio bin/ de nuestra instalación de Glassfish con el subcomando create-service:

[email protected]:/opt/oracle/glassfish3/bin# ./asadmin
Use "exit" to exit and "help" for online help.
asadmin> 
asadmin> 
asadmin> create-service
The Service was created successfully. Here are the details:
Name of the service:application/GlassFish/domain1
Type of the service:Domain
Configuration location of the service:/opt/oracle/glassfish3/glassfish/domains
Manifest file location on the system:/var/svc/manifest/application/GlassFish/domain1_opt_oracle_glassfish3_glassfish_domains/Domain-service-smf.xml.
You have created the service but you need to start it yourself.  Here are the most typical Solaris commands of interest:

* /usr/bin/svcs  -a | grep domain1  // status
* /usr/sbin/svcadm enable domain1 // start
* /usr/sbin/svcadm disable domain1 // stop
* /usr/sbin/svccfg delete domain1 // uninstall
For your convenience this message has also been saved to this file: /opt/oracle/glassfish3/glassfish/domains/domain1/PlatformServices.log
Command create-service executed successfully.

Con esto ya tenemos el servicio creado, pero se ejecuta como root. El siguiente comando modifica el servicio para que corra con nuestro usuario dedicado “foo”:

[email protected]:/opt/oracle/glassfish3/bin# svccfg -s svc:/application/GlassFish/domain1:default setprop start/user = astring: foo
[email protected]:/opt/oracle/glassfish3/bin# svcadm refresh  svc:/application/GlassFish/domain1:default

Una vez realizado el cambio, ya se puede arrancar el servicio:

[email protected]:/opt/oracle/glassfish3/bin# svcadm disable svc:/application/GlassFish/domain1:default
[email protected]:/opt/oracle/glassfish3/bin# svcadm enable svc:/application/GlassFish/domain1:default

Arranque automático de instancias

El proceso es el mismo que para el dominio, pero en este caso pasando a create-service el nombre de la instancia. Ejemplo para la instancia glassfish01:

asadmin> create-service glassfish01 
The Service was created successfully. Here are the details:
Name of the service:application/GlassFish/glassfish01
Type of the service:Instance
Configuration location of the service:/opt/oracle/glassfish3/glassfish/nodes/localhost-domain1
Manifest file location on the system:/var/svc/manifest/application/GlassFish/glassfish01_opt_oracle_glassfish3_glassfish_nodes_localhost-domain1/Domain-service-smf.xml.
You have created the service but you need to start it yourself.  Here are the most typical Solaris commands of interest:

* /usr/bin/svcs  -a | grep glassfish01  // status
* /usr/sbin/svcadm enable glassfish01 // start
* /usr/sbin/svcadm disable glassfish01 // stop
* /usr/sbin/svccfg delete glassfish01 // uninstall
For your convenience this message has also been saved to this file: /opt/oracle/glassfish3/glassfish/nodes/localhost-domain1/glassfish01/PlatformServices.log
Command create-service executed successfully.

Y lo mismo, modificamos el usuario de ejecución para que no sea root:

svccfg -s svc:/application/GlassFish/glassfish01:default setprop start/user = astring: foo
svcadm refresh  svc:/application/GlassFish/glassfish01
svcadm disable svc:/application/GlassFish/glassfish01
svcadm enable svc:/application/GlassFish/glassfish01

by Alex at April 04, 2018 06:07 PM

April 03, 2018

www.rootzilopochtli.com

#MeetArmy – Cómo monitorear recursos sin morir en el intento

You know, there are 20 million guys out of work in Manhattan alone just waiting for my job and yours too | Tu sabes, hay 20 millones de hombres sin trabajo en Manhattan solo esperando mi trabajo y el tuyo también – Detective Robert Thorn (Soylent Green – 1973)

El pasado 12  y 28 de Marzo tuve la fortuna de poder presentar la plática Cómo monitorear recursos sin morir en el intento durante el #MeetupArmy y el Meetup de GDG UNAM. Muchas gracias a ambos por la oportunidad!!

Durante la plática, les conté algunas experiencias en cuanto al monitoreo de recursos y las herramientas más comúnes y básicas para estas actividades.

También les presenté el video basado en la película Soylent Green:

Ver en YouTube

Les dejo la presentación aquí.

Espero les sirva…

by Alex Callejas at April 03, 2018 05:50 PM

April 02, 2018

Ruben J Garcia

Cucumber REST Steps – BDD for your REST API

I like using Cucumber to do BDD Testing. Even when I have to test a REST API I use it, so I’ve created a library to do it: Cucumber REST Steps

Cucumber REST Steps in action

First of all, you need to add it to your pom.xml

<dependency>
  <groupId>es.rubenjgarcia</groupId>
  <artifactId>cucumber-rest-steps</artifactId>
  <version>1.0.0</version>
  <scope>test</scope>
</dependency>

Now, let’s create a Test Case class to add the steps

import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(glue = {"es.rubenjgarcia.cucumber.rest.steps"}, features = "classpath:features")
public class CucumberTestCase {

}

You are ready to use the steps. Let’s see a couple of examples

Scenario: Empty response
  Given I call GET "http://localhost:8080"
  Then The response status should be 200
  And The response is empty

Easy, isn’t it?

Let’s see how you can verify the response

Scenario: With data
  Given I call POST "http://localhost:8080/withData" with data:
  """
    test: "test"
  """
  Then The response status should be 200
  And The response should be:
  """
    foo: "bar"
  """
  And The response should contain "foo"
  And The response should contain "foo" with value "bar"
  And The response should not contain "foo" with value "wee"
  And The response should not contain "bar"

If you want to verify complex objects, you can

Scenario: With array
  Given I call GET "http://localhost:8080/withArray"
  Then The response status should be 200
  And The response should contain array with size 3
  And The response should contain 3 entities
  And The response should contain at least 2 entity
  And The response should contain at most 4 entities
  And The response should contain more than 2 entities
  And The response should contain less than 4 entities
  And The response should be array:
  """
    - foo: "bar"
    - foo: 3
    - foos:
      - bar
      - wee
  """
  And Response entity "[0]" should contain "foo"
  And Response entity "[0]" should not contain "bar"
  And Response entity "[0]" should contain "foo" with value "bar"
  And Response entity "[0]" should not contain "foo" with value "wee"
  And Response entity "[2].foos" should contain array:
  """
    - bar
    - wee
  """
  And Response entity "[2].foos" should contain 2 entities
  And Response entity "[2].foos" should contain at least 1 entity
  And Response entity "[2].foos" should contain at most 3 entities
  And Response entity "[2].foos" should contain more than 1 entities
  And Response entity "[2].foos" should contain less than 3 entities

Find out more steps and examples in the official repository

The post Cucumber REST Steps – BDD for your REST API appeared first on Ruben J Garcia.

by Ruben Garcia at April 02, 2018 10:27 AM

March 30, 2018

Entre Dev Y Ops

Colaboración 1: Open Source Leadership Summit por José Miguel Parrella (@bureado)

Estrenamos nuevo formato, colaboraciones, y empezamos con una de José Miguel Parrella (@bureado) en la que nos explica el evento Open Source Leadership Summit 2018 (OSLS).

March 30, 2018 06:15 PM

www.sysadmin.org.mx

Reducción de latencia en arquitecturas híbridas con Amazon ElastiCache

El articulo es un aporte al AWS Database Blog y explica como utilizar Amazon ElastiCache para reducir la latencia en arquitecturas híbridas. Está en ingles y lo pueden leer en la siguiente dirección https://aws.amazon.com/blogs/database/latency-reduction-of-hybrid-architectures-with-amazon-elasticache/

by angel at March 30, 2018 01:39 AM

March 28, 2018

# rm-rf.es

Truco Gmail: encontrar adjuntos de mayor tamaño

El espacio que ofrece Gmail suele ser suficiente en la mayoría de los casos, y rara vez se requiere hacer limpieza de correos para liberar espacio. El problema viene cuando comienzas a utilizar otros servicios de Google, como Google Drive, entonces la cosa puede comenzar a complicarse.

Una forma rápida y eficiente de liberar espacio en Gmail es localizar los correos con adjuntos de mayor tamaño, pues los correos sin adjuntos no suelen ocupar demasiado. Gmail, al igual que Google, tiene bastantes opciones de búsqueda avanzadas, entre ellas se encuentra la de localizar los correos con un tamaño superior a lo indicado.

size:tamaño

El tamaño se especifica en bytes, así que para encontrar correos con tamaño superior a 5 megas:

size:5000000

Y solucionado, el resultado será los correos de más de 5MB.

gmail_attachments

by Alex at March 28, 2018 05:10 PM

March 27, 2018

RooTeando

Tomando Un Café 26: Diferencias entre un programador y un formador.

En este audio explico las diferencias, y una semejanza, entre un programador y un formador, mediante un lista de 5 puntos.
Semejanza.
Un buen programador requiere tiempo y esfuerzo, un buen formador requiere tiempo y esfuerzo.

La lista con las diferencias.
1. Un programador desarrolla código, un formador explica como desarrollar código.
2. Un programador desarrolla código para otros, un formador debe conseguir que otros desarrollen código.
3. La calidad de un programador se mide ...

March 27, 2018 01:51 AM

March 24, 2018

# rm-rf.es

Importar un certificado x509 (.crt .cer .der) y su clave privada en un keystore

Para importar un certificado x.509 (.crt .cer .der) y su clave privada en un keystore de java, previamente es necesario convertir el certificado y su clave privada en un archivo PKCS12. Una vez realizado, keytool de java ya nos permite importar el PKCS12 en un keystore.

Convertir clave privada y certificado a formato PKCS12

Utilizaremos openssl para hacer la conversión:

$ openssl pkcs12 -export -out foo.pfx -inkey foo.key -in foo.crt -name foo
  • foo.pfx: fichero PKCS12 de destino
  • foo.key: clave privada en formato X509
  • foo.crt: certificado en formato X509
  • foo: alias del certificado

Importar archivo PKCS12 en un keystore

Una vez que tenemos el archivo pfx, ya podemos utilizar la herramienta keytool para importar el certificado en un keystore:

$ keytool -importkeystore -deststorepass password -destkeypass password \
  -destkeystore keystore.jks -srckeystore /tmp/foo.pfx \
  -srcstoretype PKCS12 -srcstorepass password -alias foo
  • deststorepass: contraseña del keystore de destino
  • destkeypass: contraseña a asignar a la private key en el keystore
  • destkeystore: ruta al keystore
  • srckeystore: ruta al archivo PKCS12
  • srcstorepass: contraseña del archivo PKCS12 (especificada en el paso anterior)
  • alias: alias del certificado (especificado en el paso anterior)

by Alex at March 24, 2018 10:22 AM

March 23, 2018

UnLugarEnElMundo

Bootstrap 4. Primeros pasos

icono de php Bootstrap es una colección de elementos, plantillas y componentes HTML, CSS y Javascript para crear rápidamente páginas web con un aspecto moderno y “responsivo” (¡menudo palabro!) al tamaño de pantalla de cualquier dispositivo. Su versión 4 se liberó hace un par de meses y aporta algunos cambios significativos como, por ejemplo, la inclusión de Popper como librería javascript para “tooltips” y otros elementos emergentes y la eliminación de las tipografías Glyphicons para introducir símbolos y pictogramas.

Podemos trabajar con Bootstrap bien descargandonosla en nuestro propio servidor web, o bien usando sus librerías directamente desde los CDN que nos ofrecen. Aquí usaremos este segundo método por sus evidentes ventajas de cara a montar una primera plantilla para pruebas. Necesitamos incluir simplemente el siguiente tag en :

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" />

Si vamos a usar los elementos javascript necesitamos incluir también las librerías correspondientes y, ademas, las de jquery y popper en nuestro proyecto las cuales también tienen disponible la posibilidad de enlazarlas directamente sin necesidad de descargarlas en local:

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.1/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>

IMPORTANTE: los enlaces anteriores corresponden a las versiones estables más recientes en el momento de escribir esto. No suelen eliminar las versiones anteriores, pero conviene que te cerciores si llegas a este texto en un futuro lejano.

Con todo esto, la plantilla mínima de HTML para empezar a trabajar (incluyendo los enlaces correspondientes a las librerías javascript comentados) sería esta:

<!DOCTYPE html>
<html lang="es">
    <head>
    	<meta charset="utf-8" />
    	<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
    	<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" />
    	<title>Plantilla Bootstrap</title>
  	</head>
  	<body>
		<h1>Plantilla Bootstrap</h1>

    
		<!-- Javascript opcional -->
		<!-- <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    	     <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.1/umd/popper.min.js"></script>
    	     <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script> -->
  	</body>
</html>

Sosa, verdad? Claro, aún no hemos empezado a trabajar… Si quieres ver algo más impactante, bootstrap dispone de plantillas con algo mas de chicha para tus diseños. Las tienes disponibles en este enlace. Si prefieres empezar desde cero, tienes disponible un montón de La documentación bastante fácil de seguir que incluye multitud de ejemplos prácticos para empezar a trabajar desde el primer minuto.

Artículo Original: .

Este artículo pertenece a Un lugar en el mundo... Si quieres ver actualizaciones y comentarios interesantes visita el texto original en: Bootstrap 4. Primeros pasos || Hospedado en un Cloud VPS de Gigas.

by Josemaría at March 23, 2018 12:29 PM

March 22, 2018

RooTeando

Tomando Un Café 25: Entornos virtuales y Virtualenvwrapper

En este audio explico la importancia de utilizar entornos virtuales de desarrollo para tus proyecto, como utilizar Virtualenvwrapper para gestionar estos entornos.

Nuevo proyecto, podcast @RadioDev con Daniel Primo y Joseda. En Ivoox RadioDev.

Musica: Dexter Britain-Dexter Britain-The Time To Run(Finale)http://dexterbritain.bandcamp.com

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Correo [email protected]
Twitter https://twitter.com/Tomando_Un_Cafe

RSS
Anchor.fm  http://anchor.fm/s/18c0860/podcast/rss
Blog ...

March 22, 2018 02:09 AM

March 20, 2018

# rm-rf.es

Listar cifrados y protocolos SSL/TLS disponibles con nmap

Nmap, a través del script ssl-enum-ciphers, permite escanear un host y listar todos los algoritmos de cifrados y protocolos SSL/TLS disponibles.

El script inicia de forma secuencial conexiones SSLv3 y TLS sobre el host, utilizando cada vez un cifrado distinto con el fin de averiguar si lo soporta o no. Al final, muestra el resultado en un informe detallado por salida estándar. A continuación podéis ver un ejemplo de lo que muestra. Para más detalle visitad la página del script en el sitio web de NMAP.

[~] # nmap --script ssl-enum-ciphers -p 443 www.foo.com

Starting Nmap 7.60 ( https://nmap.org ) at 2018-03-08 15:11 CET
Stats: 0:00:44 elapsed; 0 hosts completed (1 up), 1 undergoing Script Scan
NSE Timing: About 60.00% done; ETC: 15:14 (0:01:09 remaining)
Nmap scan report for www.foo.com (10.0.0.4)
Host is up (0.17s latency).
rDNS record for 10.0.0.4: mail.foo.com

PORT    STATE SERVICE
443/tcp open  https
| ssl-enum-ciphers: 
|   SSLv3: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 2048) - C
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_SEED_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (secp256r1) - C
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|     warnings: 
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       64-bit block cipher IDEA vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       CBC-mode cipher in SSLv3 (CVE-2014-3566)
|       Ciphersuite uses MD5 for message integrity
|   TLSv1.0: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 2048) - C
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_SEED_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (secp256r1) - C
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|     warnings: 
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       64-bit block cipher IDEA vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       Ciphersuite uses MD5 for message integrity
|   TLSv1.1: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 2048) - C
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_SEED_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (secp256r1) - C
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|     warnings: 
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       64-bit block cipher IDEA vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       Ciphersuite uses MD5 for message integrity
|   TLSv1.2: 
|     ciphers: 
|       TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA (dh 2048) - C
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 (dh 2048) - A
|       TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA (dh 2048) - A
|       TLS_DHE_RSA_WITH_SEED_CBC_SHA (dh 2048) - A
|       TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (secp256r1) - C
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A
|       TLS_ECDHE_RSA_WITH_RC4_128_SHA (secp256r1) - C
|       TLS_RSA_WITH_3DES_EDE_CBC_SHA (rsa 2048) - C
|       TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_128_GCM_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_CBC_SHA256 (rsa 2048) - A
|       TLS_RSA_WITH_AES_256_GCM_SHA384 (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_IDEA_CBC_SHA (rsa 2048) - A
|       TLS_RSA_WITH_RC4_128_MD5 (rsa 2048) - C
|       TLS_RSA_WITH_RC4_128_SHA (rsa 2048) - C
|       TLS_RSA_WITH_SEED_CBC_SHA (rsa 2048) - A
|     compressors: 
|       NULL
|     cipher preference: client
|     warnings: 
|       64-bit block cipher 3DES vulnerable to SWEET32 attack
|       64-bit block cipher IDEA vulnerable to SWEET32 attack
|       Broken cipher RC4 is deprecated by RFC 7465
|       Ciphersuite uses MD5 for message integrity
|_  least strength: C

Nmap done: 1 IP address (1 host up) scanned in 138.70 seconds

by Alex at March 20, 2018 05:50 PM

March 15, 2018

Entre Dev Y Ops

Podcast 37: Conviviendo con el legacy

En el podcast de hoy vamos a debatir y compartir nuestras opiniones acerca de las tecnologías legacy.

March 15, 2018 11:30 PM

March 14, 2018

RooTeando

Tomando Un Café 24: Ejemplos, ejercicios y prácticas

En este audio explico la importancia de los ejemplos,ejercicios y prácticas  en el proceso de aprendizaje en una formación sobre programación.

Música: Dingonek Street Band:06 Granfhater Domovoi http://freemusicarchive.org/

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Correo [email protected]
Twitter https://twitter.com/Tomando_Un_Cafe

RSS
Anchor.fm  http://anchor.fm/s/18c0860/podcast/rss
Blog(post y podcast)  https://rooteando.com/feed/
Whooshkaa  https://rss.whooshkaa.com ...

March 14, 2018 02:09 AM

March 11, 2018

UnLugarEnElMundo

Laravel 5.6. Estructura y primeros pasos: Autenticación de usuarios

icono de php Ya yenemos Laravel 5.6 instalado en alguno de los dos entornos que hemos visto antes. ¿Qué sigue? Lo primero, entender un poquito la estructura de directorios que nos ha creado composer. Sólo lo imprescindible. El resto lo iremos viendo a medida que avanzamos.

[email protected] /var/www/html/prueba $ ls -la
total 236
drwxr-xr-x 12 root www-data   4096 mar  9 19:31 .
drwxr-xr-x  3 root www-data   4096 mar  9 18:29 ..
drwxr-xrwx  6 root www-data   4096 ene  3 17:52 app
-rwxr-xrwx  1 root www-data   1686 ene  3 17:52 artisan
drwxr-xrwx  3 root www-data   4096 ene  3 17:52 bootstrap
-rw-r--rw-  1 root www-data   1413 ene  3 17:52 composer.json
-rw-r--rw-  1 root www-data 143565 mar  8 07:37 composer.lock
drwxr-xrwx  2 root www-data   4096 ene  3 17:52 config
drwxr-xrwx  5 root www-data   4096 ene  3 17:52 database
-rw-r--r--  1 root www-data    612 mar  9 19:31 .env
-rw-r--r--  1 root www-data    565 ene  3 17:52 .env.example
-rw-r--r--  1 root www-data    111 ene  3 17:52 .gitattributes
-rw-r--r--  1 root www-data    146 ene  3 17:52 .gitignore
-rw-r--rw-  1 root www-data   1125 ene  3 17:52 package.json
-rw-r--rw-  1 root www-data   1040 ene  3 17:52 phpunit.xml
drwxr-xrwx  4 root www-data   4096 ene  3 17:52 public
-rw-r--rw-  1 root www-data   3550 ene  3 17:52 readme.md
drwxr-xrwx  5 root www-data   4096 ene  3 17:52 resources
drwxr-xrwx  2 root www-data   4096 ene  3 17:52 routes
-rw-r--rw-  1 root www-data    563 ene  3 17:52 server.php
drwxrwxrwx  5 root www-data   4096 ene  3 17:52 storage
drwxr-xrwx  4 root www-data   4096 ene  3 17:52 tests
drwxr-xrwx 36 root www-data   4096 mar  8 07:38 vendor
-rw-r--rw-  1 root www-data    549 ene  3 17:52 webpack.mix.js

El directorio public ejerce de DocumentRoot. Allí encontraremos el index.php que da entrada a nuestra aplicación web así como las hojas de estilos, etc. El fichero .env que vemos aquí arriba en el directorio raiz de nuestra aplicación es el fichero de configuración principal. De hecho, puesto que vamos a empezar a trabajar con bases de datos en este momento podemos aprovechar para editar las siguientes directivas:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secreto

Importante: aunque usemos mariadb la directiva DB_CONNECTION debe de ser mysql porque Laravel no entiende otra y, a fin de cuentas, ambas son compatibles a nivel binario. Para que Laravel sea capaz de hacer uso de esa base de datos debemos de crearla. A ella y al usuario que le hemos dicho que va a usar para manejarla. Entramos en nuestro gestor (mysql o mariadb) y ejecutamos lo siguiente:

CREATE DATABASE laravel;
CREATE USER [email protected] IDENTIFIED BY 'secreto';
GRANT ALL ON laravel.* TO [email protected];

Vamos ahora a crear nuestro sistema de autenticación. Laravel viene ya con un módulo llamado User.php que reside en el directorio app. Para generar el resto de lo que necesitamos ejecutamos lo siguiente:

php artisan make:auth
php artisan migrate

La primera línea crea el código y rutas necesario para la gestión de usuarios. En particular, creará o modificará los siguientes ficheros:

routes/web.php
resources/views/auth/login.blade.php
resources/views/auth/register.blade.php
resources/views/auth/passwords/email.blade.php
resources/views/auth/passwords/reset.blade.php

La segunda instrucción crea la estructura de tablas necesaria en la base de datos que hemos configurado previamente. Si ahora volvemos a cargar la web de nuestro aplicación veremos que en la esquina superior derecha tenemos dos nuevos enlaces correspondientes a las funcionalidades de Login y Registro:

Laravel 5.6 con la funcionalidad de login y registro

Las pantallas de registro y login por defecto son estas:

Pantalla de registro en Laravel 5.6
Pantalla de login en Laravel 5.6

Y una vez hecho login vemos que en la barra de menú se nos identifica con nuestro nombre de usuario y tenemos la posibilidad de cerrar sesión:

Logout en Laravel 5.6

Si le echamos un vistazo a “las tripas” vemos que nos ha creado dos tablas una de las cuales, la de usuarios, es la que guardará la información relativa a los registros de usuarios.
Tablas creadas por Laravel 5.6 para la autenticación de usuarios

Además, tal y como está mandado, vemos que no almacena las contraseñas en claro sino un hash de las mismas:

hash de las passwords en Laravel 5.6

La castellanización de los recursos es tan sencilla como editar alguno de los ficheros php que hemos indicado anteriormente. Por ejemplo, el fichero login.blade.php es el que contiene la ventana de login y register.blade.php la de registro. Con muy poco esfuerzo tendremos las ventanas anteriores en perfecto castellano. Pero eso ya os lo dejo a vosotros 😉

Artículo Original: .

Este artículo pertenece a Un lugar en el mundo... Si quieres ver actualizaciones y comentarios interesantes visita el texto original en: Laravel 5.6. Estructura y primeros pasos: Autenticación de usuarios || Hospedado en un Cloud VPS de Gigas.

by Josemaría at March 11, 2018 12:21 PM

March 10, 2018

UnLugarEnElMundo

Instalando Laravel en Windows 7 con XAMPP

icono de php Hace unos minutos hemos publicado la forma de instalar Laravel en una Debian con Apache. Vamos ahora a ver como se hace en un windows 7 con xampp. Imagino que hacerlo en cualquier otra versión de windows más moderna será igual de fácil.

Partimos entonces de ese windows instalado, funcionando, y con xampp también instalado y funcional. Lo primero que tenemos que instalarnos es composer, el gestor de paquetes PHP que utiliza Laravel para crear la estructura que necesistan sus proyectos. Para ello nos descargamos el instalador para windows y ya sabéis: siguiente-siguiente-siguiente-aceptar 😀

Y ya está. Ya tenemos todo lo que necesitamos. Vamos ahora a crear la estructura para nuestra primera aplicación con Laravel. La versión del framework en el momento de escribir esto es la 5.6. Suponemos que se llamará prueba y que la instalaremos en el directorio web por defecto que usa xampp. Nos vamos a la línea de comandos y, suponiendo que trabajamos sobre el disco C:, ejecutamos lo siguiente:

cd c:\xampp\htdocs
composer create-project laravel/laravel prueba --prefer-dist

En segundo lugar tenemos que crear el virtual host necesario para esta aplicación. Xampp usa para ello el archivo httpd-vhosts.conf que reside en el directorio c:\xampp\apache\conf\extra. Editamos este archivo y añadimos lo siguiente:

<VirtualHost *:80>
  DocumentRoot "C:\xampp\htdocs\prueba\public"
  DirectoryIndex index.php
  <Directory "C:\xampp\htdocs\prueba">
        AllowOverride All
  </Directory>
  ErrorLog "logs/pruebalaravel-error.log"
  CustomLog "logs/pruebalaravel-access.log" combined
</VirtualHost>

Y listo. Reiniciamos apache y abrimos un exporador. Si escribimos http://localhost veremos la página de bienvenida de Laravel:

Laravel 5.6 en windows con Xampp

Artículo Original: .

Este artículo pertenece a Un lugar en el mundo... Si quieres ver actualizaciones y comentarios interesantes visita el texto original en: Instalando Laravel en Windows 7 con XAMPP || Hospedado en un Cloud VPS de Gigas.

by Josemaría at March 10, 2018 06:10 PM

Instalando Laravel en Debian 9

icono de php Repasando el “histórico” del blog que a menudo me sirve como memoria veo que he recurrido en los últimos 12 años a dos frameworks para php: cake y codeigniter. Ahora que me toca volver a decidirme por alguno y teniendo en cuenta que tengo totalmente olvidado a ambos he preguntado por ahí y todo el mundo parece estar de acuerdo en que lo mejor del momento es Laravel. La versión actual de Laravel es la 5.6. Vamos, pues, a por el tercero.

La instalación de Laravel es bien sencilla. En esta entrada tocaremos un entorno “clásico” en este blog: una Debian sin entorno gráfico. En una entrada posterior tocaremos la instalación en un windows 7 con Xampp que en este caso me resulta también imprescindible. Vamos a ello.

Partimos de una Debian 9.3.0 (la versión estable en el momento de escribir esto) recién instalada y sin ningún tipo de personalización. Lo primero que necesitamos instalar son ciertos paquetes de utilidades y el entorno web necesario para trabajar con laravel: apache2, php y mysql-server:

apt install curl unzip git
apt install apache2 libapache2-mod-php
apt install mysql-server
apt install php-mysql php-xml php-mbstring

En segundo lugar tenemos que instalar composer, un gestor de paquetes php que nos servirá para instalar el entorno necesario para trabajar con Laravel. Así:

cd /usr/local/bin
curl -sS https://getcomposer.org/installer | php

Esto bajará un archivo llamado composer.phar y lo depositará en el directorio /usr/local/bin. Y ya hemos acabado. ¿Y he leído por ahí que alguien decía que era difícil? ¡Tendrían que haber instalado alguna red Novell en su vida! 😀

Como decía, ya tenemos todo lo que necesitamos para crear nuestra primera aplicación con Laravel. Empezamos. Nuestro primer proyecto se llamará prueba y estará en el directorio /var/www/html/prueba. Lo primero que tenemos que hacer es hacer que composer nos cree toda la estructura necesaria:

cd /var/www/html
composer.phar create-project laravel/laravel prueba --prefer-dist

Asignamos los permisos adecuados en la estructura que se ha creado:

chgrp -R www-data /var/www/html/your-project
chmod -R 775 /var/www/html/your-project/storage

Creamos un virtual host adecuado en el directorio /etc/apache2/sites-availables. En mi caso le he puesto laravel.conf y el contenido creado es este:

<VirtualHost *:80>
    DocumentRoot /var/www/html/prueba/public
    DirectoryIndex index.php
    <Directory /var/www/html/prueba>
        AllowOverride All
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Por último, deshabilitamos el virtual host que apache crea por defecto, habilitamos el nuestro, habilitamos el modulo rewrite de apache y reiniciamos el servidor web:

a2dissite 000-default.conf
a2ensite laravel.conf
a2enmod rewrite
systemctl restart apache2

Si ahora apuntamos con un navegador a la ip de nuestra máquina debian veremos la página de inicio de Laravel:

Laravel 5.6 en Debian 9.4

Artículo Original: .

Este artículo pertenece a Un lugar en el mundo... Si quieres ver actualizaciones y comentarios interesantes visita el texto original en: Instalando Laravel en Debian 9 || Hospedado en un Cloud VPS de Gigas.

by Josemaría at March 10, 2018 05:52 PM

March 06, 2018

enavas.blogspot.com.es

Crear un pendrive de instalación de Proxmox

En lugar de quemar la ISO de Proxmox en un CD, podemos grabarla en un pendrive para instalar desde allí. La forma más sencilla de hacerlo, sin ningún software específico es usar el comando dd. Por ejemplo:
# dd if=proxmox-ve_5.1-3.iso of=/dev/sdf bs=1
618698752+0 registros leídos
618698752+0 registros escritos
618698752 bytes (619 MB) copiados, 529,231 s, 1,2 MB/s
Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 06, 2018 12:37 PM

March 05, 2018

enavas.blogspot.com.es

FOG Project: Modificar el perfil /etc/apparmor.d/lxc/lxc-default-cgns para que funcione el servidor NFS en un contenedor Proxmox

Cuando instalamos el servidor FOG en un contenedor LXC, el servicio NFS no funcionará porque apparmor se encuentra activado y éste no permite NFS.

Si iniciáis un equipo para que arranque vía PXE, veréis un error como el siguiente:


Y si tratáis de hacer un showmount desde otra máquina para ver los recursos compartidos por el servidor fogserver mediante NFS, os mostrará el siguiente error:
# showmount -e fogserver
clnt_create: RPC: Program not registered
Como ya vimos en un post anterior, una solución es desactivar apparmor. Otra es crear un perfil o modificar uno existente para permitir NFS. En nuestro caso, vamos a editar el fichero /etc/apparmor.d/lxc/lxc-default-cgns:

/etc/apparmor.d/lxc/lxc-default-cgns
# Do not load this file.  Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc

profile lxc-container-default-cgns flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/lxc/container-base>

# the container may never be allowed to mount devpts. If it does, it
# will remount the host's devpts. We could allow it to do it with
# the newinstance option (but, right now, we don't).
deny mount fstype=devpts,
mount fstype=cgroup -> /sys/fs/cgroup/**,
}
Y le vamos a añadir las tres líneas que he resaltado en color amarillo:

/etc/apparmor.d/lxc/lxc-default-cgns
# Do not load this file.  Rather, load /etc/apparmor.d/lxc-containers, which
# will source all profiles under /etc/apparmor.d/lxc

profile lxc-container-default-cgns flags=(attach_disconnected,mediate_deleted) {
#include <abstractions/lxc/container-base>

# the container may never be allowed to mount devpts. If it does, it
# will remount the host's devpts. We could allow it to do it with
# the newinstance option (but, right now, we don't).
deny mount fstype=devpts,
mount fstype=cgroup -> /sys/fs/cgroup/**,
mount fstype=nfs*,
mount options=(rw, bind, ro),
mount fstype=rpc_pipefs,
}
Una vez modificado, reiniciamos apparmor:
# systemctl restart apparmor
Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 05, 2018 12:42 PM

FOG Project: Deshabilitar apparmor para que funcione el servidor NFS en un contenedor Proxmox

Cuando instalamos el servidor FOG en un contenedor LXC, el servicio NFS no funcionará porque apparmor se encuentra activado y éste no permite NFS.

Si iniciáis un equipo para que arranque vía PXE, veréis un error como el siguiente:


Y si tratáis de hacer un showmount desde otra máquina para ver los recursos compartidos por el servidor fogserver mediante NFS, os mostrará el siguiente error:
# showmount -e fogserver
clnt_create: RPC: Program not registered

Para solucionar el problema podemos optar por:
  • Desactivar apparmor.
  • Crear un perfil apparmor que permita NFS.
En este post, vamos a ver la primera solución, que consiste en desactivar apparmor en el contenedor donde hemos instalado FOG server.

Para empezar, tenemos que decir que la configuración de los contenedores en Proxmox se encuentra en el directorio /etc/pve/lxc/ del servidor proxmox, almacenada en ficheros del tipo CTID.conf.

Así que paramos el servidor FOG.

Como el contenedor donde he instalado mi servidor FOG tiene el CTID 105, edito el fichero /etc/pve/lxc/100.conf:
arch: amd64
cores: 1
hostname: fogserver
memory: 1024
net0: name=eth0,bridge=vmbr0,hwaddr=AA:C7:AB:97:CA:1C,ip=dhcp,type=veth
onboot= 1
ostype: debian
rootfs: local:105/vm-105-disk-1.raw,size=100G
swap: 1024
Y le añado la línea resaltada:
arch: amd64
cores: 1
hostname: fogserver
memory: 1024
net0: name=eth0,bridge=vmbr0,hwaddr=AA:C7:AB:97:CA:1C,ip=dhcp,type=veth
onboot= 1
ostype: debian
rootfs: local:105/vm-105-disk-1.raw,size=100G
swap: 1024
lxc.aa_profile: unconfined
Una vez modificado el fichero de configuración, volvemos a arrancar el servidor FOG.
Y listo.
Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 05, 2018 11:44 AM

FOG Project: Instalar y configurar dnsmasq como ProxyDHCP

Si echáis un vistazo al post en el que os mostraba como instalar FOG Server en un contenedor Proxmox, veréis que elegí no utilizar FOG server como servidor DHCP:
Would you like to use the FOG server for DHCP service? [y/N]
Ésto es lógico porque en mi red, ya tengo dos servidores DHCP funcionando en modo failover.

Como FOG server, necesita un servidor DHCP, he instalado y configurado dnsmasq en el servidor FOG para que actúe como Proxy DHCP. Ésto es algo sencillo:

Instalar dnsmasq

Como dnsmasq se encuentra en los repositorios de Debian, instalarlo es trivial:
# apt-get update && apt-get -y install dnsmasq
Una vez instalado, lo configuraremos.

Configurar dnsmasq

Al instalar dnsmasq, se crea un fichero de configuración por defecto /etc/dnsmasq.conf que sirve como documentación porque toda la configuración viene comentada. No obstante, en lugar de utilizar el fichero de configuración principal, crearemos un fichero de configuración pxe.conf en el directorio /etc/dnsmasq.d/ con el siguiente contenido:

/etc/dnsmasq.d/pxe.conf
# Don't function as a DNS server:
# port=0

# Log lots of extra information about DHCP transactions.
log-dhcp

# Dnsmasq can also function as a TFTP server. You may uninstall
# tftpd-hpa if you like, and uncomment the next line:
# enable-tftp

# Set the root directory for files available via FTP.
tftp-root=/tftpboot

# The boot filename, Server name, PXE Server IP Address
# dhcp-boot=pxelinux.0,fogserver,172.19.144.68
dhcp-boot=undionly.kpxe,,172.19.144.68

# !!! Insert the PXE server IP address above !!!

# rootpath option, for NFS
#dhcp-option=17,/images

# kill multicast
#dhcp-option=vendor:PXEClient,6,2b

# Disable re-use of the DHCP servername and filename fields as extra
# option space. That's to avoid confusing some old or broken DHCP clients.
dhcp-no-override

# PXE menu. The first part is the text displayed to the user. The second is the timeout, in seconds.
# pxe-prompt="Press F8 for boot menu", 3

# The known types are x86PC, PC98, IA64_EFI, Alpha, Arc_x86,
# Intel_Lean_Client, IA32_EFI, BC_EFI, Xscale_EFI and X86-64_EFI
# This option is first and will be the default if there is no input from the user.
pxe-service=X86PC, "Boot from network", undionly

# A boot service type of 0 is special, and will abort the
# net boot procedure and continue booting from local media.
#pxe-service=X86PC, "Boot from local hard disk", 0

# If an integer boot service type, rather than a basename is given, then the
# PXE client will search for a suitable boot service for that type on the
# network. This search may be done by multicast or broadcast, or direct to a
# server if its IP address is provided.
# pxe-service=x86PC, "Install windows from RIS server", 1

# This range(s) is for the public interface, where dnsmasq functions
# as a proxy DHCP server providing boot information but no IP leases.
# Any ip in the subnet will do, so you may just put your server NIC ip here.
# Since dnsmasq is not providing true DHCP services, you do not want it
# handing out IP addresses. Just put your servers IP address for the interface
# that is connected to the network on which the FOG clients exist.
# If this setting is incorrect, the dnsmasq may not start, rendering
# your proxyDHCP ineffective.
dhcp-range=172.19.144.2,proxy,255.255.254.0

# !!! Insert the DHCP server IP address, and subnet mask above !!!

# This range(s) is for the private network on 2-NIC servers,
# where dnsmasq functions as a normal DHCP server, providing IP leases.
# dhcp-range=192.168.0.20,192.168.0.250,8h

# For static client IPs, and only for the private subnets,
# you may put entries like this:
# dhcp-host=00:20:e0:3b:13:af,10.160.31.111,client111,infinite
Como los comentarios del fichero de configuración son bastante descriptivos, tan sólo os voy a comentar las dos líneas de configuración que he resaltado en color amarillo y que considero fundamentales:
dhcp-boot=undionly.kpxe,,172.19.144.68
En esta línea estamos indicando cuál es el fichero de arranque que se debe usar para iniciar el cliente al arrancar mediante pxe y la IP del servidor fog. Si utilizáis este fichero de configuración, tendréis que cambiar la IP por la de vuestro servidor FOG.
dhcp-range=172.19.144.2,proxy,255.255.254.0
En esta línea estamos indicando la IP del servidor DHCP de nuestra red, que el servidor dnsmasq actúe como proxy y la máscara de red que usamos.  Si utilizáis este fichero de configuración, tendréis que cambiar la IP por la de vuestro servidor DHCP y la máscara, por la que uséis en vuestra red.
Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 05, 2018 09:48 AM

FOG Project: Cambiar la password del usuario fog

Cuando terminamos de configurar nuestro servidor FOG, el asistente de configuración nos muestra un mensaje que nos dice cómo podemos acceder a la interfaz de gestión desde el navegador:
   You can now login to the FOG Management Portal using
the information listed below. The login information
is only if this is the first install.

This can be done by opening a web browser and going to:

http://172.19.144.68/fog/management

Default User Information
Username: fog
Password: password
Para cambiar la password por defecto del usuario fog, abrimos el navegador, introducimos la URL, nos logueamos con los datos por defecto y accedemos al apartado "User management". A continuación hacemos clic sobre la opción "List all users" y nos aparecerá la lista de usuarios. Si acabamos de instalar fog, no habrá nada más que uno. 


Así que hacemos clic sobre el usuario fog y se nos mostrarán opciones de edición del usuario. Hacemos clic sobre "Change password" y podremos cambiar su contraseña:


Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 05, 2018 08:43 AM

Gestionar el fichero /etc/escuela2.0 para clasificar destinatarios de módulos puppet

Como ya sabéis, en los centros educativos, los administradores utilizamos el fichero /etc/escuela2.0 para definir variables que nos permitan distinguir equipos como destinatarios de nuestros módulos puppet. 

Este fichero es leído por un pequeño script ruby (leefichero.rb) que convierte los valores definidos en el fichero en variables facter. De esta manera, tan sólo tenemos que añadir nuevas variables al fichero para poder distinguir equipos.

En este post, tan sólo os voy a mostrar las variables que yo defino en el fichero /etc/escuela2.0 para gestionar los equipos de mi centro mediante puppet. 

Para empezar, yo quitaría la variable "use", que se utiliza para definir qué sistema operativo tiene el equipo (Por ejemplo: use=ubuntu). No tiene mucho sentido puesto que hay variables facter, como las siguientes, que nos permiten distinguir perfectamente el sistema operativo, su versión y su arquitectura:
  • lsbdistcodename (trusty, xenial, etc...)
  • lsbdistrelease (14.04, 16.04, etc...)
  • kernel (linux, windows, etc...)
  • architecture (amd64, i386,  etc...)
En cuanto a las variables que uso habitualmente en /etc/escuela2.0, son las siguientes:
  • tipo: Esta variable la usamos todos para distinguir tipos de máquina. Ejemplos: tipo=workstation, tipo=siatic, tipo=infolab, tipo=notebook 
  • marca: La variable marca nos va a permitir distinguir equipos según marca. Puede ser muy útil cuando, por ejemplo, estamos usando equipos de diferentes marcas como workstation, y tenemos que aplicarles módulos específicos.
  • ubicacion: Con esta variable defino en qué ubicación se encuentra el equipo. De este modo, si tengo equipos del tipo workstation instalados en diferentes ubicaciones, puedo aplicar módulos específicos para ellos en función de su ubicación. Por ejemplo: Puedo usar un módulo que instale la impresora de la sala de profesores tan sólo en los equipos de departamentos distinguiendo por tipo y marca.
  • arranque: En esta variable puedo definir tres posibles valores: arranque=dual, arranque=ubuntu, arranque=windows). Ésto, en combinación con refind, me permite cambiar automáticamente los sistemas operativos seleccionables en el arranque. 
    • Si, por ejemplo, una máquina tiene definida la variable arranque=dual en /etc/escuela2.0, refind permitirá seleccionar en el arranque Ubuntu o Windows. 
    • Si tiene definido arranque=ubuntu, sólo mostrará ubuntu como opción de arranque.
    • Si tiene definido arranque=windows, sólo mostrará windows como opción de arranque.
Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 05, 2018 06:01 AM

March 04, 2018

enavas.blogspot.com.es

Guía de estilo de pkgsync

Como ya sabéis, para gestionar los equipos informáticos de los centros educativos, los administradores usamos pkgsync en combinación con puppet.

A partir del año 2013, comencé a añadir nuevas funcionalidades y mejoras a esta herramienta para hacerla más potente y permitirnos usarla tanto de forma desatendida como de forma interactiva, o, incluso desactivarla, cuando no es conveniente que se ejecute. Algunas de esas funcionalidades nos proporcionan flexibilidad a la hora de utilizar la herramienta. En este post voy a ir construyendo una guía de estilo para establecer una serie de normas que faciliten nuestro trabajo a la hora de usar pkgsync.

Cómo funciona pkgsync

pkgsync maneja tres listas de paquetes gestionadas de forma centralizada por administracionsi:
  • /etc/pkgsync/musthave: Lista de paquetes que deben estar instalados en la máquina.
  • /etc/pkgsync/mayhave: Lista de paquetes que pueden instalarse en la máquina.
  • /etc/pkgsync/maynothave: Lista de paquetes que no deben estar instalados en la máquina.
Como estos ficheros siempre han sido gestionados desde Mérida y quería poder gestionar los paquetes del mismo modo, en nuevas versiones de pkgsync añadí tres nuevos ficheros que se fusionan automáticamente con los anteriores:
  • /etc/pkgsync/musthave.ies: Lista de paquetes que deben estar instalados en la máquina.
  • /etc/pkgsync/mayhave.ies: Lista de paquetes que pueden instalarse en la máquina.
  • /etc/pkgsync/maynothave.ies: Lista de paquetes que no deben estar instalados en la máquina.

Más tarde, para facilitar aún más la gestión de paquetes, añadí tres nuevos directorios donde es posible crear ficheros con listas de paquetes que se fusionarán con los ficheros anteriores:
  • /etc/pkgsync/musthave.d
  • /etc/pkgsync/mayhave.d
  • /etc/pkgsync/maynothave.d
De este modo pkgsync fusionará por un lado todos los musthave, por otro los mayhave y por otro los maynothave, eliminando repeticiones y limpiando los ficheros de espacios en blanco y tabulaciones.

Además, modifiqué el comportamiento de pkgsync para que los ficheros maynothave tengan prioridad sobre los musthave, de tal manera que, cuando el administrador especifique un nombre de paquete en un fichero maynothave, si el nombre del fichero se encuentra añadido a cualquiera de los ficheros musthave, pkgsync lo ignorará para que aptitude no trate de instalarlo. Ésto resuelve el problema de instalar un paquete que es incompatible con los que se han instalado por defecto en el sistema y el que se ha instalado por defecto en el sistema no se usa y nos estorba.

pkgsync se ejecuta por defecto diariamente mediante anacron con el script /etc/cron.daily/nightly-pkgsync. Podéis cambiar la frecuencia con que se ejecuta pkgsync en diferentes tipos de máquinas con tan sólo modificar el fichero init.pp del módulo puppet pkgsync-frequency. Las tres posibles opciones son:
  • daily
  • weekly
  • mothly

Guía de estilo

Pues bien. Ahora que ya sabemos cómo funciona pkgsync, establezcamos una serie de normas de estilo que nos facilitarán la tarea de gestionar el software mediante puppet y pkgsync.
  • En los ficheros musthave solamente deberían incluirse los paquetes instalados en el sistema base, es decir, el sistema operativo sin software adicional.
  • Los ficheros musthave no deberían contener librerías, y, como mucho, tan sólo deberían figurar las esenciales del sistema base. 
  • Las librerías deberían incluirse en ficheros específicos. Por ejemplo, en /etc/musthave.d/librerias
  • Los ficheros que garantizan la instalación de kernels, deberían incluirse en ficheros específicos, como por ejemplo, en /etc/musthave.d/kernel. Además, deberían incluir más de un kernel, para tener una opción de arranque en el caso de que exista algún problema con alguno de los kernels instalados.
  • Si se requiere instalar módulos para el hardware, se deberían incluir en un fichero específico de módulos: /etc/musthave.d/modulos
  • El software específico debería clasificarse en ficheros específicos para facilitar las tareas de instalación/desinstalación. Por ejemplo:
    • /etc/musthave.d/libreoffice6
    • /etc/musthave.d/smartboard
    • /etc/musthave.d/programacion
    • /etc/musthave.d/educacion
    • /etc/musthave.d/virtualbox
  • Así, si se quisiera desinstalar un software específico, no habría más que mover el fichero del directorio /etc/musthave.d al /etc/maynothave.d. 
  • E instalar, sería tan sencillo como que el módulo puppet que realice una tarea de instalación, coloque los ficheros en el cliente.
Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 04, 2018 09:01 PM

RooTeando

Tomando Un Cafe 23: Programación Orientada a Objetos

Retomamos el monográfico sobre programación, con un nuevo episodio sobre Programación Orientada a Objetos.

Música: Blue Dot Session- Cholate- 01Waltz for Zacaria http://freemusicarchive.org/

Canales de Telegram @UnDiaUnaAplicacion @UnPythonAldia @AprendePython
Correo [email protected]
Twitter https://twitter.com/Tomando_Un_Cafe

RSS
Anchor.fm  http://anchor.fm/s/18c0860/podcast/rss
Blog(post y podcast)  https://rooteando.com/feed/
Whooshkaa  https://rss.whooshkaa.com/rss/podcast/id/2429
Ivoox http ...

March 04, 2018 05:00 PM

Programación Orientada a Objetos

Este artículo es complementario del episodio 22 del podcast Tomando Un Café que trata sobre Programación Orientada a Objetos(POO). El objetivo es dar una introducción y dar a conocer diversos conceptos desde un punto de visto teórico y no enfocado a un lenguaje de programación en particular.

Este artículo esta enfocada a usuario noveles en la programación y que sirva como primer contacto sobre este tema, habrá muchos conceptos que no se verán y ...

March 04, 2018 04:00 PM

March 02, 2018

enavas.blogspot.com.es

Instalar FOG Server en un contenedor Proxmox

FOG Project es un proyecto de código abierto para clonación y gestión de equipos en red.


En este post vamos a ver cómo instalar FOG Server en un contenedor Proxmox.

Lo primero es crear un contenedor. Para ello, rellenamos los datos de la ficha General


De la pestaña "General" tan sólo destacar que he cargado la clave pública de mi máquina pasarela, con el fin de poder conectarme al servidor vía ssh sin tener que introducir password.

A continuación seleccionamos la plantilla que vamos a utilizar para nuestro contenedor. En mi caso he elegido crear mi contenedor con una plantilla de Debian Jessie:


Si queréis ver algo más de información sobre plantillas y contenedores en Proxmox, os recomiendo echar un vistazo al siguiente post:

En la siguiente ficha "Root Disk" he definido un disco de 100 GB para el contenedor. A priori, sé que tendría que definir un disco más grande porque tenemos varias imágenes de clonación que ocupan mucho espacio. No obstante, más adelante puedo aumentar el espacio:


En la siguiente ficha se define el número de núcleos que va a utilizar la máquina del contenedor. En principio, para mis pruebas, al menos, con 1 núcleo es suficiente. Y si necesitara más, podría aumentar el número de núcleos más adelante:


En la siguiente pestaña he definido que la máquina del contenedor tenga 1GB de memoria RAM. Al lgual que en el caso anterior, es algo que puedo aumentar más adelante:


Tan sólo necesito que esta máquina virtual tenga una interfaz de red y que reciba una dirección IP vía DHCP. Lo he hecho así porque he registrado una IP estática y una entrada DNS para el servidor fogserver en el servidor LDAP del centro. Aunque también podría haber definido una IP estática en la pantalla siguiente:


En la siguiente pestaña, es posible introducir el nombre de dominio DNS y servidores DNS. En mi caso he dejado que use los ajustes del host porque son perfectamente válidos:


Una vez introducida toda la información, nos mostrará un resumen de la configuración que hemos elegido para nuestra máquina virtual:


Como todo es correcto, pulsamos el botón "Finalizado".

Una vez creada la máquina virtual con nuestro Debian Jessie, la iniciamos, nos conectamos a ella por ssh y hacemos una actualización de paquetes para que el sistema se encuentre actualizado antes de instalar fog.

El siguiente paso será descargar fog desde la web. Lo que yo he hecho ha sido copiar la ruta de descarga y descargar el archivo para instalarlo mediante wget:


Pulsamos "Enter" y comenzará el proceso de descarga:


Una vez descargado, el fichero fog_1.5.0.tar.gz, lo descomprimimos y se creará una carpeta con el siguiente nombre: fog_1.5.0

Entramos dentro del directorio bin del directorio fog_1.5.0 y ejecutamos el instalador: ./installfog.sh

Os pego a continuación el procedimiento que yo he seguido respondiendo a las preguntas del asistente de instalación:
[email protected]:~/fog_1.5.0/bin# ./installfog.sh 
Installing LSB_Release as needed
* Attempting to get release information.......................Done


+------------------------------------------+
| ..#######:. ..,#,.. .::##::. |
|.:###### .:;####:......;#;.. |
|...##... ...##;,;##::::.##... |
| ,# ...##.....##:::## ..:: |
| ## .::###,,##. . ##.::#.:######::.|
|...##:::###::....#. .. .#...#. #...#:::. |
|..:####:.. ..##......##::## .. # |
| # . ...##:,;##;:::#: ... ##.. |
| .# . .:;####;::::.##:::;#:.. |
| # ..:;###.. |
| |
+------------------------------------------+
| Free Computer Imaging Solution |
+------------------------------------------+
| Credits: http://fogproject.org/Credits |
| http://fogproject.org/Credits |
| Released under GPL Version 3 |
+------------------------------------------+


Version: 1.5.0 Installer/Updater

What version of Linux would you like to run the installation for?

1) Redhat Based Linux (Redhat, CentOS, Mageia)
2) Debian Based Linux (Debian, Ubuntu, Kubuntu, Edubuntu)
3) Arch Linux

Choice: [2]



Starting Debian based Installation


FOG Server installation modes:
* Normal Server: (Choice N)
This is the typical installation type and
will install all FOG components for you on this
machine. Pick this option if you are unsure what to pick.

* Storage Node: (Choice S)
This install mode will only install the software required
to make this server act as a node in a storage group

More information:
http://www.fogproject.org/wiki/index.php?title=InstallationModes

What type of installation would you like to do? [N/s (Normal/Storage)]

What is the IP address to be used by this FOG Server? [172.19.144.68]

Would you like to change the default network interface from eth0?
If you are not sure, select No. [y/N]

Would you like to setup a router address for the DHCP server? [Y/n]
What is the IP address to be used for the router on
the DHCP server? [172.19.144.2]

Would you like DHCP to handle DNS? [Y/n]
What DNS address should DHCP allow? [172.19.144.2]

Would you like to use the FOG server for DHCP service? [y/N]

This version of FOG has internationalization support, would
you like to install the additional language packs? [y/N] y

######################################################################
# FOG now has everything it needs for this setup, but please #
# understand that this script will overwrite any setting you may #
# have setup for services like DHCP, apache, pxe, tftp, and NFS. #
######################################################################
# It is not recommended that you install this on a production system #
# as this script modifies many of your system settings. #
######################################################################
# This script should be run by the root user. #
# It will prepend the running with sudo if root is not set #
######################################################################
# ** Notice ** FOG is difficult to setup securely #
# SELinux and IPTables are usually asked to be disabled #
# There have been strides in adding capabilities #
# The recommendations would now be more appropriate #
# to set SELinux to permissive and to disable firewall for now. #
# You can find some methods to enable SELinux and maintain firewall #
# settings and ports. If you feel comfortable doing so please do #
######################################################################
# Please see our wiki for more information at: #
######################################################################
# https://wiki.fogproject.org/wiki/index.php #
######################################################################

* Here are the settings FOG will use:
* Base Linux: Debian
* Detected Linux Distribution: Debian GNU/Linux
* Server IP Address: 172.19.144.68
* Server Subnet Mask: 255.255.254.0
* Interface: eth0
* Installation Type: Normal Server
* Internationalization: 1
* Image Storage Location: /images
* Using FOG DHCP: No
* DHCP will NOT be setup but you must setup your
| current DHCP server to use FOG for PXE services.

* On a Linux DHCP server you must set: next-server and filename

* On a Windows DHCP server you must set options 066 and 067

* Option 066/next-server is the IP of the FOG Server: (e.g. 172.19.144.68)
* Option 067/filename is the bootfile: (e.g. undionly.kpxe)


* Are you sure you wish to continue (Y/N) Y

* Installation Started

* Installing required packages, if this fails
| make sure you have an active internet connection.

* Adding needed repository....................................OK
* Preparing Package Manager...................................OK
* Packages to be installed:

apache2 bc build-essential cpp curl g++ gawk gcc genisoimage gettext gzip htmldoc isolinux lftp libapache2-mod-php5 libc6 libcurl3 liblzma-dev m4 mysql-client mysql-server net-tools nfs-kernel-server openssh-server php-gettext php5 php5-bcmath php5-cli php5-curl php5-fpm php5-gd php5-json php5-mcrypt php5-mysql php5-mysqlnd sysv-rc-conf tar tftp-hpa tftpd-hpa unzip vsftpd wget xinetd zlib1g


* Installing package: apache2.................................OK
* Skipping package: bc......................................(Already Installed)
* Installing package: build-essential.........................OK
* Skipping package: cpp.....................................(Already Installed)
* Skipping package: curl....................................(Already Installed)
* Skipping package: g++.....................................(Already Installed)
* Installing package: gawk....................................OK
* Skipping package: gcc.....................................(Already Installed)
* Installing package: genisoimage.............................OK
* Installing package: gettext.................................OK
* Skipping package: gzip....................................(Already Installed)
* Installing package: htmldoc.................................OK
* Installing package: isolinux................................OK
* Installing package: lftp....................................OK
* Installing package: libapache2-mod-php5.....................OK
* Skipping package: libc6...................................(Already Installed)
* Skipping package: libcurl3................................(Already Installed)
* Installing package: liblzma-dev.............................OK
* Skipping package: m4......................................(Already Installed)
* Installing package: mysql-client............................OK
* Installing package: mysql-server............................OK
* Skipping package: net-tools...............................(Already Installed)
* Installing package: nfs-kernel-server.......................OK
* Skipping package: openssh-server..........................(Already Installed)
* Installing package: php-gettext.............................OK
* Installing package: php5....................................OK
* Skipping package: php5-bcmath...............................(Does not exist)
* Skipping package: php5-cli................................(Already Installed)
* Installing package: php5-curl...............................OK
* Installing package: php5-fpm................................OK
* Installing package: php5-gd.................................OK
* Skipping package: php5-json...............................(Already Installed)
* Installing package: php5-mcrypt.............................OK
* Installing package: php5-mysqlnd............................OK
* Skipping package: php5-mysqlnd............................(Already Installed)
* Installing package: sysv-rc-conf............................OK
* Skipping package: tar.....................................(Already Installed)
* Installing package: tftp-hpa................................OK
* Installing package: tftpd-hpa...............................OK
* Installing package: unzip...................................OK
* Installing package: vsftpd..................................OK
* Skipping package: wget....................................(Already Installed)
* Installing package: xinetd..................................OK
* Skipping package: zlib1g..................................(Already Installed)
* Updating packages as needed.................................OK

* Confirming package installation

* Checking package: apache2...................................OK
* Checking package: bc........................................OK
* Checking package: build-essential...........................OK
* Checking package: cpp.......................................OK
* Checking package: curl......................................OK
* Checking package: g++.......................................OK
* Checking package: gawk......................................OK
* Checking package: gcc.......................................OK
* Checking package: genisoimage...............................OK
* Checking package: gettext...................................OK
* Checking package: gzip......................................OK
* Checking package: htmldoc...................................OK
* Checking package: isolinux..................................OK
* Checking package: lftp......................................OK
* Checking package: libapache2-mod-php5.......................OK
* Checking package: libc6.....................................OK
* Checking package: libcurl3..................................OK
* Checking package: liblzma-dev...............................OK
* Checking package: m4........................................OK
* Checking package: mysql-client..............................OK
* Checking package: mysql-server..............................OK
* Checking package: net-tools.................................OK
* Checking package: nfs-kernel-server.........................OK
* Checking package: openssh-server............................OK
* Checking package: php-gettext...............................OK
* Checking package: php5......................................OK
* Checking package: php5-cli..................................OK
* Checking package: php5-curl.................................OK
* Checking package: php5-fpm..................................OK
* Checking package: php5-gd...................................OK
* Checking package: php5-json.................................OK
* Checking package: php5-mcrypt...............................OK
* Checking package: php5-mysqlnd..............................OK
* Checking package: sysv-rc-conf..............................OK
* Checking package: tar.......................................OK
* Checking package: tftp-hpa..................................OK
* Checking package: tftpd-hpa.................................OK
* Checking package: unzip.....................................OK
* Checking package: vsftpd....................................OK
* Checking package: wget......................................OK
* Checking package: xinetd....................................OK
* Checking package: zlib1g....................................OK

* Configuring services

* Setting up fog user.........................................OK
* Setting up fog password.....................................OK
* Stopping FOGMulticastManager Service........................OK
* Stopping FOGImageReplicator Service.........................OK
* Stopping FOGSnapinReplicator Service........................OK
* Stopping FOGScheduler Service...............................OK
* Stopping FOGPingHosts Service...............................OK
* Stopping FOGSnapinHash Service..............................OK
* Stopping FOGImageSize Service...............................OK
* Setting up and starting MySQL...............................OK
* Backing up user reports.....................................Done
* Stopping web service........................................OK
* Is the MySQL password blank? (Y/n)
* Stopping FOGMulticastManager Service........................OK
* Stopping FOGImageReplicator Service.........................OK
* Stopping FOGSnapinReplicator Service........................OK
* Stopping FOGScheduler Service...............................OK
* Stopping FOGPingHosts Service...............................OK
* Stopping FOGSnapinHash Service..............................OK
* Stopping FOGImageSize Service...............................OK
* Setting up and starting MySQL...............................OK
* Setting up Apache and PHP files.............................OK
* Testing and removing symbolic links if found................OK
* Backing up old data.........................................OK
* Copying new files to web folder.............................OK
* Creating the language binaries..............................Done
* Creating config file........................................OK
* Unzipping the binaries......................................Done
* Copying binaries where needed...............................Done
* Enabling apache and fpm services on boot....................OK
* Creating SSL CA.............................................OK
* Creating SSL Private Key....................................OK
* Creating SSL Certificate....................................OK
* Creating auth pub key and cert..............................OK
* Resetting SSL Permissions...................................OK
* Setting up Apache virtual host (no SSL).....................OK
* Starting and checking status of web services................OK
* Changing permissions on apache log files....................OK
* Backing up database.........................................OK

* You still need to install/update your database schema.
* This can be done by opening a web browser and going to:

http://172.19.144.68/fog/management


Si os fijáis en las últimas líneas de la salida anterior, nos dice que debemos instalar/actualizar nuestro esquema de base de datos. Y que ésto podemos hacerlo abriendo el navegador web e introduciendo la siguiente dirección: http://172.19.144.68/fog/management

Así que lo hacemos:


En la ventana anterior pulsamos en botón Install/Update now. Nos confirmará que el proceso de instalación/actualización ha sido realizado:

Si os fijáis en la salida siguiente, una vez hecho ésto, tendremos que ir al terminal y pulsar "Enter" para continuar con el proceso de instalación:

* Press [Enter] key when database is updated/installed.

* Setting up storage..........................................OK
Skipped
* Setting up and starting TFTP and PXE Servers................OK
* Setting up and starting VSFTP Server........................OK
* Setting up FOG Snapins......................................OK
* Setting up UDPCast..........................................OK
* Configuring UDPCast.........................................OK
* Building UDPCast............................................OK
* Installing UDPCast..........................................OK
* Installing FOG System Scripts...............................OK


* Configuring FOG System Services


* Setting FOGMulticastManager script executable...............OK
* Enabling FOGMulticastManager Service........................OK
* Setting FOGImageReplicator script executable................OK
* Enabling FOGImageReplicator Service.........................OK
* Setting FOGSnapinReplicator script executable...............OK
* Enabling FOGSnapinReplicator Service........................OK
* Setting FOGScheduler script executable......................OK
* Enabling FOGScheduler Service...............................OK
* Setting FOGPingHosts script executable......................OK
* Enabling FOGPingHosts Service...............................OK
* Setting FOGSnapinHash script executable.....................OK
* Enabling FOGSnapinHash Service..............................OK
* Setting FOGImageSize script executable......................OK
* Enabling FOGImageSize Service...............................OK
* Setting up FOG Services.....................................OK
* Starting FOGMulticastManager Service........................OK
* Starting FOGImageReplicator Service.........................OK
* Starting FOGSnapinReplicator Service........................OK
* Starting FOGScheduler Service...............................OK
* Starting FOGPingHosts Service...............................OK
* Starting FOGSnapinHash Service..............................OK
* Starting FOGImageSize Service...............................OK
* Setting up exports file.....................................OK
* Setting up and starting RPCBind.............................OK
* Setting up and starting NFS Server..........................OK
* Linking FOG Logs to Linux Logs..............................OK
* Linking FOG Service config /etc.............................OK
* Ensuring node username and passwords match..................Done

* Setup complete

You can now login to the FOG Management Portal using
the information listed below. The login information
is only if this is the first install.

This can be done by opening a web browser and going to:

http://172.19.144.68/fog/management

Default User Information
Username: fog
Password: password

[email protected]:~/fog_1.5.0/bin#

Una vez terminada la instalación, nos informa de la dirección que debemos introducir para acceder al interfaz de administración de fog, así como el nombre del usuario administrador y su password.

Así que abrimos esa dirección en el navegador e introducimos el nombre de usuario y el password para acceder:


Y entraremos en el Dashboard de nuestro servidor fog:


Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 02, 2018 07:01 PM

cambiatipo: Script para cambiar el tipo de máquina en el fichero /etc/escuela2.0

Reutilizando el código del script cambiahostname, he escrito otro script cambiatipo que permite cambiar el tipo de máquina en el fichero /etc/escuela2.0:
#!/bin/bash
#
# Esteban M. Navas
# Fecha creación: 02/03/2018

# Si no hay parámetros, el script se está usando de forma interactiva
if [ -z "$1" ]; then

DIALOG="dialog"
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15

$DIALOG --title "Tipo de host" --clear \
--inputbox "Introduzca el tipo de host que desea asignar a este equipo [siatic, infolab, workstation, notebook]:" 15 51 2> $tempfile

retval=$?

case $retval in
0)
TIPO=`cat $tempfile`
;;
1) ;;
esac
else
TIPO=$1
fi


if [ "$TIPO" ] ; then

grep -q '^tipo=' /etc/escuela2.0 && sed -i "s/^tipo=.*/tipo=$TIPO/" /etc/escuela2.0 || echo "tipo=$TIPO" >> /etc/escuela2.0

/usr/sbin/sinc_puppet -f now
# /usr/local/sbin/pkgsync -pcr

fi
En este caso:
  • Si existe, reemplazamos la definición del tipo de host en el fichero /etc/excuela2.0.
  • Si no existe, simplemente la insertamos.
Al igual que en el script cambiahostname, se puede indicar el nombre del host como parámetro del script. Y, si no se especifica, mostrará un cuadro de diálogo para que lo escribamos.

Tras cambiar el host, se ejecutará sinc_puppet (He dejado la línea que ejecutaría pkgsync comentada).

Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 02, 2018 11:51 AM

cambiahostname: Script para cambiar el nombre de un host

cambiahostname es un pequeño script que escribí para cambiar el nombre de las máquinas virtuales en uno de los cursos que impartí en la Escuela de Administración Pública y, al final, he terminado utilizando en los equipos Ubuntu del centro para cambiar el nombre de los equipos después de clonar y ejecutar sinc_puppet o pkgsync: 
#!/bin/bash
#
# Esteban M. Navas
# Fecha creación: 08/07/2016
# Última modificación: 02/03/2018

# Si no hay parámetros, el script se usa de forma interactiva
if [ -z "$1" ]; then

DIALOG="dialog"
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15

$DIALOG --title "Nombre de host" --clear \
--inputbox "Introduzca el nombre de host que desea asignar a este equipo. Este nombre debe ser una cadena de caracteres alfanuméricos en minúsculas, sin espacios:" 15 51 2> $tempfile

retval=$?

case $retval in
0)
NOMBRE=`cat $tempfile`
;;
1) ;;
esac
else
NOMBRE=$1
fi


if [ "$NOMBRE" ] ; then

echo "127.0.0.1 localhost
127.0.1.1 $NOMBRE

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters" > /etc/hosts

echo "$NOMBRE" > /etc/hostname
hostname -F /etc/hostname

/usr/sbin/sinc_puppet -f now
# /usr/local/sbin/pkgsync -pcr

fi
El script funcionaba de forma interactiva preguntando el nombre del host mediante dialog. Hoy lo he modificado para que se pueda utilizar también indicando el nombre de la máquina mediante parámetro.
Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 02, 2018 11:36 AM

March 01, 2018

enavas.blogspot.com.es

Actualizar el firmware de nuestro Tanix TX3 Mini TV Box

Ya os hemos hablado en un par de ocasiones del Tanix TX3 Mini, un excelente Android TV Box. En la primera ocasión, para presentároslo y, en la segunda, para explicaros que tiene un firmware completamente actualizable.

Comprar en GearBest

Nosotros tenemos la versión de 2GB de RAM y 16GB de almacenamiento y la verdad es que estamos encantados de haberlo comprado porque va muy fluído y, además, hemos podido comprobar que el fabricante actualiza el firmware (no como suele suceder con muchos dispositivos).

Como ya os comentamos, es posible actualizar el Tanix TX3 Mini de tres formas:
  • Vía OTA Update, utilizando la herramienta de actualización que incorpora el propio dispositivo. Para los que no lo saben OTA Update significa Over The Air Update; vamos lo que viene a ser una actualización online. 
  • Descargando un fichero ZIP de actualización e instalándolo desde USB o microSD desde la herramienta de actualización que incorpora el Tanix TX3 en Android. 
  • Descargando un fichero IMG de actualización e instalándolo mediante una herramienta de flasheo que nos proporciona Tanix.
En este post vamos a ver lo sencillo que es actualizar el firmware mediante el fichero ZIP de actualización que podemos descargar desde el enlace que nos proporciona el fabricante y que nos va a permitir disponer de un sistema de arranque dual en nuestro dispositivo con dos sistemas: Android 7.1 y LibreElec8.2:

Descargar

Una vez descargado, lo copiamos a un pendrive o a una tarjeta micro SD. Nosotros lo hemos copiado a nuestra tarjeta micro SD:


Una vez copiado, cogemos la tarjeta micro SD y la introducimos en nuestro Tanix TX3 Mini:

Comprar en GearBest
Una vez introducida, abrimos la herramienta de actualización que se encuentra en el cajón de aplicaciones y hacemos clic en el botón "Select":


La herramienta comenzará a escanear el almacenamiento en busca de archivos:


Cuando termine, nos mostrará una lista de archivos localizados tanto en el almacenamiento interno como en la tarjeta SD. 

Seleccionamos el archivo que contiene la imagen (TanixTX3-ota-20180109.zip) y nos devolverá a la pantalla de actualización:


Pulsamos el botón "Update" y comenzará el proceso de actualización. Cuando termine, tendremos un arranque dual en el que podremos elegir qué sistema queremos iniciar:

  • Android version: 7.1 con el launcher ALICE UX 
  • LibreELEC version: 8.2 

El dispositivo siempre arrancará con el sistema que hayáis elegido en un momento determinado (El último sistema operativo usado queda como sistema operativo por defecto).

Para cambiar de sistema, lo único que tenéis que hacer es mantener pulsado el botón "power" del mando a distancia. Se os mostrará una ventana con una serie de opciones para cambiar de sistema.

Es importante recordar que una vez instalado, tenéis dos sistemas operativos en el Tanix y que cada sistema operativo tiene su propio Kodi

Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at March 01, 2018 07:34 PM

February 28, 2018

enavas.blogspot.com.es

LeEco Le S3 X626: Un smartphone de diseño con 4GB de RAM, 10 núcleos y una cámara excepcional

Hoy queremos recomendaros el LeEco Le S3 X626, un smartphone con una excelente relación calidad/precio, un acabado impresionante y un hardware realmente potente (87.000 (Antutu v6) Rendimiento mejor que el 90% de los dispositivos).


Diseño y pantalla

Tiene un diseño es realmente atractivo con una carcasa metálica de aluminio y una pantalla de 5.5 pulgadas con resolución Full HD (1080 x 1920 px) y muy alta densidad (401 pixeles por pulgada).

Algunas características de la pantalla:
  • Pantalla de cristal redondeado 2.5D
  • Corning Gorilla Glass 3
  • LED de Notificaciones
  • Multi-touch
  • Resistente a rayones
Se encuentra disponible en dos colores: oro y oro rosa. Nosotros lo compramos en oro rosa. La combinación de color con la increíble definición que tiene la pantalla lo hacen realmente atractivo.

El LeEco Le S3 es dual SIM y cuenta con una ranura para 2 tarjetas nano SIM:

Como ya empieza a ser habitual de un tiempo a esta parte, ya no tiene ranura para micro SD.

Por supuesto, dispone de lector de huellas en la parte trasera algo que resulta muy útil para no tener que estar tecleando códigos pin ni dibujando patrones.

A continuación podéis ver el contenido del paquete:


  • Teléfono Móvil.
  • Adaptador de Auriculares para conectar auriculares al puerto USB.
  • Alimentador de Corriente con con conector USA.
  • Adaptador de corriente EUR.
  • USB Cable Type C.
  • Aguja para extraer SIM. 
  • Manual en Inglés.
Como muchos smartphones chinos, viene con un alimentador de corriente con conector USA y te mandan un adaptador, algo que no me convence. Deberían proporcionar el alimentador con conector europeo directamente.

Me gusta que el conector de carga sea USB Tipo C. Es realmente cómodo no tener que estar mirando el conector a la hora de enchufarlo.


Rendimiento y potencia

El Le S3 x626 monta un procesador Helio X20 Deca Core a 2.3GHz de 64 bits, 4GB de memoria RAM y una GPU Arm Mali-T880 780MHz. En cuanto al almacenamiento interno, tiene dos opciones: 32GB  o 64GB.

Tiene una increíble fluidez que proporciona una experiencia de uso realmente agradable.

Como sistema operativo, utiliza EUI 5.8, un sistema basado en Android 6.0.


Cámaras

Este dispositivo dispone de dos cámaras:
  • Una cámara principal de 16 Mpx con sensor Omnivision OV16880 apertura f/2.0 y flash dual led.
  • Una cámara delantera para selfies de 8 Mpx.
Una de las cosas que más nos ha sorprendido de este dispositivo es la increíble calidad de su cámara principal tanto a la hora de hacer fotos como de grabar vídeos.

A continuación podéis ver un par de fotos hechas con la cámara para que os hagáis una idea acerca de su calidad:



Y un vídeo grabado también con ella:



Os sorprenderá gratamente porque graba vídeo a 4K.

Tiene autoenfoque, lo que os facilitará enormemente la realización de fotografías o vídeos.

Dispone de función de disparo Continuo o Ráfaga, algo super-interesante porque nos va a permitir realizar varias tomas seguidas para luego escoger la mejor.

Por otro lado, también cuenta con la posibilidad de realizar Zoom Digital, utilizar el modo HDR, realizar ajustes ISO o incluso utilizar enfoque manual y, por supuesto, realizar fotos panorámicas.

Pero además, dispone de una función que nos ha encantado: Vídeo Slow Motion, con el que podremos grabar vídeos a cámara lenta, capturando 120 fps.


Sonido

En la parte inferior tenemos el conector USB Tipo-C, un sistema de doble altavoz con los que logra el efecto estéreo con buena calidad de sonido y el micrófono:



Utiliza una tecnología llamada CDLA (Continual Digital Lossless Audio). Si queremos, podemos conectar unos auriculares con conector jack gracias al adaptador que viene en la caja. No obstante, también podemos comprar unos auriculares con conector USB Tipo C que nos proporcionarán mayor calidad de sonido.

Además soporta tecnología Dolby Atmos.


Conectividad

Es importante destacar que es un dispositivo con conectividad 4G, algo fundamental hoy en día para navegar a una buena velocidad. Naturalmente dispone también de conectividad 3G y 2G.

Wifi:
Podéis conectarlo a cualquier tipo de red wifi disponible en la actualidad porque soporta los siguientes estándares: 802.11a, 802.11b, 802.11g, 802.11n, 802.11ac 

Además dispone de las siguientes funciones:
  • Wi-Fi Direct: Esta función nos permite compartir archivos entre los dispositivos mediante una red wifi creada entre ambos. 
  • Wi-Fi Display: Permite mostrar contenidos multimedia en otros dispositivos.
  • Punto acceso Wi-Fi: Permite compartir la conexión a internet con otros dispositivos.
Bluetooth: 
Dispone de Bluetooth 4.1 LE (Bajo consumo de energía)

Perfiles bluetooth soportados:
  • A2DP (Distibucion de audio avanzada) 
  • EDR (Enhanced Data Rate) 
  • LE (Low Energy)
GPS:
Soporta A-GPS, Beidou, GLONASS, GPS


Autonomía

En lo que a autonomía se refiere, el LeEco Le S3 dispone de una batería no extraíble de 3000mAh con USB tipo C y sistema de carga rápida. Una característica que debería venir de serie ya con todos los smartphones.


En resumen.
Un dispositivo realmente económico con prestaciones de gama media-alta, muy potente, con una conectividad excelente y una increíble cámara con la que hacer excelentes fotos y grabar vídeos a 4k. 

Comprar en GearBest

Si buscáis un smartphone bueno y bonito a un precio razonable, os recomendamos el LeEco Le S3 X626. Nosotros, desde que lo compramos, estamos encantados con él.
Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at February 28, 2018 07:38 PM

Modificado el script reinstall_nwfermi_module para añadir el módulo a todos los kernels instalados

Aprovechando que había escrito el código del script reinstall_nvidia_module para añadir el módulo de NVIDIA a todos los kernels instalados, y es perfectamente válido para instalar cualquier otro módulo, he modificado reinstall_nwfermi_module para que también añada el módulo a todos los kernels instalados.
#!/bin/bash

PKGNAME='nwfermi'
PKGVER=`dpkg-query -W -f='${Version}' $PKGNAME | awk -F "-" '{print $1}'`
PKGVER=${PKGVER#*:}

echo "Removing all DKMS Modules"
dkms remove -m $PKGNAME -v $PKGVER --all -q > /dev/null
echo "Done."
echo "Adding Module to DKMS build system"
echo "driver version= $PKGVER"
dkms add -m $PKGNAME -v $PKGVER > /dev/null
echo "Doing initial module build"
dkms build -m $PKGNAME -v $PKGVER > /dev/null

echo "Installing initial module"
dkms install -m $PKGNAME -v $PKGVER > /dev/null
echo "Done."

CANDIDATES=`ls -tr /boot/vmlinuz-* | cut -d- -f2- | awk '{print $0}' | sed 's/.efi.signed.*//g' | sort -u`

for KERNEL in $CANDIDATES; do
echo "Installing module $PKGNAME on kernel $KERNEL"
dkms install -m $PKGNAME -v $PKGVER -k $KERNEL > /dev/null
echo "Done."
done

Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (Esteban M. Navas Martín) at February 28, 2018 11:59 AM

systemadmin.es

Comprobar disponibilidad de protocolos SSL

Para un determinado servicio SSL podemos verificar mediante openssl s_client. Vamos a ver cómo:

El subcomando s_client dispone de opciones para indicar el protocolo a usar:

echo | openssl s_client -connect systemadmin.es:443 -ssl3
echo | openssl s_client -connect systemadmin.es:443 -tls1_2
echo | openssl s_client -connect systemadmin.es:443 -tls1_1
echo | openssl s_client -connect systemadmin.es:443 -tls1

Por lo tanto simplemente buscando si se establece la sesión podemos ver si el protocolo esta soportado en el lado servidor:

# echo | openssl s_client -connect systemadmin.es:443 -tls1_2 2>&1 | grep "Session-ID: "
    Session-ID: AA27E5EAC09CF474E38E8934B81CAE0D5759BFDAFAA0274AB37B38D6715F84EB
# echo | openssl s_client -connect systemadmin.es:443 -ssl3 2>&1 | grep "Session-ID: "

Por lo tanto, podemos ver que en este caso TLS 1.2 esta soportado mientras SSLv3 no

Tags:

by Jordi Prats at February 28, 2018 06:36 AM

February 27, 2018

enavas.blogspot.com.es

Cable magnético USB 3 en 1 con conector de 8 pines, micro usb, usb tipo C

Éste es uno de los cables que no puede faltar en nuestra mochila, en nuestro bolso o en el coche:


El kit contiene lo que véis en la imagen:
  • Un cable USB de 1 metro de longitud con conexión magnética.
  • Un adaptador de 8 Pines para iPhone.
  • Un adaptador USB Type-C.
  • Un adaptador Micro USB.
Tiene una carcasa de aluminio que lo hace resistente y duradero. Pero, además, tiene una luz LED indicadora que nos mostrará el estado de carga del dispositivo. Y es válido tanto para cargar el dispositivo como para usarlo como cable de transferencia de datos.

La principal ventaja que tienen este tipo de cables es que podemos dejar el adaptador insertado en nuestro teléfono, con lo que lograremos dos cosas:
  • Evitaremos que entre polvo en el conector de carga de nuestro smartphone.
  • Evitaremos que el conector se estropee por estar conectando y desconectando el cargador, algo que sucede con mucha frecuencia y es uno de los principales motivos de avería de muchos smartphones.

Además es muy baratito. Os lo recomendamos.

Comprar en GearBest

Publicado por primera vez en http://enavas.blogspot.com.es

by [email protected] (sagrario) at February 27, 2018 07:18 PM