1# -*- mode: ruby -*-
2# vi: set ft=ruby :
3
4#
5# original script by maximilian.huber@tngtech.com
6# additions by bruno.cornec@hpe.com michael.c.jaeger@siemens.com
7#
8# SPDX-License-Identifier: GPL-2.0
9#
10# this script starts a VM in order to run project builder inside
11# for development and debugging
12#
13
14#
15# std vagrant setup
16#
17Vagrant.configure("2") do |config|
18  config.vm.box = "centos/7"
19
20  config.vm.provider "virtualbox" do |vbox|
21    vbox.customize ["modifyvm", :id, "--memory", "3072"]
22    vbox.customize ["modifyvm", :id, "--cpus", "2"]
23  end
24
25  config.vm.synced_folder "..", "/home/vagrant/prj/fossology", type: "rsync"
26  config.vm.synced_folder "../target", "/home/vagrant/repo", type: "rsync", create: true
27  config.vm.network "forwarded_port", guest: 80, host: 8082
28
29#
30# part to prepare dependencies
31#
32  config.vm.provision "shell" do |s|
33    s.inline = <<SCRIPT
34set -ex
35
36yum install -y wget git
37
38# install EPEL
39wget https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
40rpm -Uvh epel-release-7-11.noarch.rpm
41
42# install projectbuilder
43wget http://ftp.project-builder.org/test/centos/7/x86_64/pb-test.repo
44cp pb-test.repo /etc/yum.repos.d/
45
46# not using gpg checking is not recommended
47# yum update -y --nogpgcheck
48# yum install -y project-builder --nogpgcheck
49yum update -y
50
51# installs for projectbuilder
52yum install -y project-builder subversion perl-ExtUtils-MakeMaker createrepo
53
54# Fix a Fedora-26 issue
55cat >> /etc/pb/pb.conf << EOF
56osupd fedora-26 = sudo /usr/bin/dnf makecache; sudo /usr/bin/dnf -y update
57EOF
58
59# adding docker install info for prepping the project builder installation runs
60cat > /etc/yum.repos.d/docker.repo << EOF
61[dockerrepo]
62name=Docker Repository
63baseurl=https://yum.dockerproject.org/repo/main/centos/7
64enabled=1
65gpgcheck=1
66gpgkey=https://yum.dockerproject.org/gpg
67EOF
68
69# ... then installing docker
70yum install -y docker-engine
71
72# some modification of docker settings to run under user vagrant
73sed -i 's/dockerd$/dockerd -G vagrant/' /usr/lib/systemd/system/docker.service
74systemctl daemon-reload
75
76# ... starting docker
77systemctl start docker
78
79# ... installing composer things
80# cd /home/vagrant/prj/fossology
81mkdir -p /home/vagrant/composer/
82/home/vagrant/prj/fossology/utils/install_composer.sh /home/vagrant/composer/
83mkdir -p /home/vagrant/prj/fossology/src/vendor
84chown vagrant:vagrant /home/vagrant/prj/fossology/src/vendor
85
86# preparing the transfer of the packages by ssh
87ssh-keygen -t rsa -N "" -q -f /home/vagrant/.ssh/id_rsa
88chown vagrant:vagrant /home/vagrant/.ssh/id_rsa
89chown vagrant:vagrant /home/vagrant/.ssh/id_rsa.pub
90cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys
91chmod 600 /home/vagrant/.ssh/authorized_keys
92mkdir -p /home/vagrant/repo
93chown vagrant:vagrant /home/vagrant/repo
94
95SCRIPT
96  end
97
98#
99# checking out and preparing project builder
100# note that triple backslashes are because of cat and vagrant escaping
101#
102  config.vm.provision "shell" do |s|
103    s.privileged = false
104    s.inline = <<SCRIPT
105sudo chown vagrant:vagrant ~/prj
106git config --global user.email "you@example.com"
107git config --global user.name "Your Name"
108
109set -ex
110
111################################################################################
112# configure pb
113cat<<PBRC > $HOME/.pbrc
114
115pbdefdir default = \\\$ENV{HOME}/cache-project-builder
116pbstoponerr default = true
117
118# you need to swith depending on how you checked out fossology.git
119pburl fossology = git+ssh://git@github.com:fossology/fossology.git
120#pburl fossology = git+https://github.com/fossology/fossology.git
121pbconfurl fossology = git+ssh://git@github.com:fossology/fossology.git
122#pbconfurl fossology = git+https://github.com/fossology/fossology.git
123
124pbdefdir fossology = \\\$ENV{'HOME'}/prj
125pbconfdir fossology = \\\$ENV{'HOME'}/prj/fossology/pbconf
126
127pburl pb = svn://svn.project-builder.org/pb
128pbdefdir pb = \\\$ENV{'HOME'}
129pbconfurl pb = svn://svn.project-builder.org/pb/pbconf
130pbconfdir pb = \\\$ENV{'HOME'}/pb/pbconf
131
132sshhost fossology = localhost
133sshlogin fossology = vagrant
134sshdir fossology = /home/vagrant/repo
135sshport fossology = 22
136
137PBRC
138
139################################################################################
140# docker based generation here
141
142# maybe not all of the distros are relevant
143# DISTRO_LIST="ubuntu-16.04-x86_64 ubuntu-16.10-x86_64 ubuntu-17.04-x86_64 debian-8-x86_64 debian-9-x86_64 fedora-25-x86_64 fedora-26-x86_64 centos-6-x86_64 centos-7-x86_64 mageia-6-x86_64 opensuse-42.2-x86_64 opensuse-42.3-x86_64"
144DISTRO_LIST="centos-7-x86_64"
145
146# some logic for command line ops here
147#DISTRO=$1
148#DISTROVER=$2
149#if [ "_$DISTRO" != "_" ]; then
150#DISTRO_LIST=$DISTRO-$DISTROVER-x86_64
151#fi
152
153VELIST=`echo $DISTRO_LIST | sed 's/ /,/g'`
154
155# note that velist and vepath should be set to default , not only project builder ('pb')
156cat >> $HOME/.pbrc << EOF
157velist default = $VELIST
158velogin default = pb
159vepath default = /tmp
160vetype default = docker
161dockerrepository default = pb
162EOF
163
164# Setup repos
165pb -p pb -r 0.14.6 sbx2pkg2ins
166# useless, instead use sbx2prepve
167pb -p fossology sbx2build
168
169# the grand for loop for the different distros
170for DISTRO in $DISTRO_LIST; do
171NAME=`pbdistrocheck $DISTRO | grep -E '^Name:' | awk '{print $2}'`
172VER=`pbdistrocheck $DISTRO | grep -E '^Ver:' | awk '{print $2}'`
173ARCH=`pbdistrocheck $DISTRO | grep -E '^Arch:' | awk '{print $2}'`
174pb -p pb -m $DISTRO newve -i ${NAME}:$VER
175pb -p pb -m $DISTRO sbx2setupve
176pb -p fossology -m $DISTRO prepve
177pb -p fossology -m $DISTRO build2ve
178done
179
180################################################################################
181#sbx = sandbox
182
183# git checkout could be done here if need for overwrite is needed ...
184
185# Give the ref to where composer is on the VM
186# adding componser binary to path
187
188export PATH=/home/vagrant/composer/:$PATH
189
190# and provide the variable to the make file
191#export COMPOSER_PHAR=/home/vagrant/composer/composer
192
193# commands for single distro generation
194#pb -t -p fossology sbx2build   fossology
195#pb    -p fossology build2prep  fossology
196
197# actually, sbx2pkg is included in sbx2pkg2ins
198#pb -t -p fossology sbx2pkg     fossology
199#pb -t -p fossology sbx2pkg2ins fossology
200
201SCRIPT
202  end
203
204#
205# applying some work around for selinux
206#
207  config.vm.provision "shell" do |s|
208    s.privileged = false
209    s.inline = <<SCRIPT
210# todo disabling SELinux only at first start is needed but should be put in policies
211# remove if the https://github.com/fossology/fossology/issues/727
212sudo setenforce 0
213
214SCRIPT
215  end
216
217end
218