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 10.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 wlasnego kernela

Od wersji 9.x zamiast dysków numerowanych zgodnie z podłączeniami SATA wykorzystywany jest "mechanizm" nazewnictwa dysków jako ada0, ada1, etc. Aby móc z tego korzystać w konfiguracji kernela muszą się znaleźć następujące opcje:

device          ata
device          ada
options         ATA_CAM         # Handle legacy controllers with CAM
options         ATA_STATIC_ID   # Static device numbering

COMMON10

Pełna konfiguracja (na podstawie serwerka domowego):

ident           GOMMON10

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

options         SCHED_ULE               # ULE scheduler
options         PREEMPTION              # Enable kernel thread preemption
options         INET                    # InterNETworking
options         INET6                   # IPv6 communications protocols
options         SCTP                    # Stream Control Transmission Protocol
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_PART_GPT           # GUID Partition Tables.
options         GEOM_LABEL              # Provides labelization
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         MAC                     # TrustedBSD MAC Framework
#options        KDTRACE_HOOKS           # Kernel DTrace hooks
options         INCLUDE_CONFIG_FILE     # Include this file in kernel
options         KDB                     # Kernel debugger related code
options         KDB_TRACE               # Print a stack trace for a panic
options         SMP                     # Symmetric MultiProcessor Kernel
#device         apic                    # I/O APIC
device          cpufreq
device          acpi
device          eisa
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          ctl             # CAM Target Layer
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
options         SC_PIXEL_MODE   # add support for the raster text mode
device          agp             # support several AGP chipsets
#device         pmtimer
device          uart            # Generic UART driver
device          loop            # Network loopback
device          random          # Entropy device
device          ether           # Ethernet support
device          vlan            # 802.1Q VLAN support
device          tun             # Packet tunnel.
device          pty             # BSD-style compatibility pseudo ttys
device          md              # Memory "disks"
device          gif             # IPv6 and IPv4 tunneling
device          faith           # IPv6-to-IPv4 relaying (translation)
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

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

HQ10x64

include         COMMON10
ident           HQ10x64
cpu             HAMMER
machine         amd64

device          ada
device          ahci
device          ata

options         SC_NORM_ATTR="(FG_GREEN|BG_BLACK)"
options         SC_NORM_REV_ATTR="(FG_CYAN|BG_BLACK)"
options         SC_KERNEL_CONS_ATTR="(FG_YELLOW|BG_BLACK)"
options         SC_KERNEL_CONS_REV_ATTR="(FG_BLACK|BG_CYAN)"

options         COMPAT_FREEBSD32
options         COMPAT_43TTY
options         COMPAT_LINUX32

Zmiana konsoli sc na vt (UEFI)

Od pewnego czasu obsługa konsoli w systemie została zmieniona z sc(4) na vt(4). Szczególnie należy mieć na uwadze wykorzystanie vt(4) w przypadku uruchamiania systemu z UEFI. Zgodnie z opisem idei sterownika vt(4) wspiera kodowanie UTF-8, lepsze wykorzystanie trybu graficznego, etc.

Konfiguracja własnego kernela powinna wyglądać następująco:

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

options         TERMINAL_NORM_ATTR="(FG_GREEN|BG_BLACK)"
options         TERMINAL_KERN_ATTR="(FG_YELLOW|BG_BLACK)"

Kompilacja źródeł

Dalej to już klasyka aktualizacji systemu:

cd /usr/src
${MAKEJOBS:=-j$(sysctl -n hw.ncpu)}
export $MAKEJOBS
make $MAKEJOBS buildworld && make $MAKEJOBS buildkernel && make installkernel KERNCONF=HQ10x64

# 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

mergemaster -FUi

Single User Mode w So You Start


Single User Mode w OVH/SYS

W OVH nie ma dostępu do konsoli, zatem wszystko trzeba wykonywać ostrożnie, bo pomyłka drogo kosztuje (głównie czas). Po kompilacji źródeł, należy ustawić NetBoot na tryb bsd-rescue (wersja 11) i zrestartować serwer (wystarczy zwykły reboot). Po zalogowaniu należy wykonać następujące kroki:

kldload geom_mirror
kldload geom_stripe
kldload zfs

mount -t ufs /dev/mirror/root /mnt
mount -t devfs -o rw devfs /mnt/dev

chroot /mnt /bin/sh

# zamontowanie wszystkich punktów, co prawda dla zfs będzie krzyk, ale to nie szkodzi
mount -a

# zamontowanie zfs
# mój zfs jest w nowszej wersji, aniżeli kernel z trybu rescue. Dlatego też można zaimportować pulę, ale w trybie RO
zpool import -o readonly=on tank

Instalacja kernela oraz świata

Przy zmianie wersji (np. 11 -> 12) konieczne jest wykonanie mergemaster -p:

# zmiana domyślnego katalogu roboczego dla mergemaster-a
mergemaster -t /tmp/tmproot -p

Następnie wykonujemy zainstalowanie kernela, świata.

cd /usr/src/
make -j 8 installworld | tee /tmp/`/bin/date "+%Y%m%dT%H%M"`.iw.log 2>&1

Następnie można wykonać mergemaster -FUi i skasować niepotrzebne skrypty startowe. Ze względu n

# zmiana domyślnego katalogu roboczego dla mergemaster-a
mergemaster -t /tmp/tmproot -FUi

Odmontowanie wszystkich partycji

Wyjście z chroot nie powoduje poprawnego odmontowania wszystkich partycji, ale można to zrobić wg następujących kroków:

# przy ostatnim upgrade 10->11 poniższe kroki należało wykonać po wyjściu z 'chroot'
zfs umount -a
umount /mnt/var
umount /mnt/usr
umount /mnt/tmp
umount /mnt/dev/fdescfs
umount /mnt/dev
umount /mnt


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

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


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

AktualizacjaSystemu10 (ostatnio edytowane 2017-04-20 22:26:57 przez wtps0n)