Month: Декабрь 2009

Bash Scripting ~ обучение на примерах

Bash Scripting ~ обучение на примерах

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

Как настроить несколько мастер репликации MySQL

Как настроить несколько мастер репликации MySQL

Введение ~

Я собирался написать статью о Multi репликации MySQL так долго, наконец начали сейчас!. См. статью на тему “Как настроить репликации MySQL с одним ведущим” URL ~ http://www.indiangnu.org/2007/mysql-replication-one-master-multiple-slave/

* Позвольте мне сообщить вам все, что многолетние репликации в MySQL основывается исключительно на следующие две переменные. Она не имеет ничего общего с репликацией технологии, используемые в репликации 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

Где —
N => NTH ряд мастер-сервера (на мастер-1 Keep It 1 и 2 мастер-Keep It 2 и так далее ..)
M => целый ряд мастер-сервер (2 в нашем случае, но лучше держать это значение высокой, так что мы можем добавить новый мастер-сервера легко)

Log-славянский Обновления => Славянский сервер не войти в свой собственный бинарный журнал любые обновления, которые были получены от главного сервера. Эта опция говорит раб журнала обновлений исполнении своих SQL поток своих собственных бинарных журналов.

** Убедитесь, что MySQL работает и до мастера на все серверы и серверы-славянский

Как настроить Multi Master 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>

* Таким образом, мы все узнали, настроить несколько репликации MySQL. Наслаждайтесь!

Привет,
Arun Bagul

Как создать или построить RPM Package

Как создать или построить RPM Package

Введение —

* “Rpmbuild” инструмент используется для создания и …

1) ~ двоичных пакетов для установки программного обеспечения и поддержки сценариев. Он содержит все файлы, составляющие приложение, а также любую дополнительную информацию, необходимую для установки и удаления его.
2) ~ исходного кода содержит оригинальные сжатые TAR файлов исходного кода, патчи и спецификации файла.

* Что такое & RPM RPM Package Manager?

RPM Package Manager (RPM) является мощной командной строки пакета управления системой, способной Установка, удаление, проверка, запросы и обновления программного обеспечения.

RPM пакет состоит из архива файлы и мета-данные, используемые для установки и удаления архивных файлов. Мета-данные включают вспомогательные скрипты, атрибуты файлов, а также описательная информация о пакете.

* Чтобы построить RPM пакет нужно указать три вещи ~

1) Источники приложений – В любом случае, вы не должны изменять источники, используемые в процессе здании пакет.

2) Патчи – RPM дает вам возможность автоматически применять патчи к ним. Патч устраняет проблему, специфичные для целевой системы. Это может включать изменение make-файлы для установки приложения в соответствующие каталоги, либо в решении кросс-платформенный конфликтов. Патчи создания условий, необходимых для надлежащего компиляции.

3) Спецификация файла – это спецификация файла находится в центре процесса строительства RPM пакет. Он содержит информацию, необходимую RPM для сборки пакета, а также инструкции говорить об / мин, как строить. Спецификация файла также диктует, какие именно файлы являются частью пакета, и где они должны быть установлены.

** Спецификации файла ~ делится на 8 разделов, как показано ниже

а) преамбула ~ содержит информацию, которая будет отображаться, когда пользователи запрашивают информацию о пакете. Это будет включать описание функций пакета, номер версии программного обеспечения и т.д.

б) Подготовка ~ когда фактическая работа по созданию пакета начинается. Как следует из названия, этот раздел, где необходимые приготовления сделаны до начала фактического строительства программного обеспечения. В общем, если что-то должно быть сделано для источников до строительстве программное обеспечение, оно должно произойти в подготовке раздела. Содержание данного раздела являются обычными скрипт. Однако, RPM ли предоставить два макроса, чтобы сделать жизнь легче. Один макрос можно распаковать сжатые файлы и смол компакт-диск в исходном каталоге. Другие макро легко применяет патчи к распакованы источников.

с) создать ~ Этот раздел состоит из сценария оболочки. Он используется для выполнения любых команд требуется на самом деле компиляция источников, как сделать одну команду, или быть более сложной, если процесс сборки требует этого. Есть нет макросов доступны в этом разделе.

д) Установить ~ В этом разделе также содержащий сценарий оболочки, в разделе установка используется для выполнения команды необходимо реально установить программное обеспечение.

е) установить и удалить скрипты ~ Она состоит из сценариев, которые будут запущены на компьютере пользователя, когда пакет фактически установлена или удалена. RPM может выполнить скрипт до / после установки / удаления пакетов.

е) Проверить ~ сценария сценарий, который выполняется в пользовательской системе. Он выполняется при RPM проверяет правильность установки пакета.

г) чистый участок ~ скрипт, который может чистыми вещами после сборки. Этот сценарий используется редко, поскольку RPM обычно делает хорошую работу по очистке построить в большинстве сред.

H) Список файлов ~ состоит из списка файлов, который будет включать в себя пакет. Кроме того, количество макросов может быть использована для контроля атрибутов файлов при установке, а также обозначить, какие файлы документации, и которые содержат информацию о конфигурации. Список файлов является очень важным.

*** Из RPM требованием построить окружающей среды ~

] RPM требует набора каталогов для выполнения сборки. Хотя каталоги ‘места и названия могут быть изменены. По умолчанию Схема приведена ниже —

Root @ arunsb: ~ # ls -l /usl/src/redhat/

drwxr-XR-X 2 коренных коренных 4096 25 августа 2007 SOURCES => содержит оригинальных источников, патчи и файлы иконок
drwxr-XR-X 2 коренных коренных 4096 25 августа 2007 ДАННЫЕ => содержит спецификации файлами
drwxr-XR-X 2 коренных коренных 4096 25 августа 2007 BUILD => каталог, в который распаковываются источников, & программное обеспечение построено
drwxr-XR-X 8 корневых корневых 4096 28 мая 2008 RPMS => содержит бинарные пакеты файлов, созданных в процессе построить
drwxr-XR-X 2 коренных коренных 4096 25 августа 2007 SRPMS => содержит исходного кода в файлы, созданные в процессе сборки

Root @ arunsb: ~ #

B] необходимо экспортировать несколько глобальных переменных, используемых RPM —

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

Шаг 1] Создать Specification (SPEC) файле ~

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:~#

* Как создать список файлов?

Создание списка файлов ручной процесс. Что я сделал: я взял список файлов из моего руководства установлен каталога с префиксом найти команду, как показано ниже …

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

Шаг 2] Начиная 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

….
… ..

Проверка упаковки файла (ов): / USR / LIB / RPM / проверить файлы BuildRoot% ()
Написали: / usr/src/redhat/SRPMS/openlsm-0.99-r45.src.rpm
Написали: / usr/src/redhat/RPMS/i386/openlsm-0.99-r45.i386.rpm
Root @ arunsb: / USR / SRC / RedHat / ДАННЫЕ Эхо # $?
0

Root @ arunsb: / USR / SRC / RedHat / ДАННЫЕ # LS-L / usr/src/redhat/SRPMS/openlsm-0.99-r45.src.rpm
-RW-R-R-1 коренных коренных 3206 2 декабря 17:50 / usr/src/redhat/SRPMS/openlsm-0.99-r45.src.rpm
Root @ arunsb: / USR / SRC / RedHat / ДАННЫЕ # LS-L / usr/src/redhat/RPMS/i386/openlsm-0.99-r45.i386.rpm
-RW-R-R-1 коренных коренных 3052868 2 декабря 17:50 / usr/src/redhat/RPMS/i386/openlsm-0.99-r45.i386.rpm
Root @ arunsb: / USR / SRC / RedHat / ДАННЫЕ #

* Исходные и бинарные пакеты созданы!

** Давайте посмотрим, что произошло в “/ USR / SRC / RedHat / каталог”

Root @ arunsb: / USR / SRC / RedHat # PWD
/ USR / SRC / RedHat
Root @ arunsb: / USR / SRC / RedHat # Ls
СТРОЙ RPMS ИСТОЧНИКИ ДАННЫЕ SRPMS
Root @ arunsb: / USR / SRC / RedHat # Ls СТРОЙ /
openlsm-0.99-R45 <== исходного здесь добывали как часть инструкции по сборке от спецификации есть файл “openlsm.spec”
Root @ arunsb: / USR / SRC / RedHat # Ls SOURCES /
openlsm-0.99-r45.tar.gz <== оригинал “openlsm-0.99-источник r45.tar.gz ‘файл скопирован мной
Root @ arunsb: / USR / SRC / RedHat # Ls RPMS /
Athlon i386 i486 i586 i686 noarch
Root @ arunsb: / USR / SRC / RedHat # RPMS/i386 Ls /
openlsm-0.99-r45.i386.rpm <== двоичных пакетов / мин создан!
Root @ arunsb: / USR / SRC / RedHat # Ls SRPMS /
openlsm-0.99-r45.src.rpm <== Source RPM пакет создан!
Root @ arunsb: / USR / SRC / RedHat #

Шаг 3] Теперь установите этот пакет и проверить его ~

Root @ arunsb: / USR / SRC / RedHat # RPMS/i386/openlsm-0.99-r45.i386.rpm CP / Home / arunsb /

Root @ arunsb: / USR / SRC / RedHat # CD / Home / arunsb /
Root @ arunsb: ~ # Ls
openlsm-0.99-r45.i386.rpm
Root @ arunsb: ~ # RPM-ВЖК openlsm-0.99-r45.i386.rpm
Подготовка … ########################################### [100%]
1: openlsm ########################################### [100%]
Root @ arunsb: ~ # Ls / USR / местные / openlsm /
и т.д. бен Contrib включать Lib долю sbin сценарии VAR
Root @ arunsb: ~ #

** Начиная openlsm сервере ~

Root @ arunsb: ~ # / USR / местные / openlsm / Contrib / openlsm-Redhat начало
* Запуск сервера openlsm Admin: openlsm
. [OK]
Root @ arunsb: ~ #
Root @ arunsb: ~ # / USR / местные / openlsm / Contrib / openlsm-Redhat статус
openlsm (PID 21607) запущен …
Root @ arunsb: ~ #

Root @ arunsb: ~ # RPM-Q openlsm-0.99-R45
openlsm-0.99-R45
Root @ arunsb: ~ #

Root @ arunsb: ~ # RPM-QL openlsm-0.99-R45
..

Root @ arunsb: ~ # RPM-qiv openlsm-0.99-R45
Имя: openlsm Relocations: (не перемещаемые)
Версия: 0.99 Производитель: IndianGNU.org & openlsm
Выпуск: R45 Build Date: Срд 02 Dec 2009 05:50:54 PM IST
Дата установки: Срд 02 Dec 2009 06:06:23 PM IST Build Host: alongseveral-dr.eglbp.corp.yahoo.com
Группа:: Система / Демоны Пакет: openlsm-0.99-r45.src.rpm
Размер: 14877918 Лицензия: GPL
Подпись: (None)
Packager: IndianGNU.org (http://www.indiangnu.org)
URL: http://openlsm.sourceforge.net/
Резюме: openlsm Admin Server
Описание:
openlsm Администратор сервера свободного & открытым исходным веб-панель управления для Linux, Unix системами.
Root @ arunsb: ~ #

** ПРИМЕЧАНИЕ ~ Эта статья не содержит информации о том, как определить Micros, как копировать документы, мужчина страниц по умолчанию, как установить permision и собственности и т.д. Я рассмотрим эту тему в следующей статье о RPM.

** См. статью английский ~ http://www.indiangnu.org/2009/how-to-create-or-build-rpm-package/

Привет,
Arun Bagul