proxmox-rockpi/proxmox_rockpi_install.sh

169 lines
No EOL
5.1 KiB
Bash

#!/bin/bash
# Prerequisites check
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
# Check if running on Debian
if [ ! -f /etc/debian_version ]; then
echo "This script requires a Debian-based system"
exit 1
fi
# Define variables - MODIFY THESE AS NEEDED
TARGET=/dev/mmcblk0 # Your SD card device
MOUNT_POINT=/mnt
IP_ADDRESS=192.168.0.2 # Your desired IP
GATEWAY=192.168.0.1 # Your network gateway
HOSTNAME="pve" # Your desired hostname
TIMEZONE="Europe/London" # Modify to your timezone
# Install required dependencies
apt update
apt install -y btrfs-progs dosfstools debootstrap qemu-user-static
# Clean the target device
echo "Cleaning target device ${TARGET}..."
dd if=/dev/zero of=${TARGET} bs=1M count=8
# Create partition table
echo "Creating partition table..."
(
echo g # Create GPT partition table
echo n # New partition
echo # Default partition number (1)
echo # Default first sector
echo +512M # Boot partition size
echo t # Change partition type
echo 1 # EFI System
echo n # New partition
echo # Default partition number (2)
echo # Default first sector
echo # Use remaining space
echo w # Write changes
) | fdisk ${TARGET}
# Format partitions
echo "Formatting partitions..."
mkfs.fat -F32 ${TARGET}p1
mkfs.btrfs -f ${TARGET}p2
# Create and mount btrfs subvolumes
echo "Setting up btrfs subvolumes..."
mount -o compress=zstd ${TARGET}p2 ${MOUNT_POINT}
btrfs subvolume create ${MOUNT_POINT}/@
btrfs subvolume create ${MOUNT_POINT}/@home
btrfs subvolume create ${MOUNT_POINT}/@root
umount ${MOUNT_POINT}
# Mount all partitions
echo "Mounting filesystems..."
mount -o defaults,compress=zstd,subvol=@ ${TARGET}p2 ${MOUNT_POINT}
mkdir -p ${MOUNT_POINT}/home
mount -o defaults,compress=zstd,subvol=@home ${TARGET}p2 ${MOUNT_POINT}/home
mkdir -p ${MOUNT_POINT}/root
mount -o defaults,compress=zstd,subvol=@root ${TARGET}p2 ${MOUNT_POINT}/root
mkdir -p ${MOUNT_POINT}/boot/efi
mount ${TARGET}p1 ${MOUNT_POINT}/boot/efi
# Debootstrap
echo "Running first stage debootstrap..."
debootstrap --arch=arm64 --foreign --components=main,non-free,contrib \
--include=locales bullseye ${MOUNT_POINT} \
https://mirrors.tuna.tsinghua.edu.cn/debian
# Second stage
echo "Preparing for second stage debootstrap..."
cp /usr/bin/qemu-aarch64-static ${MOUNT_POINT}/usr/bin/
LANG=C.UTF-8 chroot ${MOUNT_POINT} /usr/bin/qemu-aarch64-static /bin/bash -c "/debootstrap/debootstrap --second-stage"
# Configure fstab
echo "Configuring fstab..."
cat > ${MOUNT_POINT}/etc/fstab << EOF
UUID=$(blkid -s UUID -o value ${TARGET}p2) / btrfs defaults,compress=zstd,subvol=@ 0 0
UUID=$(blkid -s UUID -o value ${TARGET}p2) /home btrfs defaults,compress=zstd,subvol=@home 0 0
UUID=$(blkid -s UUID -o value ${TARGET}p2) /root btrfs defaults,compress=zstd,subvol=@root 0 0
UUID=$(blkid -s UUID -o value ${TARGET}p1) /boot/efi vfat defaults 1 2
EOF
# Configure networking
echo "Configuring network..."
cat > ${MOUNT_POINT}/etc/network/interfaces << EOF
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address ${IP_ADDRESS}/24
gateway ${GATEWAY}
EOF
# Set hostname
echo ${HOSTNAME} > ${MOUNT_POINT}/etc/hostname
echo "${IP_ADDRESS} ${HOSTNAME} ${HOSTNAME}.local" >> ${MOUNT_POINT}/etc/hosts
# Enter chroot environment
echo "Entering chroot environment..."
for i in /dev /dev/pts /proc /sys /run; do
mount -B $i ${MOUNT_POINT}$i
done
# Chroot operations
cat > ${MOUNT_POINT}/chroot-setup.sh << 'EOF'
#!/bin/bash
# Configure locale and timezone
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
echo 'LANG="en_US.UTF-8"' > /etc/default/locale
dpkg-reconfigure -f noninteractive locales
update-locale LANG=en_US.UTF-8
# Install required packages
apt update
apt install -y grub-efi linux-image-arm64 openssh-server sudo haveged \
zram-tools tmux bash-completion armbian-bsp-cli-rockpi-4b dialog \
armbian-firmware linux-image-current-rockchip64 \
linux-dtb-current-rockchip64 linux-u-boot-rockpi-4b-current \
wpasupplicant btrfs-progs
# Install Proxmox
apt install -y proxmox-ve pve-kernel-helper ifupdown2 openvswitch-switch
# Configure bootloader
KERNEL=$(ls /boot/vmlinuz-* | sort -V | tail -n1 | sed 's/\/boot\/vmlinuz-//')
echo "Setting up boot for kernel ${KERNEL}..."
# Initialize Proxmox boot tool
proxmox-boot-tool init
# Clean up
apt clean
EOF
chmod +x ${MOUNT_POINT}/chroot-setup.sh
LANG=C.UTF-8 chroot ${MOUNT_POINT} /usr/bin/qemu-aarch64-static /bin/bash /chroot-setup.sh
# Cleanup and unmount
echo "Cleaning up..."
rm ${MOUNT_POINT}/usr/bin/qemu-aarch64-static
rm ${MOUNT_POINT}/chroot-setup.sh
sync
umount -R ${MOUNT_POINT}
echo "Installation complete. Please configure U-Boot as follows:"
cat << 'EOF'
In U-Boot console:
env default -f -a
setenv fdtover_addr_r 0x01fc0000
setenv fdtoverfile rockchip/overlay/rockchip-spi-jedec-nor.dtbo
saveenv
load mmc 0:1 $fdt_addr_r /dtb/$fdtfile
load mmc 0:1 $fdtover_addr_r /dtb/$fdtoverfile
load mmc 0:1 $kernel_addr_r /EFI/BOOT/BOOTAA64.EFI
fdt addr $fdt_addr_r
fdt resize 80000
fdt apply $fdtover_addr_r
bootefi $kernel_addr_r $fdt_addr_r
EOF