Month: dezembro 2009

BASH Scripting ~ aprendizagem por exemplos

BASH Scripting ~ aprendizagem por exemplos

Introduction ~

—————————————–
Program (1) ~ array.sh
—————————————–

#!/bin/bash
echo “==============”
declare -a myarr[0]=”Arun”
declare -a myarr1
myarr1=(arun bagul bangalore mumbai raju santhosh)
myarr[1]=”Bagul”

echo “my name is ${myarr[0]} ${myarr[1]}”
echo “————————–”
echo “${myarr1[*]}”
echo ${myarr1[2]}
echo ${myarr1[@]}
echo “————————–”
echo “Total no of elements in array – ${#myarr1[*]}”
echo “Total no of elements in array – ${#myarr1[@]}”
echo “Size of word ‘${myarr1[2]}’ is – ${#myarr1[2]}”
echo ${#myarr1[1]}
echo ${#myarr1[0]}

echo “————————–”

#how to delete element in array
unset myarr[1]
echo “myarr is – ${myarr[*]}”

#how to assign element in array
myarr[1]=”- System Engineer!”
echo “myarr is – ${myarr[*]}”

echo ${myarr}

————————————————————————
Program (2) ~ command_line_arguments.sh
————————————————————————

#!/bin/bash

echo “Script/command name => $0”
echo “arg1 => $1”
echo “arg2 => $2”
echo “arg3 => $3”
echo “Total No of argument = $#”

echo “Script PID is => $$”
echo “Status of previous command – $?”

name=$myname
echo “Name – $name”

read n

————————————————-
Program (3) ~ default_value.sh
————————————————-

#!/bin/bash

#start=’123′
#start=${1:-$start}

start=${1:-‘123’}

echo “Value of ‘start’ variable is ==> $start”

—————————————————
Program (4) ~ echo_example.sh
—————————————————

#!/bin/bash

name=”Arun”

echo -e “My Name is $name_arun and \n”
echo -e “My Name is ${name}_arun and \n”

echo -e ‘My Name is $name and \n’

—————————————–
Program (5) ~ elif.sh
—————————————–

#! /bin/bash

if [ $1 -eq $2 ];then
echo “good”
elif [ $2 -eq $3 ];then
echo “Fine”
elif [ $1 -eq $3 ];then
echo “OK”
else
echo “NO”
fi

————————————————————
Program (6) ~ for_loop_example-1.sh
————————————————————

#!/bin/bash

i=1
while [ $i -le 512 ]
do
temp=$i
echo “What is => $i | $temp”
i=$(expr $i + 32)
for (( j=$temp; $j<=$i; j++ ))
do
echo -n ” $j”
done
done

———————————————————–
Program (7) ~ for_loop_example-2.sh
———————————————————–

#!/bin/bash
#for val in $(ls -1 /tmp)
sum=0
#for val in {1..5}
#for val in {$1..$2}
for((val=$1;$val<=$2;val++))
do
#echo “$val”
sum=$(expr $sum + $val )
#sum=`expr $sum + $val`
done

echo “$0 # Sum of $1 to $2 => $sum”

————————————————————
Program (8) ~ for_loop_example-3.sh
————————————————————

#!/bin/bash

for i in {1..9}
do
echo $i
done

—————————————–
Program (9) ~ function.sh
—————————————–

#!/bin/bash

function my_function()
{
name=”Arun Bagul”
echo “‘my_function’ body ~ $name”
return 1;
}
##########

myfunc()
{
echo “Another way of defining the function”
}

##########################

echo “Starting function program”
echo “——————————”

#calling function here
my_function
##
myfunc

echo -e “\n end of program”

—————————————————————————————
Program (10) ~ how_to_pass_argument_to_function.sh
—————————————————————————————

#!/bin/bash

function my_function()
{
echo “Total number of argument ~ $#”
echo “Arg1 => $1”
echo “Arg2 => $2”
echo “Arg3 => $3”
return 0;
}
##########

echo “Starting function program”
echo “——————————”

#calling function here
my_function arun bagul 1234

————————————————————————-
Program (11) ~ how_to_take_hidden_input.sh
————————————————————————-

#!/bin/bash

echo -n “Enter User Name :”
read username
echo -n “Enter Password :”
read -s mypwd

echo -e “\nI am $username and my password is – $mypwd”

——————————————————————————
Program (12) ~ how_to_take_input_from_user.sh
—————————————————————————–

#!/bin/bash

echo -ne “Enter the Name:- ”
read name
echo -n -e “Enter the Number:- ”
read num

echo “——————————”

add=$(expr $num + 10)

echo “Name is ~ $name”
echo “Number is ~ $add”

—————————————–
Program (13) ~ ifthen.sh
—————————————–

#!/bin/bash

if [ “arun” == “arun” ];then
echo “true!”
else
echo “false”
fi

echo “———————————-”

if [ 2 == 2 ];then
echo “true!”
else
echo “false”
fi

echo “———————————-”

if [ “arun” = “arun” ];then
echo “true!”
else
echo “false”
fi

echo “———————————-”

if [ 2 -eq 2 ];then
echo “true!”
else
echo “false”
fi

——————————————————
Program (14) ~ non-interactive.sh
——————————————————

#!/usr/bin/expect -f
spawn ssh arun@192.168.0.1
expect “password:”
sleep 1
send “pwd\r”
interact

—————————————————————-
Program (15) ~ read_file_line_by_line.sh
—————————————————————-

#!/bin/bash

file_name=”/etc/hosts”

while read myvar
do
echo “Line => $myvar”
done < $file_name

echo “#################################################”

for myvar1 in $(cat $file_name)
do
echo “Line => $myvar1”
done

——————————————————
Program (16) ~ reverse-number.sh
——————————————————

#!/bin/bash

declare -a date_array
num=$1
i=$(expr $(echo $num | wc -c) – 1 )

while [ $num -gt 10 ]
do
temp=$( expr $num % 10 )
num=$( expr $num / 10);
echo “Digit($i) => $temp”
date_array[$i]=”${temp}”
i=$(expr $i – 1)
done
echo “Digit($i) => $num”
date_array[$i]=”${num}”

echo ${date_array[*]}

——————————————————–
Program (17) ~ string-operation.sh
——————————————————–

#! /bin/bash

echo “Arun Bagul:-”
string=”/root/arun/bagul/image.gif”
echo “string=> $string”
echo “String=> ${string##/*/}”
echo “String=> ${string#/*/}”

echo “String=> ${string%.*}”
echo “String=> ${string%%.*}”
#str=”/home/y/conf/arunbagul/daily_market_0.conf”
str=”${str##/*conf/}”
echo “String=> ${str%/*}”

#done

mystr=”keyword_summary_exact_arunsb”
echo $mystr
echo ${mystr%_*}

echo “$*”

—————————————–
Program (18) ~ switch.sh
—————————————–

#!/bin/bash

echo ” Switch program | arg1 => $1″
echo ” ——————————-”
case $1 in

123)
echo “Case is 123”
;;

arun)
echo “Case is ‘arun'”
;;

pri*)

echo “Case is ‘pri*'”
;;

*)
echo ” * Usage: $0 ”
echo ” Default case (nothing is matched)”
exit 0;
;;
esac

—————————————————————–
Program (19) ~ while_loop_example-1.sh
——————————————————————

#!/bin/bash

mywait=wait

while [ “${mywait}” = “wait” ]
do
echo “arun”
done

——————————————————————-
Program (20) ~ while_loop_example-2.sh
——————————————————————–

#! /bin/bash

## on command line -> i=0 && while [ $i -le 10 ] ; do echo $i; i=$(expr $i + 1); done

i=0
while [ $i -le 10 ]
do
echo $i
i=$(expr $i + 1)
done

——————————————————————–

* Please download PDF file http://www.slideshare.net/arunbagul/bash-learning-by-examples/

Regards,
Arun

Como configurar vários master replicação do MySQL

Como configurar vários master replicação do MySQL

Introdução ~

Eu estava planejando escrever artigo sobre a replicação do MySQL Multi Master desde muito tempo, finalmente começou agora!. Por favor, consulte o artigo sobre “Como configurar a replicação do MySQL com um mestre” URL ~ http://www.indiangnu.org/2007/mysql-replication-one-master-multiple-slave/

* Deixe-me informá-lo de tudo o que Multi master replicação no MySQL é puramente baseado em duas variáveis. Não tem nada a ver com a tecnologia de replicação usado em replicação do MySQL ….

mysql> show variables like ‘%increment_%’;
+——————————-+——-+
| Variable_name                 | Value |
+——————————-+——-+
| auto_increment_increment      | 1     |
| auto_increment_offset         | 1     |
+——————————-+——-+
2 rows in set (0.00 sec)

mysql>

** Requirements ~

a) Master Hosts (2 master in my case) ~
master-1 => 10.66.66.194
master-2 => 10.66.90.135
b) Replication Slave (1 slave) ~
Slave => 10.66.75.137

c) MySQL server (with replication support)

** Let us understand how it works ?

* Master-1 Server =>

Set following variables…

mysql> set auto_increment_increment=5;
mysql> set auto_increment_offset=1;

mysql> show variables like ‘%increment_%’;
+————————–+——-+
| Variable_name            | Value |
+————————–+——-+
| auto_increment_increment | 2     |
| auto_increment_offset    | 1     |
+————————–+——-+
2 rows in set (0.00 sec)

mysql>

** Create Table ~

mysql> create table class ( rollno INT(5) NOT NULL PRIMARY KEY AUTO_INCREMENT , name VARCHAR(30) );

** Add Record now ~

mysql> INSERT INTO class VALUES (”,’Arun Bagul’);
mysql> INSERT INTO class VALUES (”,’Ravi Bhure’);
mysql> INSERT INTO class VALUES (”,’Karthik Appigita’);
mysql> INSERT INTO class VALUES (”,’Ameya Pandit’);

mysql> SELECT * FROM class;
+——–+——————+
| rollno | name             |
+——–+——————+
|      1 | Arun Bagul       |
|      3 | Ravi Bhure       |
|      5 | Karthik Appigita |
|      7 | Ameya Pandit     |
+——–+——————+
4 rows in set (0.00 sec)

mysql>

* Master-2 Server =>

Set following variables…

mysql> set auto_increment_increment=2;
mysql> set auto_increment_offset=2;

mysql> show variables like ‘%increment_%’;
+————————–+——-+
| Variable_name            | Value |
+————————–+——-+
| auto_increment_increment | 2     |
| auto_increment_offset    | 2     |
+————————–+——-+
2 rows in set (0.00 sec)

mysql>

** Create Table ~

mysql> create table class ( rollno INT(5) NOT NULL PRIMARY KEY AUTO_INCREMENT , name VARCHAR(30) );

** Add Record now ~

mysql> INSERT INTO class VALUES (”,’Nilkanth Parab’);
mysql> INSERT INTO class VALUES (”,’Nishit Shah’);
mysql> INSERT INTO class VALUES (”,’Ram Krishna’);
mysql> INSERT INTO class VALUES (”,’Suhail Thakur’);

mysql> SELECT * FROM class;
+——–+——————+
| rollno | name             |
+——–+——————+
|      2 | Nilkanth Parab   |
|      4 | Nishit Shah      |
|      6 | Ram Krishna      |
|      8 | Suhail Thakur    |
+——–+——————+
4 rows in set (0.00 sec)

mysql>

** What is the importance of “auto_increment_increment” and “auto_increment_offset” ~

mysql> desc class;
+——–+————-+——+—–+———+—————-+
| Field  | Type        | Null | Key | Default | Extra          |
+——–+————-+——+—–+———+—————-+
| rollno | int(5)      | NO   | PRI | NULL    | auto_increment |
| name   | varchar(30) | YES  |     | NULL    |                |
+——–+————-+——+—–+———+—————-+

auto_increment_offset    => This is BASE value for column with “auto_increment” attribute (please refer the above example)
auto_increment_increment => This is the increment value for column with “auto_increment” attribute

** If you combine the both tables (master-1 and master-2) the final table will look like this ~

mysql> SELECT * FROM class;
+——–+——————+
| rollno | name             |
+——–+——————+
|      1 | Arun Bagul       |
|      2 | Nilkanth Parab   |
|      3 | Ravi Bhure       |
|      4 | Nishit Shah      |
|      5 | Karthik Appigita |
|      6 | Ram Krishna      |
|      7 | Ameya Pandit     |
|      8 | Suhail Thakur    |
+——–+——————+
8 rows in set (0.00 sec)

mysql>

** This is how Multi master replication works….

auto_increment_offset=Nth master server
auto_increment_increment=M

Onde —
N => número enésima de servidor principal (master-1 em mantê-1 e no master-2 mantê-la 2 e assim por diante ..)
M => número total de Servidor Mestre (2 no nosso caso, mas melhor para manter este alto valor, para que possamos adicionar novo servidor mestre facilmente)

log-slave-updates => Servidor Slave não registra o seu próprio log binário quaisquer actualizações que são recebidas de um servidor mestre. Esta opção diz ao slave para registrar as atualizações feitas pela thread de SQL para seu próprio log binário.

** Certifique-se que o MySQL está rodando e até em todos os servidores master e slave-servidor

Como configurar Multi Master replicação do MySQL? —

Step 1] Create Database/Tables on  Master  & Slave Servers –

You can create DB on all master & slave server or  create on one server and export that DB on  rest of all servers…

Master-1 => Create DB and Table

mysql> create database student;

mysql> use student;

mysql> create table class ( rollno INT(5) NOT NULL PRIMARY KEY AUTO_INCREMENT , name VARCHAR(30) );

mysql> show tables;
+——————-+
| Tables_in_student |
+——————-+
| class             |
+——————-+
1 row in set (0.00 sec)

mysql> desc class;
+——–+————-+——+—–+———+—————-+
| Field  | Type        | Null | Key | Default | Extra          |
+——–+————-+——+—–+———+—————-+
| rollno | int(5)      | NO   | PRI | NULL    | auto_increment |
| name   | varchar(30) | YES  |     | NULL    |                |
+——–+————-+——+—–+———+—————-+
2 rows in set (0.00 sec)

mysql> SELECT * FROM class;
Empty set (0.00 sec)
mysql>

* Now take dump of “student” DB and export it on all master and Slave server…

[root@master-1~]# mysqldump -u root -p  -d student > /home/arunsb/student.sql

* SCP the dump file on master-2 and slave server ~
[root@master-1~]# scp /home/arunsb/student.sql arunsb@10.66.90.135:/tmp/student.sql
[root@master-1~]# scp /home/arunsb/student.sql arunsb@10.66.75.137:/tmp/student.sql

Login on master-2 and slave ~

mysql> create database student;

[root@master-2~]# mysql -u root -p student < /tmp/student.sql
Enter password:
[root@master-2~]#

[root@master-2~]# mysql -u root -p
Enter password:

mysql> use student

mysql> SELECT * FROM class;
Empty set (0.00 sec)
mysql>

** Please repeat the same steps on Slave server as well…

Step 2] Update “my.cnf” config file on master-1,master-2 and slave server –

[root@master-1~]# cat /etc/my.cnf

###########################
##MySQL replication setting

#Master setting(1)
server-id = 1
log-bin = /var/log/mysql/binary/mysql-bin.log
binlog-do-db = student
binlog-ignore-db = mysql
#log = /var/log/mysql/mysql.log
auto_increment_offset=1
auto_increment_increment=5
log-slave-updates

##slave setting
master-port=3306
master-host=10.66.90.135
master-user=replication
master-password=mypwd
master-connect-retry=60
replicate-do-db=student
###########################

[root@master-1~]#

[root@master-2~]# cat /etc/mysql/my.cnf

###########################
##MySQL replication setting

#Master setting(2)
server-id = 2
log-bin = /var/log/mysql/binary/mysql-bin.log
binlog-do-db=student
binlog-ignore-db = mysql
log = /var/log/mysql/mysql.log
auto_increment_offset=2
auto_increment_increment=5
log-slave-updates

##slave setting
master-port=3306
master-host=10.66.66.194
master-user=replication
master-password=mypwd
master-connect-retry=60
replicate-do-db=student
###########################

[root@master-2~]#

* please create directory for binary log and set permission…

[root@master-1~]# mkdir -p /var/log/mysql/binary/
[root@master-1~]# chown mysql:adm  /var/log/mysql/ /var/log/mysql/binary/

[root@master-2~]# mkdir -p /var/log/mysql/binary/
[root@master-2~]# chown mysql:adm  /var/log/mysql/ /var/log/mysql/binary/

** MySQL Replication Slave ~

[root@slave~]# cat  /etc/my.cnf

[mysqld]

########################################
##slave setting
server-id=4
master-port=3306
master-host=10.66.90.135
master-user=replication
master-password=mypwd
master-connect-retry=60
replicate-do-db=student
########################################

[root@slave~]#

Step 3] Give Replication permission on both masters ~

** Master (1 & 2) ~

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’10.66.%.%’ IDENTIFIED BY ‘mypwd’;
Query OK, 0 rows affected (0.00 sec)

mysql>

Step 4] Restart MySQL on both master as well as replication slave server ~

** Please verify setting on master-1 and master-2 server…

* Master-1

mysql> show variables like ‘%increment_%’;
+————————–+——-+
| Variable_name            | Value |
+————————–+——-+
| auto_increment_increment | 5     |
| auto_increment_offset    | 1     |
+————————–+——-+
2 rows in set (0.00 sec)

* Master-2

mysql> show variables like ‘%increment_%’;
+————————–+——-+
| Variable_name            | Value |
+————————–+——-+
| auto_increment_increment | 5     |
| auto_increment_offset    | 2     |
+————————–+——-+
2 rows in set (0.00 sec)

** Please verify ‘master’ & ‘slave’ status on both masters(1 & 2) and slave –

mysql> show master status;
mysql> show slave status;

** Multi Master replication is started…

Step 5] Add few records on Master-1 & Master-2 server at same time ~

Add records on both master server at same time and check master and replication slave status as shown above….

** Add following on master-1

mysql> INSERT INTO class VALUES (”,’Arun Bagul’);
mysql> INSERT INTO class VALUES (”,’Ravi Bhure’);
mysql> INSERT INTO class VALUES (”,’Karthik Appigita’);
mysql> INSERT INTO class VALUES (”,’Ameya Pandit’);

** Add following on master-2

mysql> INSERT INTO class VALUES (”,’Nilkanth Parab’);
mysql> INSERT INTO class VALUES (”,’Nishit Shah’);
mysql> INSERT INTO class VALUES (”,’Ram Krishna’);
mysql> INSERT INTO class VALUES (”,’Suhail Thakur’);

** Please verify the numbers of records on both masters and slave….

mysql> SELECT * FROM class;
+——–+——————+
| rollno | name             |
+——–+——————+
|      1 | Arun Bagul       |
|      2 | Nilkanth Parab   |
|      6 | Ravi Bhure       |
|     11 | Karthik Appigita |
|     16 | Ameya Pandit     |
|     17 | Nishit Shah      |
|     22 | Ram Krishna      |
|     27 | Suhail Thakur    |
+——–+——————+
8 rows in set (0.00 sec)

mysql>

* Portanto, todos nós aprendemos a configurar multi-replicação do MySQL mestre. Aproveite!

Atenciosamente,
Arun Bagul

Como criar ou construir pacotes RPM

Como criar ou construir pacotes RPM

Introdução —

Ferramenta * “rpmbuild” é usado para construir tanto …

1) Pacote binário ~ usada para instalar o software e suporte scripts. Ele contém os arquivos que compõem o pedido, juntamente com todas as informações adicionais necessárias para instalar e apagá-la.
Source Package 2) ~ contém o arquivo tar compactados originais do código-fonte, patches e especificação de arquivo.

* Qual é o RPM & gerenciador de pacotes rpm?

O RPM Package Manager (RPM) é uma poderosa linha de comando do sistema de gerenciamento de pacotes capazes de instalar, desinstalar, verificando, consulta e atualização de pacotes de software.

RPM pacote consiste de um repositório de arquivos e meta-dados usados para instalar e apagar os ficheiros de arquivo. A meta-dados inclui scripts auxiliares, os atributos do arquivo, e informações descritivas sobre o pacote.

* Para construir o pacote RPM que você precisa especificar três coisas ~

1) Fonte de aplicação – Em qualquer caso, você não deve modificar as fontes utilizadas no processo de construção do pacote.

2) Patches – RPM lhe dá a capacidade para aplicar automaticamente patches para eles. O patch corrige um problema específico para o sistema alvo. Isto pode incluir mudanças makefiles para instalar o aplicativo para o apropriado diretórios, ou resolução de conflitos plataforma. Patches criar o ambiente necessário para a compilação adequada.

3) Especificação do Arquivo – A especificação é no coração do processo de construção de pacotes RPM. Ele contém informações exigidas pela RPM para construir o pacote, bem como instruções dizendo RPM como construí-lo. O arquivo de especificação também dita exatamente quais arquivos são uma parte do pacote, e onde deve ser instalado.

** Especificação do arquivo ~ é dividido em 8 seções conforme mostrado abaixo

a) Preâmbulo ~ contém informações que serão exibidas quando os usuários solicitarem informações sobre o pacote. Isso pode incluir uma descrição da função do pacote, o número de versão do software, etc

b) Preparação ~ onde o trabalho real de construção de um pacote é iniciado. Como o nome indica, esta seção é onde os preparativos necessários sejam feitos antes de o edifício atual do software. Em geral, se algo precisa ser feito para as fontes antes de construir o software, ele precisa acontecer na seção de preparação. O conteúdo desta secção é um shell script comum. No entanto, RPM prevê duas macros para tornar a vida mais fácil. Uma macro pode descompactar um arquivo tar compactado e CD para o diretório de origem. A macro outros patches facilmente se aplica às fontes de descompactado.

c) Construir ~ Esta secção é constituída por um shell script. Ele é usado para executar qualquer comandos são realmente necessário para compilar os fontes como único comando make, ou ser mais complexo se o processo de criação exige. Não existem macros disponíveis nesta seção.

d) Instalar ~ Esta seção também contém um shell script, a seção de instalação é usada para executar os comandos necessários para realmente instalar o software.

e) Instalar e desinstalar scripts ~ É constituída de scripts que serão executados, no sistema do usuário, quando o pacote é realmente instalados ou removidos. RPM pode executar um script pré / pós-instalação / remoção do pacote.

f) Verificar Script ~ script que é executado no sistema do usuário. É executado quando RPM verifica a instalação correta do pacote.

g) Limpeza Seção ~ script que pode limpar as coisas após a compilação. Este script é raramente usada, desde RPM normalmente faz um bom trabalho de limpeza na maioria dos ambientes de criação.

h) Lista de arquivos ~ consiste de uma lista de arquivos que compõem o pacote. Além disso, um número de macros podem ser usadas para controlar atributos de ficheiro, quando instalado, bem como para indicar quais arquivos são a documentação, e que contêm informações de configuração. A lista de arquivos é muito importante.

Requisito *** RPM’s para ambiente de construção ~

A] RPM requer um conjunto de diretórios para executar a construção. Enquanto os diretórios locais e nomes podem ser mudados. Layout padrão é mostrado abaixo —

root @ arunsb: ~ # ls-l / usr / src / redhat /

drwxr-xr-x 2 root root 4096 Aug 25 2007 Fontes => contém as fontes originais, patches e arquivos de ícone
drwxr-xr-x 2 root root 4096 Aug 25 2007 SPECS => Contém os arquivos de especificação
drwxr-xr-x 2 root root 4096 Aug 25 2007 Build => Directory em que as fontes são descompactados, e software é construído
drwxr-xr-x 8 root root 4096 28 de maio de 2008 RPMS => Contém o pacote binário arquivos criados pelo processo de construção
drwxr-xr-x 2 root root 4096 Aug 25 2007 SRPMS => contém o pacote de fonte de arquivos criados pelo processo de construção

root @ arunsb: ~ #

B] precisa exportar algumas variáveis globais utilizadas por RPM —

root @ arunsb: ~ # export RPM_BUILD_DIR = /usr/src/redhat/BUILD/
root @ arunsb: ~ # export RPM_SOURCE_DIR =/usr/src/redhat/SOURCES/

Passo 1] Criar especificação (spec) Arquivo ~

root@arunsb:~# head -n 50  /usr/src/redhat/SPECS/openlsm.spec
# Authority: Arun Bagul

#RPM_BUILD_DIR    /usr/src/redhat/BUILD/
#RPM_SOURCE_DIR    /usr/src/redhat/SOURCES/

%define MY_PREFIX    /usr/local/openlsm/

## Preamble Section-
Name: openlsm
Version: 0.99
Vendor: IndianGNU.org & openlsm
Release: r45
Group: System Environment/Daemons
Packager: IndianGNU.org (http://www.indiangnu.org)
URL: http://openlsm.sourceforge.net/
Summary: openlsm Admin Server
License: GPL

%description
openlsm Admin Server is free & open source web based control panel for Linux,Unix systems.

## Preparation Section-
%prep

rm -rf ${RPM_BUILD_DIR}/openlsm-0.99-r45/
tar xvfz ${RPM_SOURCE_DIR}/openlsm-0.99-r45.tar.gz -C ${RPM_BUILD_DIR}

## Build Section-
%build

cd ./openlsm-0.99-r45/
./configure –prefix=/usr/local/openlsm –with-mysql=/usr/bin/mysql_config –enable-internal-pcre –with-geoip=/usr –with-ldap=/usr –enable-trace
make

## Install Section-
%install

cd ./openlsm-0.99-r45/
make install

## Files Section-
%files

/usr/local/openlsm
/usr/local/openlsm/etc/openlsm/openlsm.conf
/usr/local/openlsm/etc/openlsm/openlsm.conf.perf_sample
/usr/local/openlsm/etc/openlsm/ssl/
/usr/local/openlsm/bin/openlsm-config
….
…..
….. list of files installed by pkg
root@arunsb:~#

* Como você criar a lista de arquivos?

Criando a lista de arquivos processo é manual. O que eu fiz é que eu peguei a lista de arquivos do meu diretório prefixo manual instalado com o comando find, como mostrado abaixo …

root@arunsb:~# find /usr/local/openlsm/ -type f -or  -type d

Etapa 2] A partir do Build ~

root@arunsb:~# cd /usr/src/redhat/SPECS
root@arunsb:/usr/src/redhat/SPECS# ls -l  openlsm.spec
-rw-r–r– 1 root root 12938 Dec  2 17:21 openlsm.spec
root@arunsb:/usr/src/redhat/SPECS#

root@arunsb:/usr/src/redhat/SPECS# rpmbuild   -ba  openlsm.spec

….
… ..

Verificação de arquivo não embalados (s): / usr / lib / rpm / check-files% (buildroot)
Escreveu: / usr/src/redhat/SRPMS/openlsm-0.99-r45.src.rpm
Escreveu: / usr/src/redhat/RPMS/i386/openlsm-0.99-r45.i386.rpm
root @ arunsb: / usr / src / redhat / SPECS # echo $?
0

root @ arunsb: / usr / src / redhat / SPECS # ls-l / usr/src/redhat/SRPMS/openlsm-0.99-r45.src.rpm
-rw-r-r-1 root root 3206 2 de dezembro 17:50 / usr/src/redhat/SRPMS/openlsm-0.99-r45.src.rpm
root @ arunsb: / usr / src / redhat / SPECS # ls-l / usr/src/redhat/RPMS/i386/openlsm-0.99-r45.i386.rpm
-rw-r-r-1 root root 3052868 2 de dezembro 17:50 / usr/src/redhat/RPMS/i386/openlsm-0.99-r45.i386.rpm
root @ arunsb: / usr / src / redhat / SPECS #

* Fonte e pacote binário criado!

** Vamos ver o que aconteceu em “/ usr / src / redhat / directory”

root @ arunsb: / usr / src / redhat # pwd
/ usr / src / redhat
root @ arunsb: / usr / src / redhat # ls
BUILD RPMS SOURCES SPECS SRPMS
root @ arunsb: / usr / src / redhat # ls BUILD /
openlsm-0,99-r45 <== Fonte extraída aqui como parte de construir as instruções do arquivo de especificação ou seja, “openlsm.spec”
root @ arunsb: / usr / src / redhat # ls FONTES /
openlsm-0,99-r45.tar.gz <openlsm == original “-0,99-fonte r45.tar.gz ‘arquivo copiado por mim
root @ arunsb: / usr / src / redhat # ls RPMS /
athlon i386 i486 i586 i686 noarch
root @ arunsb: / usr / src / redhat # ls RPMS/i386 /
openlsm-0,99 r45.i386.rpm-<== pacote rpm Binário criado!
root @ arunsb: / usr / src / redhat # ls / SRPMS
openlsm-0,99-r45.src.rpm <== pacote fonte RPM criado!
root @ arunsb: / usr / src / redhat #

Etapa 3] Agora instale o pacote e testá-lo ~

root @ arunsb: / usr / src / redhat # cp RPMS/i386/openlsm-0.99-r45.i386.rpm / home / arunsb /

root @ arunsb: / usr / src / redhat # cd / home arunsb / /
root @ arunsb: ~ # ls
openlsm-0,99-r45.i386.rpm
root @ arunsb: ~ # rpm-openlsm ivh-0,99-r45.i386.rpm
Preparando … ########################################### [100%]
1: ########################################### openlsm [100%]
root @ arunsb: ~ # ls / usr / local / openlsm /
etc contrib bin incluir partes var / lib sbin scripts
root @ arunsb: ~ #

** Iniciando o servidor openlsm ~

root @ arunsb: ~ # / usr / local / openlsm / contrib / start-openlsm redhat
* Iniciando openlsm Server Admin: openlsm
. [OK]
root @ arunsb: ~ #
root @ arunsb: ~ # / usr / local / openlsm / contrib / openlsm estatuto de redhat
openlsm (pid 21607) is running …
root @ arunsb: ~ #

root @ arunsb: ~ # rpm-q openlsm-0,99-R45
openlsm-0,99-R45
root @ arunsb: ~ #

root @ arunsb: ~ # rpm-openlsm QL-0,99-R45
..

root @ arunsb: ~ # rpm-openlsm qiv-0,99-R45
Nome: Relocations openlsm: (not relocatable)
Version: 0.99 Vendor: IndianGNU.org & openlsm
Lançamento: R45 Build Date: Qua 02 de dezembro de 2009 05:50:54 EST
Instale Data: Wed 02 de dezembro de 2009 06:06:23 IST Build Host: alongseveral-dr.eglbp.corp.yahoo.com
Grupo: System Environment / Daemons Source RPM: openlsm-0,99-r45.src.rpm
Tamanho: 14877918 Licença: GP
Signature: (none)
Packager: IndianGNU.org (http://www.indiangnu.org)
URL: http://openlsm.sourceforge.net/
Resumo: openlsm Admin Server
Descrição:
painel de controle openlsm Admin Server é gratuita e web de código aberto baseado em Linux, Unix.
root @ arunsb: ~ #

** NOTA ~ Este artigo não contém informações sobre como definir micros, como cópia de documentos, páginas de manual para o padrão local, como definir permision e de apropriação vou cobrir esta tópicos no próximo artigo sobre RPM.

** Por favor, consulte o artigo Inglês ~ http://www.indiangnu.org/2009/how-to-create-or-build-rpm-package/

Atenciosamente,
Arun Bagul