|
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
Introduzione ~
Avevo intenzione di scrivere l’articolo su Multi Master replica di MySQL da tempo, finalmente iniziata ora!. Si prega di consultare l’articolo on “Come configurare la replica di MySQL con un Master” URL ~ http://www.indiangnu.org/2007/mysql-replication-one-master-multiple-slave/
* Vorrei informare tutti voi che Multi replica Master in MySQL è puramente basato sulle seguenti due variabili. Non ha nulla a che fare con la tecnologia di replica utilizzato nella replica 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
Nei casi in cui –
N => n-esimo numero di server master (il master-1 tenerlo 1 e il master-2 tenerlo 2 e così via ..)
M => Numero totale di Master Server (2 nel nostro caso, ma meglio per mantenere questo valore in modo che possiamo aggiungere facilmente nuovi server master)
log-slave-aggiornamenti => Server Slave non accede al proprio registro binario tutti gli aggiornamenti che vengono ricevuti da un server master. Questa opzione dice lo schiavo per accedere gli aggiornamenti eseguiti dai suoi thread SQL ai propri log binario.
** Assicurarsi che MySQL è in esecuzione e su tutti i server master e slave-server
Come configurare Multi Master replica 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>
* Così abbiamo tutti imparato a configurare multi-master replica di MySQL. Enjoy!
Saluti,
Arun Bagul
Introduzione –
* Strumento “rpmbuild” è usato per costruire entrambi …
1) pacchetto binario ~ utilizzata per installare il software e gli script di supporto. Esso contiene i file che compongono l’applicazione, insieme con tutte le informazioni supplementari necessarie per installare e cancellarlo.
Pacchetto sorgente 2) ~ contiene il file originale tar compresso del codice sorgente, patch e specifica di file.
* Che cosa è RPM & Manager pacchetto RPM?
Il RPM Package Manager (RPM) è un potente linea di comando del sistema di gestione dei pacchetti in grado di installare, disinstallare, la verifica, l’esecuzione di query, e l’aggiornamento dei pacchetti software.
Pacchetto RPM consiste in un archivio di file e metadati utilizzati per installare e cancellare i file di archivio. La meta-dati comprende degli script helper, gli attributi di file e informazioni descrittive sul pacchetto.
* Per costruire il pacchetto RPM è necessario specificare tre cose ~
1) Fonte di applicazione – In ogni caso, non si dovrebbe modificare le fonti utilizzate nel processo di costruzione del pacchetto.
2) Patches – RPM ti dà la possibilità di applicare automaticamente le patch per loro. La patch risolve un problema specifico al sistema di destinazione. Ciò potrebbe comprendere cambiando makefile per installare l’applicazione in directory appropriate, o risolvere i conflitti cross-piattaforma. Patches di creare le condizioni necessarie per la corretta raccolta.
3) specifica di file – La specifica del file è al centro del processo di costruzione dei pacchetti RPM. Esso contiene le informazioni richieste dalla RPM per costruire il pacchetto, così come le istruzioni dicendo RPM come costruirlo. Il file di specifica detta anche esattamente ciò che i file sono una parte del pacchetto, e dove dovrebbe essere installato.
** Specifica del file ~ è divisa in 8 sezioni, come illustrato di seguito
a) Preambolo ~ contiene le informazioni che verranno visualizzati quando gli utenti richiedono informazioni sul pacchetto. Ciò include una descrizione della funzione del pacchetto, il numero di versione del software, ecc
b) Preparazione ~ in cui il vero lavoro di costruzione di un pacchetto di inizio. Come suggerisce il nome, questa sezione è dove i preparativi necessari sono effettuate prima della costruzione effettiva del software. In generale, se qualcosa deve essere fatto per le fonti prima di costruire il software, si deve accadere nella sezione di preparazione. I contenuti di questa sezione sono uno script di shell ordinaria. Tuttavia, RPM prevede due macro per rendere la vita più facile. Una macro è possibile scompattare un file compresso tar e CD nella directory di origine. La macro altri si applica facilmente le patch ai sorgenti spacchettato.
c) Build ~ Questa sezione è costituita da uno script di shell. E ‘utilizzato per eseguire qualsiasi comando in realtà sono tenuti a compilare i sorgenti, come unico comando make, o essere più complesso se il processo di costruzione richiede. Non ci sono le macro disponibili in questa sezione.
d) Installare ~ Questa sezione contiene anche uno script di shell, la sezione di installazione viene utilizzato per eseguire i comandi necessari per installare effettivamente il software.
e) Installazione e disinstallazione Script ~ Si tratta di script che verrà eseguito, sul sistema dell’utente, quando il pacchetto è in realtà installati o rimossi. RPM in grado di eseguire uno script di pre / post-installazione / rimozione del pacchetto.
f) Verificare Script ~ script che viene eseguito sul sistema dell’utente. E ‘eseguito quando RPM verifica la corretta installazione del pacchetto.
g) Pulizia Sezione ~ script che può pulire le cose dopo la compilazione. Questo script viene utilizzato raramente, poiché RPM fa normalmente un buon lavoro di risanamento nella maggior parte degli ambienti di build.
h) Elenco dei file ~ è costituito da un elenco di file che costituiscono il pacchetto. Inoltre, una serie di macro possono essere usate per controllare gli attributi di file una volta installato, così come per indicare che i file sono la documentazione, e che contengono informazioni di configurazione. L’elenco dei file è molto importante.
Requisito *** RPM per l’ambiente di generazione ~
A] RPM richiede una serie di directory per eseguire la compilazione. Mentre posizioni le directory ‘e nomi possono essere cambiati. Layout predefinito è mostrato di seguito –
root @ arunsb: ~ # ls-l / usr / src / redhat /
drwxr-xr-x 2 root root 4096 25 agosto 2007 FONTI => contiene i sorgenti originali, patch, e file di icona
drwxr-xr-x 2 root root 4096 25 agosto 2007 SPECS => Contiene i file di specifica
drwxr-xr-x 2 root root 4096 25 agosto 2007 BUILD => Directory in cui le fonti sono imballata, e il software è stato costruito
drwxr-xr-x 8 root root 4096 28 maggio 2008 RPM => contiene il pacchetto binario di file creati dal processo di generazione
drwxr-xr-x 2 root root 4096 25 agosto 2007 SRPMS => Contiene il pacchetto sorgente dei file creati dal processo di generazione
root @ arunsb: ~ #
B] bisogno di esportare alcune variabili globali usate da RPM –
root @ arunsb: ~ # export RPM_BUILD_DIR =/usr/src/redhat/BUILD/
root @ arunsb: ~ # export RPM_SOURCE_DIR =/usr/src/redhat/SOURCES/
Step 1] Crea Specification (spec) File ~
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:~#
* Come si crea l’elenco di file?
Creare l’elenco di file è un processo manuale. Quello che ho fatto è ho preso la lista dei file dal mio manuale directory prefix installato con comando find come mostrato di seguito …
root@arunsb:~# find /usr/local/openlsm/ -type f -or -type d
Fase 2] Avvio 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
…
….
… ..
Controllo per il file non imballati (s): / usr / lib / rpm / check-file% buildroot ()
Ha scritto: / usr/src/redhat/SRPMS/openlsm-0.99-r45.src.rpm
Ha scritto: / 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 dicembre 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 Dicembre 17:50 / usr/src/redhat/RPMS/i386/openlsm-0.99-r45.i386.rpm
root @ arunsb: / usr / src / redhat / SPECS #
* Fonte e il pacchetto binario creato!
** Vediamo cosa è successo in “/ 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 <== Source estratto qui come parte di istruzioni per la compilazione da cioè la specifica del file “openlsm.spec”
root @ arunsb: / usr / src / redhat # ls FONTI /
openlsm-0.99-r45.tar.gz <openlsm == originale ‘-0.99-r45.tar.gz’ origine del file copiato da me
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 <== pacchetto rpm binario creato!
root @ arunsb: / usr / src / redhat # ls SRPMS /
openlsm-0.99-r45.src.rpm <== pacchetto rpm Source creato!
root @ arunsb: / usr / src / redhat #
Fase 3] Ora installare il pacchetto e testarlo ~
root @ arunsb: / usr / src / redhat RPMS/i386/openlsm-0.99-r45.i386.rpm # cp / home / arunsb /
root @ arunsb: / usr / src / redhat # cd / arunsb / home /
root @ arunsb: ~ # ls
openlsm-0.99-r45.i386.rpm
root @ arunsb: ~ # rpm-ivh openlsm-0,99-r45.i386.rpm
Preparing … ########################################### [100%]
1: ########################################### openlsm [100%]
root @ arunsb: ~ # ls / usr / local / openlsm /
etc contrib bin includere script lib sbin var parti
root @ arunsb: ~ #
** Avvio del server openlsm ~
root @ arunsb: ~ # / usr / local / openlsm / contrib / openlsm-start redhat
* Server Admin partire openlsm: openlsm
. [OK]
root @ arunsb: ~ #
root @ arunsb: ~ # / usr / local / openlsm / contrib / openlsm status redhat
openlsm (pid 21607) è in esecuzione …
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: (non trasferibile)
Version: 0.99 Vendor: IndianGNU.org & openlsm
Comunicato: R45 Build Date: mer 02 Dec 2009 05:50:54 CEST
Data di installazione: mer 02 Dec 2009 06:06:23 CEST Build Host: alongseveral-dr.eglbp.corp.yahoo.com
Group: System Environment / Daemons Source RPM: openlsm-0.99-r45.src.rpm
Dimensioni: 14877918 Licenza: GPL
Firma: (nessuno)
Packager: IndianGNU.org (http://www.indiangnu.org)
URL: http://openlsm.sourceforge.net/
Sintesi: openlsm Server Admin
Descrizione:
openlsm Server Admin è libero e open source web pannello di controllo a base di Linux, sistemi Unix.
root @ arunsb: ~ #
** NOTA ~ Questo articolo non contiene le informazioni su come definire le micro, come copiare documenti, pagine man per difetto posizione, come impostare la proprietà ecc permision e mi occuperò di questi temi nel prossimo articolo su RPM.
** Si prega di consultare l’articolo inglese ~ http://www.indiangnu.org/2009/how-to-create-or-build-rpm-package/
Saluti,
Arun Bagul
Introduzione ~
Consulta il seguente articolo di installare / configurare Jabberd2 …
http://www.indiangnu.org/2009/how-to-configure-jabber-jabberd2-with-mysqlpam-as-auth-database/
Requisito ~
* I seguenti pacchetti sono chiamati a compilare MU-conferenza …
root @ laptop: ~ # apt-get install libglib2.0-0 libglib2.0-dev
root @ laptop: ~ # apt-get install libidn11 libidn11-dev
root @ laptop: ~ # apt-get install expat lib64expat1 lib64expat1-dev libexpat1-dev liblua5.1-expat-dev liblua5.1-expat0
Fase 1] Come compilare “MU-Conference” –
* Download “MU-conferenza” dal seguente URL – https: / / gna.org / progetti / mu-conference /
root @ laptop: / var / src # wget-c http://download.gna.org/mu-conference/mu-conference_0.8.tar.gz
root @ laptop: / var / src # tar xvfz mu-conference_0.8.tar.gz
root @ laptop: / var / src # cd mu-conference_0.8 /
root @ laptop: / var/src/mu-conference_0.8 #
* Compilare MU-conferenza
root @ laptop: / var/src/mu-conference_0.8 # make
cd src /; fare
make [1]: Entering directory `/ var/src/mu-conference_0.8/src ‘
jabberd cd; fare
make [2]: Entering directory `/ var/src/mu-conference_0.8/src/jabberd ‘
…
… ..
root @ laptop: / var/src/mu-conference_0.8 # echo $?
0
root @ laptop: / var/src/mu-conference_0.8 #
Fase 2] Configurare MU-Conferenza –
* Ora copiare il MU “Conferenza” binari alla directory di installazione Jabberd2 –
root @ laptop: ~ # cp / usr/local/jabberd-2.2.9/bin / var/src/mu-conference_0.8/src/mu-conference /
root @ laptop: ~ # chown Jabber: Jabber / usr/local/jabberd-2.2.9/bin/mu-conference
root @ laptop: ~ # ls-l / usr/local/jabberd-2.2.9/bin/mu-conference
-rwxr-xr-x 1 Jabber Jabber 191904 2009-10-12 18:59 / usr/local/jabberd-2.2.9/bin/mu-conference
root @ laptop: ~ #
root @ laptop: ~ # / usr/local/jabberd-2.2.9/bin/mu-conference-help
Jabber Component Runtime – 0.2.4
(c) 2003-2004 Paul Curtis
/ usr/local/jabberd-2.2.9/bin/mu-conference: opzione non valida – ‘-’
Uso: mu-conferenza [-B] [-s] [-h] [d-level]-c FILE
-B Mettere il demone in background
-s Mostra messaggi di debug su stderr
-h Stampa questo aiuto
-d LIVELLO Impostare il livello di output di debug
-c FILE impostare il file di configurazione, argomento obbligatorio
root @ laptop: ~ #
* Crea directory di spool per “MU-conferenza”. La mu-componente conferenza richiede una directory di spool in cui memorizzare le informazioni sala conferenze.
root @ laptop: ~ # mkdir / usr/local/jabberd-2.2.9/var/spool
root @ laptop: ~ # chown Jabber: Jabber / usr/local/jabberd-2.2.9/var/spool
NOTA ~ “Jabber: Jabber” user / nome del gruppo di server Jabberd2.
* Copiare il file di configurazione di “MU-Conference” di directory di installazione Jabberd2 e modificare l’impostazione –
root @ laptop: ~ # cp / var/src/mu-conference_0.8/muc-default.xml / usr/local/jabberd-2.2.9/etc/mu-conference.xml
root @ laptop: ~ # chown Jabber: Jabber / usr/local/jabberd-2.2.9/etc/mu-conference.xml
root @ laptop: ~ #
root @ laptop: ~ # vi / usr/local/jabberd-2.2.9/etc/mu-conference.xml
<name> conf.laptop.ubuntu.me </ name>
<host> conf.laptop.ubuntu.me </ host>
<IP> localhost </ ip>
<port> 5347 </ port>
<secret> secret </ secret>
<spool> / usr/local/jabberd-2.2.9/var/spool </ spool>
<logdir> / usr/local/jabberd-2.2.9/var/log </ logdir>
<pidfile> / usr/local/jabberd-2.2.9/var/run/mu-conference.pid </ pidfile>
<loglevel> 255 </ loglevel>
<sadmin>
<user> admin@laptop.ubuntu.me </ user>
</ sadmin>
…
… ..
root @ laptop: ~ #
* Ora riavviare il server Jabberd2 e quindi avviare “MU-Conference” …
root @ laptop: ~ # su Jabber-l-s / bin / bash-c “/ usr/local/jabberd-2.2.9/bin/mu-conference-B-C / usr/local/jabberd-2.2.9 / etc / mu-conference.xml ”
root @ laptop: ~ #
* Si prega di controllare l’articolo di cui sopra, vale a dire init script di avvio ‘/ etc/init.d/jabberd2′ inizia mu-conferenza.
root @ laptop: ~ # tail-f / usr/local/jabberd-2.2.9/var/log/mu-conference.log
Mon Oct 12 19:19:40 2009 main.c: 168 (principale): Jabber Component Runtime – 0.2.4 di partenza.
Mon Oct 12 19:19:40 2009 MU-Conferenza: [conference.c: 1076 (conferenza)]-mu carico conferenza – Service ID: conf.laptop.ubuntu.me
…
Mon Oct 12 19:19:40 2009 MU-Conferenza: [conference.c: 1157 (conferenza)] Aggiunta admin@laptop.ubuntu.me sadmin
Mon Oct 12 19:19:40 2009 MU-Conferenza: [xdb.c: 319 (xdb_rooms_get)] ha chiesto di ottenere camere da xdb
Mon Oct 12 19:19:40 2009 MU-Conferenza: [xdb.c: 418 (xdb_rooms_get)] salto .. Non ci sono risultati
Mon Oct 12 19:19:40 2009 main.c: 219 (principale): ciclo principale di partenza.
Mon Oct 12 19:19:40 2009 jcr_base_connect.c: 34 (jcr_socket_connect): Tentativo di connessione a localhost: 5347
Mon Oct 12 19:19:40 2009 jcr_base_connect.c: 87 (jcr_send_start_stream): flusso XML di apertura: sent 173 bytes
Mon Oct 12 19:19:40 2009 jcr_main_stream_error.c: 50 (jcr_main_new_stream): stream server connesso.
Mon Oct 12 19:19:40 2009 jcr_deliver.c: 51 (jcr_queue_deliver): thread di consegna dei pacchetti di partenza.
fatto!
Fase 3] Test “MU-Conference” –
* Nel menu “PSI” client di messaggistica istantanea, goto ‘Generale’ e poi cliccare su ‘Service Discovery’ e controllare l’elenco stanza …
* In “Strumenti ‘e poi Pidgin” client di messaggistica istantanea, goto’ clicca su ‘Lista Room’ sezione.
Una volta individuato il ‘mu-conferenza’ server. Si prega di cliccare su ‘+ Aggiungi Chat’ dal menu ‘Amici’ di pidgin. In caso di scegliere PSI su ‘Join Groupchat’ dal menu ‘generale’ di aggiungere “Conferenza / Room” e poi unirsi alla ‘Confernece Room’.
Gustare,
Arun Bagul
Introduzione –
Jabberd2 è il protocollo XMPP basato Instants Messaging (IM) server. Jabberd2 è altamente scalabile e ad alte prestazioni server Jabber. La bellezza dell’architettura Jabberd2 risiede nel fatto che la sua architettura dei componenti distribuisce servizi attraverso le sei componenti, ognuno dei quali comunica tramite TCP / IP.
1) Router – è la spina dorsale del server Jabber. Si accetta le connessioni da componenti jabberd e passa i pacchetti XML tra i componenti
2) Server to Server (S2S) – componente gestisce la comunicazione con i server esterni. S2S passa i pacchetti tra gli altri componenti e server esterni, ed esegue dial-back per l’autenticazione remota server Jabber.
3) Resolver – atti a sostegno della componente S2S. Risolve i nomi host per S2S come parte di autenticazione dialback.
4) Session Manager (SM) – componente implementa le funzioni di messaggistica istantanea come passare il messaggio, la presenza, registro ed ecc + abbonamento di connessione DB
5) Client Server (C2S) – componente gestisce la comunicazione con i client Jabber come il collegamento, passando per i pacchetti di SM, l’autenticazione e la registrazione degli utenti.
6) core Jabber – la registrazione e la comunicazione plugin di terze parti.
** Per compilare / installare jabberd-2.2.9 abbiamo bisogno seguenti pacchetti su Debian / Ubuntu (simile su RedHat / Fedora o altri sistemi operativi)
- Libpam0g libpam0g-dev (supporto PAM)
- Libssl openssl-dev (supporto TLS / SSL)
- Libudns0 libudns-dev (DNS Resolver Library)
- Libidn11 libidn11 libnet-dev-libidn-perl (libidn fornisce funzionalità necessarie alla manipolazione di stringhe per Jabberd2)
- Mysql-common libdbd-mysql-perl mysql-server-5.1 mysql-client-5.1-dev libmysqlclient16 (DB MySQL l’autenticazione)
** Jabberd2 supporta cinque di autenticazione (user) meccanismo –
* PAM
* Database MySQL
* Berkeley DB
* Database PostgreSQL
* SQLite DB
* OpenLDAP
** Seguenti porte sono utilizzate da jabberd2 –
* Porta 5222 – senza la connessione del client SSL
* Porta 5223 – connessione del client SSL
* Porta 5269 – server a server di connessione
* Port 5347 – jabberd2 router
Step 1] Creazione del sistema di utenti e gruppi per jabberd 2 Server (http://codex.xiaoka.com/wiki/jabberd2:start) –
root @ laptop: ~ # addgroup-jabber sistema
L’aggiunta di gruppo »Jabber ‘(GID 61) …
Fatto.
root @ laptop: ~ #
root @ laptop: ~ # adduser-system-home / usr/local/jabberd-2.2.9 /-bin / shell / false-gid 61 Jabber
* Verifica del sistema di utenti e gruppi … (passi per Ubuntu)
root @ laptop: ~ # ID Jabber
uid = 125 (Jabber) gid = 61 (Jabber) groups = 61 (Jabber)
root @ laptop: ~ #
Step 2] Scarica l’ultima versione di Jabberd2 –
* Estrarre la fonte allora compilazione / installazione come illustrato di seguito con PAM / MYSQL DB per l’autenticazione con SSL
root @ laptop: / var / src / # wget-c http://codex.xiaoka.com/pub/jabberd2/releases/jabberd-2.2.9.tar.bz2
root @ laptop: / var / src # tar jabberd xvfj-2.2.9.tar.bz2
root @ laptop: / var / src # jabberd cd-2.2.9
root @ laptop: / var/src/jabberd-2.2.9 #. / configure-prefix = / usr/local/jabberd-2.2.9 /-enable-debug-enable-mysql-enable-ssl-enable-pam-abilitare -ssl
…
… ..
il controllo della versione libidn> = 0.3.0 … yes
checking for dns_init in-ludns … sì
controllo usabilità gsasl.h … sì
verificare la presenza gsasl.h … sì
checking for gsasl.h … sì
checking for gsasl_check_version in-lgsasl … sì
il controllo della versione GnuSASL> = 0.2.27 … no
configure: error: no SASL backend disponibile su: gsasl
root @ laptop: / var/src/jabberd-2.2.9 #
Step 3] problema che si pone come “configure: error: no SASL backend disponibile su: gsasl” ~
Non ti preoccupare scaricare l’ultima versione della libreria gsasl dall’URL ~ http://alpha.gnu.org/gnu/gsasl/
* Scarica l’ultima versione di GNU SASL (gsasl) …
root @ laptop: / var / src / wget-c # http://alpha.gnu.org/gnu/gsasl/gsasl-0.2.29.tar.gz
* Estrarre la fonte quindi compilarlo / installarlo …
root @ laptop: / var / src # tar xvfz gsasl-0.2.29.tar.gz
root @ laptop: / var / src # gsasl cd-0.2.29 /
root @ laptop: / var/src/gsasl-0.2.29 #. / configure-prefix = / usr / local / gsasl /
root @ laptop: / var/src/gsasl-0.2.29 # make
root @ laptop: / var/src/gsasl-0.2.29 # make install
root @ laptop: / var/src/gsasl-0.2.29 #
* Verificare la gsasl “versione”
root @ laptop: / var/src/gsasl-0.2.29 # / usr / local / gsasl / bin / gsasl versione
gsasl (GNU SASL) 0.2.29
Copyright (C) 2008 Simon Josefsson.
Licenza GPLv3 +: GNU GPL versione 3 o versione successiva <http://gnu.org/licenses/gpl.html>
Questo software è libero: si è liberi di cambiare e ridistribuirlo.
Non c’è NESSUNA GARANZIA, nei limiti consentiti dalla legge.
Scritto da Simon Josefsson.
root @ laptop: / var/src/gsasl-0.2.29 #
Fase 4] Torna alla sorgente Jabberd2 e iniziare a compilare / installare, come mostrato in seguito –
root @ laptop: / var/src/jabberd-2.2.9 #. / configure-prefix = / usr/local/jabberd-2.2.9 /-enable-debug-enable-mysql-enable-ssl-enable-pam-abilitare -ssl-with-extra-include-path = / usr / local / gsasl / include /-con-extra-libreria-path = / usr / local / gsasl / lib /
root @ laptop: / var/src/jabberd-2.2.9 # make
root @ laptop: / var/src/jabberd-2.2.9 # make install
** Create log e directory runtime ~
root @ laptop: / usr/local/jabberd-2.2.9 # mkdir / usr/local/jabberd-2.2.9/var
root @ laptop: / usr/local/jabberd-2.2.9 # mkdir / usr/local/jabberd-2.2.9/var/run
root @ laptop: / usr/local/jabberd-2.2.9 # ls-l
totale 20
drwxr-xr-x 2 Jabber Jabber 4096 2009-10-11 18:21 bin
drwxr-xr-x 3 Jabber Jabber 4096 2009-10-11 18:21 etc
drwxr-xr-x 3 Jabber Jabber 4096 2009-10-11 18:21 lib
drwxr-xr-x 3 Jabber Jabber 4096 2009-10-11 18:21 parti
drwxr-xr-x 3 Jabber Jabber 4096 2009-10-11 18:42 var
root @ laptop: / usr/local/jabberd-2.2.9 #
Fase 5] jabberd Configure-2.2.9 ~
* Setup (jabberid@laptop.ubuntu.me) Domain Name (hostname del server), l’indirizzo IP, porta e accedere impostazione nel client (c2s.xml) e server (sm.xml) file di configurazione –
NOTA ~ Domain Name non è necessario essere hostname del server. Ma dovrebbe essere risolvibile (DNS) per uno degli IP del server.
root @ laptop: / usr/local/jabberd-2.2.9 # hostname
laptop.ubuntu.me
root @ laptop: / usr/local/jabberd-2.2.9 #
root @ laptop: / usr/local/jabberd-2.2.9 # vi / usr/local/jabberd-2.2.9/etc/sm.xml
<pidfile> / usr/local/jabberd-2.2.9/var/run/sm.pid </ pidfile>
<id> laptop.ubuntu.me </ id>
<IP> 0.0.0.0 </ ip> <! – default: 127.0.0.1 ->
<port> 5347 </ port> <! – default: 5347 ->
<log type=’file’>
<file> / usr/local/jabberd-2.2.9/var/log/sm.log </ file>
root @ laptop: / usr/local/jabberd-2.2.9 # vi / usr/local/jabberd-2.2.9/etc/c2s.xml
<pidfile> / usr/local/jabberd-2.2.9/var/run/c2s.pid </ pidfile>
** Per attivare automaticamente la registrazione (nel file c2s.xml ‘register-enable =’ true ‘è necessaria)
<id register-enable=’true’> laptop.ubuntu.me </ id>
<IP> 0.0.0.0 </ ip>
<port> 5222 </ port>
<log type=’file’>
<file> / usr/local/jabberd-2.2.9/var/log/c2s.log </ file>
root @ laptop: / usr/local/jabberd-2.2.9 # vi / usr/local/jabberd-2.2.9/etc/s2s.xml
<pidfile> / usr/local/jabberd-2.2.9/var/run/s2s.pid </ pidfile>
<log type=’file’>
<file> / usr/local/jabberd-2.2.9/var/log/s2s.log </ file>
Passo 6] Configurare jabberd-2.2.9 per lo stoccaggio e l’autenticazione 9using MySQL DB) –
* Verificare che Jabberd2 “banca dati” non esiste (se esiste né db goccia o il nome del DB cambiamento di db-file setup.mysql). Se non l’esportazione DB MySQL dump da fonte Jabberd2 … ..
root @ laptop: / usr/local/jabberd-2.2.9 # mysql-u root-p </ var/src/jabberd-2.2.9/tools/db-setup.mysql
Parola chiave:
root @ laptop: / usr/local/jabberd-2.2.9 # mysql-u root-p
Parola chiave:
Welcome to the MySQL monitor. Commands end with; o \ g.
Il tuo ID di connessione MySQL è di 176
Server versione: 5.1.31-1ubuntu2 (Ubuntu)
Help Tipo ‘,’ or ‘\ h’ for help. Type ‘\ c’ to clear the buffer.
mysql> show databases;
+————+
| Database |
+————+
| Information_schema |
| Jabberd2 |
| Mysql |
+————+
3 rows in set (0.00 sec)
mysql> use jabberd2;
La lettura delle informazioni da tavola per il completamento di tabella e colonna nomi
È possibile disattivare questa funzione per ottenere un avvio più rapido con-A
Database changed
mysql> show tables;
+——-+
| Tables_in_jabberd2 |
+——-+
| Attiva |
| Authreg |
| Disco-items |
| Logout |
| Motd messaggio |
| Motd volte |
| Privacy-default |
| Privacy-items |
| Privato |
| Coda |
| Roster gruppi |
| Roster-items |
| Status |
| Vacanze-impostazioni |
| Vcard |
+——-+
15 rows in set (0.00 sec)
mysql>
* Creazione di utente mysql per jabberd2 vale a dire ‘jabberd2′ con accesso al DB “jabberd2″ –
mysql> GRANT SELECT, INSERT, DELETE, UPDATE ON jabberd2 .* a ‘jabber’ @ ‘localhost’ identified by ‘mypassword’;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Ciao
root @ laptop: / usr/local/jabberd-2.2.9 #
* Verificare ora l’accesso al DB ~
root @ laptop: / usr/local/jabberd-2.2.9 # mysql-u jabberd2-p
Parola chiave:
Welcome to the MySQL monitor. Commands end with; o \ g.
Il tuo ID di connessione MySQL è 178
Server versione: 5.1.31-1ubuntu2 (Ubuntu)
Help Tipo ‘,’ or ‘\ h’ for help. Type ‘\ c’ to clear the buffer.
mysql> show databases;
+——-+
| Database |
+——-+
| Information_schema |
| Jabberd2 |
+——-+
2 rows in set (0.00 sec)
mysql> quit
Ciao
root @ laptop: / usr/local/jabberd-2.2.9 #
Passo 7] Cambia c2s.xml e sm.xml file di configurazione per il supporto MySQL DB –
root @ laptop: / usr/local/jabberd-2.2.9 # vi / usr/local/jabberd-2.2.9/etc/c2s.xml
<! – Autenticazione / configurazione del database di registrazione ->
<authreg>
<! – Modulo back-end per l’uso ->
<module> mysql </ module>
<! – MySQL configurazione del modulo ->
<mysql>
<! – Host server di database e la porta ->
<host> localhost </ host>
<port> 3306 </ port>
<! – Il nome del database ->
<dbname> jabberd2 </ dbname>
<! – Database username e password ->
<user> jabberd2 </ user>
<pass> mypassword </ pass>
root @ laptop: / usr/local/jabberd-2.2.9 # vi / usr/local/jabberd-2.2.9/etc/sm.xml
<! – Configurazione del database di archiviazione ->
<storage>
<! – Percorso di archiviazione Dynamic ->
<path> / usr/local/jabberd-2.2.9/lib/jabberd </ path>
<! – Per impostazione predefinita, si utilizza il driver di SQLite per tutti stoccaggio ->
<driver> mysql </ driver>
<! – Configurazione del driver MySQL ->
<mysql>
<! – Host server di database e la porta ->
<host> localhost </ host>
<port> 3306 </ port>
<! – Il nome del database ->
<dbname> jabberd2 </ dbname>
<! – Database username e password ->
<user> jabberd2 </ user>
<pass> mypassword </ pass>
** Per attivare automaticamente la registrazione (nel file sm.xml)
<auto-create/>
————
NOTA ~ Non è sufficiente per aggiungere utenti alla tabella ‘authreg’ perché introduce solo gli utenti alla componente C2S, ma non alla componente sm. Voci corrette sono tenuti nella ‘tabella attiva’ pure. E ‘meglio utilizzare un client Jabber per la registrazione degli utenti.
Start Passo 8] Let’s jabberd-2 server (configurazione di prova) –
root @ laptop: ~ # su Jabber-l-s / bin / bash-c “/ usr/local/jabberd-2.2.9/bin/jabberd-b”
root @ laptop: ~ #
* Verificare se le porte sono aperte o non
root @ laptop: ~ # netstat-nlp
Recv proto-Q Send-Q Local Address Foreign Address Stato PID / Program name
tcp 0 0 0.0.0.0:5347 0.0.0.0: * LISTEN 31662/router
tcp 0 0 0.0.0.0:5222 0.0.0.0: * LISTEN 13883/c2s
tcp 0 0 127.0.0.1:3306 0.0.0.0: * LISTEN 2892/mysqld
tcp 0 0 0.0.0.0:5269 0.0.0.0: * LISTEN 13886/s2s
…
… ..
root @ laptop: ~ #
** Ora registrare l’utente “jabberd@laptop.ubuntu.me” e password “segreta” con Jabber client di messaggistica istantanea
root @ laptop: / usr/local/jabberd-2.2.9 # tail-f var/log/c2s.log
…
Mon Oct 12 00:43:15 2009 [bando] [8] registrazione riuscito, chiedendo la creazione di utenti: jid = jabberd@laptop.ubuntu.me
Mon Oct 12 00:43:15 2009 [bando] [8] autenticazione SASL riuscito: = meccanismo DIGEST-MD5; authzid = jabberd@laptop.ubuntu.me
Mon Oct 12 00:43:15 2009 [bando] [8] vincolati: JID = jabberd@laptop.ubuntu.me / Telepathy
Mon Oct 12 00:44:20 2009 [bando] [9] [192.168.0.1, port = 48307] Connect
* Controllo di entrata DB –
mysql> SELECT * FROM attivi;
+———+——+—-+
| Raccolta-proprietario | object-sequenza | tempo |
+———+——+—-+
| Jabberd@laptop.ubuntu.me | 1 | 1255288395 |
+———+——+—-+
1 row in set (0.00 sec)
mysql> SELECT * FROM authreg;
+—-+——+—-+
| Username | password | regno |
+—-+——+—-+
| Jabberd | segreto | laptop.ubuntu.me |
+—-+——+—-+
1 row in set (0.00 sec)
mysql>
=> Test completato con successo ….
Passo 9] Jabberd2 Configurazione di SSL / TLS Connections –
Configurare Let’s jabberd2 per SSL / TLS connessione. Jabberd2 è progettato per fornire per SSL / TLS le connessioni non solo tra i client Jabber e il server, ma anche tra i componenti del server jabberd (sm, S2S e C2S) e il router jabberd. Un certificato SSL unico può essere utilizzato per queste due funzioni (client Jabber per jabberd e componente jabberd al router), o due chiavi separate possono essere utilizzati.
* Self Genera firmato certificato SSL …
root @ laptop: / usr/local/jabberd-2.2.9 # openssl req-new-x509-RSA newkey: 1024-days 365-privkey.pem keyout-out server.pem
Generazione di una chiave a 1024 bit RSA private
.++++++
… ..++++++
nuova scrittura chiave privata per ‘privkey.pem’
Enter PEM pass phrase:
….
Nome comune (ad esempio, YOUR name) []: laptop.ubuntu.me
root @ laptop: / usr/local/jabberd-2.2.9 #
* Rimuovere Passphrase dalla chiave privata
root @ laptop: / usr/local/jabberd-2.2.9 # openssl rsa-in privkey.pem-out privkey.pem
** Combina la privata e una pubblica ed eliminare la chiave privata
root @ laptop: / usr/local/jabberd-2.2.9 # privkey.pem cat>> server.pem
root @ laptop: / usr/local/jabberd-2.2.9 privkey.pem # rm
* Cambia il permesso …
root @ laptop: / usr/local/jabberd-2.2.9 # chown Jabber: Jabber / usr/local/jabberd-2.2.9/server.pem
root @ laptop: / usr/local/jabberd-2.2.9 # ls-l / usr/local/jabberd-2.2.9
Totale 24
drwxr-xr-x 2 Jabber Jabber 4096 2009-10-11 22:17 bin
drwxr-xr-x 3 Jabber Jabber 4096 2009-10-12 01:03 etc
drwxr-xr-x 3 Jabber Jabber 4096 2009-10-11 20:16 lib
-rw-r-r-1 Jabber Jabber 2217 2009/10/12 01:17 server.pem
drwxr-xr-x 3 Jabber Jabber 4096 2009-10-11 20:16 parti
drwxr-xr-x 4 Jabber Jabber 4096 2009-10-12 00:20 var
root @ laptop: / usr/local/jabberd-2.2.9 #
root @ laptop: / usr/local/jabberd-2.2.9 # vi / usr/local/jabberd-2.2.9/etc/c2s.xml
<ssl-port> 5223 </ port ssl->
<pemfile> / <usr/local/jabberd-2.2.9/server.pem / pemfile>
root @ laptop: / usr/local/jabberd-2.2.9 # vi / usr/local/jabberd-2.2.9/etc/s2s.xml
<pemfile> / <usr/local/jabberd-2.2.9/server.pem / pemfile>
root @ laptop: / usr/local/jabberd-2.2.9 # vi / usr/local/jabberd-2.2.9/etc/sm.xml
<pemfile> / <usr/local/jabberd-2.2.9/server.pem / pemfile>
<pemfile> / <usr/local/jabberd-2.2.9/server.pem / pemfile>
** Ora riavviare il server e il registro di controllo …
root @ laptop: / usr/local/jabberd-2.2.9 # tail-f var/log/c2s.log
Mon Oct 12 01:28:57 2009 [bando] connessione al router stabilito
Mon Oct 12 01:28:57 2009 [bando] [0.0.0.0, port = 5.222] di ascolto per le connessioni
Mon Oct 12 01:28:57 2009 [bando] [0.0.0.0, port = 5.223] di ascolto per le connessioni SSL
* Mentre la registrazione dell’utente ~
1) Richiesto SSL / TLS
2) Forza antica SSL (5223 port)
Si prega di attivare queste due impostazioni e deselezionare “Allow plaintext auth flussi unecrypted”
NOTA ~ Mentre il login prima volta (in modalità di registrazione automatica) Assicurarsi di controllo “Crea nuovo account sul server” checkbox in Pidgin (in basso)
** It works!
Step 10] script di avvio init.d per Jabberd2 e Mu-Conferenza –
root @ laptop: ~ # / etc/init.d/jabberd2 start
Avvio del Jabberd2 IM Server …
router 11.095 | mq 11.099 | S2S 11.102 | C2S 11.106 | mu-conf 11.149
…
Fatto.
root @ laptop: ~ # / etc/init.d/jabberd2 status
Jabberd2 IM Server Status –
Router – 11.095 | mq – 11.099 | S2S – 11.102 | C2S – 11.106 | mu-conf 11.149
root @ laptop: ~ #
* Ora controllare l’impostazione di rete …
root @ laptop: ~ # netstat-nlp
Recv proto-Q Send-Q Local Address Foreign Address Stato PID / Program name
tcp 0 0 0.0.0.0:5347 0.0.0.0: * LISTEN 11095/router
tcp 0 0 0.0.0.0:5222 0.0.0.0: * LISTEN 11106/c2s
tcp 0 0 0.0.0.0:5223 0.0.0.0: * LISTEN 11106/c2s
tcp 0 0 127.0.0.1:3306 0.0.0.0: * LISTEN 2899/mysqld
tcp 0 0 0.0.0.0:5269 0.0.0.0: * LISTEN 11102/s2s
root @ laptop: ~ # / etc/init.d/jabberd2 stop
Fermare i Jabberd2 IM Server …
Fatto.
root @ laptop: ~ #
** Vuoi vedere lo script ~
root @ laptop: ~ # cat / etc/init.d/jabberd2
#! / bin / bash
# # Jabberd2 IM Server
# # Jabber User / Group – Jabber / Jabber
# # Comando per srart ~ Jabber su-l-s / bin / bash-c “$ (BASE_PATH) / bin / jabberd-b”
# #
# C2S
BASE_PATH = “/ usr/local/jabberd-2.2.9″
c2s_pid = “$ () BASE_PATH / var/run/c2s.pid”
# S2S
s2s_pid = “$ () BASE_PATH / var/run/s2s.pid”
# sm
sm_pid = “$ (BASE_PATH) / var / run / sm.pid”
# router
router_pid = “$ (BASE_PATH) / var / run / router.pid”
# Mu-conferenza
mu_conf_pid = “$ (BASE_PATH) / var / run / mu-conference.pid”
case “$ 1″ in
start)
# # Controllo se Jabberd2 è in esecuzione o meno
if [-f $ () c2s_pid], poi
c2spid = $ (cat $ () c2s_pid)
echo “Jabberd2 IM Server ~ ‘C2S’ è in esecuzione (pid $ () c2spid)”
elif [-f $ () s2s_pid], poi
s2spid = $ (cat $ () s2s_pid)
echo “Jabberd2 IM Server ~ ‘S2S’ è in esecuzione (pid $ () s2spid)”
elif [-f $ () sm_pid], poi
smpid = $ (cat $ () sm_pid)
echo “Jabberd2 IM Server ~ ‘sm’ è in esecuzione (pid $ () smpid)”
elif [-f $ () router_pid], poi
routerpid = $ (cat $ () router_pid)
echo “Jabberd2 IM Server ~ ‘router’ è in esecuzione (pid $ () routerpid)”
altro
echo “Avvio del Jabberd2 IM Server …”
jabber su-l-s / bin / bash-c “$ (BASE_PATH) / bin / jabberd-b”
jabber su-l-s / bin / bash-c “$ (BASE_PATH) / bin / mu-conference-B-c $ (BASE_PATH) / etc / mu-conference.xml”> / dev / null 2> & 1
echo “router $ (cat $ () router_pid) | sm $ (cat $ () sm_pid) | S2S $ (cat $ () s2s_pid) | C2S $ (cat $ () c2s_pid) | mu-conf $ (cat $ ( mu_conf_pid)) ”
echo “…”
echo “Fatto”.
FI
;;
stop)
echo “fermare i Jabberd2 IM Server …”
if [-f $ () sm_pid], poi
kill -9 $ (cat $ () sm_pid)
FI
if [-f $ () router_pid], poi
kill -9 $ (cat $ () router_pid)
FI
if [-f $ () c2s_pid], poi
kill -9 $ (cat $ () c2s_pid)> / dev / null 2> & 1
FI
if [-f $ () s2s_pid], poi
kill -9 $ (cat $ (s2s_pid)) $ (cat $ () mu_conf_pid)> / dev / null 2> & 1
FI
# #
killall -9-u Jabber
rm-f $ (router_pid) $ (sm_pid) $ (s2s_pid) $ (c2s_pid) $ (mu_conf_pid)> / dev / null 2> & 1
echo “Fatto”.
;;
status)
echo “Jabberd2 IM status Server -”
if [-f $ () c2s_pid], poi
c2spid = $ (cat $ () c2s_pid)
FI
if [-f $ () s2s_pid], poi
s2spid = $ (cat $ () s2s_pid)
FI
if [-f $ () sm_pid], poi
smpid = $ (cat $ () sm_pid)
FI
if [-f $ () router_pid], poi
routerpid = $ (cat $ () router_pid)
FI
if [-f $ () router_pid], poi
mupid = $ (cat $ () mu_conf_pid)
FI
echo “router – $ () routerpid | sm – $ () smpid | S2S – $ () s2spid | C2S – c2spid $ () | mu-conf mupid $ ()”
;;
*)
echo “Utilizzo: $ 0 (start | stop | status)”
exit 1
esac
exit 0
# FATTO
root @ laptop: ~ #
Grazie,
Arun Bagul