From af256190a9f67dc93e5703a46288204b14e5d92d Mon Sep 17 00:00:00 2001 From: jbenicek Date: Wed, 2 Jul 2025 17:31:50 +0200 Subject: [PATCH] created --- install.sh | 149 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 install.sh diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..4edb39f --- /dev/null +++ b/install.sh @@ -0,0 +1,149 @@ +#!/bin/bash +set -euo pipefail + +### === Uživatelské proměnné === ### +DISK1="/dev/sdX" # např. /dev/sda nebo /dev/nvme0n1 +DISK2="/dev/sdY" # např. /dev/sdb nebo /dev/nvme1n1 +HOSTNAME="zfs-server" +ZFS_POOL="rpool" +ZFS_BOOTFS="ubuntu-noble" +ZBM_VERSION="2.4.0" +MOUNTPOINT="/mnt" +UBUNTU_SUITE="noble" +TIMEZONE="Europe/Prague" +LOCALE="cs_CZ.UTF-8" +KEYMAP="cz" +DEBIAN_MIRROR="http://cz.archive.ubuntu.com/ubuntu" +### ============================ ### + +ZFS_OPTS_POOL="-o ashift=12 -o autotrim=on" +ZFS_OPTS_DATASETS="-O acltype=posixacl -O xattr=sa -O compression=zstd -O relatime=on -O normalization=formD -O dnodesize=auto -O atime=off -O mountpoint=none -O canmount=off" + +echo "== Čištění disků ==" +for DISK in "$DISK1" "$DISK2"; do + sgdisk --zap-all "$DISK" + dd if=/dev/zero of="$DISK" bs=512 count=2048 + wipefs -a "$DISK" +done + +echo "== Vytváření GPT tabulky a oddílů ==" +for DISK in "$DISK1" "$DISK2"; do + sgdisk -n1:1M:+1G -t1:EF00 -c1:"EFI System Partition" "$DISK" + sgdisk -n2:0:0 -t2:BF00 -c2:"ZFS root" "$DISK" +done + +PART1_DISK1=$(ls ${DISK1}* | grep -E "${DISK1}p?1$") +PART1_DISK2=$(ls ${DISK2}* | grep -E "${DISK2}p?1$") +PART2_DISK1=$(ls ${DISK1}* | grep -E "${DISK1}p?2$") +PART2_DISK2=$(ls ${DISK2}* | grep -E "${DISK2}p?2$") + +echo "== Formátování EFI oddílů ==" +mkfs.vfat -F32 -n EFI "$PART1_DISK1" +mkfs.vfat -F32 -n EFI "$PART1_DISK2" + +echo "== Vytváření ZFS poolu ($ZFS_POOL) ==" +zpool create -f $ZFS_OPTS_POOL $ZFS_OPTS_DATASETS \ + -R "$MOUNTPOINT" \ + "$ZFS_POOL" mirror "$PART2_DISK1" "$PART2_DISK2" + +zfs create "$ZFS_POOL/ROOT" +zfs create -o mountpoint=/ "$ZFS_POOL/ROOT/$ZFS_BOOTFS" +zfs create -o mountpoint=/home "$ZFS_POOL/home" +zfs create -o mountpoint=/var "$ZFS_POOL/var" +zfs create -o mountpoint=/var/log "$ZFS_POOL/var/log" +zfs create -o mountpoint=/var/tmp "$ZFS_POOL/var/tmp" +zfs create -o mountpoint=/var/cache "$ZFS_POOL/var/cache" +zfs create -o mountpoint=/var/lib "$ZFS_POOL/var/lib" +zfs create -o mountpoint=/srv "$ZFS_POOL/srv" +zfs create -o mountpoint=/tmp "$ZFS_POOL/tmp" + +zfs set canmount=noauto "$ZFS_POOL/ROOT/$ZFS_BOOTFS" +zfs mount "$ZFS_POOL/ROOT/$ZFS_BOOTFS" + +mkdir -p "$MOUNTPOINT"/{boot/efi,home,var/log,var/tmp,var/cache,var/lib,srv,tmp} + +echo "== Montování EFI oddílů ==" +mount "$PART1_DISK1" "$MOUNTPOINT/boot/efi" + +echo "== Bootstrap Ubuntu base systému ==" +debootstrap --components=main,universe --arch=amd64 "$UBUNTU_SUITE" "$MOUNTPOINT" "$DEBIAN_MIRROR" + +echo "== Příprava chroot prostředí ==" +mount --rbind /dev "$MOUNTPOINT/dev" +mount --rbind /proc "$MOUNTPOINT/proc" +mount --rbind /sys "$MOUNTPOINT/sys" +cp /etc/resolv.conf "$MOUNTPOINT/etc/" + +cat < "$MOUNTPOINT/root/post-chroot.sh" +#!/bin/bash +set -e + +export HOSTNAME="$HOSTNAME" +export ZFS_POOL="$ZFS_POOL" +export ZFS_BOOTFS="$ZFS_BOOTFS" +export TIMEZONE="$TIMEZONE" +export LOCALE="$LOCALE" +export KEYMAP="$KEYMAP" +export ZBM_VERSION="$ZBM_VERSION" + +echo "\$HOSTNAME" > /etc/hostname +ln -sf /usr/share/zoneinfo/\$TIMEZONE /etc/localtime + +apt update +apt install -y locales keyboard-configuration console-setup + +sed -i "s/# \$LOCALE UTF-8/\$LOCALE UTF-8/" /etc/locale.gen +locale-gen +update-locale LANG=\$LOCALE +echo "KEYMAP=\$KEYMAP" > /etc/vconsole.conf + +apt install -y linux-image-generic zfs-initramfs zfsutils-linux zfs-zed \ + dosfstools grub-efi-amd64 shim-signed efibootmgr curl + +zfs set canmount=noauto \$ZFS_POOL/ROOT/\$ZFS_BOOTFS +zfs mount \$ZFS_POOL/ROOT/\$ZFS_BOOTFS +zfs set mountpoint=/ \$ZFS_POOL/ROOT/\$ZFS_BOOTFS +zpool set bootfs=\$ZFS_POOL/ROOT/\$ZFS_BOOTFS \$ZFS_POOL + +useradd -m -s /bin/bash ubuntu +echo "ubuntu:ubuntu" | chpasswd +adduser ubuntu sudo +echo "⚠️ Výchozí heslo pro uživatele 'ubuntu' je 'ubuntu'. Změň ho po restartu." + +echo "== Instalace GRUB na oba disky ==" +grub-install --target=x86_64-efi --efi-directory=/boot/efi \ + --removable --recheck --bootloader-id=ubuntu +update-grub + +echo "== Instalace ZFSBootMenu (volitelný fallback) ==" +mkdir -p /boot/efi/EFI/ZBM +curl -L https://github.com/zbm-dev/zfsbootmenu/releases/download/v\$ZBM_VERSION/zfsbootmenu-efi-\$ZBM_VERSION-x86_64.EFI -o /boot/efi/EFI/ZBM/ZBM.EFI + +cat <> /etc/grub.d/40_custom + +menuentry "ZFSBootMenu" { + insmod part_gpt + insmod fat + insmod chain + search --no-floppy --label EFI --set=root + chainloader /EFI/ZBM/ZBM.EFI +} +GRUBENTRY + +update-grub + +echo "== Hotovo. Nyní spusť: exit && umount a export poolu" +EOF + +chmod +x "$MOUNTPOINT/root/post-chroot.sh" + +echo +echo "==========================" +echo "✅ Chroot a konfigurace:" +echo "sudo chroot $MOUNTPOINT /bin/bash" +echo "/root/post-chroot.sh" +echo +echo "Poté ukonči chroot a spusť:" +echo "umount -l $MOUNTPOINT/dev $MOUNTPOINT/proc $MOUNTPOINT/sys $MOUNTPOINT/boot/efi" +echo "zpool export $ZFS_POOL" +echo "==========================" \ No newline at end of file