Ubuntu 20.04 LTS Focal Fossaszerver telepítése
Czakó Krisztián
- https://releases.ubuntu.com/20.04/
- "Server install image"
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.
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.
- Indítás után "Boot Ubuntu installer" választása
- Nyelv: "English"
- Lehetne magyar, de a telepítéskor és rendszer-üzemeltetéskor ezt kerülni szoktam. Desktopra kiváló.
- 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.
- Billentyűzet
- Layout: Hungarian (állítsd arra, ami a valós billentyűzeted)
- Variant: Hungarian (szintén)
- Hálózat
- Válaszd ki azt a csatolót, amin keresztül látod a netet. Nekem ez az ens33.
- A beállítás a telepítésnél jó DHCP-n ha van DHCP szervered. Ha nincs, állítsd be kézzel.
- Proxy: ha van/kell, értelemszerűen add meg!
- Mirror address: válassz egy hozzád közelit (azt javasolja automatikusan).
- Idáig kellett a gyári telepítő.
- Válts át egy másik terminálra: ALT-F2
- Állíts be jelszót az ubuntu-server felhasználónak!
- passwd
- Nézd meg az IP címet!
- networkctl list
- networkctl status ens33
- mkdir ~/.ssh
- ssh-add -L > ~/.ssh/authorized_keys
Ez segít, hogy ha megszakad a kapcsolat a telepítést ne kelljen újrakezdeni.
- tmux
- sudo -i
- export http_proxy=http://192.168.2.1:8888/
- export https_proxy=$http_proxy
- export SRVNAME="srv01"
- export DOMAIN="devopsakademia.lan"
- export MAC=$(cat /sys/class/net/ens33/address)
- export IFACE="lan0"
- export IP="192.168.7.200/24"
- export GW="192.168.7.2"
- export DNS="192.168.7.2"
- export TZAREA="Europe"
- export TZNAME="Budapest"
- export LANGUAGES="en hu"
- export DEFAULT_LOCALE="C.UTF-8"
- export BOOT="UEFI" # or BOOT="MBR"
- if [ $BOOT == "UEFI" ] ; then export PARTTYPE="EF00" ; \
- else PARTTYPE="EF02" ; fi
- lsblk
- export DISKS="sda sdb sdc sdd"
- 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)
- export RAID="raidz2"
- export POOL="${SRVNAME}pool"
A telepítő ezt tartalmazza, azt használom:
- source /etc/os-release
- export ID
- export VERSION_CODENAME
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:
- export KERNEL="linux-image-generic"
- apt update
- apt -y install zfsutils-linux zfs-zed spl
- for disk in ${DISKS} ; do
- sgdisk -Z \
- -n9:-8M:0 -t9:bf07 -c9:${disk}9-Reserved \
- -n1:1M:+512M -t1:${PARTTYPE} -c1:${disk}1-${BOOT} \
- -n2:0:0 -t2:bf01 -c2:${disk}2-zfs /dev/${disk}
- done
- lsblk
- mkdir -p /target
- PARTS=$(for disk in ${DISKS} ; do echo -n "/dev/${disk}2 " ; done)
- zpool create -f \
- -o ashift=12 \
- -O atime=off \
- -O canmount=off \
- -O compression=lz4 \
- -O normalization=formD \
- -O mountpoint=/ \
- -R /target ${POOL} ${RAID} ${PARTS}
- zpool status
- zfs create -o canmount=off \
- -o mountpoint=none \
- ${POOL}/ROOT
- zfs create -o canmount=noauto \
- -o mountpoint=/ \
- -o exec=on \
- -o setuid=on \
- -o devices=on \
- ${POOL}/ROOT/${ID}
- zfs mount ${POOL}/ROOT/${ID}
- zpool set bootfs=${POOL}/ROOT/${ID} ${POOL}
- mount -t zfs
- zfs set exec=off ${POOL}
- zfs set setuid=off ${POOL}
- zfs set devices=off ${POOL}
- zfs create -o canmount=off ${POOL}/var
- zfs create -o canmount=off ${POOL}/var/lib
- zfs create ${POOL}/var/lib/apt
- zfs create -o exec=on ${POOL}/var/lib/dpkg
- zfs create ${POOL}/var/log
- zfs create -o com.sun:auto-snapshot=false ${POOL}/var/tmp
- zfs create -o com.sun:auto-snapshot=false ${POOL}/var/cache
- zfs create -o com.sun:auto-snapshot=false ${POOL}/var/cache/apt
- zfs create ${POOL}/var/spool
- zfs create ${POOL}/var/mail
- zfs create -o com.sun:auto-snapshot=false -o exec=on ${POOL}/tmp
- zfs create -o exec=on ${POOL}/root
- zfs create -o mountpoint=/home ${POOL}/home
- zfs create -o mountpoint=/srv ${POOL}/srv
- zfs list
- chmod 1777 /target/tmp
- chmod 1777 /target/var/tmp
- apt -y install debootstrap
- debootstrap ${VERSION_CODENAME} /target
- echo ${SRVNAME} > /target/etc/hostname
- echo "127.0.1.1 ${SRVNAME}.${DOMAIN} ${SRVNAME}" >> /target/etc/hosts
- cat <<EOF > /target/etc/systemd/network/10-persistent-net.link
- [Match]
- MACAddress=${MAC}
- [Link]
- Name=${IFACE}
- EOF
- cat <<EOF > /target/etc/netplan/00-lan-config.yaml
- network:
- version: 2
- renderer: networkd
- ethernets:
- ${IFACE}:
- dhcp4: no
- dhcp6: no
- addresses: [${IP}]
- gateway4: ${GW}
- nameservers:
- addresses: [${DNS}]
- search: [${DOMAIN}]
- EOF
- grep '^deb http' /etc/apt/sources.list > /target/etc/apt/sources.list
- mount --rbind /dev /target/dev
- mount --rbind /proc /target/proc
- mount --rbind /sys /target/sys
- chroot /target /bin/bash
- apt update
- apt -y full-upgrade
- debconf-set-selections <<EOF
- locales locales/default_environment_locale select ${DEFAULT_LOCALE}
- debconf debconf/priority select critical
- debconf debconf/frontend select Noninteractive
- tzdata tzdata/Areas select ${TZAREA}
- tzdata tzdata/Zones/${TZAREA} select ${TZNAME}
- EOF
- apt -y install $(for language in ${LANGUAGES} ; \
- do echo language-pack-${language} ; done)
- echo "${TZAREA}/${TZNAME}" > /etc/timezone
- ln -sf /usr/share/zoneinfo/${TZAREA}/${TZNAME} /etc/localtime
- update-locale ${DEFAULT_LOCALE}
- apt -y install --no-install-recommends ${KERNEL}
Pl:
- apt -y install firmware-realtek
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).
- apt -y install gdisk dosfstools zfsutils-linux zfs-zed zfs-initramfs spl rsync
- for disk in ${DISKS} ; do
- mkdosfs -F 32 -n UEFI-${disk^^} /dev/${disk}1
- done
- mkdir /boot/efi
- disk1=$(echo $DISKS | cut -d' ' -f1)
- echo PARTUUID=$(blkid -s PARTUUID -o value /dev/disk/by-partlabel/${disk1}1-UEFI) /boot/efi vfat defaults 0 1 >> /etc/fstab
- mount /boot/efi
- apt -y install grub-efi
- grub-probe /
- update-initramfs -c -k all
- update-grub
- grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --recheck --no-floppy
- DISKS2=$(echo ${DISKS} | cut -d' ' -f 2-)
- for disk in ${DISKS2} ; do
- mount /dev/${disk}1 /mnt
- rsync -a /boot/efi/ /mnt/
- umount /mnt
- done
- 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
- mkswap /dev/zvol/${POOL}/swap
- echo /dev/zvol/${POOL}/swap none swap defaults 0 0 >> /etc/fstab
- zfs set quota=1G ${POOL}/tmp
- zfs set quota=11G ${POOL}/var
- zfs set quota=2G ${POOL}/var/cache
- zfs set quota=1G ${POOL}/var/cache/apt
- zfs set quota=512M ${POOL}/var/lib/apt
- zfs set quota=512M ${POOL}/var/lib/dpkg
- zfs set quota=5G ${POOL}/var/log
- zfs set quota=1G ${POOL}/var/mail
- zfs set quota=1G ${POOL}/var/spool
- zfs set quota=1G ${POOL}/var/tmp
- zfs set quota=10G ${POOL}/home
- zfs set refreservation=2G ${POOL}/ROOT/${ID}
- zfs set reservation=10G ${POOL}/ROOT
- zfs set refquota=5G ${POOL}/ROOT/${ID}
- zfs set refreservation=1G ${POOL}/root
- zfs set reservation=3G ${POOL}/var
- zfs set reservation=1G ${POOL}/var/lib
- zfs set reservation=1G ${POOL}/var/log
- zfs set acltype=posixacl ${POOL}
- for file in /etc/logrotate.d/* ; do
- if grep -Eq "(^|[^#y])compress" "$file" ; then
- sed -i -r "s/(^|[^#y])(compress)/\1#\2/" "$file"
- fi
- done
- passwd root
- apt -y install ssh
- exit
Az elején az SSH kulcsot betettem, ezt könnyen fel tudom most használni:
- mkdir /target/root/.ssh
- cat /home/ubuntu-server/.ssh/authorized_keys > /target/root/.ssh/authorized_keys
- umount -Rfl /target/boot/efi
- umount -Rfl /target/dev
- umount -Rfl /target/sys
- umount -Rfl /target/proc
- zpool export ${POOL}
- systemctl reboot