Category: Programación

Checks the Linux supported release

3.1.1.005-GEN000100.bash

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
 
#!/bin/bash
# Copyright (C) 2011 simonalsa
# http://www.simonalsa.com
# Author Simon Alonso Sanchez <simonalsa@simonalsa.com>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 2
# of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 
 
# Security Technical Implementation Guide (STIG)
# Security Readiness Review (SRR)
# Tested in GNU/Linux Debian distribution
 
# STIG|SRR definition
NUMBER="3.1.1.005"
LABEL="GEN000100"
 
# Section:
SECTION="Linux overview and site information"
 
# Process:
PROCESS="Operating system"
 
# Description:
DESCRIPTION="Checks the Linux supported release"
 
# Include global preferences
if [ -e $PWD/preferences.cfg ]; then
        source $PWD/preferences.cfg
else
        echo -e "Can not include the global preferences at $PWD/preferences.cfg \r"
        exit
fi
 
# Include local preferences
if [ -e $PWD/$NUMBER-$LABEL.prefs ]; then
        source $PWD/$NUMBER-$LABEL.prefs
else
        echo -e "Can not include the local preferences at $PWD/$NUMBER-$LABEL.prefs \r"
        exit
fi
 
# Section.Description
echo -e "STIG|SRR definition \r"
echo -e "\t Number: $NUMBER \r"
echo -e "\t Label: $LABEL \r"
echo -e "\t Section: $SECTION \r"
echo -e "\t Process: $PROCESS \r"
echo -e "\t Description: $DESCRIPTION \r"
echo -e "\r"
 
# Perform
 
if [ -x $CMD_LSB_RELEASE ]; then
 
        CMD=$($CMD_LSB_RELEASE -d -s)
        if [ $? -eq 0 ]; then
                echo -e "Linux LSB release: \r"
                echo -e "\t $CMD \r"
        else
                echo -e "Can not locate the Linux LSB release \r"
        fi
else
        echo -e "Can not locate the $CMD_LSB_RELEASE in the filesystem \r"
        exit
fi
 
 
if [ -x $CMD_UNAME ]; then
        CMD=$($CMD_UNAME)
        if [ $? -eq 0 ]; then
                KERNEL_NAME=$($CMD_UNAME --kernel-name)
                KERNEL_RELEASE=$($CMD_UNAME --kernel-release)
                KERNEL_VERSION=$($CMD_UNAME --kernel-version)
                KERNEL_MACHINE=$($CMD_UNAME --machine)
                KERNEL_PROCESSOR=$($CMD_UNAME --processor)
                KERNEL_HARDWARE=$($CMD_UNAME --hardware-platform)
                KERNEL_OS=$($CMD_UNAME --operating-system)
 
                echo -e "Kernel release: \r"
                echo -e "\t Name: $KERNEL_NAME \r"
                echo -e "\t Release: $KERNEL_RELEASE \r"
                echo -e "\t Version: $KERNEL_VERSION \r"
                echo -e "\t Machine: $KERNEL_MACHINE \r"
                echo -e "\t Processor: $KERNEL_PROCESSOR \r"
                echo -e "\t Hardware: $KERNEL_HARDWARE \r"
                echo -e "\t Operating system: $KERNEL_OS \r"
 
        else
                echo -e "Can not locate the Linux Kernel release \r"
        fi
else
        echo -e "Can not locate the $CMD_UNAME in the filesystem \r"
        exit
fi
 
echo -e "\r"

3.1.1.005-GEN000100.bash

 

1
# Nothing

 

Sample output

simonalsa@Desktop-01:~/$ bash 3.1.1.005-GEN000100.bash
STIG|SRR definition
         Number: 3.1.1.005
         Label: GEN000100
         Section: Linux overview and site information
         Process: Operating system
         Description: Checks the Linux supported release

Linux LSB release:
         Debian GNU/Linux 6.0.3 (squeeze)
Kernel release:
         Name: Linux
         Release: 2.6.32-5-amd64
         Version: #1 SMP Thu Nov 3 03:41:26 UTC 2011
         Machine: x86_64
         Processor: unknown
         Hardware: unknown
         Operating system: GNU/Linux
 

Bash shell script for test the availability about commands in the filesystem

The objective is the reuse about variables and why not all GNU/Linux distributions installs the commands by default in the same place

I am going to allocate  a variable per each different command. This file will be included in other shell scripts.

preferences.cfg

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
CMD_AWK="/usr/bin/awk"
CMD_CAT="/bin/cat"
CMD_CHGRP="/bin/chgrp"
CMD_CHMOD="/bin/chmod"
CMD_DD="/bin/dd"
CMD_DIFF="/usr/bin/diff"
CMD_ECHO="/bin/echo"
CMD_FIND="/usr/bin/find"
CMD_GREP="/bin/grep"
CMD_LAST="/usr/bin/last"
CMD_LASTB="/usr/bin/lastb"
CMD_LS="/bin/ls"
CMD_LSB_RELEASE="/usr/bin/lsb_release"
CMD_MKDIR="/bin/mkdir"
CMD_MKFS="/sbin/mkfs.ext2"
CMD_MKNOD="/bin/mknod"
CMD_MOUNT="/bin/mount"
CMD_MYSQL="/usr/bin/mysql"
CMD_PHP="/usr/bin/php5"
CMD_SED="/bin/sed"
CMD_SEQ="/usr/bin/seq"
CMD_SORT="/usr/bin/sort"
CMD_STAT="/usr/bin/stat"
CMD_TAIL="/usr/bin/tail"
CMD_TOUCH="/bin/touch"
CMD_TUNE2FS="/sbin/tune2fs"
CMD_UNAME="/bin/uname"
CMD_YES="/usr/bin/yes"
CMD_WC="/usr/bin/wc"

 

This shell script "preferences.bash" checks the availability about each command defined in the variables saved in the data file "preferences.cfg".

preferences.bash

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/bash
# Check the availability about the commands that will be used
 
# Include global preferences
source $PWD/preferences.cfg
 
CMD=$($CMD_CAT $PWD/preferences.cfg)
 
echo -e &quot;Check the availability about the commands that will be used \r&quot;
 
# Checks if path is ok
for line in $CMD;
do
        TEST=$($CMD_ECHO &quot;$line&quot; | $CMD_AWK -F= '{ print $2 }' | $CMD_SED 's/&quot;//g')
 
        echo -n &quot;&quot;
        if [ -e $TEST ]; then
                echo -n &quot;[Passed]&quot;
        else
                echo -n &quot;[Failed]&quot;
        fi
 
        echo -n &quot; ... $TEST&quot;
        echo -e &quot;\r&quot;
done;

 

Sample output

Check the availability about the commands that will be used
[Passed] … /usr/bin/awk
[Passed] … /bin/cat
[Passed] … /bin/chgrp
[Passed] … /bin/chmod
[Passed] … /bin/dd
[Passed] … /usr/bin/diff
[Passed] … /bin/echo
[Passed] … /usr/bin/find
[Passed] … /bin/grep
[Passed] … /usr/bin/last
[Passed] … /usr/bin/lastb
[Passed] … /bin/ls
[Passed] … /usr/bin/lsb_release
[Passed] … /bin/mkdir
[Passed] … /sbin/mkfs.ext2
[Passed] … /bin/mknod
[Passed] … /bin/mount
[Failed] … /usr/bin/mysql
[Failed] … /usr/bin/php5
[Passed] … /bin/sed
[Passed] … /usr/bin/seq
[Passed] … /usr/bin/sort
[Passed] … /usr/bin/stat
[Passed] … /usr/bin/tail
[Passed] … /bin/touch
[Passed] … /sbin/tune2fs
[Passed] … /bin/uname
[Passed] … /usr/bin/yes
[Passed] … /usr/bin/wc
 

Xen XCP Backup/export all the virtual machines that are in halted state availables in Xen XCP’s domain

This script export all the virtual machines that are in halted state availables in Xen XCP’s domain.

The process is simple. Exports the virtual machine to the filesystem and compress the exported virtual machine into the filesystem. Repeat the process for each one virtual machine available in the Xen XCP’s domain.

Finally (as you want) shut down the host

Backup.bash

      1 #/bin/bash
      2
      3 DATESTAMP=$(date +%F)
      4
      5 UUIDS=$(xe vm-list | grep uuid | awk -F: ‘ { print $2 }’ | sed ‘s/ //g’)
      6
      7 for UUID in $UUIDS
      8 do
      9         NAME=$(xe vm-list uuid=$UUID | grep name | awk -F: ‘ { print $2 }’ | sed ‘s/ //g’)
     10         if [ $NAME != "Controldomainonhost" ]; then
     11                 xe vm-export filename=/backup/$UUID\_$NAME\_$DATESTAMP.xva uuid=$UUID
     12                 if [ $? -eq 0 ]; then
     13                         echo -e "The virtual machine $NAME has been exported"
     14                 else
     15                         echo -e "Can not export the virtual machine $NAME"
     16                 fi
     17
     18                 gzip -9 /backup/$UUID\_$NAME\_$DATESTAMP.xva
     19                 rm -f /backup/$UUID\_$NAME\_$DATESTAMP.xva
     20         fi
     21 done
     22
     23
     24 shutdown -h now
 

Result

[root@thor 20120118]# ls -lh *.gz | awk ‘{ print $9,"(",$5,")" }’
10761c7f-70a2-1263-43d4-53fdd059cf81_Log-Server-1.0_2012-01-18.xva.gz ( 417M )
16d0b2d3-51c1-e692-7f90-2473277b0f50_Web-Server-2.0_2012-01-18.xva.gz ( 1.1G )
1b8feb8e-04fe-2a4e-5716-dde1e375b2f9_LDAP-Server-2.0_2012-01-18.xva.gz ( 394M )
3e7ae452-52fb-7f3b-b105-087981a8a8b0_Application-Server-01_2012-01-18.xva.gz ( 994M )
46f069fb-0ca1-cbb0-d64c-2a5ea1d2a4bb_File-Server-2.0_2012-01-18.xva.gz ( 37G )
526e3294-b61b-7c39-debb-325d238c85f9_DNS-Server-1.0_2012-01-18.xva.gz ( 731M )
668d4e9b-cb44-24f7-7d23-2e0efc6627c3_Sql-Server-1.0_2012-01-18.xva.gz ( 7.4G )
6a7bea88-8b49-bc77-6cc9-06601aea6eaf_XCP-Server-1.1_2012-01-18.xva.gz ( 515M )
88357478-ac9e-51d1-b27d-2a9da6d75a3d_LDAP-Server-1.0_2012-01-18.xva.gz ( 380M )
910cbd07-3dde-974d-5595-3021103ad656_File-Server-1.0_2012-01-18.xva.gz ( 78G )
9e07177c-5bee-61a3-f743-6675f6a6a81e_DNS-Server-2.0_2012-01-18.xva.gz ( 435M )
f8c2291a-a387-69ca-a95e-e0383f717f83_Debian-Desktop-1.0_2012-01-18.xva.gz ( 1.1G )
 

 

Filesystem, MySQL and Crontab Backup application system

I have used two proffesional scripts for backup the application filesystem and database.

Filesystem

# (c) 2001 Chris Arrowood (GNU LGPL V2.1)
# You may view the full copyright text at:
# <a href="http://www.opensource.org/licenses/lgpl-license.html">http://www.opensource.org/licenses/lgpl-license.html</a>
# <a href="http://simplebashbu.sourceforge.net/">http://simplebashbu.sourceforge.net/</a>
# DESCRIPTION:
# A simple BASH script to do nightly backups to tarballs
# on a hard drive (not to tape)  Ideal for home linux users
# to easily backup thier system, provided they have an extra
# hard drive.
#

Basic configuration:

###############################################
#              User Variables                 #
###############################################
#
# Modify these variables to suit your needs
#
# Which day of the week do we want to do full backups? 0=Sunday
  LEVEL0DAY=0
# Where to create the backups; It should already exist
  BACKUP_DIR=/backup/fs
# Filesystems to backup seperated by spaces and the entire string in double quotes; each must start with /
  FILESYSTEMS="/var/www/www.simonalsa.com"
# Should we email results? Also should we email critical errors?  0=false, 1=true
  EMAIL=1
# EMAIL address to send results to
  EMAILADDRESS=simonalsa@simonalsa.com
# Email Subject
  EMAILSUBJECT="$HOSTNAME www.simonalsa.com Filesystem Backup"
# Only keep last weeks level0 backup (0) or keep all lvl 0 backups (1).  Keeping all data may take a lot of space!
  KEEPALL=0
# Do we wnat to compress the backup file using gzip? 0=false, 1=true
  COMPRESS=1
# Should we compress the log file when we are done?  0=false, 1=true
  COMPRESSLOG=1
# If we are compressing, what level do we use?
  COMPRESSLEVEL=6
# Determines whether we see all output to screen. It will still go to log regardless of this value.   0=false, 1=true
  QUIET=1
# Would you like to get detailed information from tar and gzip? 0=false, 1=true  
  VERBOSE=1

Script: backup_www.simonalsa.com.sh

Database 

# MySQL Backup Script
# VER. 2.5.1 - <a href="http://sourceforge.net/projects/automysqlbackup/">http://sourceforge.net/projects/automysqlbackup/</a>
# Copyright (c) 2002-2003 wipe_out@lycos.co.uk
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
Script: <a href="http://www.simonalsa.com/wp-content/uploads/2011/05/backup_mysql.simonalsa.com_.zip">backup_mysql.simonalsa.com</a>

Basic configuration:

 
### START CFG ###
 # Username to access the MySQL server e.g. dbuser
 USERNAME=dbo
 
 # Password to access the MySQL server e.g. password
 PASSWORD=
 
 # Host name (or IP address) of MySQL server e.g localhost
 DBHOST=db.simonalsa.com
 
 # List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3"
 DBNAMES="db"
 
 # Backup directory location e.g /backups
 BACKUPDIR="/backup/db"
 
 # Mail setup
 # What would you like to be mailed to you?
 # - log   : send only log file
 # - files : send log file and sql files as attachments (see docs)
 # - stdout : will simply output the log to the screen if run manually.
 # - quiet : Only send logs if an error occurs to the MAILADDR.
 MAILCONTENT="log"
 
 # Set the maximum allowed email size in k. (4000 = approx 5MB email [see docs])
 MAXATTSIZE="4000"
 
 # Email Address to send mail to? (<a href="mailto:user@domain.com">user@domain.com</a>)
 MAILADDR="simonalsa@simonalsa.com"

Crontab

File: crontab_backup

Content:

1 1 * * * /script/backup_www.simonalsa.com.sh
30 1 * * * /script/backup_mysql.simonalsa.com.sh

Uniformes escolares

Estado:

Uniformes escolares es un proyecto único generado para satisfacer las necesidades de la publicación, gestión, venta y distribución del inventario de productos de un fabricante de uniformes escolares. Uniformes escolares es un osCommerce con alto grado de personalización al que se le han incorporado módulos prediseñados resultado de la contribución de la comunidad de desarrollo osCommerce. Entre las principales tecnologías utilizadas para el desarrollo del mismo se ha utilizado, CSS, HTML, Javascript, PHP y MySQL.



  

Necesidades: -Crear un catálogo privado al que sólo se puede acceder con un usuario y contraseña. Cuando se accede a la tienda se solicita un usuario y contraseña y a la par se habilita un formulario de registro; el padre o madre se da de alta en el sistema facilitando información básica de registro, perfil, facturación y envíó. Una vez el padre o madre introduce su usuario y contraseña conecta a la tienda visualizando el margen lateral izquierdo de la página un listado de Catálogos de colegios.  -Crear catálogos de colegios privados. Esto quiere decir que cada catálogo de colegio (mencionado en el párrafo anterior) tiene una clave personal única y distinta de los demás. Esto posibilita que el padre y madre una vez se haya registrado en el sistema y conectado con su usuario y contraseña pueda acceder a aquellos contenidos del catálogos de colegio que tenga derecho a ver utilizando el o los códigos que se consideren oportunos. Una vez que visualize los productos del catálogo puede seleccionar aquel o aquellos que le interesen, la cuantía y agregarlos a la cesta virtual de la compra para a posteriri realizar el pedido y pagar con tarjeta de crédito el pedido. -Precios únicos. Esta solución permite establecer un precio único para cada producto contenido en el catálogo de un colegio. Esto quiere decir que por ejemplo el mismo producto en dos colegios distintos pueden tener un precio distinto. -Stockage de producto. Cada producto tiene n unidades. Sólo se puede vender aquello que hay en stock y no se visualiza la cuantía disponible en stockage de los productos del catálogo. Esta solución permite establecer una cuantía n para cada producto contenido en el catálogo de un colegio. Esto quiere decir que por ejemplo el mismo producto en dos colegios distintos pueden tener un stockage distinto. -Método de envío. He integrado tres componentes que facilitan el cobro de una tasa extra a elección del padre o madre para el envío a través de Correos (Correo ordinario, certificado, europeo), MRV y Seur. Las tasas que utilizan cada uno de estos métodos de envío son actualizables dinámicamente sin mayor complejidad. Este complemento se cobra en la composición de la orden de pedido cuando se paga el pedido con tarjeta de crédito. Las tasas tiene en cuenta el peso unitario de cada artículo que compone la orden de pedido; suma los pesos de los artículos del pedido y lo campara con unas tablas de precios por peso para seleccionar el que le correosponde. -Distribución por correo electrónico de las ordenes de pedido a una, dos o n direcciones de correo electrónico que se quieran definir incluida la del padre o madre. -Control del flujo de la orden de pedido, la orden puede estar en tres estados, pendiente, en proceso o finalizado. Cada vez que se altera el estado de una orden de pedido se notifica al padre o madre de los cambios que se han realizado sobre su orden de pedido. -Número de orden de pedido. Cada orden dispone de un código único de orden de pedido. -Factura de orden de pedido. Disponible en formato de página web y también con exportación a PDF con el logotipo de la empresa. -Albarán de orden de pedido. Disponible en formato de página web y también con exportación a PDF con el logotipo de la empresa. -Etiquetado. Exportación a PDF de la etiqueta con el logotipo de la empresa para que a posteriori con una Dymo-Writer se agrege el código de pedido. -Escalabilidad. La solución propuesta es fácilmente gestionable y puede crecer todo aquello que vosotros queráis crecer, colegios, productos y clientes. Esta solución es un paquete de una aplicación de eCommerce por lo que es factible disponer de actualizaciones, mejoras y parches de seguridad que resuelvan problemas en un futuro versus a las desventajas del desarrollo a medida. -Gestión. A través de un usuario y contraseña con perfil de administrador se puede conectar a la aplicación de gestión para realizar las tareas de control de flujo, expedición de factura, albarán, etiquetado, notificaciones, etc.

 

 

Simple way to connect a PHP Script to a MySQL Server and select a MySQL Database

Simple way to connect a PHP Script to a MySQL Server and select a MySQL Database.

<?php
 
 
        //Define properties
        $db_hostname="localhost";
        $db_user="root";
        $db_passwd="adminmysqlcasa";
        $db_name="family";
 
        //Procedure MySQL connect
        mysql_connect($db_hostname, $db_user, $db_passwd) or die(mysql_error());
        echo "<p>Connected to MySQL host " . $db_hostname . "</p>";
 
 
        //Procedure Select & Use database
        mysql_select_db($db_name) or die(mysql_error());
        echo "<p>Connected to MySQL database " . $db_name . "</p>";
 
 
?>

C source code about the use of atof() function

This is the way in C programming to transform a string variable into a double variable using the atof() funtion of stdlib.h library.

stdio.h library in not need to compile the program.

Source code: atof.c

 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
 
	char field1[100];
 
	double num;
 
 
	printf("Field 1: ");
	scanf("%s", field1);
 
	num=atof(field1);
 
	printf("Convert the Input string %s to the output double %lf",field1,num);
 
}

Compile it from the console width cmd> gcc -o atof.exe atof.c

atof.exe (binary)
atof.c (source code)

C source code about the use of atoi() function

This is the way in C programming to transform a string variable into a integer variable using the atoi() funtion of stdlib.h library.

stdio.h library in not need to compile the program.

Source code: atoi.c

 
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
 
	char field1[100];
 
	int num;
 
 
	printf("Field 1: ");
	scanf("%s", field1);
 
	num=atof(field1);
 
	printf("Convert the Input string %s to the output integer %d",field1,num);
 
}

Compile it from the console width cmd> gcc -o atoi.exe atoi.c

atoi.exe (binary)
atoi.c (source code)

C source code about the use of strlen() function

This is the way in C programming to get the lenght of a string variable into a integer variable using the strlen() funtion of string.h library.

In C a string seems like an a array char variable where each array[n] value contain the character of the string position. In the first position array[0] C save the first char, in the last position array[n] C save the null character that finish the array.

stdio.h library in not need to compile the program.

Source code: strlen.c

 
#include <stdio.h>
#include <string.h>
 
 
int main()
{
 
	char field1[100];
	int  counter;
 
 
	printf("Field: ");
	scanf("%s", field1);
 
	counter=strlen(field1);
 
	printf("Lenght(Field): %d",counter);
 
 
}

Compile it from the console width cmd> gcc -o strlen.exe strlen.c

strlen.exe (binary)
strlen.c (source code)

C source code about the use of strcpy() function

#include <stdio.h>
#include <string.h>
 
 
int main()
{
	char field1[100];
	char field2[100];
 
 
	printf("Field 1: ");
	scanf("%s", field1);
 
	strcpy(field2,field1);
 
	printf("Field 2: %s", field2);
 
 
}

WordPress Themes