Ubuntu 20.04 LTS Focal Fossaszerver telepítése

56min

Czakó Krisztián

Telepítés előkészítése

Telepítő letöltése

  1. https://releases.ubuntu.com/20.04/
    1. "Server install image"

Telepítő indítása

A gyári telepítőt csak arra használom, hogy kapjak egy parancssort. Bár az elmúlt kiadások során jelentős ráncfelvarrást kapott, profi telepítésre csak akkor alkalmas, ha ext4, XFS vagy btrfs fájlrendszert szeretnél hagyományos szoftveres- vagy hardveres RAID környezetben. Én ZFS-t szeretnék, amit a szerver telepítő nem támogat.

Alap beállítások

Ahhoz, hogy a gyári telepítőt a céljaimra fel tudjam használni az első pár lépést végig kell csinálni. A rendszerem UEFI boot módban van. A hagyományos módot nem javaslom mai hardvereken.

  1. Indítás után "Boot Ubuntu installer" választása
    1. Nyelv: "English"
      1. Lehetne magyar, de a telepítéskor és rendszer-üzemeltetéskor ezt kerülni szoktam. Desktopra kiváló.
    2. Felajánlja a telepítő frissítését. Nem valószínű, hogy számunkra van jelentősége, de bajt nem okoz, így frissítem.
    3. Billentyűzet
      1. Layout: Hungarian (állítsd arra, ami a valós billentyűzeted)
      2. Variant: Hungarian (szintén)
    4. Hálózat
      1. Válaszd ki azt a csatolót, amin keresztül látod a netet. Nekem ez az ens33.
      2. A beállítás a telepítésnél jó DHCP-n ha van DHCP szervered. Ha nincs, állítsd be kézzel.
    5. Proxy: ha van/kell, értelemszerűen add meg!
    6. Mirror address: válassz egy hozzád közelit (azt javasolja automatikusan).
  2. Idáig kellett a gyári telepítő.

Parancssori telepítés előkészítése

Ezt egyszerűbb távolról, SSH-val csinálni (tudom másolni a parancsokat).

  1. Válts át egy másik terminálra: ALT-F2
  2. Állíts be jelszót az ubuntu-server felhasználónak!
    1. passwd
  3. Nézd meg az IP címet!
    1. networkctl list
    2. networkctl status ens33

Lépj be távolról!

Egyszerűsítsd a további belépéseket!

  1. mkdir ~/.ssh
  2. ssh-add -L > ~/.ssh/authorized_keys

Indíts tmux-ot vagy screen-t!

Ez segít, hogy ha megszakad a kapcsolat a telepítést ne kelljen újrakezdeni.

  1. tmux

Innen root-ként dolgozunk

  1. sudo -i

Ha kell proxy, állítsd be!

  1. export http_proxy=http://192.168.2.1:8888/
  2. export https_proxy=$http_proxy

Telepítés paramétereinek beállítása

Hálózat

  1. export SRVNAME="srv01"
  2. export DOMAIN="devopsakademia.lan"
  3. export MAC=$(cat /sys/class/net/ens33/address)
  4. export IFACE="lan0"
  5. export IP="192.168.7.200/24"
  6. export GW="192.168.7.2"
  7. export DNS="192.168.7.2"

Időzóna beállítása

  1. export TZAREA="Europe"
  2. export TZNAME="Budapest"

Nyelvi támogatás beállítása

  1. export LANGUAGES="en hu"
  2. export DEFAULT_LOCALE="C.UTF-8"

BIOS vagy UEFI boot?

  1. export BOOT="UEFI" # or BOOT="MBR"
  2. if  [ $BOOT == "UEFI" ] ; then export PARTTYPE="EF00" ; \
  3. else PARTTYPE="EF02" ; fi

Diszkek és RAID

Diszkek felsorolása

  1. lsblk
  2. export DISKS="sda sdb sdc sdd"

RAID beállítása

Lehetőségek

  • mirror
    • hagyományos tükör (min. 1 diszk, kapacitás 1 diszk, működik mindaddig, míg van működő diszk)
  • raidz1
    • ez valójában RAID5 (min. 3 diszk, 1 hibáját bírja ki, kapacitás n-1)
  • raidz2
    • ez valójában RAID6 (min. 4 diszk, 2 hibáját bírja ki, kapacitás n-2)
  • raidz3
    • ez még egy szinttel több (min. 5 diszk, 3 hibáját bírja ki, kapacitás n-3)

RAID mód beállítása

  1. export RAID="raidz2"

ZFS pool neve

  1. export POOL="${SRVNAME}pool"

Disztribúció és verzió beállítása

A telepítő ezt tartalmazza, azt használom:

  1. source /etc/os-release
  2. export ID
  3. export VERSION_CODENAME

Kernel kiválasztása

Több lehetőséged van a környezettől függően:

  • linux-image-generic
  • linux-image-aws
  • linux-image-azure
  • linux-image-gcp
  • linux-image-gke
  • linux-image-virtual
  • linux-image-extra-virtual

Fizikai gépen a generic a logikus:

  1. export KERNEL="linux-image-generic"

ZFS létrehozása

ZFS telepítése

Frissítsd a csomagokat!

  1. apt update

Tedd fel a ZFS-t!

  1. apt -y install zfsutils-linux zfs-zed spl

Diszk partícionálása

  1. for disk in ${DISKS} ; do
  2.   sgdisk -Z \
  3.     -n9:-8M:0 -t9:bf07 -c9:${disk}9-Reserved \
  4.     -n1:1M:+512M -t1:${PARTTYPE} -c1:${disk}1-${BOOT} \
  5.     -n2:0:0 -t2:bf01 -c2:${disk}2-zfs /dev/${disk}
  6. done
  7. lsblk

Kell egy könyvtár, ahová csatolod a ZFS-t, amire telepítesz

  1. mkdir -p /target

Fájlrendszer elkészítése

Hozd létre a ZFS-t!

  1. PARTS=$(for disk in ${DISKS} ; do echo -n "/dev/${disk}2 " ; done)
  2. zpool create -f \
  3.   -o ashift=12 \
  4.   -O atime=off \
  5.   -O canmount=off \
  6.   -O compression=lz4 \
  7.   -O normalization=formD \
  8.   -O mountpoint=/ \
  9.   -R /target ${POOL} ${RAID} ${PARTS}
  10. zpool status

Hozz létre a rendszer gyökérnek (/) egy dataset-et teljesen elkülönítve!

  1. zfs create -o canmount=off \
  2.            -o mountpoint=none \
  3.            ${POOL}/ROOT
  4. zfs create -o canmount=noauto \
  5.            -o mountpoint=/ \
  6.            -o exec=on \
  7.            -o setuid=on \
  8.            -o devices=on \
  9.            ${POOL}/ROOT/${ID}
  10. zfs mount ${POOL}/ROOT/${ID}
  11. zpool set bootfs=${POOL}/ROOT/${ID} ${POOL}
  12. mount -t zfs

Kapcsold ki a ZFS pool-on a felesleges jogokat!

  1. zfs set exec=off ${POOL}
  2. zfs set setuid=off ${POOL}
  3. zfs set devices=off ${POOL}

Hozd létre a rendszer dataset-eket, hogy elkülönítsd a különböző dolgokat!

  1. zfs create -o canmount=off ${POOL}/var
  2. zfs create -o canmount=off ${POOL}/var/lib
  3. zfs create ${POOL}/var/lib/apt
  4. zfs create -o exec=on ${POOL}/var/lib/dpkg
  5. zfs create ${POOL}/var/log
  6. zfs create -o com.sun:auto-snapshot=false ${POOL}/var/tmp
  7. zfs create -o com.sun:auto-snapshot=false ${POOL}/var/cache
  8. zfs create -o com.sun:auto-snapshot=false ${POOL}/var/cache/apt
  9. zfs create ${POOL}/var/spool
  10. zfs create ${POOL}/var/mail
  11. zfs create -o com.sun:auto-snapshot=false -o exec=on ${POOL}/tmp
  12. zfs create -o exec=on ${POOL}/root
  13. zfs create -o mountpoint=/home ${POOL}/home
  14. zfs create -o mountpoint=/srv ${POOL}/srv
  15. zfs list

Állítsd be a tmp könyvtárak jogát!

  1. chmod 1777 /target/tmp
  2. chmod 1777 /target/var/tmp

Telepítés

Alaprendszer telepítése

  1. apt -y install debootstrap
  2. debootstrap ${VERSION_CODENAME} /target

Alaprendszer beállítása

Állítsd be a hálózatot!

  1. echo ${SRVNAME} > /target/etc/hostname
  2. echo "127.0.1.1 ${SRVNAME}.${DOMAIN} ${SRVNAME}" >> /target/etc/hosts
  3. cat <<EOF > /target/etc/systemd/network/10-persistent-net.link
  4. [Match]
  5. MACAddress=${MAC}
  6. [Link]
  7. Name=${IFACE}
  8. EOF
  9. cat <<EOF > /target/etc/netplan/00-lan-config.yaml
  10. network:
  11.   version: 2
  12.   renderer: networkd
  13.   ethernets:
  14.     ${IFACE}:
  15.       dhcp4: no
  16.       dhcp6: no
  17.       addresses: [${IP}]
  18.       gateway4: ${GW}
  19.       nameservers:
  20.         addresses: [${DNS}]
  21.         search: [${DOMAIN}]
  22. EOF

Állítsd be az apt forrásokat!

  1. grep '^deb http' /etc/apt/sources.list > /target/etc/apt/sources.list

Beállítások a telepített alaprendszeren belül

Készítsd elő a telepített környezetet, hogy chroot-al lehessen használni!

  1. mount --rbind /dev  /target/dev
  2. mount --rbind /proc /target/proc
  3. mount --rbind /sys  /target/sys

Lépj be a telepített környezetbe chroot-al!

  1. chroot /target /bin/bash

Frissítsd a telepített rendszert!

  1. apt update
  2. apt -y full-upgrade

Időzóna és nyelvi támogatás

  1. debconf-set-selections <<EOF
  2. locales locales/default_environment_locale select ${DEFAULT_LOCALE}
  3. debconf debconf/priority select critical
  4. debconf debconf/frontend select Noninteractive
  5. tzdata tzdata/Areas select ${TZAREA}
  6. tzdata tzdata/Zones/${TZAREA} select ${TZNAME}
  7. EOF
  8. apt -y install $(for language in ${LANGUAGES} ; \
  9. do echo language-pack-${language} ; done)
  10. echo "${TZAREA}/${TZNAME}" > /etc/timezone
  11. ln -sf /usr/share/zoneinfo/${TZAREA}/${TZNAME} /etc/localtime
  12. update-locale ${DEFAULT_LOCALE}

Kernel telepítése

  1. apt -y install --no-install-recommends ${KERNEL}

Ha kell firmware, azt is tedd fel!

Pl:

  1. apt -y install firmware-realtek

Alapvető programok telepítése

Szükséged van a ZFS alkalmazásokra. Ezen felül ha van más, ami biztosan kell, az itt jöhet. Vagy később bármikor. A dosfstools elengedhetetlen, ha UEFI boot-ot használsz. Én felteszem még a gdisk-et is (ha particionálni kell jól jön), valamint az rsync-et (hatékony fájlmásoló, fogom használni).

  1. apt -y install gdisk dosfstools zfsutils-linux zfs-zed zfs-initramfs spl rsync

GRUB telepítése

  1. for disk in ${DISKS} ; do
  2.   mkdosfs -F 32 -n UEFI-${disk^^} /dev/${disk}1
  3. done
  4. mkdir /boot/efi
  5. disk1=$(echo $DISKS | cut -d' ' -f1)
  6. echo PARTUUID=$(blkid -s PARTUUID -o value /dev/disk/by-partlabel/${disk1}1-UEFI) /boot/efi vfat defaults 0 1 >> /etc/fstab
  7. mount /boot/efi
  8. apt -y install grub-efi
  9. grub-probe /
  10. update-initramfs -c -k all
  11. update-grub
  12. grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck --no-floppy
  13. DISKS2=$(echo ${DISKS} | cut -d' ' -f 2-)
  14. for disk in ${DISKS2} ; do
  15.   mount /dev/${disk}1 /mnt
  16.   rsync -a /boot/efi/ /mnt/
  17.   umount /mnt
  18. done

Swap létrehozása

  1. zfs create -V 4G -b $(getconf PAGESIZE) \-o compression=zle \-o logbias=throughput \-o sync=always \-o primarycache=metadata \-o secondarycache=none \-o com.sun:auto-snapshot=false \${POOL}/swap
  2. mkswap /dev/zvol/${POOL}/swap
  3. echo /dev/zvol/${POOL}/swap none swap defaults 0 0 >> /etc/fstab

ZFS dataset quota beállítása

  1. zfs set quota=1G ${POOL}/tmp
  2. zfs set quota=11G ${POOL}/var
  3. zfs set quota=2G ${POOL}/var/cache
  4. zfs set quota=1G ${POOL}/var/cache/apt
  5. zfs set quota=512M ${POOL}/var/lib/apt
  6. zfs set quota=512M ${POOL}/var/lib/dpkg
  7. zfs set quota=5G ${POOL}/var/log
  8. zfs set quota=1G ${POOL}/var/mail
  9. zfs set quota=1G ${POOL}/var/spool
  10. zfs set quota=1G ${POOL}/var/tmp
  11. zfs set quota=10G ${POOL}/home
  12. zfs set refreservation=2G ${POOL}/ROOT/${ID}
  13. zfs set reservation=10G ${POOL}/ROOT
  14. zfs set refquota=5G ${POOL}/ROOT/${ID}
  15. zfs set refreservation=1G ${POOL}/root
  16. zfs set reservation=3G ${POOL}/var
  17. zfs set reservation=1G ${POOL}/var/lib
  18. zfs set reservation=1G ${POOL}/var/log

POSIX ACL bekapcsolása

  1. zfs set acltype=posixacl ${POOL}

Logrotate-ben a fájlok tömörítésének kikapcsolása

  1. for file in /etc/logrotate.d/* ; do
  2.     if grep -Eq "(^|[^#y])compress" "$file" ; then
  3.         sed -i -r "s/(^|[^#y])(compress)/\1#\2/" "$file"
  4.     fi
  5. done

root jelszó beállítása

  1. passwd root

SSH telepítése

  1. apt -y install ssh

Befejezés

Lépj ki a chroot környezetből!

  1. exit

Engedélyezd, hogy root-ként SSH kulccsal be tudj majd lépni!

Az elején az SSH kulcsot betettem, ezt könnyen fel tudom most használni:

  1. mkdir /target/root/.ssh
  2. cat /home/ubuntu-server/.ssh/authorized_keys > /target/root/.ssh/authorized_keys

Válaszd le a fájlrendszereket!

  1. umount -Rfl /target/boot/efi
  2. umount -Rfl /target/dev
  3. umount -Rfl /target/sys
  4. umount -Rfl /target/proc
  5. zpool export ${POOL}

Indítsd újra a szervert!

  1. systemctl reboot