diff --git a/ansible/.gitignore b/ansible/.gitignore new file mode 100644 index 00000000..2fa603cf --- /dev/null +++ b/ansible/.gitignore @@ -0,0 +1,5 @@ +poky-* +cov-analysis-*.tar.gz +*.retry +*.swo +*.swp diff --git a/ansible/files/README.md b/ansible/files/README.md new file mode 100644 index 00000000..c3c631d1 --- /dev/null +++ b/ansible/files/README.md @@ -0,0 +1,23 @@ +Place 3rd party firmware/sdk files here. + +# role: gsm-tester-modems + +``` +./gobi +./gobi/UQCN.mbn +./gobi/amss.mbn +./gobi/apps.mbn +``` + +# role: install-coverity + +The filename depends on the variable `coverity_version`. +`coverity_version: 2017.07` + +E.g: `./cov-analysis-linux64-2017.07.tar.gz` + +# role: install-poky-sdk + +The filename depends on the variable `poky_installer_file`. + +`./poky-glibc-x86_64-meta-toolchain-osmo-armv5te-toolchain-osmo-2.3.2.sh` diff --git a/ansible/hosts b/ansible/hosts new file mode 100644 index 00000000..4f12cdf5 --- /dev/null +++ b/ansible/hosts @@ -0,0 +1,11 @@ +[gsm-tester] +# rnd +10.9.25.101 +# production +10.9.25.107 + +[jenkins-slaves] +# admin2-deb9build +2a01:4f8:13b:828::1:300 +# admin2-deb8build +2a01:4f8:13b:828::1:400 diff --git a/ansible/roles/docker/README.md b/ansible/roles/docker/README.md new file mode 100644 index 00000000..878ddb52 --- /dev/null +++ b/ansible/roles/docker/README.md @@ -0,0 +1 @@ +# Install docker for debian diff --git a/ansible/roles/docker/defaults/main.yml b/ansible/roles/docker/defaults/main.yml new file mode 100644 index 00000000..2c03d900 --- /dev/null +++ b/ansible/roles/docker/defaults/main.yml @@ -0,0 +1,4 @@ +--- + +# Adds this user to the group docker which is allowed to access docker +jenkins_user: jenkins diff --git a/ansible/roles/docker/tasks/main.yml b/ansible/roles/docker/tasks/main.yml new file mode 100644 index 00000000..16031751 --- /dev/null +++ b/ansible/roles/docker/tasks/main.yml @@ -0,0 +1,28 @@ +--- + +- name: add https support + apt: + name: apt-transport-https + cache_valid_time: 3600 + update_cache: yes + +- name: add docker gpg key to apt keyring + apt_key: + id: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 + url: https://download.docker.com/linux/debian/gpg + +- apt_repository: + repo: "deb https://download.docker.com/linux/debian {{ ansible_distribution_release }} stable" + state: present + update_cache: yes + when: ansible_distribution == "Debian" + +- name: install docker + apt: + name: docker-ce + +- name: add jenkins to the docker group + user: + name: "{{ jenkins_user }}" + groups: docker + append: yes diff --git a/ansible/roles/gsm-tester-modems/README.md b/ansible/roles/gsm-tester-modems/README.md new file mode 100644 index 00000000..9f5f29b2 --- /dev/null +++ b/ansible/roles/gsm-tester-modems/README.md @@ -0,0 +1 @@ +# Install drivers for multiple modems or BTS's diff --git a/ansible/roles/gsm-tester-modems/tasks/main.yml b/ansible/roles/gsm-tester-modems/tasks/main.yml new file mode 100644 index 00000000..b766c738 --- /dev/null +++ b/ansible/roles/gsm-tester-modems/tasks/main.yml @@ -0,0 +1,45 @@ +--- +# modems +- name: install dependecies for usrp + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - libuhd-dev + - uhd-host + register: uhd_installed + +- name: download firmware for uhd/usrp + command: uhd_images_downloader + args: + creates: /usr/share/uhd/images + when: uhd_installed | changed + +- name: allow jenkins to access USRP + user: + name: jenkins + groups: usrp + append: yes + +- name: install gobi2000 packages + apt: + name: gobi-loader + cache_valid_time: 3600 + update_cache: yes + +- name: gobi firmwares + file: path=/lib/firmware/gobi state=directory + +- name: copy gobi firmwares + copy: + src: "{{ item.file }}" + dest: "/lib/firmware/{{ item.file }}" + with_items: + - file: gobi/amss.mbn + checksum: sha256:18d161dc5e9db5e795b1f1026e47d0590b6cc0ed9bef824ac0c4b771b529c364 + - file: gobi/apps.mbn + checksum: sha256:cd7d9adaccf59f02b3bc8261334ed83c7644fbdbf697055189533467d6c882b2 + - file: gobi/UQCN.mbn + checksum: sha256:37dfc789f899d0ec4c8ba2c403a1a4bc266c9017c94f2b90912e1b7e978c42e7 + ignore_errors: yes diff --git a/ansible/roles/gsm-tester-network/README.md b/ansible/roles/gsm-tester-network/README.md new file mode 100644 index 00000000..e3249294 --- /dev/null +++ b/ansible/roles/gsm-tester-network/README.md @@ -0,0 +1,7 @@ +# Setup setup specific configurations + +The network configuration is not set by default. + +# variables + +- `bts_interface` (eth1): on which network interface the bts is configured. diff --git a/ansible/roles/gsm-tester-network/defaults/main.yml b/ansible/roles/gsm-tester-network/defaults/main.yml new file mode 100644 index 00000000..3e506dac --- /dev/null +++ b/ansible/roles/gsm-tester-network/defaults/main.yml @@ -0,0 +1,3 @@ +--- + +bts_interface: eth1 diff --git a/ansible/roles/gsm-tester-network/tasks/main.yml b/ansible/roles/gsm-tester-network/tasks/main.yml new file mode 100644 index 00000000..c331b717 --- /dev/null +++ b/ansible/roles/gsm-tester-network/tasks/main.yml @@ -0,0 +1,6 @@ +--- + +- name: setup the network configuration + template: + src: interface.j2 + dest: /etc/network/interfaces.d/gsm-tester diff --git a/ansible/roles/gsm-tester-network/templates/interface.j2 b/ansible/roles/gsm-tester-network/templates/interface.j2 new file mode 100644 index 00000000..98033588 --- /dev/null +++ b/ansible/roles/gsm-tester-network/templates/interface.j2 @@ -0,0 +1,56 @@ + +auto {{ bts_interface }} +iface {{ bts_interface }} inet static + address 10.42.42.1 + netmask 255.255.255.0 + +auto {{ bts_interface }}:0 +iface {{ bts_interface }}:0 inet static + address 10.42.42.2 + netmask 255.255.255.0 + +auto {{ bts_interface }}:1 +iface {{ bts_interface }}:1 inet static + address 10.42.42.3 + netmask 255.255.255.0 + +auto {{ bts_interface }}:2 +iface {{ bts_interface }}:2 inet static + address 10.42.42.4 + netmask 255.255.255.0 + +auto {{ bts_interface }}:3 +iface {{ bts_interface }}:3 inet static + address 10.42.42.5 + netmask 255.255.255.0 + +auto {{ bts_interface }}:4 +iface {{ bts_interface }}:4 inet static + address 10.42.42.6 + netmask 255.255.255.0 + +auto {{ bts_interface }}:5 +iface {{ bts_interface }}:5 inet static + address 10.42.42.7 + netmask 255.255.255.0 + +auto {{ bts_interface }}:6 +iface {{ bts_interface }}:6 inet static + address 10.42.42.8 + netmask 255.255.255.0 + +auto {{ bts_interface }}:7 +iface {{ bts_interface }}:7 inet static + address 10.42.42.9 + netmask 255.255.255.0 + +auto {{ bts_interface }}:8 +iface {{ bts_interface }}:8 inet static + address 10.42.42.50 + netmask 255.255.255.0 + +auto {{ bts_interface }}:9 +iface {{ bts_interface }}:9 inet static + address 10.42.42.51 + netmask 255.255.255.0 + diff --git a/ansible/roles/gsm-tester/defaults/main.yml b/ansible/roles/gsm-tester/defaults/main.yml new file mode 100644 index 00000000..a61d3be0 --- /dev/null +++ b/ansible/roles/gsm-tester/defaults/main.yml @@ -0,0 +1,7 @@ +--- + +# how many modem are connected? +# This is used when reseting the modems via quad_modem_power_cycle.sh, +# because some modems take longer and the script waits until all +# modems connected +gsm_modems: 4 diff --git a/ansible/roles/gsm-tester/files/dbus_osmo-gsm-tester.conf b/ansible/roles/gsm-tester/files/dbus_osmo-gsm-tester.conf new file mode 100644 index 00000000..d867833b --- /dev/null +++ b/ansible/roles/gsm-tester/files/dbus_osmo-gsm-tester.conf @@ -0,0 +1,9 @@ + + + + + + + diff --git a/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_admin.sh b/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_admin.sh new file mode 100644 index 00000000..60e527a5 --- /dev/null +++ b/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_admin.sh @@ -0,0 +1,2 @@ +#!/bin/sh +/sbin/setcap cap_net_admin+ep "$1" diff --git a/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_raw.sh b/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_raw.sh new file mode 100755 index 00000000..1f3a7275 --- /dev/null +++ b/ansible/roles/gsm-tester/files/osmo-gsm-tester_setcap_net_raw.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +/sbin/setcap cap_net_raw+ep "$1" diff --git a/ansible/roles/gsm-tester/tasks/main.yml b/ansible/roles/gsm-tester/tasks/main.yml new file mode 100644 index 00000000..b6de0750 --- /dev/null +++ b/ansible/roles/gsm-tester/tasks/main.yml @@ -0,0 +1,244 @@ +--- +# gsm tester would only need the libraries, not the dev packages. +# But the name of the -dev packages are more stable over multiple release. +- name: install osmocom runtime dependencies + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - build-essential + - git + - automake + - libdbi-dev + - libdbd-sqlite3 + - sqlite3 + - libsctp-dev + - libortp-dev + - libpcap-dev + - libc-ares-dev + - libtool + - shtool + - pkg-config + - libtalloc-dev + - libpcsclite-dev + - libgnutls28-dev + - libmnl-dev + - libssl-dev + - libczmq-dev + - libsofia-sip-ua-glib-dev + - libsqlite3-dev + - libasound2-dev + - mdbus2 + +- name: install ofono build dependencies + apt: + name: ofono + state: build-dep + cache_valid_time: 3600 + update_cache: yes + +- name: install libqmi-glib a dependency of sysmocom ofono + apt: + name: libqmi-glib-dev + cache_valid_time: 3600 + update_cache: yes + +- name: install uhub dependencies + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - libusb-1.0-0-dev + +- name: setup uhubctl repository + git: + repo: "https://github.com/mvp/uhubctl.git" + dest: /root/uhubctl + version: master + clone: yes + update: no + +- name: build uhubctl + shell: | + make && \ + make install + args: + chdir: /root/uhubctl + creates: /usr/sbin/uhubctl + +# TODO: move this into restart-modems.d directory +- name: copy quad_modem_power_cycle.sh + template: + src: quad_modem_power_cycle.sh + dest: /usr/local/bin/quad_modem_power_cycle.sh + mode: 0755 + tags: + - ofono + +- name: setup ofono repository + git: + repo: 'git://git.sysmocom.de/ofono' + dest: /root/ofono + version: osmo-gsm-tester + clone: yes + update: no + tags: + - ofono + +- name: build ofono + shell: | + ./bootstrap && \ + CFLAGS="-g" ./configure --disable-bluez4 && \ + CFLAGS="-g" make -j3 && \ + make install && \ + systemctl daemon-reload + args: + chdir: /root/ofono + creates: /usr/local/sbin/ofonod + tags: + - ofono + +- name: ensure ofono is started + service: + name: ofono + state: started + enabled: yes + tags: + - ofono + +- name: install gsm tester dependencies + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - dbus + - tcpdump + - sqlite3 + - python3 + - python3-yaml + - python3-mako + - python3-gi + - ofono + - patchelf + - sudo + - libcap2-bin + - python3-pip + +- name: install gsm tester pip dependencies + pip: + name: "{{ item }}" + executable: pip3 + editable: no + with_items: + - "git+https://github.com/podshumok/python-smpplib.git@master#egg=smpplib" + - pydbus + tags: [pip] + +- name: create group osmo-gsm-tester + group: + name: osmo-gsm-tester + +- name: add jenkins to osmo-gsm-tester and systemd-journal + user: + name: jenkins + groups: "{{ item }}" + append: yes + shell: /bin/bash + with_items: + - systemd-journal + - osmo-gsm-tester + +- name: setup state directory + file: + path: /var/tmp/osmo-gsm-tester/state + state: directory + group: osmo-gsm-tester + mode: g+rwxs + +- name: install acl + apt: + name: acl + +# Ensure the group always has access to all files +- name: add acl to state directory + acl: + path: /var/tmp/osmo-gsm-tester/state + state: present + etype: group + entity: osmo-gsm-tester + default: yes + permissions: rwx + +- name: create trials directory + file: + path: /var/tmp/osmo-gsm-tester/trials + state: directory + group: osmo-gsm-tester + mode: g+rwxs + +- name: allow osmo-gsm-tester to access ofono + copy: + src: dbus_osmo-gsm-tester.conf + dest: /etc/dbus-1/system.d/osmo-gsm-tester.conf + +- name: ensure tcpdump can be called by osmo-gsm-tester + file: + path: /usr/sbin/tcpdump + group: osmo-gsm-tester + mode: 750 + +- name: create a symlink for tcpdump + file: + src: /usr/sbin/tcpdump + dest: /usr/local/bin/tcpdump + state: link + +- name: add correct capabilities to tcpdump + capabilities: + path: /usr/sbin/tcpdump + capability: cap_net_raw,cap_net_admin=eip + state: present + +- name: allow core files for the group osmo-gsm-tester + copy: + content: "@osmo-gsm-tester - core unlimited" + dest: /etc/security/limits.d/osmo-gsm-tester_allowcore.conf + +- name: allow rt priority for the group osmo-gsm-tester + copy: + content: "@osmo-gsm-tester - rtprio 99" + dest: /etc/security/limits.d/osmo-gsm-tester_rtprio.conf + +- name: create a wrapper script to add CAP_NET_RAW + copy: + src: osmo-gsm-tester_setcap_net_raw.sh + dest: /usr/local/bin/osmo-gsm-tester_setcap_net_raw.sh + mode: 755 + +- name: allow osmo-gsm-tester sudo osmo-gsm-tester_setcap_net_raw.sh + copy: + content: | + %osmo-gsm-tester ALL=(root) NOPASSWD: /usr/local/bin/osmo-gsm-tester_setcap_net_raw.sh + dest: /etc/sudoers.d/osmo-gsm-tester_setcap_net_raw + mode: 0440 + +- name: create a wrapper script to add CAP_NET_ADMIN + copy: + src: osmo-gsm-tester_setcap_net_admin.sh + dest: /usr/local/bin/osmo-gsm-tester_setcap_net_admin.sh + mode: 755 + +- name: allow osmo-gsm-tester sudo osmo-gsm-tester_setcap_net_admin.sh + copy: + content: | + %osmo-gsm-tester ALL=(root) NOPASSWD: /usr/local/bin/osmo-gsm-tester_setcap_net_admin.sh + dest: /etc/sudoers.d/osmo-gsm-tester_setcap_net_admin + mode: 0440 + +- name: logrotate limit filesizes to 10M + copy: + content: "maxsize 10M" + dest: /etc/logrotate.d/maxsize diff --git a/ansible/roles/gsm-tester/templates/quad_modem_power_cycle.sh b/ansible/roles/gsm-tester/templates/quad_modem_power_cycle.sh new file mode 100755 index 00000000..9262f974 --- /dev/null +++ b/ansible/roles/gsm-tester/templates/quad_modem_power_cycle.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -ex +uhubctl -p 123456 -a 0 +# give a lot of time to discharge capacitors on the board +sleep 20 +uhubctl -p 123456 -a 1 +attempts=30 +while [ "x$(uhubctl | grep -e 05c6 -e 1199 -c)" != "x{{ gsm_modems }}" ]; do + attempts=$(($attempts - 1)) + if [ "$attempts" -le 0 ]; then + echo "Timeout" + exit 1 + fi + sleep 1 +done +uhubctl diff --git a/ansible/roles/install-coverity/README.md b/ansible/roles/install-coverity/README.md new file mode 100644 index 00000000..cd719f76 --- /dev/null +++ b/ansible/roles/install-coverity/README.md @@ -0,0 +1,4 @@ +# Install coverity compiler + +Install the coverity compiler to /opt/coverity/cover..-$version/ and +create a link to /opt/coverity/current diff --git a/ansible/roles/install-coverity/defaults/main.yml b/ansible/roles/install-coverity/defaults/main.yml new file mode 100644 index 00000000..66b33f90 --- /dev/null +++ b/ansible/roles/install-coverity/defaults/main.yml @@ -0,0 +1,4 @@ +--- + +coverity_version: 2017.07 +coverity_installer_file: "cov-analysis-linux64-{{ coverity_version }}.tar.gz" diff --git a/ansible/roles/install-coverity/tasks/main.yml b/ansible/roles/install-coverity/tasks/main.yml new file mode 100644 index 00000000..200a3490 --- /dev/null +++ b/ansible/roles/install-coverity/tasks/main.yml @@ -0,0 +1,39 @@ +--- +- name: copy coverity installer + copy: + src: "{{ coverity_installer_file }}" + dest: "/tmp/{{ coverity_installer_file }}" + mode: 750 + register: coverity_copy + ignore_errors: yes + tags: [coverity] + +- name: create /opt/coverity + file: + path: /opt/coverity/ + state: directory + when: coverity_copy.failed == False + tags: [coverity] + +- name: unpack coverity + unarchive: + src: "/tmp/{{ coverity_installer_file }}" + dest: /opt/coverity/ + remote_src: yes + when: coverity_copy.failed == False + tags: [coverity] + +- name: create link /opt/coverity/last + file: + src: /opt/coverity/cov-analysis-linux64-{{ coverity_version }} + dest: /opt/coverity/current + state: link + when: coverity_copy.failed == False + tags: [coverity] + +- name: "Please download {{ coverity_installer_file }} to your ansible directory to allow ansible to install coverity" + debug: + msg: "Ansible can not find {{ coverity_installer_file }}" + when: coverity_copy.failed + tags: [coverity] + diff --git a/ansible/roles/install-poky-sdk/README.md b/ansible/roles/install-poky-sdk/README.md new file mode 100644 index 00000000..541ea3cf --- /dev/null +++ b/ansible/roles/install-poky-sdk/README.md @@ -0,0 +1,10 @@ +# Install the poky sdk used to build sysmobts binaries + +# Poky Installation + +The poky installation requires you to have the installer available. +Put the `poky_installer_file` to the root directory of this repo. +Also the exact filename must match the variable `poky_installer_file` and the +`poky_version`. +For the defaults of those variable have a look into `defaults/main.yml`. + diff --git a/ansible/roles/install-poky-sdk/defaults/main.yml b/ansible/roles/install-poky-sdk/defaults/main.yml new file mode 100644 index 00000000..976a03fd --- /dev/null +++ b/ansible/roles/install-poky-sdk/defaults/main.yml @@ -0,0 +1,7 @@ +--- +# OS user +jenkins_user: jenkins + +poky_installer_file: poky-glibc-x86_64-meta-toolchain-osmo-armv5te-toolchain-osmo-2.3.2.sh +poky_version: 2.3.2 + diff --git a/ansible/roles/install-poky-sdk/tasks/main.yml b/ansible/roles/install-poky-sdk/tasks/main.yml new file mode 100644 index 00000000..dda60c54 --- /dev/null +++ b/ansible/roles/install-poky-sdk/tasks/main.yml @@ -0,0 +1,42 @@ +--- + +- name: install bzip2 and tar + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - tar + - bzip2 + +- name: copy poky installer + copy: + src: "{{ poky_installer_file }}" + dest: "/tmp/{{ poky_installer_file }}" + mode: 750 + register: poky_copy + ignore_errors: yes + tags: [poky] + +- name: execute poky installer + command: "/tmp/{{ poky_installer_file }}" + args: + creates: "/opt/poky/{{ poky_version }}" + when: poky_copy.failed == false + tags: [poky] + +- name: change owner/group to jenkins user + file: + path: /opt/poky + owner: "{{ jenkins_user }}" + group: "{{ jenkins_user }}" + recurse: yes + when: poky_copy.failed == false + tags: [poky] + +- name: "Please download {{ poky_installer_file }} to your ansible directory to allow ansible to install poky" + debug: + msg: "Ansible can not find or copy {{ poky_installer_file }}" + when: poky_copy.failed + tags: [poky] + diff --git a/ansible/roles/osmocom-jenkins-slave/README.md b/ansible/roles/osmocom-jenkins-slave/README.md new file mode 100644 index 00000000..e55d1be1 --- /dev/null +++ b/ansible/roles/osmocom-jenkins-slave/README.md @@ -0,0 +1,2 @@ +# Setup a usual jenkins slave + diff --git a/ansible/roles/osmocom-jenkins-slave/defaults/main.yml b/ansible/roles/osmocom-jenkins-slave/defaults/main.yml new file mode 100644 index 00000000..872542c6 --- /dev/null +++ b/ansible/roles/osmocom-jenkins-slave/defaults/main.yml @@ -0,0 +1,8 @@ +--- + +# OS user +jenkins_user: jenkins + +# E.g. a generic_slave requires different tasks as a +# special slave including the gsm-tester +generic_slave: true diff --git a/ansible/roles/osmocom-jenkins-slave/files/gitconfig b/ansible/roles/osmocom-jenkins-slave/files/gitconfig new file mode 100644 index 00000000..aff4e559 --- /dev/null +++ b/ansible/roles/osmocom-jenkins-slave/files/gitconfig @@ -0,0 +1,3 @@ +[user] + email = jenkins@osmocom.org + name = Jenkins Builder diff --git a/ansible/roles/osmocom-jenkins-slave/files/jenkins.osmocom.org.pub b/ansible/roles/osmocom-jenkins-slave/files/jenkins.osmocom.org.pub new file mode 100644 index 00000000..e581f103 --- /dev/null +++ b/ansible/roles/osmocom-jenkins-slave/files/jenkins.osmocom.org.pub @@ -0,0 +1,2 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzO4QUn9kFMqNz40HAhVZR/7juHGTeqjkpZ3km+9zngJNkh4Oxds0rCSrvxIxdM2ZQpcKHbBt0X30o+Dk7428IlmG3VYZ5XBskl2XsjOJG8uXjAMzEOejnOr6poZtor7qgxLwcZT0R2RoGED49DSmPpEPcKZmcIGQVJXB/ifPJOpjTiyjMxXccc5tlKS5jqHSLhUBX0EpPxcuLc0v0QG14fNJ75KygF+xXCKJ8h2/f1JPQRupPD7ZhjMJo3KFzvRttQDoM9PdXdND70zWY7Ntdu9vsqRoO3IeyqtgNSly3wYlsZNcTBW0T2TFtnkvWjbdrV3Hl6h9c8WDzbwI4Lvt9 root@jenkins.osmocom.org +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC6pjj0xKkxAN9e76T3h8+4GYfHMQ9XojCc4PQ42uQbnlX3zn+KtAXeeGN4QTDOWGdxz1kyQ/FpM08AqmWW1QZ4wPJBEgDVSfpEX/motagxxTKlIsoeCYDEqEdT5qiY/W7gVaKj+WGEpiIrLHU18m0fouuHdclBy/MXwhMvIowEpOjVoEYvnyuMoagrCkzaFMdZbljmYJN/eyuJvx0Bus7Vy6p8m+xcRSgA4Fy+yVyrpPlZU7pksd+YLUDaYE2E5Y68ZdMwnOxToLV4RwOZB4sWozCeQ38pKKXFNSpLpNh/uDKEN5T8M+Ft8vfAj5OW5VnqsFW0TxnNE8qEZs8mBK/5ij9KF5p5kgJ8dmww0srZie1YdBg3wmJ6FBv+ti/wfWrpo2kp5iRxd52xuOBJQnFONoi2w9VuHDtG/ZxC12owTLXGUJVoQyLVfyYBG8zLj1Or28MWBLUyWt3YsB99jRt/i612AZ5eyW2SZVnRBF7KlGqf0thCnq/tQPtZKvQqenRaXDRm+/Sh7bm8fxBR1vA7LiUyQz84qzrmiECO15FrorKRR+3enuI+xHb1HFn2ZE19LrK/tXzz3DYcUlhPRVzRpxncf8frX9QnA5d2Ytij3bcoMK6RqXFsRg5JMNBcbk4Uvdf479nfb6QLe3AUEtuSN2LaGS//eMmCfBCIpjvPWQ== osmocom-build diff --git a/ansible/roles/osmocom-jenkins-slave/tasks/debian.yml b/ansible/roles/osmocom-jenkins-slave/tasks/debian.yml new file mode 100644 index 00000000..a1f85745 --- /dev/null +++ b/ansible/roles/osmocom-jenkins-slave/tasks/debian.yml @@ -0,0 +1,39 @@ +--- + +- name: install jenkins utilities + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - htop + - virt-manager + - qemu + - qemu-user-static + - qemu-system-arm + - proot + - debootstrap + - fakeroot + +- name: enable backports for jessie + apt_repository: + repo: 'deb http://ftp.debian.org/debian jessie-backports main' + filename: 'backports' + update_cache: yes + +- name: install java for jessie + apt: + name: openjdk-8-jre-headless + cache_valid_time: 3600 + update_cache: yes + default_release: jessie-backports + when: ansible_distribution == 'Debian' and ansible_distribution_release == 'jessie' + +- name: install java for stretch + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - openjdk-8-jre-headless + when: ansible_distribution == 'Debian' and ansible_distribution_release == 'stretch' diff --git a/ansible/roles/osmocom-jenkins-slave/tasks/generic-slave.yml b/ansible/roles/osmocom-jenkins-slave/tasks/generic-slave.yml new file mode 100644 index 00000000..6c50754d --- /dev/null +++ b/ansible/roles/osmocom-jenkins-slave/tasks/generic-slave.yml @@ -0,0 +1,15 @@ +--- + +- name: chown /usr/local/ to the jenkins user + file: + path: /usr/local/ + recurse: yes + group: "{{ jenkins_user }}" + mode: "2775" + +- name: set jenkins user bin to osmo-ci + file: + src: "/home/{{ jenkins_user }}/osmo-ci/scripts" + dest: "/home/{{ jenkins_user }}/bin" + state: link + force: yes diff --git a/ansible/roles/osmocom-jenkins-slave/tasks/main.yml b/ansible/roles/osmocom-jenkins-slave/tasks/main.yml new file mode 100644 index 00000000..dc2e843d --- /dev/null +++ b/ansible/roles/osmocom-jenkins-slave/tasks/main.yml @@ -0,0 +1,102 @@ +--- + +- name: install jenkins packages + include: debian.yml + when: ansible_distribution == 'Debian' + +- name: install build utilities + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - asciidoc + - autoconf + - automake + - bc + - bison + - coccinelle + - cppcheck + - debhelper + - devscripts + - dh-autoreconf + - dh-systemd + - doxygen + - flex + - g++ + - gawk + - gcc + - gcc-arm-none-eabi + - git + - git-buildpackage + - libtool + - libboost-all-dev + - make + - mscgen + - osc + - pkgconf + - python-minimal + - python-setuptools + - python3 + - python3-setuptools + - stow + - texinfo + +- name: install build dependencies and libraries + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - libc-ares-dev + - libdbd-sqlite3 + - libdbi-dev + - libffi-dev + - libffi-dev + - libfftw3-dev + - libgmp-dev + - libgnutls28-dev + - libgps-dev + - libgsm1-dev + - libmnl-dev + - libncurses5-dev + - libortp-dev + - libpcap-dev + - libpcsclite-dev + - libreadline-dev + - libsctp-dev + - libsigsegv-dev + - libsnmp-dev + - libsofia-sip-ua-glib-dev + - libsqlite3-dev + - libssl-dev + - libsystemd-dev + - libtalloc-dev + - libusb-1.0-0-dev + - libusb-dev + - libzmq3-dev + - sqlite3 + - libboost-dev + - libuhd-dev + +- name: add user jenkins + user: + name: "{{ jenkins_user }}" + generate_ssh_key: yes + ssh_key_bits: 4096 + ssh_key_type: rsa + shell: /bin/bash + +- name: setup jenkins ssh key + authorized_key: + user: "{{ jenkins_user }}" + key: "{{ lookup('file', 'jenkins.osmocom.org.pub') }}" + +- name: include generic slave + include: generic-slave.yml + when: generic_slave + +- name: copy .gitconfig + copy: + src: gitconfig + dest: "/home/{{ jenkins_user }}/.gitconfig" diff --git a/ansible/setup-gsm-tester.md b/ansible/setup-gsm-tester.md new file mode 100644 index 00000000..47c479a9 --- /dev/null +++ b/ansible/setup-gsm-tester.md @@ -0,0 +1,21 @@ +# Setup the osmo-gsm-tester + +The playbook `setup-gsm-tester.yml` setup a full working osmo-gsm-tester. + +# Requirements + +The remote host needs to be added to the `hosts` file under the section `osmo-gsm-tester`. +It also needs to install python and have the **contrib non-free** repositories enabled in `/etc/apt/sources.list`. + +## 3rd party firmware + +To have the non-free gobi firmware installed, those files must be placed +files/gobi/UQCN.mbn +files/gobi/amss.mbn +files/gobi/apps.mbn + + +# Steps after the playbook ran + +The jenkins user needs to know the ssh-keys of all BTS which get accessed via ssh. +E.g. the gsm-tester is connecting to a sysmobts via ssh. diff --git a/ansible/setup-gsm-tester.yml b/ansible/setup-gsm-tester.yml new file mode 100644 index 00000000..8232102c --- /dev/null +++ b/ansible/setup-gsm-tester.yml @@ -0,0 +1,39 @@ +--- +- name: setup osmo-gsm-tester apu + hosts: gsm-tester + user: root + tasks: + - name: install common utilities + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - vim + - tmux + - screen + - ca-certificates + - wget + - curl + roles: + - name: gsm-tester + # how many modems are connected via a quadmodem? + gsm_modems: 4 + tags: + - gsm-tester + + - name: gsm-tester-modems + tags: + - gsm-tester + - gsm-tester-modems + + - name: gsm-tester-network + bts_interface: enp2s0 + tags: + - gsm-tester + + - name: osmocom-jenkins-slave + jenkins_user: jenkins + generic_slave: false + tags: + - jenkins-slave diff --git a/ansible/setup-jenkins-slave.yml b/ansible/setup-jenkins-slave.yml new file mode 100644 index 00000000..5963f6e9 --- /dev/null +++ b/ansible/setup-jenkins-slave.yml @@ -0,0 +1,35 @@ +--- +- name: setup jenkins slaves + hosts: jenkins-slaves + user: root + tasks: + - name: install common utilities + apt: + name: "{{ item }}" + cache_valid_time: 3600 + update_cache: yes + with_items: + - vim + - tmux + - screen + - ca-certificates + roles: + - name: docker + jenkins_user: osmocom-build + tags: + - docker + + - name: install-poky-sdk + jenkins_user: osmocom-build + tags: + - poky + + - name: osmocom-jenkins-slave + jenkins_user: osmocom-build + generic_slave: true + tags: + - jenkins-slave + + - name: install-coverity + tags: + - coverity