-
Notifications
You must be signed in to change notification settings - Fork 0
/
Vagrantfile
126 lines (105 loc) · 4.25 KB
/
Vagrantfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
# -*- mode: ruby -*-
# vi: set ft=ruby :
#Параметры для создания базы данных
dbname="test_bd"
user="test_user"
password="test_passwd"
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
# Базовый образ
# config.vm.box = "archlinux/archlinux"
config.vm.box = "./images/Arch-Linux-x86_64-virtualbox.box"
# Название хоста
config.vm.hostname = "Doplom"
config.vm.define "Doplom"
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
# config.vm.box_check_update = false
# Открываем порт 9000 только для локальных запросов
config.vm.network "forwarded_port", guest: 3128, host: 3128
config.vm.network "forwarded_port", guest: 9000, host: 9000, host_ip: "127.0.0.1"
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
# config.vm.synced_folder "../data", "/vagrant_data"
# Выдаём больше памяти
config.vm.provider "virtualbox" do |vb|
vb.memory = "2024"
end
#
# View the documentation for the provider you are using for more
# information on available options.
# Обновление системы
config.vm.provision "shell", inline: <<-SHELL
pacman -Sy
pacman -S archlinux-keyring --noconfirm
pacman -Su gcc-go postgresql squid openssl git base-devel clamav dnscrypt-proxy --noconfirm
yes | pacman -Scc
SHELL
# Синхронизация каталога репозитория с виртуальной машиной
config.vm.synced_folder ".", "/app"
#Сборка прогарммы
config.vm.provision "shell", inline: <<-SHELL
cd /app/
go mod download
go mod tidy
go build -compiler=gccgo main.go
SHELL
# Инициализация базы данных
config.vm.provision "shell", inline: <<-SHELL
sudo -u postgres initdb -E UTF8 -D /var/lib/postgres/data
systemctl start postgresql.service
sudo -u postgres psql --command "CREATE USER #{user} WITH PASSWORD '#{password}';"
sudo -u postgres createdb -O #{user} #{dbname}
systemctl enable postgresql.service --now
SHELL
# Создадим юнит сервера
config.vm.provision "shell", inline: <<-SHELL
echo "[Unit]
Description=Управляющий сервер doplom
[Service]
WorkingDirectory=/app
Type=simple
ExecStart=/app/main
[Install]
WantedBy=multi-user.target" > /etc/systemd/system/doplom.service
systemctl daemon-reload
systemctl enable doplom.service --now
SHELL
#Собираем e2guardian
config.vm.provision "shell", inline: <<-SHELL
mkdir /tmp/e2guardian
cd /tmp/e2guardian/
echo "[Unit]
Description=E2guardian web filtering
After=network.target
[Service]
Type=forking
ExecStart=/usr/bin/e2guardian
[Install]
WantedBy=multi-user.target" > /tmp/e2guardian/e2guardian.service
echo "post_install() {
chown -R nobody:nobody /var/log/e2guardian
}" > /tmp/e2guardian/e2guardian.install
cp /app/e2guardian_PKGBUILD /tmp/e2guardian/PKGBUILD
chown vagrant:vagrant -R /tmp/e2guardian/
sudo -u vagrant makepkg
pacman -U e2guardian*.pkg.tar.zst --noconfirm
SHELL
# Делаем копии конфигурации
config.vm.provision "shell", inline: <<-SHELL
cp /etc/e2guardian/e2guardian.conf /etc/e2guardian/e2guardian.conf.old
cp /etc/squid/squid.conf /etc/squid/squid.conf.old
cp /etc/clamav/freshclam.conf /etc/clamav/freshclam.conf.old
cp /etc/e2guardian/contentscanners/clamdscan.conf /etc/e2guardian/contentscanners/clamdscan.conf.old
cp /etc/dnscrypt-proxy/dnscrypt-proxy.toml /etc/dnscrypt-proxy/dnscrypt-proxy.toml.old
SHELL
config.vm.provision "shell", inline: <<-SHELL
sed -i 's|database.clamav.net|https://packages.microsoft.com/clamav/|g' /etc/clamav/freshclam.conf
freshclam
SHELL
end