Wydrukuj tę dokumentację Pokaż jako slajdy

Klonowanie aktualnego systemu przed procesem upgrade

Dotyczy w szczególności podziału na partycje beadm. Warto wykonać clone obecnego systemu bazowego:

snapshot

_ver=`uname -r | tr '[:upper:]' '[:lower:]'`
zfs snapshot -r sys/bootenv/default@${_ver}

klonowanie

_rev=`uname -v | awk '{print $4}' | tr -d ':'`
zfs clone -o canmount=off -o setuid=on -o exec=on -o mountpoint=/ sys/bootenv/default@${_ver} sys/bootenv/${_ver}-${_rev}

for d in tmp usr usr/local usr/obj usr/src var
do
       zfs clone -o canmount=off -o setuid=on -o exec=on -o mountpoint=/${d} sys/bootenv/default/${d}@${_ver} sys/bootenv/${_ver}-${_rev}/${d}
done

promowanie

zfs promote sys/bootenv/${_ver}-${_rev}

for d in tmp usr usr/local usr/obj usr/src var
do
       zfs promote sys/bootenv/${_ver}-${_rev}/${d}
done

Aktualizacja systemu 13.x

/etc/make.conf

Pierwsza rzecz, to wgranie aktualnego /etc/make.conf (mojego rozbudowanego) oraz odpowiednie dostrojenie /etc/make/make.local.conf.

/etc/src.conf

Następnie wykonanie pliku odpowiedzialnego za kompilację systemu operacyjnego:

WITHOUT_BIND=           true
WITHOUT_APM=            true
WITHOUT_ATM=            true
WITHOUT_BLUETOOTH=      true
WITHOUT_BSNMP=          true
WITHOUT_FLOPPY=         true
WITHOUT_GSSAPI=         true
WITHOUT_IPX=            true
WITHOUT_LPR=            true
WITHOUT_KERBEROS=       true
WITHOUT_SENDMAIL=       true
WITHOUT_NETGRAPH=       true
WITHOUT_NIS=            true
WITHOUT_OPENSSH=        true
WITHOUT_PPP=            true
WITHOUT_WIRELESS=       true
WITHOUT_RCMDS=          true
WITHOUT_NTP=            true
WITHOUT_UNBOUND=        true

WITH_BSD_GREP=          true
WITH_CLANG=             true
WITH_CLANG_FULL=        true
WITH_NAND=              true
WITH_PKGTOOLS=          true

Trzeba pamiętać, aby nie wyłączać mailwrappera (WITHOUT_MAILWRAPPER), bo jest przydatny do podmiany sendmaila na postfixa albo ssmtp albo coś innego.

Tworzenie własnego kernela

COMMON13

Pełna konfiguracja (na podstawie serwerka domowego):

ident           GOMMON13

#makeoptions    DEBUG=-g                # Build kernel with gdb(1) debug symbols

options         SCHED_ULE               # ULE scheduler
options         NUMA                    # Non-Uniform Memory Architecture support
options         PREEMPTION              # Enable kernel thread preemption
options         VIMAGE                  # Subsystem virtualization, e.g. VNET
options         INET                    # InterNETworking
options         INET6                   # IPv6 communications protocols
options         TCP_OFFLOAD             # TCP offload
options         TCP_BLACKBOX            # Enhanced TCP event logging
options         TCP_HHOOK               # hhook(9) framework for TCP
options         TCP_RFC7413             # TCP Fast Open
options         SCTP                    # Stream Control Transmission Protocol
options         KERN_TLS                # TLS transmit & receive offload
options         FFS                     # Berkeley Fast Filesystem
options         SOFTUPDATES             # Enable FFS soft updates support
options         UFS_ACL                 # Support for access control lists
options         UFS_DIRHASH             # Improve performance on big directories
options         UFS_GJOURNAL            # Enable gjournal-based UFS journaling
options         MD_ROOT                 # MD is a potential root device
options         MSDOSFS                 # MSDOS Filesystem
options         CD9660                  # ISO 9660 Filesystem
options         PROCFS                  # Process filesystem (requires PSEUDOFS)
options         PSEUDOFS                # Pseudo-filesystem framework
options         GEOM_LABEL              # Provides labelization
options         EFIRT                   # EFI Runtime Services support
options         SCSI_DELAY=5000         # Delay (in ms) before probing SCSI
options         KTRACE                  # ktrace(1) support
options         STACK                   # stack(9) support
options         SYSVSHM                 # SYSV-style shared memory
options         SYSVMSG                 # SYSV-style message queues
options         SYSVSEM                 # SYSV-style semaphores
options         _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options         PRINTF_BUFR_SIZE=128    # Prevent printf output being interspersed.
options         KBD_INSTALL_CDEV        # install a CDEV entry in /dev
options         HWPMC_HOOKS             # Necessary kernel hooks for hwpmc(4)
options         AUDIT                   # Security event auditing
options         CAPABILITY_MODE         # Capsicum capability mode
options         CAPABILITIES            # Capsicum capabilities
options         MAC                     # TrustedBSD MAC Framework
options         INCLUDE_CONFIG_FILE     # Include this file in kernel
options         RACCT                   # Resource accounting framework
options         RACCT_DEFAULT_TO_DISABLED # Set kern.racct.enable=0 by default
options         RCTL                    # Resource limits
options         KDB                     # Kernel debugger related code
options         KDB_TRACE               # Print a stack trace for a panic
options         EKCD                    # Support for encrypted kernel dumps
options         GZIO                    # gzip-compressed kernel and user dumps
options         ZSTDIO                  # zstd-compressed kernel and user dumps
options         NETDUMP                 # netdump(4) client support
options         SMP                     # Symmetric MultiProcessor Kernel
options         EARLY_AP_STARTUP
device          cpufreq
device          acpi
device          pci
device          scbus           # SCSI bus (required for ATA/SCSI)
device          ch              # SCSI media changers
device          da              # Direct Access (disks)
device          sa              # Sequential Access (tape etc)
device          cd              # CD
device          pass            # Passthrough device (direct ATA/SCSI access)
device          ses             # Enclosure Services (SES and SAF-TE)
device          atkbdc          # AT keyboard controller
device          atkbd           # AT keyboard
device          psm             # PS/2 mouse
device          vga             # VGA video card driver
options         VESA            # Add support for VESA BIOS Extensions (VBE)
device          splash          # Splash screen and screen saver support
device          sc              # syscons
options         SC_PIXEL_MODE   # add support for the raster text mode
device          agp             # support several AGP chipsets
device          uart            # Generic UART driver
device          loop            # Network loopback
device          ether           # Ethernet support
device          vlan            # 802.1Q VLAN support
device          tuntap          # Packet tunnel.
device          pty             # BSD-style compatibility pseudo ttys
device          md              # Memory "disks"
device          gif             # IPv6 and IPv4 tunneling
device          firmware        # firmware assist module
device          bpf             # Berkeley packet filter
options         USB_DEBUG       # enable debug msgs
device          uhci            # UHCI PCI->USB interface
device          ohci            # OHCI PCI->USB interface
device          ehci            # EHCI PCI->USB interface (USB 2.0)
device          xhci            # XHCI PCI->USB interface (USB 3.0)
device          usb             # USB Bus (required)
device          uhid            # "Human Interface Devices"
device          ukbd            # Keyboard
device          umass           # Disks/Mass storage - Requires scbus and da
device          ums             # Mouse
device          hid             # Generic HID support

options         DUMMYNET
options         IPFIREWALL
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         QUOTA                   #enable disk quotas
options         HZ=1000
options         DEVICE_POLLING          # gryzie si/e z SMP
options         IPFIREWALL_VERBOSE      #print information about
options         IPFILTER_LOG

options         ATA_STATIC_ID   # Static device numbering

options         IMAGACT_BINMISC # enables application execution through emulators

# vt is the new video console driver
device          vt
device          vt_vga
device          vt_efifb

# poni/zsze nie dzia/la. Zamiast tego trzeba u/zy/c teken w /boot/loader.conf
options         TERMINAL_NORM_ATTR="(FG_GREEN|BG_BLACK)"
options         TERMINAL_KERN_ATTR="(FG_YELLOW|BG_BLACK)"

HQ13x64

include         COMMON13
ident           HQ13x64
cpu             HAMMER
machine         amd64

device          ada
device          ahci
device          ata

options         COMPAT_FREEBSD32
options         COMPAT_FREEBSD12
options         COMPAT_43TTY
options         COMPAT_LINUX32

Kompilacja źródeł (/usr/src)

Wykorzystanie ccache

Można wykorzystać ccache w celu przyspieszenia kompilacji. Co prawda pierwsza kompilacja nie jest szybsza (w końcu cache musi powstać), ale kolejne powinny znacząco skrócić czas kompilacji źródeł systemu.

Instalacja ccache

Z wykorzystaniem własnego repozytorium pakietów zainstalować sam ccache:

pkg install -Uy ccache

Konfiguracja globalna

W pliku /usr/local/etc/ccache.conf wykonujemy konfigurację:

cache_dir = /var/cache/ccache
max_size = 5.0G

Oraz wykonujemy katalog na cache:

mkdir -p /var/cache/ccache

# albo jako oddzielny zfs
zfs create sys/data/v/cache/ccache

Ustawienia dla make

Program make musi być świadomy, że ma skorzystać z ccache. W tym celu należy w pliku make.conf dodać następujące wpisy (najlepiej w /etc/make/make.local.conf:

WITH_CCACHE_BUILD=      yes
CCACHE_DIR=             /var/cache/ccache

Wykorzystanie meta_mode

Drugim mechanizmem przyspieszającym kompilację jest wykorzystanie META_MODE. W tym celu trzeba wykonać dwa ustawienia.

make

WITH_META_MODE=         yes

Załadowanie modułu kernela

kldload filemon

Po wykonanej kompilacji powinno zadziałać polecenie kldunload filemon, ale niestety kończy się błędem "Device is in use". Ale rychły restart powinien znacznie pomóc.

Uruchomienie kompilacji

Jeżeli wykonujemy upgrade systemu z wersji do wersji, to może się zdarzyć, że w katalogach "roboczych" (/usr/obj) zostanie stara wersja programu bmake. Tak więc przed kompilacją warto usunąć katalog, aby wykonywanie kroku instalacji świata nie zwracało błędów.

rm -rf /usr/obj/usr/src/amd64.amd64/usr.bin/bmake/

Następnie (zgodnie z klasyką) uruchamiamy kompilację źródeł:

cd /usr/src

# okre/slenie maksymalnej liczby jednoczesnych zadań kompilacji
# sprawdzone w boju: ustawienie wartości większej niż 6 może powodować błędy.
${MAKEJOBS:=-j$(sysctl -n hw.ncpu)}
export $MAKEJOBS

# wykonanie poszczególnych kroków
make $MAKEJOBS buildworld && make $MAKEJOBS buildkernel && make installkernel KERNCONF=HQ11x64

# wykonanie ew. koniecznych instalacji plików konfiguracyjnych (zgodnie z manualem)
mergemaster -p

# Single user mode
make installworld

# synchronizacja plików konfiguracyjnych
# (ale wcześniej warto na chwilę skopiować skrypt startowy do sshd)
#
mv /etc/rc.d/sshd /etc/rc.d/sshd-old

Uruchomienie mergemaster

Narzędzie mergemaster aktualizuje pliki konfiguracyjne, startowe, etc. Niemniej kilka plików jest przechowywanych w lokalnym repozytorium, zatem konieczne jest zablokowanie w RCS do edycji.

# wykonanie CheckOut plików podlegających modyfikacji
cd /etc/
co -l syslog.conf newsyslog.conf sysctl.conf nsswitch.conf login.conf

# właściwy mergemaster
mergemaster -FUi

# zatwierdzenie zmian w lokalnym repozytorium RCS:
make ci CI_MSG='*** upgrade do ... ***'

Migracja z 12.x

W przypadku migracji z poprzedniej wersji systemu należy najpierw wykonać aktualizację pakietów, a potem dopiero czyszczenie starych bibliotek oraz plików. Problemem może być np. bash, który jest zależny od systemowej biblioteki ncurses.

Wyczyszczenie starych plików/katalogów

/!\ /!\ /!\ Ten krok należy wykonać po aktualizacji wszystkich pakietów (patrz własne repozytorium pakietów). W przeciwnym przypadku nie wystartują różne usługi, jak OpenSSH, smartmontools czy OpenNTPd. /!\ /!\ /!\

Po wykonaniu aktualizacji "świata" oraz synchronizacji konfiguracji warto usunąć nieużywane biblioteki, pliki oraz katalogi. W tym celu wykonaujemy polecenia:

cd /usr/src/
make check-old-dirs | egrep -v '^>' > /tmp/old.dirs

# wyłączamy podstawowe narzędzia DNSowe - potem zostaną nadinstalowane
#
# jeżeli ma działać nadal ssh, to trzeba pozostawić wszystkie potrzebne elementy
make check-old-files check-old-libs | egrep -v '^>' > /tmp/old.files

# wyczyszczenie flag dla wybranych programów (do wykonania po świeżej instalacji)
#
chflags noschg /bin/rcp /usr/bin/rlogin /usr/bin/rsh

# kasowanie plików
#
cat /tmp/old.files | xargs -n 20 rm

# usunięcie pustych katalogów
#
cat /tmp/old.dirs | xargs -n1 rmdir

Wyczyszczenie pozostałości po SSH

Jeżeli jest dostęp do konsoli fizycznej i nie ma potrzeby zostawiania systemowej wersji OpenSSH, to należy usunąć pliki binarne związane z SSH (właściwie tylko scp)

rm /usr/bin/scp

Usunięcie bitów suid

Korzystając z repozytorium skryptów wykonujemy usunięcie SUIDbits z wybranych programów:

perl /usr/local/admin/remove-suids-freebsd.pl /usr/local/admin/remove-suids-freebsd.txt

Doinstalowanie ntpdate

Zadaniczo korzystamy z OpenNTPd, zamiast bazowego ntp. Niemniej przydatne jest narzędzie ntpdate. Zatem konieczne jest doinstalowanie tego narzędzia:

cd /usr/src/usr.sbin/ntp/libntp
make all

cd ../ntpdate/
make all install

Doinstalowanie libmilter

Dla serwerów pocztowych konieczne jest ponowne zainstalowanie libmilter:

mkdir -p /usr/include/libmilter

cd /usr/src/lib/libmilter
make all install

Doinstalowanie libcom_err

Biblioteka potrzebna w szczególności w repozytroium pakietów np. dla fetchmail.

cd /usr/src/lib/libcom_err
make all install

Końcowe porządki w jails po aktualizacji systemu operacyjnego

Jeżeli jest to serwer wykorzystujący mechanizm jails, to należy wykonać aktualizację jails.

mergemaster w jails

W celu wykonania mergemaster w jails należy wykonać następujące kroki:

for _jailname in `jls | awk '/jails/ {print $4}'`
do
      mount -t nullfs -o ro /usr/src ${_jailname}/basejail/usr/src
done

{i} Logując się do konsoli każdego z jails, wykonujemy polecenia mergemaster (lokalnie).

Narzędzie mergemaster aktualizuje pliki konfiguracyjne, startowe, etc. Niemniej kilka plików jest przechowywanych w lokalnym repozytorium, zatem konieczne jest zablokowanie w RCS do edycji.

# wykonanie CheckOut plików podlegających modyfikacji
cd /etc/
co -l syslog.conf newsyslog.conf sysctl.conf nsswitch.conf login.conf

# właściwy mergemaster
mergemaster -FUi

# zatwierdzenie zmian w lokalnym repozytorium RCS:
make ci CI_MSG='*** upgrade do ... ***'

Po wykonaniu mergemaster, należy odmontować katalogi ze źródłami:

for _jailname in `jls | awk '/jails/ {print $4}'`
do
      umount ${_jailname}/basejail/usr/src
done

Usunięcie bitów suid

Korzystając z repozytorium skryptów wykonujemy usunięcie SUIDbits z wybranych programów:

cat /usr/local/admin/remove-suids-freebsd.txt | sed -e 's|/|/usr/jails/basejail/|' > /usr/local/admin/remove-suids-basejail.txt
perl /usr/local/admin/remove-suids-freebsd.pl /usr/local/admin/remove-suids-basejail.txt

Usunięcie niepotrzebnych plików, bibliotek oraz katalogów

cd /usr/src/
make DESTDIR=/usr/jails/basejail check-old-dirs | egrep -v '^>' > /tmp/old.dirs

# wyłączamy podstawowe narzędzia DNSowe - potem zostaną nadinstalowane
#
# jeżeli ma działać nadal ssh, to trzeba pozostawić wszystkie potrzebne elementy
make DESTDIR=/usr/jails/basejail check-old-files check-old-libs | egrep -v '^>' > /tmp/old.files

# kasowanie plików
#
cat /tmp/old.files | xargs -n 20 rm

# usunięcie pustych katalogów
#
cat /tmp/old.dirs | xargs -n1 rmdir

Źródła w sieci internet

  1. różnica pomiędzy sc a vt

  2. sc(4)

  3. vt(4)

Odnośniki do dokumentacji

  1. Przygotowania do aktualizacji

  2. Kompilowanie źródeł systemu

  3. Użycie mergemaster

  4. Końcowe porządki po aktualizacji


{i}  (c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.

AktualizacjaSystemu13 (ostatnio edytowane 2024-01-04 14:40:18 przez wtps0n)