136 lines
4.1 KiB
Bash
Executable File
136 lines
4.1 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# chroot-setup.sh — Runs inside the Alpine chroot to configure the system
|
|
# ---------------------------------------------------------------------------
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 1. APK repositories
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Configuring APK repositories"
|
|
cat > /etc/apk/repositories <<'EOF'
|
|
https://dl-cdn.alpinelinux.org/alpine/latest-stable/main
|
|
https://dl-cdn.alpinelinux.org/alpine/latest-stable/community
|
|
EOF
|
|
|
|
apk update
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 2. Install packages
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Installing packages"
|
|
apk add --no-cache \
|
|
linux-lts \
|
|
mkinitfs \
|
|
openrc \
|
|
busybox \
|
|
musl \
|
|
libc-utils \
|
|
util-linux \
|
|
e2fsprogs \
|
|
dosfstools \
|
|
btrfs-progs \
|
|
parted \
|
|
sfdisk \
|
|
openssh \
|
|
dhcpcd \
|
|
iproute2 \
|
|
iputils \
|
|
net-tools \
|
|
curl \
|
|
wget \
|
|
ca-certificates \
|
|
vim \
|
|
mc \
|
|
bind-tools \
|
|
nmap \
|
|
rsync \
|
|
alpine-conf
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 3. Generate initramfs
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Generating initramfs with mkinitfs"
|
|
mkinitfs $(ls /lib/modules/ | tail -1)
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 4. Network configuration
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Configuring network interfaces"
|
|
mkdir -p /etc/network
|
|
cat > /etc/network/interfaces <<'EOF'
|
|
auto lo
|
|
iface lo inet loopback
|
|
|
|
auto eth0
|
|
iface eth0 inet dhcp
|
|
EOF
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 5. SSH configuration
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Configuring sshd"
|
|
sed -i \
|
|
-e 's/^#*\s*PermitRootLogin.*/PermitRootLogin yes/' \
|
|
-e 's/^#*\s*PasswordAuthentication.*/PasswordAuthentication yes/' \
|
|
/etc/ssh/sshd_config
|
|
|
|
# Ensure the directives exist if sed found nothing to replace
|
|
grep -q '^PermitRootLogin' /etc/ssh/sshd_config || echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
|
|
grep -q '^PasswordAuthentication' /etc/ssh/sshd_config || echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config
|
|
|
|
echo "==> Generating SSH host keys"
|
|
ssh-keygen -A
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 6. Root password
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Setting root password"
|
|
echo "root:alpine" | chpasswd
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 7. Nebula OpenRC service
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Creating /etc/init.d/nebula"
|
|
cat > /etc/init.d/nebula <<'EOF'
|
|
#!/sbin/openrc-run
|
|
description="Nebula overlay network"
|
|
command="/usr/local/bin/nebula"
|
|
command_args="-config /etc/nebula/config.yml"
|
|
command_background=true
|
|
pidfile="/run/nebula.pid"
|
|
|
|
depend() {
|
|
need net
|
|
after networking
|
|
}
|
|
|
|
start_pre() {
|
|
checkpath -f -m 0600 -o root:root /run/nebula.pid
|
|
}
|
|
EOF
|
|
chmod +x /etc/init.d/nebula
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 8. OpenRC service enablement
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Enabling services"
|
|
rc-update add sshd default
|
|
rc-update add networking default
|
|
rc-update add nebula default
|
|
|
|
# Also ensure basic boot services are present
|
|
rc-update add devfs sysinit || true
|
|
rc-update add dmesg sysinit || true
|
|
rc-update add mdev sysinit || true
|
|
rc-update add hwdrivers sysinit || true
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# 9. Hostname
|
|
# ---------------------------------------------------------------------------
|
|
echo "==> Setting hostname to 'rescue'"
|
|
echo "rescue" > /etc/hostname
|
|
|
|
echo "==> chroot-setup.sh complete"
|