Инструменты пользователя

Инструменты сайта


linux:build-rpm:csync2

Как собрать csync2 под CentOS 6.0 x86_64

Для начала добавляем отсутствующие пакеты для сборки:

yum install -y sqlite-devel librsync librsync-devel

Сам проект вроде как живет по адресу http://oss.linbit.com/csync2

Сначала берем последнюю версию csync2

# cd ~
# mkdir git
# cd git
# git clone http://git.linbit.com/csync2.git
Initialized empty Git repository in /home/linko/git/csync2/.git/

Выясняем, что мы там скачали

# cd csync2
# cat csync2.spec | grep -e ^Version -e ^Release
Version:      2.0
Release:      0.1.rc1

Значит, будем строить версию csync2-2.0

# cd ..
# cp -R csync2 csync2-2.0
# rm -R csync2-2.0/.git

csync2.spec в оригинальной поставке кривая. Кривость заключается в том, что там нет генерации сертификатов, патча для xinetd и все пихается в /etc, а не в /etc/csync2, а так же нет очистки каталога со своими данными.

Делаем свою csync2.spec, ее надо разместить в файле ~/rpmbuild/SPECS/csync2.spec

csync2.spec
Summary: Cluster synchronization tool
Name: csync2
Version: 2.0
Release: 0.1.rc1
Group: Applications/System
License: GPLv2+
URL: http://oss.linbit.com/csync2/
Source0: csync2-%{version}.tar.gz
Source1: csync2-README.quickstart
Patch0: csync2-fix-xinetd.patch
 
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
 
Requires(post): openssl
Requires: xinetd
BuildRequires: sqlite-devel sqlite librsync gnutls-devel librsync-devel
 
%description
Csync2 is a cluster synchronization tool. It can be used to keep files on
multiple hosts in a cluster in sync. Csync2 can handle complex setups with
much more than just 2 hosts, handle file deletions and can detect conflicts.
It is expedient for HA-clusters, HPC-clusters, COWs and server farms.
 
%prep
%setup -q
%patch0 -p1 -b .fix-xinetd
install -p -m 644 %{SOURCE1} README.quickstart
 
 
%build
%configure --sysconfdir=%{_sysconfdir}/csync2
make %{?_smp_mflags}
 
 
%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}
mkdir -p %{buildroot}%{_var}/lib/csync2
install -p -D -m 644 csync2.xinetd %{buildroot}%{_sysconfdir}/xinetd.d/csync2
 
# We need these empty files to be able to %%ghost them
touch %{buildroot}%{_sysconfdir}/csync2/csync2_ssl_key.pem
touch %{buildroot}%{_sysconfdir}/csync2/csync2_ssl_cert.pem
 
 
%clean
rm -rf %{buildroot}
 
 
%post
umask 077
if [ ! -f %{_sysconfdir}/csync2/csync2_ssl_key.pem ]; then
/usr/bin/openssl genrsa -rand /proc/apm:/proc/cpuinfo:/proc/dma:/proc/filesystems:/proc/interrupts:/proc/ioports:/proc/pci:/proc/rtc:/proc/uptime 1024 > %{_sysconfdir}/csync2/csync2_ssl_key.pem 2>/dev/null
fi
 
FQDN=`hostname`
if [ "x${FQDN}" = "x" ]; then
   FQDN=localhost.localdomain
fi
 
if [ ! -f %{_sysconfdir}/csync2/csync2_ssl_cert.pem ]; then
cat << EOF | /usr/bin/openssl req -new -key %{_sysconfdir}/csync2/csync2_ssl_key.pem -x509 -days 3000 -out %{_sysconfdir}/csync2/csync2_ssl_cert.pem 2>/dev/null
--
SomeState
SomeCity
SomeOrganization
 
 
 
EOF
fi
 
%preun
# Cleanup all databases upon last removal
if [ $1 -eq 0 ]; then
  %{__rm} -f %{_var}/lib/csync2/*
fi
 
 
%files
%defattr(-,root,root,-)
%doc README README.quickstart AUTHORS COPYING
%dir %{_sysconfdir}/csync2/
%config(noreplace) %{_sysconfdir}/csync2/csync2.cfg
%config(noreplace) %{_sysconfdir}/xinetd.d/csync2
%ghost %config %{_sysconfdir}/csync2/csync2_ssl_key.pem
%ghost %config %{_sysconfdir}/csync2/csync2_ssl_cert.pem
%{_sbindir}/csync2
%{_sbindir}/csync2-compare
%{_mandir}/man1/csync2.1*
%dir %{_var}/lib/csync2/
 
 
%changelog
* Tue Nov 13 2007 Matthias Saou <http://freshrpms.net/> 1.34-4
- Change configuration directory to be /etc/csync2/ since the program requires
  quite a few files, and putting all of them in /etc/ was messy.
- Include certificate generation upon package installation, based on mod_ssl.
- Rewrite the csync2-README.quickstart file.
- Remove db files upon last removal.
 
* Tue Nov 13 2007 Matthias Saou <http://freshrpms.net/> 1.34-1
- Take ownership of the package.
- Update to 1.34.
 
* Tue Mar 27 2007 <ruben@rubenkerkhof.com> 1.33-5
- Fix ownership of documentation directory (bz 233954)
 
* Thu Jan 25 2007 <ruben@rubenkerkhof.com> 1.33-4
- Included a README.fedora with instructions on how to create a self-signed
  certificate
- Included a mkcert.sh script to create a self-signed certificate
- Removed the creation of ssl certificate from the %%install section
 
* Wed Jan 22 2007 <ruben@rubenkerkhof.com> 1.33-3
- Fixed the xinetd file so there's no need to specify the port in /etc/services
- Create ssl certificates
 
* Mon Jan 22 2007 <ruben@rubenkerkhof.com> 1.33-2
- Some cleanups as per bz review 223633
 
* Sat Jan 20 2007 <ruben@rubenkerkhof.com> 1.33-1
- Initial import

Так же туда же в каталог ~/rpmbuild/SOURCES надо положить еще два файла: ~/rpmbuild/SOURCES/csync2-fix-xinetd.patch:

csync2-fix-xinetd.patch
--- csync2-1.33/csync2.xinetd.fix-xinetd        2007-01-24 21:18:04.000000000 +0100
+++ csync2-1.33/csync2.xinetd   2007-01-24 21:19:47.000000000 +0100
@@ -1,4 +1,4 @@
-# default: on
+# default: off
 # description: csync2
 service csync2
 {
@@ -9,7 +9,9 @@
        group           = root
        server          = /usr/sbin/csync2
        server_args     = -i
+       port            = 30865
+       type            = UNLISTED
        #log_on_failure += USERID
-       disable         = no
+       disable         = yes
        # only_from     = 192.168.199.3 192.168.199.4
 }

FIXME В связи с тем, что в виках режутся табы, а патч без этого не работает, при этом надо что бы файл был не в виде прикрепленного файла а как текст на вики страницах, приходится изголяться так:

echo "LS0tIGNzeW5jMi0xLjMzL2NzeW5jMi54aW5ldGQuZml4LXhpbmV0ZCAgICAgICAg
MjAwNy0wMS0yNCAyMToxODowNC4wMDAwMDAwMDAgKzAxMDAKKysrIGNzeW5jMi0x
LjMzL2NzeW5jMi54aW5ldGQgICAyMDA3LTAxLTI0IDIxOjE5OjQ3LjAwMDAwMDAw
MCArMDEwMApAQCAtMSw0ICsxLDQgQEAKLSMgZGVmYXVsdDogb24KKyMgZGVmYXVs
dDogb2ZmCiAjIGRlc2NyaXB0aW9uOiBjc3luYzIKIHNlcnZpY2UgY3N5bmMyCiB7
CkBAIC05LDcgKzksOSBAQAogCWdyb3VwCQk9IHJvb3QKIAlzZXJ2ZXIJCT0gL3Vz
ci9zYmluL2NzeW5jMgogCXNlcnZlcl9hcmdzCT0gLWkKKwlwb3J0CQk9IDMwODY1
CisJdHlwZQkJPSBVTkxJU1RFRAogCSNsb2dfb25fZmFpbHVyZQkrPSBVU0VSSUQK
LQlkaXNhYmxlCQk9IG5vCisJZGlzYWJsZQkJPSB5ZXMKIAkjIG9ubHlfZnJvbQk9
IDE5Mi4xNjguMTk5LjMgMTkyLjE2OC4xOTkuNAogfQo=" | openssl base64 -d > ~/rpmbuild/SOURCES/csync2-fix-xinetd.patch

И файл ~/rpmbuild/SOURCES/csync2-README.quickstart

csync2-README.quickstart
Getting started with csync2 :
 
There's no need to define the port for csync2 in /etc/services, although the
manual says so. Port 30865/tcp is defined in /etc/xinetd.d/csync2. All commands
detailed here need to be executed as root, so be extra careful.
 
The config file for csync2 is /etc/csync2/csync2.cfg. Here is an example :
 
mygroup {
  host host1;
  host host2;
  key     /etc/csync2/mygroup.key;
  include /etc/csync2/csync2.cfg;
  include /etc/testfile;
}
 
This will sync the csync2 configuration and /etc/testfile between host1 and
host2. Create the file on host1. Note that hostnames need to be the FQDN
returned by "hostname".
 
Generate the pre-shared key used for authentication :
  csync2 -k /etc/csync2/mygroup.key
 
Copy the configuration file and the pre-shared key to host2:
  scp /etc/csync2/csync2.cfg /etc/csync2/mygroup.key host2:/etc/csync2/
 
The SSL key and certificate are generated upon package installation, but you
can replace them with your own if you like. The files are :
  /etc/csync2/csync2_ssl_key.pem
  /etc/csync2/csync2_ssl_cert.pem
 
The csync2 service is disabled by default. To start it on both your hosts :
  chkconfig csync2 on
  chkconfig --level 345 xinetd on
  service xinetd restart
 
If you are running iptables, you need to open tcp port 30865 on both hosts so
that the other host can connect.
 
Now you should be able to run and initial verbose sync on both hosts :
    csync2 -xv
 
Once everything looks good, you can add a file with the following line as
/etc/cron.d/csync2 or add it to /etc/crontab :
 
*/5 * * * * root csync2 -x
 
Happy syncing!

Делаем хитрый финт ушами что бы появился файл configure, иначе собираться ничего не будет:

# cd ~/git/csync2-2.0
# ./autogen.sh

Создаем архив с исходниками

# cd ~/git
# tar -pczf csync2-2.0.tar.gz csync2-2.0

Подсовываем его в каталог ~/rpmbuild/SOURCES

# cp csync2-2.0.tar.gz ~/rpmbuild/SOURCES

Заходим в каталог с csync2.spec и строим .rpm файл.

# cd ~/rpmbuild/SPECS/
# rpmbuild -bp csync2.spec
# rpmbuild -ba csync2.spec

В случае успеха у нас должно получится в каталоге ~/rpmbuild/RPMS/x86_64 два rpm файла:

  • csync2-2.0-0.1.rc1.x86_64.rpm
  • csync2-debuginfo-2.0-0.1.rc1.x86_64.rpm

Которые можно устанавливать.

Дополнение

Если собирать rpm из git сразу - то работать не будет.

Как оказалось, там сейчас бага, которая описана поссылкам

Далее - собирается все без поддержки ssl, поэтому надо в начало конфигурационного файла добавить

nossl * *;
linux/build-rpm/csync2.txt · Последнее изменение: 2011/11/02 10:27 — linko22@gmail.com