mirror of
https://github.com/kuhyx/testsAndMisc.git
synced 2026-11-10 22:47:02 +01:00
Eight libs from the largest script in linux_configuration: five in the first pass, then three of those carved again since they landed at 272, 292 and 277. Fixed three more unguarded cd /var/www/nextcloud calls, each right before an occ command - the installer would have run against whatever directory the caller was in. Third script with this bug. check_and_enable_services.sh is reverted and stays at 1337. Its SERVICE_STATUS array is declared once and written by every check_* function, so any lib holding them fails SC2034 alone. Fourth file deferred for shared state, and the clearest: the script is an accumulator, so there is no seam anywhere in it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011w2Pj4Ek3ZNMQVYcFHgXDY
183 lines
4.5 KiB
Bash
Executable File
183 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Package installation and the apt lock wait.
|
|
#
|
|
# Sourced by setup_nextcloud_raspberry.sh; split out to keep it under the 250-line
|
|
# cap. Sourced rather than run, so it inherits the caller's strict mode
|
|
# and the variables defined above the source line.
|
|
|
|
# =============================================================================
|
|
# PHASE 2: Configure Pi for Remote Access
|
|
# =============================================================================
|
|
|
|
wait_for_apt_lock() {
|
|
# Wait for any existing apt/dpkg processes to finish
|
|
local max_wait=600 # 10 minutes max
|
|
local waited=0
|
|
|
|
while fuser /var/lib/dpkg/lock-frontend /var/lib/apt/lists/lock /var/cache/apt/archives/lock >/dev/null 2>&1; do
|
|
if [[ $waited -eq 0 ]]; then
|
|
log_info "Waiting for other apt/dpkg processes to finish..."
|
|
log_info "Current apt processes:"
|
|
pgrep -a 'apt|dpkg' | head -5 >&2 || true
|
|
fi
|
|
sleep 5
|
|
waited=$((waited + 5))
|
|
if [[ $waited -ge $max_wait ]]; then
|
|
die "Timeout waiting for apt lock after ${max_wait}s"
|
|
fi
|
|
if [[ $((waited % 30)) -eq 0 ]]; then
|
|
log_info "Still waiting... (${waited}s elapsed)"
|
|
fi
|
|
done
|
|
|
|
if [[ $waited -gt 0 ]]; then
|
|
log_success "Apt lock acquired after ${waited}s"
|
|
fi
|
|
}
|
|
|
|
phase_configure() {
|
|
check_root
|
|
|
|
log_info "=== Phase 2: Configure Raspberry Pi for Remote Access ==="
|
|
|
|
# Wait for any existing apt processes
|
|
wait_for_apt_lock
|
|
|
|
# Fix any broken packages first
|
|
log_info "Fixing any broken packages..."
|
|
DEBIAN_FRONTEND=noninteractive dpkg --configure -a --force-confdef --force-confold || true
|
|
|
|
# Update system - use non-interactive mode and auto-accept config changes
|
|
log_info "Updating system packages..."
|
|
apt-get update
|
|
DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade -y
|
|
|
|
# Set timezone
|
|
log_info "Setting timezone to $PI_TIMEZONE..."
|
|
timedatectl set-timezone "$PI_TIMEZONE"
|
|
|
|
# Set locale
|
|
log_info "Configuring locale..."
|
|
sed -i "s/^# *$PI_LOCALE/$PI_LOCALE/" /etc/locale.gen
|
|
locale-gen
|
|
update-locale LANG="$PI_LOCALE"
|
|
|
|
# Configure SSH for security
|
|
log_info "Hardening SSH configuration..."
|
|
|
|
# Backup original config
|
|
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
|
|
|
|
# Apply security settings
|
|
cat >>/etc/ssh/sshd_config.d/hardening.conf <<'EOF'
|
|
# Security hardening
|
|
PermitRootLogin no
|
|
PasswordAuthentication yes
|
|
PubkeyAuthentication yes
|
|
X11Forwarding no
|
|
MaxAuthTries 3
|
|
ClientAliveInterval 300
|
|
ClientAliveCountMax 2
|
|
EOF
|
|
|
|
# Restart SSH
|
|
systemctl restart sshd
|
|
|
|
# Install useful packages
|
|
log_info "Installing useful packages..."
|
|
apt-get install -y \
|
|
vim \
|
|
htop \
|
|
curl \
|
|
wget \
|
|
git \
|
|
ufw \
|
|
fail2ban \
|
|
unattended-upgrades
|
|
|
|
# Configure firewall
|
|
log_info "Configuring firewall..."
|
|
ufw default deny incoming
|
|
ufw default allow outgoing
|
|
ufw allow ssh
|
|
ufw allow 80/tcp # HTTP
|
|
ufw allow 443/tcp # HTTPS
|
|
ufw --force enable
|
|
|
|
# Configure fail2ban
|
|
log_info "Configuring fail2ban..."
|
|
cat >/etc/fail2ban/jail.local <<'EOF'
|
|
[DEFAULT]
|
|
bantime = 1h
|
|
findtime = 10m
|
|
maxretry = 5
|
|
|
|
[sshd]
|
|
enabled = true
|
|
port = ssh
|
|
filter = sshd
|
|
logpath = /var/log/auth.log
|
|
maxretry = 3
|
|
EOF
|
|
|
|
systemctl enable fail2ban
|
|
systemctl restart fail2ban
|
|
|
|
# Enable automatic security updates
|
|
log_info "Enabling automatic security updates..."
|
|
cat >/etc/apt/apt.conf.d/50unattended-upgrades <<'EOF'
|
|
Unattended-Upgrade::Origins-Pattern {
|
|
"origin=Debian,codename=${distro_codename},label=Debian-Security";
|
|
"origin=Raspbian,codename=${distro_codename},label=Raspbian";
|
|
};
|
|
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
|
|
Unattended-Upgrade::Remove-Unused-Dependencies "true";
|
|
EOF
|
|
|
|
systemctl enable unattended-upgrades
|
|
|
|
# Display system info
|
|
log_info "System information:"
|
|
echo "Hostname: $(hostname)"
|
|
echo "IP Address: $(hostname -I | awk '{print $1}')"
|
|
echo "Kernel: $(uname -r)"
|
|
echo "Architecture: $(uname -m)"
|
|
|
|
log_success "Phase 2 complete!"
|
|
echo
|
|
log_info "Next step: Run 'sudo ./setup_nextcloud_raspberry.sh nextcloud' to install Nextcloud"
|
|
}
|
|
|
|
# =============================================================================
|
|
# PHASE 3: Install Nextcloud
|
|
# =============================================================================
|
|
|
|
install_nextcloud_dependencies() {
|
|
log_info "Installing Nextcloud dependencies..."
|
|
|
|
apt-get update
|
|
apt-get install -y \
|
|
apache2 \
|
|
mariadb-server \
|
|
libapache2-mod-php \
|
|
php \
|
|
php-gd \
|
|
php-mysql \
|
|
php-curl \
|
|
php-mbstring \
|
|
php-intl \
|
|
php-gmp \
|
|
php-bcmath \
|
|
php-xml \
|
|
php-zip \
|
|
php-imagick \
|
|
php-apcu \
|
|
php-redis \
|
|
redis-server \
|
|
unzip \
|
|
certbot \
|
|
python3-certbot-apache
|
|
|
|
log_success "Dependencies installed"
|
|
}
|