From f068e6eee387866121bcb202029c8720270a4bf4 Mon Sep 17 00:00:00 2001 From: TeoV Date: Wed, 12 Feb 2020 14:51:30 +0200 Subject: [PATCH] Add ansible script for generating rpm package + update documentation --- .../distributions.conf.j2 | 0 .../{packages => deb_packages}/gen-key-script | 0 .../{packages => deb_packages}/go.yaml | 0 .../{packages => deb_packages}/golang.sh.j2 | 0 .../gpg-gen-key.yaml | 0 .../{packages => deb_packages}/gpg.conf.j2 | 0 .../{packages => deb_packages}/gpg.yaml | 0 .../{packages => deb_packages}/main.yaml | 0 .../{packages => deb_packages}/nginx.conf.j2 | 0 .../{packages => deb_packages}/nginx.yaml | 0 .../options.conf.j2 | 0 .../{packages => deb_packages}/reprepro.yaml | 0 data/ansible/rpm_packages/cgrates.spec.j2 | 123 ++++++++ data/ansible/rpm_packages/gen-key-script | 13 + data/ansible/rpm_packages/go.yaml | 122 ++++++++ data/ansible/rpm_packages/golang.sh.j2 | 12 + data/ansible/rpm_packages/gpg-gen-key.yaml | 51 ++++ data/ansible/rpm_packages/gpg.conf.j2 | 5 + data/ansible/rpm_packages/gpg.yaml | 16 ++ data/ansible/rpm_packages/main.yaml | 270 ++++++++++++++++++ data/ansible/rpm_packages/nginx.conf.j2 | 21 ++ data/ansible/rpm_packages/nginx.yaml | 19 ++ data/ansible/rpm_packages/rpmmacros.j2 | 5 + docs/installation.rst | 46 +++ 24 files changed, 703 insertions(+) rename data/ansible/{packages => deb_packages}/distributions.conf.j2 (100%) rename data/ansible/{packages => deb_packages}/gen-key-script (100%) rename data/ansible/{packages => deb_packages}/go.yaml (100%) rename data/ansible/{packages => deb_packages}/golang.sh.j2 (100%) rename data/ansible/{packages => deb_packages}/gpg-gen-key.yaml (100%) rename data/ansible/{packages => deb_packages}/gpg.conf.j2 (100%) rename data/ansible/{packages => deb_packages}/gpg.yaml (100%) rename data/ansible/{packages => deb_packages}/main.yaml (100%) rename data/ansible/{packages => deb_packages}/nginx.conf.j2 (100%) rename data/ansible/{packages => deb_packages}/nginx.yaml (100%) rename data/ansible/{packages => deb_packages}/options.conf.j2 (100%) rename data/ansible/{packages => deb_packages}/reprepro.yaml (100%) create mode 100644 data/ansible/rpm_packages/cgrates.spec.j2 create mode 100644 data/ansible/rpm_packages/gen-key-script create mode 100644 data/ansible/rpm_packages/go.yaml create mode 100644 data/ansible/rpm_packages/golang.sh.j2 create mode 100644 data/ansible/rpm_packages/gpg-gen-key.yaml create mode 100644 data/ansible/rpm_packages/gpg.conf.j2 create mode 100644 data/ansible/rpm_packages/gpg.yaml create mode 100644 data/ansible/rpm_packages/main.yaml create mode 100644 data/ansible/rpm_packages/nginx.conf.j2 create mode 100644 data/ansible/rpm_packages/nginx.yaml create mode 100644 data/ansible/rpm_packages/rpmmacros.j2 diff --git a/data/ansible/packages/distributions.conf.j2 b/data/ansible/deb_packages/distributions.conf.j2 similarity index 100% rename from data/ansible/packages/distributions.conf.j2 rename to data/ansible/deb_packages/distributions.conf.j2 diff --git a/data/ansible/packages/gen-key-script b/data/ansible/deb_packages/gen-key-script similarity index 100% rename from data/ansible/packages/gen-key-script rename to data/ansible/deb_packages/gen-key-script diff --git a/data/ansible/packages/go.yaml b/data/ansible/deb_packages/go.yaml similarity index 100% rename from data/ansible/packages/go.yaml rename to data/ansible/deb_packages/go.yaml diff --git a/data/ansible/packages/golang.sh.j2 b/data/ansible/deb_packages/golang.sh.j2 similarity index 100% rename from data/ansible/packages/golang.sh.j2 rename to data/ansible/deb_packages/golang.sh.j2 diff --git a/data/ansible/packages/gpg-gen-key.yaml b/data/ansible/deb_packages/gpg-gen-key.yaml similarity index 100% rename from data/ansible/packages/gpg-gen-key.yaml rename to data/ansible/deb_packages/gpg-gen-key.yaml diff --git a/data/ansible/packages/gpg.conf.j2 b/data/ansible/deb_packages/gpg.conf.j2 similarity index 100% rename from data/ansible/packages/gpg.conf.j2 rename to data/ansible/deb_packages/gpg.conf.j2 diff --git a/data/ansible/packages/gpg.yaml b/data/ansible/deb_packages/gpg.yaml similarity index 100% rename from data/ansible/packages/gpg.yaml rename to data/ansible/deb_packages/gpg.yaml diff --git a/data/ansible/packages/main.yaml b/data/ansible/deb_packages/main.yaml similarity index 100% rename from data/ansible/packages/main.yaml rename to data/ansible/deb_packages/main.yaml diff --git a/data/ansible/packages/nginx.conf.j2 b/data/ansible/deb_packages/nginx.conf.j2 similarity index 100% rename from data/ansible/packages/nginx.conf.j2 rename to data/ansible/deb_packages/nginx.conf.j2 diff --git a/data/ansible/packages/nginx.yaml b/data/ansible/deb_packages/nginx.yaml similarity index 100% rename from data/ansible/packages/nginx.yaml rename to data/ansible/deb_packages/nginx.yaml diff --git a/data/ansible/packages/options.conf.j2 b/data/ansible/deb_packages/options.conf.j2 similarity index 100% rename from data/ansible/packages/options.conf.j2 rename to data/ansible/deb_packages/options.conf.j2 diff --git a/data/ansible/packages/reprepro.yaml b/data/ansible/deb_packages/reprepro.yaml similarity index 100% rename from data/ansible/packages/reprepro.yaml rename to data/ansible/deb_packages/reprepro.yaml diff --git a/data/ansible/rpm_packages/cgrates.spec.j2 b/data/ansible/rpm_packages/cgrates.spec.j2 new file mode 100644 index 000000000..f9a0065a0 --- /dev/null +++ b/data/ansible/rpm_packages/cgrates.spec.j2 @@ -0,0 +1,123 @@ +{{ ansible_managed | comment }} +%global version 0.10.0 +%global git_commit {{ gitVersion.stdout_lines[0] }} + +%global git_short_commit {{ gitShortVersion.stdout_lines[0] }} +%define debug_package %{nil} +%global _logdir /var/log/%name +%global _spooldir /var/spool/%name +%global _libdir /var/lib/%name + +Name: cgrates +Version: %{version} +Release: {{ gitDate.stdout_lines[0] }}+%{git_short_commit} +Summary: Carrier Grade Real-time Charging System +License: GPLv3 +URL: https://github.com/cgrates/cgrates +Source0: https://github.com/cgrates/cgrates/archive/%{git_commit}.tar.gz + +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +Requires(pre): shadow-utils +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +%else +Requires(post): chkconfig +Requires(preun):chkconfig +Requires(preun):initscripts +%endif + +%description +CGRateS is a very fast and easy scalable real-time charging system for Telecom environments. + +%prep +%setup -q -n %{name}-%{version} -c +mkdir -p src/github.com/cgrates +ln -sf ../../../%{name}-%{git_commit} src/github.com/cgrates/cgrates + +%pre +getent group %{name} >/dev/null || groupadd -r %{name} +getent passwd %{name} >/dev/null || \ +useradd -r -g %{name} -d %{_localstatedir}/run/%{name} -s /sbin/nologin \ +-c "CGRateS" %{name} 2>/dev/null || : + +%post +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +if [ $1 -eq 1 ] ; then + # Initial installation + /bin/systemctl daemon-reload >/dev/null 2>&1 || : +fi +%else +/sbin/chkconfig --add %{name} +%endif +/bin/chown -R %{name}:%{name} %{_logdir} +/bin/chown -R %{name}:%{name} %{_spooldir} +/bin/chown -R %{name}:%{name} %{_libdir} + +%preun +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl --no-reload disable %{name}.service > /dev/null 2>&1 || : + /bin/systemctl stop %{name}.service > /dev/null 2>&1 || : +fi +%else +if [ $1 = 0 ]; then + /sbin/service %{name} stop > /dev/null 2>&1 + /sbin/chkconfig --del %{name} +fi +%endif + +%build +cd $RPM_BUILD_DIR/%{name}-%{version}/src/github.com/cgrates/cgrates +./build.sh + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/conf/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/diameter/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/postman/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/radius/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/tariffplans/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/tutorial_tests/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +cp -rpf {{ cgrates_dir }}/data/tutorials/* $RPM_BUILD_ROOT%{_datarootdir}/%{name} +install -D -m 0644 -p {{ cgrates_dir }}/data/conf/%{name}/%{name}.json $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/%{name}.json +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-console $RPM_BUILD_ROOT%{_bindir}/cgr-console +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-engine $RPM_BUILD_ROOT%{_bindir}/cgr-engine +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-loader $RPM_BUILD_ROOT%{_bindir}/cgr-loader +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-tester $RPM_BUILD_ROOT%{_bindir}/cgr-tester +install -D -m 0755 -p {{ golang_gopath }}/bin/cgr-migrator $RPM_BUILD_ROOT%{_bindir}/cgr-migrator +mkdir -p $RPM_BUILD_ROOT%{_logdir}/cdre/csv +mkdir -p $RPM_BUILD_ROOT%{_logdir}/cdre/fwv +mkdir -p $RPM_BUILD_ROOT%{_spooldir}/cdre/csv +mkdir -p $RPM_BUILD_ROOT%{_spooldir}/cdre/fwv +mkdir -p $RPM_BUILD_ROOT%{_spooldir}/tpe +mkdir -p $RPM_BUILD_ROOT%{_spooldir}/failed_posts +mkdir -p $RPM_BUILD_ROOT%{_libdir}/history +mkdir -p $RPM_BUILD_ROOT%{_libdir}/cache_dump +install -D -m 0644 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.options $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/%{name} +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 + install -D -m 0644 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.service $RPM_BUILD_ROOT%{_unitdir}/%{name}.service +%else + install -D -m 0755 -p src/github.com/cgrates/cgrates/packages/redhat_fedora/%{name}.init $RPM_BUILD_ROOT%{_initrddir}/%{name} +%endif + +%files +%defattr(-,root,root,-) +%{_datarootdir}/%{name}/* +%{_bindir}/* +%config(noreplace) %{_sysconfdir}/%{name}/%{name}.json +%{_logdir}/* +%{_spooldir}/* +%{_libdir}/* +%{_sysconfdir}/sysconfig/%{name} +%if 0%{?fedora} > 16 || 0%{?rhel} > 6 + %{_unitdir}/%{name}.service +%else + %{_initrddir}/%{name} +%endif + +%clean +rm -rf $RPM_BUILD_DIR/%{name}-%{version} +rm -rf $RPM_BUILD_ROOT diff --git a/data/ansible/rpm_packages/gen-key-script b/data/ansible/rpm_packages/gen-key-script new file mode 100644 index 000000000..e1ad3c585 --- /dev/null +++ b/data/ansible/rpm_packages/gen-key-script @@ -0,0 +1,13 @@ +{{ ansible_managed | comment }} +%echo Generating a basic OpenPGP key +%no-protection +Key-Type: RSA +Key-Length: {{ gpg_keylength }} +Subkey-Type: RSA +Subkey-Length: {{ 2048 }} +Name-Real: {{ gpg_realname }} +Name-Email: {{ gpg_useremail }} +Expire-Date: {{ gpg_expire }} +%no-ask-passphrase +%commit +%echo done \ No newline at end of file diff --git a/data/ansible/rpm_packages/go.yaml b/data/ansible/rpm_packages/go.yaml new file mode 100644 index 000000000..c08fae40b --- /dev/null +++ b/data/ansible/rpm_packages/go.yaml @@ -0,0 +1,122 @@ +--- +- name: create gopath directory + file: + state: directory + mode: 'u=rwx,go=rx' + dest: '{{ golang_gopath }}' + +- name: create download directory + file: + state: directory + mode: 'u=rwx,go=rx' + dest: '{{ golang_download_dir }}' + +- name: Register the current Go version (if any) + command: /usr/local/go/bin/go version + ignore_errors: yes + register: go_version + changed_when: false + +- name: Remove old installation of Go + become: yes + file: + path: /usr/local/go + state: absent + when: go_version is failed or go_version.stdout != go_version_target + +- name: download Go language SDK + get_url: + url: '{{ golang_mirror }}/{{ golang_redis_filename }}' + dest: '{{ golang_download_dir }}/{{ golang_redis_filename }}' + mode: 'u=rw,go=r' + +- name: create Go language SDK installation directory + become: yes + file: + state: directory + owner: root + group: root + mode: 'u=rwx,go=rx' + dest: '{{ golang_install_dir }}' + +- name: install Go language SDK + become: yes + unarchive: + src: '{{ golang_download_dir }}/{{ golang_redis_filename }}' + remote_src: yes + extra_opts: '--strip-components=1' + dest: '{{ golang_install_dir }}' + owner: root + group: root + creates: '{{ golang_install_dir }}/bin' + +# Set Go language SDK environment variables +- name: make sure /etc/profile.d exists + become: yes + file: + path: /etc/profile.d + state: directory + owner: root + group: root + mode: 'u=rwx,go=rx' + +- name: export Go language SDK environment variables + become: yes + template: + src: golang.sh.j2 + dest: /etc/profile.d/golang.sh + owner: root + group: root + mode: 'u=rw,go=r' + +- name: Export GOROOT for root + become: yes + lineinfile: + path: ~/.bashrc + line: export GOROOT='{{ golang_install_dir }}' + insertafter: last + +- name: Add GOROOT to PATH for root + become: yes + lineinfile: + dest: ~/.bashrc + line: export PATH=$PATH:$GOROOT/bin + insertafter: last + +- name: Export GOPATH for root + become: yes + lineinfile: + dest: ~/.bashrc + line: export GOPATH='{{ golang_gopath }}' + insertafter: last + +- name: Add GOPATH to PATH for root + become: yes + lineinfile: + dest: ~/.bashrc + line: export PATH=$PATH:$GOPATH/bin + insertafter: last + +- name: Export GOROOT + lineinfile: + dest: ~/.bashrc + line: export GOROOT='{{ golang_install_dir }}' + insertafter: last + +- name: Add GOROOT to PATH + lineinfile: + dest: ~/.bashrc + line: export PATH=$PATH:$GOROOT/bin + insertafter: last + +- name: Export GOPATH + lineinfile: + dest: ~/.bashrc + line: export GOPATH='{{ golang_gopath }}' + insertafter: last + +- name: Add GOPATH to PATH + lineinfile: + dest: ~/.bashrc + line: export PATH=$PATH:$GOPATH/bin + insertafter: last diff --git a/data/ansible/rpm_packages/golang.sh.j2 b/data/ansible/rpm_packages/golang.sh.j2 new file mode 100644 index 000000000..7bfc41c2e --- /dev/null +++ b/data/ansible/rpm_packages/golang.sh.j2 @@ -0,0 +1,12 @@ + +#!/bin/sh + +{{ ansible_managed | comment('plain') }} + +export GOROOT='{{ golang_install_dir }}' +export PATH=$PATH:$GOROOT/bin + +{% if golang_gopath not in (None, '') %} +export GOPATH="{{ golang_gopath }}" +export PATH=$PATH:$GOPATH/bin +{% endif %} \ No newline at end of file diff --git a/data/ansible/rpm_packages/gpg-gen-key.yaml b/data/ansible/rpm_packages/gpg-gen-key.yaml new file mode 100644 index 000000000..b13eb01f1 --- /dev/null +++ b/data/ansible/rpm_packages/gpg-gen-key.yaml @@ -0,0 +1,51 @@ +--- +- name: set defaut gpg options + become: true + template: + src: gpg.conf.j2 + dest: "{{ gpg_home }}/.gnupg/gpg.conf" + mode: '0600' + owner: "{{ rootUser }}" + +- name: copy default template for gpg key generation + become: true + template: + src: gen-key-script + dest: "{{ gpg_home }}/.gnupg/gen-key-script-{{ rootUser }}" + mode: '0600' + owner: "{{ rootUser }}" + +- name: create some required file + become: true + shell: "gpg --list-secret-keys --keyid-format LONG" + +- name: When starting fresh we need to make sure we have rng-tools + become: true + apt: + name: rng-tools + state: present + ignore_errors: true + +- name: Add HRNGDEVICE=/dev/urandom so we can execute rngd + become: true + lineinfile: + path: /etc/default/rng-tools + line: HRNGDEVICE=/dev/urandom + insertafter: last + +- name: generate randomness + become: true + shell: "sudo /etc/init.d/rng-tools restart" + ignore_errors: true + +- name: generate gpg key + become: true + shell: "sudo gpg --batch --gen-key {{ gpg_home }}/.gnupg/gen-key-script-{{ rootUser }}" + +- name: get user armored public key + become: true + shell: "sudo gpg --armor --output {{ gpg_pubkeyfileexport }} --export {{ gpg_useremail }}" + +- name: After export move the key to /var/packages + become: true + shell: "sudo mv {{ gpg_pubkeyfileexport }} /var/packages" \ No newline at end of file diff --git a/data/ansible/rpm_packages/gpg.conf.j2 b/data/ansible/rpm_packages/gpg.conf.j2 new file mode 100644 index 000000000..38d375f03 --- /dev/null +++ b/data/ansible/rpm_packages/gpg.conf.j2 @@ -0,0 +1,5 @@ +{{ ansible_managed | comment }} +# Prioritize stronger algorithms for new keys. +default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 BZIP2 ZLIB ZIP Uncompressed +# Use a stronger digest than the default SHA1 for certifications. +cert-digest-algo SHA512 diff --git a/data/ansible/rpm_packages/gpg.yaml b/data/ansible/rpm_packages/gpg.yaml new file mode 100644 index 000000000..05124a09a --- /dev/null +++ b/data/ansible/rpm_packages/gpg.yaml @@ -0,0 +1,16 @@ +--- +- name: Ensure .gnupg config directory exists with right permissions + become: true + file: dest={{ gpg_home }}/.gnupg state=directory mode=0700 owner="{{ rootUser }}" + +## Note: matching on realname or email doesn't allow to create multiple keys. alternative? +- name: check existing secret key + shell: "gpg --list-secret-keys | grep '{{ gpg_realname }}'" + changed_when: false + ignore_errors: true + become: yes + become_user: "{{ rootUser }}" + register: gpgkeys + +- include: gpg-gen-key.yaml + when: gpgkeys.stdout_lines|length < 1 diff --git a/data/ansible/rpm_packages/main.yaml b/data/ansible/rpm_packages/main.yaml new file mode 100644 index 000000000..93b460d97 --- /dev/null +++ b/data/ansible/rpm_packages/main.yaml @@ -0,0 +1,270 @@ +--- +- name: Check and set python version on YUM server + hosts: yum + remote_user: '{{ gouser }}' + gather_facts: false + tasks: + - name: symlink /usr/bin/python -> /usr/bin/python3 + raw: | + if [ -f /usr/bin/python3 ] && [ ! -f /usr/bin/python ]; then + ln --symbolic /usr/bin/python3 /usr/bin/python; + fi + become: true + +- hosts: yum + vars: + ############################################################### + ##################### Golang Vars ############################# + ############################################################### + # Go language SDK version number + golang_version: '1.13' + go_version_target: "go version go{{ golang_version }} linux/amd64" + # Mirror to download the Go language SDK redistributable package from + golang_mirror: 'https://storage.googleapis.com/golang' + # Base installation directory the Go language SDK distribution + golang_install_dir: '/usr/local/go' + # Directory to store files downloaded for Go language SDK installation + golang_download_dir: "{{ x_ansible_download_dir | default(ansible_env.HOME + '/.ansible/tmp/downloads') }}" + # Location for GOPATH environment variable + golang_gopath: "/home/{{ gouser }}/go" + # Filename of Go language SDK redistributable package + golang_redis_filename: 'go{{ golang_version }}.linux-amd64.tar.gz' + + ############################################################### + # CGRateS location + cgrates_dir: "{{ golang_gopath }}/src/github.com/cgrates/cgrates" + ############################################################### + ##################### GPG Vars ############################# + ############################################################### + gpg_home: "/root" + gpg_realname: "CGRateS" + gpg_useremail: "cgrates@itsyscom.com" + gpg_pubkeyfileexport: "yum.cgrates.org.gpg.key" + + gpg_keylength: 2048 + gpg_subkeylength: 2048 + gpg_expire: 360 + + rootUser : root + + customPath: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + dependencies: + - build-essential + - git + - devscripts + - nginx + - rpm + - createrepo + - wget + - sshpass + - gnupg2 + + remote_user: '{{ gouser }}' + tasks: +########################################################################################################################### +########################################################################################################################### +# install dependencies + - name: Install dependencies + become: yes + apt: name={{ dependencies }} state=present +########################################################################################################################### +########################################################################################################################### +# Prepare for configuration + - name: Check if /var/packages/yum directory exists + become: true + file: + path: /var/packages/yum + state: directory + + - name: Check if /var/packages/yum/v0.10 directory exists + become: true + file: + path: /var/packages/yum/v0.10 + state: directory + + - name: Generate GPG Key + include: gpg.yaml + + - name: Check if NGINX needs to be configured + become: true + shell: "ls /etc/nginx/sites-enabled | grep 'yum.cgrates.org.vhost'" + ignore_errors: true + register: nginxConfig + + - name: Configure NGINX server + include: nginx.yaml + when: nginxConfig.stdout_lines|length < 1 + + - name: Add .rpmmacros in root directory + become: true + template: + src: rpmmacros.j2 + dest: "{{ gpg_home }}/.rpmmacros" + mode: '0600' + owner: "{{ rootUser }}" + + - name: Import the key in rpm + become: true + shell: rpm --import /var/packages/yum.cgrates.org.gpg.key + +########################################################################################################################### +########################################################################################################################### +# Install Golang + - name: install unarchive dependencies (zypper) + become: yes + zypper: + name: + - gzip + - tar + state: present + when: ansible_pkg_mgr == 'zypper' + + - name: Install golang + include: go.yaml + +########################################################################################################################### +########################################################################################################################### +# Install CGRateS + - name: create cgrates directory + become: yes + file: + state: directory + mode: 'u=rwx,go=rx' + owner: "{{ gouser }}" + group: "{{ gouser }}" + dest: '{{ cgrates_dir }}' + become_user: "{{ gouser }}" + + - name: git clone cgrates + git: + repo: https://github.com/cgrates/cgrates.git + dest: '{{ cgrates_dir }}' + update: yes + force: yes + version: v0.10 + become: yes + become_user: "{{ gouser }}" + + - name: build cgrates + shell: "sh {{ cgrates_dir }}/build.sh" + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + args: + chdir: '{{ cgrates_dir }}' + + - name: get git version + shell: git rev-parse HEAD + register: gitVersion + args: + chdir: '{{ cgrates_dir }}' + + - name: get git short version + shell: git log -1 --format=%ci | date +%Y%m%d%H%M%S + register: gitDate + args: + chdir: '{{ cgrates_dir }}' + + - name: get git date + shell: git rev-parse --short HEAD + register: gitShortVersion + args: + chdir: '{{ cgrates_dir }}' + + - name: symbol link + become: yes + file: + src: "{{ cgrates_dir }}/data" + dest: "/usr/share/cgrates" + state: link +########################################################################################################################### +########################################################################################################################### +# Generate package + - name: Create the folders for build + become: yes + file: + path: cgr_build/{{ item.dirName }} + state: directory + loop: + - { dirName: BUILD } + - { dirName: SOURCES } + - { dirName: SPECS } + - { dirName: SRPMS } + - { dirName: RPMS } + + - name: Download the tar.gz for the last commit + become: yes + shell: wget https://github.com/cgrates/cgrates/archive/{{ gitVersion.stdout_lines[0] }}.tar.gz + args: + chdir: cgr_build/SOURCES + + - name: Add cgrates.spec in SPECS + become: yes + template: + src: cgrates.spec.j2 + dest: cgr_build/SPECS/cgrates.spec + + - name: Generate the .rpm file + become: yes + shell: 'rpmbuild -bb --define "_topdir /home/{{ gouser }}/cgr_build" cgr_build/SPECS/cgrates.spec' + environment: + PATH: "{{ lookup('env','PATH') }}:{{ golang_gopath }}/bin:/usr/local/go/bin:{{ ansible_env.PATH }}" + + - name: Take the name of the .rpm package + become: yes + shell : "ls cgr_build/RPMS/x86_64/ | grep '.rpm'" + register: rmpFileName + + # Move the file to PKG server + - name: Copy the file to PKG server + shell: 'sshpass -p {{ pkgPass }} scp cgr_build/RPMS/x86_64/{{ item }} {{ gouser }}@{{ internalPkgAddr }}:/tmp/' + with_items: '{{ rmpFileName.stdout_lines }}' + + - name: Sign with rpm --addsign the .rpm file + become: yes + shell: 'sudo rpm --addsign cgr_build/RPMS/x86_64/{{ rmpFileName.stdout_lines[0] }}' + + - name: Check if is something in /var/packages/yum/v0.10/ + become: yes + shell : "ls /var/packages/yum/v0.10/" + register: yumFiles + + # Clean the folder + - name: Clean the incoming folder + become: yes + shell: "sudo rm -rf /var/packages/yum/v0.10/*" + when: yumFiles.stdout_lines|length > 1 + + - name: Move the files to /var/packages/yum/v0.10 + become: yes + command: mv cgr_build/RPMS/x86_64/{{ rmpFileName.stdout_lines[0] }} /var/packages/yum/v0.10/ + when : rmpFileName.stdout_lines|length > 0 + + - name: Include the package with createrepo + become: yes + shell: createrepo /var/packages/yum/v0.10 + +- hosts: pkg + remote_user: '{{ gouser }}' + tasks: + - name: Creates directory + become: yes + file: + path: /var/packages/rpm/v0.10/ + state: directory + + - name: Remove symlink from current rpm package + become: yes + file: + path: /var/packages/rpm/v0.10/cgrates_current.rpm + state: absent + + - name: Move the new package to /var/packages/rpm + become: yes + shell: "sudo mv /tmp/{{ item }} /var/packages/rpm/v0.10/" + with_items: "{{ hostvars['yum']['rmpFileName']['stdout_lines'] }}" + + - name: Create the new symlink cgrates_current.rpm + become: yes + shell: "sudo ln -s /var/packages/rpm/v0.10/{{ item }} /var/packages/rpm/v0.10/cgrates_current.rpm" + with_items: "{{ hostvars['yum']['rmpFileName']['stdout_lines'] }}" diff --git a/data/ansible/rpm_packages/nginx.conf.j2 b/data/ansible/rpm_packages/nginx.conf.j2 new file mode 100644 index 000000000..3981b1bc3 --- /dev/null +++ b/data/ansible/rpm_packages/nginx.conf.j2 @@ -0,0 +1,21 @@ +server { + listen 80; + server_name yum.cgrates.org; + + access_log /var/log/nginx/packages-error.log; + error_log /var/log/nginx/packages-error.log; + + location / { + root /var/packages; + index index.html; + autoindex on; + } + + location ~ /(.*)/conf { + deny all; + } + + location ~ /(.*)/db { + deny all; + } +} diff --git a/data/ansible/rpm_packages/nginx.yaml b/data/ansible/rpm_packages/nginx.yaml new file mode 100644 index 000000000..24718ddc4 --- /dev/null +++ b/data/ansible/rpm_packages/nginx.yaml @@ -0,0 +1,19 @@ +--- +- name: Add yum.cgrates.vhost in nginx + become: true + template: + src: nginx.conf.j2 + dest: "/etc/nginx/sites-available/yum.cgrates.org.vhost" + mode: '0600' + owner: "{{ rootUser }}" + +- name: Create a symlink for yum.cgrates.org + become: true + file: + src: "/etc/nginx/sites-available/yum.cgrates.org.vhost" + dest: "/etc/nginx/sites-enabled/yum.cgrates.org.vhost" + state: link + +- name: Restart the nginx so the change take effects + become: true + shell: "/etc/init.d/nginx reload" diff --git a/data/ansible/rpm_packages/rpmmacros.j2 b/data/ansible/rpm_packages/rpmmacros.j2 new file mode 100644 index 000000000..1c6b0322b --- /dev/null +++ b/data/ansible/rpm_packages/rpmmacros.j2 @@ -0,0 +1,5 @@ +{{ ansible_managed | comment }} +%_signature gpg +%_gpg_path /root/.gnupg +%_gpg_name CGRateS +%_gpgbin /usr/bin/gpg diff --git a/docs/installation.rst b/docs/installation.rst index 6606f3dd4..f15796647 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -63,6 +63,52 @@ Run the following commands: As a side note on http://pkg.cgrates.org one can find an entire archive of CGRateS packages. +3.1.2. Redhat/Fedora/CentOS +------------- + +There are two main ways of installing the maintained packages: + + +3.1.2.1. YUM repository +++++++++++++++++++++++++++++ + + +Create a file called cgrates.repo in /etc/yum.repos.d/ and add the following lines: + +:: + + [cgrates] + name=CGRateS + baseurl=http://yum.cgrates.org/yum/v0.10/ + enabled=1 + gpgcheck=1 + gpgkey=http://yum.cgrates.org/yum.cgrates.org.gpg.key + +After that run the following commands: + +:: + + sudo yum update + sudo yum install cgrates + +Once the installation is completed, one should perform the :ref:`post-install` section in order to have the CGRateS properly set and ready to run. +After *post-install* actions are performed, CGRateS will be configured in **/etc/cgrates/cgrates.json** and enabled in **/etc/default/cgrates**. + + +3.1.2.2. Manual installation of .rpm package out of archive server +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + + +Run the following commands: + +:: + + wget http://pkg.cgrates.org/rpm/v0.10/cgrates_current.rpm + sudo rpm -i cgrates_current.rpm + +As a side note on http://pkg.cgrates.org one can find an entire archive of CGRateS packages. + + 3.2. Using source ~~~~~~~~~~~~~~~~~