1
0
mirror of https://github.com/pgbackrest/pgbackrest.git synced 2024-12-12 10:04:14 +02:00
pgbackrest/test/Vagrantfile
David Steele f92ce674f7
Automatically create PostgreSQL version interfaces.
Maintaining the version interfaces was complicated by the fact that each interface needed to be in separate compilation unit to avoid type conflicts. This also meant that various build/test files needed to be updated to add the new interfaces.

Solve these problems by auto-generating all the interfaces into a single file. This is made possible by parsing defines and types out of the header files and creating macros to rename the types. At the end of the version interface everything is undef'd. Another benefit is that the auto-generated interfaces can be static and included directly into postgres/interface.c.

Since some code generation is now always required for tests, change --no-gen to --min-gen in test.pl.

It would also make sense to auto-generate the version defines in postgres/version.h, but that will be left for a future commit.
2022-06-06 13:52:56 -04:00

170 lines
8.9 KiB
Ruby

Vagrant.configure(2) do |config|
config.vm.provider :virtualbox do |vb|
vb.memory = 4096
vb.cpus = 8
end
# Increase disk size if the vagrant-disksize plugin is available. To install the plugin: vagrant plugin install vagrant-disksize
if Vagrant.has_plugin?('vagrant-disksize')
config.disksize.size = '64GB'
end
# Ubuntu 18.04
#
# Full development and test environment which should be used by default.
#-------------------------------------------------------------------------------------------------------------------------------
config.vm.define "default", primary: true do |default|
default.vm.box = "ubuntu/focal64"
default.vm.box_version = "20211007.0.0"
default.vm.provider :virtualbox do |vb|
vb.name = "pgbackrest-test"
end
# Provision the VM
default.vm.provision "shell", inline: <<-SHELL
#-----------------------------------------------------------------------------------------------------------------------
echo 'Build Begin' && date
# Suppress "dpkg-reconfigure: unable to re-open stdin: No file or directory" warning
export DEBIAN_FRONTEND=noninteractive
# Assign a host name
sed -i 's/^127\.0\.0\.1\t.*/127\.0\.0\.1\tlocalhost pgbackrest-test/' /etc/hosts
hostnamectl set-hostname pgbackrest-test
#-----------------------------------------------------------------------------------------------------------------------
echo 'Update Apt' && date
apt-get update
#-----------------------------------------------------------------------------------------------------------------------
echo 'Synchronize Date' && date
apt-get install -y ntpdate
ntpdate pool.ntp.org
#-----------------------------------------------------------------------------------------------------------------------
echo 'Use Google DNS' && date
echo 'supersede domain-name-servers 8.8.8.8;' >> /etc/dhcp/dhclient.conf
/etc/init.d/networking restart
# Set time sync settings so builds don't fail with clock skew errors. If a build does fail with "clock skew detected",
# rerun the following at the command line.
#-----------------------------------------------------------------------------------------------------------------------
echo 'Time Sync Settings' && date
sudo /etc/init.d/virtualbox-guest-utils stop
sudo /usr/sbin/VBoxService --timesync-set-on-restore --timesync-interval 5000 --timesync-set-threshold 1
# Create /tmp/pgbackrest and give ownership to root so we know unit tests are not writing there
#-----------------------------------------------------------------------------------------------------------------------
echo 'Create /tmp/pgbackrest owned by root' && date
sudo mkdir -p /tmp/pgbackrest
sudo chown root:root /tmp/pgbackrest
sudo chmod 700 /tmp/pgbackrest
# Mount tmpfs at /home/vagrant/test for faster testing
#-----------------------------------------------------------------------------------------------------------------------
echo 'Mount tmpfs' && date
sudo -u vagrant mkdir -p -m 770 /home/vagrant/test
echo 'tmpfs /home/vagrant/test tmpfs size=2560M 0 1' >> /etc/fstab
mount -a
#-----------------------------------------------------------------------------------------------------------------------
echo 'Install Perl Modules' && date
apt-get install -y libdbd-pg-perl libxml-checker-perl libyaml-perl
#-----------------------------------------------------------------------------------------------------------------------
echo 'Install Build Tools' && date
apt-get install -y devscripts build-essential lintian git cloc txt2man debhelper libssl-dev zlib1g-dev libperl-dev \
libxml2-dev liblz4-dev liblz4-tool libpq-dev lcov autoconf-archive zstd libzstd-dev bzip2 libbz2-dev pkg-config \
libyaml-dev libc6-dbg meson ccache
#-----------------------------------------------------------------------------------------------------------------------
echo 'Install Docker' && date
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker vagrant
#-----------------------------------------------------------------------------------------------------------------------
echo 'Install Dev Utilities' && date
apt-get install -y vim htop jq
#-----------------------------------------------------------------------------------------------------------------------
echo 'Build valgrind' && date
export VALGRIND=valgrind-3.17.0
wget -q -O - https://sourceware.org/pub/valgrind/${VALGRIND?}.tar.bz2 | tar jx -C /root
cd /root/${VALGRIND?}
./configure
make -j8 install
rm -rf /root/${VALGRIND?}
#-----------------------------------------------------------------------------------------------------------------------
# echo 'Install TeX Live' && date
# Not installed by default since latex is only needed for releases and PDF development/testing
# apt-get install -y --no-install-recommends texlive-latex-base texlive-latex-extra texlive-fonts-recommended
# apt-get install -y texlive-font-utils
#-----------------------------------------------------------------------------------------------------------------------
echo 'Build VM Images' && date
sudo su - vagrant -c '/home/vagrant/pgbackrest/test/test.pl --vm-build'
#-----------------------------------------------------------------------------------------------------------------------
echo 'Build End' && date
# Useful commands
#-----------------------------------------------------------------------------------------------------------------------
# Force remove all containers:
# docker rm -f $(docker ps -a -q)
# Force remove all images:
# docker rmi -f $(docker images -q)
SHELL
# Mount pgbackrest path for testing
default.vm.synced_folder "..", "/home/vagrant/pgbackrest"
end
# FreeBSD 12
#
# Basic environment to build pgBackRest.
#-------------------------------------------------------------------------------------------------------------------------------
config.vm.define "fb12", autostart: false do |fb12|
fb12.vm.box = "generic/freebsd12"
fb12.vm.box_version = "2.0.6"
fb12.vm.provider :virtualbox do |vb|
vb.name = "pgbackrest-test-fb12"
end
# Provision the VM
fb12.vm.provision "shell", inline: <<-SHELL
#-----------------------------------------------------------------------------------------------------------------------
echo 'Build Begin' && date
#-----------------------------------------------------------------------------------------------------------------------
echo 'Install Build Tools' && date
pkg install -y git postgresql-libpqxx pkgconf libxml2 gmake perl5 p5-YAML-LibYAML rsync
#-----------------------------------------------------------------------------------------------------------------------
echo 'Build End' && date
SHELL
end
# MacOS
#
# Basic environment to build/test pgBackRest using homebrew installed in the local user account.
#-------------------------------------------------------------------------------------------------------------------------------
# git clone --depth=1 https://github.com/Homebrew/brew ~/homebrew
# ~/homebrew/bin/brew install -q pkg-config openssl@1.1 libpq libxml2 libyaml cpanm lcov meson
# ~/homebrew/bin/cpanm --force --local-lib=~/homebrew/perl5 install YAML::XS XML::Checker::Parser
#
# export PATH="${HOME?}/homebrew/bin:$PATH"
# export LDFLAGS="-L${HOME?}/homebrew/opt/openssl@1.1/lib -L${HOME?}/homebrew/opt/libpq/lib -L${HOME?}/homebrew/opt/libxml2/lib"
# export LDFLAGS="${LDFLAGS?} -L${HOME?}/homebrew/opt/libyaml/lib"
# export CPPFLAGS="-I${HOME?}/homebrew/opt/openssl@1.1/include -I/${HOME?}/homebrew/opt/libpq/include"
# export CPPFLAGS="${CPPFLAGS?} -I${HOME?}/homebrew/opt/libxml2/include/libxml2 -I/${HOME?}/homebrew/opt/libyaml/include"
# export PERL5LIB=~/homebrew/perl5/lib/perl5"${PERL5LIB:+:${PERL5LIB}}"
# export PKG_CONFIG_PATH=~/homebrew/opt/libpq/lib/pkgconfig:~/homebrew/opt/openssl@1.1/lib/pkgconfig
# Don't share the default vagrant folder
config.vm.synced_folder ".", "/vagrant", disabled: true
end