224 lines
5.3 KiB
Bash
Executable File
224 lines
5.3 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# System dependencies installation
|
|
#
|
|
|
|
install_system_dependencies() {
|
|
log_info "Installing system dependencies..."
|
|
|
|
# Update package lists
|
|
log_info "Updating package lists..."
|
|
apt-get update -qq
|
|
|
|
# Install base tools
|
|
log_info "Installing base build tools..."
|
|
apt-get install -y \
|
|
build-essential \
|
|
curl \
|
|
wget \
|
|
git \
|
|
ca-certificates \
|
|
gnupg \
|
|
lsb-release \
|
|
jq \
|
|
uuid-runtime \
|
|
net-tools \
|
|
iproute2 \
|
|
systemd \
|
|
chrony \
|
|
ufw \
|
|
sudo
|
|
|
|
# Install Go
|
|
install_go
|
|
|
|
# Install Node.js
|
|
install_nodejs
|
|
|
|
# Install PostgreSQL
|
|
install_postgresql
|
|
|
|
# Install storage tools
|
|
install_storage_tools
|
|
|
|
# Install tape tools
|
|
install_tape_tools
|
|
|
|
# Install SCST prerequisites
|
|
install_scst_prerequisites
|
|
|
|
# Install file sharing services
|
|
install_file_sharing_services
|
|
|
|
# Install antivirus
|
|
install_antivirus
|
|
|
|
log_info "✓ System dependencies installed"
|
|
}
|
|
|
|
install_go() {
|
|
if command_exists go; then
|
|
local installed_ver=$(get_installed_version go)
|
|
log_info "Go already installed: $installed_ver"
|
|
return 0
|
|
fi
|
|
|
|
log_info "Installing Go 1.22..."
|
|
local GO_VERSION="1.22.0"
|
|
local GO_ARCH="linux-amd64"
|
|
|
|
cd /tmp
|
|
wget -q "https://go.dev/dl/go${GO_VERSION}.${GO_ARCH}.tar.gz"
|
|
rm -rf /usr/local/go
|
|
tar -C /usr/local -xzf "go${GO_VERSION}.${GO_ARCH}.tar.gz"
|
|
rm "go${GO_VERSION}.${GO_ARCH}.tar.gz"
|
|
|
|
# Add to PATH
|
|
if ! grep -q "/usr/local/go/bin" /etc/profile; then
|
|
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
|
|
fi
|
|
export PATH=$PATH:/usr/local/go/bin
|
|
|
|
log_info "✓ Go installed"
|
|
}
|
|
|
|
install_nodejs() {
|
|
if command_exists node; then
|
|
local installed_ver=$(get_installed_version node)
|
|
log_info "Node.js already installed: $installed_ver"
|
|
return 0
|
|
fi
|
|
|
|
log_info "Installing Node.js 20.x LTS..."
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
|
|
apt-get install -y nodejs
|
|
|
|
# Install pnpm
|
|
if ! command_exists pnpm; then
|
|
npm install -g pnpm
|
|
fi
|
|
|
|
log_info "✓ Node.js and pnpm installed"
|
|
}
|
|
|
|
install_postgresql() {
|
|
if command_exists psql; then
|
|
local installed_ver=$(get_installed_version psql)
|
|
log_info "PostgreSQL already installed: $installed_ver"
|
|
systemctl start postgresql || true
|
|
return 0
|
|
fi
|
|
|
|
log_info "Installing PostgreSQL..."
|
|
apt-get install -y \
|
|
postgresql \
|
|
postgresql-contrib \
|
|
libpq-dev
|
|
|
|
systemctl enable postgresql
|
|
systemctl start postgresql
|
|
|
|
wait_for_service postgresql
|
|
|
|
log_info "✓ PostgreSQL installed and started"
|
|
}
|
|
|
|
install_storage_tools() {
|
|
log_info "Installing storage tools..."
|
|
apt-get install -y \
|
|
lvm2 \
|
|
xfsprogs \
|
|
thin-provisioning-tools \
|
|
smartmontools \
|
|
nvme-cli \
|
|
parted \
|
|
gdisk
|
|
|
|
log_info "✓ Storage tools installed"
|
|
}
|
|
|
|
install_tape_tools() {
|
|
log_info "Installing tape tools..."
|
|
apt-get install -y \
|
|
lsscsi \
|
|
sg3-utils \
|
|
mt-st \
|
|
mtx
|
|
|
|
log_info "✓ Tape tools installed"
|
|
}
|
|
|
|
install_scst_prerequisites() {
|
|
log_info "Installing SCST prerequisites..."
|
|
apt-get install -y \
|
|
dkms \
|
|
linux-headers-$(uname -r) \
|
|
build-essential
|
|
|
|
log_info "✓ SCST prerequisites installed"
|
|
}
|
|
|
|
install_file_sharing_services() {
|
|
log_info "Installing file sharing services (NFS and SMB)..."
|
|
|
|
# Install NFS server
|
|
if ! systemctl is-active --quiet nfs-server 2>/dev/null; then
|
|
log_info "Installing NFS server..."
|
|
apt-get install -y \
|
|
nfs-kernel-server \
|
|
nfs-common
|
|
|
|
# Enable NFS services
|
|
systemctl enable nfs-server || true
|
|
systemctl enable rpcbind || true
|
|
|
|
log_info "✓ NFS server installed"
|
|
else
|
|
log_info "NFS server already installed"
|
|
fi
|
|
|
|
# Install Samba (SMB/CIFS)
|
|
if ! systemctl is-active --quiet smbd 2>/dev/null; then
|
|
log_info "Installing Samba (SMB/CIFS)..."
|
|
apt-get install -y \
|
|
samba \
|
|
samba-common-bin
|
|
|
|
# Enable Samba services
|
|
systemctl enable smbd || true
|
|
systemctl enable nmbd || true
|
|
|
|
log_info "✓ Samba installed"
|
|
else
|
|
log_info "Samba already installed"
|
|
fi
|
|
}
|
|
|
|
install_antivirus() {
|
|
log_info "Installing ClamAV antivirus..."
|
|
|
|
if ! command_exists clamscan; then
|
|
apt-get install -y \
|
|
clamav \
|
|
clamav-daemon \
|
|
clamav-freshclam \
|
|
clamav-unofficial-sigs || {
|
|
log_warn "ClamAV installation failed"
|
|
return 1
|
|
}
|
|
|
|
# Update virus definitions
|
|
log_info "Updating ClamAV virus definitions (this may take a while)..."
|
|
freshclam || log_warn "Virus definition update failed, will update on first service start"
|
|
|
|
# Enable ClamAV daemon
|
|
systemctl enable clamav-daemon || true
|
|
systemctl enable clamav-freshclam || true
|
|
|
|
log_info "✓ ClamAV installed"
|
|
else
|
|
log_info "ClamAV already installed"
|
|
fi
|
|
}
|
|
|